人三元关联的例项目CAD系统-Read.PPT

人三元关联的例项目CAD系统-Read

高级类建模 枚举 枚举(enumeration)是由有限取值集合组成的一种数据类型。 在构建模型的过程中,应当仔细注释枚举,因为它们经常出现,并且对于用户来说很重要。 不要用泛化来捕获枚举属性的取值。枚举只是一列值;而泛化是一种描述对象结构的手段。 建模枚举 多重性 当使用类时,假设一个类有任意数目的实例是合理的。然而,有时可能要限制类所具有的实例数目。类可能拥有的实例数目称为多重性,多重性是对一个实体假定可容许的基数范围的规约。在UML中,可以通过在类图标的右上角写一个多重性表达式来指定类的多重性。 多重性也应用于属性。可以通过在属性名后面的方括号内写一个合适的表达式来指定属性的多重性。 类和属性的多重性 作用域 对类的属性和操作进行详述的另一个重要的细节是范围,特征的范围指出是否类的每个实例都具有自己独特的特征值,还是类目的所有实例都共同拥有单独一个特征值。在UML中,可以有两种范围。 实例(instance):对于一个特征,类的每个实例军有它自己的值。这是默认的,不需要附加的符号。 静态的(static):对于类的所有实例,特征的值是唯一的。也把它称为类范围(class scope),通过对特征串加下划线来表示。 在类作用域里使用属性来保持类的范围,这是可以接受的,但是,应该避免使用带类作用域的属性,因为这样做可能产生劣质的模型。 较差的模型 C++中静态的类成员 static(静态) data member用来表示唯一一份可共享的members,它可以在同型的所有对象中被存取。 Class Phonemailbox{ public: //… private: static int maxMessageCount; } 对class而言,static data members只有唯一一份实体,因此,必须在程序代码中提供其清楚的定义。这种定义看起来很像全局对象(global object)的定义方式,唯一的差别是:其名称必须附上class scope运算符。 优选的模型 可见性 特征的可见性描述了它能否为其他类使用,可能的取值包括public、protected、private和package。确切的含义要视编程语言而定。 Public:任何方法都可以自有访问公用的特征。用“+”符号作前缀来表示。 Protected:只有包含其中的类和继承子孙类的方法才可以访问保护的特征。用“#”符号作前缀来表示。 Private:只有包含其中的类的方法才可以访问私有的特征。用“-”符号作前缀来表示。 Package:在同一个包中作为目标类定义的类的方法可以访问包特征。用符号“~”作前缀来表示。 属性和操作的可见性 选择可见性需考虑的问题 全面理解:要理解每个类的功能,必须要理解所有的共有特征。相反,可以忽略私有的、保护的和包特征,它们只是为了实现上的方便。 可扩充性:许多类都依赖公有方法,因此改变它们的签名就会有很大的破坏性。由于很少会有类依赖私有的的、保护和包方法,因此改变它们就会比较自由。 上下文:私有的、保护的和包方法会依赖于其他方法创建的前提条件或状态信息。 模板类 模板(template)是一个被参数化的元素,每一个模板类都定义一个类的家族。模板可以包括类、对象和值的插槽,这些插槽起到模板函数的作用。 不能直接使用模板,必须首先对它进行实例化。实例化是要把这些形式模板参数绑定成实际参数。对一个模板类来说,绑定后的结果就是一个具体类,能够象普通类一样使用。模板也称为被参数化的型别(parameterized types)。 模板类 关联终端 关联终端名 多重性 排序{ordered}:对象关联终端“多”侧通常会是集合,对象有时会有明显的顺序,用 {ordered}表示一个有序的对象集合。 包{bag}和序列{sequence}:对象关联终端“多”侧可以是包和序列。{bag}是允许重复值的元素集合, {sequence}是允许重复值的有序元素集合。 限定:一个或多个限定符会消除关联终端“多”侧对象的歧义。 聚合(aggregation):关联终端可以是一个聚集或组成部件。 导航性(navigability):关联实现可能只支持一个方向,UML用箭头显示导航性。 可见性:关联终端可以是private、public、protected. n元关联 n元关联指3个或更多类之间的关联,但是要尽量避免n元关联,实际上大多数关联可以分解成带限定符和属性的二元关联。 常见的编程语言不能表示n元关联,因此一般可以把n元关联提升为类,n元关联强制规定对于每项组合至多只有一项链接。 n元关联 一项3元关联 提升n元关联 基本聚合 有聚合关系的关联指出,某个类是另外某个类的一部分。在一个聚合关

文档评论(0)

1亿VIP精品文档

相关文档