UML中类之间的关系分为以下几种:依赖、关联、泛化、聚合、组合。

  依赖是指一个类使用了另一个类,它是一种使用关系,描述了一个事物的规格说明的变化可能会影响到使用它的另一个事物(反之不一定)。最常见的依赖关系是一个类内部中使用到了另一个类的定义。在UML中表示为一条指向被依赖事物的虚线。

  依赖可以采取多种方式来实现,如以下代码

internal class DependReturnType
{

}

internal class DependParameter
{

}

internal class DependVarible
{
   
}

class Depend
{
    public DependReturnType Test(DependParameter param)
    {
        DependVarible var = new DependVarible();
        return new DependReturnType();
    }
}

Depend类依赖于DependReturnType类、DependParameter类和DependVarible类,这就表明依赖的关系可以通过返回值、方法参数或者内部定义变量的形式来实现。

  当类之间在概念上有连接关系时,类之间的连接称之为关联,关联是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定一个连接两各类的关联,可以从一个类的对象导航到另一个类的对象。   一般把关联画为连接相同或者不同的类一条实线。关联可以有方向,即导航。一般不作说明的时候,导航是双向的,不需要在线上标出箭头。大部分情况下导航是单向的,可以加一个箭头表示。

  关联一般采取全局变量的方式来实现,如以下代码

internal class Employee
{
    public void DoWork()
    {
       
    }
}

class Association
{
    private Employee myEmployee;

public Employee MyEmployee
    {
        get
        {
            return myEmployee;
        }
        set
        {
            myEmployee = value;
        }
    }

public void DoSomething()
    {
        myEmployee.DoWork();
    }
}

Association类关联Employee类。

  依赖和关联都是一个类中使用了另一个类,那它们有什么区别呢?

  依赖和关联都是两个或多个相对独立的类之间的关系。当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系;当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。依赖关系表现在局部变量,方法的参数,以及对静态方法的调用;关联关系是使用实例变量来实现。

  泛化就是面向对象中的继承。它表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。

  代码如下

internal class Father
{

}
internal class Child : Father
{
   
}
class Generalization
{
    public void Test()
    {
        Father father = new Child();
    }
}

  当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。

  与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。

  聚合用带一个空心菱形(整体的一端)的实线表示。

  聚合与关联的区别:关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。

  组合是一种特殊的聚合关系,它是一种强类型的聚合,组合中的部分不能脱离整体而独立存在。例如Windows的窗口和窗口上的菜单就是组合关系。组合中的整体和部分的生命周期一致,即部分必须在组合创建的同时或者之后创建,在组合销毁之前或者同时销毁,部分的生命周期不会超出组合的生命周期。

  组合是用带实心菱形(整体的一端)的实线来表示。

  组合与聚合的区别:

  • 生命周期的实现上,组成需要负责其部分的创建和销毁,聚合不需要
  • 组合中的一个对象在同一时刻只能属于一个组成对象,而聚合的一个部分对象可以被多个整体对象聚合,例如一个学生可以在多个学校就读,而一个菜单在同一时刻只能是某个窗口内的对象。

UML中类之间的关系的更多相关文章

  1. UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中, ...

  2. UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现(转)

    UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现   类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统 ...

  3. UML中类之间的几种关系

    类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(Aggregation,也有的称聚集).组合(Composition).泛化(generalizatio ...

  4. 浅谈UML中类之间的五种关系及其在代码中的表现形式

    本文转载:http://www.cnblogs.com/DebugLZQ/archive/2013/05/13/3066715.html 什么是类? 将某类东西归纳在一起,可以成为一个类. 类有很多种 ...

  5. [UML] UML中类之间的几种关系

    类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(Aggregation,也有的称聚集).组合(Composition).泛化(generalizatio ...

  6. 【转】UML图中类之间的关系

    原文:http://blog.csdn.net/hguisu/article/details/7609483   类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相 ...

  7. 关于UML方法学图中类之间的关系:依赖,泛化,关联

    类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什 ...

  8. UML 图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    http://www.uml.org.cn/oobject/201211231.asp 1. 关联 一个类作为另外一个类的变量:在UML类图中,用实线连接有关联关系的对象所对应的类 2.聚合 表示整体 ...

  9. UML类之间的关系

    原文:http://www.cnblogs.com/me115/p/4092632.html 下面详细介绍这六种关系: 类之间的关系 泛化关系(generalization) 类的继承结构表现在UML ...

随机推荐

  1. Educational Codeforces Round 45 (Rated for Div. 2) C、D

      C. Bracket Sequences Concatenation Problem time limit per test 2 seconds memory limit per test 256 ...

  2. POJ2367 拓扑排序 裸题 板子题

    http://poj.org/problem?id=2367 队列版 #include <stdio.h> #include <math.h> #include <str ...

  3. UVA 437_The Tower of Babylon

    题意: 一堆石头,给定长宽高,每种石头均可以使用无数次,问这堆石头可以叠放的最高高度,要求下面的石头的长和宽分别严格大于上面石头的长和宽. 分析: 采用DAG最长路算法,由于长宽较大,不能直接用于表示 ...

  4. Servlet基础教程:tutorialspoint-servlet

    来自turorialspoint的Servlet基础教程(英文),官网:https://www.tutorialspoint.com/servlets/index.htm 这个教程在国内已经被翻译成中 ...

  5. JS原生DOM操作总结

    DOM的主要操作——增.删.改.查节点 (1) 查找节点 document.getElementById('div1') document.getElementsByName('uname') doc ...

  6. cmd-net命令详解

    NET ViewNET UserNET UseNET TimeNet Start Net PauseNet ContinueNET StopNet StatisticsNet Share Net Se ...

  7. react 项目实战(五)渲染用户列表

    现在我们需要一个页面来展现数据库中记录的用户. 在/src/pages下新建UserList.js文件. 创建并导出UserList组件: import React from 'react'; cla ...

  8. 一个最简单的Servlet实例

    先在tomcat的webapps目录下,新建一目录,如test.然后,在test目录下建立WEB-INF为名的目录.这个必须有. 然后,在WEB-INF目录下建立classes目录.用以存储所用到的c ...

  9. js中的封装、继承、多态

    Javascript是一门解释型的语言,是基于对象的,并不是真正的面向对象的语言,对变量类型的应用也是宽松的,其实它同样可以模拟面向对象的功能:  1 function myfun1(){  2    ...

  10. gdb 调试利器

    1. gdb 调试利器 GDB是一个由GNU开源组织公布的.UNIX/LINUX操作系统下的.基于命令行的.功能强大的程序调试工具.对于一名Linux下工作的c++程序猿,gdb是不可缺少的工具: 1 ...