UML类图与类的关系详解 - 阿里云开发者社区

文章推薦指數: 80 %
投票人數:10人

各种关系的强弱顺序. 泛化== 实现> 组合> 聚合> 关联> 依赖. 下面这张UML图,比较形象地展示了各种类 ... 开发者社区> shadowcat> 正文 阿里云 为了无法计算的价值 打开APP 阿里云APP内打开 UML类图与类的关系详解 2017-02-23 3240 简介: 来源:http://www.uml.org.cn/oobject/201104212.asp 来源:http://blog.csdn.net/longronglin/article/details/1454329 来源:http://www.cnblogs.com/mimime/p/5827895.html 统一建模语言(UML:UnifiedModelingLang +关注继续查看 来源:http://www.uml.org.cn/oobject/201104212.asp 来源:http://blog.csdn.net/longronglin/article/details/1454329 来源:http://www.cnblogs.com/mimime/p/5827895.html 统一建模语言(UML:UnifiedModelingLanguage) 1.能够从不同的角度来看待系统的结构,行为,功能(需求)。

2.能够在不同抽象程度上考虑系统,而仅仅是源代码是不够的。

源代码是非常细化的内部结构,不能用来建造复杂的系统。

UML图及其目的 当你…… 使用UML图…… 在分析阶段 用例图,它们包含和系统交互的实体以及需要实现的功能点。

活动图,它们将焦点集中于问题域(人们以及其它主体工作的实际空间,程序的主题域)的工作流而不是程序的逻辑流。

观察对象交互 交互图,它们展示特定的对象彼如何此交互。

由于它们处理特定案例而不是一般情况,因此它们在检验需求和检验设计时都能有所帮助。

最流行的交互图是顺序图。

在设计阶段 类图,它们详述类与类之间的关系。

观察对象的行为,这些行为因对象所处的状态而不同 状态图,它们详述一个对象可能处于的不同状态以及这些状态之间的过渡。

在布署阶段 布署图,它们展示了不同的模块将被如何部署。

我不会在此讨论它们。

在画类图的时候,理清类和类之间的关系是重点。

类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。

其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。

下面我们结合实例理解这些关系。

基本概念 类图(ClassDiagram):类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。

类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。

类图的3个基本组件:类名、属性、方法。

  1、泛化(继承) 泛化(generalization):表示is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节。

直接使用语言中的继承表达。

在类图中使用带三角箭头的实线表示,箭头从子类指向父类。

【箭头指向】:带三角箭头的实线,表示继承一个基类,CutoverNotice类继承Notice类、BizEnsureNotice类也继承Notice类。

【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。

【泛化例子】:老虎是动物的一种,既有老虎的特性也有动物的共性。

2、实现 实现(Realization):在类图中就是接口和实现的关系。

这个没什么好讲的。

在类图中使用带三角箭头的虚线表示,箭头从实现类指向接口。

【箭头指向】:带三角箭头的虚线,箭头指向接口,表示 NoticeServiceImpl类 实现 NoticeService类中的接口定义。

【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现。

3、依赖 依赖(Dependency):对象之间最弱的一种关联方式,是临时性的关联。

代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。

一个类调用被依赖类中的某些方法而得以完成这个类的一些职责。

在类图使用带箭头的虚线表示,箭头从使用类指向被依赖的类。

【箭头指向】:带箭头的虚线,指向被使用者, 【依赖关系】:是一种使用关系,表示类之间的调用关系,即一个类的实现需要另一个类的协助,所以尽量不使用互相依赖。

【代码体现】:类NoticeServiceImpl访问类Notice或者类BaseDao的属性或者方法,或者类NoticeServiceImpl负责实例化类Notice或者实例化类BaseDao,可以说类NoticeServiceImpl依赖类Notice 和 BaseDao(局部变量、方法的参数或者对静态方法的调用)。

【依赖PK关联】:和关联关系不同,无须在类NoticeServiceImpl中定义类Notice 和类BaseDao 类型的属性。

4、关联 关联(Association):对象之间一种引用关系,比如客户类与订单类之间的关系。

这种关系通常使用类的属性表达。

关联又分为一般关联、聚合关联与组合关联。

后两种在后面分析。

在类图使用带箭头的实线表示,箭头从使用类指向被关联的类。

可以是单向和双向。

【箭头指向】:带普通箭头的实线,指向被拥有者。

【关联关系】:是一种拥有的关系,它使一个类知道另一个类的特征和行为,关联分为单项关联和双向关联两种;双向关联可以用俩头带箭头的实现表示,也可以不要箭头。

【3.1】、单向关联:仅能从一个类访问到另一个类(前者的属性中有后者),B类单项关联A类(B中有属性a为类A的对象);如:学生与课程的单向关联。

【3.2】、双向关联:两个类之间能相互访问(两个类的属性中都有对方),B类关联A类(B中有属性a为类A的对象),A类关联B类(A中有属性bs为Set,Set包含B的对象),A和B是1对n(n>0)的关联;如老师与学生的双向关联。

