引言
本章包括以下内容:
- 设计基础:设计是什么?面向对象设计和过程式编程有什么不同?
- 类的内容:如何决定一个类中应该包含什么?
- 封装(encapsulation):在类的接口后面隐藏实现和数据。
- 多态(polymorphism):使用一个共同的父类,允许在运行时透明地替换特定的子类。
- UML:使用图表来描述面向对象结构。
面向对象和过程式编程的一个核心区别是如何分配职责。
职责、内聚(cohesion)、耦合、正交(orthogonality)。
4个方向标:
- 代码重复
- 类知道的太多
- 万能的类
- 条件语句
UML
the UML 是 Unified Modeling Language (统一建模语言)的缩写。
类图
描述类
属性
操作
描述继承
描述实现
关联
继承只是面向对象系统中诸多关系中的一种。
当一个类的属性保存了对另一个类的一个实例(或多个实例)的引用时,就产生了关联。
聚合
与关联很相似,聚合(aggregation)描述了一个类长期持有其他类的一个或多个实例的情况。 通过聚合,被引用的对象实例成为引用对象的一部分。
组合
组合和聚合类似,组合是一个更强的关系。在组合中,被包含对象只能被它的容器所引用。当容器被删除时,它也应该被删除。
描述使用
一个对象使用另一个对象的关系在UML中被描述为一个依赖关系。它是很短暂的一种关系,因为它并非描述类之间的长久关系。 使用类并没有把被使用类保存为类中的属性,只是把被使用的类作为类方法的参数或者作为方法调用的结果得到。 与关联有着根本的不同。
使用注解
类图可以捕捉到系统的结构,但类图并不能解释类处理任务的过程。所以可以使用注解来补充说明。
时序图
时序图(sequence diagram)是基于对象而不是基于类的,它用于为系统中过程化的行为建模。
参考资料
《深入PHP 面向对象、模式与实践(第3版)》 https://ibaiyang.github.io/blog/books/深入PHP面向对象模式与实践.pdf