Figure 1. UML offers five different types of class relationship
要理解这5中关系就不能简单的把它们和具体的语言实现相关联,UML介于问题域和解域之间,因而兼有这两者的概念。虽然类图是静态的,但类之间的这5种关系却是动静兼有的(也就是编译时和运行时混合的)。
问题域、解域混合,编译时、运行时混合是这5种关系的特点。
|
用词
|
问题域
|
解域
|
编译时
|
运行时
|
Dependency |
uses a
|
短暂的或者对非业务类的(如工具类)依赖
|
作用域在方法内部的reference(可能是方法参数或方法内部声明的
reference
)
|
作用域在方法内部的reference(可能是方法参数或方法内部声明的
reference
)
|
短暂的
|
Association
|
has a
|
相对固定的,对业务类的依赖
|
类属性
|
类属性
|
持续一定时间的
|
Aggregation |
owns but may share
|
owns but may share
|
类属性
|
类属性
|
生命线可能相关联
|
Composition |
is part of
|
is part of
|
类属性
|
类属性
|
生命线总是关联
|
Generalization
|
is a type of
|
is a type of
|
继承
|
继承
|
|
Dependency依赖:uses a
Dependency表示一个类uses或者知道另一个类。一方的改动将引起另一方的改动。这是一种典型的临时关系,代表了类之间的一种短暂的交互。
针对“一方的改动将引起另一方的改动”这句话来讲,所有强于dependency的关系都蕴含/隐含者dependency关系
。且这个意义常用来表示package之间的依赖关系。(package之间只有依赖和继承2种关系)
因为是一种短暂的关系,所以依赖类指向目标类的reference的作用域一般在一个方法的内部(这有可能是方法的传入参数或者在方法内部声明的reference),而不是
类的属性。因为属性代表一种相对持久的关系,而方法内部的对象,只有在方法被调用时(短暂的)才与依赖类(方法所在的类)发生关系。比如window和
event之间,只有用户事件时两者才会发生关联,当没有事件时两者并不一起工作,他们之间的合作关系是短时间的。我们也不会把event声明为
windows的一个属性,而一般在windows的方法里进行处理。
Dependency 还经常用于表示一种对通用模块(如java.util.regex
,java.math
)而非业务模块的依赖关系。这显然是一种问题域(而不是解域或技术角度)的思维角度。
Association关联:has a
Associations表示类之间的一种持续一段时间的合作关系,但被关联的2者生命线(顺序图的概念)不被绑定(也就是说如果一个类被销毁,另一个类不一定被销毁)。
在具体实现时往往表示为类的属性。但也不是所有的属性都是Associations,像int/bool这类的属性就不易表示为Associations。
关联是可以有导航的,就是可以有方向,用带箭头的实线表示。
Aggregation聚合:
owns but may
share
Aggregation
表示一种owns(拥有)关系,并且
被关联的2者生命线可能
被关联。
在UML规范中对这种关系的定义非常模糊,充斥这也许、可能这类字眼。《UML
Distilled》中甚至说“聚合是完全没有意义的。因此,我建议,你在自己的的图中略去聚合。”
我个人也认为Aggregation
是较难判断的一类关系,很难确切定义它。它的上面association和下面composition的定义都很明确,大概可理解为介于两者之间,但偏composition。
Composition组合:is part
of
Composition用于表示“整体-部分”关系。这种关系是“非共享”的,也就是说,在任何时间,“部分”只能包含在一个“整体”中。二者的生命线总是相连的,如果整体被销毁了,部分也就不存在了。
这里的“部分”不一定是多个。
这里要提醒一下,这里的“非共享”关系指的是实例,而不是类。就是说一个类的不同实例可以属于不同的拥有者,但一个特定的实例只能有一个拥有者。
Generalization 泛化(Otherwise Known as
Inheritance):
is a type of
以上5类关系依赖性由弱到强。
比较常用的是association/composition/generalization
以下是相关概念的英文表述:
Dependency
between classes means that one class
uses, or has knowledge of, another class. It is typically a transient
relationship, meaning a dependent class briefly
interacts with the target class but typically doesn't retain a
relationship with it for any real length of time.
A dependency implies only that objects of a class can
work together.
The
dependency relationship is often used when you have a class that is providing a
set of general-purpose utility functions, such as in Java's regular expression
(java.util.regex
) and mathematics (java.math
) packages. Classes depend on the java.util.regex
and java.math
classes to use the utilities that those classes
offer.
Associations
are stronger than dependencies and
typically indicate that one class retains a relationship to another class over
an extended period of time. The lifelines of two objects linked by associations
are probably not tied together (meaning one can be destroyed without necessarily
destroying the other).
Association
means that a class will actually contain a reference
to an object, or objects, of the other class in the form of an attribute.
Aggregation
is a stronger version of
association. Unlike association, aggregation typically implies ownership and may
imply a relationship between lifelines.
Composition
is used to capture a whole-part
relationship. The "part" piece of the relationship can be involved in only one
composition relationship at any given time. The lifetime of instances involved
in composition relationships is almost always linked; if the larger, owning
instance is destroyed, it almost always destroys the part piece.
参考文献
1.O'Reilly.Learning.UML.2.0.Apr.2006
2.O'Reilly.UML.2.0.in.a.Nutshell.Jun.2005
3.UML Distilled 3rd edition
4.道法自然:面向对象实践指南
ps:本想收藏,可是想到收藏和记录总是有些不太一样,所以重新作为文章发出.
原文地址:http://mahuangyihao.iteye.com/blog/186875
分享到:
相关推荐
本文将详细介绍UML类图中的六种基本关系:依赖、类属、关联、实现、聚合和组合。 #### 二、依赖(Dependency) **定义**: - 当元素A的变化会影响元素B,但元素B的变化不会反过来影响元素A时,我们说B依赖于A。 - ...
在UML(统一建模语言)中,类图是一种重要的模型表示工具,它用来描绘系统中的类、接口以及它们之间的关系。类图中的类扮演着核心角色,它们定义了系统的结构和行为。类可以分为抽象类和具体类,以及主动类和非主动...
在JDK中,UML类图可以帮助我们理解和分析Java类库的结构,包括类、接口、继承关系、关联、聚合和组合等。 **类图的基本元素** 1. **类(Class)**: 类图的核心元素,表示具有共同属性、操作和关系的一组对象。在...
类图是UML中最基础的图表之一,它用于描绘类与类之间的静态结构关系。下面我们将详细解释UML类图中各符号的含义。 1. 类(Class):在UML类图中,类通常用三层矩形表示。第一层写类的名称,如果类是抽象的,则名称...
UML(统一建模语言)类图是理解软件设计的重要工具,它可以帮助开发者直观地看到类之间的关系,如继承、实现、关联、依赖等。在"spring源码全部uml类图"中,我们可以深入探讨Spring框架的内部结构和设计模式。 首先...
在自动生成关系数据库表的过程中,需要遵循一定的映射规则,将UML类图中的各个元素转换为关系数据库表的组成部分。 1. 类映射为表:UML类图中的每一个类应该映射成关系数据库中的一个表。 2. 属性映射为字段:类的...
本文旨在深入探讨UML类图中的各种关系类型及其在Enterprise Architect(简称EA)工具中的表现形式,并提供清晰的解释以帮助读者更好地理解和应用这些概念。 #### 二、类图基础 在开始讨论类图中的各种关系之前,...
本文探讨了UML(统一建模语言)类图中的类间依赖关系,并通过图论的方法对其进行深入分析。随着面向对象编程方法在软件开发领域的广泛应用,UML作为一种标准化的建模语言,在软件设计、分析阶段发挥着重要作用。UML...
### UML类图在关系数据库中的实现 #### 概述 在关系数据库设计过程中,实体关系模型(ER模型)作为一种标准方法被广泛采用以创建数据库的逻辑模型。然而,随着业务需求的日益复杂以及对数据模型灵活性的需求提高,...
首先,类图是UML中的核心概念之一,它展示了类的结构和关系。对于一个计算器应用,我们可以设想几个关键的类:`Calculator`(计算器)、`Expression`(表达式)、`Operand`(操作数)以及可能的`Operator`(运算符)...
UML类图关系讲解 ...UML类图关系讲解了类图中的各种关系,包括继承关系、实现关系、关联关系、聚合关系、合成关系和依赖关系等。这些关系都是UML类图的基本组成部分,用于描述类和对象之间的关系。
UML类图是UML中的核心元素,它用于表示系统的静态结构,包括类、接口、继承关系、关联关系等。 这个压缩包包含以下三个文件: 1. net.java.amateras.xstream_1.3.4.jar:这是一个基于XStream库的Java类,用于对象...
UML类图作为UML中的一种重要图表类型,主要用于描述系统中类与类之间的关系。本文将详细介绍UML类图中的几种主要关系类型:关联、聚合/组合以及依赖,并通过具体的实例和代码示例来帮助读者更好地理解这些概念。 ##...
uml 类图实例 oom powerdesigner 绘制
5.类图中的关系: 在UML类图中,我们可以描述类和对象之间的关系,例如: * 继承关系:例如,employee类继承自person类。 * 关联关系:例如,customer类和order类之间的关联关系。 * 组合关系:例如,...
UML类图是UML中最常见和基础的图表之一,它直观地展示了系统中各类之间的关系。在这个“UML类图关系大全”中,我们将深入探讨类图中的各种关系,帮助你全面理解这些概念。 首先,我们要了解类图的基本元素:类、...
在UML类图中,我们还可以看到各种符号,如矩形框、空心三角形、实心三角形、菱形、虚线、实线等,这些符号都是UML类图的基本组成部分,用于描述类之间的关系。 UML类图是软件设计和开发的重要工具,帮助开发者设计...
本文将深入探讨"登录图"在UML类图中的应用,以及如何通过类图来描绘和理解复杂的系统结构。 首先,UML类图是UML中的核心元素之一,它提供了一种图形化的方式来表示系统的静态结构。类图展示了类、接口、对象之间的...
UML类图是UML中的静态结构模型,它主要展示了系统的类、接口、协作以及它们之间的关系,如继承、关联、依赖等。在图书管理系统中,类图将帮助我们清晰地定义各类对象及其属性和操作。 图书管理系统的核心类可能包括...
UML类图是UML中的一种常见的图表类型,用于描述类、接口、继承关系、关联关系等。UML类图可以帮助开发者快速理解Java代码的结构和关系,从而提高代码的可读性和可维护性。 Myeclipse中如何把java代码导成UML类图? ...