作者:郭孝星

微博:郭孝星的新浪微博

邮箱:allenwells@163.com

博客:http://blog.csdn.net/allenwells

Github:https://github.com/AllenWells

类图用于描写叙述系统中所包含的类以及它们之间的相互关系,它是系统分析和设计阶段的重要产物,也是系统编码和測试的重要模型根据。

一 类图结构

类封装了数据和行为,它是具有同样属性、操作和关系的对象集合的总称。

在系统分析与设计阶段。类通常分为三种:

  • 实体类:实体类是系统需求中的实体,实体类通常保存在永久记忆体中,一般使用数据库表或文件来记录。实体类既包含存储数据的类、传递数据的类和操作数据的类。实体类通常来源于需求说明中的名词(比如:用户、产品)。
  • 控制类:控制类体现了应用的运行逻辑,提供相应的业务操作。将控制类抽象出来能够减少界面和数据库之间的耦合度。

    控制类通常有动词+名词来命名(比如:UserRegister)。

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

类的组成

例如以下图所看到的:

  • 类名:类的名字
  • 属性:类的成员变量
  • 操作:类的成员方法

属性的表示方式例如以下所看到的:

可见性 名称:类型[=缺省值]
  • 可见性:public、private和protected,在类图中分别用+、-和#表示。
  • 名称:属性的名称。
  • 类型:属性的数据类型,能够是基本数据类型,也能够是用户自己定义的类型。

  • 缺省值:可选项,表示属性的初始值。

二 类图关系

2.1 关联

关联是一种结构化关系。用于表示一类对象与还有一类对象之间有联系。

在UML类图中。用实线连接有关联关系的对象所相应的类。

2.1.1 双向关联

双向关联表示双向关联是双向的。

2.1.2 单向关联

单向表示关联是单向的。

2.1.3 自关联

自关联表示类的属性对象类型为该类本身。

2.1.4 多重关联

多重关联又称为重数性关联,表示两个关联对象在数量上的相应关系。

常见的多重关联例如以下所看到的:

  • 1..1 表示还有一个类的一个对象仅仅与该类的一个对象有关系
  • 0..* 表示还有一个类的一个对象与该类的零个或多个对象有关系
  • 1..* 表示还有一个类的一个对象与该类的一个或多个对象有关系
  • 0..1 表示还有一个类的一个对象没有或仅仅与该类的一个对象有关系
  • m..n 表示还有一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

2.2 聚合/组合

2.2.1 聚合

聚合表示总体和部分关系,在聚合关系中成员对象是总体的对象的部分,可是成员对象能够脱离总体对象独立存在。

在UML中,聚合关系用带空心菱形的直线表示,例如以下图所看到的:

在代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的參数注入到总体对象中。例如以下所看到的:

public class Car
{
private Engine engine; //构造注入
public Car(Engine engine)
{
this.engine = engine;
} //设值注入
public void setEngine(Engine engine)
{
this.engine = engine;
} } public class Engine
{
……
}

2.2.2 组合

组合关系也表示总体和部分的关系。可是在组合关系汇总总体对象能够控制成员对象的生命周期,一旦总体对象不存咋了。成员对象也将不存在。

在UML中,组合关系用带实心菱形的直线表示,例如以下图所看到的:

在代码实现组合关系时,通常在总体类的构造方法中直接实例化成员类,例如以下所看到的:

public class Head
{
private Mouth mouth; public Head()
{
mouth = new Mouth(); //实例化成员类
}
} public class Mouth
{
……
}

2.3 依赖

依赖关系是一种使用关系,依赖关系通常体如今某个类的方法使用还有一个类的对象作为參数。

在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。例如以下图所看到的:

在代码实现依赖关系时,通常有三种方式,例如以下所看到的:

  • 将一个类的对象作为还有一个类中方法的參数
  • 在一个类的方法中将还有一个类的对象作为其局部变量
  • 在一个类的方法中调用还有一个类的静态方法
public class Driver
{
public void drive(Car car)
{
car.move();
}
} public class Car
{
public void move()
{
……
}
}

2.4 继承

继承关系用来描写叙述父类与子类自检的关系。

在UML中。泛化关系用带空心三角形的直线来表示。例如以下图所看到的:

