程序员必备UML类图的画法

Posted 民间闲散程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员必备UML类图的画法相关的知识,希望对你有一定的参考价值。


【程序员必备】UML类图的画法

民间闲散程序员

关注

【程序员必备】UML类图的画法

之前在对接工作的时候,我需要一个程序的类图,要求其它公司的程序员给我发一下,他迅速回我:“什么叫类图”。在快速迭代的公司,大家只顾开发,可能没有任何文档,一个程序员离职之后,其他人需要很久时间才能接手他的代码。所以一些类图和流程图是必备的技能,也是一个程序员的专业素养,所以我会接下来分几篇介绍一下这几类图的画法。

今天要说的就是UML类图,对于Java而言,最基础的就是类,通过类图,可以很直观地理解程序的结构。我的画图工具是omnigraffle,当然用其他软件也可以。

基本类

先看一个基本类的书写方式:

public class Person {
   
private String age="12";
   
public  String name;

   
public void setAge(String age) {
       
this.age = age;
   
}
   
protected void run(){

   }
   
private void jump(){

   }
}

类图如下:

【程序员必备】UML类图的画法

“-”代表private,“+”代表public,“#”代表protect。

第一行是类名,第二行是属性,第三行为方法。

继承

再看一个继承关系的类,Work类继承Person:

public class Worker extends Person {
   
private String id;
   
public void work(){

   }
}

类图如下:

【程序员必备】UML类图的画法

Work类继承Person类,继承的方法不需要在Work中写出,只需要写出特有的方法和属性,使用箭头进行连接。

抽象继承

我们修改一下Person类:

public abstract class Person {
   
private String age="12";
   
public  String name;
   
public abstract void work();
   
public void setAge(String age) {
       
this.age = age;
   
}
   
protected void run(){

   }
   
private void jump(){

   }
}

Work类不变。

【程序员必备】UML类图的画法

与上面普通继承不同的是,抽象类和抽象方法,使用斜体。

接口

再来看一下接口,我们需要定义一个接口:

public interface IWork {
   
public void salary();
}

让Work类实现这个接口。

public class Worker extends Person implements IWork{
   
private String id;
   
public void work(){

   }

   
@Override
   
public void salary() {

   }
}

看一下类图:

【程序员必备】UML类图的画法

实现接口需要使用虚线。

依赖

依赖可以理解为,某个类中临时或偶然会用到某个类,比如Person类跑步需要鞋,修改一下Person中的run方法:

protected void run(Shoes shoes){

}

类图如下:

【程序员必备】UML类图的画法


依赖可以使用一个虚线箭头表示,前面提到的继承关系都是用的空心箭头

关联

关联是指两个类之间有强依赖关系,一般说明一个类是另一个类的成员变量,如Person类中加一个Phone类:

public Phone phone;

类图如下:

【程序员必备】UML类图的画法

与上面不同的是虚线变为实线。

聚合和组合

聚合关系是标识整体与部分的关系,整体与部分之间可以拆卸。而组合是不能拆卸的举个例子吧:眼睛是可以拆卸的,甚至对于人来说是可有可无的(可以为空),但是脑袋是必须有的对吧(不可为空)。好的我们看一下Person类。

public abstract class Person {
   
private String age="12";
   
public  String name;
   
public Phone phone;
   
public Head head;
   
public Glass glass;
   
public abstract void work();
   
public Person(){
       
head = new Head();
   
}
   
public void setAge(String age) {
       
this.age = age;
   
}
   
protected void run(Shoes shoes){

   }
   
private void jump(){

   }
}

glass可以为空但是head构造函数的时候就要初始化,不可为空。所以glass类与Person的关系是聚合,Head类是组合:

【程序员必备】UML类图的画法


可以看出组合与聚合是差不多的,唯一画法的区别是底部,组合是实心圆形,聚合是空心的。

最后给大家放一下整体的类图模型:

【程序员必备】UML类图的画法

学会使用UML类图,一定会让你的程序文档逻辑更清楚,老板看后,保证升职加薪指日可待。


 • end • 

             作者 | mymdeep


【程序员必备】UML类图的画法





以上是关于程序员必备UML类图的画法的主要内容,如果未能解决你的问题,请参考以下文章

(转)面向对象——UML类图设计

UML-架构设计师必备神器

UML类图基本画法

UML类图基本画法

UML类图基本画法(startuml演示)

UML类图详解及rose中的画法