UML学习的对象图和类图

电脑杂谈  发布时间:2020-06-26 12:34:59  来源:网络整理

智能对象缩览图_js判断对象是否为空对象_对象图

参考“ UML面向对象的系统分析和设计教程”

第5章对象图和类图

5.1概述

UML类图和对象图表示对象模型的静态结构. 它不仅定义了系统中的类,而且还表示了类之间的联系,例如关联,依赖关系和聚合,还包括了类的内部结构,例如类的属性和操作.

类图描述了在整个系统生命周期内有效的静态关系. 通过分析问题域和用例,您可以获得相关的类,然后将逻辑上相关的类封装到包中. 这样可以很好地反映系统的层次结构,使人们可以一目了然地看到系统的层次关系.

对象图是类图的实例. 对象图只能在系统中的特定时间存在.

5.2对象类定义

The

class是对具有相同属性,操作,关系和语义的一组对象的描述.

课程名称:

例如,“ School :: Teacher”,其中“ School”是“ Teacher”类所在的软件包名称.

定义属性:

wKiom1amz-fg0kV8AAATpugooOU761.png

类中属性的可见性主要包括public private和protected,分别为+-#. (〜包符号)

类属性必须具有名称,以将其与类的其他属性区分开. 冒号: 紧随属性值之后的数据类型. 数据类型的表示取决于实现语言. 类型后面的“ =初始值”表示新创建对象时属性的初始值.

在类的属性框中,方括号“ []”中的部分是可选项目. 方括号中的多重性由一个多值表达式表示,该值是对象类的每个实例的属性值的数量. 多值表达式的格式为:

整数,整数,...或下限...上限

(书中的图片是图片的上部. 在Jude中,[multiplicity]符号显示在字体的后面,如下图所示)

下限表示多值表达式的最小值对象图,上限是多值表达式的最大值,“下限...上限”表示属性必须在此范围内取值范围. 下限和上限可以是XX数字或星号“ *”,表示任何非负整数. 例如,“ 0 ... *”表示0或无限制. “标题[2]: 字符串”表示有两个值,数据类型为“字符串”; “名称[0 ... 1]: 字符串”表示属性“名称”可以为空或名称值,数据类型为“字符串”.

所有者作用域是属性的另一个重要属性. 所有权范围有两种情况: 示例和分类. 如果属性的所有者范围是一个实例,则对象类的每个实例对象都有其自己的属性值. 如果属性的所有者范围是分类器,则对象类的该属性只有一个值. 对象类的每个实例对象都具有该唯一值,并且对象类的属性名称应带有下划线. 对象类的大多数属性的所有者范围是实例. (类似于静态关键字)

对象图_智能对象缩览图_js判断对象是否为空对象

定义操作:

操作可见性的含义和表示形式与该类的属性相同.

一个操作可以有参数,也可以没有参数. 参数列表由用逗号分隔的操作形式参数组成,格式为:

参数名称: 类型=默认值,...

冒号“: ”后紧跟返回列表. 返回列表指定操作完成时返回值的类型. 它由该操作的逗号分隔的返回类型表达式组成. 基本格式为:

返回类型

或

返回名称=类型,...

该操作还具有主要范围的区别,其含义和表示方法与该类的属性相同. 对象的构造操作(构造函数)必须带下划线,表明其所有者作用域是分类器. 构造性操作也可以用构造型<< constructor >>表示.

操作定义的最后大括号{}中的性质是一个文本字符串,用于解释有关该操作的一些相关信息. 自然是一种选择.

(在Jude中,本质是单击“约束”进行修改)

wKiom1am1rPheOpAAAAViHNvQR8845.png

5.3对象类的关联

5.3.1关联的定义

在对象类图上,关联用实线表示. 一个关联至少具有两个相关端,每个相关端都连接到一个类,并且相关端是有序的. 可以在关联行旁边标记关联的名称. 线条旁边的小实心箭头指示从源对象类到目标对象类的关联方向. 关联可以是单向或双向的. 如果是双向的,则不必标记方向箭头.

wKioL1am2-CT1MsvAAAWODUGPtM574.png

在UML类图中,每个关联的端点可以具有一个多重性标签. 关联的多重性标签用于指定关联的另一个工作站中的链接类的实例可以连接到多少个对象. 常用的多重标记是0 ... 1、1,*等.

wKiom1am3YGzOFfoAAARMnDHP6o672.png

可以在关联的对象类别图标旁边标记该类别的角色名称(角色). 该角色表明关联的类参与了关联的特定行为. 角色名称后可以跟冒号“: ”和类名称.

