首页 > Windows开发 > 详细

C#集合继承树

时间:2020-12-26 00:13:34      阅读:35      评论:0      收藏:0      [点我收藏+]

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

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

一、依赖关系:

(一)说明

虚线+箭头

可描述为:Uses a

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

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

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

技术分享图片

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

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

二、关联关系

(一)说明

实线+箭头

可描述为:Has a

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

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

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

      技术分享图片

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

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

三、泛化

(一)说明

实线+箭头

可描述为:Is a

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

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

技术分享图片

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

 

(三)思考:

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

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

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

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

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

       继承和组合各 有优缺点。

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

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

 

四、实现关系

       虚线+箭头

技术分享图片

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

技术分享图片

 

 

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

C#集合继承树

原文:https://www.cnblogs.com/gaobinyan/p/14191161.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!