你如何调用一个对象,它的状态可以通过它的字符串表示来完全描述?

林戈

OOP 世界中是否有名称来引用此类对象?例如,在java中

"Word".toString();

将返回输出Word这是当前存在于程序中的实体的字符串表示形式。

更多的例子可以用其他数据类型来完成,比如双精度数、整数,甚至可能是列表或不同的数据结构。

还有一些其他更复杂的不能以这种方式表示的,例如一个完整的 RESTful 服务类可能没有其当前状态的字符串表示。

什么是正确的术语?本国的?不可变的?最后两个术语并没有真正反映这个定义。

扩展问题:

想象一下,您有一个将字符串转换为映射的函数/方法,字符串可能是{key1=value1,key2=value2},您将返回映射,这对某些复杂对象不起作用,如果您要描述此函数的参数,您将如何描述概括它用于其他简单的对象类型?

吉姆加里森

您有一个由内部状态组成的抽象对象。

您有该对象状态的一种或多种具体表示。

在一种情况下,具体表示是一块内存,其中包含原语和对堆上其他组件对象的引用(在 Java 中,其他语言可能不同)。

您有一种不同的表示形式,可以存储在连续的字符或字节块中,并可能通过网络传输。

给定包含它们的非状态信息(方法、类层次结构等)的等效上下文,这两种表示在规范上是等效的,但它们用于不同的目的。

一般而言,这可以称为“代表变更”。当上面的第一个表示转换为第二个时,它被称为“序列化”,相反的过程是“反序列化”。请注意,您可以有许多不同的表示来满足不同的要求并支持不同的功能。

需要注意的重要一点是,在内存中和“序列化”(以及任何其他表示)的两种情况下,如果对象的状态包含对其他对象的引用,则整个“状态”由该对象和所有对象组成可以从它到达,以及从这些对象可以到达的对象等等。这被称为“对象图”,它平等地存在于所有表示中。

至于决定你应该或不应该使用哪一个,这完全取决于你的处理要求。

例如,一个完整的 RESTful 服务类可能没有其当前状态的字符串表示

这是不正确的,您始终可以定义对象状态的序列化表示。这样做可能不方便,但如果需要,可以这样做。

想象一下,您有一个将字符串转换为映射的函数/方法,字符串可能是{key1=value1,key2=value2}并且您将返回映射,这不适用于某些复杂对象

再次,它可以随时提出来工作,如果它是一个要求,只要这样做的成本是合理的。

总而言之,一切都是一种表示,假设您愿意承担这样做的成本,您可以安排将一种表示转换为另一种表示,然后再返回而不会造成损失。如上所述,一个因素是不仅表示单个对象的成本,而且表示整个对象图的成本,这可能是巨大的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从对象创建一个 json 字符串?– 它返回一个空的“[]”?

来自分类Dev

如何证明给定一个字符串是它的反向,它的尾部也是它的反向?

来自分类常见问题

如何解决“字符串插值为一个可选值生成调试描述;您是要明确显示它?” 在Xcode 8.3 beta中?

来自分类Dev

建立一个映射,它的键可以同时用作字符串和字符串数组

来自分类Dev

您可以在JSON字符串的对象名称中留一个空格,并且仍可以检索它吗?

来自分类Dev

您可以在JSON字符串的对象名称中留一个空格,并且仍可以检索它吗?

来自分类Dev

如何创建一个字符串并使用以它命名的函数?

来自分类Dev

是否有一个技巧/算法可以通过它找到O(n)时间中所有可能的子字符串

来自分类Dev

你如何从数组中取出一个对象并在它上面使用 instanceof ?

来自分类Dev

如何仅通过字符串中的第一个特殊字符来拆分字符串?

来自分类Dev

我可以打开一个新窗口并用字符串变量填充它吗?

来自分类Dev

如何在clob中找到一个特定的字符串,它的前缀是另一个字符串

来自分类Dev

创建一个 datetime 对象来表示一个实例,而不考虑字符串操作的时区

来自分类Dev

通过根据值选择它来修改一个对象的属性

来自分类Dev

尝试创建一种方法来获取二维字符串数组来表示它时,仅从游标记录中获取第一个值

