1. 内容
- 软件设计原则:高内聚和低耦合
- 每个对象都只能满足某些请求,这些请求由对象的接口(interface)定义。
- 每个对象都能很好的完成一项任务,而不试图做更多的事。
- 访问控制的存在原因:
- 客户端程序员(调用别人写好的类库的程序员)不能调用他们不应该调用的方法
- 写库的大佬可以改变类内部的工作方式,而不用担心会影响客户端程序员
- 访问权限:public、默认(包权限)、ptotected、private
- UML中每个类用一个方框表示,类名在方框的顶部,数据成员在中间,方法在底部。通常只有类名和公共方法被显示于UML设计图中。
- 创建新类时应该首先考虑组合——一个类是另一个类的成员对象
- 继承
- 子类与父类有差异的方式:
- 直接在子类中添加方法
- 方法的覆写
- 判断是否继承,要确定是否可以用 is-a 来描述类之间的关系,例如:点是一个几何形状。
- 在子类中添加了新方法构成了is-like-a关系,由于父类无法访问子类新添加的方法。
- 子类与父类有差异的方式:
- 后期绑定
- 非OOP程序的编译器产生的函数调用会引起前期绑定,即运行时直接加在这个函数的绝对地址。而OOP采用后期绑定,调用的函数只有在运行时候才能确定,编译器只保证调用方法的存在,对调用函数和返回值进行检查,但是不知道将被执行的确切代码(不提供此类保证的语言称为弱类型)。
- 为了这样的机制能够正确执行,java使用一小段特殊的代码来代替绝对地址调用,以此用来计算真正调用的方法体的地址。
- 向上转型
- 将子类看做父类的过程(upcasting)
- 单根继承结构
- 除了c++,所有的oop语言所有的类都继承自一个终极基类,java中是Object。
- 好处:
- 所有对象都可以在堆上面很轻易的创建
- 参数传递得到了极大的简化
- 使得垃圾回收机制的实现变得容易了很多,所有的对象都有具体的类型信息,不会发生因为无法确定类型而陷入僵局
- 容器
- 也成为集合,list、set、map等
- 泛型
- Internet
- 客户/服务器
- 客户端编程