使用Rational Rose 进行UML可视化建模
本课程以某所大学的《在线选修课程管理系统》为例来介绍怎样使用Rational Rose 进行UML可视化建模。
最终递交三个文件:regist.mdl, regist.sql, VB的代码或Java的代码。
内容:
一、 系统描述 2
二、 用例图(Use Case View) 2
三、 活动图(Activity Diagram)(建立选修课程目录表) 5
四、 相关的包和类以及简单类图 11
五、 用例实现图(Use Case Realization Diagram) 13
六、 顺序图(Sequence Diagram)与合作图(Collaboration Diagram) 15
七、 类图中的关系(Relationships) 18
八、 类图中的操作与属性 20
九、 类图中的泛化 22
十、 状态图(Statechart Diagram) 26
十一、 构件图(Component Diagram) 31
十二、 部署图(Deployment Diagram) 34
十三、 生成程序代码 35
十四、 创建数据库设计 40
十五、 附件1:转换后的Visual Basic程序 44
十六、 附件2:转换后的Java程序 45
十七、 附件3:生成的SQL语句 46
1. 大学教师选择本学期要教授的课程,每位教师最多只能上报4门课程。
2. 教师选课结束后,教务管理人员进行协调和确认教师的课程,并创建本学期的课程目录表,向学生公布。
2.学生填写课程选修表,每个学生最多选修4门课程;每门选修课程的学生数最多为10人,最少为3人。人数达到10人时,停止学生登记注册此门课程;
3. 学生选课结束后,系统自动取消人数少于三人的课程。
4. 学生按最终的课程表到财务处办理收费手续(billing system)。
5. 教师可查询所教课程的学生花名册(roster)。
6. 教务管理人员维护学生、教师和课程的信息。
1.《在线选修课程管理系统》中的执行者(Actors)
● 注册选修课程的学生;
● 教授选修课程的教师;
● 教务管理人员必须汇总选修课程情况,制作课程表;
● 教务管理人员必须维护关于课程、教师和学生的所有信息;
● 财务管理系统从本系统中取出收费信息。
2.使用Rational Rose 创建执行者(Actors)
图1
1) 右击browser框中的Use Case View包,弹出快捷菜单;
2) 选择New——Actor项;
3) 输入执行者的名字;(如出错,可用Rename命令更改)
4) 如果文档窗口不可见,选择屏幕上方的View——Documentation菜单;
5) 在browser框中选中所需执行者;
6) 将光标置于文档框中,输入相应文档。
3.《在线选修课程管理系统》中的用例(Use Case)
● 注册选修课程(学生);
● 选择教授的选修课程(教师);
● 索取课程花名册(Roster)(教师);
● 维护课程信息(教务管理人员);
● 维护教师信息(教务管理人员);
● 维护学生信息(教务管理人员);
● 创建课程目录(教务管理人员);
4.使用Rational Rose 创建用例(Use Case)
图2
1) 右击browser框中的Use Case View包,弹出快捷菜单;
2) 选择New——Use Case项;
3) 输入用例的名字;(如出错,可用Rename命令更改)
4) 如果文档窗口不可见,选择屏幕上方的View—— Documentation菜单;
5) 在browser框中选中所需用例;
6) 将光标置于文档框中,输入相应文档。
5.使用Rational Rose 创建主用例图(Main Use Case Diagram)
1) 双击browser框中的Use Case View包中的Main条目,打开主用例图;
2) 单击选中browser框中的执行者,并将其拖到主用例图中;
3) 重复第2)步,直到完成所需的工作为止;
4) 单击选中browser框中的用例,并将其拖到主用例图中;
5) 重复第4)步,直到完成所需的工作为止;
6) 在工具条中选择单向关联(Unidirectional Association)图标;
7) 单击一个执行者,并拖到相应的用例上;或单击一个用例,并拖到相应的执行者上。
图3
图4
1.使用Rational Rose 创建活动图(Activity Diagram)
1) 右击browser框中的Use Case View包,弹出快捷菜单;
2) 选择New——Activity Diagram项;
3) 输入活动图的名字;(如出错,可用Rename命令更改)
4) 双击browser框中的Activity Diagram名称,打开该图。
2.使用Rational Rose 创建活动(Activity)
1) 在工具条中选择Activity图标;
2) 在活动图(Activity Diagram)中单击要放置活动(Activity)的位置;
3) 输入活动名字;(如出错,可用Rename命令更改)
4) 在工具条中选择State Transition图标;
5) 单击一个活动,并将其拖到相应的活动上。
图5
3.使用Rational Rose 创建决策点(Decision Points)
1) 在工具条中选择Decision图标;
2) 在活动图(Activity Diagram)中单击要放置决策点的位置;
3) 输入决策的名字;(如出错,可用Rename命令更改)
4) 在工具条中选择State Transition图标;
5) 单击一个活动,并将其拖到相应的决策点上;
6) 在工具条中选择State Transition图标;
7) 单击一个决策点,拖至拐角处单击左键,再将其拖到相应的活动上;
8) 双击此条转换线,打开规格设定框;
9) 选择Detail 标签页;
10) 在Guard Condition框中输入条件No;
11) 点按OK按扭,关闭规格设定框;
12) 在此条转换线上单击左键,选中此条转换线;
13) 点按屏幕上方的Format:Line Style:Rectilinear菜单;
14) 调整这条线,使其美观。
图6
4.使用Rational Rose 创建同步条(Synchronization Bar)
1) 在工具条中选择Horizontal Synchronization图标;
2) 在活动图(Activity Diagram)中单击要放置同步条的位置;
3) 在工具条中选择State Transition图标;
4) 完成下图。
图7
5.使用Rational Rose 创建泳道( Swim lanes)
1) 在工具条中选择Swim lanes图标;
2) 在活动图(Activity Diagram)中单击要放置泳道的位置;
3) 双击泳道,打开规格说明框;
4) 在Name框中输入泳道的名字;
5) 点按OK按扭,关闭规格设定框;
6) 对泳道的大小位置进行调整;
7) 将所需的活动和变换线拖至新泳道中。
图8
6.使用Rational Rose 创建起始活动和终止活动
1) 在工具条中选择起始活动或终止活动图标;
2) 在活动图(Activity Diagram)中单击要放置起始活动或终止活动的位置;
3) 在工具条中选择State Transition图标;
4) 单击起始活动,拖到相应的活动上,或者单击一个活动,拖至终止活动上。
图9
1.在Rational Rose的Browser框中创建类(Class)
图10
1) 右击browser框中的Logica View,弹出快捷菜单;
2) 选择New——Class项;
3) 输入类的名字;(如出错,可用Rename命令更改)
4) 在所建类上单击右键,弹出快捷菜单;
5) 选择Open Specification项,选择General标签页;
6) 在Stereotype框中选择entity类;
7) 单击OK按扭关闭规格说明框。
边界类〈Boundary Classes〉:
● 可用来塑造操作者与系统之间的交互;
● 可用来理清用户在系统边界上的需求;
● 可设计抽象的用户界面对象。
控制类〈Control Classes〉:
● 可协调对象之间的交易;
● 可将使用案例的细节部分封装起来;
● 可将复杂的计算或商务逻辑封装起来。
实体类〈Entity Classes〉:
● 代表永久保存的信息;
● 代表E-R模型之中人、事、时、地、物或概念的信息及行为。
2.在Rational Rose的Browser框中创建包(Packages)
1) 右击browser框中的Logica View,弹出快捷菜单;
2) 选择New—— Package项;
3) 输入包的名字;(PeopleInfo包用来存放与人员有关的内容;Interfaces包用来存放与界面有关的内容;UniversityArtifacts用来存放与学校工件有关的内容。)
4) 新建图中的相关类,并设置其相应的类别;
5) 单击Browser框中的类,将其拖至相应的包中。
图11
3.Rational Rose中的主类图(Main Class Diagram)
1) 双击browser框Logica View中的Main类图以打开之;
2) 单击Browser框中的包,将其拖到Main类图上;
3) 重复第2)步,完成下图。
图12
4.在Rational Rose中创建包中的主类图(Package Main Class Diagram)
1) 双击Main类图中的University Artifacts包,rose将打开这个包,并创建这个包的主类图(Package Main Class Diagram);
2) 单击Browser框中的类,将其拖到类图上;
3) 重复第2)步,完成下图。
图13
1.使用Rational Rose 创建逻辑视图中的用例图(Use Case Diagram)
图14
1) 右击browser框中的Logica View,弹出快捷菜单;
2) 选择New——Use Case Diagram项;
3) 输入用例图的名字“Realizations”;(如出错,可用Rename命令更改)
4) 右击browser框中的Logica View,弹出快捷菜单;
5) 选择New—— Use Case项;
6) 输入用例的名字;(如出错,可用Rename命令更改)
7) 双击新建的用例,打开用例的规格设定框;
8) 单击Stereotype框,选择use case realization选项;
9) 关闭用例的规格设定框;
10) 重复4——9步,双击“Realizations”,打开实现用例图;
11) 将新建的实现用例拖入图中,如下图。
图15
1.使用Rational Rose 创建顺序图(Sequence Diagram)
图16
1) 右击browser框中的Logica View中的“Maintain course information”实现用例,弹出快捷菜单;
2) 选择New—— Sequence Diagram项;
3) 输入顺序图的名字“Creat a course”;
2.在顺序图中创建对象和信息
1) 双击顺序图名称,打开顺序图;
2) 将browser框Use CaseView包中的执行者“Registrar”拖入图中;
3) 选择工具条中的“Object”图标;
4) 单击图中放置对象的位置,并输入相应的名字;
5) 重复3——4步;
6) 选择工具条中的“Object Message”图标;
7) 从信息发出者拖至信息接收者;
8) 输入信息的名字;
9) 重复6——8步。
图17
3.给顺序图中的对象分配类
1) 单击选中Browser框中所需的类;
2) 将此类拖至顺序图相应的对象上。
图18
3.将顺序图转换为合作图
图19
1) 双击顺序图名称,打开顺序图;
2) 选择屏幕上方的菜单Browser——Create Collaboration Diagram,或者点按F5键;
3) 调整图中的对象和信息,使其美观。
1.使用Rational Rose 创建关系(Relationship)
图20
1) 打开University Artifacts包中的Main类图;
2) 选择工具条中的“Association”图标(若此图标不存在,则右击工具条,选择Customize项将其加入);
3) 点按类图中的一个类,拖至另一个类,输入关系的名称;
4) 选择工具条中的“Aggregation”图标(若此图标不存在,则右击工具条,选择Customize项将其加入);
5) 点按类图中的一个整体类,拖至另一个部分类,输入关系的名称。
2.使用Rational Rose 创建角色(Role)
图21
1) 新建一个People Info包的Main类图;
2) 右击关系线(靠近需要创建角色的类的一端),弹出快捷菜单;
3) 选择Role Name项,输入角色的名字。
3.增加多重度
图22
1) 双击关系线,使其弹出规格设定框;
2) 选择Detail标签页(Role A Detail 或者 Role B Detail);
3) 在Multiplicity框中输入或选择相应的多重度;
4) 点按OK按扭,关闭规格设定框。
4.创建包之间的关系
图23
1) 打开Logica View中的Main类图;
2) 选择工具条中的“dependency”图标;
3) 点按类图中的一个客户包,拖至另一个供应包。
图24
1.使用Rational Rose 创建属性和方法
1) 右击browser框Logica View中UniversityArtifacts包中的类,弹出快捷菜单;
2) 选择New——Attribute项,输入相应的名字;
3) 重复1——2步,完成添加属性;
4) 右击browser框Logica View中UniversityArtifacts包中的类,弹出快捷菜单;
5) 选择New——Operation项,输入相应的名字;
6) 重复4——5步,完成添加操作;
2.在类中增加了属性和操作后对类图的影响
1) 打开University Artifacts包中的Main类图;
2) 将图中相关类的显示改为label(右击每一个类,选择Options: Stereotype Display: Label菜单);
3) 类图中相应的属性与操作自动变化为下图。
图25
1.使用Rational Rose 创建一个有泛化关系的类图
1) 在People Info包中创建一个空类图Generalization;
2) 创建类图中相关的类,并将相关的类拖入图中;
3) 选择工具条中的“Generalization”图标;
4) 点按类图中的一个子类,拖至一个父类;
5) 重复第4步完成下图;
图26
6) 将左边的泛化箭头拖至右边的泛化线上;
7) 调整图形。
图27
2.将有泛化关系的类图进行扩展
1) 将Course Offering类拖入图中,并创建对应的关联线、角色、多重度;
2) 为相关的类创建属性。
图28
3.将有泛化关系的类图进行优化
1) 在Browser框中将子类中的公共属性拖入父类中;
2) 将子类中多余的属性删去。
图29
4.将有泛化关系的类图进行多层泛化
1) 在People Info包中创建相关的类,并拖入图中;
2) 创建关系线、泛化线和多重度。
图30
1.使用Rational Rose 创建状态图(Statechart Diagrams)
图31
1) 右击browser框中的CourseOffering类,弹出快捷菜单;
2) 选择New——Statechart Diagrams项;
3) 输入状态图的名字“CourseOffering States”。
2.使用Rational Rose 创建状态(States)
图32
1) 在工具条中选择State图标;
2) 在状态图中单击要放置状态的位置;
3) 输入状态的名字。(如出错,可用Rename命令更改)
3.使用Rational Rose 创建状态转换(State Transitions)
图33
1) 在工具条中选择State Transitions图标;
2) 单击起始状态,并拖至下一个状态;
3) 输入状态转换的名字。(如出错,可用Rename命令更改)
4.使用Rational Rose 创建起始状态
1) 在工具条中选择Start图标;
2) 在状态图中单击要放置起始状态的位置;
3) 用状态转换线进行连接。
图34
5.使用Rational Rose 创建结束状态
图35
1) 在工具条中选择Stop图标;
2) 在状态图中单击要放置结束状态的位置;
3) 用状态转换线进行连接。
6.使用Rational Rose 增加状态转换的细节部分
1) 双击某条转换线,打开规格设定框;
2) 选择Detail 标签页;
3) 在相应的框中输入action(/后的内容)、guard condition([ ]里的内容)以及发出的send(^后的内容);
4) 点按OK按扭,关闭规格设定框。
图36
7.使用Rational Rose 增加状态的Actions部分
1) 双击某个状态,打开规格设定框;
2) 选择Actions标签页;
3) 右击Actions框中的任一位置,弹出快捷菜单;
4) 选择Insert项,将创建一个类型为entry的action;
5) 双击这个action,弹出action的规格设定框;
图37
6) 在when框中设定相应的类型;
7) 在type框中设定:action或者send event(用^表示);
8) 输入action的名字,或event的信息;
9) 点按OK按扭,关闭Action规格设定框。
10) 点按OK按扭,关闭状态规格设定框。
图38
1. 使用Rational Rose 创建Main构件图(Component Diagram)
1) 在Browser框中的Component View中创建图中的各个构件包;
2) 双击Browser框中的Component View中的Main构件图;
3) 将Browser框中的Component View中的构件包拖入图中;
4) 创建包之间的依赖线。
图39
2.创建University构件包中的构件
1) 双击Main构件图中的University包,打开图形;
2) 在工具条中选择Component图标;
3) 单击图中某一位置,放置构件;
4) 输入构件名称。
图40
3.将类映射到构件上
图41
1) 右击Browser框中的CourseOffering构件,弹出快捷菜单;
2) 选择Open Specification项;
3) 选择Realizes标签;
4) 右击所需的类,弹出快捷菜单;
5) 选择Assign项;(分配)
6) 点按OK按扭,关闭规格设定框。
1.使用Rational Rose 创建部署图(Deployment Diagram)
1) 双击Browser框中的部署图(Deployment Diagram);
2) 选择工具条中的Processor图标,并单击图中某一位置;
3) 输入结点的名字;
4) 选择工具条中的Connection图标;
5) 点击某一结点,拖至另一结点;
6) 选择工具条中的Text图标;
7) 在相应结点下写上文字。
图42
1.使用Rational Rose为构件设定程序设计语言
图43
1) 右击Browser框Component View中University包中的CourseOffering构件,弹出快捷菜单;
2) 选择Open Specification项,打开构件Course Offering的规格设定框;
3) 在Language框中选择相应的语言;
4) 点按OK按扭关闭对话框。
2.建模辅助工具(如需要设定,则可进入,一般情况下可省略)
1) 右击Browser框Logica View中University包中的Course Offering类,弹出快捷菜单,选择Model Assistant项;
2) 如需要设定,则可更改选项,一般情况下可省略此步操作;
3) 编程语言为Visual Basic时,见图44,前提是系统必须安装了VB;编程语言为Java时,见图45,前提是系统必须安装了JDK。
图44:编程语言为Visual Basic时
图45:编程语言为Java时
3.生成代码
1) 右击Browser框Component View中University包中的CourseOffering构件,弹出快捷菜单;
2) 选择Update Code项;
图46
3) 选中相应的check框,点击Next按扭;
图47
4) 点击Finish按扭;
图48
5) 如有错误,则显示相应错误;
6) 点按Close按扭,关闭窗口。
1.将实体类的persistence属性设为persistent
本系统有四个实体类:Student、Professor、Course、CourseOffering,分别将它们的persistence属性设为persistent。
以Course为例,双击Browser框Logical View中UniversityArtifacts中Course类,弹出class specification对话框,选择detail tab,将persistence属性设为persistent。
图49
2.生成数据模型
将UniversityArtifacts包和PeopleInfo包转成数据库的数据模型。
以UniversityArtifacts为例。右击Browser框Logical View中UniversityArtifacts包,弹出快捷菜单,选择Data Modeler/ Transform to Data Model。弹出对话框,在Destination Schema中键入”db”,点击”OK”。在Browser框Logical View中将生成”Schemas”包和“
对PeopleInfo包进行相同操作,生成T_Student, T_Professor, T_RegistrationUser三个table.
图50
3.创建Data Model Diagram
右击Browser框中Logical View/”Schemas”/“
图51
双击Main,打开进行编辑,将五个table拖进diagram,生成ER图。
图52
4.生成SQL语句
右击Browser框中Logical View/”Schemas”/“
你可以选择生成表格create或drop的SQL语句。
图53
Option Explicit
'##ModelId=3E2A1E9D0148
Implements Course
'##ModelId=3E2E13980177
Private mCourseObject As New UniversityArtifacts.Course /*由Course 泛化而来*/
'##ModelId=3E2A980002EE
Public Teacher As Professor /*由设置角色而来*/
'##ModelId=3E2A9DAE0261
Public NewProperty2(3 To 10) As Student /*由限定条件而来*/
'##ModelId=3E2A7BEB035D
Public NewProperty As Course
'##ModelId=3E2A826C0109
Public Sub getOffering()/*由getOffering操作而来*/
End Sub
'##ModelId=3E2A827B0280
Public Sub addProfessor()/*由addProfessor操作而来*/
End Sub
'##ModelId=3E2E139801F4
Private Sub Course_getOfferings()/*由泛化继承而来*/
End Sub
'##ModelId=3E2E13980203
Private Sub Course_setProfessor()/*由泛化继承而来*/
End Sub
'##ModelId=3E2E13980213
Private Property Set Course_(ByVal RHS As CourseOffering)
End Property
'##ModelId=3E2E13980261
Private Property Get Course_() As CourseOffering
End Property
'##ModelId=3E2E1F55030D
Public Sub CourseOffering()
End Sub
'##ModelId=3E2E3247038A
Private Property Set Course_theProfessorCourseManager(ByVal RHS As ProfessorCourseManager)
End Property
'##ModelId=3E2E32480000
Private Property Get Course_theProfessorCourseManager() As ProfessorCourseManager
End Property
'##ModelId=3E2E3248003E
Private Property Set Course_theCourseOffering(ByVal RHS As CourseOffering)
End Property
'##ModelId=3E2E3248009C
Private Property Get Course_theCourseOffering() As CourseOffering
End Property
//Source file: C:\\Program Files\\Rational\\RUPBuilder\\University\\CourseOffering.java
package University;
public class CourseOffering extends Course /*由Course 泛化而来*/
{
private Course mCourseObject;
public Professor Teacher; /*由设置角色而来*/
public Student NewProperty2[];
public Course NewProperty;
/** @roseuid 3E2E1F55030D */
public CourseOffering()
{
}
/**
* @roseuid 3E2A826C0109
*/
public void getOffering()/*由getOffering操作而来*/
{
}
/**
* @roseuid 3E2A827B0280
*/
public void addProfessor()/*由addProfessor操作而来*/
{
}
/**
* @roseuid 3E2E139801F4
*/
private void Course_getOfferings()/*由泛化继承而来*/
{
}
/**
* @roseuid 3E2E13980203
*/
private void Course_setProfessor()/*由泛化继承而来*/
{
}
/**
* @param RHS
* @roseuid 3E2E13980213
*/
private void Course_(CourseOffering RHS)
{
}
/**
* @return CourseOffering
* @roseuid 3E2E13980261
*/
private CourseOffering Course_()
{
return null;
}
}
CREATE TABLE T_Course (
name SMALLINT NOT NULL,
description SMALLINT NOT NULL,
creditHours SMALLINT NOT NULL,
T_Course_ID INTEGER NOT NULL,
CONSTRAINT PK_T_Course7 PRIMARY KEY (T_Course_ID)
);
CREATE TABLE T_CourseOffering (
T_CourseOffering_ID INTEGER NOT NULL,
T_Course_ID INTEGER,
T_RegistrationUser_ID INTEGER NOT NULL,
COL_2 INTEGER NOT NULL,
CONSTRAINT PK_T_CourseOffering8 PRIMARY KEY (T_CourseOffering_ID)
);
CREATE TABLE T_RegistrationUser (
realname VARCHAR ( 255 ) NOT NULL,
username VARCHAR ( 255 ) NOT NULL,
password VARCHAR ( 255 ) NOT NULL,
birthday DATE NOT NULL,
gender SMALLINT NOT NULL,
T_RegistrationUser_ID INTEGER NOT NULL,
department INTEGER NOT NULL,
CONSTRAINT PK_T_RegistrationUser11 PRIMARY KEY (T_RegistrationUser_ID)
);
CREATE TABLE T_Professor (
T_RegistrationUser_ID INTEGER NOT NULL,
CONSTRAINT PK_T_Professor12 PRIMARY KEY (T_RegistrationUser_ID)
);
CREATE TABLE T_Student (
T_RegistrationUser_ID INTEGER NOT NULL,
CONSTRAINT PK_T_Student13 PRIMARY KEY (T_RegistrationUser_ID)
);
CREATE INDEX TC_T_CourseOffering35 ON T_CourseOffering (COL_2);
CREATE INDEX TC_T_CourseOffering28 ON T_CourseOffering (T_Course_ID);
ALTER TABLE T_CourseOffering ADD CONSTRAINT FK_T_CourseOffering13 FOREIGN KEY (COL_2) REFERENCES T_Professor (T_RegistrationUser_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE T_CourseOffering ADD CONSTRAINT FK_T_CourseOffering8 FOREIGN KEY (T_Course_ID) REFERENCES T_Course (T_Course_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE T_CourseOffering ADD CONSTRAINT FK_T_CourseOffering10 FOREIGN KEY (T_RegistrationUser_ID) REFERENCES T_Professor (T_RegistrationUser_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE T_Professor ADD CONSTRAINT FK_T_Professor11 FOREIGN KEY (T_RegistrationUser_ID) REFERENCES T_RegistrationUser (T_RegistrationUser_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE T_Student ADD CONSTRAINT FK_T_Student12 FOREIGN KEY (T_RegistrationUser_ID) REFERENCES T_RegistrationUser (T_RegistrationUser_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
本文来源:https://www.2haoxitong.net/k/doc/a3ac0a78c281e53a5902ff66.html
文档为doc格式