`
小果果
  • 浏览: 117230 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

UML如何描述类之间的关系(一)

阅读更多
UML(The Unified Modeling Language)就是统一建模语言,不论它是怎么发展来的,也不论最新的官方Specification或工业标准是哪个版本,我想总结一下工作中最常用的一些知识:用UML语言描述类的关系。

1,关联关系(Association)

关联关系是类(也可以说是对象)之间特定的对应关系。按照对象的数量对比,可以分为:

A 一对一



 

比如公民和公民身份卡之间的对应关系。

B 一对多





一个部门对应0或者多位员工,一般而言一位员工只能属于某一个部门。

C 多对多






用户和服务是多对多的关系,一个用户可以注册0个或多个服务,一个服务则可以被0个或者多个用户复用。比如Windows Live用户可以激活邮件服务、Space服务等,而这些服务不是被一个用户所专有的。

关联的实质

从A类型到B类型的关联是指在A类型中定义了B类型作为属性。如下列代码:

package uml;

public class Citizen {
    private CitizenshipCard card;

   //其他属性

    public CitizenshipCard getCard() {
        return card;
    }

    public void setCard(CitizenshipCard card) {
        this.card = card;
    }

}

上述代码演示了从Citizen 到 CitizenshipCard 的关联。注意下图箭头方向:






同样可以建立CitizenshipCard 到 Citizen 的关联:







代码表示为:

package uml;

public class CitizenshipCard {
    private Citizen citizen;

    //其他属性

    public Citizen getCitizen() {
        return citizen;
    }

    public void setCitizen(Citizen citizen) {
        this.citizen = citizen;
    }

}

如果仅仅建立从Citizen 到 CitizenshipCard 的关联或者仅仅建立CitizenshipCard 到 Citizen 的关联,都属于单向关联,如果两个方向的关联都建立,就是双向关联:







是否建立双向关联要在实际项目中酌情而定。再看个双向关联的例子:






Department  -----------------------------------------------------------------

package uml;

import java.util.Set;

public class Department {
    private String name;
    private Set<Employee> employees;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(Set<Employee> employees) {
        this.employees = employees;
    }

}

Employee --------------------------------------------------------------------

package uml;

public class Employee {
    private String name;
    private long joinTime;
    private Department department;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getJoinTime() {
        return joinTime;
    }

    public void setJoinTime(long joinTime) {
        this.joinTime = joinTime;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

}

 
UML如何描述类之间的关系(二)
2,聚集关系(Aggregation)

聚集者和被聚集者之间是一种灵活的平台分享关系。一个类提供平台,把另外一个类集成过来,如下图BankService将其他Services集成进来,统一为客户提供风格一致的服务。我们面对银行的一个普通柜台工作人员,可以存取款项,可以委托理财,可以查询账户余额,可以委托代交电费,还可以挂失或销户,这些服务都是在一个地点由同一个用户服务接口(BankService)完成的。类似的例子还有计算机和外设之间的关系:计算机可以聚集U盘、扫描仪、打印机、手机等硬件,统一为用户提供服务,这种服务大大丰富了计算机本身的功能,也便于用户统一使用。





 

ATM也是一种BankService实例,我们面对ATM,也可以享受多种自助服务(温馨提示:当然,要冒着被终身监禁的风险,呵呵)。

3, 构成关系(Composition)

构成关系也是一种平台分享关系,但是这种平台是垄断的、强制的。如身体和头之间是一种构成关系,头只能在身体上,离开这个平台,就没有继续存在的机会了。

构成关系有两层含义:1,整体(父元素)和部分(子元素)之间的关系;2,部分(子元素)的生命周期隶属于整体(父元素)的生命周期,父元素消亡,子元素级联消亡。






如何区分关联关系、聚集关系和构成关系?
关联关系、聚集关系和构成关系,都属于广义的关联关系,三种关系的在面向对象的编程语言中表现方式是一致的(参考:1,关联关系 关联的实质)。但是它们的本质区别是存在的:  





UML如何描述类之间的关系(三)
接着我介绍一下依赖、泛化和实现关系。

4,依赖关系(Dependency)

对象管理组织(OMG)在其最新的UML规范(V 2.1.1 2007-02-05)上是这么描述依赖关系的:

依赖关系是指一个单独的或者一组的模型元素从规范或者实现的角度,需要其他的模型元素的存在。完整的含义是:依赖方(客户方、需求方)的元素要么从语义层面,要么从结构层面,依赖供应方元素(有时不仅是一个)的定义。(7.3.12 Dependency, Page 62)

这就是“规范说明”,为了支持对各种实现者的指导,它坚持自己的抽象风格,从而不太方便人们的理解。

简单而言,依赖关系是一种局部使用关系。A类使用B类,则说明A类依赖于B类,图示如下:







A类在两种情况下使用B类:

1,A类负责构造B类的实例,即A类使用B类的构造器

【图示】







【代码】

package uml;

public class CarFactory {
    public Car makeNewCar(){
        return new Car();
    }

}

2,A类使用B类实例的其他方法或者属性

【图示】






【代码】

package uml;

public class Person {
    public void drive2Office(Car myCar){
        myCar.run();
    }

}

5,泛化关系(Generalization) 

泛化就是一般化、概括或总结。父类是对子类的泛化,另一方面看,子类是对父类的继承。






6,实现关系(Realization)

一般是指接口与其实现类的关系。









  • 大小: 9.6 KB
  • 大小: 7.5 KB
  • 大小: 9.4 KB
  • 大小: 7.8 KB
  • 大小: 8.1 KB
  • 大小: 8.5 KB
  • 大小: 26.2 KB
  • 大小: 17.8 KB
  • 大小: 10.5 KB
  • 大小: 11.2 KB
  • 大小: 14.3 KB
  • 大小: 19.9 KB
  • 大小: 13.1 KB
  • 大小: 19.3 KB
  • 大小: 11.2 KB
分享到:
评论

相关推荐

    UML类之间的关系图

    类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。 纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。

    基于UML类图的类之间依赖关系图论问题研究.pdf

    基于UML类图的类之间依赖关系图论问题研究.pdf

    UML语言中用例关系描述(详细,有例子介绍)

    有例子介绍每种用例之间的关系,易于理解,适用于初学者。

    UML类关系之JAVA代码实现

    关系是事物之间的联系。类之间有4种重要的关系:依赖、泛化、关联和实现。这些关系都可以映射到代码里。

    UML类图说明类图关系

    大家知道,UML类图之间的关系确实难以理解,而诸多教材中的解释又各不相同;我是查阅了了很多教程后,总结出的相对具有共性的解释了; 实例介绍了类图之间的关系及面向对象的相关概念 同时,介绍了EA下类图各关系的...

    IT ATA UML认证试题

    2. 两个类之间的关联表示他们之间存在一种不适于继承的逻辑关系。在关联关系的表示图元的两端,可以表示参与关联的()特性。 A、约束 B、可见性 C、角色名 D、多重性 3、(D)是一种不包含操作的实现部分的特殊类。...

    ModelGoon java代码自动生成UML图

    ModelGoon,Eclipse插件。由 java代码可自动生成UML类图、协作图、顺序图等,操作简单

    UML用例的关系_UML用例图关系_源码

    论述UML用例图之间的关系,对用例图进行详细说明。

    基于UML的网上购物商店的分析与设计 (2013年)

    以网上购物商店为例,运用UML分析了系统的静态模型和动态特征,分析了基于UML的网上购物商店的建模的实现过程:类图分析了网上购物商店中5个实体类(顾客类、订单类、商品类、记录类、管理员类)之间的关系;顾客用例图...

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

    UML类图关系大全,里面把之间的关系描述的较清楚,尤其是图像

    类的关系图, UML图示

    类的关系图, 类图, 通过starUML绘制的类类之间的关系图, 包含8中类的关系. 详细讲解见博客: http://my.oschina.net/whforever/blog/645501

    uml 试卷很全面好多个试卷及答案

    8.在UML软件开发过程的需求分析和系统分析阶段,建立类模型的步骤分为 寻找确定类 、 定义类的接口 、定义类之间的关系、建立类图 和 建立系统包图 。 9.组合聚集是指“整体”拥有它的“部分”,它具有强的物主...

    利用UML序列图设计Java应用程序详解

    其中UML序列图就是用来描述类与类之间的方法调用过程(或消息发送)是如何实现的。本文通过一个具体的应用程序的设计与实现过程,详细说明了利用UML序列图设计Java应用程序,使得开发过程标准化、可视化,代码编程...

    UML类图与类的关系详解

    在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系...

    UML类图怎么画学习示例

    UML类图(Class diagram)是统一建模语言(UML)的一种图形表示,用于显示系统的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系。 在类图中,每个类由一个包含类名、属性和方法的矩形表示,...

    uml 试题及答案

    UML试题1、UML中的交互图有两种,分别是顺序图和协作图,请分析一下两者之间的主要差别和各自的优缺点。掌握利用两种图进行的设计的方法。 答:协作图可视化地表示了对象之间随时间发生的交互,它除了展示对象之间的...

    UML类图各种关系详解

    UML类图各种关系详解 包括 继承 实现 聚合 等等 一张图道出类之间的各种关系 直观容易

    UML类图、类与类间关系文档(UML必看)

    NULL 博文链接:https://quicker.iteye.com/blog/600285

    《UML系统分析与设计》考试模拟试卷2020.doc

    三、简述用例之间的包含关系和扩展关系的相同点和不同点。(10分) 四、简述顺序图和协作图的相同点和不同点。(10分) 五、看图回答问题:下图中类的名字是什么?类中有哪些行为(方法),他们的可见性是什么? 该类是...

    UML用例图之泛化(generalization)、扩展(extend)和包含(include)关系

    在画用例图的时候,理清用例之间的关系是重点。用例的关系有泛化(generalization)、扩展(extend)和包含(include)。...泛化(generalization):泛化关系是一种继承关系,子用例将继承基用例的所有行为,关系和通信关系

Global site tag (gtag.js) - Google Analytics