UML类图和关系--idea使用PlantUML插件画类图
发布时间
阅读量:
阅读量
UML类图和关系
[
注释:资料基于尚硅谷设计模式课程中的UML应用进行了归纳与汇总。目前采用Eclipse的插件进行图形化绘制操作。同时,在本项目中将采用Java Workbench(JWb)结合PlantUML技术自动生成类图模型。
UML被称为Unified Modeling Language(简称UML)(统一建模语言),它是软件系统分析与设计的一种手段。
它帮助软件开发人员进行思考与记录其想法的过程及其产物。
作为一套规范性符号体系。
类似于数学中的符号体系与化学中的元素符号体系。
例如类接口实现泛化依附组合聚合等。
类图 - 依赖关系(Dependence)
只要是在类中用到了对方 ,那么他们之间就存在依赖关系。
应用案例
Java代码
public class PersonDao{}
public class IDCard{}
public class Person{}
public class Department{}
public class PersonServiceBean {
private PersonDao personDao;
public void save(Person person) {
}
public IDCard getIDCard(Integer personid) {
return null;
}
public void modify() {
Department department = new Department();
}
}
UML类图 + PlantUML代码

@startuml
class PersonDao
class IDCard
class Person
class Department
class PersonServiceBean{
- PersonDao personDao
+ void save(Person person)
+ IDCard getIDCard(Integer personid)
+ void modify()
}
PersonDao <.. PersonServiceBean
IDCard <.. PersonServiceBean
Person <.. PersonServiceBean
Department <.. PersonServiceBean
@enduml
小结
- 该类引用了另一个类
- 如果是该类的成员属性
- 如果该方法返回的是类型
- 该方法接收的是参数类型
- 在该方法中使用了局部变量
类图 - 泛化关系(generalization)
泛化关系实际上就是继承关系,他是依赖关系的特例
应用案例
Java代码
public abstract class DaoSupport {
public void save(Object entity) {
}
public void delete(Object id) {
}
}
public class PersonServiceBean extends DaoSupport{}
UML类图 + PlantUML代码

@startuml
abstract class DaoSupport{
+ void save(Object entity)
+ void delete(Object id)
}
class PersonServiceBean
DaoSupport <|-- PersonServiceBean
@enduml
小结
- 派生关系本质上相当于继承关系。
- 当A类从B类中继承时, 我们可以说A和B之间存在泛化关系。
类图—实现关系(Implementation)
实现关系实际上就是A类实现B接口,他是依赖关系的特例
应用案例
Java代码
public interface PersonService {
public void delete(Interger id);
}
public class PersonServiceBean implements PersonService {
public void delete(Integer id) {
}
}
UML类图 + PlantUML代码

@startuml
interface PersonService
class PersonServiceBean
PersonService <|... PersonServiceBean
@enduml
类图—关联关系(Association)
- 关联关系本质上说就是两类之间的关联 ,它是依赖关系的一种表现形式。
- 关联具有方向性 ,即它可能表现为双向或单向的关系。
- 关系的表现形式具有多样性:
- “1” 表示单一实例;
- “0…” 表示零个或多个;
- “0,1” 表示零个或一个;
- “n…m” 表示从n到m的数量都有可能;
- “m…*” 则意味着至少有m个实例。
应用案例
Java代码
public class Person {
private IDCard idCard;
}
public class IDCard {
private Person person;
}
UML类图 + PlantUML代码

@startuml
class Person{
- IDCard idCard
}
class IDCard{
- Person person
}
Person <-- IDCard
Person --> IDCard
@enduml
类图—聚合关系(Aggregation)
聚合关系描述为整体与部分之间的联系 ,它表明整体与其组成部分之间存在明确区分 。聚合关系作为关联关系的一个特例 ,不仅具备良好的导航性和多级属性 。
应用案例
一台电脑由键盘板(keyboard panel)、显示装置(monitor unit),以及鼠标组件等构成;能够从电脑上分离出来的所有组件都具备独立的功能特性,并通过带空心菱形的实线标注其连接关系:
Java代码
public class Monitor {
}
public class Mouse {
}
public class Computer {
private Mouse mouse;//鼠标可以和Computer分离
private Monitor monitor;//显示器可以和Computer分离
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setMonitor(Monitor monitor) {
this.monitor = monitor;
}
}
UML类图 + PlantUML代码

@startuml
class Monitor
class Mouse
class Computer{
- Monitor Monitor
- Mouse mouse
}
Computer o-- Monitor
Computer o-- Mouse
@enduml
小结
当一个A类依赖于B类时,并非意味着在构建A时必须同时构建B。换句话说,在创建对象的过程中无需立即构建其依赖的对象类型(并不是同生共死 )。因此它们属于聚合关系
类图—组合关系(Composition)
组合关系:也是整体与部分的关系,但是整体与部分不可以分开 。
让我们来看另一个案例,在程序设计中,在定义实体时我们引入了三个关键概念:Person以及相关的身份信息表IDCard,并引入了一个用于管理头部信息的表Head。通过这种方式,在这种架构下它们之间形成了组合关系;同时,在这种架构下另一个部分则实现了聚合关系
应用案例1
Java代码
public class IDCard{}
public class Head{}
public class Person{
//IDCard并不是必须存在/实例化/创建的,是聚合关系
private IDCard idCard;
//Person 类创建的时候,Head类就会被实例化那么他们是同生共死的关系,他们就是组合关系
private Head head = new Head();
}
UML类图 + PlantUML代码

@startuml
class IDCard
class Head
class Person{
- IDCard idCard
- Head head = new Head()
}
Person o-- IDCard
Person *-- Head
@enduml
应用案例2
Java代码
public class Mouse {}
public class Monitor {}
///Computer被创建时,Mouse和Monitor会马上被new/实例化出来,组合关系
public class Computer {
private Mouse mouse = new Mouse();//鼠标和Computer不能分离
private Monitor monitor = new Monitor();//显示器和Computer不能分离
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setMonitor(Monitor monitor) {
this.monitor = monitor;
}
}
UML类图 + PlantUML代码

@startuml
class Monitor
class Mouse
class Computer{
- Monitor Monitor = new Monitor()
- Mouse mouse = new Mouse)(
}
Computer *-- Monitor
Computer *-- Mouse
@enduml
全部评论 (0)
还没有任何评论哟~
