zoukankan      html  css  js  c++  java
  • 再学UML-深入浅出UML类图(三)

    类与类之间的关系(2)

          2. 依赖关系

          依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。例如:驾驶员开车,在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此类Driver依赖类Car,如图1所示:

    图1 依赖关系实例

          在系统实施阶段,依赖关系通常通过三种方式来实现,第一种也是最常用的一种方式是如图1所示的将一个类的对象作为另一个类中方法的参数,第二种方式是在一个类的方法中将另一个类的对象作为其局部变量,第三种方式是在一个类的方法中调用另一个类的静态方法。图1对应的Java代码片段如下:

    1. public class Driver {  
    2.     public void drive(Car car) {  
    3.         car.move();  
    4.     }  
    5.     ……  
    6. }  
    7.   
    8. public class Car {  
    9.     public void move() {  
    10.         ......  
    11.     }  
    12.     ……  
    13. }  

          3. 泛化关系

          泛化(Generalization)关系也就是继承关系,用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类在UML中,泛化关系用带空心三角形的直线来表示在代码实现时,我们使用面向对象的继承机制来实现泛化关系,如在Java语言中使用extends关键字、在C++/C#中使用冒号“:”来实现。例如:Student类和Teacher类都是Person类的子类,Student类和Teacher类继承了Person类的属性和方法,Person类的属性包含姓名(name)和年龄(age),每一个Student和Teacher也都具有这两个属性,另外Student类增加了属性学号(studentNo),Teacher类增加了属性教师编号(teacherNo),Person类的方法包括行走move()和说话say(),Student类和Teacher类继承了这两个方法,而且Student类还新增方法study(),Teacher类还新增方法teach()。如图2所示:

    图2  泛化关系实例

          图2对应的Java代码片段如下:

    1. //父类  
    2. public class Person {  
    3. protected String name;  
    4. protected int age;  
    5.   
    6. public void move() {  
    7.         ……  
    8. }  
    9.   
    10.     public void say() {  
    11.     ……  
    12.     }  
    13. }  
    14.   
    15. //子类  
    16. public class Student extends Person {  
    17. private String studentNo;  
    18.   
    19. public void study() {  
    20.     ……  
    21.     }  
    22. }  
    23.   
    24. //子类  
    25. public class Teacher extends Person {  
    26. private String teacherNo;  
    27.   
    28. public void teach() {  
    29.     ……  
    30.     }  
    31. }  

          4. 接口与实现关系

          在很多面向对象语言中都引入了接口的概念,如Java、C#等,在接口中,通常没有属性,而且所有的操作都是抽象的,只有操作的声明,没有操作的实现。UML中用与类的表示法类似的方式表示接口,如图3所示:

    图3  接口的UML图示

          接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现(Realization)关系,在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示例如:定义了一个交通工具接口Vehicle,包含一个抽象操作move(),在类Ship和类Car中都实现了该move()操作,不过具体的实现细节将会不一样,如图4所示:

    图4  实现关系实例

          实现关系在编程实现时,不同的面向对象语言也提供了不同的语法,如在Java语言中使用implements关键字,而在C++/C#中使用冒号“:”来实现。图4对应的Java代码片段如下:

      1. public interface Vehicle {  
      2. public void move();  
      3. }  
      4.   
      5. public class Ship implements Vehicle {  
      6. public void move() {  
      7.     ……  
      8.     }  
      9. }  
      10.   
      11. public class Car implements Vehicle {  
      12. public void move() {  
      13.     ……  
      14.     }  
      15. }  

    文章出处:http://blog.csdn.net/lovelion/article/details/7843308

  • 相关阅读:
    hdu 1269 迷宫城堡 (并查集)
    hdu 1272 小希的迷宫 (深搜)
    hdu 1026 Ignatius and the Princess I (深搜)
    hdu 1099 Lottery
    hdu 1068 Girls and Boys (二分匹配)
    几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
    hdu 1072 Nightmare (广搜)
    hdu 1398 Square Coins (母函数)
    hdu 1253 胜利大逃亡 (深搜)
    hdu 1115 Lifting the Stone (求重心)
  • 原文地址:https://www.cnblogs.com/alone-striver/p/7819100.html
Copyright © 2011-2022 走看看