参考资料: 统一建模语言 - Wiki 设计模式和 UML 类图 - 非常好的资料 继承、实现、依赖、关联、聚合、组合的联系与区别 领域 UML 类图和实现 UML 类图对比 processon - 在线绘制工具
UML 是一种绘画语言,用来做软件蓝图。其意图仅仅是建立产品的模型和结构,跟具体的程序语言和算法实现无关。
官方定义的 UML 图形有十几种。
面向对象编程中,最常用的就是 UML 类图,描述了系统中的对象和关系。借助 UML 类图,可以在编写代码以前对系统有一个全面的认识。
消息在生命线上按照约定顺序执行。
例如,微信支付业务流程的这个 时序图。
在领域驱动设计中,在系统开始编码前,一般要经过业务分析和项目设计两个阶段。业务分析过程中产生领域 UML 类图,项目设计过程中产生实现 UML 类图。
由业务分析师产生,描述业务实体、每个实体的属性和操作、实体之间的关系。
由系统设计师完成。包括系统中所有有必要指明的实体类、控制类、界面类及与具体平台有关的所有技术性信息。
下面是个简单例子,实际要比这个复杂:
UML 中的元素通过关系关联到一起。
各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
用空心三角箭头加实线表示。
两个对象之间如果可以用 is-a 来表示,就是继承关系。
代码中,就是继承非抽象类。
public class Car { } public class SUV extends Car { }用空心三角箭头加虚线表示。
代码中,就是继承抽象类或实现接口。
public interface Human { } public class Student implements Human { }用带箭头的实线表示。
关联关系是一种强依赖关系,比如我和我的朋友。
关联关系默认不强调方向,表示对象间相互知道。如果强调方向,A 指向 B 的箭头表示 A 知道 B,但 B 不知道 A。
在代码中,关联关系通常是以成员变量的形式实现的。
例如,下面示例中 Employee 类对 IDCard 类有关联关系,Employee 可以有 0 个或多个 IDCard 对象,但每个 IDCard 只从属于一个 Employee:
public class Employee { private IDCard id; }用带箭头的虚线表示。
依赖是临时性的、非常弱的关系。例如某人过河时借用一条船,人对船产生依赖。
依赖是有方向的,双向依赖是非常糟糕的结构,尽量避免。A 指向 B 的箭头表示 A 依赖 B,在 A 运行期间会用到 B 对象的关系。
在代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系。
例如,下面示例中 Employee 类对 CalculatorStrategy 类有依赖关系:
public class Employee { public void calcSalary(CalculatorStrategy cg) { ... } }用实心菱形箭头加实线表示,A 指向 B 的箭头表示 A 组成 B,或 B 由 A 组成。
组合关系是 contains-a 的关系,整体消亡后,各个组成元素跟着一起消亡。例如公司解散后,各个部门也不存在了。汽车销毁后,发动机等组件都被同时销毁。
例如,下面示例中 Car 类由 Engine 等类组合而成,Car 负责 Engine 的生命周期:
public class Car { private Engine eng; public void maintainEngine() { ... } }用空心菱形箭头加实线表示,A 指向 B 的箭头表示 A 聚合到 B 上,或 B 由 A 组成。
聚合关系是 has-a 的关系,各个元素有单独的生命周期。即使整体不在了,各个组成元素仍可以独立存在。例如部门解散后员工仍在。
public class Department { private Employee emp; }UML 中使用带有类名的方框表示类。对于抽象类,可以使用斜体或在类名下面添加 {abstract}。对于接口,可以在类名上面添加 <<interface>>。
在 UML 类图中,属性和方法前面可以使用 +、- 和 # 三种符号表示其可见性。
符号可见性说明+public所有代码都可以访问-private只有当前类可以访问#protected只有当前类及其子类可以访问可见性符号后面是属性名或方法名。用冒号分隔属性的类型和默认值
- id:int - price: doube=0对于方法,括号中可以指定参数及其类型,冒号后面是返回值类型:
+ getPrice(id: int): double转载于:https://www.cnblogs.com/kika/p/10851582.html
相关资源:数据结构—成绩单生成器