设计模式 (7)类图四

导言

上一篇文章,学习了组合关系和聚合关系,这篇文章,将带领大家走进依赖关系和泛化关系。

依赖关系

依赖关系,实际上是一种使用关系

依赖关系(Dependency)是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在表示一个事物使用另一个事物时使用的依赖关系。

注意: 依赖关系表现为函数中的参数(use a),是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类。

而不是作为成员变量,以成员变量作为类之间关系的关系,实则是关联关系。而依赖关系是以函数中的参数为类之间影响的因素。

在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方

体现

类A和类B存在依赖关系,则必满足下列三种情况:

  1. 类B以参数的形式传入类A的方法。
  2. 类B以局部变量的形式存在于类A的方法中。
  3. 类A调用类B的静态方法。

例子

驾驶员开车,在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能调用car的move()方法,而且驾驶员的drive()方法依赖于车的move()方法,因此类Driver依赖于类Car。

图示关系

这里写图片描述

代码关系

    public class Driver
    {
        public void drive(Car car)
        {
            car.move();
        }
        ...
    }
    public class Car
    {
        public void move()
        {
            ...
        }
        ...
    }

泛化关系

泛化关系(generalization),即继承关系,也称"is-a-kind-of"关系。

有一些类相似但不相同,它们有共同属性,也有不同属性。我们将共同属性抽象到一个泛化类,这个类就被称为超类。不同属性是特化类的性质,特化类也被称为子类。在子类和超类间存在Is a的关系。超类也被称为父类或祖先类。子类也被称为孩子类或者子孙类。

1.每一个子类继承了超类的性质,但可以对这些性质以不同方式进行扩展。

2.一个类的性质是其属性或操作。

3.继承允许对父类进行适配,来形成子类。

4.子类从超类继承了继承了属性和操作,也可以增加属性、增加操作或重定义操作。

5.每一个子类自身也可以成为超类,进一步特化形成其他子类。

在UML中,泛化关系以空心三角形来表示。

备注

继承最根本的作用是做扩展而来,还有一个作用则是复用。但是做复用以关联关系实现最好,最好不用继承实现。

例子

活期账户(Checking Accout)和储蓄账户(Savings Account)有一些共同属性,而其他属性是不同的。所有账户的共同属性——即“账户”(accountNum这里写代码片ber)和“余额”(balance)——-作为超类“账户”(Account)的属性。储蓄账户特有的属性,例如产生的“利息”(interest)(在这个银行中,活期账户不产生任何利息),作为子类“储蓄账户”的属性。活期账户特有的属性,例如“最后存款金额”(lastDepositAccount),作为子类“活期账户”的属性。

“储蓄账户”Is a “账户”
“活期账户”Is a “账户”

图解

这里写图片描述

区分器,表明对象的哪个性质被泛化关系用来抽象的一种属性。

在上图中,上诉“账户”泛化中的区分器“账户类型”(accountType)区分了“活期账户”和“储蓄账户”。

区分器并不需要称为泛化类或特化类的一个属性。因此,它不是“账户”超类或两个子类的属性。

代码

public class Account {
   private int accountNumber;
   private double balance;
}
public class SavingsAccount extends Account {
   private double interest;
}
public class CheckingAccount extends Account {
   private double lastDepositAmount;

}

结语

我们本文讲解了类图中类与类之间的关系之泛化和依赖关系,下一个文章将讲解类图中最后一个类与类之间的关系—-实现。
本文介绍了泛化关系的和依赖关系的例子,希望看到的读者能学会~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuYunTan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值