关闭

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

257人阅读 评论(0) 收藏 举报
分类:

一.引

        撇开系统的总体设计,架构图,模块图等框架性设计,在具体到某一个功能点的流程设计/类设计/接口设计时,通过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类图帮助下可以迅速理清结构图,完成整个系统的搭建测试。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18656次
    • 积分:525
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:8篇
    • 译文:0篇
    • 评论:4条
    最新评论