这一次是转载的Class Diagram,只是自己做了简单的整理。

第一篇:深入浅出UML类图(一)

在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A

Brief Guide to the Standard Object Modeling Language, Third Edition》(《UML精粹:标准对象建模语言简

明指南(第3版)》)中有这么一段:“If someone were to come up to you in a dark alley and say, 'Psst,

wanna see a UML diagram?' that diagram would probably be a class diagram. The majority of UML

diagrams I see are class diagrams.”(“如果有人在黑暗的小巷中向你走来并对你说:‘嘿,想不想看一张UML

图?’那么这张图很有可能就是一张类图,我所见过的大部分的UML图都是类图”),由此可见类图的重要性。

类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶

段的重要产物,也是系统编码和测试的重要模型依据。

       1. 类

       类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。

在系统中,每个类都具有一定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。一个类可以有多种

职责,设计得好的类一般只有一种职责。在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。类的属

性即类的数据职责,类的操作即类的行为职责。设计类是面向对象设计中最重要的组成部分,也是最复杂和最耗时的

部分。

在软件系统运行时,类将被实例化成对象(Object),对象对应于某个具体的事物,是类的实例(Instance)。

       类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。

在系统分析与设计阶段,类通常可以分为三种,分别是实体类(Entity Class)、控制类(Control Class)和边界类(Boundary Class),下面对这三种类加以简要说明:

(1) 实体类:实体类对应系统需求中的每个实体,它们通常需要保存在永久存储体中,一般使用数据库表或文件来记录,实体类既包括存储和传递数据的类,还包括操作数据的类。实体类来源于需求说明中的名词,如学生、商品等。

   (2) 控制类:控制类用于体现应用程序的执行逻辑,提供相应的业务操作,将控制类抽象出来可以降低界面和数据库之间的耦合度。控制类一般是由动宾结构的短语(动词+名词)转化来的名词,如增加商品对应有一个商品增加类,注册对应有一个用户注册类等。

  (3) 边界类:边界类用于对外部用户与系统之间的交互对象进行抽象,主要包括界面类,如对话框、窗口、菜单等。

在面向对象分析和设计的初级阶段,通常首先识别出实体类,绘制初始类图,此时的类图也可称为领域模型,包括实体类及其它们之间的相互关系。

       2. 类的UML图示

在UML中,类使用包含类名、属性和操作且带有分隔线的长方形来表示,如定义一个Employee类,它包含属

性name、age和email,以及操作modifyInfo(),在UML类图中该类如图1所示:

图1 类的UML图示

图1对应的Java代码片段如下:

[java] view plain copy
  1. public class Employee {
  2. private String name;
  3. private int age;
  4. private String email;
  5. public void modifyInfo() {
  6. ......
  7. }
  8. }

在UML类图中,类一般由三部分组成:

(1) 第一部分是类名:每个类都必须有一个名字,类名是一个字符串。

(2) 第二部分是类的属性(Attributes):属性是指类的性质,即类的成员变量。一个类可以有任意多个属性,也可以没有属性。

UML规定属性的表示方式为:

可见性  名称:类型 [ = 缺省值 ]

其中:

  • “可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号+、-和#表示。
  • ‚      “名称”表示属性名,用一个字符串表示。
  • ƒ      “类型”表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。
  • „      “缺省值”是一个可选项,即属性的初始值。

(3) 第三部分是类的操作(Operations):操作是类的任意一个实例对象都可以使用的行为,是类的成员方法。

UML规定操作的表示方式为:

可见性  名称(参数列表) [ : 返回类型]

其中:

  •       “可见性”的定义与属性的可见性定义相同。
  • ‚“名称”即方法名,用一个字符串表示。
  • ƒ“参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“,”隔开。
  • „      “返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回类型。

