当前位置: 首页 > news >正文

java类与类之间的类图_UML类图(Class Diagram)中类与类之间的关系及表示方式(转)

源地址:https://blog.csdn.net/a19881029/article/details/8957441

===================================================

类之间大体分为5种关系:

32332964491189abbb66eb7025705143.png

1,依赖关系(Dependency)

单向,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类,是一种“use a”关系

如果A依赖于B,则B表现为A的局部变量,方法参数,静态方法调用等

85a94f1770102fe3df2228bd76be8a00.png

public class Person {

public void doSomething(){

Card card = new Card();//局部变量

....

}

}

public class Person {

public void doSomething(Card card){//方法参数

....

}

}

public class Person {

public void doSomething(){

int id = Card.getId();//静态方法调用

...

}

}

2,关联关系(Association)

单向或双向(通常我们需要避免使用双向关联关系),是一种"has a"关系,如果A单向关联B,则可以说A has a B,通常表现为全局变量

98a288ae6d864e8b9975ed906aaad01a.png

public class Person {

public Phone phone;

public void setPhone(Phone phone){

this.phone = phone;

}

public Phone getPhone(){

return phone;

}

}

3,聚合关系(Aggregation)

单向,关联关系的一种,与关联关系之间的区别是语义上的,关联的两个对象通常是平等的,聚合则一般不平等,有一种整体和局部的感觉,实现上区别不大

8240eb00c6657a033b1e46414fa1f2cb.png

Class由Student组成,其生命周期不同,整体不存在了,部分依然存在,当前Team解散了,人还在,还可以加入别的组

public class Team {

public Person person;

public Team(Person person){

this.person = person;

}

}

4,组合关系(Composition)

单向,是一种强依赖的特殊聚合关系

8ef5a5995c3128c2241b7d52a473502f.png

Head,Body,Arm和Leg组合成People,其生命周期相同,如果整体不存在了,部分也将消亡

public class Person {

public Head head;

public Body body;

public Arm arm;

public Leg leg;

public Person(){

head = new Head();

body = new Body();

arm = new Arm();

leg = new Leg();

}

}

5,继承关系(Inheritance)

d938ac9660a1371ff79f597cbc6ac1b7.png

类实现接口,类继承抽象类,类继承父类都属于这种关系

可以分得更细:

实现(Realization):类实现接口属于这种关系

泛化(Generalization):即"is a"关系,类继承抽象类,类继承父类都属于这种关系

参考网址: https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html

相关文章:

  • java按时间范围过滤_Java列表按日期过滤
  • java员工表代码_基于java+ssh员工考勤管理系统源代码
  • java返回指定json格式_java返回json格式数据
  • java字符型数据的长度_Java字符串创建和长度
  • java正则表达式笔记_java正则表达式笔记
  • java打印两个字符串_Java 按字母顺序中打印两个字符串的公共字符
  • mysql 不显示警告信息_关闭mysql不安全语句警告
  • java 加载luasocket库_使用Lua的扩展库LuaSocket用例
  • mysql5.7.13 zip win7_mysql5.7.13.zip安装教程(windows)
  • 南京三只松鼠java_又出新模式?三只松鼠南京首家品牌集合店开业
  • java抛出异常齁_解決 Elasticsearch 使用 Java High Level REST Client 時出現 NoClassDefFoundError 錯誤...
  • java高速公路系统_基于jsp的高速公路收费系统-JavaEE实现高速公路收费系统 - java项目源码...
  • initialcontext java_缺少InitialContext定义时要使用的Java运行时异常
  • php析构函数有什么用,php中析构函数是什么
  • php远程window系统,Linux_Linux和Window系统远程桌面相互访问,一、Windows 访问Linux(VNC,X) - phpStudy...
  • 网络传输文件的问题
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • docker python 配置
  • HTTP请求重发
  • IDEA 插件开发入门教程
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java 最常见的 200+ 面试题:面试必备
  • Linux下的乱码问题
  • Shadow DOM 内部构造及如何构建独立组件
  • text-decoration与color属性
  • 大主子表关联的性能优化方法
  • 给新手的新浪微博 SDK 集成教程【一】
  • 力扣(LeetCode)56
  • 码农张的Bug人生 - 初来乍到
  • 微信小程序:实现悬浮返回和分享按钮
  • 微信小程序设置上一页数据
  • #define 用法
  • #pragam once 和 #ifndef 预编译头
  • (2)nginx 安装、启停
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (Note)C++中的继承方式
  • (ZT)一个美国文科博士的YardLife
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)基于IDEA的JAVA基础1
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 简单实现MD5
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET下ASPX编程的几个小问题
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @Responsebody与@RequestBody
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [ACTF2020 新生赛]Include
  • [AIGC codze] Kafka 的 rebalance 机制
  • [Codeforces] combinatorics (R1600) Part.2