三大特性
封装
利用抽象数据类型将数据和操作数据的方法封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问对象。
优点:
- 减少耦合:可以独立地开发、测试、优化、使用、理解和修改
- 减轻维护的负担:可以更容易被程序员理解,并且在调试的时候可以不影响其他模块
- 有效地调节性能:可以通过剖析确定哪些模块影响了系统的性能
- 提高软件的可重用性
- 降低了构建大型系统的风险:即使整个系统不可用,但是这些独立的模块却有可能是可用的
继承
继承实现IS-A关系,子类可以从父类获取父类非private的属性和方法。
继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。
父类引用指向子类对象称为向上转型。
多态
多态分为编译时多态和运行时多态:
- 编译时多态主要指方法的重载
- 运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定 运行时多态有三个条件:
- 继承
- 覆盖(重写)
- 向上转型
类图
泛化关系(Generalization)
用来描述继承关系,在Java中使用extends关键字。
实现关系(Realization)
用来实现一个接口,在Java中使用implement关键字。
聚合关系(Aggregation)
表示整体由部分组成,但是整体和部分不是强依赖的,整体不存在了部分还是会存在。
组合关系(Composition)
和聚合不同,组合中整体和部分是强依赖的,整体不存在了部分也不存在了。
关联关系(Association)
表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。因此也可以用1对1、多对1、多对多这种关联关系来表示。
依赖关系(Dependency)
和关联关系不同的是,依赖关系是在运行过程中起作用。A类和B类是以来关系主要有三种形式:
- A类是B类中的(某个方法的)局部变量;
- A类是B类方法当中的一个参数;
- A类向B类发送消息,从而影响B类发生变化;