【3.3】、自身关联:...... 【代码体现】:成员变量 5、聚合 聚合(Aggregation):表示has-a的关系,是一种不稳定的包含关系。

较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。

如公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司。

在类图使用空心的菱形表示,菱形从局部指向整体。

【箭头方向】:带空心菱形的实线,菱形指向整体;Employee类 聚合到Company对象里面去。

【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。

如 Company 和 Employee是整体与部分的关系,Employee离开Company 仍然可以存在,并不随Company 的创建而创建,销毁而销毁。

【代码体现】:成员变量 【聚合PK关联】:聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

6、组合 组合(Composition):表示contains-a的关系,是一种强烈的包含关系。

组合类负责被组合类的生命周期。

是一种更强的聚合关系。

部分不能脱离整体存在。

如公司和部门的关系,没有了公司,部门也不能存在了;调查问卷中问题和选项的关系;订单和订单选项的关系。

在类图使用实心的菱形表示,菱形从局部指向整体。

【箭头方向】:带实心菱形的实线,菱形指向整体;Company对象完全由Department对象组成。

【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。

如Company和Department是整体与部分的关系,没有Company就没有Department,Department随Company的创建而创建,销毁而销毁。

【代码体现】:成员变量 【组合PK关联】:组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

7、多重性(Multiplicity) 通常在关联、聚合、组合中使用。

就是代表有多少个关联对象存在。

使用数字..星号(数字)表示。

如下图,一个割接通知可以关联0个到N个故障单。

重数性关联: 重数性关联关系又称为多重性关联关系(Multiplicity),表示一个类的对象与另一个类的对象连接的个数。

在UML中多重性关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。

表示方式 多重性说明 1..1 表示另一个类的一个对象只与一个该类对象有关系 0..* 表示另一个类的一个对象与零个或多个该类对象有关系 1..* 表示另一个类的一个对象与一个或多个该类对象有关系 0..1 表示另一个类的一个对象没有或只与一个该类对象有关系 m..n 表示另一个类的一个对象与最少m、最多n个该类对象有关系(m<=n) 聚合和组合的区别 这两个比较难理解,重点说一下。

聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。

组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

实例分析 联通客户响应OSS。

系统有故障单、业务开通、资源核查、割接、业务重保、网络品质性能等功能模块。

现在我们抽出部分需求做为例子讲解。

大家可以参照着类图,好好理解。

1.通知分为一般通知、割接通知、重保通知。

这个是继承关系。

2.NoticeService和实现类NoticeServiceImpl是实现关系。

3.NoticeServiceImpl通过save方法的参数引用Notice,是依赖关系。

同时调用了BaseDao完成功能,也是依赖关系。

4.割接通知和故障单之间通过中间类(通知电路)关联,是一般关联。

5.重保通知和预案库间是聚合关系。

因为预案库可以事先录入,和重保通知没有必然联系,可以独立存在。

在系统中是手工从列表中选择。

删除重保通知,不影响预案。

6.割接通知和需求单之间是聚合关系。

同理,需求单可以独立于割接通知存在。

也就是说删除割接通知,不影响需求单。

7.通知和回复是组合关系。

因为回复不能独立于通知存在。

也就是说删除通知,该条通知对应的回复也要级联删除。

经过以上的分析,相信大家对类的关系已经有比较好的理解了。

大家有什么其它想法或好的见解,欢迎拍砖。

PS:还是那句话:以上类图用EnterpriseArchitect7.5所画,在此推荐一下EA,非常不错。

可以替代Visio和Rose了。

Visio功能不够强大,Rose太重。

唯有EA比较合适。

各种关系的强弱顺序 泛化==实现>组合>聚合>关联> 依赖 下面这张UML图,比较形象地展示了各种类图关系 : 版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。

具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。

如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

uml 测试技术 对象存储 uml关系 uml用例图关系 uml关系总结 uml常见关系 uml版本 开发者社区> 开发与运维 > 文章 作者高分内容 更多 MarkDown语法手册 3013 在windows下使用Xming+Putty显示Linux下软件图形界面 4470 ProxyChains 4287 计算机端口详解 14718 TCP连接状态 2552 相关文章 欣明果果,你好哇 UML类图关系符号 UML(UnifiedModelingLanguage)统一建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

balabala。











一大堆平常我们在学习设计模式或者学习某个系统的架构时,大多都会接触到UML图,我个人最常看到的就是类图,序列图。

由经常接触,很多UML的符号不是在了解,导致很多图看不太明白。

所以就是从网上搜集一些资料作下记录以便及时查看。

本文主要是讲述类图中类与类之间的关系的描述符号 93 0 技术小能手 五分钟看懂UML类图与类的关系详解 在画类图的时候,理清类和类之间的关系是重点。

类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。

其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。

2995 0 xumaojun UML类图关系大全 1265 0 maojunxu UML类图关系大全 1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。

