临近期末复习,光看教材让人毫无头绪,故借再次分析和总结以往做过的实验来巩固知识要点。下面是我重温Lab3的时候的思考与心得体会。
Lab3:
目标分析
本次实验覆盖课程第 4-11 讲的内容,目标是编写具有可复用性和可维护性的
软件,主要使用以下软件构造技术:
⚫ 子类型、泛型、多态、重写、重载
⚫ 继承、代理、组合
⚫ 语法驱动的编程、正则表达式
⚫ API 设计、API 复用
本次实验给定了三个具体应用(值班表管理、操作系统进程调度管理、大学
课表管理),学生不是直接针对每个应用分别编程实现,而是通过 ADT 和泛型等
抽象技术,开发一套可复用的 ADT 及其实现,充分考虑这些应用之间的相似性
和差异性,使 ADT 有更大程度的复用(可复用性)和更容易面向各种变化(可
维护性)。
知识点:
对应期末复习的第9-12章节内容,
LSP原则:
- 子类可以增加方法,但是不能删除方法
- 子类型需要实现抽象类型中所有未实现的方法
- 子类型中重写的方法必须有相同类型的返回值
- 子类型重写的方法必须使用同样类型的参数
- 子类型中重写的方法不能抛出额外的异常
要求更弱的前置条件与更强的后置条件
协变
反协变
泛型中通配符
我们在定义泛型类,泛型方法,泛型接口的时候经常会碰见很多不同的通配符,比如 T,E,K,V 等等,这些通配符又都是什么意思呢?
常用的 T,E,K,V,?
本质上这些个都是通配符,没啥区别,只不过是编码时的一种约定俗成的东西。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。通常情况下,T,E,K,V,?是这样约定的:
?表示不确定的 java 类型
T (type) 表示具体的一个java类型
K V (key value) 分别代表java键值中的Key Value
E (element) 代表Element
如果子类只需要用到父类中的一小部分方法,那么可以不通过继承,而使用委派机制实现,从而避免继承大量无用方法
示例:
composite Rues Principle
(CRP)
组成优先于继承
OO Design Principles: SOLID
语法和正则表达式
连接,重复和选择
设计模式
创建型模式
工厂方法模式:
Facotory method
结构型模式
Adapter适配器模式
Decorator
行为类模式
Strategy
Template method
Iterator
Visitor