【问题标题】:interfaces in multiple inheritance in java, modelling issuejava中多重继承中的接口,建模问题
【发布时间】:2013-08-19 00:40:07
【问题描述】:

我有以下场景:

如您所见,我有两个班级,讲师和学生。班级教师助理是讲师和学生的混合体,因为他们可以注册课程,但也可以讲一些基本主题(不被视为讲师)。我产生了使用接口对这种情况进行建模的想法,因为我将使用 Java 进行编程。这个建模正确吗?

这样 TA 类将实现 Interface Teaches,其中包含分配给该学生教授的一系列课程。

但是,如果我以这种方式建模,我会意识到我完全失去了课堂讲师。我如何对这种多重继承的情况进行建模,但又不会丢失 Lecturers 类?我的意思是,如果我将 Lecturers 编程为一个接口,它就不会有任何我需要进一步的方法,例如,计算它的工资福利等等。有什么推荐吗?

【问题讨论】:

    标签: java interface multiple-inheritance


    【解决方案1】:

    您可以将Lecturer 做成一个接口,然后让TeachingAssistantProfessor 实现它。 TeachingAssistant可以扩展Student,因为从逻辑上讲,助教就是学生。

    【讨论】:

    • 但逻辑上学生不需要讲师的任何属性。更好的是为学生提供不同的界面。 TA 将实现学生和教师界面。
    • 这就是为什么 Lecturer 只是一个界面。
    【解决方案2】:

    一种选择是拥有TeacherTeachable 接口 然后让Lecturer实现Teacher(因为缺少像Teacherable这样的词!),Student实现TeachableTA同时实现TeacherTeachable

    LecturerStudentTA 都可以扩展 Faculty_Staff

    【讨论】:

      【解决方案3】:

      tbodt's approach,在我看来,通常是合理的。你只需要问:如果某些客户端代码需要Lecturer,那么一个 TA 的实例就足够了吗?如果有问题,您可以选择用组合来设计它,将教学能力抽象到一个单独的类中,比如TeachingJob(我想不出更好的名字)。这样,实际Professors 和TeachingAssistants 唯一共享的是他们有相似的教学工作;它们不属于同一个“类”(实际上是接口)。

      混合方法是将TeachingJobLecturer 接口结合起来,例如Lecturer 会有一个 assign(TeachingJob assignment) 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 2019-05-08
        • 1970-01-01
        • 2019-03-06
        相关资源
        最近更新 更多