0
点赞
收藏
分享

微信扫一扫

论UML图中的六大关系


最近学习了设计模式,每个模式都需要先画类图,通过这次学习,又对六大关系有了新的理解。

一:六大关系的强弱

        继承>实现>组合>聚合>关联>依赖

二:六大关系的图形表示

        继承:

论UML图中的六大关系_封装

        实现:

论UML图中的六大关系_构造函数_02

        组合:

论UML图中的六大关系_封装_03

        聚合:

论UML图中的六大关系_封装_04

        关联:

论UML图中的六大关系_封装_05

        依赖:

论UML图中的六大关系_封装_06

 三:六大关系在代码里如何体现

继承和实现:这两种关系在C#种体现特别直观,如果A类继承了B类,就表为Class A:B,如果B类是个接口,A实现了B,仍表示为A:B,在C#中,一个类只能继承一个父类,但是可以实现多个接口

        组合和聚合:组合和聚合说的都是部分和整体的关系,二者的区别在于,组合时,部分无法脱离整体而存在,聚合时部分可以脱离整体而存在。

                聚合在代码中的体现:

class A
{
B b;
public A(B b)
{
this.b = b;
}

}
class B
{
}

        A类聚合了B类,B类在类A中作为成员变量,B类作为一个参数,传到A类的构造函数中。B类可以脱离A类单独而存在。B类没有封装在A类里,客户是可以同时知道A类和B类的。

        组合在代码中的体现:

class A
{
B b;
public A()
{
b = new B();
}

}
class B
{
}

        A类组合了B类,B类的对象在A类的构造函数中产生,当需要产生一个A类的对象时候,需要先调用B类的构造函数。客户端是看不到B类的,B类被封装在A类里面。A类和B类同生共死。

  依赖和关联:依赖和关联表示的是一种使用的关系,A类使用B类。

                依赖:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。

        

//动物依赖水类,水类是动物类中的某个方法
public class Animal
{
public void Grownup()
{
Water water = null;
}
}
public class Water
{
public Water()
{ }
}
//水类作为动物类中某个方法的参数或返回值
public class Animal
{
public Water Grownup(Water water)
{
return null;
}
}
public class Water
{
public Water()
{ }
}

        关联:关联和依赖的最主要区别就是,类A当中使用了类B,让类B作为类A的全局变量。作用的范围更大,类A和类B就是关联关系。

//水类作为动物类的全局变量
public class Animal
{
Water water;

}
public class Water
{
public Water()
{ }
}

以上就是我对六大关系的总结。

举报

相关推荐

0 条评论