0.1 番外篇: UML 类图

1.11 UML 类图

    小菜: “对了, 我时常在一些技术书中看到这些类图表示, 简单的还看得懂, 有些标记我很容易混淆. 要不你给我讲讲吧.”
    大鸟: “这个其实用的多看得多就熟悉了. 我给你举一个例子, 来看这样一张图, 其中就包括了 UML 类图中的基本图示法.”

  • UML 类图图示样例

UML 类图图示样例

    大鸟: “首先你看那个 ‘动物’ 隽星框, 它就代表一个类(Class). 类图分三层, 第一层显示累的名称, 如果是抽象类, 就用斜体显示. 第二层是累的特性, 同城就是自端和属性第三层是类的操作, 通常是方法或行为. 注意前面的符号, “+” 表示 public, “-” 表示 private, “#” 表示 protected. “

             动物类

    大鸟: “然后注意左下方的 ‘飞翔’, 他表示一个借口图, 与类图的却别主要是顶端有<< inteface >> 显示. 第一行是借口名称, 第二行是借口方法. 借口还有另一种表示方法, 俗称棒棒糖表示法, 比如图中的唐老鸭类就是实现了 ‘讲人话’ 的接口.”
    小菜: “为什么要是 ‘讲人话’ ?”
    大鸟: “鸭子本来也有语言, 只不过只有唐老鸭是能讲人话的鸭子.”
    小菜: “有道理.”

接口

public interface IFly{
    void Fly();
}

public interface ILanguage{
    void speak();
}

    大鸟: “接下来就可以讲类与类, 类与接口之间的关系了. 你可首先注意动物, 鸟, 鸭, 唐老鸭之间关系符号.”
    小菜: “明白了, 他们都是继承的关系, 继承关系用空心三角形 + 实线来表示.”

           继承

    大鸟: “我举得几种鸟中, 大雁是最能飞的, 我让他实现了飞翔接口. 是想接口用空心三角形 + 加虚线来表示.”

           实现接口

public class Bird extends Animal{

}

public class WideGoose implements IFly{

}

    大鸟: “你看企鹅和七楼两个类, 企鹅是很特表的鸟, 会游不会飞. 更重要的是, 他与气候有很大的关联. 我们不去谈论为什么北极没有企鹅, 为什么他们每年要长途跋涉. 总之, 切需要 ‘知道’ 气候的变化, 西药 ‘了解’ 气候规律. 当一个类 ‘知道’ 另一个类时, 可以用关联(association). 关联关系用实线箭头来表示.

           这里写图片描述

public Class Penguin extends Bird{
    // 在企鹅 Pengguin 中, 引用到气候 climate 对象
    private Climate climate; 
}

    大鸟: “我们再来看大雁与雁群这两个类, 大雁是群居动物, 每只大雁都属于一个雁群, 一个雁群可以有多只大雁. 所以他们之间就满足集合(Aggregation) 关系. 聚合表示一种弱的 ‘拥有’ 关系, 体现的是 A 对象可以包含 B 对象, 但是B 对象不是A 对象的一部分[DPE] . 聚合关系用空心的菱形 + 实现箭头来表示. “

                聚合关系

public Class WideGooseAggregate{
    // 在雁群 WideGooseAggregate 类中, 有大雁数组对象 arrayWideGoose
    private WideGoose[] arrayWideGoose;
}

    大鸟: “合成(Composition, 也有翻译成 ‘组合’ 的) 是一种强的 ‘拥有’ 关系, 体现了严格的部分和整体的关系, 部分和整体的生命周期一样[DPE]. 在这里尼奥和其翅膀就是组合(合成) 关系, 因为他们是部分和整体的关系, 并且翅膀和鸟的生命周期是相同的. 合成关系用实心的菱形 + 实现箭头来表示. 另外, 你会注意到合成关系的连线两端还有一个数字 ‘1’ 和数字 ‘2’, 这被称为基数. 表明这一端的类可以有几个实例, 很显然, 一只鸟应该有两只翅膀. 如果一个类可能有无数个实例, 则就用 ‘n’ 来表示. 关联关系, 聚合关系也可以有基数的.”

                      组合关系

public class Bird{
    private Wing wing;
    Bird() {
        wing = new wing();
    }
}

    大鸟: “动物几大特征, 比如有新城代谢, 能繁殖 而动物要有生命力, 需要氧气, 水以及食物等. 也就是说, 动物以来与氧气和水. 他们之间是依赖关系(Dependency), 用虚线箭头来表示.”

依赖关系

public abstract class Animal{
    public metabolism(Oxygen oxygen, Water water){

    }
}

    小菜: “看来UML 类图也不算难啊. 回想那天我面试题写的代码 我终于明白我为什么写的不成功了, 原来一个小小的计算器也可以写出这么精彩的代码, thank bird.
    大鸟: “吼吼, 记住哦, 编程是一门技术, 更加是一门艺术. 不能只满足于写完代码运行结果正确就完事儿, 时常思考如何让代码更加简练, 更加容易维护, 容易扩展和复用, 只有这样才可以真正得到提升. 写出优雅的代码真的是一种很爽的事情. UML 图也不是医学就会的, 需要有一个慢慢熟练的过程. 所谓学无止境, 其实这才是理解面向对象的开始呢.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值