在类图2中,操作method1的可见性为public(+),带入了一个Object类型的参数par,返回值为空(void);操作method2的可见性为protected(#),无参数,返回值为String类型;操作method3的可见性为private(-),包含两个参数,其中一个参数为int类型,另一个为int[]类型,返回值为int类型。

图2 类图操作说明示意图

由于在Java语言中允许出现内部类,因此可能会出现包含四个部分的类图,如图3所示:

图3 包含内部类的类图

【作者:刘伟  http://blog.csdn.net/lovelion】

第二篇:深入浅出UML类图(二)

类与类之间的关系(1)

在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示

方式。

       1. 关联关系

关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对

象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。在UML类图中,用实线连接有关联关系的对象所对应的类,在使用Java、C#和C++等编程语言实现关联关系时,通常将一个类的对象作为另一个类的成员变量。在使用类图表示关联关系时可以在关联线上标注角色名,一般使用一个表示两者之间关系的动词或者名词表示角色名(有时该名词为实例对象名),关系的两端代表两种不同的角色,因此在一个关联关系中可以包含两个角色名,角色名不是必须的,可以根据需要增加,其目的是使类之间的关系更加明确。

如在一个登录界面类LoginForm中包含一个JButton类型的注册按钮loginButton,它们之间可以表示为关联关系,代码实现时可以在LoginForm中定义一个名为loginButton的属性对象,其类型为JButton。如图1所示:

图1 关联关系实例

图1对应的Java代码片段如下:

[java] view plain copy
  1. public class LoginForm {
  2. private JButton loginButton; //定义为成员变量
  3. ……
  4. }
  5. public class JButton {
  6. ……
  7. }

在UML中,关联关系通常又包含如下几种形式:

      (1) 双向关联

默认情况下,关联是双向的。例如:顾客(Customer)购买商品(Product)并拥有商品,反之,卖出的商品总有某个顾客与之相关联。因此,Customer类和Product类之间具有双向关联关系,如图2所示:

图2  双向关联实例

图2对应的Java代码片段如下:

[java] view plain copy
  1. public class Customer {
  2. private Product[] products;
  3. ……
  4. }
  5. public class Product {
  6. private Customer customer;
  7. ……
  8. }

      (2) 单向关联

类的关联关系也可以是单向的,单向关联用带箭头的实线表示。例如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关联关系,如图3所示:

图3 单向关联实例

图3对应的Java代码片段如下:

[java] view plain copy
  1. public class Customer {
  2. private Address address;
  3. ……
  4. }
  5. public class Address {
  6. ……
  7. }

      (3) 自关联

在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如:一个节点类(Node)的成员又是节点Node类型的对象,如图4所示:

图4 自关联实例

图4对应的Java代码片段如下:

[java] view plain copy
  1. public class Node {
  2. private Node subNode;
  3. ……
  4. }

      (4) 多重性关联

多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示。

对象之间可以存在多种多重性关联关系,常见的多重性表示方式如表1所示:

表1  多重性表示方式列表

表示方式

多重性说明

1..1

表示另一个类的一个对象只与该类的一个对象有关系

0..*

表示另一个类的一个对象与该类的零个或多个对象有关系

1..*

表示另一个类的一个对象与该类的一个或多个对象有关系

0..1

表示另一个类的一个对象没有或只与该类的一个对象有关系

m..n

表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

例如:一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联,如图5所示:

图5 多重性关联实例

图5对应的Java代码片段如下:

[java] view plain copy
  1. public class Form {
  2. private Button[] buttons; //定义一个集合对象
  3. ……
  4. }
  5. public class Button {
  6. ……
  7. }

      (5) 聚合关系

聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。在UML中,聚合关系用带空心菱形的直线表示。例如:汽车发动机(Engine)是汽车(Car)的组成部分,但是汽车发动机可以独立存在,因此,汽车和发动机是聚合关系,如图6所示:

图6  聚合关系实例

在代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的参数注入到整体对象中,图6对应的Java代码片段如下:

[java] view plain copy
  1. public class Car {
  2. private Engine engine;
  3. //构造注入
  4. public Car(Engine engine) {
  5. this.engine = engine;
  6. }
  7. //设值注入
  8. public void setEngine(Engine engine) {
  9. this.engine = engine;
  10. }
  11. ……
  12. }
  13. public class Engine {
  14. ……
  15. }

      (6) 组合关系

组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。在UML中,组合关系用带实心菱形的直线表示。例如:人的头(Head)与嘴巴(Mouth),嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系,如图7所示:

图7  组合关系实例

在代码实现组合关系时,通常在整体类的构造方法中直接实例化成员类,图7对应的Java代码片段如下:

[java] view plain copy
  1. public class Head {
  2. private Mouth mouth;
  3. public Head() {
  4. mouth = new Mouth(); //实例化成员类
  5. }
  6. ……
  7. }
  8. public class Mouth {
  9. ……
  10. }

【作者:刘伟 http://blog.csdn.net/lovelion】

UML建模学习6:Class Diagram(一)相关推荐

  1. [UML建模]状态图(Statechart Diagram)

    绘图工具 StarUML 3.2.2 1.什么是状态图? UML 状态图是图表本身的名称,主要用于描述对象具有的各种状态.状态之间的转换过程以及触发状态转换的各种事件和条件. 2.状态机的目的 为了模 ...

  2. UML建模之类图(Class Diagram,UML图)

    看了下,挺好! 本文针对类之间常用的关系进行了简单的描述,主要有: 1)关联关系 2)泛化 3)依赖 4)聚合 5)组合 更详细的信息,参考 http://smartlife.blog.51cto.c ...

  3. UML建模之时序图(Sequence Diagram)转

    UML建模之时序图(Sequence Diagram) 一.时序图简介(Brief introduction) 二.时序图元素(Sequence Diagram Elements) 角色(Actor) ...

  4. 【设计模式】UML建模之包图、组件图和部署图学习笔记

    UML建模中包图.组件图和部署图学习笔记 对于较大的项目进行UML建模,由于有很多的类和用例,仅仅利用类图和用例图的话,常常会使结构变得更为复杂.此时如果可以以功能模块划将类图和用例图进行封装,可以很 ...

  5. 软件设计师学习笔记-UML建模

    UML建模 用例图 类图与对象图 顺序图 活动图 带泳道的活动图 状态图 通信图 协作图(顺序图的另外一种表达方式)

  6. UML建模系列文章总结

    一.为什么要学习UML 二.UML的历史 三.UML的特点 四.UML中的视图 五.UML建模工具 六.UML的应用领域 七.UML的构成 1.需求阶段如何书写Use Case 2.设计阶段如何画用例 ...

  7. UML建模系列文章总结 (转载)

    一.为什么要学习UML 二.UML的历史 三.UML的特点 四.UML中的视图 五.UML建模工具 六.UML的应用领域 七.UML的构成 1.需求阶段如何书写Use Case 2.设计阶段如何画用例 ...

  8. [UML]UML系列——状态机图statechart diagram

    [UML]UML系列--状态机图statechart diagram 原文:[UML]UML系列--状态机图statechart diagram 系列文章 [UML]UML系列--用例图Use Cas ...

  9. UML建模系列文章总结 [转]

    一.为什么要学习UML 二.UML的历史 三.UML的特点 四.UML中的视图 五.UML建模工具 六.UML的应用领域 七.UML的构成 1.需求阶段如何书写Use Case 2.设计阶段如何画用例 ...

