类图表示不同的实体(人、事物和数据)如何彼此相关,显示了系统的静态结构。类图可用于表示逻辑类,逻辑类通常就是业务人员所谈及的事物种类,比如摇滚乐队、CD、广播剧,或者贷款、住房抵押、汽车信贷及利率的抽象描述。类图还可用于表示实现类,实现类就是程序员要编写的类。实现类图与逻辑类图可能会用来描述一些相同的类。然而,实现类图与逻辑类图不会使用相同的描述属性。

  类图是一个分为三个部分的矩形。最上面的部分显示类的名称,中间部分显示类的属性,最下面的部分显示类的操作(或者说“方法”)。实际上,最常用、最简单的类图就是一个在里面显示了类名的长方形,因为在UML中,大多数类只要有一个能够清楚表达的命名就可以了。

  在类名部分还可以显示类的构造类型。类的构造型显示在一对双角括符号“« »”之间,经常放在类的名称上面。常见的构造类型包括实现类(直接显示类名)、接口(在类名上面显示 «interface»),以及工具类(在类名上面显示 «utility»)。如果类名用斜体表示,或者在类名下面标上{abstract},就表示这个类是一个抽象类。

  在属性和方法的前面有一个字符用来表示属性或方法的作用域,它们的意义如下:

  —“-”表示属性或方法是私有的(private);

  —“#”表示属性或方法是保护的(protected);

  —“+”表示属性或方法是公用的(public)。

  紧接在属性或方法的参数名称的冒号(:)号之后,显示了属性的类型或方法的参数的类型。方法的返回值类型显示在方法后面的冒号之后。

  下图显示了一个类Person的类图,它对应的类的C#源代码如下:

  Person

  +name: string

  +sex: char

  -age: int

  +Work(in type: string): void

  +Person(in name: string, in sex: char, in age: int): void

  +Speak(): void

  +Eat(): void

  类图示意

  类图示意

  class Person

  {

  public string name;

  public char sex;

  private int age;

  public Person(string name, char sex, int age)

  {

  }

  public void Eat()

  {

  }

  public void Speak()

  {

  }

  public void Work(string type)

  {

  }

  }

  对象图用来表示类的实例化对象。对象图用一个两层的矩形来表示,上层标识对象名和类名,下层标识对象的实例化属性值。下面的代码将创建一个Person类的对象mary:

  Person mary = new Person("Mary", 'F', 24);

  对象mary的对象图如图所示:

  mary: Person

  name: string ="Mary"

  sex: char ='F'

  age: int =24

  对象图示例

  在一个系统中,类之间存在多种关系,如下所示。

  — 继承(inheritance):继承是指一个类从其父类派生而来,继承了父类的属性和方法。基于类的继承叫做一般化(generalization),基于接口的继承,叫做实现(realization)。

  — 关联(association):类之间的关联大多用来表示变量实例持有对其他对象的引用,这种关系是半永久的,但没有包含关系。

  — 依赖(dependency):依赖是不同类的实例之间的暂时关系。

  — 聚合(aggregation):聚合是关联的一种特殊形式,它意味着一种整体/部分(whole/part)的关系,但是部分也可以作为其他整体的组分,而且部分和整体之间也没有生命期的依赖。

  — 组合(composition):组合是聚合的一种特殊形式,组合的关联性比聚合更强,部分只能作为唯一的一个整体的部分,而且部分的生命周期依赖于整体的生命周期。

  UML类图对这些关系的表示方法如图6-5所示。具有关联、聚合和组合关系的两个对象之间可能是没有数量关系的一种联系,也可能存在数量关系,比如1对1(不标识)、0个或1个(标识为0…1)、0个或多个(标识为0…*或0…n)、1个或多个(标识为1…*或1…n)或者确切的数字(直接标识数字)。

  图6-6显示了一个包含了图6-2中的对象的类图。其中包括一个继承关系和两个关联关系。CDSalesReport类继承自Report类。一个CDSalesReport类与一个CD类关联,但是CD类并不知道关于CDSalesReport类的任何信息。CD类和Band类都彼此知道对方,两个类彼此都可以与一个或者多个对方类相关联。

  UML类图之间的关系表示方法

  包含关系的类图

  下图显示了一个包含多种关系的类图的另一个例子。Person类实现了IHuman接口,Author类继承了Person类;Book类与Author类之间的关联是1对多的,即一本书可能有一个或多个作者;Person读书,这是一种暂时的单向依赖;Book由一个或多个Page组成,每一个Page只能作为一本Book的一部分,这是一种组合关系;Bookshelf里可以不放或者放多本Book,Book也可以放在其他的Bookshelf中,Bookshelf的存在并不能影响Book的存在性,这是一种聚合关系。

  一个包含多种关系的类图

  表示各对象之间的关系的对象图说明了系统在某一个特定时刻的状态,经常叫做系统的快照(snapshot)。

  内幕:UML与源代码

  UML是一种设计语言,它的目的不是表现细节,而是表现结构,仅仅展示必要的细节。因此,UML不可能与源代码一一对应,只存在结构上的对应关系。作为一种参考,下面列出了图6-7中的类图的C#源代码:

  interface IHuman

  {

  }

  class Person : IHuman

  {

  void Read(Book book)

  {

  // …

  }

  }

  class Author : Person

  {

  public Book[] books;

  }

  class Book

  {

  public Author author;

  public Page[] pages;

  }

  class Page

  {

  }

  class Bookshelf

  {

  public Book[] books;

  }

