实验四类模型的建立
1、实验类型
设计性实验
2、实验目的
(1)理解类的基本概念。
(2)掌握在Rational Rose 中绘制类的操作方法。
(3)掌握在Rational Rose 中绘制类的关联、依赖、泛化关系。
3、实验内容与要求
实验分成两部分:第 1 部通过完成的用例图,初步了解系统的业务功能,对需求进一步分析,从中识别出系统的概念类,对系统进行分析阶段的静态建模;第2 部分要求在第1 部分系统分析的基础上,精化、完善分析阶段的类图,使之成为计算机系统可实现的模型。
运用课堂所学的有关如何抽象出类的知识,完成如下任务:
(1)寻找和抽象出图书管理功能中的类。
(2)识别类间的关系。
(3)精化、完善类图,使之成为计算机系统可实现的模型。
4、实验步骤
4.1 分析阶段的静态建模
1.分析:分析阶段类的识别仅限于业务领域的概念类(或称实体类),根据课堂教授的方法——名词短语策略和不同类别的概念,将图书管理业务领域的实体类识别如下:馆藏书目、馆藏资源品种、图书品种、碟片品种、资源项、借书记录、预定记录、逾期记录、罚款细则、图书管理员、读者。
2.绘制类的步骤:
(1)打开图书管理系统.mdl。
(2)打开Rose 中的Logical View(逻辑视图),鼠标右键单击Logical View 根节点后,选择“New——Package”项,在逻辑视图下建一个名为“Class Diagram”(类图)的包,用于存放图书管理系统的静态模型。
(3)鼠标右键单击新建的“Class Diagram”包,在“Class Diagram”包下建立一张名为“Entity”的业务领域实体类图。
鼠标双击“Entity”类图,在绘图窗口打开这张新建类图。
(4)添加以下如图所示的类
(5)添加类的关联关系:在左边的类图工具栏选取“Unidirectional Association”图标,在右边图的“馆藏书目”类与“馆藏资源品种”类之间添加一个关联,如
下图。
(6)设置关联属性:选中新添加的关联,单击鼠标右键,选择“Open Specification”项,打开该关联的设置对话框。
在name框中为该关联命名:记载;此时可以看到关联的一方Role A 是“馆藏资源品种”类,另一方Role B 是“馆藏书目”类。
点击“Role A Detail”选项,为关联类“馆藏资源品种”定义关联的多重性,在Multiplic 框中选择1..n 即可;同理,点击“Role B Detail”选项,为关联类“馆藏书目”定义关联的多重性,在Multiplic 框中选择1 即可,这表示1个“馆藏书目”中可以记载多个“馆藏资源品种”。
定义完毕的关联,如下图所示。
(7)去掉关联的箭头:在分析阶段,关联的箭头指向暂可以不做考虑,这种具体的指向关系,可以放到设计阶段再进行,故这里要去掉指向“馆藏资源品种”箭头。
选中关联,点击鼠标右键,出现快捷菜单,再次选择“Open Specification”菜单项,再次打开关联的设置对话框,选中Role A Detail 选项,将图中“Navigable”前的“√”去掉,点击OK 即可去掉指向“馆藏资源品种”的箭头。
重复以上
步骤,将其余类之间的关联一一画出、定义,最终下图所示。
(8)定义聚集关联:“馆藏资源品种”与“资源项”是整体——部分的聚集关联,一个馆藏资源品种是由若干资源项组成,为了将这种特殊的关联用UML 表示出来,可以选中二者间的关联直线,点击鼠标右键,再次选择“Open Specification”菜单项,打开关联的设置对话框,此时我们可以看到“馆藏资源品种”对应的是Role B(即角色B)。
点击“Role B Detail”选项,将图中“Aggregate”前打“√”,点击OK 即可在“馆藏资源品种”端添加聚合。
(9)添加类的泛化关系:“馆藏资源品种”是“图书品种”和“碟片品种”的父类,故二者之间是类的泛化关系,为了将它们的泛化关系用UML 语言表示出来,要在主界面左边的类图工具栏中选取“Generalization”图标,在右边图的“馆藏资源品种”类与“图书品种”类之间添加一个泛化关联;同样,在右边图的“馆
藏资源品种”类与“碟片品种”类之间添加一个泛化关联。
(10)至此,图书管理系统分析阶段的静态建模结束,点击主菜单“File——Save”完成对“图书管理系统.mdl”模型文件的保存。
4.2 设计阶段的静态建模
1.分析:设计阶段类的静态建模包括两方面:第1 方面是将分析阶段识别的领域实体类进一步细化,将分析阶段识别的汉语的类名、属性名和方法名转变为英文的类名、属性名和方法名,这样便于后续正向工程代码框架的生成,同时要将分析阶段未识别出来的属性、方法补充进去;第2方面,要根据软件体系结构的分层模式,为静态模型添加边界类和控制类,绘制一张反映边界类、控制类、实体类三者关系的总体图。
2.绘制的步骤:
(1)打开图书管理系统.mdl。
(2)打开Rose 中的Logical View(逻辑视图)节点下“Class Diagram”包中的“Entity”实体类图,鼠标右键单击“借书记录”类,选择“Open Specification”菜单项,打开类设置对话框,更改类名“借书记录”为“Loan”,点击“Attributes”选项,将name 框中的属性名“借书日期”更改为“lendDate”;在Type 框中定义属性类型为“Date”型;在“Export Control 框中定义属性的可见性(即作用域)为“Private”私有属性。
点击OK 按钮即可完成该属性的定义;以此类推完成属性“还书日期”的详细设计,同时设计阶段增加一个“LoanID”属性,String 类型,用于标识一个借书记录;增加一个“dueDate”属性(截止期限日期),Date
类型,用于逾期的处理。
如下图所示:
(3)设计类的方法:鼠标右键单击“Loan”类,在出现的快捷菜单中,选择“Open Specification”菜单项,打开类设置对话框,点击“Operations”选项,鼠标双击“设置借书日期”方法,打开设置该方法的对话框,将name 框中的方法名“设置借书日期”更改为“setlendDate”;在Return 框中定义方法的返回类型为“void”型;在“Export Control 框中定义方法的可见性(即作用域)为“Public”公有方法。
(4)定义类方法的参数:在“Detail”选项界面的“Arguments”的空白处单击鼠标右键出现快捷菜单,选择“Insert”菜单项,添加一个参数,参数名为“ADate”,在Type 框中设置参数类型为“Date”型。
以此类推,重复步骤,完成方法“设置还书日期(setreturnDate)”(参数为ADate:Date 型,返回类型为void),“取得借书日期(getlendDate)”、“取得还书日期(getreturnDate)”(无参数,返回值为Date 型)三个方法的更改设计。
另外对应于新增加的属性“dueDate”,添加类的两个新方法:“getdueDate”(参数、返回值与方法getlendDate 相同)和“setdueDate”(参数、返回值与方法setlendDate 相同)。
(5)至此,借书记录类“Loan”的详细设计完成,以此类推,在分析阶段的基础上,完成其他类属性和方法的详细设计。
(6)设计阶段需要添加边界类、控制类,在添加之前,需要建立一个实体类子包“BO”,用于存放上述设计的实体类。
首先在主界面的导航窗口中,鼠标右击”ClassDiagram”包,选择“New——Package”菜单项,在“Class Diagram”下建立一个名为“BO”的实体子包。
在导航窗口中,按住鼠标左键不放,将已建好的实体类拖入到“BO”子包下,类似于Windows 资源管理器的移动文件操作,
移动完成后,将如下所示。
(7)设计边界类:与第(6)步相似,在导航窗口“Class Diagram”包下建立边界类子包“UI”,子包下添加一个界面类“MainWindow”。
(8)以此类推,完成其他边界类的添加(LendWindow、ReturnWindow、QueryWindow、ReservationWindow、MaintainReaderWindow 和MaintainResourceWindow)。
由于边界类一般情况下不需要设置属性,方法也是在设计完顺序图后Rose 自动添加,为此,在这里只要为“MainWindow”主界面类添加一个方法main(参数args 属于String[]型,返回类型为void)即可。
(9)设计控制类:参照设计边界类的步骤,为控制类在“Class Diagram”
包下建立一个“CO”子包,并在“CO”子包下添加控制类(LendLogic、ReturnLogic、QueryLogic、ReservationLogic、MaintainReaderLogic 和MaintainResourceLogic)。
控制类和边界类相类似,一般情况下,不需要设置属性,方法也是在设计完顺序图后Rose 自动添加,因此,控制类添加完成后,如图所示。
(10)至此,实体类、边界类和控制类均已添加完毕。
(11)首先按住鼠标左键不放,将导航窗口Use Case View 节点下的参与者“图书管理员”和“读者”拖到类图Overall 的绘图窗口中,然后用同样的方法,将“UI”子包下的边界类拖到类图Overall 的绘图窗口中,以此类推,再将“CO”子包中的控制类拖到类图Overall 的绘图窗口中。