软件工程第四章(第一部分)

第四章 面向对象方法——UML

**大家想一起学习交流的可以加群,QQ:755422568。**

UML是一种可视化语言(也是一种一般性语言),用于规约系统的制品、构造系统的制品、建立系统制品的文档,可作为软件需求规约、设计和实现的工具。

一、UML术语表

(1)、类与对象

1)、类

类是一组具有相同属性、操作、关系和语义的对象的描述。
类主要用于抽象客观世界中事物,一般要有一组属性和操作。
对象是类的一个实例。
类中有:类名、属性、操作。
类可以抽象,即没有实例。

2)、类的属性

类的属性是类的一个命名特性,该特性由该类的所有对象所共享、用于表达对象状态的数据。
一个类可以由多个属性,也可以没有。
类的一个对象对其所属类的每一个属性应有特定的值。

3)、可见性
‘+’ 公有的,该属性可供其他类使用。
‘#’ 受保护的,该属性只有其子类才能使用。
‘-‘ 私有的,该属性只有本类的操作才能使用。
’~‘包内的,该属性只有在同一包中声名的类才能使用。

可见性的目的:支持信息隐蔽这一软件设计原则。
信息隐蔽是实现模块低耦合的一种有效途径。
在属性名和类型表达式下画出一条线段的方式,表示该属性是类范围的属性。
如果没有声明一个属性是类范围的属性,那么它就是实例范围的属性。

4)、类的操作

操作是对外提供的一种服务。
一个类可以有多个操作,也可以没有操作。
操作可以是抽象操作,即在类中没有给出操作的实现。
query指明操作的运行不改变系统状态,没有副作用的纯函数。
guarded指明执行该操作的条件,实现操作调用的序列化,即一次只能调用对象的一个操作。
Concurrent指明来自并发控制流的多个调用可同时作用一个对象的任何一个并发操作,而所有操作均能以正确的语义并发执行。
类范围的操作是通过在操作名和类型表达式下画出一条线段表示,否则就是对象范围的操作。

4)、可以增强类语义的描述技术:
①详细叙述类的职责(以正文形式)

应遵循单一职责原则,即一个类,应有一个引起它发生变化的原因,这条原则通常被称为内聚性原则。

②通过类的注解和/或操作的注解

以结构化文本的形式和/或编程语言,详述注释整个类的语义和/或各个方法。

③通过类的注解或操作的注解

以结构化文本形式,详述注释各操作的前置条件和后置条件

④详述类的状态机

⑤详述类的内部结构

⑥类与其他类的协作

5)、类在建模中的主要用途。
①模型化问题域中概念
②建立系统的职责分布模型

目标是均衡系统中每一个类的职责,尽量使其完成一件事情或几件事情,以免过大或过小
为了完成这一目标:
1、为了完成行为,标识一组紧密协同工作的类,并标识其中每个类的责任集。
2、从整体上观察这些类,把其中职责过多的类分解为一些较小的抽象类,把职责繁琐的合并成一个类。
3、考虑类的协作方式,调整职责,让每一个类的职责过多或过少。

③模型化建模中使用的基本类型。
主要做以下工作:

如果需要对类型或枚举类型进行抽象时,可使用适当衍型类来表示。
当需要详细描述与该类型相关的值域时,可使用约束型。

每个类符合以下良好结构:

明确抽象了问题域或解域中某个有形事务或概念。
包含了一个小的,明确定义的职责集,并能很好地实现。
清晰地分离抽象和实现。

(2)、接口

接口是操作的一个集合,其中每个操作描述了类、构件或子系统的一个服务。

1)、接口表示的两种形式:
①采用具有分栏和关键字《interface》的矩形符号来表示。
②采用小圆圈和半圆圈来表示,半圆圈简称需接口,小圆圈简称供接口。

接口的类与该接口之间的实现关系,用带有空三角箭头的虚线表示.
接口的类与该接口之间的使用关系,用带有《use》标记的虚线箭头表示。

2)、增强接口语义:
①使用状态机来描述接口的预期行为
②使用交互图和协助,详细描述接口的预期行为。

3)、接口使用注意以下问题:(选择题)
①接口只可以被其他类目使用,而其本身不能访问其他类目。
②接口描述类的外部可见操作,通常是该类的一个特定有限行为。
③接口不描述其中操作的实现,也没有属性和状态。
④接口之间没有关联、泛化、实现和依赖,但可以参与泛化、实现和依赖。

(3)、协作(选择题,填空题)

