`

UML类图中5种关系的辨析

阅读更多
[img]
E:\df63n6js_142cg4snnhf_b.bmp
[/img]
   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.道法自然:面向对象实践指南

 

分享到:
评论

相关推荐

    六大UML类图以及关系

    本文将详细介绍UML类图中的六种基本关系:依赖、类属、关联、实现、聚合和组合。 #### 二、依赖(Dependency) **定义**: - 当元素A的变化会影响元素B,但元素B的变化不会反过来影响元素A时,我们说B依赖于A。 - ...

    UML类图中的类 抽象类,具体类,主动类等

    在UML(统一建模语言)中,类图是一种重要的模型表示工具,它用来描绘系统中的类、接口以及它们之间的关系。类图中的类扮演着核心角色,它们定义了系统的结构和行为。类可以分为抽象类和具体类,以及主动类和非主动...

    JDK UML 类图大全

    在JDK中,UML类图可以帮助我们理解和分析Java类库的结构,包括类、接口、继承关系、关联、聚合和组合等。 **类图的基本元素** 1. **类(Class)**: 类图的核心元素,表示具有共同属性、操作和关系的一组对象。在...

    UML类图说明类图关系

    本文旨在深入探讨UML类图中的各种关系类型及其在Enterprise Architect(简称EA)工具中的表现形式,并提供清晰的解释以帮助读者更好地理解和应用这些概念。 #### 二、类图基础 在开始讨论类图中的各种关系之前,...

    spring源码全部uml类图

    UML(统一建模语言)类图是理解软件设计的重要工具,它可以帮助开发者直观地看到类之间的关系,如继承、实现、关联、依赖等。在"spring源码全部uml类图"中,我们可以深入探讨Spring框架的内部结构和设计模式。 首先...

    UML中类图实例讲解关系

    UML类图是UML中的一种重要组成部分,用于描述类和对象之间的关系。 1.UML类图的基本组成部分 UML类图由三个部分组成:类名、类特性和类操作。类名表示类的名称,如果是抽象类就用斜体显示。类特性是类的字段和属性...

    UML类图的各符号含义及表示

    UML类图中的关系分为五种: - 关联(Association):类之间的对应关系。 - 依赖(Dependency):类A使用类B的服务。 - 聚合(Aggregation):整体与部分的关系,可以是普通聚合或强聚合(组合)。 - 泛化...

    从UML类图到关系数据库表的代码生成方法

    UML(统一建模语言)是一种用于软件系统建模的标准化建模语言,它的类图是其中最常用的一种图示,用于表示系统中类的静态结构。关系数据库是目前主流的数据库管理系统,它利用关系模型来组织和存储数据。类图和关系...

    UML类图在关系数据库中的实现

    ### UML类图在关系数据库中的实现 #### 概述 在关系数据库设计过程中,实体关系模型(ER模型)作为一种标准方法被广泛采用以创建数据库的逻辑模型。然而,随着业务需求的日益复杂以及对数据模型灵活性的需求提高,...

    UML类图关系大全

    UML类图作为UML中的一种重要图表类型,主要用于描述系统中类与类之间的关系。本文将详细介绍UML类图中的几种主要关系类型:关联、聚合/组合以及依赖,并通过具体的实例和代码示例来帮助读者更好地理解这些概念。 ##...

    计算器 UML类图 c++

    在IT行业中,UML(统一建模语言)是一种标准的建模工具,用于软件开发过程中对系统的可视化表示。它能够帮助我们清晰地定义系统中的各个元素,如类、对象、接口以及它们之间的关系。在这个“计算器 UML 类图 c++”...

    UML类图几种关系的总结

    UML类图是UML中最常用的一种图形化工具,用于描述系统的静态结构,包括系统中的类、接口以及它们之间的关系。在UML类图中,存在六种基本的关系类型:泛化、实现、关联、聚合、组合以及依赖。接下来,我们将详细介绍...

    eclipse画UML类图的jar包.zip

    UML类图是UML中的核心元素,它用于表示系统的静态结构,包括类、接口、继承关系、关联关系等。 这个压缩包包含以下三个文件: 1. net.java.amateras.xstream_1.3.4.jar:这是一个基于XStream库的Java类,用于对象...

    uml 类图实例

    uml 类图实例 oom powerdesigner 绘制

    网上书店UML类图建模

    5.类图中的关系: 在UML类图中,我们可以描述类和对象之间的关系,例如: * 继承关系:例如,employee类继承自person类。 * 关联关系:例如,customer类和order类之间的关联关系。 * 组合关系:例如,...

    UML类图关系大全!!!!!

    10. **约束和注释**:提供额外的语义信息,解释类图中关系的具体规则或条件。 通过“UML类图关系大全.doc”和“UML类图简介.doc”,你可以更详细地了解这些关系的图形表示、符号含义以及在实际设计中的应用。学习和...

    uml类图例子

    继承关系是类图中最常见的一种关系,表示一个类继承自另一个类的所有特性和行为。例如,鸟类继承自动物类,这意味着鸟类拥有动物类的所有特性和行为。 实现关系是另一种常见的关系,表示一个类实现了一个接口。例如...

    登录图UML类图.zip

    首先,UML类图是UML中的核心元素之一,它提供了一种图形化的方式来表示系统的静态结构。类图展示了类、接口、对象之间的关系,如继承、关联、聚合、组合等。在"登录图"的上下文中,我们通常会看到以下几个关键概念:...

    23种经典设计模式UML类图汇总

    在这个“23种经典设计模式UML类图汇总”中,你将找到有关这些模式的详细解释和它们在UML中的表示方式。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。UML类图中,单例类通常有一个私有的构造...

    图书管管理系统UML类图

    UML类图是UML中的静态结构模型,它主要展示了系统的类、接口、协作以及它们之间的关系,如继承、关联、依赖等。在图书管理系统中,类图将帮助我们清晰地定义各类对象及其属性和操作。 图书管理系统的核心类可能包括...

Global site tag (gtag.js) - Google Analytics