在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。

1038 0 nothingfinal UML类图关系大全 1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。

在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。

967 0 高广超 UML-类间关系 image.png 继承 指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时... 839 0 markfork UML关系图 继承 指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性; 继承. 589 0 developerguy UML类图几种关系的总结(转)   在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)    1. 泛化(Generalization)   【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。

653 0 ali-frank UML类图关系汇总   UML类图关系汇总   关系 后面的例子将针对某个具体目的来独立地展示各种关系。

虽然语法无误,但这些例子可进一步精炼,在它们的有效范围内包括更多的语义。

依赖(Dependency) 实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例(图D)。

更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。

其中包括一个局部变量 1389 0 李明成 UML图中类之间的关系 类图中的关系大致一下几种 l 泛化 l 关联 l 依赖 l 组合 l 聚合  泛化 泛化是子集和超集的关系,常使用继承和实现来表示; 继承:子类到超类的实线和空心三角箭头表示 实现:子类到超类的虚线和空心三角箭头表示  依赖 依赖常常表示一方(客户)知道另一方(提供者)并且另一方(提供者)有所改变时会对一方(客户)产生影响。

677 0 +关注 shadowcat 酱油程序猿 CSDN博客:http://blog.csdn.net/freeking101 155 文章 0 问答 作者高分内容 更多 MarkDown语法手册 3013 在windows下使用Xming+Putty显示Linux下软件图形界面 4470 ProxyChains 4287 计算机端口详解 14718 TCP连接状态 2552 文章排行榜 最热 最新 1 业务中台之上的低代码应用开发平台 299158 2 挑战8天完成职场入门-进阶,速来抢占求职训练营名额 104536 3 阿里云云原生加速器企业硬之城携手阿里云Serverless应用引擎(SAE)打造低代码平台 88043 4 十分钟生成影视级室内设计效果,红星美凯龙设计云如何升级传统家居行业 127297 5 【AI征文】初识DeepRec 74323 6 一张图进阶RocketMQ-消费者这个大冤种! 27822 7 用ModelScope带你制作小动画 28188 8 ModelScope--人像卡通化、人像美肤 27412 9 揭秘!真假美猴王与如来的那起运维事故 51027 10 镜像站体验官新一期任务发布,完善镜像站配置信息拿天猫精灵音箱 52723 11 云上解锁Web3.0阿里云XR平台助力彼真科技呈现沉浸式演唱会 84876 12 “穿越”到虚拟世界笑风生,网易瑶台沉浸式活动平台创新云端活动体验 96432 13 [使用ModelScope]只要5分钟,快速实现中文情感分类模型 26350 14 阿里云联合平行云推出云XR平台,支持沉浸式体验应用快速落地|电子书免费下载 51521 15 用简历实体模型分析人力资源情况 25528 16 世界那么大,我想去看看——探索ModelScope之零样本分类 25304 17 ModelScope模型库体验之中文StructBERT系列预训练语言模型 22421 18 【AI征文】DeepRec初识 18236 19 【乘风伯乐奖】寻找百位乘风者伯乐,邀请新博主入驻即可获奖 20159 20 【AI征文】对DeepRec认识以及了解 102981 1 组装式应用在工作中的实践 64 2 【云原生|Docker篇】程序猿,千万别说你不知道Docker 581 3 记一次使用SpringCloudGateway的OOM错误 207 4 浅谈DDD中的聚合 175 5 纯前端实现「羊了个羊」小游戏🐏 333 6 单元测试如何确立规范 226 7 组装式交付-云巧知多少 87 8 【重磅】ServerlessDevs进入CNCF沙箱,成首个入选的Serverless工具项目! 55 9 一文让你彻底了解Spring框架中用到了哪些设计模式 91 10 FFmpeg处理音视频文件的常用方法 425 11 阐述“羊了个羊”游戏APP小程序系统开发逻辑方案(源码部署哦) 421 12 哈希算法(hash)加密解密 7319 13 阿里云容器服务ACK产品技术动态(202208) 185 14 阿里云LandingZone携手合作伙伴共建「上好云阵营」 54 15 Spring事务学习笔记(一)初遇篇 51 16 JavaScript代码优化之道 362 17 职场逆袭!阿里云推荐ACP认证特训营 289 18 理论与实践:如何写好一个方法 327 19 SpringBoot2整合ClickHouse数据库 53 20 组装式应用对工作提升的效率 208 推荐文章 参与ACR评测得机械键盘及定制礼品 寻找百位乘风者伯乐,邀约新博主入驻可获乘风者定制周边及重力星球蓝牙音箱! 参与Grafana评测得多重好礼 乘风者计划邀您入驻社区,精彩权益即刻享 相关电子书 更多 低代码开发师(初级)实战教程 立即下载 阿里巴巴DevOps最佳实践手册 立即下载 冬季实战营第三期:MySQL数据库进阶实战 立即下载



請為這篇文章評分?