java类图_java UML类图的使用-UML基础-火龙果软件工程

  • Post author:
  • Post category:java


类图

是用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。学习好类图的绘制,是一位合格的软件工程师应有的技能。

1.类的UML图示

在UML中,类使用包含类名,属性和方法且带有分隔线的长方形来表示

例如定义一个Person类,包含属性name,age,拥有eating方法,则UML类图如下图示:

9e2ab36ecbcae7d4255c10b2321e1cc7.png

Person类

对应的java代码为:

public

class Person {

private String name;

private int age;

public void eating() {

……

}

}

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

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

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

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

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

其中:

“可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private),友好的(friendly,代表package)和受保护(protected)三种,在类图中分别用符号+、-,~和#表示。

“名称”表示属性名,用一个字符串表示。

“类型”表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。

“缺省值”是一个可选项,即属性的初始值。

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

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

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

其中:

“可见性”的定义与属性的可见性定义相同。

“名称”即方法名,用一个字符串表示。

“参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“,”隔开。

“返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回类型。

2.类之间的关系

类不是孤立存在的,类与类之间存在各种关系包括:关联关系,聚合关系,组合关系,依赖关系,泛化关系。每种关系对应i不同的图示

(1)依赖关系

依赖关系是类与类之间最弱的关系,是指一个类(依赖类)使用或知道另外一个类(目标类)。它是一个典型的瞬时关系,依赖类和目标类进行简单的交互,但是依赖类并不维护目标类的对象,仅仅是零时使用而已。例如对于窗体类window,当它关闭时会发送一个类windowclosingevent对象,这里也就可以说窗体类window使用了类windowclosingevent,他们之间的依赖关系如下图示:

ba87fd50d1f4344b1c4a0a21b133bc85.png

依赖关系用虚线箭头表示

(2)关联关系

9c1430a6e4229143b4b4781e2c960ca5.png

关联关系是一种比依赖关系更强的关系,是指一个类“拥有”另一个类,表示类之间的一种持续一段时间的合作关系,包括有单向关联和双向关联关系。

单向关联:类A与类B是单向关联关系,是指类A包含类B对象的引用,但是类B并不包含类A对象的引用,例如银行用户类(client)包含账户类(Bankacount)的引用,但是反过来却不是。在类图中,通过从类A画一条带箭头的单向实线到类B来表示他们之间的单项关联关系,箭头方向指向B。如下图:

单向关联.PNG

在上图中,连接两个类的箭头线两头的数字即代表它们之间的数量关系,例如上图,代表一个client类包含了0到多个BankAcount类的引用,并且BankAcount类在client中的引用是私有变量:accounts.

表达数量的形式有:

表达方式 数量说明

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

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

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

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

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

双向关联:类A与类B如果包含对方的引用,则称类A与类B是双向关联的关系。例如,在一个需求描述中,一个学生(student)可以拥有其选秀的六门课程的信息,一门课程(course)可以包含选修该门课程的任意多个学生的信息。如下图:

947071298e3327b547abb0568c610e2a.png

双向关联

双向关联用双向箭头连接两个类

(3)聚合关系

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

04bb59c0b3aacf499cd9dff717b9bc04.png

聚合关系

在代码实现聚合关系时,成员对象通常作为构造方法、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 {

……

}

(4)组合关系

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

8783db77363296b9fe2bd16b9a0da830.png

组合关系

在代码实现组合关系时,通常在整体类的构造方法中直接实例化成员类

public

class Head {

private Mouth mouth;

public Head() {

mouth = new Mouth(); //实例化成员类

}

……

}

public class Mouth {

……

}

(5)泛化关系

泛化(Generalization)关系也就是继承关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在UML中,泛化关系用带空心三角形的直线来表示,如下图:

479c389b1f55f7b0df513ec2fbb989c8.png

泛化关系

*在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示

7c987b262e35233dd900d22e4a80c286.png

接口实现关系

以上便是UML类图的一些简单实用了,希望对你有帮助,另外,此文章参考了csdn版主刘伟老师的博客



版权声明:本文为weixin_39695306原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。