协作是一个交互,涉及交互的三要素:交互各方、交互方式、交互内容
协作可以表现系统/产品实现的一种构成模式。

(4)、用况

用况是对一组动作序列的描述,系统执行这些动作产生特定参与者有值的,可观察的结果。
在系统/产品建模中,用况一般用于模型化系统中的功能行为,是建立系统功能模型的。

(5)、主动类

主动类是一种至少具有一个进程或线程类。
主动类能够启动系统的控制活动。
主动类一般用于模型化系统中的并发行为。

(6)、构件

构件是系统设计中的一种模块化部件,通过外部接口隐蔽它的内部实现。
共享的、相同接口的构件是可以相互替代的,构件是可以嵌套的。
构件一般用于表达解空间中可独立标识的成分。

(7)、制品

制品是系统中包含物理信息的、可替代的物理部件。

(8)、节点

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

(10)、关联

关联是类目之间的一种结构关系,是对一组具有相同结构、相同链的描述。
链是对象之间具有特定语义关系的抽象,实现之后的链通常称为对象之间的连接。
关联用一条连接两个类目的线段表示,用实心三角形来表示关联的方向。

1)、导航

对于一个给定的类目,可以通过导航找到与之关联的另一个类目。(填空题

2)、限定符是一个关联的属性或属性表。

3)、聚合(选择题、填空题

聚合表达的是一种“整体/部分”关系。
聚合表示为带有空心菱形的线段,其中空心菱形在整体类那一边。
聚合可以使用多重性
聚合是对象之间的一种结构关系,不是类之间的一种结构关系。

4)、组合

组合又是聚合的一种特殊形式。
整体类的实例和部分类的实例具有相同的生存周期,称之为组合。
1、在一个组合中,组合末端的多重性显然不能超过1.
2、在一个组合中,由一个链所连接的对象而构成的任何元组,必须都属于同一整体类的对象。

5)、关联类

关联类是一种具有关联和类特性的模型元素。

6)、约束

有序、无重复对象、有重复对象、有序集合、列表、只读

(11)、泛化

泛化是一般性类目(称为超类或父类)和它的较为特殊性类目(称为子类)之间的一种关系,称“is-a-kind-of”关系
子类可以继承父类的属性和操作
子类可以替换父类的声明
若子类一个操作的实现覆盖了父类同一个操作的实现,这种情况称为操作多态性。
可以在其他类目之间创建泛化。
泛化表示从子类到分类的一条带空心三角形的线段,其中空心三角形在父类端。
一个类可以有0个、一个或多个父类。没有父类且最少有一个子类的类被称为根类或基类;没有子类的类称为叶子类。

1)、约束

完整、不完整、互斥、重叠

(12)、细化

细化是类目之间的语义关系,其中一个类目规约了保证另一个类目执行的契约
细化表示为一个带空心三角形的虚线段。

1)、使用细化关系:
接口与实现它们的类和构件之间。
用况与实现它们的协作之间。

(13)、依赖

依赖是一种使用关系,用于描述一个类目使用另一个类目的信息和服务。
依赖表示一条有向虚线段,把箭头那一端的类目称为目标,另一端称为源。

1)、依赖分类
①绑定:表明源的实例化是使用目标给定的实际参数来达到的。
②导出:表明可以从目标推导出源。
③允许:表明目标对源而言是可见的。
④实例:表明源的对象是目标的一个实例。
⑤实例化:表明源的实例是由目标创建的。
⑥幂类型:表明源是目标的幂类型。
⑦精化:表明源比目标更精细。
⑧使用:表明源的公共部分的语义依赖于目标的语义。

2)、可模型化下各种关系
①结构关系

动态结构和静态结构
采用两种驱动方式:
1、以数据为驱动
2、以行为为驱动
给出关联的多重性,判断该关联是否为聚合或组合。

②继承关系(填空)

对系统中的一般/特殊关系,使用“泛化”

③精化关系

对于存在的精化关系,可使用“细化”对它们进行规约。
精化关系一般是指两个不同抽象层之间的一种关系。

④依赖关系

构造方法:分类、整体/部分、一般/特殊

(13)、包

包是模型元素的一个分组。一个包本身可以被嵌套在其他包中,并且可以含有子包和其他种类的模型元素。

1)、UML给出两种依赖:访问和引入
①访问(《access》):表明目标包中的内容可以被源包所引用,或被递归嵌套在源包中的其他包所引用。
②引入(《import》):表明目标包中具有适当可见性的内容被加入到源包的公共命名空间中。。

你可能感兴趣的:(软件工程)