UML类图关系(实例加UML图完整例子)_uml类图示例-程序员宅基地

技术标签: UML  

UML类图几种关系的总结

 

各种关系的强弱顺序:

泛化实现组合聚合关联依赖

 

 

1.依赖关系

【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖

【代码表现】:局部变量、方法的参数或者对静态方法的调用

依赖关系是上述6种关系中耦合最小的一种关系。使用虚线加箭头表示,如下图所示:

 

代码:

[java] view plain copy

  1. public class Person {  
  2.       
  3.     public void Call(){  
  4.         Phone phone = new Phone();  
  5.     }  
  6.   
  7. }  

 

[java] view plain copy

  1. public class Phone {  
  2.   
  3. }  

 

解释:Person 和 Phone之间是没有关系的,但是由于偶尔的需要,Person需要使用Phone,在Person类中的具体方法中需要实例化Phone,这时Person就依赖于Phone.持有Phone类的是Person类的一个方法,而不是Person类,这点是最重要的。

2.关联(Association

 关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

 

表示类与类之间的连接。它使一个类的可见属性和方法被另一个类使用。关联可以是双向或者单向的。双向的关联箭头是可选的,单向的箭头指向遍历或者查询的方向。在Java中,关联使用实例变量来实现。在关联关系中可以使用附加的基数来说明类之间对应的个数。

 

基数

含义

0..1

零个或者一个实例

0..n或者n

没有限制,任意

1

有且只能一个实例

1..n

至少有一个实例

 

常见的基数

 

例:以权限中的用户组、用户角色为例,一个用户角色可以属于一个或者多个用户组,一个用户组则可以包含多个用户角色。如果用户组采用下面的方法来获得用户角色的权限

 

Java代码  

  1. public class UserGroup{  
  2.   
  3. private UserRole uRole ;  
  4.   
  5.           ......  
  6.   
  7. }  
  8.   
  9. public class UserRole{  
  10.   
  11. }   

 

 

则表现在图中为:(注意箭头的画法)

 

3.聚合关系

【聚合关系】:是整体与部分的关系.人群是整体和部分的关系.

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量

 

聚合关系通过一个空心的菱形加箭头表示,如下图所示:

 

代码:

[java] view plain copy

  1. public class PersonGroup {  
  2.       
  3.     public Person person;  
  4.     //将person作为构造方法的参数传进去  
  5.     public PersonGroup(Person person) {  
  6.         // TODO Auto-generated constructor stub  
  7.         this.person = person;  
  8.     }  
  9.   
  10. }  

 

[java] view plain copy

  1. public class Person {  
  2.       
  3.     public Person() {  
  4.         // TODO Auto-generated constructor stub  
  5.     }  
  6. }  

 

解释:Person类是PersonGroup构造方法的参数,因此可以Person类可以完全脱离PersonGroup类而存在,不会因为PersonGroup实例的消亡而消亡,就像现实生活中,人不会因为脱离人群就挂了...

 

4.组合(Composition)

 【组合关系】:是整体与部分的关系.,没有公司就不存在部门      组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

【代码体现】:成员变量

 例:人和他的就是一个好的例子。

 

代码:

[java] view plain copy

  1. public class Person {  
  2.       
  3.     public Foot foot;  
  4.       
  5.     public Person() {  
  6.         // TODO Auto-generated constructor stub  
  7.         //在构造方法中实例化  
  8.         foot = new Foot();  
  9.     }  
  10. }  

 

[java] view plain copy

  1. public class Foot {  
  2.       
  3.     public Foot() {  
  4.         // TODO Auto-generated constructor stub  
  5.     }  
  6.   
  7. }  

 

解释:

Foot类是在Person类的构造方法中才被具体实例化,一旦Person实例生成,则Foot实例也生成,当Person实例消亡,其Foot实例也消亡,就像现实生活中,生成一个人,并定会伴随着脚的生成,但是如果那个人挂了,它的脚自然而然也就...(怎么听着怪怪-.-)

组合关系通过一个实心的菱形加箭头表示,如下图所示:

 

5.实现关系

是一种类与接口的关系,表示类是接口所有特征和行为的实现.,如下图所示:

带三角箭头的虚线,箭头指向接口

 

 

 

 

6.泛化关系

泛化关系通常包含类与类之间的继承关系关系,如下图所示:

继承:

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/atu1111/article/details/105292642

智能推荐

window下使用SetUnhandledExceptionFilter捕获让程序的崩溃_preventsetunhandledexceptionfilter-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏2次。简单使用SetUnhandledExceptionFilter()函数让程序优雅崩溃虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束。并且发送报告,去掉了系统默认的发送报告的对话框。所以一拍脑袋,想让自己的程序崩溃的体面一点。自己想了大概的思路,觉得可以用一个进程来监控目标程序。的确也可以拿到了目标程序崩溃的信息,知道它什么时候崩..._preventsetunhandledexceptionfilter

[多图]你应该来看看!Windows 8入门操作锦集-程序员宅基地

文章浏览阅读556次。安装好Win 8之后,接下来该做什么呢?你必须习惯使用这个新的操作系统,因为过不了多久,你的老板、朋友或家人就会指望你用它做些正经事了。本指南就是为这个目的服务的。我们将告诉你如何找回桌面,如何更改Windows设置,它有哪些花哨的触屏手势,以及在没有触屏的情况下,又如何用鼠标和键盘来操作。换句话说,我们将告诉你:在Win 8中,你该如何前往你想去的地方,这样你就可以尽快进入工作状态了。基

基于树莓派(ARM)的人脸识别摄像头(QT5.8+OPENCV3.4.5)开发总结_基于qt+树莓派实现人脸识别-程序员宅基地

文章浏览阅读5.1k次,点赞12次,收藏50次。前言这是帮学妹做的一个毕业设计,觉得有趣就接了。功能较为简单,更像是一个带了人脸识别功能的行车记录仪。从18年12月开始做,大部分代码在3月写出来,到现在大概花了20个工作日的样子。期间从零开始学了C++和QT,opencv也经历了从C版本到C++版本,收获不小。这算是我第一个独立的“产品”。目前只完成了ubuntu14.04系统下的功能,还没有移植树莓派做屏幕适配等,也没有进行自己的人脸..._基于qt+树莓派实现人脸识别

MySql安装缺少的.net framework 4.0直接运行安装即可_mysql8安装 提示缺少framewark-程序员宅基地

文章浏览阅读2k次。点击打开链接_mysql8安装 提示缺少framewark

Python编程实例-PyQt5 GUI编程- 工具栏(QToolBar)_python qtoolbar-程序员宅基地

文章浏览阅读461次。QToolBar 小部件是一个可移动的面板,由文本按钮、带有图标的按钮或其他小部件组成。它通常位于菜单栏下方的水平栏中,并且可以浮动的。_python qtoolbar

24美赛数学建模C题详解及资料_24美赛c题-程序员宅基地

文章浏览阅读351次。本次美赛建模个人认为难度排名:A=D>B>C>E=F;上手简单程度:C>E=F>B>A=D。由于经历有限,本次我会主要针对 C 题进行助攻,包括但不限于:具体思路分析和数据挖掘,资料查找,数据可视化和模型建立,以及半成品论文等。关注wx:小何数模,获取本次比赛 C 题助攻资料!_24美赛c题

随便推点

POS小票打印-程序员宅基地

文章浏览阅读243次。// 向LPT口打印一个文本文件procedure TPosFrm.PrintFile(AFileToPrint: string);varPort, FileToPrint: TextFile;ALine: string;beginAssignFile(FileToPrint, AFileToPrint);Reset(FileTopr..._pos小票

基于VCS使用VPI+PLI/DPI在verilog中调用C程序进行cover property驱动的仿真控制_vcs pli-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏20次。本文介绍一种在verilog中,运用PLI机制调用C程序的方法,其中的C程序,可以接受传参,且可以有返回值,仿真器选择的VCS。编写C程序 #include <stdio.h>//#include "vpi_user.h"//使用PLI有两种机制:TF/ACC机制,或者VPI机制void hello_calltf(int user_data, int reason){ int var,result; var = tf_getp(1);//取$hello调用时的第_vcs pli

Android TextView 去除顶部和底部留白(上下的间距有空白问题处理)_android 去除textview空白-程序员宅基地

文章浏览阅读8k次,点赞2次,收藏4次。有时候我们完全按照ui 布局写的代码 看到的效果却和ui的效果有一定的差距有没有很苦恼的效果,最近帮同事改bug 发现了这个问题,很多地方都是他私自调节的这个问题不可有啊,还是要按照ui的尺寸来,这种情况一般出现在字体的sp 比较大的情况先看下的效果图第一个和第三个明显文字的上下内间距很大,2和4 使用的属性为:android:includeFontPadding="false"代码如下 ,这样设置以后可以取消一定的间距,但是不能完全消除内边距,这样设置以后基本都达到ui的要.._android 去除textview空白

【进阶版01】生产级Rancher+K8S部署ThingsBoard PE专业版集群之一:CentOS、Linux内核、Docker、Rancher、Kubernetes、Thingsboad版本规划_rancher生产环境部署哪个版本-程序员宅基地

文章浏览阅读890次,点赞13次,收藏20次。在生产环境中,为了实现ThingsBoard PE专业版集群的高效部署,我们需要对CentOS操作系统、Linux内核、Docker容器技术、Rancher容器管理平台、Kubernetes容器编排系统以及ThingsBoard的版本进行周密的规划。这一规划过程是为了确保各组件间的兼容性、稳定性以及性能优化,从而满足实际生产的需求。_rancher生产环境部署哪个版本

pytorch版yolov5模型用TenserRT生成engine推理模型参考过程_engine/trt模型-程序员宅基地

文章浏览阅读1w次,点赞8次,收藏24次。我们之前测试了OpenVINO在x86系统上的模型推理加速,本次我们在win10系统下基于cuda+GPU显卡下用tensorRT做engine模型转换,因为显卡太低端最后还是没能生成engine模型,但是过程可以借鉴。_engine/trt模型

历史经验之SIP SDP Profile-level-id解析_sip profileid-程序员宅基地

文章浏览阅读959次。SIP SDP Profile-level-id解析基于SIP协议的VOIP通信,该字段通常位于视频协商sdp报文中,如:[html] view plain copy print?在CODE上查看代码片派生到我的代码片video 23456 RTP/AVP 121rtpmap:121 H264/90000fmtp: 121 profile-level-id=42801E; packetization-mode=142801E分三部分0x42 660x80 1000 0000 (二进制)0x_sip profileid