- 抽象:abstraction 抽象是事物区别其他事物本质特征的过程。(定义一个什么样的类)
是一个分析和理解的过程
抽象的结果取决于使用者的目的。
包括使用者所感兴趣的内容,忽略掉其他不相关的内容。
举例:对于同一群人,不同的人抽象的结果不同
如公安部 对这一群人 抽象的结果就是 人 普通的公民
在医院做检查时,男女的区别很大,抽象的结果是男 女
在公司或者学校这个场景 抽象的结果为老板 员工, 老师 学生。
抽象取决于项目的上下文(需求)
- 封装:encapsulation : 封装是对客户(使用者)隐藏其细节
用户关心产品提供的接口,而不用关心其实现细节。
通过封装来实现信息和数据隐藏
举例:我们使用遥控器 控制电视,只需要知道遥控器的按钮可以控制电视即可,而无需知道遥控器设计的细节,遥控器的构造由其外壳封装,一般由稳定的东西封装不稳定的东西。让使用者操作起来不会太困难。
结构化程序设计中, 程序 = 数据结构 + 算法
但是 难以保证数据一致性
举例: 比如 定义一个员工,C语言使用结构体 ,则该员工的结构体信息容易被篡改,而使用java中的私有化关键字来修饰所需的属性,再使用 get set 方法来操作属性,避免了数据被任意篡改。
封装的可见性问题:四个层级:
public package protected private 表示了数据封装的程度。
- 分解:decomposition
分解是指将一个单一的大的复杂系统分解为若干个不同的小构件。分解的构建通过抽象 封装等技术形成相对独立的单元,然后删繁就简,分而治之。
结构化方法中通过 函数 模块进行 分解
面向对象方法中 通过 类 对象 打包 分层
- 泛化: generalization
泛化是类之间"是的关系" ,意思是一般化,该关系是:一个类可以继承其父类的结构和行为。可以用继承来实现。
可以分为单一继承,和多重继承。
子类可以继承父类一切的对象东西 但仍然受到封装性的约束。
子类可以添加新的属性和方法 并且重新定义父类的方法(方法重写)
设计继承层次:继承父类并扩展。
- 多态:多态是面向对象技术的本质特征,同一个外表下(接口)有不同的行为。举例:一个USB接口 可以插U盘,鼠标等不同。
多态体现了 接口的通用性,有效了解决了需求变更的问题。多个实现类,都可以通过同一行代码来实现。
举例:我们要调用三角形的画图方法,但是原来代码没有,我们就要重新修改很多代码。但有了接口的话,(左父右子)用接口名来调用方法即可 。
-
分层: Hierachrcy: 面对不同的目标建立不同的抽象级别层次,从而在不同的抽象级别层次进行分解。进一步简化对系统的理解。
先分层再分解
两种分层结构:
类分层结构 : 泛化关系 ,类继承结构
对象分层结构: 对象间组成结构,大的对象由小的对象组成。 -
Reuse(复用);
通过已有的软件知识来构建新的软件
软件可以看成具有独立功能的各个组件的结合体
编写新的软件可以看成 这些构件的结合体。
应用复用原则:代码复用 设计复用 架构复用(ssh ) 需求复用 领域复用
在特定领用设计需求使,也要考虑更大粒度,更高层次的复用。
考虑到通用性。