什么是内部状态?

时间:2014-01-25 02:46:45

标签: c++ oop

这种“内部状态”是什么人一直在谈论?这个词真让我恼火。互联网还没有为我提供一个定义。

4 个答案:

答案 0 :(得分:2)

来自Object-Oriented Analysis and Design with Applications

  

对象的状态包含所有(通常是静态的)   对象的属性加上当前(通常是动态的)值   每个属性

在面向对象的编程中,对象可以具有状态(数据)和行为(函数)。

行为指定对象可以做什么,并且通常以其状态为条件。

状态可以由任何成员或静态变量表示,它将取决于对象所属的类的定义。

答案 1 :(得分:1)

你的内部状态是什么?

饥饿,口渴,

在上面添加一些变量。

所以在OO方面。

我的状态是

饮料要求:两杯水,    食物要求:三明治

因此,相同的概念适用于对象。 anobject变量的总和

答案 2 :(得分:0)

建立@AdamBurry所说的内容,将对象视为另一段代码可以使用的黑盒子。该代码实例化它:

Order o = new Order();

然后代码要求对象自行修改:

OrderItem oi = new OrderItem("Widget", 5.5);
o.AddItemToOrder(oi);

然后代码要求对象做某事。

o.GetTotal();

如果刚刚添加的项目,订单如何计算新的总数?它是否有OrderItems的清单,是否有价格?你打赌。它有内部细节,调用的代码可能无法访问。对象需要非常仔细地跟踪的那些黑色方框细节是对象的内部状态。

你可能永远不想暴露给“外部”世界的更实际的例子是保持对象“脏”状态的变量。它是否已被修改,但未提交给数据库,但是?外部代码永远不需要知道这一点,但对象可能需要。

允许您在列表中前进或后退的对象怎么办?在该对象的某处,将有一个内部状态变量充当指向当前记录的指针。同样,调用代码永远不需要看到这一点,但是当代码调用.MoveNext()方法时,对象将不得不将该指针递增1以维持它在列表中的位置状态。 / p>

答案 3 :(得分:0)

对象的内部状态是其所有属性的集合'值。内部状态的一个特定方面是应用于处于定义的内部状态(=其所有属性的特定集合值)的对象的方法将导致另一个也定义(和可再现)的内部状态。 / p>

当您以某种方式记录要在录制的系统模拟中重播的系统状态时,此方面很重要。通过记录对象的原始内部状态,您可以通过简单地调用其方法来重现其所有后续内部状态,而无需存储任何其他数据。然而,这在实践中说起来容易做起来......

应用于C ++时,const方法不会改变内部状态。

可以更改mutable属性(=可由const方法修改的属性),而不会在语义上影响对象的内部状态。至少这是开发人员使用此修饰符时的合同......