多个可选接口建模(OOP)

时间:2018-10-27 22:40:46

标签: class oop interface uml

我在系统建模中遇到了一个问题。

想象一下以下情况:

  • 人是一堂课
  • 学生就是人
  • 程序员就是人
  • 足球迷就是人

很明显,Person是这三个类的超类,但我希望能够拥有一个Person,既是Student 又是程序员,而不必创建单独的类来将其实现为接口每个组合。像这样建模的常用方法是什么?

谢谢

安东

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

因此,说“一个学生就是一个人”也可以说成“一个人在特定时间段内可能扮演学生的角色”。

Person versus roles

答案 2 :(得分:-1)

你不知道。 StudentProgrammer可能只是Student,但绝对不是Programmer,因为后者是为了谋生。 StudentProgrammer是新类。您最终可能会从Student派生它。从我的视角来看,与现实世界中的物体关联总是一个好主意。没有它们,您最终会获得诸如多重继承之类的奇怪构造-这是不自然的。两栖车辆不会继承自汽车和轮船。这是自己的一类。