这也许是一匹要打败的老马(还没死呢?),但我想知道OCL是否允许在领域模型(概念类图,独立于实现)中,在Monopoly游戏中建模房屋和酒店的业务规则问题。
在我天真的尝试之后,我提供了规则,但我不知道如何在OCL中捕获排序方面。也就是说,一个人必须拥有一个颜色组的所有房产,然后“均匀”地在这些房产上建造房屋(见下文),然后用一家酒店等来替换一处房产上的4栋房屋。还有“住房短缺”的情况,因为游戏中总共只有32栋房屋和8家酒店。我意识到这个问题是雄心勃勃的,但我想看看东方海外是否有这个可能,并给出一些方向的建议。
到目前为止,我已经成功地指定了这样一个事实,即属性不能同时拥有房屋和酒店,同时在两个关联之间使用{xor}选项。

模型用PlantUML/PlantText完成。
这里是有关房屋和酒店的规则,引用自粉丝网站。
当玩家拥有一个颜色组中的所有房产时,他们可以从银行购买房屋,并在这些房产上建造房屋。如果你买了一套房子,你可以把它放在任何一处房产上。你购买的下一套房子必须建在你可能拥有的任何一个未改进的房产上,或者任何其他完整的颜色组上。您必须向银行支付的每栋房子的价格显示在您所建房屋的产权契约卡上。业主仍然收取双倍的租金,从一个对手谁降落在未改进的财产,那里的完整的颜色组。按照上述规定,你可以在任何时候购买和建造你的判断和财务状况允许的房子。但是你必须平均建造,也就是说,你不能在任何一个颜色组的任何一个财产上建造一个以上的房子,除非你已经在这个群体的每一个财产上建造了一个房子。然后,您可以从第二排房屋开始,以此类推,最多可将四栋房屋限制为一处房产。例如,如果在一个属性上只有一个属性上的一个房屋,则不能在该属性上建造三栋房屋。当你平均建造房屋时,如果你把房子卖回给银行,你也必须平均地分解(参见出售房产)。当一个玩家在一个完整的颜色组的每个财产上有四个房子时,他们可以从银行购买一家酒店,并在该颜色组的任何财产上安装它。他们将这四栋房屋从该财产归还给银行,并支付旅馆的价格,如产权契约卡所示。在任何一处财产上只能建立一家旅馆。
注:这不是一个家庭作业,虽然它会成为一个伟大的,也许是一个研究生班?
发布于 2017-07-11 22:02:21
使用OCL,您可以在类图中记录类不变量,例如,结构约束,例如:
{xor}在两个链接之间)forAll和Exist)。但是,类图中的UML约束并不是真正用于记录类图中的动态约束。
当然,OCL允许您定义方法的前后条件(即pre和post关键字)。这可以表示“在增加一家酒店之前,你需要在房产上建4栋房子,而在添加了酒店之后,你就没有房子了”。然而,这种约束使得普通凡人很快就无法读懂图表。而可读性是UML图的主要目的。
一种更好的方法是使用状态图来记录允许的状态转换和相应的约束。这有利于明确区分结构约束和行为约束。
https://softwareengineering.stackexchange.com/questions/352587
复制相似问题