在类图中一共包含以下几种模型元素,分别是:类(class)、接口(interface)以及类之间的关系。

1、类(class)

  在面向对象编程中,类是对现象世界中一组具有相同特征的物体的抽象。

  

2、接口(interface)

  接口是一种特殊的类,具有类的结构但不可被实例化,只可以被实现(继承)。在UML中,接口使用一个带有名称的小圆圈来进行表示。

3、类图中的关系

  在UML类图中,常见的有以下几种关系:泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

  (1)泛化(Generalization)

  【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。

  例如:老虎是动物的一种,既有老虎的特性也有动物的共性。

  【箭头指向】:带三角箭头的实线,箭头指向父类

  (2)实现(Realization)

  【实现关系】:是一种类与接口的关系,表示类是接口所有行为的实现。

  【箭头指向】:带有三角箭头的虚线,箭头指向接口

  (3)关联(Association)

  【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,关联可以是双向的,也可以是单向的。

  双向的关联可以有两个箭头或没有箭头,单向的关联有一个箭头。

  【代码体现】:成员变量

  【箭头及指向】:带普通箭头的实心线,指向被拥有者。

  上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。

  但学生与某课程间的关系是单向关联,一名学生可能要上多门课程,课程是个抽象的东西,它不拥有学生。

  下图为自身关联:

  

  (4)聚合(Aggregation)

  【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。

  如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。

  聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

  【代码体现】:成员变量

  【箭头及指向】:带空心菱形的实心线,菱形指向整体

  (5)组合(Composition)  

  【组合关系】:是整体和部分的关系,但部分不能离开整体而单独存在。

  如公司和部门是整体与部分的关系,没有公司就不存在部门。

  组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

  【代码体现】:成员变量

  【箭头及指向】:带实心菱形的实线,菱形指向整体。

  (6)依赖(Dependency)

  【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,要尽量不使用双向的互相依赖。

  【代码体现】:局部变量、方法的参数或者对静态方法的调用

  【箭头及指向】:带箭头的虚线,指向被使用者

  各种关系的强弱顺序:

  泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

  下面这张UML图,比较形象地展示了各种类图关系:

  

最新文章

  1. java文章显示内容部分(将html转成纯文本)
  2. 我的android学习经历12
  3. webapi 获取请求参数
  4. 在windows系统上安装VMware Workstation虚拟机,然后在虚拟机VMware Workstation上安装linux系统,在linux系统安装xshell的服务端,在windows系统上安装xshell。用windows系统上的xshell连接到linux
  5. iOS 开发之粒子效果
  6. HDU 2809 God of War(DP + 状态压缩)
  7. c++ bitset类的使用和简介
  8. Restlet+Fastjson 高速构建轻量级 Java RESTful Webservice
  9. nginx+tomcat+session共享(转)
  10. 开涛spring3(5.4) - Spring表达式语言 之 5.4在Bean定义中使用EL
  11. tomcat启动不了,内存溢出
  12. Redisson分布式锁的简单使用
  13. 【带着canvas去流浪】(2)绘制折线图
  14. sublime 使用快捷键
  15. 初学cdq分治学习笔记(可能有第二次的学习笔记)
  16. Android 网络编程的陷阱
  17. Deep learning深度学习的十大开源框架
  18. 【JS复习笔记】03 继承(从ES5到ES6)
  19. 前端动态属性页面的 要用id做name 因为这样方便在提交表单时候取到值
  20. C++11--右值引用(Perfect Forwarding)

热门文章

  1. 《Web Development with Go》Mangodb插入struct数据
  2. 31.Java基础_日期/日期格式/日历类
  3. center----Iframe 用法的详细讲解
  4. nginx如何实现负载均衡以及实现方式
  5. Eureka工作原理及它和ZooKeeper的区别
  6. File Zilla server安装完报错could not load TLS libraries. aborting start of administration interface
  7. koa2 从入门到进阶之路 (六)
  8. Java描述设计模式(11):观察者模式
  9. JavaWeb中验证码校验的功能实现
  10. RocketMQ(二):producer客户端实践