多可选接口建模 (OOP)

Multiple Optional Interfaces modeling (OOP)

我在为系统建模时遇到了问题。

想象一下以下场景:

显然 Person 将是这三个中的超级 class,但我希望能够拥有一个 Person,他是学生 程序员而没有创建一个单独的 class 将它们实现为每个组合的接口。像这样建模的常用方法是什么?

谢谢,

安东

你不知道。 StudentProgrammer 可能只是 Student 但绝对不是 Programmer 因为后者是为了谋生。一个 StudentProgrammer 是一个新的 class。您最终可能会从 Student 派生它。从我的 POV 来看,与现实世界的对象相关联总是一个好主意。没有你最终会得到像多重继承这样的奇怪结构——这是不自然的。两栖车辆不会继承汽车和船舶。它是自己的 class。

您不应将身份承载类型与其所扮演的角色混淆。相反,您应该使用 Person 的实例,并引用代表 Person 扮演的角色的实例。这样,一个人(甚至一个机器人)可以同时扮演足球迷和学生的角色。

一个人可能有多个角色,这些角色可能会不时发生变化。 如果您将 Person 和 Role 作为两个独立的概念来处理,并且通过在这两个概念之间建立 1:n 关系,您将避免超类的想法。

所以说"a student is a person"也可以说成"a person may have the role student for a certain time period".