
1 public class Driver 2 { 3 public void drive(Car car) 4 { 5 car.move(); 6 } 7 …… 8 } 9 public class Car 10 { 11 public void move() 12 { 13 ...... 14 } 15 …… 16 }二 关联: 关联( Association)关系 是一种拥有的关系,可以是一对多的拥有,如:篮球队和篮球运动员的关联关系(每个球员都有自己所属的球队,每个球队都有自己的球员), 也可以是一对一的关联关系如 妻子与丈夫的关系; 另外关联关系还可以是单项的关联,如购物用户和用户收货地址。 关联关系与依赖关系的区别:关联关系属于类与类之间的联接,Java语言中关联关系一般使用成员变量来实现,即一个类在另一个类中是成员变量。而依赖关系中,被 依赖类并不出现在依赖类的成员变量中,而只是以传参的方式传入到依赖类中某些方法中,在Java语言中体现为局部变量,方法的形参等。 在UML类图中,使用实线连接有关联的对象所对应的类,如果是单向关联关系则使用带箭头的实线,如果是双向关联关系就使用无箭头的实线
.png)
.png)
// 双向关联
1 public class Team { 2 private String name; 3 private String address; 4 5 private Player[] players; 6 } 7 8 public class Player { 9 private String name; 10 private Team team; 11 12 }
// 单向关联另外还有一种自关联的关系,表现为自身类被定义为自己的一个属性
1 public class Customer 2 { 3 private Address address; 4 …… 5 } 6 7 public class Address 8 { 9 …… 10 }
1 public class Node { 2 3 private Node node; 4 5 }
三 泛化(继承): 若A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化) 泛化关系 也就是继承关系,也称为“is-a-kind-of”关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。 在UML中,泛化(继承)关系使用带空心三角形的实线来表示
.png)
1 public class Person 2 { 3 protected String name; 4 protected int age; 5 public void move() 6 { 7 …… 8 } 9 public void say() 10 { 11 …… 12 } 13 } 14 public class Student extends Person 15 { 16 private String studentNo; 17 public void study() 18 { 19 …… 20 } 21 }四 实现: 实现关系(Implementation):是用来规定接口和实线接口的类或者构建结构的关系,接口是操作的集合,而这些操作就用于规定类或者构建的一种服务 在UML中,类与接口之间的实现关系使用带空心三角形的虚线来表示。
1 public interface Vehicle 2 { 3 public void move(); 4 } 5 public class Ship implements Vehicle 6 { 7 public void move() 8 { 9 …… 10 } 11 } 12 public class Car implements Vehicle 13 { 14 public void move() 15 { 16 …… 17 } 18 }
五 聚合: 聚合属于关联关系的一种(是一种 has-a 的关系):聚合是整体与部分之间的关系,与关联关系不同的是,关联关系涉及的两个类是处于相同层级的,而聚合关系中一个是整体另一个是部分。 从代码层面来分析的话,聚合和关联关系是一致的,从语义层面来看的话,聚合关系中的两个类是存在一个(整体)包含另一个(部分)的关系的,这种一个包含另一个(也可以不包含)的关联关系就是聚合关系。 聚合关系中整体对部分的这种可包含可不包含的关联体现在, 整体生命周期结束了,部分依然可以继续存在,譬如汽车坏掉了不工作了,把引擎取出来放到另一辆车上仍可以继续工作。 聚合关系使用空心的菱形+箭头和实线来表示,菱形指向整体,箭头指向部分。
.png)
1 public class Car 2 { 3 private Engine engine; 4 public Car(Engine engine) 5 { 6 this.engine = engine; 7 } 8 9 public void setEngine(Engine engine) 10 { 11 this.engine = engine; 12 } 13 …… 14 } 15 public class Engine 16 { 17 …… 18 }
六 组合: 组合也属于关联关系的一种:组合关系体现的是一种contains-a 的关系,同样的组合关系中双方也是一个是整体,一个是部分,但是组合关系中整体和部分是不可分离的 意味着如果整体的生命周期结束,则部分的生命周期也会结束。光是从代码层面也是不能区分这种关联关系是否是组合关系,需要从语义层面分析。 UML图中, 组合关系使用 实心的菱形 + 箭头 以及实线来表示,实心菱形指向整体,箭头指向部分。
.png)
1 public class Head 2 { 3 private Mouth mouth; 4 public Head() 5 { 6 mouth = new Mouth(); 7 } 8 …… 9 } 10 11 public class Mouth 12 { 13 …… 14 }依赖 --> 关联 --> 聚合 --> 组合 集中关系中类与类之间的耦合关系逐步增强(即一个类发生变化另一个类收到的影响程度逐步增强)。 参考: https://blog.csdn.net/andy_93/article/details/77484430 https://www.cnblogs.com/wanghuaijun/p/5421419.html https://blog.csdn.net/qq_31655965/article/details/54645220
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。