状态与行为

时间:2009-08-26 06:29:19

标签: oop state behavior

有时对象由纯数据组成。这些对象有字段,访问器,几乎没有其他方法。

有时对象由纯粹的行为组成。它们具有表示其状态的其他对象,或者数据作为方法参数传递。通常这些对象代表算法或某种策略。

您更喜欢哪种州/行为比例?
什么更可维护?
什么更容易出错?

4 个答案:

答案 0 :(得分:2)

我喜欢做一个或另一个的对象 - 要么代表具有行为的东西(理想情况下,只暴露空方法),要么代表纯状态(理想情况下,它是不可变的,除了维护其状态和可能的验证之外没有代码)

第一种类型的对象将另一种类型传递给彼此。这与Actor模型非常接近,这样做可以解决很多问题。 (如果在Java / C#中执行此操作,则可以将接口作为'values'传递给第一个类型。)

我发现它在中间的对象(既有状态又有行为)会遇到问题...行为对象中的某些状态是可以的,只要它的主要目的不是查询

答案 1 :(得分:2)

如果你设计的是所有行为的对象,没有状态或所有状态且没有行为,我认为你的设计中存在一个缺陷。在现实世界中遇到这些类型的对象真的不常见,如果这些对象不是您所描述的补充对象,而是现实世界对象的表示,那么我认为某处出现了错误。

我没有状态/行为的任何设定比例。我认为每个对象都有自己的形状,这可能在对象之间有很大差异。但我认为随着时间的推移,如果你正在研究这个对象,那么动词往往比名词/形容词更多,即行为将主宰国家。

这就是我在程序中观察到的。

答案 2 :(得分:1)

我喜欢(按优先顺序排列)的对象:

  1. 详细说明如何使用它们,以免达到无效状态。
    • 在调用方法时,如果异常处于正确状态,则抛出异常。
    • 让方法允许您在调用方法之前声明它们处于正确的状态。
  2. 当这些措施到位时,要搞砸了就更难了。

    没有行为的对象也可以是哈希表,没有状态的对象也可以是函数集合。

答案 3 :(得分:0)

如果行为是通用的,则行为应该作为单独的类实现,并且可以应用于不同类的对象。如果是这种情况,则无法选择“比率” - 它仅取决于特定系统中通用策略的数量。

否则,一个过早概括的情况,甚至更糟糕的是,无理违反OO原则。是的,这很容易出错。

相关问题