首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCL在域模型中捕获在垄断中建造房屋和酒店的规则

OCL在域模型中捕获在垄断中建造房屋和酒店的规则
EN

Software Engineering用户
提问于 2017-07-11 19:57:13
回答 1查看 285关注 0票数 1

这也许是一匹要打败的老马(还没死呢?),但我想知道OCL是否允许在领域模型(概念类图,独立于实现)中,在Monopoly游戏中建模房屋和酒店的业务规则问题。

在我天真的尝试之后,我提供了规则,但我不知道如何在OCL中捕获排序方面。也就是说,一个人必须拥有一个颜色组的所有房产,然后“均匀”地在这些房产上建造房屋(见下文),然后用一家酒店等来替换一处房产上的4栋房屋。还有“住房短缺”的情况,因为游戏中总共只有32栋房屋和8家酒店。我意识到这个问题是雄心勃勃的,但我想看看东方海外是否有这个可能,并给出一些方向的建议。

到目前为止,我已经成功地指定了这样一个事实,即属性不能同时拥有房屋和酒店,同时在两个关联之间使用{xor}选项。

模型用PlantUML/PlantText完成。

这里是有关房屋和酒店的规则,引用自粉丝网站

当玩家拥有一个颜色组中的所有房产时,他们可以从银行购买房屋,并在这些房产上建造房屋。如果你买了一套房子,你可以把它放在任何一处房产上。你购买的下一套房子必须建在你可能拥有的任何一个未改进的房产上,或者任何其他完整的颜色组上。您必须向银行支付的每栋房子的价格显示在您所建房屋的产权契约卡上。业主仍然收取双倍的租金,从一个对手谁降落在未改进的财产,那里的完整的颜色组。按照上述规定,你可以在任何时候购买和建造你的判断和财务状况允许的房子。但是你必须平均建造,也就是说,你不能在任何一个颜色组的任何一个财产上建造一个以上的房子,除非你已经在这个群体的每一个财产上建造了一个房子。然后,您可以从第二排房屋开始,以此类推,最多可将四栋房屋限制为一处房产。例如,如果在一个属性上只有一个属性上的一个房屋,则不能在该属性上建造三栋房屋。当你平均建造房屋时,如果你把房子卖回给银行,你也必须平均地分解(参见出售房产)。当一个玩家在一个完整的颜色组的每个财产上有四个房子时,他们可以从银行购买一家酒店,并在该颜色组的任何财产上安装它。他们将这四栋房屋从该财产归还给银行,并支付旅馆的价格,如产权契约卡所示。在任何一处财产上只能建立一家旅馆。

注:这不是一个家庭作业,虽然它会成为一个伟大的,也许是一个研究生班?

EN

回答 1

Software Engineering用户

发布于 2017-07-11 22:02:21

使用OCL,您可以在类图中记录类不变量,例如,结构约束,例如:

  • “一个可构造的财产可以有一个旅馆或0.4间房子”(即你的{xor}在两个链接之间)
  • “一间或一间以上的房屋及一间酒店,要求同一组别(颜色)的所有其他可建造物业均属于同一玩家”。这要求您在类图中标识组和播放机所有权,并使用OCL集合操作(例如forAllExist)。
  • “拥有n所房产要求同一群体的所有其他财产至少有n-1房屋”(与上述相同的原则)。
  • “在某一房产上拥有一家旅馆,要求同一群体的所有其他财产至少有4栋房屋或一家旅馆”。

但是,类图中的UML约束并不是真正用于记录类图中的动态约束。

当然,OCL允许您定义方法的前后条件(即prepost关键字)。这可以表示“在增加一家酒店之前,你需要在房产上建4栋房子,而在添加了酒店之后,你就没有房子了”。然而,这种约束使得普通凡人很快就无法读懂图表。而可读性是UML图的主要目的。

一种更好的方法是使用状态图来记录允许的状态转换和相应的约束。这有利于明确区分结构约束和行为约束。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/352587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档