这种“内部状态”是什么人一直在谈论?这个词真让我恼火。互联网还没有为我提供一个定义。
答案 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
方法修改的属性),而不会在语义上影响对象的内部状态。至少这是开发人员使用此修饰符时的合同......