限定词可以具有名称或徽标,它表示被管理对象的一个​​属性或属性列表. 限定词包含在一个小矩形中,缺省情况下可以省略限定词的名称. 例如,下图中的“订单”具有限定符“ ProductID: Int”,该限定符将订单的产品ID限制为整数. 限定词表示在带有“订购”的链接中,由整数标识的每个产品都可以由订购行进行处理. (我不知道如何增加Jude的限制,尝试使用绘图工具在书上绘制图片)

智能对象缩览图_对象图_js判断对象是否为空对象

wKiom1am6maQJBZlAAASzw-HapM176.png

协会本身也具有特征. 关联对象类可以进一步解释关联的属性,操作和其他信息. 关联的对象类(或关联类)是关联和类. 它定义了一组属于该关联的特征. 这些特征不属于任何关联的对象类. 关联类的图标用虚线连接到关联线.

wKioL1am7gfjqq0TAAATsBG0ADc647.png

5.3.2关联类型

对象类之间的关联类型如下: 自反关联,二进制关联和N元关联.

5.3.3聚合和组合

聚合和组合是对象类之间的特殊关系. 主要用于描述整个和部分对象类之间的关系.

聚集用于指示事物的整体/局部关系很弱,并且整体对象拥有对象的一部分. 在UML中,聚集关联由带有空心菱形头的实线表示. 在聚合中,表示某些事物的对象可以属于多个聚合对象,可以由多个聚合对象共享,并且它们所属的聚合对象可以随时更改. 有些对象与整个对象的生存期无关. 一旦删除其聚合对象之一,表示某些事物的对象就不必立即删除.

wKiom1anLjPgYtVcAAAZz_EK06g996.png

组合表示事物的整体与部分之间的牢固关系. 在UML类图中,复合关联由带有实心菱形头部的实线表示. 在组合中,代表整个事物的组合对象负责创建和删除代表某些事物的对象. 表示某些事物的对象仅属于一个组合对象,并且与该组合对象共存并同时消失. 删除组合对象后,将立即删除它. 表示某些事物的对应对象.

5.3.4泛化

泛化是一般事物与更特殊事物之间的关系. 子类除了继承父类的属性和操作外,通常还向子类添加新的属性和操作,或修改某些父类. 运行中.

在UML类图中,泛化用从子类指向父类的空心三角形箭头表示. 对象类“大学”和“小学”是广义对象类“学校”的子类.

wKiom1anLh2SUxCpAAASiT2AvB4670.png

5.3.5依赖性

依赖关系意味着一个模型元素(提供者)的更改不可避免地会影响另一模型元素(客户). 例如,课程表信息取决于课程信息. 如果课程信息被删除,则有关该课程的所有时间表信息也将被删除.

在UML中,相关性被描述为指向该对象的有向虚线. 依赖项可以有自己的名称,但是通常会省略它们. 对于依赖项,可以添加构造型以指定依赖项的含义和作用. 常见的构造型是<< use>,<< call >>,>和<< friend>. >(朋友)等. “电视”类的“更改频道”方法使用“频道”类的对象作为参数. 因此,这两个类之间存在依赖关系.

wKiom1anLguCbWsKAAATBACq1B.png

5.4对象图

在构建系统模型时对象图,通常使用对象类图来表示系统的静态特性,而使用交互图来表示系统的动态特性. 对象图冻结了系统的某个时刻,表达了系统对象在那个时刻的特定状态(属性值和操作).

对象图_js判断对象是否为空对象_智能对象缩览图

对象的图标由类似于对象类的实心矩形表示. 矩形框包含几个分区,分别代表对象的名称,属性和其他组件. 每个对象都是文本字符串,必须带下划线. 冒号“: ”后跟用逗号分隔的类列表,该列表指示对象所属的类型或类.

对象的属性分离区域包含对象的属性值. 属性值的数据类型必须符合对象所属类的规定.

下图是一组模拟学校的对象. 该图描述了学校的部门组成. a是“大学”类的对象. 该对象链接到对象b1,b2和b3. b1,b2和b3都是“部门”类的对象. 它们具有不同的属性值,即具有不同的名称.

这些对象可以执行的操作未在图中显示,但是每个对象都可以执行其所属类的定义的操作. 例如,对象p1可以执行“雇员”类的所有操作.

wKioL1aoHACS-unSAAAhsGbvkSw919.png

5.5界面

接口是一组外部可访问的操作,用于为对象类或组件提供服务. 该接口可以看作是一个特殊的抽象类,它不包含属性,并且其操作没有方法,也就是说,没有操作的实现.

该界面可以由类图标表示. 界面图标的名称分隔区域中有一个唯一的界面名称. 接口名称可以是简单名称或路径名称. 构造型<< interface >>在接口名称之前. 界面图标中没有属性分离区域. 在操作分隔区域中列出了抽象的常见操作,并且这些参数是可选的.

