Java利器之UML类图详解
前⾔
UML(Unified Modeling Language)中⽂统⼀建模语⾔,是⼀种开放的⽅法,⽤于说明、可视化、构建和编写⼀个正在开发的、⾯向对象的、软件密集系统的制品的开放⽅法。UML展现了⼀系列最佳⼯程实践,这些最佳实践在对⼤规模,复杂系统进⾏建模⽅⾯,特别是在软件架构层次已经被验证有效。 【】
最近看⼀些开源项⽬的时候,总是看到UML中的类图,⼀开始⾃⼰的做法就是跳过去类图的部分,不过后来⼜遇到了⼏次,就决定学习下,不能再选择逃避了,这也是⼀个即将优秀的程序探索者应该必备的素质。今天把⾃⼰学习到的内容记录⼀下(怕健忘…),相信对类图不清楚的朋友,通过读取这篇⽂章后也能有⼀个⽐较清晰的认识,让你看的懂,画的出。
类图作⽤
类图是软件⼯程的统⼀建模语⾔⼀种静态结构图,该图描述了系统的类集合,类的属性和类之间的关系。帮助⼈们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。学习好类图的绘制,是⼀位合格的软件⼯程师应有的技能。
类的UML图⽰
在UML类图中,类使⽤包含类名,属性,⽅法名及其参数并且⽤分割线分隔的长⽅形表⽰。例如最简单的⼀个类Person 类有两个属性分别是name和age,并提供对应的get和set⽅法。java类代码如下
/***********************************************************************
* Module:  Person.java
* Author:  Code4Android
* Purpose: Defines the Class Person
***********************************************************************/
import java.util.*;
/** @pdOid 4615fa10-38a3-446e-a7d5-59dcb3e786b5 */
public class Person {
/** @pdOid f314a698-c3c1-4ec7-a8ea-f8b2df107a29 */
private String name = zhangsan;
/** @pdOid 271c633b-87e5-4b41-9f70-2ce320635014 */
private int age = 23;
/** @pdOid ccf5b7c1-d005-4a5f-b823-9988f2dd6f91 */
public String getName() {
// TODO: implement
return name;
}
java开发可视化界面/** @pdOid 83e01fba-b004-498e-b7ab-778de8be6dfa */
public int getAge() {
// TODO: implement
return age;
}
/** @param name
* @pdOid 9525895a-11bf-44a3-afed-b4a014540a98 */
public void setName(String name) {
// TODO: implement
this.name=name;
}
/** @param age
* @pdOid 16fd66cc-2af1-4fef-ae98-2a37f495a487 */
public void setAge(int age) {
/
/ TODO: implement
this.age=age;
}
}
那么⽤类图表⽰如下,它很简单的表⽰出了类的所有信息。
通过上⾯的Person的类图,你应该可以看出类图有三部分组成,类名,属性和操作⽅法
类名
顾名思义就是类的名字,对应于Java类中的类名,如果该类是抽象类的话,在类名右下⾓会有⼀个(Ab
stract)表⽰,假如Person是⼀个抽象类的话,则UML类图如下
属性名
UML中的属性名就是Java中的成员变量,当然⼀个类可以没有属性也可以有任意多个属性。Java类中成员变量的修饰符,类型和默认值都可以在UML类图中体现出来。通⽤表⽰⽅法如下
可见性名称:类型 [ =默认值 ]
在Java类中可见性分为三类,分别是private,public 和protected,在类图中分别⽤符号-、+和#表⽰。通⽤表⽰⽅法中名称就成员变量的名字,类型就是成员变量的类型如String类型,int类型等,当然也可以是⾃定义类型。⽽后⾯的默认值是可选参数,如果我们没有给成员变量设置初始值,UML类图中就不显⽰,如上⾯Person类图,变量name,age没有设置初始值,如果此时我们给name和vaule分别设
置默认值zhangsan,23。则UML类图如下
操作⽅法
可见性名称(参数列表) [ : 返回类型]
类的操作⽅法通⽤表⽰⽅式如上,⽅法可见性和属性可见性是⼀致的,名称就是⽅法名,参数列表是可选像,可以是对个参数也是没有参数,若多个参数⽤英⽂逗号隔开,返回类型是⼀个可选项,表⽰⽅法的返回值类型,依赖于具体的编程语⾔,可以是基本数据类型,也可以是⽤户⾃定义类型,还可以是空类型(void),如果是构造⽅法,则⽆返回类型。
类之间的关系
在UML类图中类与类之间存在多种关系,如泛化(Generalization)关系,实现(Realization)关系,依赖
(Dependence)关系,关联(Association)关系,聚合(Aggregation)关系, 组合(Composition)关系。
泛化(Generalization)关系
泛化关系也就是Java中的继承,类和类,接⼝和接⼝都可以是继承关系,⽗类⼜称作基类或超类,⼦类⼜称作派⽣类,类继承⽗类后可以实现⽗类的所以功能,并能拥有⽗类没有的功能。在UML中,泛化关系可以⽤带空⼼三⾓形的直线来表⽰;例如我们创建两个Java类Teachers和Students类如下代码
/***********************************************************************
* Module:  Teachers.java
* Author:  Code4Android
* Purpose: Defines the Class Teachers
***********************************************************************/
import java.util.*;
/** @pdOid b54e2d34-d17e-4f2d-993d-563b8e007db4 */
public class Teachers extends Person {
/** @pdOid 55b38630-1e30-449b-9cb7-f8ef9de59412 */
private int tNumber;
/** @pdOid f603d47d-a51f-4b0c-b10b-881842374f8a */
public String teach() {
// TODO: implement
return"I am teaching";
}
}
/***********************************************************************
* Module:  Students.java
* Author:  Code4Android
* Purpose: Defines the Class Students
***********************************************************************/
import java.util.*;
/** @pdOid 6b8ac239-000e-46d3-8233-962a612c12bd */
public class Students extends Person {
/** @pdOid 0c7627fd-fa78-4f60-a859-2b90274323e1 */
private int sNumber;
/** @pdOid 1f929347-b84a-4a54-9ca9-144de66c742b */
public String study() {
// TODO: implement
return"I am learning";
}
}
则UML类图如下
实现(Realization)关系
实现关系在java中就是⼀个类和接⼝之间的关系,接⼝中⼀般是没有成员变量,所有操作都是抽象的(abstract修饰),只有声明没有具体的实现,具体实现需在实现该接⼝的类中。在UML中⽤与类的表⽰法类似的⽅式表⽰接⼝,区别可在UML中类图中看出。如我们创建⼀个交通⼯具类接⼝IVehicle,并有⼀个形式速度⽅法声明travelSpeed,Java代码如下
/***********************************************************************
* Module:  IVehicle.java
* Author:  Code4Android
* Purpose: Defines the Interface IVehicle
***********************************************************************/
import java.util.*;
/** @pdOid 7cbe9f91-a7d9-44b5-a743-280cbc464e61 */
public interface IVehicle {
/
** @pdOid 5e87ebbc-5647-4dc6-8c3c-d23857662584 */
int travelSpeed();
}
对于交通⼯具,有很多种,不同交通⼯具都有⼀个速度,我们举两个例⼦,如HighSpeedRail(⾼铁,时速288KM)和Bicycle(⾃⾏车类时速20KM),则两个实现类代码为
/***********************************************************************
* Module:  HighSpeedRail.java
* Author:  Code4Android
* Purpose: Defines the Class HighSpeedRail
***********************************************************************/
import java.util.*;
/** @pdOid 0ae31b48-07b0-4bcd-83ff-a8a7c7d94518 */
public class HighSpeedRail implements IVehicle {
/** @pdOid a7693fd4-d6d4-4e93-a946-380f69011b13 */
public int travelSpeed() {
// TODO: implement
return288;
}
}
/***********************************************************************
* Module:  Bicycle.java
* Author:  Code4Android
* Purpose: Defines the Class Bicycle
***********************************************************************/
import java.util.*;
/** @pdOid c212a8c3-88db-48d8-a2a0-d381d2ee7f91 */
public class Bicycle implements IVehicle {
/** @pdOid 9ac52769-7489-47b0-9079-4f63f84f1fde */
public int travelSpeed() {
// TODO: implement
return20;
}
}
在UML中实现接⼝⽤虚线和带空⼼的三⾓形表⽰。则上⾯对应的UML类图如下

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。