《UML读书笔记》读书笔记
关系
在UML中,事物之间相互联系的方式(无论是逻辑上的还是物理上的)都被建模为关系。在面向对象的建模中,有3种最重要的关系:依赖、关联和泛化。
依赖
依赖是一种使用关系,说明一个事物使用另一个事物的信息和服务。在图形上,把依赖画成一条有向的虚线,指向被依赖的事物。在大多数情况下,在类与类之间用依赖指明一个类使用另一个类的操作,或者它使用其他类所定义的变量和参量。依赖可以带一个名字,但很少使用,除非模型有很多依赖,并且要引用它们或做出区别。在一般情况下,用衍型区别依赖的不同含义。
泛化
泛化是一般事物(称为父类)和该事物的较为特殊的种类(称为子类)之间的关系。有时也称泛化为“is-a-kind-of”关系:一个事物是更一般的事物的一个种类。泛化意味着子类可以替换父类的声明。在图形上,把泛化画成一条带有空心三角形大箭头的有向实线,指向父类。带有名字的泛化指明对一个父类的子类从特定方面的划分,称为泛化集,多个泛化集是正交的。
关联
关联式一种结构关系,它指明一个事物的对象与另一个事物的对象间的联系。给定一个连接两个类的关联,可以从一个类的对象联系到另一个类的对象。关联的两端都连到同一个类式完全合法的。这意味着,从类的给定对象能连接到该类的其他对象。在图形上,把关联画成一条连接相同类或不同类的实线。
除了基本形式外,还有4种应用于关联的修饰。
关联可以有一个名称,用以描述该关系的性质。为了消除名称的歧义,可提供一个指出读名称方向的三角形,给名称一个方向。虽然关联可以有名称,但在明确给出关联的端点名的情况下通常不需要给出名称。
- 角色
当一个类参与了一个关联时,它就在这个关系中扮演了一个特定的角色。角色是关联中靠近它的一端的类对另一端的类呈现的面孔。可以显式地命名一个类在关联所扮演的角色。把关联端点扮演的角色称为端点名(在UML1中称为角色名)。
- 多重性
多重性说明了一个关联的实例中可以有多个相互连接的对象。它表示一个整数的范围,指明一组相关对象的可能个数。在表示上,将多重性写成一个表示取值范围的表达式,其最大值和最小值可以相同,用两个圆点把它们分开。声明了关联的一端的多重性,这说明:对于关联另一端的类的每个对象,本端的类可能有多少个对象出现。
- 聚合
一个类描述了一个较大的事物,它由较小的事物组成,这种“整体与部分”的关系称为聚合,它描述了“has-a”关系,意思是整体对象拥有部分对象。其实聚合只是一种特殊的关联,它被表示为在整体的一端用一个空心菱形修饰的简单关联。
常用建模技术
对简单依赖建模
一种常见的依赖关系是两个类之间的连接,其中的一个类只是使用另一个类作为它的操作参数。对这种使用关系建模,要做如下的工作:
- 创建一个依赖,从含有操作的类指向被改操作用作参数的类。
对单继承建模
在对系统的词汇建模中,经常会遇到在结构或行为上与其他的类相似的类。可以把这样的每一个类建模为独立的、不相关的抽象。但更好的方法是提取所有共同的结构特征和行为特征,并把它们提升到较为一般的类中,特殊类从中继承这些特征。对继承关系建模,要做如下的工作:
- 给定一组类,寻找两个或两个以上的类的共同职责、属性和操作。
- 把这些共同的职责、属性和操作提升到较为一般的类中。如果需要,创建一个新类,用以分配这些元素(但要小心不要引入过多的层次)。
- 画出从每个特殊类到它的一般的父类的泛化关系,用以表示较特殊的类继承较一般的类。
对结构关系建模
当用关联关系建模时,是在对相互同等的两个类建模。给定两个类间的关联,则这两个类以某种方式相互依赖,并且常常从两边都可以导航。对结构关系建模,要做如下的工作:
- 对于每一对类,如果需要从一个类的对象到另一个类的对象导航,就要在这两个类之间说明一个关联。这是关联的数据驱动观点。
- 对于每一对类,如果一个类的对象要与另一个类的对象相互交互,而后者不作为前者的过程局部变量或者操作参数,就要在这两个类间说明一个关联。这是关联的行为驱动观点。
- 对于这样的每一个关联,要说明其多重性和角色名。
- 如果关联中的一个类与另一端的类相比,前者在结构或者组织上是一个整体,后者看起来像它的部分,则在靠近整体的一端用一个菱形对该关联进行修饰,从而把它标记为聚合。
提示和技巧
在用UML对关系建模时,要遵循如下策略:
- 仅当被建模的关系不是结构关系时,才使用依赖。
- 仅当关系是“is-a-kind-of”关系时,才使用泛化。往往可以用聚合代替多继承。
- 小心不要引入循环的泛化关系。
- 一般要保持泛化关系的平衡;继承的层次不要太深(大约多于5层就应该要想一想了),也不要太宽(代之以寻找可能的中间抽象类)。
- 关联主要用于对象间有结构关系的地方。不要用关联表示暂时关系,例如过程的参数或局部变量。
在用UML绘制关系时,要遵循如下策略:
- 要一致地使用平直的线或斜线。平直的线给出的可视化提示强调了相关事物之间的连接都集中到一个共同事物。在复杂的图中斜线则经常有更好的空间效果。在同一个图中使用两种线性,有助于把人们的注意力引导到不同的关系组上。
- 除非绝对必要,否则要避免连线交叉。
- 仅显示对理解特定的成组事物必不可少的关系。避免使用多余的关系(特别是多余的关联)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。