【问题标题】:What does it mean when someone says that the module has both behavior and state?当有人说模块同时具有行为和状态时,这是什么意思?
【发布时间】:2012-01-15 21:50:37
【问题描述】:

据我了解,我的代码审查表明我的模块同时具有行为和状态,这到底是什么意思?

这难道不是面向对象编程的重点,而是使用函数直接通过逻辑电路对数据进行操作。我们选择使用一组精心设计的按键、开关和齿轮对这些封闭的黑盒(封装)进行操作。

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

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

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

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

【问题讨论】:

  • 你说的是 ruby​​ 意义上的“模块”,还是编程意义上的“模块”?
  • 是模块,就像在真正的 ruby​​ 模块中一样。即模块学生def name end end
  • 不看那个模块的代码就很难说什么。我猜评论者期望 Ruby 模块的理想行为是没有状态或状态很少。
  • 抱歉不能显示代码,但我只是说不能有拇指规则吗?我们可以在一个模块中同时拥有或不拥有状态和行为。但请查看更新问题中的链接。

标签: ruby oop object behavior


【解决方案1】:

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

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

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

有些类或类型只是为了携带数据而设计的。它们被称为数据传输对象或 DTO,或普通旧容器对象 (POCO)。它们只有状态,通常很少或没有行为。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 抱歉不能给你看代码,因为这是我保证不会泄露的面试题。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-25
      • 2011-06-22
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      相关资源
      最近更新 更多