OOP 世界中是否有名称来引用此类对象?例如,在java中
"Word".toString();
将返回输出Word
。这是当前存在于程序中的实体的字符串表示形式。
更多的例子可以用其他数据类型来完成,比如双精度数、整数,甚至可能是列表或不同的数据结构。
还有一些其他更复杂的不能以这种方式表示的,例如一个完整的 RESTful 服务类可能没有其当前状态的字符串表示。
什么是正确的术语?本国的?不可变的?最后两个术语并没有真正反映这个定义。
扩展问题:
想象一下,您有一个将字符串转换为映射的函数/方法,字符串可能是{key1=value1,key2=value2}
,您将返回映射,这对某些复杂对象不起作用,如果您要描述此函数的参数,您将如何描述概括它用于其他简单的对象类型?
您有一个由内部状态组成的抽象对象。
您有该对象状态的一种或多种具体表示。
在一种情况下,具体表示是一块内存,其中包含原语和对堆上其他组件对象的引用(在 Java 中,其他语言可能不同)。
您有一种不同的表示形式,可以存储在连续的字符或字节块中,并可能通过网络传输。
给定包含它们的非状态信息(方法、类层次结构等)的等效上下文,这两种表示在规范上是等效的,但它们用于不同的目的。
一般而言,这可以称为“代表变更”。当上面的第一个表示转换为第二个时,它被称为“序列化”,相反的过程是“反序列化”。请注意,您可以有许多不同的表示来满足不同的要求并支持不同的功能。
需要注意的重要一点是,在内存中和“序列化”(以及任何其他表示)的两种情况下,如果对象的状态包含对其他对象的引用,则整个“状态”由该对象和所有对象组成可以从它到达,以及从这些对象可以到达的对象等等。这被称为“对象图”,它平等地存在于所有表示中。
至于决定你应该或不应该使用哪一个,这完全取决于你的处理要求。
例如,一个完整的 RESTful 服务类可能没有其当前状态的字符串表示
这是不正确的,您始终可以定义对象状态的序列化表示。这样做可能不方便,但如果需要,可以这样做。
想象一下,您有一个将字符串转换为映射的函数/方法,字符串可能是
{key1=value1,key2=value2}
并且您将返回映射,这不适用于某些复杂对象
再次,它可以随时被提出来工作,如果它是一个要求,只要这样做的成本是合理的。
总而言之,一切都是一种表示,假设您愿意承担这样做的成本,您可以安排将一种表示转换为另一种表示,然后再返回而不会造成损失。如上所述,一个因素是不仅表示单个对象的成本,而且表示整个对象图的成本,这可能是巨大的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句