类图和对象图是面向对象分析和设计中的两个重要概念。类图用于描述系统中的各种概念,而对象图则用于描述系统中的对象之间的关系。下面是对类图和对象图的重构:
类图和对象图的概念:
- 类图(Class diagram)显示了系统的静态结构,而系统的静态结构构成了系统的概念基础。在大多数的 UML 模型中,我们可以将这些概念的类型概括为以下四种,分别是:类、接口、数据类型、构件。在类图中,具体来讲它一共包含了以下几种模型元素,分别是:类、接口、依赖关系、泛化关系、关联关系以及实现关系。
- 对象图中包含对象(Object)和链(Link)。其中对象是类的特定实例,链是类之间关系的实例,表示对象之间的特定关系。
类图在项目开发中的作用:
- 对系统的静态视图进行建模。当对系统的静态视图进行建模时,通常是以以下三种方式来使用类图。
- 为系统的词汇建模。
- 模型化简单的协作。
- 模型化逻辑数据库模式。
- 在设计数据库时,通常将数据库模式看作为数据库概念设计的蓝图,在很多领域中,都需要在关系数据库或面向数据库中存储永久信息。系统分析者可以使用类图来对这些数据库进行模式建模。
对象图在项目开发中的作用:
- 作为系统在某一时刻的快照,是类图中的各个类在某一个时间点上的实例及其关系的静态写照。可以通过以下几个方面来说明它的作用:
- 说明复杂的数据结构。对于复杂的数据结构,有时候很难对其进行抽象成类表达之间的交互关系。使用对象描绘对象之间的关系可以帮助我们说明复杂的数据结构某一时刻的快照,从而有助于对复杂数据结构的抽象。
- 表示快照中的行为。通过一系列的快照,可以有效表达事物的行为。
在UML的图形表示中,类的表示法是一个矩形,这个矩形由三个部分构成,分别是:类的名称(Name)、类的属性(Attribute)和类的操作(Operation)。
类的名称是每个类的图形中所必须拥有的元素,用于同其它类进行区分。类的名称通常来自于系统的问题域,并且尽可能地明确表达要描述的事物,不会造成类的语义冲突。
属性是类的一个特性,也是类的一个组成部分,描述了在软件系统中所代表的对象具备的静态部分的公共特征抽象,这些特性是这些的对象所共有的。在UML中,类的属性的表示语法为([ ]内的内容是可选的):[可见性] 属性名称 [:属性类型] [=初始值] [{属性字符串}]。
操作指的是类的所能执行的操作,也是类的一个重要组成部分,描述了在软件系统中所代表的对象具备的动态部分的公共特征抽象。操作由一个返回类型、一个名称以及参数表来描述。其中,返回类型、名称和参数一起被称为操作签名(Signature of the Operation)。操作签名描述了使用该操作所必需的所有信息。在UML中,类的操作的表示语法为([ ]内的内容是可选的):[可见性] 操作名称 [(参数表)] [:返回类型] [{属性字符串}]。
在标准的UML定义中,有时还应当指明类的另一种信息,那就是类职责。类职责指的是对该类所有对象所具备的那些相同属性和操作共同组成的功能或服务的抽象。在声明类职责时可以非正式添加一栏并将其逐条描述出来。类职责描述并不是必须存在;因此也可以将其作为文档形式存在。一个类可以有多种职责;设计得当则至少应有一种职责。
约束指定了该类所要满足的一或多个规则。 在UML中用大括号括起来的文本信息即为约束。接口是在没有给出对象实现和状态情况下对对象行为进行描述。通常包含一系列操作但不含属性,并且没有对外可见关联。接口是一种特殊类型类;所有接口均为构造型interface。一个类可通过实现接口支持接口指定行为。在UML中使用带有名称小圆圈表示接口;通过一条Realize线与实现它的类相连接即可表示接口。
依赖关系是指两个或多个模型元素之间语义上的连接关系。它只将模型元素本身连接起来而不需要用一组实例来表达它的意思。它表示了这样一种情形,提供者的某些变化会要求或指示依赖关系中客户的变化。也就是说依赖关系将行为和实现与影响其他类的类联系起来。
泛化关系是用来描述类的一般和具体之间的关系。具体描述建立在对类的一般描述的基础之上,并对其进行了扩展。因此,在具体描述中不仅包含一般描述中所拥有的所有特性、成员和关系,而且还包含了具体描述补充的信息。
关联关系是一种结构关系,指出了一个事物的对象与另一个事物的对象之间的语义上的连接。关联描述了系统中对象或实例之间的离散连接,它将一个含有两个或多个有序表的类,在允许复制的情况下连接起来。一个类的关联的任何一个连接点都叫做关联端,与类有关的许多信息都附在它的端点上。关联端有名称、角色、可见性以及多重性等特性。
实现关系将一种模型元素(如类)与另一种模型元素(如接口)连接起来,是说明和其实现之间的关系。
使用Rose创建类图:
1. 创建类
(1)在图形编辑工具栏中,选择 按钮,此时光标变为“+”号。
(2)在类图中单击选择任意一个位置,系统在该位置创建一个新类。系统产生的默认名称为“NewClass”。
(3)在类的名称栏中,显示了当前所有的类的名称,我们可以选择清单中的现有类,这样便把在模型中存在的该类添加到类图中。如果创建新类,将“NewClass”重新命名成新的名称即可。
2. 创建类之间的关系
(1) 创建和删除依赖关系。
(2) 创建和删除泛化关系。
(3)创建和删除实现关系。
(4)创建和删除关联关系。
以下是重构后的内容:
1. 在协作图中添加对象和链接对象的步骤如下:
(1) 选择工具栏中的协作图图形编辑工具栏中的图标,或者选择菜单栏“Tools”(工具)中“Create”(新建)下的“Object Link”选项,此时的光标变为“↑”符号。
(2) 单击需要链接的对象。
(3) 将链的线段拖动到要与链接的对象中。
(4) 双击链的线段,弹出设置链规范的对话框。
(5) 在弹出的对话框中,在“General”选项卡中设置链的名称、关联、角色以及可见性等。
(6) 如需要在对象的两端添加消息,可以在“Messages”选项卡中进行设置。
2. 使用Rose创建类图案例分析:
1. 确定类和关联
用例图实质上是一种系统描述的形式,自然可以根据用例描述来识别类。针对各个用例,通常可以根据如下的问题辅助识别:
(1) 用例描述中出现了那些实体?
(2) 用例的完成需要哪些实体合作?
(3) 用例执行过程中会产生并存储哪些信息?
(4) 用例要求与之关联的每个角色的输入是什么?
(5) 用例反馈与之关联的每个角色的输出是什么?
(6) 用例需要操作哪些硬设备?
在选课管理系统的简单用例中,我们可以很容易地识别“教师”类和“学生”类。教师可以安排课程和录入成绩,而学生可以选课和查询成绩,因而“成绩”和“课程”也是类。
2. 确定属性和操作
每个类的操作都有所不同。我们确定的一些类的属性和操作,为方便表示,我们使用英文标识。