uml

UML笔录

uml

Posted by Deetch on July 2, 2018

依赖(Dependency)

虚线

student ---------> Computer

class Computer{
public:
    static void start(){
        cout<<"电脑正在启动"<<endl;
    }
};
class Student{
public:
    //返回值构成依赖
    Computer& program();
    //形参构成依赖
    void program(Computer&);
    //局部变量构成依赖
    void playGame(){
        Computer* computer=new Computer;
        ...
    }
    //静态方法调用构成依赖
    Computer::star();
};

关联(Association)

实线

student ————————> Teacher

class Teacher;
class Student{
public:
    Teacher teacher;  //成员变量
    void study();
}

聚合(Aggregation)

Classes 空心菱形—————————— Student

class Student;
class Classes{
public:
    Student* student; 
    Classes(Student* stu):student(stu){}
};

组合(复合,Composition)

student 实心菱形———————— Heart

class Heart;
class Student{
public:
    Heart* heart; 
    Student(){
        heart=new Heart;
    }
    ~Student(){
        delete heart;
    }
};

泛化(Generalization)

              human
  空心三角               空心三角
  |                      |
student              teacher

继承(Inheritance)

实线空心三角

实现(Realization)

虚线空心三角

结论

依赖、关联、聚合、组合与泛化代表类与类之间的耦合度依次递增。依赖关系实际上是一种比较弱的关联,聚合是一种比较强的关联,组合是一种更强的关联,泛化则是一种最强的关联,所以笼统的来区分的话,实际上这五种关系都是关联关系。
依赖关系比较好区分,它是耦合度最弱的一种,在编码中表现为类成员函数的局部变量、形参、返回值或对静态方法的调用。
关联、聚合与组合在编码形式上都以类成员变量的形式来表示,所以只给出一段代码我们很难判断出是关联、聚合还是组合关系,我们需要从上下文语境中来判别。
关联表示类之间存在联系,不存在集体与个体、个体与组成部分之间的关系。聚合表示类之间存在集体与个体的关系。组合表示个体与组成部分之间的关系。
依赖、关联、聚合与组合是逻辑上的关联,泛化是物理上的关联。物理上的关联指定是类体的耦合,所以类间耦合性最强。