Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 当有人说模块同时具有行为和状态时,这意味着什么?_Ruby_Oop_Object_Behavior - Fatal编程技术网

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

Ruby 当有人说模块同时具有行为和状态时,这意味着什么?,ruby,oop,object,behavior,Ruby,Oop,Object,Behavior,据我所知,我得到了一个代码审查,我的模块同时具有行为和状态,这到底意味着什么 这不正是面向对象编程的全部要点吗?它不是直接用逻辑电路使用函数对数据进行操作。我们选择使用一套设计巧妙的钥匙、开关和齿轮在这些封闭的黑匣子(封装)上操作 这样的方案自然不会同时包含数据(状态)和逻辑(行为)吗 我所说的模块是指:一个真正的Ruby模块 我设计了这样的东西: 并在我用来混合的模块中实现了命令。您认为OOP封装了行为和状态的概念,并将两者混合在一起,但从您问题的措辞来看,我想知道您是否编写了一个有状态的ru

据我所知,我得到了一个代码审查,我的模块同时具有行为和状态,这到底意味着什么

这不正是面向对象编程的全部要点吗?它不是直接用逻辑电路使用函数对数据进行操作。我们选择使用一套设计巧妙的钥匙、开关和齿轮在这些封闭的黑匣子(封装)上操作

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

我所说的模块是指:一个真正的Ruby模块

我设计了这样的东西:


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

您认为OOP封装了行为和状态的概念,并将两者混合在一起,但从您问题的措辞来看,我想知道您是否编写了一个有状态的ruby模块(mixin,无论您想叫它什么),因此,在同一模块的多个使用中存在状态泄漏的可能性


如果没有看到问题中的代码,我就无法给出完整的答案。

无论您指的是什么,无论是由类(或类型)、模块定义的对象,还是包含代码的任何其他对象,状态都是通过多次调用该对象而持久化的数据。如果它在一次执行和下一次执行之间“记住”任何内容,则它具有状态

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

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

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


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

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


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

您所说的是ruby意义上的“模块”,还是编程意义上的“模块”?是的,是真正的ruby模块。i、 e模块学生def name end end如果没有看到该模块的代码,很难说出任何内容。我猜评论员期望Ruby模块具有无状态或很少状态的行为。对不起,不能显示代码,但我只是说不能有一个经验法则吗?我们可以将状态和行为放在一起,也可以不放在一个模块中。但请看更新问题中的链接。很抱歉,我无法向您显示代码,因为这是一个我承诺不会泄露的面试问题。