面向对象-设计原则

设计模式

第 10 章 面向对象设计

类的功能只有一个,只解决一个问题

一个类功能越多,他与其他类关联越多。这样就是紧耦合

紧耦合就是模块或者系统之间关系太紧密,存在相互调用。

这样可以降低系统的耦合度

第 10 章 面向对象设计

用拓展的方式和新的类去解决新的问题

因为用修改的方式会容易引入错误

第 10 章 面向对象设计

子类的功能强于父类。

但有时子类无法替换父类,例如子类对父类的方法进行覆盖和重载,那么他们的功能将不一致。这样会出现安全隐患。

李氏原则提倡少用覆盖和重载,因为其他人可能不知道你覆盖和重载了父类的某些方法,这样在调用子类被覆盖和重载的方法时就会出错。

如果想让子类随时能替代父类,那么就少"重载"。

第 10 章 面向对象设计

但是如果父类是一个接口,那么上面的问题就不再存在了。

所以编程要针对接口编程,而不进行具体的类进行编程。

所以面向对象的核心是抽象

计算机用的是接口:更换显卡,只需要拔掉再插上一个新的显卡就行

电视机用的是焊接:必须要进行焊接才能装上

第 10 章 面向对象设计

避免职责过多而造成疏漏

第 10 章 面向对象设计

继承要少用

用继承的话,父类变了,所有的子类也要跟着改变。

所以要多用组合。

 

继承inheritance),是类 D 的对象可以使用仅对类C的对象有效的方法或者属性的特性,它使得这些方法和属性就好像是由类 D 定义的。这时,是 的父类,D 是 的子类。在继承结构中,父类的内部细节对于子类是可见的。所以我们通常也可以说通过继承的代码复用是一种"白盒式代码复用"。

组合composition),是通过对现有的对象进行拼装(组合)产生新的、更复杂的功能。因为在对象之间,各自的内部细节是不可见的,所以我们也说这种方式的代码复用是"黑盒式代码复用"。

 

第 10 章 面向对象设计

知道越多就越容易绕开规则,对另一个对象的属性和方法进行调用

解决的方法是使用封装。

 

 

需求开发-需求分析-OOA-UML

 (UML)又称统一建模语言或标准建模语言

第 10 章 面向对象设计

构造块

 

结构图

 

行为图

 

静态图

 

动态图

 

 

用例图:动态图(大多数情况)

表达的是系统和外部的交互关系

第 10 章 面向对象设计

 

顺序图:强调按"时间"顺序

 

通信图:不强调时间顺序

 

状态图:状态的变迁转移的情况

 

活动图:与流程图的结构相同

 

 

部署图:软件的构建应该部署在哪个硬件节点上

 

面向对象-设计模式的概念

从高中低三个复用级别进行分来

 

 

 

 

 

架构模式:

第 10 章 面向对象设计

高层决策:从全局来看待问题得到的结论

设计模式:

局部问题的设计问题,比如楼梯的样子,窗帘的形状

 

第 10 章 面向对象设计

在构件的设计中会用到

惯用法:

最低,可以从与语言相关看出来

第 10 章 面向对象设计

面向对象-设计模式的分类

创建型模式:创建对象

第 10 章 面向对象设计

把创建对象的工作交给工厂

第 10 章 面向对象设计

结构型模式:处理类和对象的组合问题

让类和对象形成更大的规模,实现更高的指导

第 10 章 面向对象设计

行为型模式:

描述类和对象交互的情况,以及职责的分配问题

第 10 章 面向对象设计

面向对象-创建型模式

抽象工厂

做系列产品,比如创建数据库相关的一系列组件,指定生产的数据库是access,那么所有生产的部件都是access数据库的,如果指定的部件是oracle的那么生产的所有部件都是oracle的

只需要指定系列名,而不需要指定具体的类,就能生产产品

构建器模式

 

要构造某一个复杂的对象,这个对象可能是由多个不同的对象组合起来的。

把各个部分封装起来,对各个部分指定不同的部件,最后实现实例

 

工厂方法模式

在运行的时候去指定要创建的是哪一个类的对象

 

推迟子类的实例化

 

 

原型模式

相比用new创建新的对象,原型模式的效率会更加高一些。

单例模式

一个类只有一个实例

比如:浏览器里面可以打开多个页面,但是浏览器的主窗口只有一个

面向对象-结构型模式

第 10 章 面向对象设计

第 10 章 面向对象设计

边界类

第 10 章 面向对象设计

 

 

面向对象-行为型模式

第 10 章 面向对象设计

 

 

 

 

第 10 章 面向对象设计

财务审批: 500块以下 (1)处理,2000以内(2)处理(签批)

避免请求者与多个接收者进行联系

 

 

第 10 章 面向对象设计

 

解释器模式相当构造了一个虚拟机去处理问题

第 10 章 面向对象设计

比如指针的.next,访问下一个元素,而不是用a[8]这样的方式去访问一个对象中的各个元素

第 10 章 面向对象设计

上面是两个对象进行消息的直接传递,A有变化,B要跟着改变

 

第 10 章 面向对象设计

如果他们之间有一个中间对象,那么当A改变,改变这个中间对象就可以了。

这在多对象交互的时候很有作用。

第 10 章 面向对象设计

 

 

 

第 10 章 面向对象设计

开辟一片空间把对象的目前的状态信息存下来,以便以后可以恢复到这个状态

第 10 章 面向对象设计

Excel的a1=1 a2=2 a3 = a1+a2

 

 

第 10 章 面向对象设计

比如会员的级别

第 10 章 面向对象设计

对一组数进行排序,选择算法

第 10 章 面向对象设计

相关文章: