【问题标题】:Contract multiple similar attributes in UML在 UML 中收缩多个相似的属性
【发布时间】:2016-05-23 15:19:07
【问题描述】:

在学校里,我们应该为我们计划编写的课程画一个 UML 类图(我们应该做计划)。

我现在有 10 个 JLabel,它们是 Game 类的属性,每个都显示不同的图片,但它们都用于相同的目的。为了更清楚一点,标签将被称为 Player1Throw1Player1Throw5Player2Throw1Player2Throw5

我的问题是,UML中是否有正确的方法来收缩这10个标签,这样我就不用写了

Game
--------
-Player1Throw1: JLabel
-Player1Throw2: JLabel
-Player1Throw3: JLabel
-Player1Throw4: JLabel
-Player1Throw5: JLabel
-Player2Throw1: JLabel
-Player2Throw2: JLabel
-Player2Throw3: JLabel
-Player2Throw4: JLabel
-Player2Throw5: JLabel

或者换句话说:有没有办法将这 10 行压缩成 2 行?

感谢您的帮助!

【问题讨论】:

  • 试着把它们做成数组。

标签: class attributes uml diagram contract


【解决方案1】:

您可以在 UML 中使用以下符号:

- Player1Throw : JLabel[5]

- Player2Throw : JLabel[5]

【讨论】:

  • 我最终会为这些 JLabel 使用数组,所以你的建议最适合我。谢谢!
【解决方案2】:

您应该能够从类图生成代码。如果您不单独定义所有属性,您将如何做到这一点?如果你能回答这个问题,你就知道如何展示它们了。

在 OOP 中进行设计试图找出是否可以使行为更加抽象。如果你有 10 个类似的标签,你能不能再基于一个共享接口创建另一组类来完成这项工作?深入研究设计模式。有一种针对这种情况的模式。

【讨论】:

    【解决方案3】:

    不要将全局变量用于局部属性。 在代码级别,对具有相同角色的多个对象使用集合(数组、集合、包等)。

    您应该定义一个 Player 类(据我所知,它是 Game 的一部分),并且 Game 类应该包含一个 Player 类型的两个对象的集合(数组?)。 Player 应该有一个 JLabel 类型的属性 throw,多重性为 5(或者可能是 0..5 - 我不知道您的项目的详细信息,但是在代码级别它不会真正影响类结构)。

    因此您的 UML 类图将如下所示

    【讨论】:

    • 我有这两个类(它们甚至命名相同)。据我了解,您的意思是,我应该制作 Players 的 JLabels 属性?我已经遇到了项目的最后期限(这只是一个为期 4 周的小型项目),并最终在 Game 类中拥有了所有与 GUI 相关的属性。我想,那不是一个好的解决方案?
    • 是的。也不要创建属性 throw1、throw2 等。使用某种集合(List/Set/Bag/Array/Whatever)。当您需要循环此类列表时,这非常有用,但也可以使代码重用变得更容易。当然不,在 Game 类中包含所有与 GUI 相关的属性是一个非常糟糕的解决方案(你应该有专门的类),但是我对 GUI 开发的知识是有限的。
    猜你喜欢
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多