35

【软件工程】第六章 面向对象方法

 5 years ago
source link: https://blog.csdn.net/qq_39582960/article/details/88597279?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

6.1 面向对象方法的概念

6.1.2 主要特点

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

6.1.3 基本思想

  1. 从现实世界中客观存在的事物出发建立软件系统。
  2. 充分运用人类日常的思维方法。

6.1.4 学习范围

  1. 基本知识
  2. 面向对象分析(OOA)
  3. 面向对象设计(OOD)
  4. 面向对象程序设计(OOP)

6.2 UML

6.2.1 概述

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

6.2.2 面向对象方法术语/符号

提供了两种术语:

  1. 结构化地表达客观事物的术语
  2. 表达客观事物之间关系(相互作用\相互影响)的术语

除此之外还有:

  1. 为了控制信息组织的复杂性,还引入了用于组织特定对象结构的包。
  2. 为了使建造的系统模型容易理解,引入了注解。

6.3 结构化表达客观事物的术语

6.3.1 类与对象

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

类的结构:

JNVrM3n.png!web

类的简化表示:

6Jzqmu6.png!web

YR3uIzQ.png!web

rAzyYfq.png!web

抽象类用斜体表示:

uArmMrU.png!web

类名:

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

属性:

fU7fAnE.png!web
  1. 一个属性往往具有所属的类型、用于描述该特性的实例可以取值的范围。
  2. 类的一个对象对每个属性赢有特定的值。
  3. 一个类可以有多个属性,也可以没有属性。

属性的作用范围:

i6BZJj6.png!web
  • 实例范围的属性:属性的其他方面相同,但属性值随程序的执行而变化。
  • 类范围的属性:对于任何对象实例属性值都相同,即“静态”。

定义属性的格式:

[可见性] 属性名 [:类型] [多重性] [=初始值] [{特性串}]

① 可见性:

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

② 属性名:

  • 通常以小写字母开头,左对齐。

③ 类型:

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

④ 多重性:

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

⑤ 初始值:

  • 用于为新建立的对象赋予初始值,如 origin:Point=(0,0)

⑥ 特性串:

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

操作:

RBNrqqb.png!web

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

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

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

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

b6v6fiZ.png!web

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

beU7NfY.png!web

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

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

UjmUnaj.png!web

定义操作的格式:

[可见性] 操作名 [(参数表)] [:返回类型] [{特性串}]

① 可见性:

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

② 操作名:

  • 一般为动词或动词短语,以小写字母开头,左对齐。
  • 如果是动词短语,除第一个词外,其余首字母均大写。
  • 抽象操作用斜体表示。

③ 参数表:

参数名:类型 [=默认值]
  • 方向:in(输入参数,不能修改)、inout(输入参数,用于与调用者进行信息通讯,可能要更改)、out(输出参数,用于与调用者进行信息通讯,可能要更改)。
  • 类型:用最终的目标语言表示。
  • 默认值:用最终的目标语言表示。

④ 返回类型:

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

操作的多态性:

bqQb6br.png!web

6.3.2 接口

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

表示:

RjINZjm.png!web
  • 用带有分栏和关键字interface的矩形符号<<>>来表示。
  • 在操作分栏中给出接口支持的操作列表。
  • 接口的属性分栏总是空的。

用小圆圈来表示接口:

QFrIjiM.png!web

举例:

ZbUNRzQ.png!web
  • “销售”接口是“商品”类的供接口,是“售货员”类的需接口。
  • “商品”类实现了“销售”接口,“售货员”类使用“销售”接口。

6.3.3 协作

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

表示:

6rYZBjV.png!web

6.3.4 用况

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

表示:

Rry2MbQ.png!web

6.3.5 主动类

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

表示:

7jIz2iu.png!web

6.3.6 构件

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

表示:

ABVjmyN.png!web

6.3.7 制品

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

表示:

mYre6fV.png!web

6.3.8 节点

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

表示:

YvyuYzJ.png!web

6.4 控制复杂性的术语

6.4.1 包

目的和语义:

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

表示:

JVfqQrE.png!web
  • 在大矩形中描述包的内容,而把该包的名字放在左上角的矩形中。
ZJ3eEbj.png!web
  • 可以把所包含的元素画在包的外面,将元素与该包相连。这时可把该包的名字放在大矩形中。

包之间的关系:

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

对成组的元素建模策略:

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

6.5 表达关系的术语

6.5.1 关联

定义:

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

多重性:

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

聚合:

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

组合:

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

限定符:

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

关联类:

  • 它有关联和类的特性。一个关联类,可以被看做是一个关联,但还有类的特性;或被看做是一个类,但有关联的特性。

6.5.2 泛化

定义:

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

表示方法:

JzYfEnF.png!web

6.5.3 实现

定义:

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

使用地方:

  • 借口与实现它们的类和构建之间。
  • 用况与实现它们的协作之间。

表示:

iiq22mY.png!web

6.5.4 依赖

定义:

  • 依赖是一种使用关系,用于描述一个事物(如类Windows)使用另一事物(如类Event)的信息和服务。

6.6 UML模型表达工具

6.6.1 静态建模-类图

定义:

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

类图包含的内容:

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

示例:

VFfiIv2.png!web

创建类图四步骤:

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

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

② 对待建系统中的各种关系建模。

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

③ 模型化系统中的协作,给出该系统的最终类图。

泛化与依赖:

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

6.6.2 动态建模-用况图

示例:

zMFzaqA.png!web

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

定义:

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

示例:

ZjIFreM.png!web

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

定义:

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

示例:

niUbQ3R.png!web

(未完待续)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK