一 。UML中的6大关系
依赖 聚合 组合 泛化 实现 关联
1 依赖 (Dependence):假设A类的变化引起了B类的变化,则说明B类依赖于A类.
(1)类B以参数的形式传入类A的方法。
(2)类B以局部变量的形式存在于类A的方法中。
(3)类A调用类B的静态方法。
依赖关系(Dependency) 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
• 在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
dependence.png
#import "Driver.h"
@interface Car : NSObject
- (void)move;
@end
@implementation Car
- (void)move{
}
@end
@interface Driver : NSObject
- (void)drive:(Car *)car;
@end
@implementation Driver
- (void)drive:(Car *)car{
[car move];
}
@end
依赖关系有如下三种情况:
1、A类是B类中的(某中方法的)局部变量;
2、A类是B类方法当中的一个参数;
3、A类向B类发送消息,从而影响B类发生变化;
2 关联(Association)
关联关系使一个类知道另外一个类的属性和方法;某个对象会长期的持有另一个对象的引用,关联的两个对象彼此间没有任何强制性的约束,只要二者同意,可以随时解除关系或是进行关联,它们在生命期问题上没有任何约定。被关联的对象还可以再被别的对象关联,所以关联是可以共享的。 在代码层面上,被关联类以类属性的形式出现在关联类中,也可能是关联类引用了一个类型为被关联类的全局变量。目前定义有五种不同类型的关联。双向(Bi-directional)和单向(uni-directional)的关联是最常见的。
双向(Bi-directional) 顾客可以有若干个制造者属性。但是你不能去指使制造者去干活。制造者也不能强制消费者来消费。
因为两个类都知道对面所有的公共方法。所以这个双向关联不成立。
单项关联 将军知道自己的士兵 而且随时可以命令自己的士兵去做该做的事情
biAssociation.png
3 聚合关系(Aggregation):表示的是整体和部分的关系,整体与部分 可以分开。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
是弱的关联关系。聚合关系是整体和个体的关系。普通关联关系的两个类处于同一层次上,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的“拥有”关系。此时整体与部分之间是可分离的,他们可以具有各自的生命周期, 部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;
UML图中实现使用一条带有虚心菱形的线来表示,如下:
4 组合(Composition)
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分.
5 6 泛化,实现
泛化(Generalization)。表示的类与类之间的继承关系。指的是一个类(称为父类、父接口)具有另外的一个(或一些)类(称为子类、子接口)的共有功能。子类可视为其父类的特例,并可以增加新功能。用带空心三角形箭头的实线表示。(就是继承)
Generalization@2x.png实现(Realization)指的是一个class类实现interface接口(可以是多个)的功能;在Java中此类关系通过关键字implements明确标识。实现表示类对接口的实现。
UML图中实现使用一条带有空心三角箭头的虚线指向接口
网友评论