我如何考虑使用 class 和接口之间的关联来实现 UML 图

How I can think about implement UML diagram with association between class and interface

我正在思考如何理解此 UML 图并检查如何将其表示为代码:

让我困惑的是,我们公司和员工接口之间有关联关系,而设计器类实现了员工接口,但是我们如何将公司与员工接口联系起来?

我的理解(例如PHP):

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

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

谢谢

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

扩展你关于关联的查询:好吧,我的 PHP 很生锈,但 IIRC 它完全没有类型。因此,您将有一些对象指针,例如 Company class 中定义的 $employee,它引用实现了 Employee 接口的对象。所以你可能会在 Company class 实现中做一些 $employee->doWork()。可能你不会有一个,而是一个数组。老实说,这真的是很久以前的语法了。但您可能知道如何编写代码。

P.S。由于(如前所述)我的 PHP 非常生锈,所以我还没有深入到我知道 extendsimplements 的组合会产生什么。

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

  • 专业:Company有两个专业,分别是GameDev CompanyOutsourcing Company
  • 实现:一个接口Employee可以被任何实现了这个接口的class实现,比如Designer(或者ProgrammerArtistTester, ...)
  • 关联:CompanyEmployee 关联。该图没有说明多重性。但由于这是一个非常简单的模型,并且根据我们的知识,我们可以猜测一家公司可能与没有、一个或几个相关联 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 such as an array that holds references to the Employee objects. My PHP is very rusty, but I understand that objects in an array are always references 这正是普通关联所需要的。