plantuml, puml

Mermaid:VS Code 内置替代方案 Mermaid 是最佳替代方案,VS Code 的 Markdown 预览内置支持,无需扩展或服务器。直接在 Markdown 中写 ```mermaid 代码块,按 Ctrl+Shift+V 打开预览即可看到渲染结果。 功能 PlantUML Mermaid VS Code 原生支持 需要 Java + 扩展 内置 GitHub 渲染 不支持 支持 语法 更强大 更简洁 离线使用 需要 graphviz 完全离线 Mermaid 图类型概览 Mermaid 的图类型分为两大维度:结构型和行为型。 维度 关键词 对应 UML 图 描述 结构型 classDiagram 类图 展示类、属性、方法及继承/组合/关联关系,回答"系统中有什么" 结构型 erDiagram 实体关系图 展示数据库表/实体及字段关系 行为型 flowchart / graph 活动图 / 流程图 展示控制流、判断分支、步骤顺序,回答"系统做了什么" 行为型 sequenceDiagram 序列图 展示对象之间按时间顺序的消息交互 行为型 stateDiagram-v2 状态图 展示对象在不同状态间的转换 其他 mindmap 思维导图 非 UML,用于发散性思维整理 其他 gantt 甘特图 非 UML,用于项目时间线 classDiagram vs flowchart 的核心区别 classDiagram(类图)—— 结构维度 ...

Created 28286-04-28 · Updated 17176-06-17 · 4 min · 823 words · -

UML 类的关系: 关联,聚合,组合的区别

UML 中关联,聚合,组合的区别 关联 Association 聚合 Aggregation Composition 类间关系 在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在 UML 类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承 (泛化) 、关联、聚合和组合。 关联 (Association) 关联指的是模型元素之间的一种语义联系,是类之间的一种很弱的联系。关联可以有方向,可以是单向关联,也可以是双向关联。可以给关联加上关联名来描述关联的作用。关联两端的类也可以以某种角色参与关联,角色可以具有多重性,表示可以有多少个对象参与关联。可以通过关联类进一步描述关联的属性、操作以及其他信息。关联类通过一条虚线与关联连接。对于关联可以加上一些约束,以加强关联的含义。 class A: pass class B: def func_0(a:A) # 一个类作为另一个类方法的参数 聚合 (aggregation) 指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中"包含"、“组成”、“分为…部分"等词常意味着聚合关系。 在聚合中,所包含的类并不强烈依赖于容器的生命周期。在同一示例中,即使图书馆解散,书籍仍将保留。 聚合使用一个带有 空心菱形 的箭头表示,菱形指向"整体"类。 class School class Student Student --o School 组合 (composition) 也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。 组合使用一个带有 实心菱形 的箭头表示,菱形指向"整体"类。 class Person class Heart Heart --* Person 聚合和组合的区别在于: 聚合关系是"has-a"关系,组合关系是"contains-a"关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。 我们用浅显的例子来说明聚合和组合的区别。"国破家亡",国灭了,家自然也没有了,"国"和"家"显然也是组合关系。而相反的,计算机和它的外设之间就是聚合关系,因为它们之间的关系相对松散,计算机没了,外设还可以独立存在,还可以接在别的计算机上。在聚合关系中,部分可以独立于聚合而存在,部分的所有权也可以由几个聚合来共享,比如打印机就可以在办公室内被广大同事共用。 在C++语言中,从实现的角度讲,聚合可以表示为: class A {...} class B { A* a; .....} 即类B包含类A的指针; 而组合可表示为: class A{...} class B{ A a; ...} 即类B包含类A的对象。 准确的UML类图中用空心和实心菱形对聚合和组合进行了区分。 关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。 我想举个通俗的例子。 你和你的心脏之间是composition关系 (心脏只属于你自己) 你和你买的书之间是aggregation关系 (书可能是别人的) 你和你的朋友之间是assoc 继承 (Extension) 指的是一个类 (称为子类) 继承另外的一个类 (称为基类) 的功能,并增加它自己的新功能的能力,继承是类与类之间最常见的关系。 ...

Created 15156-10-15 · Updated 15156-10-15 · 5 min · 970 words · -