6种交互关系

  • 泛化(Generalization)可以简单理解为继承关系。
  • 实现(Realization)一般是指接口和实现类之间的关系。
  • 聚合(Aggregation)是一种包含关系,A类对象包含B类对象,B类对象的生命周期可以不依赖A类对象的生命周期,也就是说可以单独销毁A类对象而不影响B对象,比如课程与学生之间的关系。 ```java class B {}

class A { private B b; public A(B b) { // 由注入提供,不依赖 A 的生命周期 this.b = b; } }

  1. - 组合(Composition)也是一种包含关系。A类对象包含B类对象,B类对象的生命周期跟依赖A类对象的生命周期,B类对象不可单独存在,比如鸟与翅膀之间的关系。
  2. ```java
  3. class B {}
  4. class A {
  5. private B b;
  6. public A() {
  7. // 依赖 A 的生命周期
  8. this.b = new B();
  9. }
  10. }
  • 关联(Association)是一种非常弱的关系,包含聚合、组合两种关系。
  • 依赖(Dependency)是一种比关联关系更加弱的关系,包含关联关系。不管是B类对象是A类对象的成员变量,还是A类的方法使用B类对象作为参数或者返回值、局部变量,只要B类对象和A类对象有任何使用关系,我们都称它们有依赖关系。

面向对象设计

  1. 划分职责进而识别出有哪些类
    • 根据需求描述,我们把其中涉及的功能点,一个一个罗列出来,然后再去看哪些功能点职责相近,操作同样的属性,可否归为同一个类。
  2. 定义类及其属性和方法
    • 我们识别出需求描述中的动词,作为候选的方法,再进一步过滤筛选出真正的方法,把功能点中涉及的名词,作为候选属性,然后同样再进行过滤筛选。
  3. 定义类与类之间的交互关系
    • UML统一建模语言中定义了六种类之间的关系。它们分别是:泛化、实现、关联、聚合、组合、依赖。我们从更加贴近编程的角度,对类与类之间的关系做了调整,保留四个关系:泛化、实现、组合、依赖。
  4. 将类组装起来并提供执行入口
    • 我们要将所有的类组装在一起,提供一个执行入口。这个入口可能是一个main0函数,也可能是一组给外部用的API接口。通过这个入口,我们能触发整个代码跑起来。