平时用的也不算多,所以,他的连线我老忘。做一次更新吧。
刚翻了一下网上一些人的cnblogs文章,唉,估计那些作者自己都没弄懂面向对象和UML,连对象的表示明显出错的也不知道。这还不止一个人,也不知道是文章转载还是怎么着。。。
安装一下vs2019类图,如下,自己在控制面板里找到vs2019,右键点“更改”:
然后在“单个组件”选项卡中搜索“类设计器”,把它安装就完事了:
好吧,下面本文重点:
1.继承
就仅这一点,网络上一大堆的文章,都没有告诉你核心关键。估计他们自己也不一定真正明白面向对象。
这个继承在UML里是指针对类(不一定是抽象类)的继承,而不是针对接口。。有些人举例子的时候 ,竟然用个继承接口的图来举例子的也有。真是要命。
继承的画法,如下图所示,空心三角指向父类。表示子类“汉服”,是继承自父类“中国传统服饰”。
2.实现
这点跟上面的继承是很容易搞混的。一些人很容易分不清楚“继承”和“实现”的区别。
好吧,继承是指继承一个具体类。这里的实现是指实现一个接口,接口就是interface。这么说的话,相信大家很容易明白继承和实现的区别了。
下面的类图是vs2019的示例,一般在uml草图上画的话,是用空三角+虚线画的。如下图:
3.关联
这个关联和依赖也是很多人搞不清楚的。
关联就是说,某个类里,用到了其它类。
如下示例:某件衣服类,他用到了“中国传统服饰”这个类的实例属性,我们就用一条带箭头的横线表示它,表示“衣服”用到了“中国传统服饰”这个类的实例属性。
如上,是他的代码表示。看了这个代码,你可能会更加容易理解关联。
关联,就是指我需要用你。把你借来用一下。
这里有一个核心就是:我需要用你,但不代表我一定会使用你。这是与下面的依赖最大的区别。
很多人搞不清楚关联和依赖怎么区分,原因就在这里。你把它收好,记下来。
4.依赖
其实上面第3点已经说了依赖了。
依赖的具体表现,就是方法中,我有一个参数,是你。这个方法没有你的参与,就不行。
关联的具体表现呢,通常表现为变量或者属性,就是说,我可能需要你,但不一定是非要你不可。我可以从头到尾都不使用你,把你晾一边。
但依赖不行,只要调用了该方法,那么没有你的参与,就无法运转。非你不可。跟关联相比,依赖有更强的相互关系。
如下图示例,衣服有个展示效果,他有一个依赖参数IStyle,表示说要调用此方法来进行“展示”的话,非要IStyle这个参数传进来不可,没你不行。这就叫依赖。
4.聚合
聚合跟组合也是不少人搞不清楚的,很多文章也描述不清楚区别,模棱两可。
先看下图:
聚合就是指,我的衣柜里有很多的中国传统元素的衣服,有汉服、唐装、旗袍,各式各样的,我都有。这是一个集合。
所有聚合在代码中的表示都是集合,你可以用列表、数组等去表示它。
我的衣柜里有这么多的传统服装,我随便仍掉一件,送别人一件,或者我不开心拿一件来当抹布,我的衣柜里的剩下的衣服都还是好好的。这就叫聚合。本段话不是乱说的,他实际是与“组合”最大的区别。
在UML中他是用空心头和实线和箭头来表示,具体看上图。
5.组合
好,组合,仍然是有一些人搞不清楚组合跟聚合的区别,下图第一张是uml中的表示。
汉服里没有合适的组合案例来给大家说,就用网上找的一张鸟和翅膀来说吧,一只鸟是由2只翅膀组成的。少一只翅膀都不行。多了也不行。这叫组合。
以人来举例:一个人是由脑子、身躯、手、脚组成的。少哪一部分都不行,人不能没脑子,也不能没有身躯、手、脚。
那么,大家现在就明白了跟聚合最大的区别:
组合就是,缺了任何一部分,都不行,我就不是我,我如果没有脑子,我肯定就活不下去。对,这就叫组合。
如果缺了脑子,你这个人还能活下去,那么就叫聚合。聚合就是缺了脑子后,人还能动来动去。。。如果动不了,就是组合。
最后再特别说明一下,组合在代码也是用集合表示,比如列表、数组等。所以,手、脚都可以用组合的。