类图中的关系大致一下几种

l 泛化

l 关联

l 依赖

l 组合

l 聚合

泛化

泛化是子集和超集的关系,常使用继承和实现来表示;

继承:子类到超类的实线和空心三角箭头表示

实现:子类到超类的虚线和空心三角箭头表示

依赖

依赖常常表示 一方(客户)知道另一方(提供者)并且另一方(提供者)有所改变时会对一方(客户)产生影响。这就是常常说的耦合。

依赖有许多种类型,比较常见的类型;

拥有提供者类型的参数

接收提供者类型的参数

提供者是超类或接口

向提供者发送消息。对提供者的可见性可能是 属性,参数变量,局部变量,全局变量或类方法。

  public class Client
{ /// <summary>
/// 1.UpdatePrintMsg 方法接收Supplier对象作为参数,然后向其发送GetPrintMsg消息
/// 由此可见 client对象对supper具有参数可见性,并且有发送消息的耦合,因此对supplier有依赖。
/// 如果后者发生变化,client类将会受到影响。
/// </summary>
/// <param name="supplier"></param>
public void UpdatePrintMsg(Supplier supplier)
{
var msg = supplier.GetPrintMsg();
Console.WriteLine("客户端:call-》"+ msg);
} } public class Supplier
{
public string Msg => "提供者信息";
public string GetPrintMsg()
{
return Msg;
}
}

客户端调用并输出 :客户端: call-》提供者信息

  Client client = new Client();
client.UpdatePrintMsg(new Supplier());

在看另外一个例子

public class Client
{ /// <summary>
/// PrintCartNum方法调用了supplier的静态方法。因此client对象对suplier类
/// 具有静态方法依赖。
/// </summary>
public void PrintCartNum()
{
long cartNum = Supplier.GetCartId(); Console.WriteLine(cartNum);
} } public class Supplier
{
public static long GetCartId() => 1000_2000_3000_4000;
}

客户端调用并输出:1000200030004000

  Client client = new Client();

  client.PrintCartNum();

关联

关联是一种has a 的关系,用导航性箭头(即实线+箭头)由源对象(order)那个指向目标对象(OrderItem),表示Order的一个属性是orderItem对象。在具体的实现时往往表示为类的属性

关联也可以不带箭头表示双向关联

聚合

聚合是uml中一种模糊的关联,其不精确地暗示了整体-部分关系(和许多普通关联一样)

为什么还定义这一术语呢?参考uml创始人之一的话:“虽然并没有给聚合赋予太多的语义,但是每个人都认为这是必要的。可以将其视为建模的安慰剂。”因此,听从uml创始者的建议,不要费心去使用聚合。相反,在适当的时候要使用组合。

组合

组合也称为组合聚合,这是一种很强的整体-部分聚合关系,并且在某些模型中具有效用。总是暗示“拥有-部分”的某系变体。使用实心菱形箭头表示组合。

组合关系有一下几层含义:1)在某一时刻,部分的实例只能属于一个组成实例。

2)部分必须总是属于组成;3)组成要负责创建和删除其部分,既可以自己创建/删除部分,可以与其他对象协作来创建/删除部分。总之剑在人在,剑毁人亡。

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

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

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

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

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

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

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

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

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

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

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

  6. UML学习——类之间的关系

    参考:UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 空心菱形为聚合关系:部分与整体,部分可有可无.部分可以单独存在(车子和引擎,引擎可以单独存在) 实心菱形为组合关系:部分与整体,但是部 ...

  7. UML中类之间的关系

    UML中类之间的关系分为以下几种:依赖.关联.泛化.聚合.组合. 依赖是指一个类使用了另一个类,它是一种使用关系,描述了一个事物的规格说明的变化可能会影响到使用它的另一个事物(反之不一定).最常见的依 ...

  8. uml图的五种关系 标签: uml 2016-12-18 21:47 221人阅读 评论(25) 收藏

    统一建模语言 Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所 ...

  9. UML用例图之间的关系

    在画用例图的时候,理清用例之间的关系是重点.用例的关系有泛化(generalization).扩展(extend)和包含(include).其中include和extend最易混淆.下面我们结合实例彻 ...

随机推荐

  1. UNIX网络编程——客户/服务器程序设计示范(一)

    下面给出的是客户程序用于测试我们的服务器程序的各个变体. #include "unp.h" #define MAXN 16384 /* max # bytes to request ...

  2. UNIX网络编程——TCP带外数据小结

    带外数据概念实际上时向接收端传送三个不同的信息:(1)发送端进入紧急模式这个事实.接收进程得以通知这个事实的手段不外乎SIGURG信号或select调用.本通知在发送进程发送带外字节后由发送端TCP立 ...

  3. Java相关错误

    http://blog.csdn.net/pipisorry/article/details/51291063 使用hadoop jar ./Hw2Part1.jar /hw2/example-inp ...

  4. AsyncTask(异步任务)讲解-android的学习之旅(四十六)

    AsyncTask简介 Android的UI线程主要处理用户的按键,触屏和View的绘制等,不能在里面处理耗时的操作,否则会出现ANR,因此耗时的操作要单独开一个线程处理,但是新线程不能直接处理UI线 ...

  5. 手把手教你轻松实现listview下拉刷新

    很多人觉得自定义一个listview下拉刷新上拉加载更多是一件很牛x的事情,不是大神写不出来,我想大多数童鞋都是做项目用到时就百度,什么pulltorefresh,xlistview...也不看原理, ...

  6. Uva - 12174 - Shuffle

    用滑动窗口的思想,用一个数组保存每个数在窗口中出现的次数.再用一个变量记录在窗口中恰好出现一次的的数的个数,这样可以枚举所有可能的答案,判断它所对应的所有串口,当且仅当所有的串口均满足要求时这个答案可 ...

  7. Java接口interface

    Java接口interface 1.多个无关的类可以实现同一个接口. 2.一个类可以实现多个无关的接口. 3.与继承关系类似,接口与实现类之间存在多态性. 接口(interface)是抽象方法和常量值 ...

  8. OC语言大总结(下)

    根据OC学习的知识点,总结了一下,希望能帮到大家! 作者:韩俊强   未经允许,请勿转载! 关注博主:http://weibo.com/hanjunqiang 上接:http://blog.sina. ...

  9. (NO.00001)iOS游戏SpeedBoy Lite成形记(十)

    上篇最后遇到是神马问题呢? 原来由于现在seq动作的时间变得不确定了,jump的持续时间不能对应发生变化,导致可能选手在比赛后边就没有跳跃动作了!这虽不影响整个代码逻辑,却多少有些让玩家不爽. 一种解 ...

  10. 学习pthreads,多线程的创建和终止

    在多CPU多线程的编程中,通过作者的学习发现,pthreads的运用越来越广泛,它是线程的POSIX标准,定义了创建和操作线程的一整套API.环境的配置见上一篇博文,配置好环境后只需要添加#inclu ...