当有人说模块同时具有行为和状态时,这意味着什么?

时间:2011-12-08 12:58:05

标签: ruby oop object behavior

根据我的理解,我得到了代码审查,我的模块同时具有行为和状态,无论如何它意味着什么?

这不是面向对象编程的重点,而是使用函数直接使用逻辑电路对数据进行操作。我们选择使用一套设计精巧的钥匙,开关和齿轮来操作这些封闭的黑匣子(封装)。

这样的方案自然不会同时包含数据(状态)和逻辑(行为)吗?

模块我的意思是:一个真正的Ruby模块。

我设计了这样的东西:How to design an application keeping SOLID principles and Design Patterns in mind

并在我用来混合的模块中实现命令。

3 个答案:

答案 0 :(得分:2)

无论您指的是什么,无论是由类(或类型)定义的对象,模块还是其中包含代码的任何其他内容, state 都是数据持续多次调用该事物。如果它“记住”一次执行与下一次执行之间的任何事情,那么它就具有状态。

行为 ,otoh,是操纵或处理状态数据的代码,或仅在单次执行代码期间使用的非状态数据(像传递给函数的参数值一样)。方法,子程序或函数,任何改变或做某事的东西都是行为

大多数类,类型或其他类型都有数据(状态)和行为,但是......

某些类或类型仅用于传输数据。它们被称为数据传输对象或DTO,或普通旧容器对象(PO​​CO)。他们只有状态,而且通常很少或没有行为。

其他时候,构造一个类或类型来保存通用实用程序函数(如数学库)。它不会在被调用以执行其中一个实用程序的很多次之间维持或保持任何状态。其中使用的唯一数据是作为每次调用库函数的参数传入的数据,并且在例程完成时丢弃该数据。它有行为。但没有州。

答案 1 :(得分:1)

你认为OOP封装了行为和状态的想法并将两者混合在一起是正确的,但是根据你的问题的措辞,我想知道你是否编写了一个ruby模块(mixin,等等)你想称它为有状态的,这样就可能在同一模块的多次使用中出现状态泄漏。

如果没有看到有问题的代码,我真的无法给你一个完整的答案。

答案 2 :(得分:0)

在面向对象的术语中,一个对象在封装数据(属性,属性)时被称为具有状态,并且当它提供操作(创建,删除,修改)的操作(方法,过程,函数)时被称为具有行为。 ,对数据进行计算。

相同的概念可以外推到ruby模块,如果它定义了模块中可访问的数据,它就具有“状态”,并且它具有以对数据进行操作的操作形式的“行为”。