【问题标题】:UML/Design Pattern: Need help to check my UML for its correctnessUML/设计模式:需要帮助来检查我的 UML 的正确性
【发布时间】:2018-05-11 12:43:37
【问题描述】:

任务是:

我是 UML 的新手,所以我很努力,我有这些答案(请看下面)。我该如何改进它们?我在哪里有错误,我应该修改什么?

问题一:

问题 2a:

问题 2b:

对于第三个问题,我很困惑,我不知道该怎么画。你能给我一些建议吗?

【问题讨论】:

  • 2a - 每个“状态”是否需要覆盖那些相同的方法,或者是否有一个基本的“状态”类?
  • 我将 2b 解释为建议使用接口来添加新能力(组合)而不是创建多个子类(继承),当您添加新角色/角色时,这会很快变得混乱。任何“字符”实例都可以实现任意数量的“>”接口(取决于语言,您可能能够也可能不能扩展接口)。任何实现“>”接口的人都可以@ 987654325@; 任何实现“>”的人都能够`attack()。将不同的行为抽象为不同的接口(我认为是策略/装饰器模式)。
  • @mc01 谈论方法 - 我自己添加的。它们可能是不正确的......所以对于 2a......我离模式还很远,所以我发现的东西 - 我在工作中使用了它。
  • @Antonio112009 类和actor之间的关联对我来说是没有意义的,你应该避免使用聚合:规范中没有定义语义。
  • 不需要extend这个词:这就是箭头的意思。你老师要求一个模式列表,以及你如何使用它们。那么他们在哪里呢?

标签: design-patterns uml diagram


【解决方案1】:

你做了一些很好的工作,但你需要做一些更正。以下是我想到的一些事情:

  1. 玩家控制一支军队;一支军队由一名玩家控制。所以你的多重性值是错误的。此外,不涉及聚合,简单的关联。
  2. 军队是由多个单位组成的,所以组成(黑色菱形)。同样,因此,零单位的军队不是军队,因此军队必须至少有一个单位,而一个单位可以只有一个军队。因此,再次,您的多重性值是错误的。最后,您将钻石放在了关联的错误一端。
  3. 在您的第一个图表中,士兵、医生和动物不是从 Unit 派生的。如果他们这样做了,他们将是单位本身,而不是单位的属性。相反,它们应该派生自 Profession 类,并且 Unit 应该与 Profession 类有关联。
  4. 继承箭头中的“扩展”是您在用例图中使用的内容。您不要在类图中使用它;子类扩展基类这一事实由箭头本身表示。
  5. 第三个问题:这只是陆军级的事情。因此,您所要做的就是将一个名为 PrintArmyList() 的方法添加到 Army 类的方法列表中。您走在正确的轨道上:您已将“军队中有多少单位”放入方法列表中。您缺少的是您没有在类图中定义如何。您只需定义类的什么。你的教授给你一个曲线。
  6. 在您的第二张图中,工厂模式是可以使用的正确模式,但您并不完全正确(谷歌“工厂模式”并自己查看)。您的 Factory 类必须将 createProfession() 定义为抽象的(因此需要用斜体表示),而您的每个具体方法(Soldier、Medic、Animal)都需要具有 createProfession() 的具体实现。此外,您的专业课程是您的工厂课程。合并图表中的 Profession 和 Factory 类,并将 Unit 类与 Profession 类相关联。
  7. 您的 Profession 类不应该是一个组合,而只是一个简单的关联(没有菱形)。

关联仅仅意味着一个类使用另一个类。聚合意味着一个类“具有”一组与之关联的类。组合意味着聚合单元的生命周期相互依赖。

聚合和组合之间区别的一个很好的例子就是这个。想想汽车课。汽车有一个方向盘、四个轮胎、两个车轴等。现在,如果你在制造汽车,汽车与它的轮胎、车轴等有一个组成关系。换句话说,如果你没有轮子,你就没有汽车。但是,在垃圾场中,汽车与所有这些部件具有聚合关系。你可以把轮子拆下来卖掉,你还有一辆车,只是一辆没有轮子的。所以它是聚合还是组合取决于关联的上下文以及关联本身的性质。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多