关于面向对象设计的问题用Ruby

Ray*_*yne 6 ruby oop

我正在考虑用Ruby编写一个CLI Monopoly游戏.这将是我在Ruby中完成的第一个大型项目.我在编程方面的大部分经验都是使用Clojure和Haskell等函数式编程语言.我很了解Object Orientation,但我没有设计面向对象程序的经验.

现在,这是交易.

在大富翁中,董事会周围有很多空间.大多数空间是属性,其他空间做其他事情.

每个空间都有一个班级会很聪明吗?我正在考虑拥有一个所有其他空间继承的Space类,并且具有一个继承自Space的Property类,然后为继承自Property的每个属性创建一个类.这意味着很多课程,这让我相信这是一个糟糕的方式来做我想做的事情.

我还打算做的是使用'继承'钩子方法来跟踪所有属性,以便我可以搜索它们并在需要时将它们从未买单列表中删除.

这类问题似乎出现在很多程序中,所以我的问题是:有没有更好的方法来做到这一点,我是否遗漏了对面向对象设计非常重要的东西?

如果这是一个愚蠢的问题,我很抱歉,对于OOPD,我只是一无所知.

谢谢.

Pes*_*sto 9

你走在正确的轨道上,但是你走得太远了,这是初学者在OOP上的一个常见错误.每个属性应该不会是一个单独的类; 它们都应该是Property类的实例.我会按照以下几行来创建属性类:

空间

  • 名称
  • 它上面有哪些部分
  • 接下来是哪个空间(也许是之前的?)
  • 登陆时发生的任何特殊行为

财产(扩展空间)

  • 谁拥有它
  • 有多少房屋/酒店
  • 适当的价值
  • 房地产垄断集团
  • 租金率
  • 是否抵押

因此,例如,Boardwalk将是Property类型的对象,具有适用于它的特定值,例如属于深蓝色垄断组.

  • 类*是*样板文件.它们旨在包含重复的属性和行为.至于为每个属性显式实例化它,无论你如何操作,都必须实例化属性.但你没有*明确地做到这一点.您可以在例如XML文件中包含有关属性的数据,并让程序在启动时实例化每个属性. (2认同)