虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!
目录
4.1高级对象和类的概念
4.1.1枚举
●枚举(enumeration):由有限取值集合组成的一种数据类型。
学过什么C语言、C++语言的应该就很能够明白,枚举,说的通俗点,就是说比如我有一个属性Weekend,那么它的取值就是{Saturday,Sunday}。就是属性的值是有限个。
●在这里提到枚举的主要作用就是:把枚举的属性作为一个类来设计。
●如图:在方框顶部枚举名称上的《》中列出关键词enumeration,就可以声明枚举。
(泛化:是指父子关系,显然它们并不具有这种关系)
4.1.2多重性
●属性的多重性:属性的每个实例确定可能取值的数目。最常用的规范是强制单值[1]、可选单值[0...1],以及多重值[*]。
4.1.3 作用域
●作用域:表示一个特征是否可用于对象或类。下划线用于区分类作用域(静态)和对象作用域的特征。
●在类作用域里使用属性来保持类的范围。
4.1.4可见性
●可见性:方法引用其他类的特征的能力。可能的取值包括:
+public:任何方法都可以自由访问公用的(public)特征
#protected:只有包含其中的类和其继承子孙类的方法才可以访问保护的(protected)特征
-private:只有包含其中的类的方法才可以访问私有的(private)特征
~package:在同一个包中作为目标类定义的方法可以访问包(package)特征
●选择可见性时,需要考虑①全面理解②可扩充性③上下文
4.2关联终端
关联终端:关联的末端
4.3n元关联
●如图是一个三元关联。
●大多数n元关联可以分解成二元关联。要尽量避免多元关联。
●常见的编程语言不能表示n元关联。因此必须把它们提升为类。
注:接下来的部分老师并没有讲了,不过我还是准备看一下。
4.4聚合
先回顾一下之前学过的:
❶3.2关联:就是两个类之间的一种关系。比如员工类与老板类的关联,员工为老板“打工”,老板“雇佣”员工。它们是一对多的关系。
❷3.3泛化和继承:这两者的区别感觉挺难搞懂的,我在一篇文章中看到:泛化就是有子类抽象出一个父类 而继承就是由父类具体化一个子类。(迪米特的博客:类与类之间的关系-依赖,关联,聚合,组合,继承泛化的区别)。例子就像颜色,可以分为红色、绿色,这样从父类到子类的一种过程就是泛化。
●聚合(aggregation)是一种强类型的关联,其中一个聚集对象由多个部件构成。聚合是一种特殊形式的二元关联。
●直白地说,聚合就是一个大机器拆成各种小零件的过程。
❶聚合最重要的特性就是传递性(transitivity):比如B是A的零件,C是B的零件,那么显然,C也是A的零件。A→B→C
❷聚合是反对称的(antisymmertic)。如上面所说的,A显然不可能C的零件。
4.4.1聚合与关联
4.4.2聚合与组合
●UML有两种类型的部分-整体关系:普通的形式称作聚合,有更多限制的形式称作组合。
●组合(composition)是某种形式的聚合。
注:这里一个装配件不是说一对一的关系,而是说不能一个类上聚合连接好几个类。
4.4.3操作的传播
●传播(propagation)也称触发(triggering),指当一个操作应用于某个起始对象,该操作会自动应用到网络中的对象。(比如我移动一个手表的同时,我也在移动它的零件)
●例子:某人复制一个文档,同时也复制了文档的段落、符号。
4.5抽象类
●抽象类(abstract class):没有直接实例的类,但其子孙有直接的实例。
●具体类(concrete class):可以实例化的类,它有直接实例。
如图,Employee是抽象类的一个示例。所有的员工必须是全职或者兼职的,所以底下两个类时具体类,是可以直接实例化的。
4.6多重继承
●多重继承(multiple inheritance):允许某个类有一个以上的父类,并继承所有父类的特征。
♦优点:识别类和增加复用上更加效力。
♦缺点:失去了概念上和实现上的简洁性
●通俗地说,就是说一个人既是......又是......。
4.6.1多重继承和种类
●子类只有一次机会沿着一条以上的路径从同一祖先类继承特征。
4.6.2多重分类 4.6.3应对方案
●类的实例也是所有祖先类所固有的实例。
●UML允许多重分类,但是大多数OO语言处理的都不好。这就需要使用应对法方案了。
●委托(delegation):一种实现机制,在执行中,对象可以借助这种机制来把操作中继到另一个对象。
♦使用部件组合的委托:把有唯一ID的单个对象替换为一组相关对象,这组对象组成一个扩充对象。组合必须捕获操作,并把它们委托给适当的部件。
♦继承最重要的类,并委托其余的类。
♦嵌套泛化。先分解一个泛化,再分解其余的。
4.7元数据
●元数据(metadata):描述其它数据的数据。对于实际汽车来说,汽车模型是元数据,而实际汽车是数据。
●类描述符对象具有特征,并且反过来它们也有自己的类,被称为元类(metaclass)。
4.8具体化
●具体化(reification):把 不是对象 的实体 提升为对象 的过程。
●两个例子:①数据库管理器;②状态转移图。
4.9约束
●约束(constraint):涉及模型元素的 一种布尔条件,这些元素包括 对象、类、属性、链接、关联和泛化 等。约束限制了元素可以假定的取值。
4.9.1对象上的约束
4.9.2泛化上的约束
●类模型通过其结构捕获了许多约束。UML定义了下列泛化集的关键词
♦不相交的(disjoint):子类互斥,每个对象只属于一个子类。
♦重叠(overlapping):子类可以共享一些对象,对象可以属于一个以上的子类。
♦完整(complete):泛化列举了所有可能的子类。(如周末可以泛化成周六,周日)
♦不完整(incomplete):泛化可能会丢失一些子类。(颜色泛化成黄色、红色,丢失了许多其他颜色)
4.9.3链接上的约束
●多重性是集合基数上的约束。关联的多重性限制了与给定对象相关的对象数量。属性的多重性确定了属性每次实例化可能的取值的数量。
●约束{ordered}表示关联“多”端有明确的顺序,必须保持。
4.10派生数据
●派生元素(derived element):一个或多个元素的函数,这些元素也可以是派生出来的。派生元素时冗余的,因为其它元素可以完全确定它。
4.11包
●包(package):一组拥有公共主题的元素(包括类、关联、泛化和更小的包)。包可以分割模型,使其更容易理解和管理。
●大的应用会要求多层包。包组成了一棵树,朝着根部方向抽象程度渐增,应用程序是顶层包。
●包的形成有一些不同的主题:支配类、支配性关系、功能的主要方面和对称性。
♦仔细刻画每个包的作用域
♦在单个包中定义每个类
♦让包变得内聚