Class 多个可选接口建模(OOP)

Class 多个可选接口建模(OOP),class,oop,interface,uml,Class,Oop,Interface,Uml,我在建模系统时遇到了一个问题 想象一下以下场景: 人是一个阶级 学生就是人 程序员是一个人 足球迷是一个人 显然Person将是这三个类中的超级类,但我希望能够有一个Person,一个学生和一个程序员,而不必创建一个单独的类来实现它们作为每个组合的接口。像这样建模的常见方法是什么 谢谢 安东你没有。StudentProgrammer可能只是Student,但绝对不是Programmer,因为后者是以编程为生的。StudentProgrammer是一门新课程。最终,您可能会从Student派生

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

想象一下以下场景:

  • 人是一个阶级
  • 学生就是人
  • 程序员是一个人
  • 足球迷是一个人
显然Person将是这三个类中的超级类,但我希望能够有一个Person,一个学生和一个程序员,而不必创建一个单独的类来实现它们作为每个组合的接口。像这样建模的常见方法是什么

谢谢


安东

你没有。
StudentProgrammer
可能只是
Student
,但绝对不是
Programmer
,因为后者是以编程为生的。
StudentProgrammer
是一门新课程。最终,您可能会从
Student
派生出它。从我的观点来看,与真实世界的物体相关联总是一个好主意。如果没有你,你最终会得到一些奇怪的构造,比如多重继承,这是很不自然的。两栖车辆不会从汽车和船舶继承。这是它自己的一个类

你不应该把具有身份的种类与它们所扮演的角色混为一谈。相反,您应该使用一个人的实例,并引用代表该人所扮演角色的实例。这样,一个人(甚至一个机器人)可以同时扮演足球迷和学生的角色

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

所以说“一个学生就是一个人”也可以说是“一个人在一定时期内可能扮演学生的角色”


你能详细说明个人、学生、程序员和球迷之间的区别吗?例如,如果它们具有相同的属性和方法集,那么一个具有属性类型的类就足够了。