本文分类:
软件理论与软件工程

类的画法

类图是UML图的一种,用于描述类和类之间的关系。

基本的类图是一个方框,方框分为三个部分,最上面的部分是类名,中间是属性定义,最后是方法定义。类名是任何合法的名称,属性的格式是[可见性]属性名:类型[=初值],方括号中的内容是可选的,可见性用+表示public,用-表示private,用#表示protected,不写表示默认的可见性。方法的格式是“可见性 方法名(参数列表):返回值类型”,参数列表由多个参数构成,参数之间用逗号隔开,参数的格式是“参数名:类型”。

如果方法或属性是static的,则在方法或属性下边加一条下划线表示。如果是抽象类,则类名和抽象方法用斜体表示。接口类似于抽象类,但是在类名上方添加<<interface>>标记,有时候接口也用圆圈表示。

类之间关系的画法

除了描述类本身,类图的另一个重点就是描述类之间的关系。类之间的关系有泛化、实现、关联、组合、聚合、依赖,这几种关系的强弱依次是:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖。

一个示例

下面用一个UML图和代码演示上面的内容。首先定义一个动物抽象类,动物都可以喝水,代码如下:

/**
 * 动物抽象类
 */
public abstract class Anminal {
    /**
     * 动物喝水
     */
    protected abstract void drink();
}

定义一个可以飞的接口,代码如下:

/**
 * 可以飞
 */
public interface Fly {
    void fly();
}

定义一个翅膀类,翅膀可以震动,代码如下:

/**
 * 翅膀类
 */
public class Wing {
    // 翅膀振动
    public void flap() {
        System.out.println("Wing flag");
    }
}

定义一个燕子类,继承了Anminal,实现了Fly接口,具有一个翅膀属性,代码如下:

/**
 * 燕子类
 */
public class Swallow extends Anminal implements Fly {
    // 翅膀
    private Wing leftWing;
    private Wing rightWing;

    // 名称
    private String name;

    public Swallow(String name) {
        this.leftWing = new Wing();
        this.rightWing = new Wing();
        this.name = name;
    }

    @Override
    public void fly() {
        leftWing.flap();
        rightWing.flap();
        System.out.println(name + " Fly");
    }

    @Override
    protected void drink() {
        System.out.println(name + " Drink");
    }
}

定义一个燕群,是燕子类的集合,代码如下:

/**
 * 燕群
 */
public class SwallowGroup implements Iterable<Swallow>{
    private List<Swallow> group = new ArrayList<>();

    public void add(Swallow swallow) {
        this.group.add(swallow);
    }

    @Override
    public Iterator<Swallow> iterator() {
        return group.iterator();
    }
}

定义一个测试的客户端类,代码如下:


/**
 * 测试客户端
 * @author hiwzc.com
 */
public class Client {
    public static final String DEFAULT_NAME = "default";

    public static void test() {
        SwallowGroup g = new SwallowGroup();
        g.add(new Swallow("Tom"));
        g.add(new Swallow("Jerry"));
        for (Swallow s : g) {
            s.fly();
            s.drink();
        }
    }

    public static void main(String[] args) {
        test();
    }
}

则这几个类之间的关系是:

UML类图如下所示:

理解类图

本文来自 [时光记 - 王智超的个人空间](www.hiwzc.com),转载请注明出处。