「图_01」类图

                            「图_01」类图

系列文章:

「图_02」时序图:https://blog.youkuaiyun.com/qq_36098284/article/details/106027120

「图_03」用例图:https://blog.youkuaiyun.com/qq_36098284/article/details/106028360

1.介绍

简单来说,类图主要是用来表示类以及类直接的关系。

2.画法

类图中,主要是包括图和关系。

2.1 类 & 接口

图其实也就是我们看到的长方形,主要用来表示各个类和接口。

类(Class):使用三层矩形框表示。
第一层显示类的名称,如果是抽象类,则就用斜体显示。
第二层是字段和属性
第三层是类的方法
注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。

上面是普通类的画法,如果是抽象类的话,需要在第一层,指明<<abstract>>

接口:使用两层矩形框表示,与类图的区别主要是顶端有<<interface>>标识
第一行是接口名称
第二行是接口方法

 

2.2 关系

    一定要注意这些关系的英文名称,因为在作图到时候,这些关系都是用英文表示的。

    首先,继承的关系主要分类继承抽象类还是非抽象类,那么对应的关系就是实现和泛化

2.2.1 泛化 (Generalization)

最简单的表述就是两个类之间的继承关系是is-a,表示为...是...,比如汽车是车,猫是动物。在代码体现中为继承非抽象类。

该关系使用带有空心箭头的直线表示。比如,SUV和汽车就是这种关系

 

2.2.2 实现 (realize)

比如车是一个抽象的概念,在现实中无法直接用来定义对象,只有指明具体的子类(自信车/汽车)后,才可以用来定义对象,

该关系使用一条带空箭头的虚线表示。在代码中通常表示为继承抽象类。

 

接下来介绍的聚合和组合关系也经常被弄混,主要的区别就是是否是强依赖的关系。

2.2.3 聚合(aggregation)

聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成

聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成

 

与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在

例如, 部门撤销了,人员不会消失,他们依然存在;

 

2.2.4 组合(composition)

组合关系用一条带实心菱形箭头直线表示,如下图表示A组成B,或者B由A组成;

与聚合关系一样,组合关系同样表示整体由部分构成的语义;比如公司由多个部门组成;

组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了

例如, 公司不存在了,部门也将不存在了;

对于组合和聚合,还有一点要说明的是,除了关系要画好线和指向之外,还需要在关系上注明具体关系的名称和数量。

拿下面的一个实例来举例子,教师和课程之间是组合关系,这里没有画出实心菱形的表示,请在自己画图的时候加上。教师和课程的关系是讲授这是显而易见的。而教师的“1”和课程的“*”表示,一个教师可以讲多个课程,“*“表示无数个的意思,如果题目要严格的要求,比如一个老师只能讲授不超过3们课,那么”*”变成“0..3“,表示0到3门是一个范围。

 

    下面要注意依赖和关联的区别,前者是动态的,运行时存在的关系,但是后者是静态的,和是否运行无关。

2.2.5 关联(association)

关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;

它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;

比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;

关联关系默认不强调方向,表示对象间相互知道如果特别强调方向,如下图,表示A知道B,但 B不知道A;

 

2.2.6 依赖关系(dependency)

依赖关系是用一条带箭头的虚线表示的;如下图表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系;

与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;

显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;

注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系依赖关系除了临时知道对方外,还是“使用”对方的方法和属性;

 

3. 实例

下面来看一个具体的实例:

注意这里没有注明聚合和组合关系中的关系名称和数字,可以自己注明。

  • 车的类图结构为<<abstract>>,表示车是一个抽象类;
  • 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,因为车是抽象类,使用带空心箭头的虚线表示;
  • 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,因为小汽车是非抽象类,使用带空心箭头的实线表示;
  • 小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
  • 学生与班级之间是聚合关系,使用带空心箭头的实线表示;
  • 学生与身份证之间为关联关系,使用一根实线表示;
  • 学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;

 

 

参考:https://www.cnblogs.com/duanxz/archive/2012/06/28/2568858.html

https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html

https://juejin.im/post/5a5b246b6fb9a01cbd588f43

### 创建使用泳道 在EA(Enterprise Architect)中,泳道通常用于表示业务流程中的不同角色或参与者之间的交互过程。虽然引用提到的是Visio中的泳道绘制技巧[^3],但在EA中也可以通过似的步骤完成。 #### 泳道的创建方法 1. 打开EA并新建一个项目或者打开已有项目。 2. 在模型浏览器中右键点击目标包,选择`Add Diagram...`来新增一张表。 3. 在弹出的选择对话框中,选择`Activity Diagram`(活动),因为泳道本质上是一种特殊的活动。 4. 添加完成后进入编辑界面,在工具栏中可以找到`Swimlanes`选项,拖拽到画布上即可生成基本的泳道结构[^1]。 5. 调整各个泳道名称以及顺序,并在其内部放置相应的动作节点或其他形元素代表具体的处理逻辑。 对于更复杂的场景设置比如水平方向布局等问题,则需参照官方文档进一步学习高级配置参数[^2]。 ```python # 示例Python脚本自动生成简单泳道(伪代码) from ea_api import EaModel, Swimlane model = EaModel() swimlane = Swimlane(model=model) def create_swimlane(name="Default Lane"): lane = swimlane.add_lane(name=name) return lane main_process = create_swimlane("Main Process") sub_task_1 = main_process.add_action("Sub Task One") sub_task_2 = main_process.add_decision_point("Decision Point Two") print(f"Created Actions:{[action.name for action in main_process.actions]}") ``` 以上是一个简化版的概念展示如何利用编程接口操作EA对象构建基础框架。 --- ### 的设计与应用 (Class Diagram)是用来描述系统静态结构的重要手段之一,它展示了系统的组成部件及其相互关系。以下是基于EA平台制作标准形式化定义下的别映射指南: #### 步骤概述 - **启动环境准备**: 启动软件加载所需工程文件夹路径确认无误之后继续下一步; - **建立新分单元格**: 双击空白区域输入实体名属性列表字段等内容形成初步轮廓; - **关联线连接各要素之间联系**: 使用继承泛化聚合组合等方式表达语义层次上的依存度差异情况; 值得注意的是当遇到跨领域概念融合时可能还需要额外引入外部库支持才能达到理想效果。 ```mermaid classDiagram Class01 <|-- AveryLongClass : child Class03 *-- Class04 Class05 o-- Class06 Class07 ..> Class08: depends on class Class09{ <<interface>> +int someMethod() } ``` 上述Mermaid语法片段演示了一个小型OOAD案例其中包含了多种型的连线样式可供参考借鉴。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值