该界面也可以用一个小圆圈表示,该界面的名称标记在圆圈旁边,称为棒棒糖界面. 如图所示,当您仅希望在构建模型时了解系统内部的接缝时,这种简单的形式非常有效.

wKioL1aoH1KjgmwaAAAZf-UIpn0771.png

其他对象类可以通过实现联系人来支持该接口. 这些对象类提供了接口中定义的所有操作. 实现连接是一种通用连接,由带有空心三角形箭头的虚线箭头(称为虚拟通用符号)表示. 对于棒棒糖界面的连接,用虚线表示. 对象类可以通过依赖关系连接(虚线箭头)使用接口. 此时,可以标记构造型“ << use >>”.

5.6高级对象类

5.6.1抽象类

在UML中,您可以使用斜体类名称来表示抽象类,而无需使用约束{abstract}.

wKioL1aoIcigi9DdAAAY3MSFXd4445.png

5.6.2模板对象类模板对象类,也称为参数对象类,是尚未完全指定的类. 参数表提供在模板中,并且由参数表传输到模板的信息最终可以形成用户所需的特定类. 参数可以是一个类,也可以是基本类型,例如整数或布尔值. 由于可以通过提供不同的参数来确定不同的类别,因此模板可以解释许多类别,因此该模板也称为由参数表示的类.

5.7对象类图建模

5.7.1创建对象类图

通常,创建对象类图涉及以下步骤:

研究和分析问题域以确定系统需求.

智能对象缩览图_js判断对象是否为空对象_对象图

发现,识别和确定系统中的类和对象,明确其含义和职责,并确定属性和操作.

找出类之间的静态链接. 重要的是分析类之间的一般和特殊,部分和整体关系,研究类之间的继承和多态性,并使用类之间的这种联系进行泛化,聚合和组成,关联,依存关系等. 表达这种关系.

调整和优化已发现的类之间的现有链接,以消除可能的命名冲突和重复的功能.

绘制对象类图并编译相应的描述.

绘制的对象类图不应太复杂. 通常,图形元素的数量不应超过9,并且类图的大小通常为一张A4纸. 如果类图中的图形元素过多,则应根据类图的抽象级别对其进行分层绘制. 根据用例或子系统绘制相同级别的类图. 如果图形仍然太大,请重新划分.

5.7.2类和对象的建模中应注意的事项

1. 模型视角(透视)和粒度

在正常情况下,可以从以下三个模型角度来查看现实世界的问题域,建立对象模型和绘制对象类图:

从概念上讲,问题域的概念模型可以用对象类表示. 概念模型中没有考虑软件实现问题,因此它独立于编程语言. 在系统分析阶段,通常是从概念的角度来建立系统的分析模型.

从解释的角度来看,软件的结构和接口可以由对象类图表示,而不是由软件的实现表示. 在系统的设计阶段,一般都是从解释的角度建立系统的设计模型.

从实现角度绘制的对象类图反映了在构建阶段生成的实现模型,该模型专门定义了对象类及其实现.

构建对象模型时,可以从上到下或从下到上. 顶层对象类图是概念性的,而下层对象类图是对上层对象类图的改进,增加了一些细节. 最底部的对象类图是可实现的,通常可以直接映射到编程语言. 系统分析人员和高级程序员关注对象类的基本特征及其之间的关系. 他们只需要从逻辑上解释粗粒度的对象类图. 普通程序员关心对象类的属性,操作和连接的实现. 需要的是实现层的细粒度对象类图.

2. 异常建模(Exception)

在UML中,您可以使用特殊的类信号来表示对异常的处理. 确定在执行操作期间发生异常的条件时,将发送处理异常的信号.

可以在系统中对异常建模,如下:

1. 对于每个对象类和接口,找到可能出现的异常和条件.

2. 用信号类描述每个异常,并在类名之前添加构造型<< exception >>.

3. 建立异常的层次结构,将一般异常放在顶部,将特殊异常放在底部.

4. 确定每个操作的可能异常,用虚线箭头连接该操作及其异常的信号图标,并在其上标记构造型<< send >>以指示操作异常“发送”依赖性.

3. 包装建模技术

在对大型系统建模时,通常需要处理主类,接口,组件,节点和图形. 这时,有必要对这些元素进行分组,即,语义相似且倾向于一起更改的那些元素. 组织并加入同一程序包,可以更轻松地理解和处理整个模型.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-259072-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 王育敏
        王育敏

        伊凡份子给老萨提鞋的资本都木油

      热点图片
      拼命载入中...