<>6.1 面向对象方法的概念

<>6.1.2 主要特点

* 用对象作为对事物的抽象表示,并以此作为系统的基本构成单位。
* 事物的静态特征用对象的属性表示。
* 事物的动态特征(即事物的行为)用对象的操作表示。
* 对象的属性和操作结合为一体,构成独立且对外屏蔽细节的实体。
* 对事物分类,将具有相同属性和操作的对象归为一类。
* 通过在不同程度上运用抽象的原则(或多或少地忽略事物之间的差异),得到较一般的类和特殊的类,通过继承关系简化系统的构造过程及文档。
* 复杂的对象可以用简单的对象作为其构成部分(聚合)。
* 对象间只能通过消息进行通信(不允许一个对象直接使用另一个对象的属性),以实现对象间的动态联系。
* 用关联表达类之间的静态关系。
<>6.1.3 基本思想

* 从现实世界中客观存在的事物出发建立软件系统。
* 充分运用人类日常的思维方法。
<>6.1.4 学习范围

* 基本知识
* 面向对象分析(OOA)
* 面向对象设计(OOD)
* 面向对象程序设计(OOP)
<>6.2 UML

<>6.2.1 概述

* 一种可视化语言。
* 是规约系统的制品:UML适用于对所有重要的分析、设计和实现决策进行详细概述。
* 是构造系统的制品:UML描述的模型可与各种编程语言直接相关联。
<>6.2.2 面向对象方法术语/符号

提供了两种术语:

* 结构化地表达客观事物的术语
* 表达客观事物之间关系(相互作用\相互影响)的术语
除此之外还有:

* 为了控制信息组织的复杂性,还引入了用于组织特定对象结构的包。
* 为了使建造的系统模型容易理解,引入了注解。
<>6.3 结构化表达客观事物的术语

<>6.3.1 类与对象

* 类(Class):一组具有相同属性、操作、关系和语义的对象的描述。
* 对象(object):对象是类的一个实例。
类的结构:

类的简化表示:






抽象类用斜体表示:

类名:

* 类名使用黑体字,第一个字母通常大写,并位于第一栏的中间。
* 类名往往是从正被建模系统的词汇表中提取的简单名词或名词短语。
属性:

* 一个属性往往具有所属的类型、用于描述该特性的实例可以取值的范围。
* 类的一个对象对每个属性赢有特定的值。
* 一个类可以有多个属性,也可以没有属性。
属性的作用范围:

* 实例范围的属性:属性的其他方面相同,但属性值随程序的执行而变化。
* 类范围的属性:对于任何对象实例属性值都相同,即“静态”。
定义属性的格式:
[可见性] 属性名 [:类型] [多重性] [=初始值] [{特性串}]
① 可见性:

* +公有的(public):可供其他类使用。
* #受保护的(protected):其子类可使用。
* -私有的(private):只有本类的操作才能使用。
* ~包内的(package):只有在同一包中声名的类才能使用。
② 属性名:

* 通常以小写字母开头,左对齐。
③ 类型:

* 与具体实现语言有关,如 name: string,表示name这个属性名的类型为字符串string
④ 多重性:

* 表示属性值的数目,如 points[2…*]:Point
⑤ 初始值:

* 用于为新建立的对象赋予初始值,如 origin:Point=(0,0)
⑥ 特性串:

* 表达该属性所具有的性质,如 a:integer=1{frozen},表示属性不可改变
操作:

① 一个类可以有多个操作,也可以没有操作。

② 操作名除第一个词外,其他每个词的第一个字母要大写。

③ 操作名往往是描述其所在类的行为动词或动词短语。

④ 也可以通过给出操作的特征标记进一步描述之,如参数名、类型、默认值,返回类型等。

⑤ 可以是抽象操作,即没有给出实现的操作,用斜体表示(即C++中的纯虚操作)。

⑥ 调用一个对象上的操作可能会改变该对象的数据或状态。

⑦ 操作的作用范围分为类范围操作和实例范围操作。

定义操作的格式:
[可见性] 操作名 [(参数表)] [:返回类型] [{特性串}]
① 可见性:

* +公有的(public):可供其他类使用。
* #受保护的(protected):其子类可使用。
* -私有的(private):只有本类的操作才能使用。
* ~包内的(package):只有在同一包中声名的类才能使用。
② 操作名:

* 一般为动词或动词短语,以小写字母开头,左对齐。
* 如果是动词短语,除第一个词外,其余首字母均大写。
* 抽象操作用斜体表示。
③ 参数表:
参数名:类型 [=默认值]
*
方向:in(输入参数,不能修改)、inout(输入参数,用于与调用者进行信息通讯,可能要更改)、out(输出参数,用于与调用者进行信息通讯,可能要更改)。
* 类型:用最终的目标语言表示。
* 默认值:用最终的目标语言表示。
④ 返回类型:

* 与具体的实现语言有关,如果没有返回值(void),就省略冒号和返回类型。
* 需要多个返回值时,可使用表达式列表。
操作的多态性:

<>6.3.2 接口

* 是一组操作的集合,其中每个操作描述了类或构件的一个服务。
* 作用:模型化系统中的“接缝”。
表示:

* 用带有分栏和关键字interface的矩形符号<<>>来表示。
* 在操作分栏中给出接口支持的操作列表。
* 接口的属性分栏总是空的。
用小圆圈来表示接口:

举例:

* “销售”接口是“商品”类的供接口,是“售货员”类的需接口。
* “商品”类实现了“销售”接口,“售货员”类使用“销售”接口。
<>6.3.3 协作

* 协作是一组类、接口和其他元素的群体,他们共同工作以提供比各组成部分的总和和更强的合作行为。
表示:

<>6.3.4 用况

* 体现了功能抽象,是对一组动作序列的描述,系统执行这些动作产生对特定的参与者一个有值得、可观察的结果。
表示:

<>6.3.5 主动类

* 体现并发行为抽象,是一种至少具有一个进程或线程的类,因此它能够启动控制活动。
表示:

<>6.3.6 构件

* 是系统中逻辑的并且可替换的成分,它遵循并提供了一组接口的实现。
表示:

<>6.3.7 制品

* 是系统中物理的、可替代的部件,其中包含物理信息(比特)。
表示:

<>6.3.8 节点

* 是在运行时存在的物理元素,通常它表示一种具有记忆能力和处理能力的计算机资源。
表示:

<>6.4 控制复杂性的术语

<>6.4.1 包

目的和语义:

* 为了组织类目,控制信息组织和文档组织的复杂性,UML引入了术语“包”。
* 包是模型元素的一个分组。一个包本身可以被嵌套在其他包中,并且可以含有子包和其他种类的模型元素。
表示:

* 在大矩形中描述包的内容,而把该包的名字放在左上角的矩形中。
* 可以把所包含的元素画在包的外面,将元素与该包相连。这时可把该包的名字放在大矩形中。
包之间的关系:

* 两种依赖:访问依赖和引入依赖。
* 作用:使一个包可以访问和引入其他包。
* 包间的依赖通常隐含了各包中元素间存在的一个或多个依赖。
* 引入依赖
* 从源包到目标包的引入依赖表明:目标包中有适当可见性的内容被加入到源包的公共命名空间,相当于源包对它们做了声明(即,不需要一个路径名)。
* 访问依赖
*
从源包到目标包的访问依赖表示:目标包中具有可见性的内容增加到源包的私有命名空间里(即,源包可以不带限定名来引用目标包中的内容,但不可以输出之,如果第三个包引入源包,就不能再输出已经被引入的目标包元素)。
对成组的元素建模策略:

* 浏览特定体系结构,视图里面的建模元素,找出概念和语义上相近的元素所定义的组块, 把这样的一些块放到一个包里。
* 对每个包判别哪些元素要在包外访问, 把这些元素标记为公共的,把其他元素标记为受保护的或者私有的。
* 用引入依赖关系显式地连接建立在其他包之上的包。
* 在包的家族里面,用泛化关系把特殊包连接到一般包里面。
<>6.5 表达关系的术语

