设计模式基础:类及类关系的UML表示

设计模式基础:类及类关系的UML表示

2009-10-26 17:00 by 宗哥, 1891 阅读, 1 评论, 收藏编辑

UML中,类关系分为这几种,泛化(generalization), 实现(realization),依赖(Dependency),关联(associate),聚合(aggregation),(composition)下面分别是UML实现及C#中的代码表现。

泛化(generalization)

泛化也称作特化(specialization),用来表示一个更一般和更特殊的分类器之间的关系,从面向对象的角度来看,他表达的是类和类之间的继承(inheritance)关系。

例如:Person(人)继承了Organism(生物)类, Organism是更一般的分类器,Person是更特殊的分类器。

注意,泛化在语义上理解为更特殊的分类器 is kind of更一般的关系,本例我们可以理解人是生物的一种或者是一种生物。记住这点很重要。

实现(realization)

是指特殊化的分类器和接口之间的一种关系,从面向对象的角度来看,他表达的是分类器遵守并实现接口的契约(Contract)。

例如:奇瑞公司要生产一款轿车,由于产能原因发动起部分决定采用不同厂家的发动机,他只要规范这个发动机的一些参数可以。BmwEngine(宝马发动机)和AndiEngion(奥迪发动机)实现了Engine的契约,便可以被采用。

接口表示 I can do的一种概念,例如 BmwEngine(宝马引擎)完全可以做Engine(引擎)做的事情。

C#中 泛化(generalization)和实现(realization)的比较

我们不讨论语言层面抽象类 (abstract class) 和接口(Interface)的技术性差别。

在C#中,泛化我们主要指类和类的继承关系,表示is kind of的关系,当然如果一个接口继承了另外一个接口,我也主张把他划分为泛化,这符合is kind of的观点。实现主要指类和接口的关系,表示这个类完全实现了接口成员,I can do 。当然两者在C#实现上都是通过符合”:”实现,但是在语义上完全是两回事情,在UML关系图中识别也不一样。还要提醒你下,如果在C#中,你的类如果继承了一个类,同时实现了一或者多个接口,一定要把类写在所有接口的前面。

依赖(Dependency)

依赖关系是一种相对简单的关系,表示一个类会用到另外一个类,这个关系具有相对的偶然性。他表达的是参与关系的模型元素,并不会直接转化为程序代码(前文我们讲的泛化和实现都直接转化为程序代码了)。

例如 微软SqlHelper类和SqlConnetciont(Sql连接),可以看做SqlHelper依赖SqlConnetciont。

依赖(Dependency)关系语义上是比较弱的一种关系模型,通常在以下情况我们认为A依赖于B:

1. A中的方法中有B类型的参数

2. A方法中实例化B或者调用了B的静态方法

关联(associate)

关联我们分单项管理和双向关联。单相关联表示两个类是相关的,但是只有一个类知道这种联系的存在,双向关联两个类彼此知道它们间的联系。

双向关联的例子:FeedIn(订单)类和Order (订单)类:

类FeedIn的代码

类Order的部分代码

可以看出,Order类知道他的Feed In,FeedIn也知道他的Order。

注意其多重值的含义:


可能的多重值描述


表示


含义


0..1


0个或1个


1


只能1个


0..*


0个或多个


*


0个或多个


1..*


1个或我个


3


只能3个


0..5


0到5个


5..15


5到15个

单项关联的例子:Order Report(订单报表)类和订单(Order)类:

Order Report的部分代码

注意其箭头编号和Order中代码,可以看出,Order不知道Order Report(订单报表)的存在。

C#依赖和关联的比较

在C#中,关联的类通常体现在类的成员变量,表示一种相对固定长期的关系,而依赖关系通常体现在局部变量,表示一种相对偶然,临时的关系。

聚合(aggregation)

聚合也是一种关联,但是对于关联来讲,关联的双方没有明显的主次关系,例如 FeedIn(入库单)类和订单(Order)类,Order Report(订单报表)类和订单(Order)类等等,聚合在聚集中,则有主次之分,“主”的一方只能有一个。

例如Order(订单)和 OrderDetail(订单明细),

 Order的部分代码

Order Detail的部分代码

聚集关系和关联关系的区别还表现在以下方面:

(1) 对于具有关联关系的两个对象,多数情况下,两者有独立的生命周期。FeedIn(入库单)类和订单(Order)类,。FeedIn(入库单)的销毁不会影响订单(Order);反之亦然。

(2) 对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。例如Order(订单)和 OrderDetail(订单明细),不过,有的设计者也允许单独的OrderDetail存在,这有点类似我们说的“数据岛”之类的问题。

不过,在C#中表示关联关系和聚集关系时,两者比较相似,都是作为成员变量存在。

组合(composition)

关联(associate)关系在设计中一般体现为聚合(aggregation)和组合(composition)关系,组合和聚合相似,但表示一种更强烈的组合语义关系:

例如Person(人)和 Head(头),

Person(头)类的部分代码

Head(头)类的部分代码

UML图及关系总结:

泛化(继承):表示一般与特殊的关系,用一条实线加空心箭头来表示;

