C4模型:https://insights.thoughtworks.cn/c4-model/
帖子中UML图在ProcessOn绘制。
类之间的关系
关联关系---表示一类对象与另一类对象之间有联系
通常一个类对象作为另外一个类的成员变量。 vs 依赖(一个类对象作为另外一个类方法的入参)
1)单向关联:
public class LoginForm{ private JButton loginButton; // 定义为成员变量 ... } public class JButton{ ... }
2)双向关联:顾客购买并拥有商品;商品被卖给某个顾客
public class Customer{ private Product[] products; ... } public class Product{ private Customer customer; ... }
3)自关联
public class Node{ private Note subNode; ... }
4)多重关联:表示两个关联对象才能够在数量上的对应关系
实际样例: Frame包含很多Button
public class LoginForm{ private JButton[] loginButton; // 定义为成员变量 ... } public class JButton{ ... }
5)聚合关系:整体和部分的关系:成员是对象的一部分,但是成员对象可以脱离对象独立存在
代码实现时,成员对象通常作为含参构造方法,Setter方法注入到对象中。 // 通过setter导入一个其他可独立存在的对象
public class Car{ private Engine engine; // 构造注入 public Car(Engine engine) { this.engine = engine; } // 设值注入 public void setEngine(Engine engine){ thins.engine = engine; } ... } public class Engine{ ... }
6)组合关系
整体和部分的关系,此时整体可以控制成员的生命周期,对象不存在,则成员也不存在。
代码通常在整体类构造方法中直接实例化成员类
public class Head{ private Mouth mouth; public Head(){ mouth = new Mouth(); } ... } public class Mouth{ ... }
依赖关系: 是一种使用关系:特定事物的改变可能影响到使用该事物的其他事物;在需要表示一个事物使用另一个事物时使用依赖关系。
大多数时,依赖关系体现在某个类的方法使用另一个类的对象作为参数
依赖方式的3种常见实现:
1、类对象作为另一个类方法中入参;
2、一个类方法中,将另一个类对象作为局部变量;
3、一个类方法调用另外一个类的静态方法
代码样例
// 实现类型1:类对象作为另一个类方法入参
public class Car { public void move() { // ... } } public class Driver { public void driver(Car car) { car.move(); } }
继承关系:描述父类与子类的关系
接口实现: 没有属性,且所有操作都是抽象的(不允许其中方法存在{}body)
时序图:
几种生命线类型
Boundary:边界对象,初学者dao用得少,在MVC模式、控制模式、需求分析过渡到系统设计中用得多些,可用于表示交互界面、子系统。
Control:控制对象,用于表示业务逻辑、分工协调的职责对象,采用控制模式分析设计时用得多。
Entity:实体对象,用于表示需要永久保存或较长生命期的数据对象,例如票据、文件、数据库(通常不直接说数据库等技术实现方式,而说逻辑意义的名称)。
对象:代表时序图中的对象在交互中所扮演的角色
位于时序图的顶部,以一个矩形表示。对象的命名方式一般有三种:
1 对象名和类名。例如:华为手机:手机、loginServiceObject:LoginService。
2 只显示类名,不显示对象,即为一个匿名类。例如::手机、:LoginSservice。
3 只显示对象名,不显示类名。例如:华为手机:、loginServiceObject:。
常用组合片段
样例: