UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
类与类图
1) 类(Class)封装了数据和⾏为,是⾯向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。
2) 在系统中,每个类具有⼀定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。⼀个类可以有多种职责,设计得好的类⼀般只有⼀种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即⽅法)。
3) 类的属性即类的数据职责,类的操作即类的⾏为职责
⼀、依赖关系(Dependence)
依赖关系(Dependence):假设A类的变化引起了B类的变化,则说名B类依赖于A类。
• 依赖关系(Dependency) 是⼀种使⽤关系,特定事物的改变有可能会影响到使⽤该事物的其他事物,在需要表⽰⼀个事物使⽤另⼀个事物时使⽤依赖关系。⼤多数情况下,依赖关系体现在某个类的⽅法使⽤另⼀个类的对象作为参数。
• 在UML中,依赖关系⽤带箭头的虚线表⽰,由依赖的⼀⽅指向被依赖的⼀⽅。
1. public class Driver
2. {
3. public void drive(Car car)
4. {
5. ve();
6. }
7. ……
8. }
9. public class Car
10. {
11. public void move()
12. {
13. ......
14. }
15. ……
16. }
依赖关系有如下三种情况:
1、A类是B类中的(某中⽅法的)局部变量;
2、A类是B类⽅法当中的⼀个参数;
3、A类向B类发送消息,从⽽影响B类发⽣变化;
⼆、泛化关系(Generalization)
泛化关系(Generalization):A是B和C的⽗类,B,C具有公共类(⽗类)A,说明A是B,C的⼀般化(概括,也称泛化)
• 泛化关系(Generalization)也就是继承关系,也称为“is-a-kind-of”关系,泛化关系⽤于描述⽗类与⼦类之间的关系,⽗类⼜称作基类或超类,⼦类⼜称作派⽣类。在UML 中,泛化关系⽤带空⼼三⾓形的直线来表⽰。
• 在代码实现时,使⽤⾯向对象的继承机制来实现泛化关系,如在Java语⾔中使⽤extends关键字、在C++/C#中使⽤冒号“:”来实现。
1. public class Person
2. {
3. protected String name;
4. protected int age;
5. public void move()
6. {
7. ……
8. }
9. public void say()
10. {
11. ……
12. }
13. }
14. public class Student extends Person
15. {
16. private String studentNo;
17. public void study()
18. {
19. ……
20. }
21. }
在UML当中,对泛化关系有三个要求:
1、⼦类与⽗类应该完全⼀致,⽗类所具有的属性、操作,⼦类应该都有;
2、⼦类中除了与⽗类⼀致的信息以外,还包括额外的信息;
3、可以使⽤⽗类的实例的地⽅,也可以使⽤⼦类的实例;
三、关联关系(Association)
关联关系(Association):类之间的联系,如客户和订单,每个订单对应特定的客户,每个客户对应⼀些特定的订单,再如篮球队员与球队之间的关联(下图所⽰)。
其中,关联两边的"employee"和“employer”标⽰了两者之间的关系,⽽数字表⽰两者的关系的限制,是关联两者之间的多重性。通常有“*”(表⽰所有,不限),“1”(表⽰有且仅有⼀个),“0...”(表⽰0个或者多个),“0,1”(表⽰0个或者⼀个),“n...m”(表⽰n到m个都可以),“m...*”(表⽰⾄少m个)。
• 关联关系(Association) 是类与类之间最常⽤的⼀种关系,它是⼀种结构化关系,⽤于表⽰⼀类对象与另⼀类对象之间有联系。
• 在UML类图中,⽤实线连接有关联的对象所对应的类,在使⽤Java、C#和C++等编程语⾔实现关联关系时,通常将⼀个类的对象作为另⼀个类的属性。
• 在使⽤类图表⽰关联关系时可以在关联线上标注⾓⾊名。
1) 双向关联: 默认情况下,关联是双向的。
2 ) 单向关联:类的关联关系也可以是单向的,单向关联⽤带箭头的实线表⽰.
3) ⾃关联: 在系统中可能会存在⼀些类的属性对象类型为该类本⾝,这种特殊的关联关系称为⾃关联。
4) 重数性关联: 重数性关联关系⼜称为多重性关联关系(Multiplicity),表⽰⼀个类的对象与另⼀个类的
对象连接的个数。在UML中多重性关系可以直接在关联直线上增加⼀个数字表⽰与之对应的另⼀个类的对象的个数。
表⽰⽅式多重性说明
1..1表⽰另⼀个类的⼀个对象只与⼀个该类对象有关系
0..*表⽰另⼀个类的⼀个对象与零个或多个该类对象有关系
1..*表⽰另⼀个类的⼀个对象与⼀个或多个该类对象有关系
0..1表⽰另⼀个类的⼀个对象没有或只与⼀个该类对象有关系
< 表⽰另⼀个类的⼀个对象与最少m、最多n个该类对象有关系 (m<=n)
1. public class Customer
2. {
3. private Product[] products;
4. ……
5. }
6. public class Product
7. {
8. private Customer customer;
9. ……
10. }
1. public class Customer
2. {
3. private Address address;
4. ……
5. }
6.
7. public class Address
8. {
9. ……
10. }
1. public class Node
2. {
3. private Node subNode;
4. ……
5. }
1. public class Form
2. {
3. private Button buttons[];
4. ……
5. }
6. public class Button
7. {
8. …
9. }
四、聚合关系(Aggregation)
聚合关系(Aggregation):表⽰的是整体和部分的关系,整体与部分可以分开.
• 聚合关系(Aggregation) 表⽰⼀个整体与部分的关系。通常在定义⼀个整体类后,再去分析这个整体类的组成结构,从⽽出⼀些成员类,该整体类和成员类之间就形成了聚合关系。
• 在聚合关系中,成员类是整体类的⼀部分,即成员对象是整体对象的⼀部分,但是成员对象可以脱离整体对象独⽴存在。在UML中,聚合关系⽤带空⼼菱形的直线表⽰。
1. public class Car
2. {
3. private Engine engine;
4. public Car(Engine engine)
5. {
6. ine = engine;
7. }
8.
9. public void setEngine(Engine engine)
10. {
11. ine = engine;
12. }uml图例
13. ……
14. }
15. public class Engine
16. {
17. ……
18. }
如:电话机包括⼀个话筒
电脑包括键盘、显⽰器,⼀台电脑可以和多个键盘、多个显⽰器搭配,确定键盘和显⽰器是可以和主机分开的,主机可以选择其他的键盘、显⽰器组成电脑;
五、组合关系(Composition)
组合关系(Composition):也是整体与部分的关系,但是整体与部分不可以分开.
• 组合关系(Composition)也表⽰类之间整体和部分的关系,但是组合关系中部分和整体具有统⼀的⽣存期。⼀旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同⽣共死的关系。
• 在组合关系中,成员类是整体类的⼀部分,⽽且整体类可以控制成员类的⽣命周期,即成员类的存在依赖于整体类。在UML中,组合关系⽤带实⼼菱形的直线表⽰。
1. public class Head
2. {
3. private Mouth mouth;
4. public Head()
5. {
6. mouth = new Mouth();
7. }
8. ……
9. }
10.
11. public class Mouth
12. {
13. ……
14. }
如:公司和部门,部门是部分,公司是整体,公司A的财务部不可能和公司B的财务部对换,就是说,公司A不能和⾃⼰的财务部分开;⼈与⼈的⼼脏.
六、实现关系(Implementation)
实现关系(Implementation):是⽤来规定接⼝和实线接⼝的类或者构建结构的关系,接⼝是操作的集合,⽽这些操作就⽤于规定类或者构建的⼀种服务。
• 接⼝之间也可以有与类之间关系类似的继承关系和依赖关系,但是接⼝和类之间还存在⼀种实现关系(Realization),在这种关系中,类实现了接⼝,类中的操作实现了接⼝中所声明的操作。在UML中,类与接⼝之间的实现关系⽤带空⼼三⾓形的虚线来表⽰。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论