UML表示类图和对象图的更多相关文章

  1. (转)UML实践----用例图、类图、对象图、顺序图、协作图、状态图、活动图、组件图、配置图

    面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML ...

  2. ****** 五十 ******、软设笔记【UML分析和意义】-类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图,动静态模式

    一.类图(Class Diagram) 描述一组类.接口.协作已经它们之间的图,用来显示系统中各个类的静态结构图. 类之间的关系(relationship) *依赖(dependency) *泛化(g ...

  3. [UML]UML系列——类图class的实现关系Realization

    系列文章 [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列——类图Class   ...

  4. 类图和对象图教程-类(Class)、接口(Interface)、协作(collaboration)、依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)以及实现关系(Realization)

    类图的概念 (转) 一.概述 类图(Class Diagram)是描述类.接口.协作以及它们之间关系的图,用来显示系统中各个类的静态结构.类图是定义其他图的基础,在类图基础上,可以使用状态图.协作图. ...

  5. [UML]UML系列——类图class的关联关系(聚合、组合)

    关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation) 假设:一个公司 ...

  6. [UML]UML系列——类图class的依赖关系

    相关文章          [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列—— ...

  7. [UML]UML系列——类图class的泛化关系

    系列文章       [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列——类图C ...

  8. UML(一) 类图及类间关系

    原创文章,同步发自作者个人博客,http://www.jasongj.com/uml/class_diagram/ UML类图 UML类图介绍 在UML 2.*的13种图形中,类图是使用频率最高的UM ...

  9. UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...

随机推荐

  1. codeforces269B

    Greenhouse Effect CodeForces - 269B Emuskald is an avid horticulturist and owns the world's longest ...

  2. 实现类数组转化成数组(DOM 操作获得的返回元素值是一个类数组)

    目标 实现类数组转化成数组 实例 链接地址 使用方法 const foo = document.querySelectorAll('.result') //链接地址输入控制台输入这行代码 const ...

  3. vue 甘特图简单制作

    甘特图(Gantt chart)又称为横道图.条状图(Bar chart).其通过条状图来显示项目,进度,和其他时间相关的系统进展的内在关系随着时间进展的情况.以提出者亨利·L·甘特(Henrry L ...

  4. Linux添加磁盘和挂载

    1.新建一个虚拟磁盘,例:20GB 2.重启后使用 fdisk -l 查看磁盘详细信息,刚添加的磁盘信息如下: 3.对刚添加的磁盘进行分区 fdisk /dev/sdc 4.格式化分区 mkfs.ex ...

  5. mock的那点事

    前言: Mock在GitHub上有12.9K的star可以看出,它在技术团队中是挺受欢迎的.这项技术被应用在不同领域的项目中. 适用场景: 下面我结合我们技术团队,列举最适合引入我们Mock服务的场景 ...

  6. shell 之 用linux定时任务crontab和watchdog.sh脚本做软件看门狗

    1.简介 看门狗的作用是定期检测服务正常运行,如果发现服务不在了,会重新拉起服务:linux中可以利用系统的定时任务功能crontab定期的去执行watchdog.sh脚本,而watchdog.sh脚 ...

  7. 关于web前端开发,区别用户使用的终端设备代码

    对web前端开发,熟知不同的浏览器,的解析是基本技能,下面,我就向大家展示一下,如何获得当前用户所用的终端设备.车子一发动,请准备上车................... <script> ...

  8. springboot加载bean过程探索

    springboot一般通过以下main方法来启动项目 @SpringBootApplication public class DemoApplication { public static void ...

  9. (七)C语言之顺序结构

  10. 2018-2019-2 20165215《网络对抗技术》Exp8 Web基础

    目录 实验内容 基础问题回答 实验步骤 (一)Web前端HTML (二) Web前端javascipt (三)Web后端:MySQL基础:正常安装.启动MySQL,建库.创建用户.修改密码.建表 (四 ...