上图是聚合,代表整体与部分关系,右边的例子说明“(文章中的)段落是由多个句子组 成”。句子一端的实心圆●表示“多个”,空心圆O表示“0个”,不加圆表示“1个” 中图是限定,对关联的含义做某种约束。右边的例子表明,附加的限定词在说明“一个目录 包含多个文件”的基础上,更明确地指明“每一个文件都可由目录中的文件名属性来唯一地 标识”。下图是角色,由于多数关联具有两个端点,因而涉及到两个角色。右边的例子表明, 在公司与个人的关联中,公司的角色是雇主,个人的角色是雇员 此外,还可用连接属性进一步说明对象之间的连接。再看图中例子,由于一个人在成为 公司的雇员时才有工资和职务。因此,工资和职务不是个人属性,而是公司与个人之间的连 接属性。OMT的提出者指出,这种情况常常意味着有必要定义一个新类来取而代之。 OMI还定义了一般化与特殊化关系(也称为继承性)。一般化与特殊化关系通常包含一 个(如果允许多重继承性,也可以是几个)基类和几个派生类。参看图619。基类表示了一个 较为一般、普遍的概念,而每个派生类则是它的某个特殊形态。因而派生类除了自然地继承 基类所具有的属性和操作外,还具有反映自身特点的属性和操作 示例图 基类 盛 今收入 临时雇 正式雇员 子类A 子类B 小时工资额 年工资额 图6.19一般化与特殊化关系(继承性)的表示方法和示例 (2)动态模型 要想对一个系统了解得比较清楚,首先应考察它的静态结构,即在某一时刻它的对象和 这些对象之间相互关系的结构:然后应考察在任何时刻对对象及其关系的改变。系统的这些 涉及时序和改变的状况,用动态模型来描述。动态模型着重于系统的控制逻辑。它包括两个 图,一是状态图,一是事件追踪图 ①状态图:状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。在 状态图中,状态是对某一时刻中属性特征的概括。而状态迁移则表示这一类对象在何时对系 统内外发生的哪些事件做出何种响应。图6.20给出了状态图的表示方法。图中的椭圆表示状 态,状态之间的箭头表示从一个状态到另一个状态的迁移,附加在箭头上的短语说明触发此 状态迁移的事件。在图620中,“事件A”是一个单纯的事件,而“事件B条件]”是一个 有条件的事件,在给定条件满足时才起作用。OMT区分两种不同的行为,即操作和活动。操 作是一个伴随状态迁移的瞬时发生的行为,与触发事件一起表示在有关的状态迁移之上。活 动则是发生在某个状态中的行为,往往需要一定的时间来完成,因此与状态名一起出现在有 关的状态之中。状态图中所有这些成份都可以根据具体要求而予以取舍 状态A/操作 状态A 状态B 始状态 事件B[条件] 终结状态 620状态图的表示方法 对一个事件的响应依赖于接收它的对象的状态,它可以包括状态的改变、发送另一个事
16 上图是聚合,代表整体与部分关系,右边的例子说明“(文章中的)段落是由多个句子组 成”。句子一端的实心圆 ● 表示“多个”,空心圆 ○ 表示“0 个”,不加圆表示“1 个”。 中图是限定,对关联的含义做某种约束。右边的例子表明,附加的限定词在说明“一个目录 包含多个文件”的基础上,更明确地指明“每一个文件都可由目录中的文件名属性来唯一地 标识”。下图是角色,由于多数关联具有两个端点,因而涉及到两个角色。右边的例子表明, 在公司与个人的关联中,公司的角色是雇主,个人的角色是雇员。 此外,还可用连接属性进一步说明对象之间的连接。再看图中例子,由于一个人在成为 公司的雇员时才有工资和职务。因此,工资和职务不是个人属性,而是公司与个人之间的连 接属性。OMT 的提出者指出,这种情况常常意味着有必要定义一个新类来取而代之。 OMT 还定义了一般化与特殊化关系(也称为继承性)。一般化与特殊化关系通常包含一 个(如果允许多重继承性,也可以是几个)基类和几个派生类。参看图 6.19。基类表示了一个 较为一般、普遍的概念,而每个派生类则是它的某个特殊形态。因而派生类除了自然地继承 基类所具有的属性和操作外,还具有反映自身特点的属性和操作。 (2) 动态模型 要想对一个系统了解得比较清楚,首先应考察它的静态结构,即在某一时刻它的对象和 这些对象之间相互关系的结构;然后应考察在任何时刻对对象及其关系的改变。系统的这些 涉及时序和改变的状况,用动态模型来描述。动态模型着重于系统的控制逻辑。它包括两个 图,一是状态图,一是事件追踪图。 ① 状态图 :状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。在 状态图中,状态是对某一时刻中属性特征的概括。而状态迁移则表示这一类对象在何时对系 统内外发生的哪些事件做出何种响应。图 6.20 给出了状态图的表示方法。图中的椭圆表示状 态,状态之间的箭头表示从一个状态到另一个状态的迁移,附加在箭头上的短语说明触发此 状态迁移的事件。在图 6.20 中,“事件 A”是一个单纯的事件,而“事件 B[条件]”是一个 有条件的事件,在给定条件满足时才起作用。OMT 区分两种不同的行为,即操作和活动。操 作是一个伴随状态迁移的瞬时发生的行为,与触发事件一起表示在有关的状态迁移之上。活 动则是发生在某个状态中的行为,往往需要一定的时间来完成,因此与状态名一起出现在有 关的状态之中。状态图中所有这些成份都可以根据具体要求而予以取舍。 6.20 状态图的表示方法 对一个事件的响应依赖于接收它的对象的状态,它可以包括状态的改变、发送另一个事 图 6.19 一般化与特殊化关系(继承性)的表示方法和示例 类图 示例图 雇 员 年初至今收入 计算月工资 基类 临时雇员 小时工资额 计算月工资 正式雇员 年工资额 计算月工资 子类 A 子类 B 起始状态 状态 A 活动 状态 A∕操作 事件 B [条件] 状态 B 终结状态
件给原来的发送者或第三个对象。对于一给定类的事件、状态及状态的迁移,可以抽象并表 成一个状态图。动态模型由多个状态图组成,对于每一个具有重要动态行为的类都有一个 状态图,从而表明整个系统活动的模式。各个状态图并发地执行,并可以独立地改变状态 对于各种类的状态图可以通过共享事件组合到一个动态模型中 ②事件:一个事件发生在某一时刻。一个事件在逻辑上可能领先于另一个事件,或者 两者没有关系。两个没有因果关系的事件叫做并发的,它们之间互相不影响。在模型化一个 系统时,一般不考虑并发事件的次序,因为它们可能以任一次序发生。一个分布系统的模型 必须包括并发事件和活动。事件都是单独发生的,我们把它们纳入事件类中,并给每个事件 个名字,以指明共同结构和行为。对于所有的事件来说,事件发生的时间是隐蔽的。 事件从一个对象向另一个对象传送信息。有些事件类可能传送简单的信号“要发生某件 事”,而有些事件类则可能传送数据值。由事件传送的数据值叫做属性,属性可以在事件类 名之后用括号列出。 ③事件追踪图:事件追踪图侧重于说明发生于系统执行过程中的一个特定“场景”(即 脚本),是完成系统某个功能的一个事件序列。场景通常起始于一个系统外部的输入事件,结 束于一个系统外部的输出事件,它可以包括发生在这个期间的系统所有的内部事件,也可以 只包括那些撞到的或由系统中某些对象生成的事件。脚本可以是系统执行的历史记录,还可 以是执行一个拟议中系统的设想实验。下面是使用电话的一个脚本。这个脚本只包含影响电 话的事件 打电话者拿起电话受话器 [10铃声在打电话者的电话上传出 2]电话忙音开始 l接电话者回答 [3]打电话者拨数字(8) [2】接电话者的电话停止振铃 [4]电话忙音结束 [3]铃声在打电话者的电话中消失 [5]打电话者拨数字(2) 41通电话 6】打电话者拨数字(3) 5]接电话者挂断电话 7]打电话者拨数字(7) 16】电话切断 8]打电话者拨数字(3) 17打电话者挂断电话 9]接电话者的电话开始振铃 打电话者 电话线 接电话者 每个事件从一个对象向另 拿起受话器 一个对象传送信息。在写出这 电话忙音开始 拨号(8) 个场景后,下一步就是要标识 电话忙音结束 每个事件的发送者对象和接收 拨号(2) 者对象。各种有关事件的序列 拨号(3) 关系以及由此而表现出来的对 拨号(7) 象之间的交互作用可以通过事 拨号(3) 件追踪图表达。在这个图上 电话振铃 竖线表示对象,带有箭头的横 响应电话 线表示事件,箭头从发送者对 停止振铃 亭止 象指向接收者对象。时间自上 通话 通话 向下延续,与间隔的空间无关 挂断电话 这只是事件序列的表示,没有 电话切断 电话切断 精确的时序。图6.21就是一个 挂斷电话 打电话的事件追踪图。此外, 图621打电话的事件追踪图 并发事件也可以发送。例如
17 件给原来的发送者或第三个对象。对于一给定类的事件、状态及状态的迁移,可以抽象并表 示成一个状态图。动态模型由多个状态图组成,对于每一个具有重要动态行为的类都有一个 状态图,从而表明整个系统活动的模式。各个状态图并发地执行,并可以独立地改变状态。 对于各种类的状态图可以通过共享事件组合到一个动态模型中。 ② 事件 :一个事件发生在某一时刻。一个事件在逻辑上可能领先于另一个事件,或者 两者没有关系。两个没有因果关系的事件叫做并发的,它们之间互相不影响。在模型化一个 系统时,一般不考虑并发事件的次序,因为它们可能以任一次序发生。一个分布系统的模型 必须包括并发事件和活动。事件都是单独发生的,我们把它们纳入事件类中,并给每个事件 一个名字,以指明共同结构和行为。对于所有的事件来说,事件发生的时间是隐蔽的。 事件从一个对象向另一个对象传送信息。有些事件类可能传送简单的信号“要发生某件 事”,而有些事件类则可能传送数据值。由事件传送的数据值叫做属性,属性可以在事件类 名之后用括号列出。 ③ 事件追踪图 :事件追踪图侧重于说明发生于系统执行过程中的一个特定“场景”(即 脚本),是完成系统某个功能的一个事件序列。场景通常起始于一个系统外部的输入事件,结 束于一个系统外部的输出事件,它可以包括发生在这个期间的系统所有的内部事件,也可以 只包括那些撞到的或由系统中某些对象生成的事件。脚本可以是系统执行的历史记录,还可 以是执行一个拟议中系统的设想实验。下面是使用电话的一个脚本。这个脚本只包含影响电 话的事件。 [1] 打电话者拿起电话受话器 [10] 铃声在打电话者的电话上传出 [2] 电话忙音开始 [11] 接电话者回答 [3] 打电话者拨数字 (8) [12] 接电话者的电话停止振铃 [4] 电话忙音结束 [13] 铃声在打电话者的电话中消失 [5] 打电话者拨数字 (2) [14] 通电话 [6] 打电话者拨数字 (3) [15] 接电话者挂断电话 [7] 打电话者拨数字 (7) [16] 电话切断 [8] 打电话者拨数字 (3) [17] 打电话者挂断电话 [9] 接电话者的电话开始振铃 每个事件从一个对象向另 一个对象传送信息。在写出这 个场景后,下一步就是要标识 每个事件的发送者对象和接收 者对象。各种有关事件的序列 关系以及由此而表现出来的对 象之间的交互作用可以通过事 件追踪图表达。在这个图上, 竖线表示对象,带有箭头的横 线表示事件,箭头从发送者对 象指向接收者对象。时间自上 向下延续,与间隔的空间无关。 这只是事件序列的表示,没有 精确的时序。图 6.21 就是一个 打电话的事件追踪图。此外, 并发事件也可以发送。例如, 图 6.21 打电话的事件追踪图