实体
UML的的实体类型包括:类、抽象类、接口、对象等
1、类
我们描述一个人的类
@startuml test
class Person {
-name: String
-age: int
-sex: String
+getName()
+setName()
+getAge()
+setAge()
+getSex()
+setSex()
}
@enduml
2、抽象类
我们描述一个汽车的抽象类
@startuml test
abstract class Car {
+drive()
+stop()
+refuel()
+getFuelLevel()
+getSpeed()
+setSpeed(speed: int)
+getMaxSpeed()
+setMaxSpeed(speed: int)
+getColor()
+setColor(color: String)
+getModel()
+setModel(model: String)
+getYear()
+setYear(year: int)
+getMake()
+setMake(make: String)
+getVin()
}
@enduml
3、接口
我们描述一个鸟的接口
@startuml test
interface Bird {
+ fly()
+ layEggs()
}
@enduml
4、对象
我们描述一个对象
@startuml test
object "一个对象" as object1
object1 : name = "张三"
object1 : age = 20
object1 : gender = "男"
object1 : address = "北京市"
object1 : phone = "13812345678"
object1 : email = "zhangsan@"
object1 : idCard = "110101199001011234"
@enduml
实体间的关系
实体间关系有六种,分别是
- 泛化(Generalization)关系
- 关联(Association)关系
- 聚合(Aggregation)关系
- 组合(Composition)关系
- 依赖(Dependency)关系
- 实现(Realization)关系
1、泛化关系(继承)
泛化表示的是is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节,并具有可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系
这里我们定义了Man和Woman两个类,都继承于Person
@startuml test
class Person {
-name: String
-age: int
-sex: String
+getName()
+setName()
+getAge()
+setAge()
+getSex()
+setSex()
}
class Man {}
class Woman {}
Person <|-- Man
Person <|-- Woman
@enduml
2、关联关系
这里描述了司机(Driver)和汽车(Car)的关联关系,一个司机可以驾驶多辆汽车
@startuml test
class Car {
}
class Driver {
+car: Car
}
Driver "0..1" --> "1" Car
@enduml
3、聚合关系
聚合关系是关联关系的一种,表示的是整体和个体之间的关系。
这里描述了汽车、引擎、轮胎之间的关系
@startuml test
class Car {
+engine Engine
+tire Tire
}
class Engine {}
class Tire {}
Car "1" o-- "1" Engine
Car "1" o-- "0..*" Tire
@enduml
4、组合(合成)关系
合成关系是关联关系的一种,比聚合关系更强,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期,合成关系不能共享。
这里描述了人、四肢、车的关系,
@startuml test
class Person {
+limbs: Limb[]
+car Car
}
class Limb {}
class Car {}
Person "1" o-- "0..*" Car
Person "1" *-- "4" Limb
@enduml
5、依赖关系
依赖也是类与类之间的连接,依赖总是单向的。依赖关系表示一个类依赖于另一个类的定义。
这里描述了男人买房子和汽车。
@startuml test
class Man {
+buy(house: House): void
+buy(car: Car): void
}
class House {}
class Car {}
Man ..> Car
Man ..> House
@enduml
6、实现关系
实现关系在类图中表示的就是接口和实现类的关系,指的是一个class类实现一个或多个接口的功能,也是非常常用的关系。
这里描述了鸭子实现鸟的接口
@startuml test
interface Bird {
+fly()
}
class Duck {
+fly()
}
Duck ..> Bird
@enduml
一个子类可以实现多个接口,这个可以理解为子类具有了被实现的父类的所有功能,子类可以同时实现不同的父类来具有不同的功能,如人有吃东西这么一种功能,也可以有走路这样的功能,还可以有说话的功能等等,此时的实现关系图如下:
@startuml test
class Person {
+walk()
+eat()
}
interface Walkable {
+walk()
}
interface Eatable {
+eat()
}
Person ..> Walkable
Person ..> Eatable
@enduml