<>6.5.1 关联

定义:

* 关联是类目之间的结构关系,描述了一组具有相同结构、相同语义的链。
* 连接两个类目的关联称为二元关联,连接n个类目的关联称为n元关联。
多重性:

* 类中对象参与一个关联的数目,称为该关联角色的多重性。
聚合:

* 一种特殊形式的关联,表达一种“整体/部分”关系。即一个类表示了一个大的事物,它是由一些小的事物(部分)组成。
组合:

* 如果整体类的实例和部分类的实例具有相同的生命周期,这样的聚合称为组合。
限定符:

* 一个限定符是一个关联的属性或属性表,这些属性的值将对该关联对象集做了一个划分。
关联类:

* 它有关联和类的特性。一个关联类,可以被看做是一个关联,但还有类的特性;或被看做是一个类,但有关联的特性。
<>6.5.2 泛化

定义:

* 一个类可以有0个,1个或多个父类。
* 没有父类且最少有一个子类的类被称为根类或基类。
* 没有子类的类称为叶子类。
* 如果一个类只有一个父类,则说明它使用了单继承,如果一个类有多个父类,则说它使用了多继承。
表示方法:

<>6.5.3 实现

定义:

* 实现是类目之间的一种语义关系,其中一个类目规约了保证另一个类目执行的契约。
使用地方:

* 借口与实现它们的类和构建之间。
* 用况与实现它们的协作之间。
表示:

<>6.5.4 依赖

定义:

* 依赖是一种使用关系,用于描述一个事物(如类Windows)使用另一事物(如类Event)的信息和服务。
<>6.6 UML模型表达工具

<>6.6.1 静态建模-类图

定义:

* 类图显示了类(及其接口)、类的内部结构以及与其他类的联系,是面向对象分析和设计所得到的最重要的模型,用于可视化的表达系统的静态结构模型。
类图包含的内容:

* 通常包含:类、接口、依赖、泛化、和关联关系等。
* 特殊情况下可包含注解和约束,以及包或子系统,甚至,可包含一个实例,以便使其可视化。
示例:

创建类图四步骤:

① 对系统中的概念(词汇)建模,形成类图中的基本元素。

* 使用术语“类”来抽象系统的各个组成部分、系统环境,而后确定每一个类的责任,最终形成类图中的模型元素。
② 对待建系统中的各种关系建模。

* 使用表达关系的术语,例如关联、泛化和依赖等抽象系统中各成分之间的关系,形成该系统的初始类图。
* 当需要从一个类的对象到另一个类的对象导航时,就建立“关联”,如下:
* 当一个类的对象要与另一个类的对象相互交互,而后者不作为前者的过程局部变量或操作参数,就建立“关联”。
* 如果关联中的一个类与另一端的类相比,前者在结构或者组织上是一个整体,后者看来像它的部分,则在靠近整体的一端用一个菱形对关联修饰,表示“聚合”。
* 对于每一个关联,都要说明其多重性(特别当多重性不为*时,星号是默认的多重性)。
③ 模型化系统中的协作,给出该系统的最终类图。

泛化与依赖:

* 依赖关系是使用关系,常见的依赖关系是两个类之间的连接,其中一个类只是使用另一个类作为它的操作参数。
* 泛化关系是“is a kind
of”关系,在对系统的词汇建模中,经常遇到结构或行为上与其他类相似的类,可以提取所有共同的结构特征和行为特征,并把它们提升到一般的类中,特殊类继承这些特征。
<>6.6.2 动态建模-用况图

示例:

<>6.6.3 系统行为(交互)建模-顺序图

定义:

* 顺序图是一种交互图,即由一组对象以及这些对象之间的关系(通信)组成,其中还包含这些对象之间被发送的消息。
示例:

<>6.6.4 系统行为(生存周期)建模-状态图

定义:

* 状态图是显示一个状态机的图,其中强调了从一个状态到另一状态的控制流。规约了一个对象在其生存期间因响应事件并作出响应而经历的状态。
示例:

(未完待续)

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信