










模型元素之间的连接关系有:关联Association、概化Generalization、依赖Dependency、实现Realization、聚合Aggregation、组合Combination。其中,聚合和组合是关联的一种特殊形式。
(1)关联Association:用于描述模型元素之间的连接,只要两个模型元素之间存在相互通信的关系,它们之间就存在关联关系。
关联关系可以是单向的,但一般为双向的。
(2)概化Generalization:又称继承,指一个模型元素的所有信息能被另一个模型元素继承。
继承了其它模型元素的模型元素中不仅可以拥有属于自己的信息,而且还拥有了被继承模型元素中的信息。
(3)依赖Dependency:描述两个模型元素之间语义上的连接关系,其中一个模型元素是独立的。另一个是非独立的。
在这种联系中,改变独立元素将影响到非独立元素的语义。
(4)如果模型元素之间的关系具有“整体与部分”的特点,则这种关联称为聚合或组合。
聚合关系用Has a句型表示,组合关系用Be a part of句型表示。
(5)实现Realization:用于表示同一事务的两种描述之间的关系
如果你确定两件对象之间是is-a的关系,那么此时你应该使用继承;比如菱形、圆形和方形都是形状的一种,那么他们都应该从形状类继承而不是聚合。
如果你确定两件对象之间是has-a的关系,那么此时你应该使用聚合;比如电脑是由显示器、CPU、硬盘等组成的,那么你应该把显示器、CPU、硬盘这些类聚合成电脑类,而不是从电脑类继承。
类间的关系
网上关于此类的讨论非常多,发现对于该问题的理解各有各的说法,而各个说法中又相去甚远。通过浏览这些讨论以及对《O'Reilly - UML 2.0 In A Nutshell (2007)》的参考,发表一下自己的看法
类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。
纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。
横向关系较为微妙,按照UML的建议大体上可以分为四种:
它们的强弱关系是没有异议的:依赖 < 关联 < 聚合 < 组合
然而它们四个之间的差别却又不那么好拿捏,需要好好体会。

class Air
{
public void releasePower()
{
//do sth.
}
}

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。