惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MyScale Blog
MyScale Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
Y
Y Combinator Blog
月光博客
月光博客
IT之家
IT之家
T
Tailwind CSS Blog
Last Week in AI
Last Week in AI
L
LangChain Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
博客园 - Franky
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
V
Visual Studio Blog
小众软件
小众软件
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
N
Netflix TechBlog - Medium

博客园 - 愚

Revit:二开使用Sqlite保存本地数据,并配合EF6等ORM框架 Revity:查找并修改类型参数和实例参数 Revit:ElementFilter过滤器基类 Revit:Element、Reference、ReferenceIntersector、ReferenceWithContext的理解 Revit:使用代码如何发出选点、选对象指令 Reivt:过滤器FilteredElementIterator,采集器FilteredElementCollector Revit:Transaction事务 Revit:弄清楚Application、UIApplication、UIDocument 、Document、DocumentSet之间的关系 Revit:IExternalCommand和IExternalApplication的区别 什么是假程序员 若我有一天 聊聊面试官那些事。。分享我的个人看法,认同的顶一顶。。。 提供一个中国身份证号码判断的类 分享一个自己写的取中国农历相关数据的类。包含:农历年月日,生肖,星座,年龄,天干,地支等方法 从结亲网 的架构谈起,谈什么架构, 我理解的架构。我想很多人理解的架构应该可能比较 狭义 面向对象的全套“企业微信”api接口的代码实现,网上太多“面向过程”微信api接口的代码,这个开源给需要的人用 解决:百度编辑器UEditor,怎么将图片保存到图片服务器,或者上传到ftp服务器的问题(如果你正在用UE,这篇文章值得你看下) (原创)面向对象的系统对接接口编写。第5篇(完结) (原创)面向对象的系统对接接口编写。第4篇
复习一下UML
· 2020-07-24 · via 博客园 - 愚

平时用的也不算多,所以,他的连线我老忘。做一次更新吧。

刚翻了一下网上一些人的cnblogs文章,唉,估计那些作者自己都没弄懂面向对象和UML,连对象的表示明显出错的也不知道。这还不止一个人,也不知道是文章转载还是怎么着。。。

安装一下vs2019类图,如下,自己在控制面板里找到vs2019,右键点“更改”:

 然后在“单个组件”选项卡中搜索“类设计器”,把它安装就完事了:

好吧,下面本文重点:

1.继承

就仅这一点,网络上一大堆的文章,都没有告诉你核心关键。估计他们自己也不一定真正明白面向对象。

这个继承在UML里是指针对类(不一定是抽象类)的继承,而不是针对接口。。有些人举例子的时候 ,竟然用个继承接口的图来举例子的也有。真是要命。

继承的画法,如下图所示,空心三角指向父类。表示子类“汉服”,是继承自父类“中国传统服饰”。

2.实现

这点跟上面的继承是很容易搞混的。一些人很容易分不清楚“继承”和“实现”的区别。

好吧,继承是指继承一个具体类。这里的实现是指实现一个接口,接口就是interface。这么说的话,相信大家很容易明白继承和实现的区别了。

下面的类图是vs2019的示例,一般在uml草图上画的话,是用空三角+虚线画的。如下图:

 3.关联

这个关联和依赖也是很多人搞不清楚的。

关联就是说,某个类里,用到了其它类。

如下示例:某件衣服类,他用到了“中国传统服饰”这个类的实例属性,我们就用一条带箭头的横线表示它,表示“衣服”用到了“中国传统服饰”这个类的实例属性。

如上,是他的代码表示。看了这个代码,你可能会更加容易理解关联。

关联,就是指我需要用你。把你借来用一下。

这里有一个核心就是:我需要用你,但不代表我一定会使用你。这是与下面的依赖最大的区别。

很多人搞不清楚关联和依赖怎么区分,原因就在这里。你把它收好,记下来。

4.依赖

其实上面第3点已经说了依赖了。

依赖的具体表现,就是方法中,我有一个参数,是你。这个方法没有你的参与,就不行。

关联的具体表现呢,通常表现为变量或者属性,就是说,我可能需要你,但不一定是非要你不可。我可以从头到尾都不使用你,把你晾一边。

但依赖不行,只要调用了该方法,那么没有你的参与,就无法运转。非你不可。跟关联相比,依赖有更强的相互关系。

如下图示例,衣服有个展示效果,他有一个依赖参数IStyle,表示说要调用此方法来进行“展示”的话,非要IStyle这个参数传进来不可,没你不行。这就叫依赖。

 4.聚合

聚合跟组合也是不少人搞不清楚的,很多文章也描述不清楚区别,模棱两可。

先看下图:

 

聚合就是指,我的衣柜里有很多的中国传统元素的衣服,有汉服、唐装、旗袍,各式各样的,我都有。这是一个集合。

所有聚合在代码中的表示都是集合,你可以用列表、数组等去表示它。

我的衣柜里有这么多的传统服装,我随便仍掉一件,送别人一件,或者我不开心拿一件来当抹布,我的衣柜里的剩下的衣服都还是好好的。这就叫聚合。本段话不是乱说的,他实际是与“组合”最大的区别。

在UML中他是用空心头和实线和箭头来表示,具体看上图。

5.组合

好,组合,仍然是有一些人搞不清楚组合跟聚合的区别,下图第一张是uml中的表示。

 汉服里没有合适的组合案例来给大家说,就用网上找的一张鸟和翅膀来说吧,一只鸟是由2只翅膀组成的。少一只翅膀都不行。多了也不行。这叫组合。

以人来举例:一个人是由脑子、身躯、手、脚组成的。少哪一部分都不行,人不能没脑子,也不能没有身躯、手、脚。

那么,大家现在就明白了跟聚合最大的区别:

组合就是,缺了任何一部分,都不行,我就不是我,我如果没有脑子,我肯定就活不下去。对,这就叫组合。

如果缺了脑子,你这个人还能活下去,那么就叫聚合。聚合就是缺了脑子后,人还能动来动去。。。如果动不了,就是组合。

最后再特别说明一下,组合在代码也是用集合表示,比如列表、数组等。所以,手、脚都可以用组合的。