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

UML类图--基于大话设计模式

一般矩形框代表类,类图分为三层,第一层显示类的名称,如果是抽象类,则就用斜体显示,如果是接口,则使用<<interface>>;第二层是类的特性,通常就是字段和属性;第三层是类的操作,通常是方法或行为 。
注 意 前 面 的 符 号 , ‘+’ 表 示 public , ‘-’ 表 示 private , ‘#’ 表 示
protected。
有时候,如果是接口,uml类图中的矩形框在名字前面有I标识或者<<interface>>标识,
而普通的class一般是C标识,抽象类是A标识。这些属于看到明白什么意思就行。

具体来说:
<<interface>>是UML中表示接口的标准图形符号。

名称使用斜体是UML中表示抽象类的标准图形符号。

I、A、C作为前缀是编程实践中的命名约定,而不是UML本身的图形符号规范。

普通类

在这里插入图片描述
在这里插入图片描述

抽象类

在这里插入图片描述

接口

在这里插入图片描述

关系

继承关系

继承关系用空心三角形+实线表示
在这里插入图片描述

实现接口

实现接口用空心三角形+虚线来表示
在这里插入图片描述

关联关系

用实线箭头来表示
在这里插入图片描述

聚合关系

聚合关系用空心的菱形+实线箭头来表示
聚合表示一种弱的’拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。具体来说,就是A 类拥有 B 类对象,但 B 类对象可以脱离 A 类独立存在;同时他们的生命周期是分离的。注意:这个生命周期分离区别组合。
例如:大雁与雁群这两个类,大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以有多只大雁。所以它们之间就满足聚合(Aggregation)关系

在这里插入图片描述

// 大雁类
public class Goose {private String name;public Goose(String name) {this.name = name;}public void fly() {System.out.println(name + " 正在飞行...");}public String getName() {return name;}
}
import java.util.List;public class GooseGroup {private List<Goose> geese;public GooseGroup(List<Goose> geese) {this.geese = geese;}public void groupFly() {System.out.println("雁群开始集体飞行:");for (Goose goose : geese) {goose.fly();}}
}
import java.util.Arrays;public class Main {public static void main(String[] args) {Goose g1 = new Goose("大雁A");Goose g2 = new Goose("大雁B");// Goose 对象可以独立创建GooseGroup group = new GooseGroup(Arrays.asList(g1, g2));// 雁群中可以调用大雁的方法group.groupFly();// 即使雁群销毁,大雁也可以继续存在g1.fly();  // 单独飞行}
}

这里的特征是:
Goose 可独立创建/存在
GooseGroup 包含 Goose 列表
Goose 生命周期不依赖 GooseGroup

组合/合成 Composition

合成(Composition,也有翻译成’组合’的)是一种强的’拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。他们的生命周期是相同的。通常在构造器中创建子对象,并负责其生命周期。这个区别于聚合的一般是引用对象,不负责销毁和创建。

合成关系用实心的菱形+实线箭头来表示。另外,合成关系的连线两端还有一个数字’1’和数字’2’,这被称为基数。表明这一端的类可以有几个实例

以鸟类来举例,就是一个鸟有两个翅膀。当然如果一个类有n个实例,可以用n表示。

在这里插入图片描述

依赖关系

注意UML图中的依赖关系区别于面向对象中的依赖。UML中的依赖关系是一种建模层面的、宽泛的“使用”关系,而OOP中的依赖更关注在实现代码中的耦合方式。
在这里插入图片描述

http://www.dtcms.com/a/302572.html

相关文章:

  • 【设计模式】状态模式 (状态对象(Objects for States))
  • NBIOT模块 BC28通过MQTT协议连接到电信云
  • Google Chrome V8< 13.7.120 沙箱绕过漏洞
  • 设计模式(二十三)行为型:模板方法模式详解
  • 从 “看天吃饭” 到 “精准可控”:边缘计算网关如何引爆智慧农业种植变革?
  • 新手向:破解VMware迁移难题
  • 解放io_uring编程:liburing实战指南与经典cat示例解析
  • Unity_UI_NGUI_组合控件2
  • Rust实战:AI与机器学习自动炒饭机器学习
  • puppeteer 系列模块的系统性、详细讲解
  • Ubuntu系统完整配置教程
  • InfluxDB 与 HTTP 协议交互进阶(一)
  • 设计模式实战:自定义SpringIOC(理论分析)
  • 无界设计新生态:Penpot开源平台与cpolar的云端协同创新实践
  • 第二十二节 MATLAB转置向量、MATLAB追加向量
  • C++---初始化列表(initializer_list)
  • 基于黑马教程——微服务架构解析(二):雪崩防护+分布式事务
  • 使用 nvm (Node Version Manager) 来管理多个 Node.js 版本,并自由切换
  • OCR 赋能合同抽取:不良资产管理公司的效率加速器
  • 常见的接⼝测试⾯试题
  • 图像识别边缘算法
  • 从矩阵表示到卷积神经网络(CNN)与循环神经网络(RNN)
  • MCP error -32000: Connection closed
  • 基于开源AI智能名片链动2+1模式与S2B2C商城小程序的微商品牌规范化运营研究
  • mxn矩阵学习笔记
  • 使用Python制造扫雷游戏
  • Marc 非线性仿真复杂,企业如何保障许可证公平与高效使用?
  • (AC)储值购物
  • Android中主线程、ActivityThread、ApplicationThread的区别
  • 【氮化镓】GaN同质外延p-i-n二极管中星形与三角形扩展表面缺陷的电子特性