软件设计师-15,面向对象技术
Joker2Yue面向对象基础、UML、设计模式
NULL
大纲
面向对象基础
面向对象基本概念
术语 | 定义 |
---|---|
对象 | 基本的运行实体,通常是现实世界中的真实存在实体的抽象。每个对象封装了数据和行为的整体,例如学生、汽车等。对象具有清晰的边界,定义了良好的行为和可扩展性。 |
消息 | 消息是对象之间进行通信的方式。通过消息,一个对象可以请求另一个对象执行特定的行为。消息是对象之间交互的基本构建块。 |
类 | 类是对象的抽象,它定义了一组大致相似的对象结构,包括它们的数据和行为。有几种类型的类,包括实体类、边界类、控制类等。类模型还包括属性、操作和关联等元素。 |
继承 | 继承是一种机制,它允许一个类(子类)共享另一个类(父类)的数据和方法。子类继承了父类的属性和行为,可以根据需要扩展或修改它们。继承是类之间的一种关系。 |
多态 | 多态是指不同的对象在接收相同的消息时可以产生完全不同的响应。多态通过继承机制实现,包括参数多态、包含多态、过载多态、强制多态等。多态性提高了代码的灵活性。 |
覆盖 | 在子类中,可以通过重新定义与父类具有相同名称和参数的方法来覆盖(或重写)父类中的相应方法。子类可以自定义父类的行为。 |
函数重载 | 函数重载允许在同一类中定义具有相同名称但不同参数的多个函数。函数重载的关键是参数列表的不同,编译器根据参数类型和数量来区分不同的重载函数。 |
封装 | 封装是一种信息隐藏技术,目的是将对象的内部工作机制隐藏起来,使对象的使用者无需了解内部实现细节,只需知道如何使用对象。 |
静态类型 | 静态类型在编译时确定对象的类型,用于静态语言(如Java、C++)。编译器进行类型检查和绑定。 |
动态类型 | 动态类型在运行时才能确定对象的类型,用于动态语言(如Python)。根据对象实际引用来确定类型。 |
静态绑定 | 静态绑定是基于对象的静态类型进行方法调用的机制。编译时已知要调用的方法,方法绑定在程序执行前确定。 |
动态绑定 | 动态绑定是基于对象的动态类型进行方法调用的机制。根据对象实际引用的类型来确定要调用的方法。支持多态。 |
面向对象分析、设计与测试
-
面向对象分析是为了确定问题域,理解问题,包含五个活动:
- 认定对象:按自然存在的实体确定对象。
- 组织对象:分析对象之间的关系,抽象成类。
- 对象间的相互作用:描述各对象在应用系统中的关系。
- 确定对象的操作:定义对象的操作,如创建、增加、删除等。
- 定义对象的内部信息:定义对象的属性。
-
面向对象设计是设计分析模型和实现相应源代码,将问题域的解决方案具体化。
-
面向对象程序设计是使用面向对象程序设计语言实现设计方案。
-
面向对象测试与普通测试步骤并无不同,可分为四个层次:
- 算法层:测试类中定义的每个方法,类似单元测试。
- 类层:测试同一个类中所有方法与属性的相互作用,特有的模块测试。
- 模块层:测试一组协同工作的类之间的相互作用,类似集成测试。
- 系统层:类似系统测试。
例题
UML
基本概念
-
UML(Unified Modeling Language) 是一种统一建模语言,它与具体的程序设计语言无关。
-
UML包含三个要素:
-
UML的基本构造块:这些构造块是UML中的核心元素,用于描述和建模系统的各个方面。
-
规则:规定了如何将这些构造块组合在一起,以创建有意义的模型。
-
公共机制:这些机制是UML语言中的通用工具,用于处理和操作模型的元素。
-
-
UML的基本构造块主要包括以下三种:
- 事物:事物是对模型中最具代表性的成分的抽象表示。它们用于表示系统中的实体、对象、类等。
- 关系:关系用于将事物结合在一起,描述它们之间的联系和相互作用。关系用于建立对象之间的连接。
- 图:图是UML中的图形表示,用于聚集相关的事物和关系,以便更清晰地呈现系统的结构和行为。不同类型的图用于不同的建模目的。
-
事务
UML中有四种事务,结构事务、行为事务、分组事务、注释事务
-
结构事务:模型的静态部分,如类、接口、用例、构件等;如图示例:
-
行为事物:模型的动态部分,如交互、活动、状态机:
-
分组事物:模型的组织部分,如包;
-
注释事物:模型的解释部分,依附于一个元素或一组元素之上对其进行约束或解释的简单符号。
关系
-
依赖:一个事物的语义依赖于另一个事物的语义的变化而变化。
-
关联:是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系,其中组合事物之间关系更强。两个类之间的关联,实际上是两个类所扮演角色的关联,因此,两个类之间可以有多个由不同角色标识的关联。
-
泛化:一般特殊的关系,子类和父类之间的关系
-
实现:一个类元指定了另一个类元保证执行的契约。
图
-
类图:静态图,为系统的静态设计视图,展现一组对象、接口、协作和它们之间的关系。UML类图如下:
-
其中属性有:多重度、属性、操作、关系
-
-
对象图:静态图,展现某一时刻一组对象及它们之间的关系,为类图的某一快照。在没有类图的前提下,对象图就是静态设计视图。如下:
-
用例图:静态图,展现了一组用例、参与者以及它们之间的关系。
用例图中的参与者是人、硬件或其他系统可以扮演的角色;用例是参与者完成的一系列操作。
用例之间的关系:包含、扩展、泛化。
-
序列图:即顺序图,动态图,是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。
有同步消息(进行阻塞调用,调用者中止执行,等待控制权返回需要等待返回消息,用实心三角箭头表示),异步消息(发出消息后继续执行,不引起调用者阻塞,也不等待返回消息,由空心箭头表示)、返回消息(由从右到左的虚线箭头表示)三种。如下:
-
通信图:动态图,即协作图,是顺序图的另一种表示方法,也是由对象和消息组成的图,只不过不强调时间顺序,只强调事件之间的通信,而且也没有固定的画法规则,和顺序图统称为交互图。如下:
-
状态图:动态图,展现了一个状态机,描述单个对象在多个用例中的行为,包括简单状态和组合状态。
转换可以通过事件触发器触发,事件触发后相应的监护条件会进行检查。状态图中转换和状态是两个独立的概念,如下:图中方框代表状态,箭头上的代表触发事件,实心圆点为起点和终点。
-
活动图:动态图,是一种特殊的状态图。展现了在系统内从一个活动到另一个活动的流程。
- 活动的分岔和汇合线是一条水平粗线。
- 并发分岔、并发汇合、监护表达式、分支、流等名词及含义。
- 每个分岔的分支数代表了可同时运行的线程数。活动图中能够并行执行的是在一个分岔粗线下的分支上的活动。
-
构件图:静态图,为系统静态实现视图,展现了一组构件之间的组织和依赖。如下:
-
部署图:静态图,为系统静态部署视图,部署图物理模块的节点分布。它与构件图相关,通常一个结点包含一个或多个构件。其依赖关系类似于包依赖,因此部署组件之间的依赖是单向的类似于包含关系。如下:
例题
设计模式
概念
-
设计模式描述了我们周围不断重复发生的问题,以及解决这些问题的核心方法。通过设计模式,可以一次性地解决特定类型的问题,无需反复进行重复性工作。设计模式的核心价值在于提供了问题的解决方案,使人们能够更轻松地重用成功的设计和体系结构。
- 设计模式可以看作是问题和其对应解决方案的模板。它们描述了某一类问题,然后给出了相应的解决方案。
-
设计模式通常包含以下四个基本要素:
- 模式名称:模式的名称用于标识和描述该模式。
- 问题:描述了应该在何时使用该模式,即在什么情况下出现的问题。
- 解决方案:描述了设计模式的具体内容,包括如何解决问题的方法和实现细节。
- 效果:说明了应用该模式的效果和优点,包括可维护性、可扩展性、可重用性等方面的影响。
-
设计模式通常分为三类:
- 创建型模式:主要用于处理对象的创建过程,包括单例、工厂方法、抽象工厂等。
- 结构型模式:主要用于处理类和对象的组合,包括适配器、装饰器、代理等。
- 行为型模式:主要用于描述类或对象之间的交互行为,包括观察者、策略、命令等。
设计模式分类
-
创建型设计模式
-
结构型设计模式
-
行为型设计模式