C#集合继承树

------------恢复内容开始------------

UML类图中的五种关系的耦合强弱比较:依赖<关联<聚合<组合<继承

一、依赖关系:

(一)说明

虚线+箭头

可描述为:Uses a

依赖是类的五种关系中耦合最小的一种关系。

因为在生成代码的时候,这两个关系类都不会增加属性。

(二)依赖关系图与代码的对应关系

C#集合继承树

PS:依赖关系:Animal依赖于Water(动物依赖于水))

//无关类
Public class Animal() { Public Animal(){} } Public class Water() { public Water(){} }

二、关联关系

(一)说明

实线+箭头

可描述为:Has a

关联关系用实线,表示类之间的耦合度比依赖强

在生成代码的时候,关联关系的类会增加属性。

(二)关联关系与代码的对应关系

      C#集合继承树

           PS:Water类与Climate类关联(水与气候关联)。 

Public classWater {  
     public Climate m_Climate;  
     public Water(){}  
}  
   
Public class Climate {  
     public Climate() {}  
}  

三、泛化

(一)说明

实线+箭头

可描述为:Is a

泛化也称继承,子类将继承父类的所有属性和方法,并且可以根据需要对父类进行拓展。

(二)泛化关系与代码的对应关系

C#集合继承树

PSBird类继承Animal类,鸟是一种动物)

 

(三)思考:

1、子类继承父类,真的是继承了父类的所有属性和方法吗?

      子类确实是继承了父类的所有属性和方法,只是对于父类的私有类型成员没有访问权限!访问就会报错!

2、泛化和继承是一回事儿吗?

      子类继承父类,父类泛化子类。 这两个词是从不同的角度来说的! 

3、为什么要多用组合少用继承?

       继承和组合各 有优缺点。

       类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变父类的实现。但是类继承也有一些不足之处。首先,因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现。更糟的是,父类通常至少定义了子类的部分行为,父类的任何改变都可能影响子类的行为。如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。

        对象组合是通过获得对其他对象的引用而在运行时刻动态定义的。由于组合要求对象具有良好定义的接口,而且,对象只能通过接口访问,所以我们并不破坏封装性;只要类型一致,运行时刻还可以用一个对象来替代另一个对象;更进一步,因为对象的实现是基于接口写的,所以实现上存在较少的依赖关系。

 

四、实现关系

       虚线+箭头

C#集合继承树

     (PSWideGoose类实现IFly接口。大雁实现飞翔的接口)

C#集合继承树

 

 

------------恢复内容结束------------

C#集合继承树

上一篇:Windows Command Line - Hiding a file or virus


下一篇:winform程序backgroundworker中修改控件内容需要判断控件的InvokeRequired