系统设计之——关联依赖组合聚合UML

原创 2016年08月21日 12:20:03

一.引

        撇开系统的总体设计,架构图,模块图等框架性设计,在具体到某一个功能点的流程设计/类设计/接口设计时,通过UML罗列类/接口及其关系可以更好地将设计转化为代码。UML从多个角度描述系统内容,如用例图从系统参与者的角度描述需求或功能点,部署图从系统角度描述分布与架构,时序图从逻辑调用角度对功能点在不同模块/子系统间更好叙述,而类图从类抽象设计方面描述功能的具体设计实现。下面重点讲解类图中常见设计点。

二.类间关系分析

        从面向对象角度,类与类间大体包括继承(extends)/实现(realization)/关联(association)/依赖(dependency)组合(composition)/聚合(aggregation)几种关系。

  • 继承(extends)和实现(realization)对应我们常见的父类/子类,类实现接口这种关系,如动物与鱼,游泳行为与鱼。
  • 关联(association)和依赖(composition)对应类对象使用另一个类对象实现功能这种关系,如好友间发送消息使用封装的xmpp通信对象。
  • 组合(composition)和聚合(aggregation)对应类对象由其他类对象组成这种关系,如公司由不同部门组成,鸟群由鸟儿组成;

三.UML类图

1.继承(extends)

        几个类对象一脉相承,可以归纳为一类具有共同属性的对象。如猫,狗,鸟,鱼等都归纳为动物,那么动物(Animal)即为父类,猫(Cat),狗(Dog),鸟(Bird)和鱼(Fish)是动物的子类。进一步扩展,猫又具有子类:波斯猫,龙猫等,狗具有子类:田园犬,阿拉斯加,金毛等。

         子类默认会继承父类的protected.public成员。

        UML用下图表示:


2.实现(realization)

        几种类对象具有某种共同行为,如鸟/飞机/火箭/风筝都回飞, 鱼/潜艇/海蛇/都回会游泳,通常是对某一动作行为的抽象。

        UML用下图表示:


3.关联(association)

        两个类对象间具有某种紧密.强烈的关系,如学生和课程间的关系,学生会选择某些课程作为在校期间的研究方向,而老师和学生间更像一种双向关联关系。

        关联关系在类间以类成员属性的方式存在,如学生关联课程,则课程以成员属性方式存在于学生类中。

        UML用下图表示:


4.依赖(dependency)

        两个类对象间具有某种临时性.偶然的关系,如农夫砍柴需要砍刀,潜水运动员需要氧气瓶。可以理解为某个类对象在做某件事情时需要其他类对象作为辅助工具。

        依赖关系通过以类成员方法的形参方式存在,如乘客过河方法,传入一个船对象。

        UML用下图表示:


5.组合(compositon)

        一个整体性的类对象由若干个其他类对象组成,是一种强烈的个体构成整体关系,contains a。个体类的生命周期随整体类的生命周期变化,个体不能单独存在或单独存在无意义。

        个体对象以成员属性的方式存在于整体对象中。如比较贴切的例子包括:鸟儿与翅膀,汽车与轮胎, 公司与部门, 鼠标与按键/滚轮。

        UML用下图表示:


6.聚合(aggregation)

         一个整体性的类对象由若干个其他类对象积聚,是一种松散的个体弱联合关系, has a 。 个体类本身可以单独存在,且生命周期由自己决定。

         个体对象也是以成员属性的方式存在于整体对象中,只能通过语义区分。如:舰队和舰只,运输车队和卡车,公交车和乘客,鱼群和鱼。

         UML用下图表示:


四.总结

        关联,组合,聚合一般都是以类成员属性的方式存在,有些在构造函数中初始化,有些只在需要时通过setter方法赋值。而依赖一般只在类的成员方法中以形式参数的方式存在,短暂的用完即弃。

        在系统开发设计时,优先定义好接口,抽象类,分离各实体类,功能类,在UML类图帮助下可以迅速理清结构图,完成整个系统的搭建测试。


vim的ex模式用法

《使用vi编辑器》 Lamb & Robbins编著 本问内容: 1. 使用行号在文件中移动 2. 使用ex命令对文本块进行复制,移动和删除 3. 保存文件和部分文本 4. 操作多个文件(读...

Java线程(初级)——synchronized、死锁、wait、notify详解

线程可以在任意对象的监视器(锁)上阻塞(wait,前提是获取到该对象的锁),也可以在唤醒任意一个wait在某个对象的监视器上的线程(notify,前提是获取到该对象的锁)。“获取到某个对象的锁”,就像...
  • MyTroy
  • MyTroy
  • 2014年08月03日 20:01
  • 2380

设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合)

类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。接下来我们就来谈谈类图的组成,在下一篇中我们将讨论一下...

一起来学UML(3)——类间的依赖、关联、聚合、组合关系

首先回顾一下上一节的内容:类实现接口为虚线箭头,类继承(泛化)一个类为实线箭头。 本节描述类间的依赖(Dependency)、关联(Association)、聚合(Aggravation)、组合(C...
  • donhao
  • donhao
  • 2011年08月31日 21:40
  • 3014

UML中的几种关系——依赖、关联、聚合、组合、泛化、实现

(1)依赖关系 Dependency……use a……类A使用类B,且这种使用关系是很弱的,具有偶然性、临时性,但类B若发生变化会影响到类A。【表示方法】带箭头虚线,箭头指向被依赖对象【具体表现】:局...

UML关系——泛化,实现,依赖,关联(聚合,组合)

UML的构造块包含3种: (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系 (3) 图(10种):用例图,类图,对象图...

UML类关系-依赖,关联,聚合和组合

  • 2009年05月28日 23:29
  • 61KB
  • 下载

Java设计模式——依赖、关联、聚合和组合之间区别的理解

在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。他们在编程语言中的体现却是基本相同的,但...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:系统设计之——关联依赖组合聚合UML
举报原因:
原因补充:

(最多只允许输入30个字)