UML类图 - 依赖 泛化 实现 关联 聚合 组合

UML

  1. UML——Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果

  2. UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类图中有类、接口、实现、泛化、依赖、组合、聚合等

  3. 使用UML来建模,常用的工具有 Rational Rose , 也可以使用一些插件来建模

类型

在UML系统开发中有三个主要的模型:

功能模型

从用户的角度展示系统的功能,包括用例图

对象模型

采用对象、属性、操作、关联等概念展示系统的结构和基础,包括类图、对象图、包图。

动态模型

展现系统的内部行为。 包括序列图、活动图状态图

1.类图

1.1定义

​ 类图描述类及类与类之间的静态关系。类图是一种静态模型,它是创建其他UML图的基础。一个系统可以由多张类图来描述,一个类也可以出现在几张类图中。

​ UML中类的图形符号为长方形,分为三个区域为类名、属性、操作

1.2关系

类图由类及类与类之间的关系组成 。依赖、泛化(继承类)、实现、关联、聚合与组合

2.1依赖

只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编绎都通过不了。

public class PersonDao {
}
public class IDCard {
}
public class Person {
}
public class Department {
}
public class PersonServiceBean {
    
	private PersonDao personDao;
    
	public void save(Person person) {
	}
    
	public IDCard getIDCard(Integer personid) {
		return null;
	}
    
	public void modify() {
		Department department = new Department();
	}
}

当出现以上几种类型的关联关系时(只要用到对方),我们均可将它称之为依赖关系。在我们无法具体明确类与类之间的联系时(真实类所代表的含义之间的联系),说它们是依赖准没错的。后文出现的关联关系可以看作是依赖关系的强化版本。

小结

1) 类中用到了对方

2) 类的成员属性

3) 方法的返回类型

4) 方法接收的参数类型

5) 方法中使用到

2.2泛化

泛化关系实际上就是继承关系,是依赖关系的特例

public class DaoSupport {
    public void save(Object entity){
    }
    public void delete(Object id){
    }
}

public class PersonServiceBean extends DaoSupport{
}

小结:

  1. 泛化关系实际上就是继承关系

  2. 如果A类继承了B类,我们就说A和B存在泛化关系

2.3实现

实现关系实际上就是A类实现B接口,是依赖关系的特例

在代码层面为一个类实现某个接口,使用关键字implements

public interface PersonService {
    public void delete(Integer id);
}
public class PersonServiceBean implements PersonService{
    @Override
    public void delete(Integer id) {
    }
}

总结:

  1. 实现关系实际上就是Java中接口的实现
  2. 如果 A 类实现了了 B 接口,我们就说 A 和 B 存在实现关系

2.4关联

关联关系实际上就是类与类之间的联系,他是依赖关系的特例这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。如人和身份证是一种长期关系。

关联具有导航性:即双向关系或单向关系,表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量

关系具有多重性:如“1”(表示有且仅有一个),“0…” 表示0个或者多个,“0,1”表示0个或者一个,“n…m” 表示n到 m个都可以 ,“m…*” 表示至少m个。

单向一对一关系:

public class IDCard {}

public class Person {	
    private IDCard idCard;
}

双向一对一关系:

public class IDCard {	
    private Person person;
}
public class Person {	
    private IDCard idCard;
}

注意:

​ 理论上这里是关联关系,但是IDEA生成的关系包含组合关系(实心菱形箭头)。 相比起用关联关系描述类图,组合关系更加能说明类图的关系。因为组合关系是关联关系的特例。

2.5聚合

聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。

如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个

配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示:

public class Mouse {}
public class Monitor {}
public class Computer {
    private Mouse mouse;
    private Monitor monitor;

    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }

    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }
}

类关系图:(应将实心菱形换为空心菱形)IDEA的问题

2.6组合

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

在程序中我们定义实体:Person与IDCard、Head, 那么 Head 和Person 就是 组合,IDCard 和 Person 就是聚合。

public class Head {}
public class IDCard {}
public class Person {
    private IDCard card;
    private Head head = new Head();
}

补充:

​ 由代码可得 Head 和 Person 就是组合,IDCard 和 Person 是聚合。但是能否一定说Person和IDCard没有组合关系呢(本例中已有信息所展示的是聚合),其实是不能的。如果在我们的程序中Person实体类中定义了对IDCard进行级联删除,即删除Person时连同IDCard一起删除,那么我们就可以认为IDCard和Person就是组合关系。

1.3总结

泛化实现在代码层面可以根据关键字(extends、implements)进行区分,只要记住这个点一般不会和其他四个搞混淆。

依赖、关联、聚合、组合,它们由弱到强关系是: 依赖 < 关联 < 聚合 < 组合。

IDCard 和 Person 是聚合。但是能否一定说Person和IDCard没有组合关系呢(本例中已有信息所展示的是聚合),其实是不能的。如果在我们的程序中Person实体类中定义了对IDCard进行级联删除,即删除Person时连同IDCard一起删除,那么我们就可以认为IDCard和Person就是组合关系。

1.3总结

泛化实现在代码层面可以根据关键字(extends、implements)进行区分,只要记住这个点一般不会和其他四个搞混淆。

依赖、关联、聚合、组合,它们由弱到强关系是: 依赖 < 关联 < 聚合 < 组合。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值