Relationships between classes in UML diagrams: dependency, generalization, association, aggregation, composition, implementation

Classes and Class Diagrams

1) Class encapsulates data and behavior and is an important part of object-oriented. It is a general term for a collection of objects with the same attributes, operations, and relationships.

2) In the system, each class has certain responsibilities. Responsibilities refer to the tasks performed by the class, that is, what functions the class should perform and what obligations it should undertake. A class can have multiple responsibilities. A well-designed class generally has only one responsibility. When defining a class, the responsibilities of the class are decomposed into attributes and operations (that is, methods) of the class.

3) The attribute of the class is the data responsibility of the class, and the operation of the class is the behavior responsibility of the class

1. Dependence

Dependence: Assuming that changes in class A cause changes in class B, it is said that class B depends on class A.

Dependency is a usage relationship. Changes in a specific thing may affect other things that use the thing. Dependency is used when it is necessary to indicate that one thing uses another thing. In most cases, dependencies manifest when methods of one class take an object of another class as a parameter.

In UML, dependencies are represented by dashed lines with arrows, from the dependent side to the dependent side.

public class Driver  
{  
    public void drive(Car car)  
    {  
        car.move();  
    }  
    ……  
}  
public class Car  
{  
    public void move()  
    {  
        ......  
    }  
    ……  
}  

There are three types of dependencies:

1. Class A is a local variable (of a method) in class B;

2. Class A is a parameter in the method of class B;

3. Class A sends a message to class B, thereby affecting class B to change;

2. Generalization

Generalization: A is the parent class of B and C, B and C have a common class (parent class) A, indicating that A is the generalization (generalization, also called generalization) of B and C

泛化关系(Generalization)也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛 化关系用带空心三角形的直线来表示。

在代码实现时,使用面向对象的继承机制来实现泛化关系,如在Java语言中使用extends关键字、在C++/C#中使用冒号“:”来实现。

public class Person   
{  
    protected String name;  
    protected int age;  
    public void move()   
    {  
        ……  
    }  
    public void say()   
   {  
        ……  
    }  
}  
public class Student extends Person   
{  
    private String studentNo;  
    public void study()   
    {  
        ……  
    }  
}  

在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) 双向关联: 默认情况下,关联是双向的。

public class Customer  
{  
    private Product[] products;  
    ……  
}  
public class Product  
{  
    private Customer customer;  
    ……  
}  

2 ) 单向关联:类的关联关系也可以是单向的,单向关联用带箭头的实线表示.

public class Customer  
{  
    private Address address;  
    ……  
}  
  
public class Address  
{  
    ……  
} 

3) 自关联: 在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。

public class Node  
{  
    private Node subNode;  
    ……  
}

4) 重数性关联: 重数性关联关系又称为多重性关联关系(Multiplicity),表示一个类的对象与另一个类的对象连接的个数。在UML中多重性关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。

public class Form  
{  
    private Button buttons[];  
    ……  
}   
public class Button  
{  
}  

四、聚合关系(Aggregation)

聚合关系(Aggregation):表示的是整体和部分的关系,整体与部分 可以分开.

聚合关系(Aggregation) 表示一个整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构,从而找出一些成员类,该整体类和成员类之间就形成了聚合 关系。

在聚合关系中,成员类是整体类的一部分,即成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。

public class Car  
{  
    private Engine engine;  
    public Car(Engine engine)  
   {  
        this.engine = engine;  
    }  
      
    public void setEngine(Engine engine)  
    {  
        this.engine = engine;  
    }  
    ……  
}  
public class Engine  
{  
    ……  
}  

如:电话机包括一个话筒

电脑包括键盘、显示器,一台电脑可以和多个键盘、多个显示器搭配,确定键盘和显示器是可以和主机分开的,主机可以选择其他的键盘、显示器组成电脑;

五、组合关系(Composition)

组合关系(Composition):也是整体与部分的关系,但是整体与部分不可以分开.

组合关系(Composition)也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之 间具有同生共死的关系。

在组合关系中,成员类是整体类的一部分,而且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。在UML中,组合关系用带实心菱形的直线表示。

public class Head  
{  
    private Mouth mouth;  
    public Head()  
    {  
    mouth = new Mouth();  
    }  
    ……  
}  
  
public class Mouth  
{  
    ……  
}  

如:公司和部门,部门是部分,公司是整体,公司A的财务部不可能和公司B的财务部对换,就是说,公司A不能和自己的财务部分开; 人与人的心脏.

六、实现关系(Implementation)

实现关系(Implementation):是用来规定接口和实线接口的类或者构建结构的关系,接口是操作的集合,而这些操作就用于规定类或者构建的一种服务。

接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系(Realization),在这种关系中,类实现了接口,类中的操作实现了接口中所 声明的操作。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。

public interface Vehicle   
{  
    public void move();  
}  
public class Ship implements Vehicle  
{  
    public void move()   
    {  
    ……  
    }  
}  
public class Car implements Vehicle  
{  
    public void move()   
    {  
    ……  
    }  
}  
 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326389557&siteId=291194637