第6章 类图和对象图
6.1 类图
6.1.2 类的组成
6.1.2.4 类的职责
► 在标准的UML定义中,有时还应当指明类的另一种
信息,那就是类的职责。类的职责指的是对该类的 所有对象所具备的那些相同的属性和操作共同组成 的功能或服务的抽象。 ► 在声明类的职责的时候,可以非正式的在类图的下 方增加一栏,将该类的职责逐条描述出来。 ► 类职责的描述并不是必须的,因此也可以将其作为 文档的形似存在,也就是说类的职责其实只是一段 或多段文本描述。 ► 一个类可以有多种职责,设计得好的类一般至少有 一种职责。
6.3 类图到数据库的转换
6.3.4 完整性与约束验证
►
UML模型中类与类之间的关系是对现实世界商业规 则的反映,在将类图模型映射为关系数据库时,应 当定义数据库中数据上的约束规则。 ► 如果使用对象标识符的方法映射数据库表的主键, 在更新数据库时就不会出现完整性问题,但是对对 象之间的交互和满足商业规则来说,进行约束验证 是有意义的 。 1. 父表的约束 2. 子表的约束
6.1 类图
6.1.2 类的组成
6.1.2.5 类的约束
► 类的约束指定了该类所要满足的一个或多个规则。
► 在UML中,约束是用一个大括号括起来的文本信息。 ► 在使用Rational
Rose进行表达类与类之间的关联时, 通常会对类使用一些约束条件。如下图所示的是在 “Student”类和“Copy”类之间应当满足的约束。
6.1 类图
6.1.2 类的组成
6.1.2.2 类的属性
► 属性是类的一个特性,也是类的一个组成部分,描
述了在软件系统中所代表的对象具备的静态部分的 公共特征抽象,这些特性是这些的对象所共有的。 ► 在UML中,类的属性的表示语法为([ ]内的内容是 可选的):[可见性] 属性名称 [:属性类型] [=初 始值] [{属性字符串}]。 ► 例如,在“Goods”类中包含两个属性如下图所示。
►
6.5 绘制类图
6.5.3 类属性的创建
1. 双击类图中的“Borrower ”类, 弹出 “Class Specification for NewClass” 对话框,该对话框 用于对类的各种属性的设置。 2. 点击“Attributes” 选项卡,在 空白窗口区域单击鼠标右键, 在弹出的快捷菜单中选择 “Insert” 命令。 3. 在空白窗口区域出现右图所示 的添加属性编辑列表,在 “Name”属性项上单击,输入 属性名称“userid”;单击 “Type” 类型属性项,输入数 据类型“String”,最后单击 “OK” 按钮。
6.1 类图
6.1.4 类的构造型
► 在Rational
Rose中,包含一些内置构造型,包括 Actor、boundary、Business Actor、Business Document、Business Entity、Business Event、 Business Goal、Business Worker、control、 Domain、entity、Interface、Location、Physical Worker、Resource、Service、Table、View等。 ► 其中Action、boundary、control和entity是比较常用 的构造型。 ► 在用例图中的Actor是构造型为Actor的类,接口是 一种构造型为Interface的类。
6.1 类图
6.1.1 类图的概念
► 在类图中,具体来讲它一共包含了以下几
种模型元素,分别是:类、接口、依赖关 系、泛化关系、关联关系以及实现关系。 ► 类图可以创建约束、注释和包等。
6.1 类图
6.1.1 类图的概念
► 类图的作用是对系统的静态视图进行建模。
当对系统的静态视图进行建模时,通常是以 以下三种方式来使用类图。 1. 为系统的词汇建模。 2. 模型化简单的协作。 3. 模型化逻辑数据库模式。
►
6.5 绘制类图
6.5.2 类的绘制
我们在“图书管理系统”类图中创建一个名为“Borrower”的借阅者类, 具体步骤如下所示: 1. 在图形编辑工具栏中,选择“ ” 按钮,此时光标变为“+”号。 2. 在类图中单击选择任意一个位置,系统在该位置创建一个新类。系统产 生的默认名称为“NewClass”。 3. 在类的名称栏中,显示了当前所有的类的名称,我们可以选择清单中的 现有类,这样便把在模型中存在的该类添加到类图中。如果创建新类, 将“NewClass”重新命名成新的名称“Borrower”即可。
6.2 类图中的关系
6.2.1 依赖关系
► 依赖关系表示的是两个或多个模型元素之间语义上
的连接关系。它只将模型元素本身连接起来而不需 要用一组实例来表达它的意思。 ► 依赖关系将二个类联系起来,其中一个类会影响另 一个类的行为和实现。
6.2 类图中的关系
6.2.2 泛化关系
► 泛化关系是用来描述类的一般和具体之间的关系。
►
6.3 类图到数据库的转换
6.3.2 类到表的转换
►
►
1. 2. 3. 4.
将UML模型中的类转换(映射)为关系数据库中的表时,类中 的属性可以映射为数据库表中的0个或者多个属性列,但并 非类中所有的属性都需要映射。如果类中的某个属性本身又 是一个对象,则应将其映射为表中的若干列。除此之外,也 可将若干个属性映射为表中的一个属性列。 将类映射为表时,类之间继承关系的不同处理方式会对系统 的设计有不同的影响;在处理类之间的继承关系时,可采用 下面的四种方法。 将所有的类都映射为表 将有属性的类映射为数据库表 子类映射的表中包含超类的属性 超类映射的表中包含子类的属性
6.4 对象图
6.4.3对象图中的链
► 链是两个或多个对象之间的独立连接,是关联的实
例。通过链可以将多个对象连接起来,形成一个有 序列表,称为元组。对象必须是关联中相应位置处 类的直接或间接实例。 ► 在UML中,链的表示形式为一个或多个相连的线或 圆弧。在自身相关联的类中,链是两端指向同一对 象的回路。如下图所示,是链的普通和自身关联的 表示形式。
6.4 对象图
6.4.2 对象图中的对象
►
►
对象是类的实例,创建一个对象通常可以从两种情况来观察: 第一种情况是将对象作为一个实体,它在某个时刻有明确的 值;另一种情况是作为一个身份持有者,不同时刻有不同的 值。 对象的表示符号是与类用相同的几何符号作为描述符,但对 象使用带有下划线的实例名将它作为个体区分开来。顶部显 示对象名和类名,并以下划线标识,使用语法是“对象名: 类名”,底部包含属性名和值的列表,如下图所示。
具体描述建立在对类的一般描述的基础之上,并对 其进行了扩展。 ► 因此,在具体描述中不仅包含一般描述中所拥有的 所有特性、成员和关系,而且还包含了具体描述补 充的信息。
6.2 类图中的关系
6.2.3 关联关系
► ► ►
关联关系是一种结构关系,指出了一个事物对象与另一个事 物对象之间的语义上的连接。 关联描述了系统中对象或实例之间的离散连接,它将一个含 有两个或多个有序表的类,在允许复制的情况下连接起来。 一个类关联的任何一个连接点都称为“关联端”,与类有关 的许多信息都附在它的端点上。关联端有名称、角色、可见 性以及多重性等特性。
►
6.3 类图到数据库的转换
6.3.1 基本映射转换
类图到数据库的基本映射转化包括标识和域两个部分的内容。 1. 标识 实现对象模型的第一步便是处理标识 2. 域 属性类型是UML的术语,它对应于数据库里域的术语。域的 使用不仅仅增强了更加一致的设计,而且便利了应用程序的 可移植性。简单域的实现很简单,只需要定义相应的数据类 型和大小。每个使用了域的属性都必须为其约束加入一条 SQL检查子句。
6.5 绘制类图
6.5.1 类图的绘制
这里以创建一个“图书管理系统”的类图为例,演示创建一 个的类图的具体操作步骤。 1. 右键单击Rational Rose浏览器中的Use Case View(用例视 图)。 2. 在弹出的快捷菜单中,选择“New”(新建)|“Class Diagram” (类图)命令。 3. 在Use Case View(用例视图)下生成的默认名为“New Diagram”的类图,输入新的类图名称“图书管理系统类图”。 4. 双击类图名称,即可打开所创建类图的操作界面。
6.1 类图
6.1.2 类的组成
类是面向对象系统组织结构的核心。类是对一组 具有相同属性、操作、关系和语义的事物的抽象。 ► 在UML的图形表示中,类的表示法是一个矩形, 这个矩形由三个部分构成,分别是:类的名称 (Name)、类的属性(Attribute)和类的操作 (Operation)。
►
6.1 类图
6.4 对象图
6.4.1 对象图的概念
► 对象图描述系统在某一个特定时间点上的静态结构,
是类图的实例和快照,即类图中的各个类在某一个 时间点上的实例及其关系的静态写照。 ► 对象图中包含对象和链。其中对象是类的特定实例, 链是类之间关系的实例,表示对象之间的特定关系。 ► 对象图所建立的对象模型描述的是某种特定的情况, 而类图所建立的模型描述的是通用的情况。
6.1.2 类的组成
6.1.2.1 类的名称
► 类的名称是每个类的图形中所必须拥有的元素,用
于同其它类进行区分。类的名称通常来自于系统的 问题域,并且尽可能地明确表达要描述的事物,不 会造成类的语义冲突。 ► 按照UML的约定,类的名称的首字母应当大写,如 果类的名称由两个单词组成,那么将这两个单词合 并,第二个单词首字母也大写。类名称的书写字体 也有规范,正体字说明类是可被实例化的,斜体 实现关系
实现关系将一种模型元素(如类)与另一种模型元素(如接 口)连接起来,是说明和其实现之间的关系。 ► 在实现关系中,接口只是行为的说明而不是结构或者实现, 而类中则要包含了其具体的实现内容,可以通过一个或多个 类实现一个接口,但是每个类必须分别实现接口中的操作。 ► 虽然实现关系意味着要有像接口这样的说明元素,它也可以 用一个具体的实现元素来暗示它的说明必须被支持。