最新文章

  1. K-近邻算法实现简单filmClassify
  2. office 2007 oracle 9,office2007win10版下载
  3. 数位板驱动压力测试_【又来甩锅了】数位板/数位屏延迟怎么办?
  4. leetcode刷题日记-三个无重叠子数组的最大和
  5. java thread detach_Java多线程小结
  6. python爬取网易付费音乐包_爬取网易云音乐“三部曲”(三):轻松下载网易音乐歌曲!...
  7. CentOS yum方式升级内核kernel
  8. mysql查询字段最大的一条数据类型_SQL查询一个表中类别字段中Max()最大值对应的记录...
  9. 10月最新720全景云系统,可生成小程序+带PC端+安装教程
  10. 【数据库】一篇文章搞掂:Oracle数据库
  11. python len()函数的用法
  12. 1、SONIX单片机新建工程与烧录流程
  13. 【笔记:Spring】
  14. 条码打印机跳纸是怎么回事
  15. Linux进程描述符task_struct结构体
  16. 新版标准日本语初级_第六课
  17. 【ArcGIS平台系列】ArcGIS平台,打造可落地的新一代Web GIS
  18. Android的一些开源项目集锦 以备以后研究
  19. android 后退键
  20. 未来三大主机谁将占领游戏的主战场

热门文章

  1. k8s--重启后报错:The connection to the server lb.kubesphere.local:6443 was refused - did you specify the r
  2. java-php-python-ssm预防接种服务平台计算机毕业设计
  3. 如何用一行C++代码读写数据库
  4. 蒙特祖玛的宝藏 2 for Mac(消除类游戏)
  5. 中投证券L2接口文件说明
  6. Win11右键菜单选项变成英文了怎么恢复回来?
  7. 德国斯派克SPECTRO光谱仪电源维修SAI-EK0606
  8. [Pandas] 筛选DataFrame含有空值的数据行
  9. 你以为爱情是为了什么
  10. STL简介string的使用及其模拟实现