暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

UML类图的关系

明王足迹 2021-09-15
345

因为要看tomcat的源码,这里回顾一下类图的关系(泛化、实现、依赖、关联、聚合、组合)


泛化:带空心三角实线,三角箭头指向父类

继承的关系,表示特殊与一般的关系

public abstract class Person{
   public Integer age;
   public String name;
   public abstract void say();
}
public class Man extends Person{
   @Override
   public void say() {
  }
}
public class Woman extends Person{
   @Override
   public void say() {
  }
}

实现(Implementation):带空心三角虚线,三角箭头指向接口

类与接口的关系,表示类是接口的实现

public interface Person{
   void say();
}
public class Man implement Person{
     @Override
   public void say() {}
}
public class Woman implement Person{
     @Override
   public void say() {}
}

关联:带普通箭头的实线,箭头指向被拥有者

类之间的一种关系,是一种拥有的关系,使一个类知道另一个类的属性和方法,一个类作为另一个类的成员变量

  • 双向关联:两个类的成员变量中都包含对方

  • 单向关联:

  • 自关联:

A.java

public class A{
public B b;
}

B.java

public class B{
}

聚合:空心菱形实线,菱形指向整体  (关联关系的特殊形式)

整体与部分的关系,部分可以离开整体而单独存在,一个类作为另一个类的成员变量。

组合:实心菱形实线,菱形指向整体(关联关系的特殊形式)

整体与部分的关系,部分不能离开整体而单独存在,成员变量

代码层面来看,聚合与组合关系是一样的

Head.java

public class Head{
   public Double height;
}

Person.java

public class Person{
   public void say(Head head){
  System.out.println(head.height);
  }
}

依赖:带箭头的虚线,箭头指向被使用者

是一种使用的关系,一个类的实现需要另一个类的协助,在方法的参数中,类A的方法需要类B作为参数

A.java

public class A{
   public void say(B b){
       System.out.println(b.name);
  }
}

B.java

public class B{
   public String name;
}

泛化和实现这两个关系很容易认出虚线就是类与接口的实现关系,实线是类与类的继承关系

组合、聚合、关联、依赖这四种关系大致是语义上的区别,代码层面很难看出有什么区别。

关系表现的强弱程度为:组合>聚合>关联>依赖

文章转载自明王足迹,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论