第八章 关系
介绍类之间的关系。关系是类之间的词法连接,使一个类了解另一个类的属性、操作和关系。
寻找关系的方法
1. 检查Sequence框图和Collaboration框图。如果类A向类B发出消息,则它们必然有关系。通过这种方法找到的一般是关联和依赖型关系。
2. 检查类的整体/部分关系。然和由其它类组成的类都参与聚集。
3. 检查类的泛化关系。
关系类型
关联
关联是类之间的词法连接,使一个类知道另一个类的公共属性和操作。
关联可以是双向的,但尽量调整为单向,这样可以保证被使用的类可以复用。
关联中被使用的类(即被指向的类)一般是作为另一个的类属性。
依赖
依赖显示一个类引用另一个类。依赖并不对关系的类增加属性,这是跟关联的主要区别。
再依赖中,因为一个类不是另一个的属性,所以实现中有三种方法。一是使用全局变量,二是使用本地变量,三是使用函数参数。
包之间也,可以存在依赖性。包A到包B的依赖性表示A中的某些类与B中的某些类有单向关系。
聚集
聚集是强关联。聚集是整体与部分的关系。
实现
显示类与接口、包与接口、组件与接口和用例与用例实现(协作)之间的关系。
泛化
表示两个模型元素(类、角色、用例和包)之间的继承关系。
设置关系规范
基数
表示某个时刻一个类的几个实例和另一个类的一个实例相关联。
角色
表示该类在关联关系中的作用
输出控制
在关联关系中,因为被关联类是关联类的一个属性,所以使用Public、Private、Protected、Package或implementation来设置该属性的可见性。
静态关系
类似输出控制,表示属性是否静态变量
朋友关系
表示Client类能访问Supplier类的非公共属性和操作。
包容
确定聚集关系生成的属性按值还是按引用包容。
限定符
用来缩小关联范围(???)
链接元素
产生一个类,与关联相关。用来设置关联属性。
使用Rose管理关系的技巧
1. 设置关系基数的方法:对关联(包括聚集)关系在规范窗口中Role Detail标签中设置;对其它关系,在规范窗口的general标签中设置。
2. 设置朋友关系的方法:对关联(包括聚集)关系在规范的Role Detail标签中设置;对其它关系,在规范窗口的general标签中设置。
3. 设置链接元素的方法:规范->Detail->Link Element。然后使用工具栏中的Association Class来关联连接元素和连接。
第九章 对象行为
本章介绍Statement框图。Statement框图显示了一个对象从创建到删除的生命周期。它可以建模类的动态行为。
Statement框图
状态
状态是对象存在的可能性条件。可以从两个地方确定对象状态:属性值和与其它对象的关系。在UML中用圆角矩形表示。
状态细节
一个状态可以加入五种信息:活动、进入操作、退出操作、事件、状态历史。
1. 活动:是对象在特定状态时进行的行为。活动是可中断的行为,可以在对象处于该状态时运行完毕,也可以在对象转入另一个状态时中断。活动在状态内显示,前面加do/。
2. 进入操作:时对象进入某个状态时发生的行为。进入操作时不可中断的,这是与活动的重要区别。前面加上entry/
3. 退出操作:与进入操作类似,但在退出某个状态时发生。也是不可中断的。前面加exit/。
4. 活动、进入操作、退出操作中的行为可以包括相另一对象发送事件。前面加^。例如:Do/ ^Target.Event(Arguments)。
5. 活动可以在收到某个事件之后发生。
转换
是从一个状态变成另一个状态。每个转换画成从原状态到新状态的箭头。可以自反。
转换细节
每个转换可以指定多个规范,包括事件、变元、保证条件、活动和发送事件。
1. 事件:导致对象从一种状态变成另一种状态。大多数转换都有事件,导致对象从一个状态转换到另一个状态。但也可以没有事件而自动过渡。对于自动过渡,对象在发生了所有进入操作、活动和退出操作后自动从一种状态转换到另一种状态。
2. 保证条件:控制转换何时发生和不发生。
3. 活动:转换中发生的不可中断的行为。进入和退出操作在状态内显示,定义每次对象进入或退出状态时的行为。但大多数活动时在过渡线上画出的,因为不是在每次对象进入或退出状态时发生。
开始状态
对象创建时的状态。
停止状态
对象删除时的状态。
使用嵌套状态与状态历史
可以在一个状态中嵌套一个或几个状态。嵌套状态称为子状态,而大状态称为父状态。如果两个或几个状态有相同的转换,可以组成父状态。然后不是对每个状态维护两个相同的转换,而是把转换移到父状态中。
父状态中可以有一个开始状态。开始状态表示父状态中的默认起点。对象首次进入父状态时,处于这种开始状态。
状态可以设置状态历史来记住对象状态。如果设置历史选项,则对象可以离开父状态,然后返回到正确状态。
使用Rose处理状态框图
1. 使用状态历史的方法:规范窗口->设置State/Activity History框。
第十章 Component视图
在Component视图中,我们着重考虑系统的实际结构。
组件是代码的物理模块。组件w包括代码库和运行文件。组件间唯一的关系类型是依赖。依赖要求一个类在另一个类之前编译。
组件类型
1. 组件(狭义):具有良好定义接口的软件模块,可以用stereotype字段指定组件类型(如ActiveX、Applet、Application、Dll和Executables等等)。
2. 子程序规范:子程序一般是一组子函数(roution)的集合。规范是显示规范。子程序中没有类定义。
3. 子程序体。子程序的实现体。
4. 主程序。主程序是包含程序根的文件。
5. 包规范:包是类的实现方法。包规范是头文件,包含类的函数原型信息。对应c++,包规范为h文件。
6. 包体:包含类操作代码。在c++中是cpp文件。
7. 任务规范和任务体:表示具有独立控制线程的包。
8. 数据库。
使用Rose管理Component框图
第十一章 Deployment视图
该视图考虑应用程序的物理部署。显示网络上的所有节点、节点间的连接和每个节点上运行的进程。
Deployment框图的组成
处理器
处理器是任何具有处理功能的机器。
可以设置其版型(按处理器进行分类)、特性(速度、内存等)、调度方法。
调度方法记录处理器使用的进程调度方法,包括
1. Preemptive
2. Noe-Preemptive
3. Cyclic
4. Executive
5. Manual
进程是一个处理器其上运行的但线程执行过程。
设备
没有处理功能的机器或硬件。
连接
处理器、设备之间的实际链接。通常,连接表示网络节点之间的物理网络连接。
第十二章 用Rational Rose生成代码和逆向转出工程代码简介
正向工程步骤
检查模型
检查模型的一致性。常见错误包括Sequence框图或Collaboration框图中的消息与操作不映射,以及对象和类不映射等。
创建组件
生成代码之前,必须现将类映射到相应的源代码文件。所以必须先创建组件。
将类映射到组件
设置代码生成属性
控制代码如何生成。可以参考下一章关于ANSI C++和Visual C++的说明。
选择类、组件、包
生成代码时,可以一次生成一个类、一个组件或一个包。
生成代码
代码生成的元素如下:
1. 类
2. 属性
3. 操作签名
4. 关系
5. 组件
6. 文档。
逆向工程
逆向工程使用源代码中的信息创建或更新Rose模型。Rose从代码读取组件、包、类、关系、属性和操作。
Rose进行正向工程和逆向工程的方法
1. 检查模型一致性的方法:Tools->Check Model。
2. 发现访问问题的方法:Report->Show Access Violations。
3. 浏览代码生成属性的方法:Tools->Options,然后选择具体的语言页签。在Type中选择设置的元素。
4. 在设置代码生成属性之前,最好先生成一个自己的备份。修改自己的备份。
第十三章 C++与Visual C++代码生成和逆向转出工程代码
C++生成代码的步骤
ANSI C++生成代码步骤
1. 创建组件
2. 将类赋予组件
3. 选择代码生成属性
4. 选择Class或Component框图中要生成的类和组件
5. 选择Tools->ANSI C++->Generate Code生成代码
6. 选择Tools->ANSI C++->Browse Header或Browse Body浏览生成的代码。
Visual C++生成代码步骤
1. 启动向导。Tools->Visual C++->Update Code
2. Rose显示Select Components和Classes窗口。在用Visual C++生成代码之前,必须将类赋予组件。
3. 如果没有将类赋予组件,选择Ctrl+R创建。
4. 改变组件和类的代码生成属性。
ANSI C++代码生成属性
方法:Tools->Options->ANSI C++页签。在Type中选择要修改的属性。
类属性
类属性时适用于类的ANSI C++代码生成属性,这些属性可以改变类名、确定是否生成类的构造器与逆向转出工程代码并设置该类的其它类特定属性。
除了使用前面方法设置所有类属性之外,还可以通过在一个类的规范窗口中选择
除去上述属性,还可以设置每个类的默认成员函数,以及是否对属性产生get/set操作。方法是:选择一个或几个类,然后右击选择ANSI C++->Class Customization。
属性的属性
前面的方法可以设置所有属性的属性。要设置某个特定属性的属性,方法是:在属性规范窗口中的ANSI C++标签中设置。
操作属性
前面的方法可以设置所有操作的属性。要设置某个特定操作的属性,方法是:在操作规范窗口中的ANSI C++标签中设置。
包属性
可以设置名字控件名和指定包是否具有名字空间。
前面的方法可以设置所有包的属性。要设置某个特定包的属性,方法是:在包规范窗口中的ANSI C++标签中设置。
组件属性
组件属性是与Rose所生成和逆向转出工程代码的.cpp和.h文件相关的属性。
前面的方法可以设置所有组件的属性。要设置某个特定组件的属性,方法是:在组件规范窗口中的ANSI C++标签中设置。还有种方法设置特定组件的属性:右击组件,ANSI C++->Open ANSIC++ Specification。
角色属性
泛化属性
Visual C++代码生成属性
除了可以采用ANSI C++类似方法,VC还可以使用Moel Assistant可以方便的设置生成属性。
VC逆向工程
Tools->Visual C++->Update Model from Code。
第十八章 Rose Data Model
本章介绍利用Rose建模应用程序的数据库。
创建数据模型的步骤
创建数据库
1. 增加数据库。
方法是:右击Component View,然后Data Modeler->New->Database。在规范中选择Target为相应的DBMS。
2. 增加表空间。
表空间是表中存储的逻辑单元。每个表空间可以有一个或几个容器,每个容器是一个物理存储设备。每个容器可以分为更小的单元,称为extent。表空间中的表在表空间内的容器之间均匀分布。每个表空间都有初始长度。用完这个空间之后,DBMS可以自动按预定增量增加表之间长度。增量长度可以在Rose中设置。即使设置增量,但Rose中还可以设置最大长度,容器不能超过这个长度。建立表控件之后,可以将表加入到表空间中。
方法:右击数据库,Data Modeler->New->Tablespace。
3. 在表空间中设置容器。
方法:表空间规范中选择Containers,在空白位置选择New。可以设置容器的文件名、处事长度、最大长度和每次增量。
增加保存数据模型的结构(Schema)并将结构(Schema)赋予数据库。
1. 增加结构:
在Rose中Schema是数据模型的容器。所有表、字段、触发器、限制和其它数据模型单元都放在结构中。两个例外是域和数据库本身。前者放在域包中,后者放在Component视图中。
每个Scheme映射模型中的数据库。每个数据库可以包含一个或多个Schema。对schema指定的DBMS要与对schema的数据库指定的DBMS相同。
方法:右击LogicalView,Data Modeler->New->Schema。在规范窗口中设置Database为之前添加的数据库。
2. 创建数据模型框图
方法:右击浏览器中的一个Schema,Data Modeler->New->Data Model Diagram。
创建域和域包
1. 域用来执行业务规则,如必须的字段、字段有效值和字段默认值。域是种模式,一旦建立之后,可以适用于数据库中的一个或多个字段。域必须放在域包中。每个域包指定特定DBMS。一个域可以应用于多个Schema。
2. 创建域包的方法:右击Locical view,选择Data Modeler->New->Doman Package。在规范窗口中设置使用的DBMS。
3. 创建域的方法:Data Modeler->New->Domain。
在每个结构中增加表格
建立结构之后,可以在其中创建表格。数据库中的每个表建模为Rose中的持久类,构造型为Table。方法:右击Schema,选择Data Modeler->New->Table。
在表中增加细节(字段、限制、触发器、索引、主键)
1. 增进列(字段):
类分为数据列和计算列。计算列是SQL语句从一个或几个其他列计算的来。MS Sql Server还支持标识列,是系统生成数据的列。
字段可以设置属性,一种方法是依次指定类型、唯一性、是否主键、是否空值等属性;另一种方法是指定一个之前设置的域。这就是域的好处,可以事先指定一个模式,然后供多个字段使用。
可以给字段指定一个限制。表示该限制为真时,表格才能更新。
2. 增加键限制:
键限制有三种:主键限制、唯一限制和索引。
主键限制保证主键字段种输入的值不是NULL,而且唯一。Rose在创建主键时自动创建主键限制。
唯一限制保证列中输入的值唯一。
索引可以帮助迅速访问记录。
3. 增加触发器:
触发器是遇到特殊事件时运行的SQL过程。触发器可以在插入、修改或删除行时运行。
4. 增加存储过程。
5. 对表增加限制。
限制在本章出现了三次:表限制、字段限制和域限制。
在表之间增加关系和增加外部键。
数据模型中的关系连接两个表。Rose支持两种表间关系:标识关系和非标识关系。
对这两种情况,子表中都会增加外键来支持关系。对标识关系,外键称为子表中主键的一部分。这时,子表中的记录必须链接父表中的记录。非标识关系的区别是外键不必须是子表中主键的一部分。
外键是在子表中的,对应的主键在父表中。
关系可以指定一个基数来表示一个表中的一行对应着另一个表中的行数。
可以添加引用完整性。包括两种:触发器和声明式。前者表示限制在父表更新或删除时运行一个触发器,后者表示限制在外部键从句中声明一个限制。完整性限制包括下面几种:
1. Cascade:更新或删除父表时,所有子记录更新或删除
2. Restrict:阻止父表更新或删除
3. Set Null:更新或删除父记录时,将子记录中的外键设为NULL。
4. No Action:不执行完整性限制
5. Set Default:更新或删除父表时,将子记录中的外键设置为默认值。
创建视图。
从数据模型创建对象模型。
方法:右击Schema,Data Modeler->Transform to Object Model
从对象模型到数据模型:右击Logical视图中的包Data Modeler->Transform to Data Model。
通过Update特性让数据库与模型同步。
方法:右击Schema,Data Modeler->Compare and Sync
从数据模型生成数据库
方法:右击Schema->Data Modeler->Forward Engineer。可以生成ddl文件或者直接写入指定的数据库中。
从数据库到数据模型:方法:Tools->Data Modeler->Reverse Engineer,可以从ddl文件或数据库中导出表结构到数据模型。
第十八章 Rose Data Model
本章介绍利用Rose建模应用程序的数据库。
创建数据模型的步骤
创建数据库
1. 增加数据库。
方法是:右击Component View,然后Data Modeler->New->Database。在规范中选择Target为相应的DBMS。
2. 增加表空间。
表空间是表中存储的逻辑单元。每个表空间可以有一个或几个容器,每个容器是一个物理存储设备。每个容器可以分为更小的单元,称为extent。表空间中的表在表空间内的容器之间均匀分布。每个表空间都有初始长度。用完这个空间之后,DBMS可以自动按预定增量增加表之间长度。增量长度可以在Rose中设置。即使设置增量,但Rose中还可以设置最大长度,容器不能超过这个长度。建立表控件之后,可以将表加入到表空间中。
方法:右击数据库,Data Modeler->New->Tablespace。
3. 在表空间中设置容器。
方法:表空间规范中选择Containers,在空白位置选择New。可以设置容器的文件名、处事长度、最大长度和每次增量。
增加保存数据模型的结构(Schema)并将结构(Schema)赋予数据库。
1. 增加结构:
在Rose中Schema是数据模型的容器。所有表、字段、触发器、限制和其它数据模型单元都放在结构中。两个例外是域和数据库本身。前者放在域包中,后者放在Component视图中。
每个Scheme映射模型中的数据库。每个数据库可以包含一个或多个Schema。对schema指定的DBMS要与对schema的数据库指定的DBMS相同。
方法:右击LogicalView,Data Modeler->New->Schema。在规范窗口中设置Database为之前添加的数据库。
2. 创建数据模型框图
方法:右击浏览器中的一个Schema,Data Modeler->New->Data Model Diagram。
创建域和域包
1. 域用来执行业务规则,如必须的字段、字段有效值和字段默认值。域是种模式,一旦建立之后,可以适用于数据库中的一个或多个字段。域必须放在域包中。每个域包指定特定DBMS。一个域可以应用于多个Schema。
2. 创建域包的方法:右击Locical view,选择Data Modeler->New->Doman Package。在规范窗口中设置使用的DBMS。
3. 创建域的方法:Data Modeler->New->Domain。
在每个结构中增加表格
建立结构之后,可以在其中创建表格。数据库中的每个表建模为Rose中的持久类,构造型为Table。方法:右击Schema,选择Data Modeler->New->Table。
在表中增加细节(字段、限制、触发器、索引、主键)
1. 增进列(字段):
类分为数据列和计算列。计算列是SQL语句从一个或几个其他列计算的来。MS Sql Server还支持标识列,是系统生成数据的列。
字段可以设置属性,一种方法是依次指定类型、唯一性、是否主键、是否空值等属性;另一种方法是指定一个之前设置的域。这就是域的好处,可以事先指定一个模式,然后供多个字段使用。
可以给字段指定一个限制。表示该限制为真时,表格才能更新。
2. 增加键限制:
键限制有三种:主键限制、唯一限制和索引。
主键限制保证主键字段种输入的值不是NULL,而且唯一。Rose在创建主键时自动创建主键限制。
唯一限制保证列中输入的值唯一。
索引可以帮助迅速访问记录。
3. 增加触发器:
触发器是遇到特殊事件时运行的SQL过程。触发器可以在插入、修改或删除行时运行。
4. 增加存储过程。
5. 对表增加限制。
限制在本章出现了三次:表限制、字段限制和域限制。
在表之间增加关系和增加外部键。
数据模型中的关系连接两个表。Rose支持两种表间关系:标识关系和非标识关系。
对这两种情况,子表中都会增加外键来支持关系。对标识关系,外键称为子表中主键的一部分。这时,子表中的记录必须链接父表中的记录。非标识关系的区别是外键不必须是子表中主键的一部分。
外键是在子表中的,对应的主键在父表中。
关系可以指定一个基数来表示一个表中的一行对应着另一个表中的行数。
可以添加引用完整性。包括两种:触发器和声明式。前者表示限制在父表更新或删除时运行一个触发器,后者表示限制在外部键从句中声明一个限制。完整性限制包括下面几种:
1. Cascade:更新或删除父表时,所有子记录更新或删除
2. Restrict:阻止父表更新或删除
3. Set Null:更新或删除父记录时,将子记录中的外键设为NULL。
4. No Action:不执行完整性限制
5. Set Default:更新或删除父表时,将子记录中的外键设置为默认值。
创建视图。
从数据模型创建对象模型。
方法:右击Schema,Data Modeler->Transform to Object Model
从对象模型到数据模型:右击Logical视图中的包Data Modeler->Transform to Data Model。
通过Update特性让数据库与模型同步。
方法:右击Schema,Data Modeler->Compare and Sync
从数据模型生成数据库
方法:右击Schema->Data Modeler->Forward Engineer。可以生成ddl文件或者直接写入指定的数据库中。
从数据库到数据模型:方法:Tools->Data Modeler->Reverse Engineer,可以从ddl文件或数据库中导出表结构到数据模型。 |