【问题标题】:class diagram confusion (trivial)类图混淆(琐碎)
【发布时间】:2012-10-23 10:33:01
【问题描述】:

我认为这相对简单,但我只是对类图不熟悉。

我即将创建一个程序(用 Java 编写)来管理麦当劳的员工类型。所以,考虑为对象建模。

为了简单起见,麦当劳只有两种类型的员工,“主管”和“船员”,两者都按月领取工资。此外,他们都根据情况获得不同类型的奖金(当然将来可能会改变)

所以,我开始通过创建具有属性的超类“Employee”来建模

name
empId
salary

(方法......等)

顺便说一句,我把“CrewMember”和“Supervisor”作为它的子类。

那么我的困惑是,如果我确实以这种方式建模我的对象,我的“CrewMember”和“Superviser”类的实例怎么可能彼此不同? p>

请纠正我应该如何为我的课程建模。为了使班级区分,我还考虑在每个“船员”和“主管”上添加一种奖金,但我认为这不会灵活,如果将来奖金和奖金类型会发生变化。所以,我现在很困惑。

【问题讨论】:

  • 我忘了提到我(目前)看到的“Supervisor”和“CrewMember”这两个班级之间的唯一区别是他们的薪水。
  • 他们不是叫Supervisor吗?
  • @jbchichoko 以薪水为属性,无论子类如何,它总是可以不同。如果您希望所有主管的薪水相同,您应该重构您的工作,以便在Supervisor 中拥有一个静态常量。
  • 另外,在这种情况下如何模拟奖金?

标签: java uml modeling class-diagram


【解决方案1】:

主管和船员有什么区别?

至少我认为您需要在这两个类之间建立关联,以模拟主管是 1 个或多个船员的老板。

如果有什么是主管做的,而船员却没有做,那么你应该在主管类中建模。

如果主管和船员没有区别,那么你不需要这两个课程。

【讨论】:

    【解决方案2】:

    你好 :) 这个答案发布在我的 iPhone 上,但我稍后会更新!当您像员工一样创建超级类时,您只需在类图中通过一个从超级类到两个子类的简单箭头来显示它 - 我稍后会找到一个链接,请注意这两个类是否无关紧要看起来相同,但是当图表完成时应该清楚!通常你在类图之前创建一个域模型来显示这些类型的继承

    【讨论】:

      【解决方案3】:

      要将继承的概念用于泛化和特化案例,应该有一些动机来泛化/特化实体之间的差异。这被称为鉴别器 - 它是一些不同的特征(行为或结构)。所以需要有一些只适用于上级/机组成员的功能,一些关联或属性。否则,在超类“Employee”中为“employeeType”建模就足够了。请注意,在大多数开发环境中添加继承的成本很高。当您尝试从模型到实现时,将会有额外的源代码、额外的文档、额外的表格、文件以及其他内容。如果这样做没有真正的好处,那么使用继承(尤其是实现继承)是不明智的。

      【讨论】:

      • 所以,鉴于我的类中有鉴别器(如你所说),如果成本高昂,我怎么能在没有继承的情况下为我的类建模?!谢谢。
      • 如前所述 - 添加 employeeType 属性,如果您需要任何轻微的特殊行为,请使用 switch 语句。这不是纯粹的面向对象,而是通常比先继承更好的第一步,并且永远不会在子类中产生很大差异。典型的“YAGNI”——你不需要它”案例。
      猜你喜欢
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多