来自分类Dev

如何通过更改其中的一个特定字段来创建新的json字符串?

来自分类Dev

DRF 不会向浏览器发送原始 JSON 字符串。它返回一个 JSON 字符串,想要绕过调用 json.load

来自分类Dev

编写一个存储过程,它接受输入字符串并按字符拆分它们

来自分类Dev

我期待一个函数返回一个字符串,但似乎返回未定义。它没有通过摩卡测试

来自分类Dev

如何跟踪一个字符串的多个属性而又不遍历它?

来自分类Dev

如果它的UUID与字符串(autoIncrement)匹配,我如何移动到数组中的下一个项目

来自分类Dev

如何声明一个字符串,以便它的长度由用户在c中给出?

来自分类Dev

Javascript说一个对象是一个字符串,不允许我访问它的键值(请求承诺)

来自分类Dev

Java/Android:如果字符串等于其他字符串,如何找到它的第一个字符

来自分类Dev

当 argv 是一个字符数组时,它如何是一个字符串数组?

来自分类Dev

Qt中的另一个字符串中出现子字符串时,如何打印它的值?

来自分类Dev

如何在java中的文件中找到一个字符串并在它旁边获取字符串?

来自分类Dev

可以通过主干集合来查看错误字符串不是一个函数

来自分类Dev

获取一个字符串而不在控制台上显示它

Related 相关文章

  1. 1

    如何从对象创建一个 json 字符串?– 它返回一个空的“[]”?

  2. 2

    如何证明给定一个字符串是它的反向,它的尾部也是它的反向?

  3. 3

    如何解决“字符串插值为一个可选值生成调试描述;您是要明确显示它?” 在Xcode 8.3 beta中?

  4. 4

    建立一个映射,它的键可以同时用作字符串和字符串数组

  5. 5

    您可以在JSON字符串的对象名称中留一个空格,并且仍可以检索它吗?

  6. 6

    您可以在JSON字符串的对象名称中留一个空格,并且仍可以检索它吗?

  7. 7

    如何创建一个字符串并使用以它命名的函数?

  8. 8

    是否有一个技巧/算法可以通过它找到O(n)时间中所有可能的子字符串

  9. 9

    你如何从数组中取出一个对象并在它上面使用 instanceof ?

  10. 10

    如何仅通过字符串中的第一个特殊字符来拆分字符串?

  11. 11

    我可以打开一个新窗口并用字符串变量填充它吗?

  12. 12

    如何在clob中找到一个特定的字符串,它的前缀是另一个字符串

  13. 13

    创建一个 datetime 对象来表示一个实例,而不考虑字符串操作的时区

  14. 14

    通过根据值选择它来修改一个对象的属性

  15. 15

    尝试创建一种方法来获取二维字符串数组来表示它时,仅从游标记录中获取第一个值

  16. 16

    如何通过更改其中的一个特定字段来创建新的json字符串?

  17. 17

    DRF 不会向浏览器发送原始 JSON 字符串。它返回一个 JSON 字符串,想要绕过调用 json.load

  18. 18

    编写一个存储过程,它接受输入字符串并按字符拆分它们

  19. 19

    我期待一个函数返回一个字符串,但似乎返回未定义。它没有通过摩卡测试

  20. 20

    如何跟踪一个字符串的多个属性而又不遍历它?

  21. 21

    如果它的UUID与字符串(autoIncrement)匹配,我如何移动到数组中的下一个项目

  22. 22

    如何声明一个字符串,以便它的长度由用户在c中给出?

  23. 23

    Javascript说一个对象是一个字符串,不允许我访问它的键值(请求承诺)

  24. 24

    Java/Android:如果字符串等于其他字符串,如何找到它的第一个字符

  25. 25

    当 argv 是一个字符数组时,它如何是一个字符串数组?

  26. 26

    Qt中的另一个字符串中出现子字符串时,如何打印它的值?

  27. 27

    如何在java中的文件中找到一个字符串并在它旁边获取字符串?

  28. 28

    可以通过主干集合来查看错误字符串不是一个函数

  29. 29

    获取一个字符串而不在控制台上显示它

热门标签

归档