UML
UML即统一建模语言(Unified Modeling Language)。
类型关系
UML中类型之间有六大关系:
- 泛化(Generalization)
- 实现(Realization)
- 关联
- 组合关联(Composition)Contain-a
- 聚合关联(Aggregation)Has-a
- 普通关联(Association)A-A
- 依赖关联(Dependency)Use-a
2.1.Generalization(泛化)
2.1.1.泛化关系
是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。
2.1.2.箭头指向
带三角箭头的实线,箭头指向父类。
@startuml
class Student {
- score: int
+ getScore(): int
}
class Graduate{
-salary:float
+getSalary():float
}
Graduate --|> Student
@enduml
@startuml
class Student {
- score: int
+ getScore(): int
}
class Graduate{
-salary:float
+getSalary():float
}
Student <|-- Graduate
@enduml
<|--
--|>
指定继承关系
2.2.Interface Realization(接口实现)
2.2.1.实现关系
是一种类与接口的关系,表示类是接口所有特征和行为的实现。
2.2.2.箭头指向
带三角箭头的虚线,箭头指向接口。..|>
, <|..
,圆点表示虚线。
@startuml
interface Shape{
+ draw()=0 :void
}
class Circle
{
-x:int
-y:int
+draw():void
}
Shape <|.. Circle
@enduml
@startuml
interface Shape{
+ draw()=0 :void
}
class Circle
{
-x:int
-y:int
+draw():void
}
Shape <|.. Circle
@enduml
2.3.Composition(组合关联)
2.3.1.组合关系
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,它要求代表整体的对象负责代表部分的对象的生命周期。整体的生命周期结束也就意味着部分的生命周期结束。比如你和你的大脑。
2.3.2.箭头与指向
带实心菱形的实现,菱形指向整体。
2.3.3.类图关系
@startuml
Body *-- Brain
Body *-- Hand
@enduml
@startuml
Body *-- Brain
Body *-- Hand
@enduml
2.4.Aggregation(聚合关联)
2.4.1.聚合关系
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如公司与员工的关系等。
@startuml
Family o-- Child
@enduml
@startuml
Family o-- Child
@enduml
2.5.Association(普通关联)
2.5.1.关联关系
是一种拥有的关系, 它使一个类知道另一个类的属性和方法,强调的是一种A-A的关系;关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
2.5.2.箭头和指向
带普通箭头的实心线,指向被拥有者。
2.5.3.类图关系
@startuml
Teacher "1"--> "1..n" Student
@enduml
2.5.4.示例代码
class Student;
class Teacher
{
public:
void addStudent(Student *s)
{
vs.push_back(s);
}
private:
vector<Student*> vs;
};
class Student
{
public:
void addTeacher(Teacher *t)
{
vt.push_back(t);
}
private:
vector<Teacher*> vt;
};
int main()
{
Student *s1 = new Student, *s2 = new Student, *s3 = new Student, *s4 = new Student;
Teacher *t1 = new Teacher, *t2= new Teacher, *t3 = new Teacher, *t4 = new Teacher;
s2->addTeacher(t1);
s2->addTeacher(t2);
s2->addTeacher(t3);
s2->addTeacher(t4);
t1->addStudent(s1);
t1->addStudent(s2);
t1->addStudent(s3);
t1->addStudent(s4);
return 0;
}
2.6.Dependency(依赖关联)
2.6.1.依赖关系
是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。
比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个方法中使用。
2.6.2.箭头及指向
带箭头的虚线,指向被使用者
2.6.3.类图关系
@startuml
Person ..> Boat
Person ..> Computer
@enduml
2.6.4.示例代码
class Plane
{
public:
void fly()
{
cout<<"travel to some where"<<endl;
}
};
class Computer
{
public:
void playGame()
{
cout<<"play my game"<<endl;
}
};
class Person
{
public:
void traval(Plane * plane)
{
plane->fly();
}
void entertain(Computer *cmp)
{
cmp->playGame();
}
};
int main()
{
Person per;
Computer cmp;
Plane plane;
per.traval(&plane);
per.entertain(&cmp);
return 0;
}
—-未完待续—–
「如果这篇文章对你有用,请随意打赏」
如果这篇文章对你有用,请随意打赏
使用微信扫描二维码完成支付

comments powered by Disqus