UML学习入门

UML

举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法。
在这里插入图片描述
首先,看动物矩形框,它代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。前面的符号,+ 表示public,- 表示private,# 表示protected。

右下角的飞翔,它表示一个接口图,与类图的区别主要是顶端的 <> 显示。第一行是接口名称,第二行是接口方法。接口还有另一种表示方法,俗称棒棒糖表示法。唐老鸭是能讲人话的鸭子,实现了讲人话的接口。
在这里插入图片描述
接下来的是类与类,类与接口之间的关系了。首先注意动物、鸟、鸭、唐老鸭之间的关系符号。它们都是继承的关系,继承关系用空心三角形 + 实线来表示的。
在这里插入图片描述
实现接口用空心三角形 + 虚线来表示。上述所列举的几种鸟中,大雁最能飞,让它实现了飞翔接口。
在这里插入图片描述
关联关系用实线箭头来表示。企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。我们不去讨论为什么北极没有企鹅,为什么它们要每年长途跋涉。总之,企鹅需要知道气候的变化,需要了解气候规律。当一个类知道另一个类时,可以用关联(association)。
在这里插入图片描述
聚合关系用空心的菱形 + 实线箭头来表示。再来看大雁和雁群这两个类,大雁是群居动物,每只大雁都是属于一个雁群,一个雁群可以有多只大雁。所以它们之间就满足聚合(Aggregation)关系。聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。
在这里插入图片描述
组合(Composition)是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。在这里鸟和其翅膀就是组合关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。组合关系用实习的菱形 + 实线箭头来表示。另外,你会注意到合成关系的连线两端还有一个数字1和数字2,这被称为基数。表明这一端的类可以有几个实例,很显然,一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就是n来表示。关系关系、聚合关系也可以有基数的。
在这里插入图片描述
动物的几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。也就是说,动物依赖于氧气和水。他们之间是依赖关系(Dependency),用虚线箭头来表示。
在这里插入图片描述

接口描述

「接口」 的类图表述与类大致相同,不同的是接口名要添加 Interface 标识,且行为的可见性必须用 “+” 表示。如下图:
在这里插入图片描述
类和类之间的关系
类之间有六种关系:

  1. 继承(泛化)
  2. 实现
  3. 关联
  4. 依赖
  5. 组合
  6. 聚合
    在这里插入图片描述

1. 继承(Inherit)

「继承」 是面向对象语言的三大特性(封装,继承,多态)之一。子类继承父类。
在这里插入图片描述

2. 实现(Implement)

「实现」 与继承类似,实现类继承接口中的方法。
在这里插入图片描述

3. 关联

依赖关系通常表现为类的私有属性。

// 企鹅类
public class Penguin {
  // 天气类
  private Climate climate;
}

在这里插入图片描述

4. 依赖

「依赖」 关系体现为局部变量、方法的形参,或者对静态方法的调用。

public class Programmer {
  public void work(Computer computer){
    
  }
}

在这里插入图片描述
UML类图中依赖关系使用虚线箭头表示。
以下代码展示了依赖关系的三种具体代码实现:局部变量、方法的形参和对静态方法的调用。

public class Person{
  public void doSomething1(){
    Car car = new Car();//局部变量
    ...
  }
  
  public void doSomething2(Car car){//方法参数
    ...
  }
  
  public void doSomething3(){
    int price = Car.do();//静态方法调用
  }
}

5. 组合

「组合」 是关联关系的一种,表示一种强的“拥有”关系。体现了严格的部分和整体的关系。部分和整体的生命周期一样。

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

在这里插入图片描述

6. 聚合

「聚合」 是关联关系的一种,表示一种弱的“拥有”关系。用Java代码表示大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以有多只大雁。

天气凉了,树叶黄了。 。。。 一群大雁往南飞,一会排成“大”字,一会排成“人”字。 ——《秋天》出自人教版小学语文一年级课文

public class WildGooseAggregate {
  private List<WildGoose> wideGooses;
}

在这里插入图片描述

All in One的例子

前面介绍了类之间的6种关系。为了更好地理解这6种关系。下面使用一个完整的例子(汽车)。该示例中包含了这6种关系。
在这里插入图片描述
说明:车的类图结构为,表示车是一个抽象类:
它有两个继承类:小汽车和自行车;它们之间的关系为「实现」 关系,使用带空心箭头的虚线表示;
小汽车为与SUV之间也是「继承」 关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
小汽车与发动机之间是「组合」 关系,使用带实心箭头的实线表示;
学生与班级之间是「聚合」 关系,使用带空心箭头的实线表示;
学生与身份证之间为「关联」 关系,使用一根实线表示;
学生上学需要用到自行车,与自行车是一种「依赖」 关系,使用带箭头的虚线表示;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值