我如何考虑在类和接口之间实现 UML 图

问题描述

我正在尝试思考如何理解这个 UML 图并检查如何将其表示为代码

enter image description here

让我困惑的是,我们在 Company 和 Employee 接口之间存在关联关系,而 Designer 类实现了 Employee 接口,但是我们如何将 Company 与 Employee 接口连接起来?

我的理解(例如 PHP):

class Company {
 ...
}
class GameDevCompany extends Company {
 ...
}
class Designer extends GameDevCompany implements Employee {
 ...
}

如果我像这段代码一样思考这个图表,它是一种真实的方式,还是我遗漏了什么或做错了什么?

谢谢

解决方法

在这张图中,我们有三个概念:

  • 专业化:Company 有两个专业化,分别是 GameDev CompanyOutsourcing Company
  • 实现:一个接口Employee可以被任何实现这个接口的类实现,比如Designer(或ProgrammerArtistTester、...)
  • 关联:CompanyEmployee 关联。该图没有说明多重性。但由于这是一个非常简单的模型,而且根据我们的知识,我们可以猜测一个 Company 可能与没有、一个或多个 Employee 相关联。

在 PHP 术语中,特化是 inheritance,用 extend 关键字表示:

class Company {
 ...
}
class GameDevCompany extends Company {
 ...
}

在 PHP 术语中 interfaces are implemented 而不是实现,这用关键字 implements 表示

interface Employee {
 ...
}
class Designer implements Employee {
 ...
}  

一个 Company 与潜在的多个 Employee 的关联要求 Company 具有某种 iterable container,例如包含 {{3} } 到 Employee 对象。我的 PHP 很生疏,但我明白 array 这正是普通关联所需要的。

,

我刚刚重温了我生锈的 PHP 知识,现在我只能说你的代码很好。 extends 是继承(左边是泛化关系),implements 是接口实现(右边是实现关系)。

扩展关于关联的查询:嗯,我的 PHP 非常生锈,但 IIRC 它完全没有类型化。因此,您将有一些对象指针,例如在定义的 $employee 类中的 Company 并且引用已实现 Employee 接口的对象。因此,您可能会在 $employee->doWork() 类实现中执行一些 Company。可能你不会有一个,而是一个数组。老实说,这对于语法来说真的太久远了。但您可能知道如何编码。

附言因为(如上所述)我的 PHP 非常生锈,所以我不太了解 extendsimplements 的组合会产生什么。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...