在代码实现时。我们使用面向对象的继承机制来实现继承关系,例如以下所看到的:

//父类
public class Person
{
protected String name;
protected int age; public void move()
{
……
} public void say()
{
……
}
} //子类
public class Student extends Person
{
private String studentNo; public void study()
{
……
}
} //子类
public class Teacher extends Person
{
private String teacherNo; public void teach()
{
……
}
}

2.5 接口与实现

接口之间也能够有像类之间关系那样的继承关系和依赖关系,可是接口和类之间还存在着一种实现关系。

在实现关系中。类实现了接口中定义的全部操作。

在UML中。类与接口之间的实现关系用带空心三角形的虚线来表示。例如以下图所看到的:

在代码实现时使用implents关键字,例如以下所看到的:

public interface Vehicle
{
public void move();
} public class Ship implements Vehicle
{
public void move()
{
……
}
} public class Car implements Vehicle
{
public void move()
{
……
}
}

UML类图简明教程的更多相关文章

  1. 最全Pycharm教程(43)——Pycharm扩展功能之UML类图使用 代码结构

    版权声明:本文为博主原创文章,转载时麻烦注明源文章链接,谢谢合作 https://blog.csdn.net/u013088062/article/details/50353202 1.什么是UML ...

  2. 转:深入浅出UML类图(具体到代码层次)

    深入浅出UML类图 作者:刘伟 ,发布于:2012-11-23,来源:CSDN   在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML ...

  3. 深入浅出UML类图(一)

    在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the Standard O ...

  4. 深入浅出UML类图

    原作者:http://www.uml.org.cn/oobject/201211231.asp 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作&l ...

  5. 深入了解UML类图

    深入浅出UML类图 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the ...

  6. 【转】深入浅出UML类图

    转自:http://www.cppblog.com/API/archive/2013/07/04/201506.html 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin ...

  7. ABP源码uml类图

    陆陆续续学习ABP框架有一段时间了,阳光铭睿的入门教程和HK Zhang的源码分析文章对我的学习帮助都很大.之所以会花这么大工夫去学习ABP.看ABP的源代码,一是因为本人对于DDD也非常有兴趣,AB ...

  8. 再学UML-深入浅出UML类图(一)

    在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the Standard O ...

  9. 架构-UML类图

    在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the Standard O ...

随机推荐

  1. MFC 对话框阴影效果

    在 OnInitDialog(Cdialog)里面添加 SetClassLong(this->m_hWnd, GCL_STYLE, GetClassLong(this->m_hWnd, G ...

  2. (转载--修改)使用Xcode9的Instruments检测解决iOS内存泄露

    作为一名iOS开发攻城狮,在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我 ...

  3. nginx进行项目域名配置时提示Job for nginx.service failed

    ps aux | grep nginx /bin/systemctl stop nginx.service /bin/systemctl start nginx.service /bin/system ...

  4. HDOJ 2222: Keywords Search

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  5. [水] POJ 3096

    Surprising Strings Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7659   Accepted: 487 ...

  6. 【shell】Shell命令合集(0)

    Ccat zdd 浏览文件zdd的内容cat zdd1 zdd2 浏览多个文件的内容cat -n zdd浏览文件zdd的内容并显示行号 cd 回到起始目录,也即刚登陆到系统的目录,cd后面无参数cd ...

  7. 和菜鸟一起学android4.0.3源码之lcd屏幕背光调节

    周六的中午还是依旧来了公司,本来也没有打算来的,既然来了,那就把上次遗留下来的一些问题给解决吧,把android下的pwm调lcd背光给总结下吧.关于android的背光,是用pwm波来控制的,通过占 ...

  8. .NET CMS系统--pageAdmin 模板样式设置

    修改方法: 表单模型管理 - 数据表管理 - 模型管理 修改产品详情页

  9. PHP安装oracle的php_oci和oci8扩展

    环境:centos6.9 php5.3.3 oracle客户端:下载链接:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277 ...

  10. AndroidStudio不重新运行,Debug调试已有进程

    们在使用AndroidStudio进行编写Android应用程序的时候,经常需要对抛出的问题进行断点调试跟踪,如果不知道怎样直接调试已经运行的进程.那么调试的效率会非常低下!下面我就来教大家如何快速调 ...