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