导图社区 面向对象技术
软考高级系统架构师面向对象技术部分,从面向对象、统一建模语言、设计模式等方面进行了分析和概述,可收藏。
编辑于2021-08-31 09:58:55面向对象技术
面向对象
对象
概念
在计算机系统中,对象是指一组属性以及这组属性上的专用操作的封装体。
组成
对象名
属性
可以是一些数据,也可以是另一个对象。
操作(方法)
特点
每个对象都有它自己的属性值,表示该对象的状态,用户只能看见对象封装界面上的信息,对象内部实现对用户隐蔽。
优点
封装目的是使对象的使用者和生产者分离,使对象的定义和实现分开。
类
定义
类是一组描述对象属性或状态的数据项和作用在这些数据项上的操作(方法、成员函数等)构成的封装体。
概念
类是一组具有相同属性和相同操作的对象的集合。
一个类中的每个对象都是这个类的一个实例(instance)
在分析和设计时,通常把注意力集中到类上,而不是具体的对象上。
通常把一个类和这个类的所有对象称为类及对象或对象类。
组成
类名
属性
操作(方法)
抽象类
每个类一般都有实例,没有实例的类是抽象类。
特点
不能被实例化。
只需要声明,不需要实现。
抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是抽象类。
访问控制
private
成员私有化,除了该类的成员函数以外,谁也不能访问他们。
在类的成员定义中,如果没有指明,则系统默认为private。
public
成员公有化,程序中的所有函数(不管是类内定义的还是类外定义的),都可以访问这些成员。
protected
成员受限保护,只有该类及该类的子类和成员函数才能访问。
成员分类
动态成员
默认情况下为动态成员。
静态成员
在成员说明前加上static即为静态成员。
特点
静态成员与对象实例无关,只与类本身有关。
用来实现类要封装的功能和数据,但不包括特定对象的功能和数据。
组成
静态方法
静态属性
包含在类中要封装的数据,可以由所有类的实例共享。
除了属于一个固定的类并限制访问方式外,静态属性非常类似于函数的全局变量。
继承
概念
表示了对象间"is-a"的关系,即子类(派生类)是父类(超类、基类)的一种。
特点
继承是在某个类的层次关联中不同的类共享属性和操作的一种机制
一个父类可以有多个子类,子类是父类的特例
父类描述了这些子类的公共属性和操作,子类还可以定义自己的属性和操作
分类
单一继承
一个子类只有唯一的父类
多重继承
一个子类有多个父类,可以从多个父类继承特性
泛化
对于两个类A和B,如果A是B的子类,则B是A的泛化
限定
private
子类的public、private、protected成员函数可以访问父类中的public成员和protected成员,子类的对象不可访问父类中的任何成员。
使用class关键字定义类是,默认的继承方式是private。
protected
子类的public、private、protected成员函数可以访问父类中public成员和protected成员,子类的对象不可访问父类中的任何成员。
public
子类的public、private、protected成员函数可以访问父类中的public成员和protected成员,子类的对象仅可访问父类中的public成员。
多态性
概念
多态性是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。
绑定
动态绑定
在运行过程中,当一个对象发送消息请求服务时,根据接收对象的具体情况将请求的操作与实现方法连接,即为动态绑定。
静态绑定
传统的程序设计语言把过程调用与目标代码的连接放在程序运行前进行,称为静态绑定。
优点
在使用多态技术时,用户可以发送一个通用的消息,而实现的细节则有接收对象自行决定,这样同一消息就可以调用不同的方法。
形式
通用多态
包含
参数多态
同一对象、函数或过程能以一致的形式用于不同的类型
包含多态
最常见的例子是子类型化,即一个类型是另一个类型的子类型
特定多态
包含
过载多态
同一变量被用来表示不同的功能,通过上下文以决定一个类所代表的功能。
强制多态
通过语义操作把一个变元的类型加以变换,以符合一个函数的要求,如果不做这一强制性变换将出现类型错误。
通过消息的通信
统一建模语言 Unified Modeling Language(UML)
概念
支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。
事务
结构事务
包含
名词
静态部分
物理元素
行为事务
包含
动词
动态部分
行为
分组事务
包含
包
注释事务
包含
注释
交互图
表现形式
序列图
特点
强调消息时间顺序的交互
定义
描述消息在对象之间如何发送和接受的
构成
对象
生命线
控制焦点
消息
作用
展示对象间的交互时序
通信图(协作图)
定义
描述了该协作所有对象组成的网络结构以及相互发送消息的整体行为
特点
强调接收和发送消息的对象的结构组织的交互
构成
对象
矩形元素即为对象,其中冒号前面部分未对象名,后面为类名,表示类的一个实例
链接
用两个对象之间的单一线条表示,用来在通信图中关联对象(是关联的实例)
目的是让消息在不同系统对象之间传递,可以理解为链接是公路,消息是车(是对象间发送消息的路径)
消息
概念
通信图中对象之间通信的方式
分类
简单消息
表示方式
头部为大于号的箭头
同步消息
表示方式
头部为实心三角的箭头
异步消息
表示方式
同简单消息,但只保留上半部分
反身消息
表示方式
无箭头,一根线自己连自己
顺序号
作用
显示了对象及其关系的组织结构
表现了一个类的操作实现
交互概览图
特点
强调控制流的交互图
计时图
特点
适合嵌入式系统建模的交互图
应用场景
动态建模
组合结构图
包图
定义
是一种维护和描述系统总体结构的模型的重要建模工具,通过对包中各个包以及包之间关系的描述,展现出系统的模块与模块之间的依赖关系。
作用
可以描述需求,设计的高阶概况
通过合理规划自身功能,反映系统的高层架构,在逻辑上将系统进行模块化分解
最终是组织源码的方式
表示方式
一个包图可以由任何一种UML图组成,通常是UML用例图或UML类图
包被描述成文件夹,可以用于UML任何一种的图上
包图只是把某些类放在一个包中,因此可以看作是类图的一种
分类
静态模型(系统结构)
用例图 (Use Case)
概念
是指参与者(actor)、用例(use case)、边界以及他们的关系构成的用于描述系统功能的视图。
用途
用例图是外部用户(参与者)所能观察到的系统功能的模型图。
用例图是系统的蓝图,用于需求分析阶段
呈现了一些参与者、一些用例,以及他们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。
用例关系
包含
包含关系(include)
应用场景
当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。
特点
因为子用例被抽出,基用例并非一个完整用例,所以include关系中的基用例必须和子用例一起使用才完整,子用例也必须被执行。
表示方式
带箭头的虚线表示
线上标注<<include>>
箭头从基用例指向子用例
扩展关系(extend)
特点
对基用例扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完成的功能。
表示方式
带箭头的虚线表示
线上标注<<extend>>
箭头从子用例指向基用例
类图与对象图
类图 (Class diagram)
概念
展现了一组对象、接口、协作和他们之间的关系。类图是静态视图。
应用场景
对系统的静态设计建模
对简单的协作建模
对逻辑数据库模式建模
包含
类
分类
实体类
用途
实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,一般使用数据库表或文件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。
来源
实体类来源于需求说明中的名词,如学生、商品等。
控制类
用途
控制类用于体现应用程序的执行逻辑,提供相应的业务操作,将控制类抽象出来可以降低界面和数据库之间的耦合度。
控制类用于对一个或几个用例所特有的控制行为进行建模。
控制对象(控制类的实例)通常控制其他对象,因此它们的行为具有协调性质。
控制类将用例的特有行为进行封装。
边界类
用途
边界类用于对外部用户与系统之间的交互对象进行抽象
来源
对话框、窗口、菜单等界面类
接口
协作
依赖、泛化和关联关系
依赖 (dependency)
概念
是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。
表示方式
带箭头的虚线
由依赖一方指向被依赖一方
泛化 (Generalization)
概念
是继承关系的反关系,用于描述父类与子类之间的关系。
父类又称作基类或超类
子类又称作派生类
子类继承自父类,父类是子类的泛化
表示方式
带空心三角形的直线
由子类指向父类
关联 (Association)
概念
是一种拥有的关系,它使一个类知道另一个类的属性和方法。如:老师与学生,丈夫与妻子。
是类之间的结构关系,它描述了一组链,链是对象之间的连接。两个类之间可以有多个由不同角色标识的关联。关联可以是双向的,也可以是单向的。
表示方式
1..1
另一个类的一个对象只与该类的一个对象有关系
0..*
另一个类的一个对象与该类的0个或多个对象有关系
1..*
另一个类的一个对象与该类的一个或多个对象有关系
0..1
另一个类的一个对象没有或只与该类的一个对象有关系
m..n
另一个类的一个对象与该类最少m,最多n个对象有关系(m<=n)
分类
双向关联
表示方式
双向关联可以有两个箭头或没有箭头。
单向关联
表示方式
单向关联有一个箭头。
从主体指向被关联的实体
自关联
多重关联
特例
聚合 (Aggregation)
概念
体现的是整体与部分、拥有的关系,即"has-a"的关系
特点
整体与部分之间是可分离的,他们可以具有各自的生命周期。
部分可以属于多个整体对象,也可以为多个整体对象共享在UML中
表示方式
带空心菱形的直线
从整体指向部分
整体侧为空心菱形
组合 (Composition)
概念
体现的是"contains-a"的关系,比聚合更强,称为强聚合。
特点
整体与部分之间是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。
表示方式
带实心菱形的直线
从整体指向部分
整体侧为实心菱形
实现 (Implementation)
概念
用来规定接口和实现接口的类或者构建结构的关系,接口是操作的集合,而这些操作就用于规定类或者构建的一种服务。
表示方式
带空心三角形的虚线
从实现类指向接口
对象图 (Object Diagram)
概念
对象图展现了某一时刻一组对象以及他们之间的关系,描述了类图中所建立的事物的实例的静态快照。
对比
包含部分
类中包含三部分:类名、类的属性和类的操作
对象包含两个部分:对象的名称和对象的属性
名称栏
类的名称栏只包含类名
对象的名称栏包括“对象名:类名”
属性栏
类的属性栏定义了所有的属性特征
对象的属性栏定义了属性的当前值
操作
类中列出了操作
对象图中不包含操作内容,因为对属于同一个类的对象,其操作是相同的
连接
类中使用了关联连接,关联中使用名称、角色以及约束等特征定义
对象使用链进行连接,链中包含名称、角色
关联
类代表的是对象的分类,所以必须说明可以参与关联的对象的数目
对象代表的是单独的实体,所有的链都是一对一的,因此不涉及到多重性
构件图(组件图)
特点
使用构件图的思想是复用。
类型
部署构件
dll文件、exe文件、com+对象、CORBA对象、EJB、动态Web页和数据库表等
工作产品构件
源代码文件、数据文件等
执行构件
系统执行后得到的构件
部署图
作用
用来显示系统中软件和硬件的物理架构。
可以了解到软件和硬件组件之间的物理关系以及处理节点的组件分布情况
可以显示运行时系统的结构
还传达构成应用程序的硬件和软件元素的配置和部署方式。
动态模型(系统行为)
状态图
作用
用来描述一个特定对象的所有可能的状态
描述由于各种事件的发生而引起的状态之间的转移和变化
应用场景
用于对系统的动态方面建模
特点
主要描述行为的动作
活动图
作用
将进程和其他计算的结构展示为计算内部一步步的控制流和数据流
应用场景
主要用来描述系统的动态视图
特点
活动图本质上是一种流程图
活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程
主要描述行为的结果
顺序图
协作图
设计模式 Disign Pattern
概念
是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结
目的
为了代码可重用性
让代码更容易被他人理解
保证代码可靠性
作用
设计模式是代码编写真正工程化
设计模式是软件工程的基石脉络
分类
创建型模式
作用
用于创建对象
口诀
单抽元件(建)厂
包含(5)
工厂方法模式 (Factory Method)
简要说明
定义一个用于创建对象的接口,让子类决定将哪一个类实例化。使一个类的实例化延迟到其子类
抽象工厂模式 (Abstract Factory)
简要说明
提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
单例模式 (Singleton)
简要说明
保证一个类仅有一个实例,并提供一个访问它的全局访问点
建造者模式 (Builder)
简要说明
将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
原型模式 (Prototype)
简要说明
用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象
结构型模式
作用
处理类或对象的组合
口诀
外侨(桥)组员(元)戴(代)配饰
包含(7)
适配器模式 (Adapter)
简要说明
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
装饰器模式 (Decorator)
简要说明
动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更为灵活。
代理模式 (Proxy)
简要说明
为其他对象提供一种代理以控制对这个对象的访问。代理模式使用代理对象完成用户请求,屏蔽用户对真实对象的访问。
外观模式 (Facade)
简要说明
为子系统中的一组接口提供一个一致的界面,外观模式通过提供一个高层接口,隔离了外部系统与子系统间复杂的交互过程,使得复杂系统的子系统更易使用。
桥接模式 (Bridge)
简要说明
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
组合模式 (Composite)
简要说明
将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。
享元模式 (Flyweight)
简要说明
运用共享技术有效地支持大量细粒度的对象。
行为型模式
作用
描述类与对象怎样交互、怎样分配职责
口诀
观摩(模)对(迭)策,责令解放(访),戒(介)忘台(态)
包含(11)
策略模式 (Strategy)
简要说明
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
模板方法模式 (Template Method)
简要说明
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
观察者模式 (Observer)
简要说明
观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
迭代器模式 (Iterator)
简要说明
提供一种方法顺序访问一个聚合对象中各个元素,而又无需暴露该对象的内部表示。
责任链模式 (Chain of responsibility)
简要说明
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一个链,并且沿着这条链传递请求,直到有对象处理它为止。
命令模式 (Command)
简要说明
将一个请求封装成一个对象,从而使得用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
备忘录模式 (Memento)
简要说明
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以将对象恢复到原先保存的状态。
状态模式 (State)
简要说明
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
访问者模式 (Visitor)
简要说明
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。即对于某个对象或者一组对象,不同的访问者,产生的结果不同,执行操作也不同。
中介者模式 (Mediator)
简要说明
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
解释器模式 (Interpreter)
简要说明
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。