第十一章 面向对象技术
- 面向对象基础:面向对象基本概念、面向对象分析、面向对象设计、面向对象测试
- UML:事务、关系、图
- 设计模式:创建型设计模式、结构型设计模式、行为型设计模式
1.面向对象基本概念
-
对象:基本的运行实体,为类的实例,封装了数据和行为的整体,如学生、汽车等真实存在的实体。对象具有清晰的边界、良好定义的行为和可扩展性。
-
消息:对象之间进行通信的一种构造称为消息。
-
类:是对象的抽象,定义了一种大体相似的对象结构,定义了数据和行为。包括实体类、边界类、控制类。
-
继承:父类和子类之间共享数据和方法的机制。是类之间的一种关系。
-
多态:不同的对象收到同一个消息时产生完全不同的反应。包括参数多态、包含多态、过载多态、强制多态。多态由继承机制支持。
-
覆盖:子类中重定义一个与父类同名同参的方法。
-
函数重载:与子类父类无关,函数可以是同名但不能同参数。
-
封装:使对象的使用者和生产者分离。
-
静态类型是指一个对象的类型在编译时就确定
-
动态类型指对象类型在运行时才能确定。
2.面向对象分析设计
- 面向对象分析:是为了确定问题域,理解问题。
- 包含五个活动:认定对象、组织对象、对象间的相互作用、确定对象的操作、定义对象的内部信息(属性)。
- 面向对象的设计:是设计分析模型和实现相应源代码,在目标代码环境中这种源代码可被执行。设计问题域的解决方案。
- 面向对象程序设计:用面向对象程序设计语言实现设计方案。
- 面向对象测试:
- 分为四个层次:算法层、类层、模板层、系统层。
3.UML
- UML是统一建模语言,和程序设计语言并无关系。
- UML三个要素:UML的基本构造块、支配这些构造块如何放置在一起的规则和运用与整个语言的一些公共机制。
- UML的基本构造块包括:事物(对模型中最具有代表性的成本的抽象)、关系(把事务结合在一起)、图(聚集了相关的事物)。
- UML中有四种事物:结构事物、行为事物、分组事物、注释事物。
4.事物
结构事物
- 模型的静态部分,如类、接口、用例、构件等。
行为事物
- 模型的动态部分,如交互、活动、状态机。
分组事物
- 模型的组织部分,如包。
注释事物
- 模型的解释部分,依附于一个元素或一组元素之上对其进行约束或解释的简单符号。
5.关系
-
依赖:一个事物的语义依赖于另一个事物的语义的变化而变化。
-
关联:是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系,其中组合事物之间关系更强。
-
泛化:一般/特殊的关系,子类和父类之间的关系。
-
实现:一个类元指定了另一个类元保证执行的契约。
6.UML中的结构图(静态)
1.类图
- 静态图,为系统的静态设计视图,展现一组对象、接口、协作和它们之间的关系。
2.对象图
- 静态图,展现某一时刻一组对象及它们之间的关系,为类图的某一快照。在没有类图的前提下,对象图就是静态设计视图。
3.用例图
- 静态图,展现了一组用例、参与者以及它们之间的关系。
- 用例图中的参与者是人、硬件或其他系统可以扮演的角色;用例是参与者完成的一系列操作。
- 用例之间的关系:包含、扩展、泛化。
4.构件图
- 静态图,为系统静态实现视图,展现了一组构件之间的组织和依赖。
5.部署图
- 静态图,为系统静态部署视图,部署图物理模块的节点分布。用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。对系统的静态部署视图进行建模,与构件图相关。
7.UML中的结构图(动态)
1.序列图(顺序图)
- 动态图,是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。
- 有同步消息、异步消息、返回消息。
2.通信图(协作图)
- 动态图,是顺序图的另一种表示方法,也是由对象和消息组成的图,强调事件之间的通信。
3.状态图
- 动态图,展现了一个状态机,描述单个对象在多个用例中的行为,包括简单状态和组合状态。
4.活动图
- 动态图,是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。专注于系统的动态视图,强调对象间的控制流程。
8.设计模式
- 设计模式:主要关注软件系统的设计,与具体的实现语言无关。
- 设计模式的四个基本要素:模式名称、问题、解决方案、效果。
- 分为三类:
- 创建型模式:处理创建对象
- 结构型模式:处理类和对象的组合。
- 行为型模式:描述类或者对象的交互行为。
9.创建型设计模式
创建型设计模式 | 定义 | 记忆关键字 |
---|---|---|
抽象工厂模式(Abstract Factory) | 提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类 | 抽象接口 |
构建器/生成器模式(Builder) | 将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示 | 类和构造分离 |
工厂方法模式(Factory Method) | 定义一个创建对象的接口,但由子类决定需要实例化哪一个类。使得子类实例化过程推迟。 | 子类决定实例化 |
原型模式(Prototype) | 用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象 | 原型实例,拷贝 |
单例模式(Singleton) | 保证一个类只有一个实例,并提供一个访问它的全局访问点 | 唯一实例 |
10.结构型设计模式
结构型设计模式 | 定义 | 记忆关键字 |
---|---|---|
适配器模式(Adapter) | 将一个类的接口转换成用户希望得到的另一种接口,它使原本不相容的接口得以协同工作。 | 转换,兼容接口 |
桥接模式(Bridge) | 将类的抽象部分和它的实现部分分离开来,使它们可以独立的变化 | 抽象和实现分离 |
组合模式(Composite) | 将对象组合成树型结构以表示“整体–部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性 | 整体–部分,树形结构 |
装饰模式(Decorator) | 动态的给一个对象添加一些额外的职责。它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活。 | 附加职责 |
外观模式(Facade) | 定义一个高层接口,为子系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用。 | 对外统一接口 |
享元模式(Flyweight) | 提供支持大量细粒度对象共享的有效方法 | 细粒度,共享 |
代理模式(Proxy) | 为其他对象提供一种代理以控制这个对象的访问 | 代理控制 |
11.行为型设计模式
行为型设计模式 | 定义 | 记忆关键字 |
---|---|---|
职责链模式(Chain of Responsibility) | 通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求 | 传递请求、职责、链接 |
命令模(Command ) | 将请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 | 参数化、日志记录 |
解释器模式(Interpreter) | 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 | 文法、解释 |
迭代器模式(Iterator) | 提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示。 | 顺序访问 |
中介者模式(Mediator) | 用一个中介对象来封装一系列的对象交互。使各对象不需要显式地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互。 | 不直接引用 |
备忘录模式(Memento) | 在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。 | 保存,恢复 |
观察者模式(Observer) | 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都能得到通知,并被自动更新。 | 通知、自动更新 |
状态模式(State) | 允许一个对象在其内部状态改变时改变它的行为。 | 状态变成类 |
策略模式(Strategy) | 定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 | 算法替换 |
模板方法(Template Method) | 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 | |
访问者模式(Visitor) | 标识一个作用于某对象结构中的各元素的操作,它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。 | 新操作 |