用Rose绘制图书馆管理系统的类图。
一、类图的用途
类图是系统静态视图的一部分,它主要是用来描述软件系统的静态结构。该视图主要支持系统的功能需求,也就是系统要提供给最终用户的服务。当系统分析师以支持软件系统的功能需求为目的设计静态视图时,通常以下述3种方法之一使用类图。
(1)对系统的词汇建模;
(2)对简单协作建模;
(3)对逻辑数据库模式建模。
二、类图建模技术
1. 对简单协作建模
协同是软件系统的动态交互在软件系统的静态视图上的映射。协同的静态结构是通过类图表达出来的。在对类图的简单协同建模时,不仅要描述类的职责、结构和服务,还要强调类间的关系。
在协同建模时,要遵循的策略包括:
(1)识别要模拟的机制。一个机制描述了被建模的部分系统的一些功能和行为,这些功能和行为是由类、接口等元素交互作用产生的。
(2)对每种机制,识别参与协作的类、接口和其他协作,并识别它们间的关系。
(3)通过协作的脚本,发现建模的模型是否有被遗漏和语义错误的地方,并更正错误。
(4)得出相应类的对象,并确定具体的属性和操作。
2. 对数据库模式建模
在为数据库建模时,要遵循的策略包括:
(1)在系统中确定的类,它的状态必须超过其应用系统生命周期。
(2)创建包含这些类的类图,并把它们标记成永久的(persistent)。
(3)展开这些类的结构信息,即详细的描述属性的细节,并注重关联和构造这些类的基数。
(4)观察系统中的公共模式(如循环关联、一对一关联等),它们往往使物理数据库设计复杂化。如果必要,系统分析师需要创建简化逻辑结构的中间抽象。
(5)考虑这些类的行为,扩充那些对于数据存储和数据完整性很重要的操作。
(6)如果可能,用工具来把逻辑设计换成物理设计。
三、实验步骤及记录
1.使用Rose绘制类图的步骤:
- 创建类图
在浏览器窗口中,右键单击“Logic View”图标,从弹出的菜单中选择New →Class Diagram。此时,在“Logic View”树形结构下多了一个名为“New Diagram”的图标。要改变图标的名称,只要在创建时直接输入即可。还可以右键单击此图标,在弹出的菜单中选择Rename菜单项,可以为类图重命名。
双击类图图标,出现类图的编辑区和编辑工具栏,类图的工作栏及其说明如下图所示。
- 加入类
单击工具栏中类的图标
,然后在类图编辑区域中某个位置单击鼠标左键,就可以在该类图中绘制一个类。要改变类的名称,只要在创建时直接输入即可。还可以右键单击编辑区域中类的图标,在弹出的菜单中选择Open Specification... 按钮,在出现的对话框里可以对类进行一定的设置,包括设置类的名字、类型等。
- 增加类的属性
有两种方法可以增加类的属性(即类的成员变量)。
-
- 使用“Class Specification”。按照前面介绍的方法打开“Class Specification”窗口,然后选择“Attributes”选项卡,在窗口空白的地方单击右键,并且单击Insert按钮。
- 选择类的图标,单击右键,在弹出的菜单中选择New Attribute按钮。
- 增加类的方法
类的方法是该类所能进行的操作。增加类的方法与增加类的属性相似,按照前面介绍的方法打开“Class Specification”窗口,然后选择“Operation”选项卡,在窗口空白的地方单击右键,并且单击Insert按钮。还可以选择类的图标,单击右键,在弹出的菜单中选择New Operation按钮。
2.类图绘制
- CustomerAddress.mdl
- 绘制类图;
- 用正向工程生成Java代码框架;
- 比较代码和模型,分析其含义。
//Customer.java
public class Customer
{
public Address theAddress;
public Customer()
{
}
}
//Address.java
public class Address
{
public Address()
{
}
}
- CustomerProduct.mdl
- 绘制类图;
- 用正向工程生成Java代码框架
- 比较代码和模型,分析其含义
- 增加关联的多种性,生成Java代码框架,分析其含义。
//Customer.java
public class Customer
{
public Product theProduct;
public Customer()
{
}
}
//Product.java
public class Product
{
public Customer theCustomer;
public Product()
{
}
}
//Product.java
public class Product
{
private Customer theCustomer[];
public Product()
{
}
}
//Company.java
public class Company
{
private String companyName;
protected Person employee[];
public Company()
{
}
}
//People.java
public class People
{
private String name;
private Integer age;
public People()
{
}
public void move()
{
}
public void say()
{
}
}
//Student.java
public class Student extends People
{
private String studetNo;
public Student()
{
}
public void study()
{
}
}
- CompanyPerson.mdl
- 绘制类图;
- 用正向工程生成Java代码框架
- 比较代码和模型,分析其含义。
public class Contract
{
private Double salary;
public Contract()
{
}
}
public class Person
{
private String personName;
protected Company employer;
public Person()
{
}
}
public class Company
{
private String companyName;
protected Person employee[];
public Company()
{
}
}
- GEmployee.mdl
- 绘制类图;
- 用正向工程生成Java代码框架;
- 比较代码和模型,分析其含义。
//GEmployee.java
public class GEmployee
{
GEmployee manages;
GEmployee manager;
public GEmployee()
{
}
}
- .Polygon.mdl
- 绘制类图
//Polygon.java
public class Polygon
{
public Point vertex[];
private GrahicsBundle bundle;
public Polygon()
{
}
}
//GrahicsBundle.java
public class GrahicsBundle
{
private int color;
private int texture;
private int density;
public GrahicsBundle()
{
}
}
//Point.java
public class Point
{
public Point()
{
}
}
- People.mdl
- 绘制类图;
- 用正向工程生成Java代码框架;
- 比较代码和模型,分析其含义。
//People.java
public class People
{
private String name;
private Integer age;
public People()
{
}
public void move()
{
}
public void say()
{
}
}
/Student.java
public class Student extends People
{
private String studetNo;
public Student()
{
}
public void study()
{
}
}
//Teacher.java
public class Teacher extends People
{
private String teacherNo;
public Teacher()
{
}
public void teach()
{
}
}
3. 实例——图书馆管理系统的类图
在图书馆管理系统的实例中,数据类共有7个:Item、Title、Loan、Reservation、Borrower(项目,名称,借出,预定,借阅者),5个类之间有一定的关系。