实现:表示类与接口的关系,用一条虚线加空心箭头来表示;
关联:连接模型元素及链接实例,用一条实线来表示;

依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示;

聚集:表示整体与部分的关系,用一条实线加空心菱形来表示;

组成:表示整体与部分的有一关系,用一条实线加实心菱形来表示;

设计模式基础:类及类关系的UML表示

时间: 2024-10-10 16:19:00

设计模式基础:类及类关系的UML表示的相关文章

java 类与类之间的关系 及uml图

类与接口之间的关系 : 继承 类与类之间的关系 :继承关系  包含关系 类与对象之间的关系 : 实例 UML 类图中类与类之间的关系: 泛化关系(generalization) 关联关系(association) 聚合关系(aggregation) 合成关系 (compostion) 依赖关系 (dependency) 1.泛化(Generalization)[泛化]表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系.一般化的关系是从子类指向父类的,与继承或实现的方法相反.

Python设计模式 - 基础 - 类与类之间的六种关系

在程序中需要把世间万物抽象成相应的类,现实世界中物与物之间的关系和程序中类与类之间的关系相对应,因为世间万物是普遍联系的,所以程序中类与类之间也不是孤立的.在系统分析和框架设计中,根据面向对象机制的三大特性:封装.继承.多态,归纳和扩展出类与类之间六种不同的关系: - 依赖关系Dependency: 在局部变量,方法的形参,或者对静态方法的调用中实现 - 关联关系Association: 在类的成员变量中实现,可以双向也可以单向 - 聚合关系Aggregation: 强关联,整体与部分的关系,但

【小话设计模式】类之间的关系

4.组合(Composition) 定义:相比于聚合,组合是一种耦合度更强的关联关系.存在组合关系的类表示"整体-部分"的关联关系,"整体"负责"部分"的生命周期,他们之间是共生共死的:并且"部分"单独存在时没有任何意义.如果是组合关系,如果整体被破坏则个体一定会被破坏,而聚合的个体则可能是被多个整体所共享的,不一定会随着某个整体的破坏而被破坏. 符号:带实心菱形实线箭头表示 1.合成关系是关联关系的一种,是比聚合关系还要强的

uml描述类与类之间的关系

工作时培训的时候公司同事讲过UML,当时没怎么听,后在在看相关技术书籍的时候,发现用到还不少,于是恶补了些.UML体系庞杂,非十天半月可以掌握,但是作为简单的工具使用,去看清楚系统的内在逻辑还是可以速成的.(非设计系统),股票市场是一场拼图游戏,而UML也可以作为拼图工具去参与面向对象体系软件设计的! 废话不多说,进入正题. 先介绍几款画UML的工具,三大知名VISIO,RationalRose,PowerDesign不多说,个人喜欢用开源的,一是免费,二是通常体积较小,运行起来比较快.我用的是

UML 类与类之间的四大关系的一些图标及代码含义

UML 类与类之间的四大关系的一些图标及代码含义 另一个版本: 关联:连接模型元素及链接实例,用一条实线来表示: 依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示: 聚合:表示整体与部分的关系,用一条实线加空心菱形来表示: 组成:表示整体与部分的有一关系,用一条实线加实心菱形来表示: 泛化(继承):表示一般与特殊的关系,用一条实线加空心箭头来表示: 实现:表示类与接口的关系,用一条虚线加空心箭头来表示:类与类之间存在以下关系:(1)泛化(Generalization)(2)关

UML表达基类,子类关系

1.UML图有如下几类: UML表达基类.子类关系步骤: 1.点击Diagram/class diagram创建类图. 2.选中工具栏的class图标,开始绘制类图 2.1双击可以修改类名 2.2双击方法可以修改方法名访问权限等 2.3 TestActivity继承 Activity

UML类图的关系

UML类图的关系 多态 泛化(Generalization) [定义]:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为[UML表示]:带三角箭头的实线,箭头指向父类[代码表现]:A类 extends B类 public Class Tigger extends Animal{ 实现(Realization) [定义]:是一种类与接口的关系,表示类是接口所有特征和行为的实现[UML表示]:带三角箭头的虚线,箭头指向接口[代码表现]:A类 implements B接口

UML类之间的关系

原文:http://www.cnblogs.com/me115/p/4092632.html 下面详细介绍这六种关系: 类之间的关系 泛化关系(generalization) 类的继承结构表现在UML中为:泛化(generalize)与实现(realize): 继承关系为 is-a的关系:两个对象之间如果可以用 is-a 来表示,就是继承关系:(..是..) eg:自行车是车.猫是动物 泛化关系用一条带空心箭头的直接表示:如下图表示(A继承自B): eg:汽车在现实中有实现,可用汽车定义具体的对

【JavaSE】类与类的关系--UML

类(对象/接口)之间的关系 -- UML类图展现 2019-07-14  14:37:19  by冲冲 在面向对象程序设计时,类与类之间的关系主要分为:继承,实现,依赖,关联,聚合,组合等6种关系. 各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚集 > 关联 > 依赖 .其中前两种理解很简单,重点是比较容易混淆的后四种. 1. 继承 -- "a is kind of A" 继承(Generalization):亦称泛化,表示一般与特殊的关系.继承指的是一个