知识卡片
引用对象与值对象的标识差异
内容
对象是否需要靠标识判断相不相同,取决于它是引用对象还是值对象。引用对象(如Customer)标识很重要:现实里一名顾客通常只对应一个软件对象,所有引用它的地方引用同一个实例,判断两个引用是否指向同一顾客要比较标识,副本应尽量避免、出现副本要想办法同步。值对象(如Date)标识不重要:可同时存在成百上千个都代表1月1日的对象,它们是可互换的副本,判断两个值对象是否相同要比较它们代表的值而非标识。
参考来源
- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第5章《类图:进阶概念》(源文件:_epub-src/EPUB/4.xhtml)
- 结论依据:原文说明"引用对象(reference object)的例子是Customer……你通常只需要一个软件对象来指代现实世界中的一名顾客",与"值对象(value object)就是像Date这样的东西……存在数百个指代1-Jan-04的对象是正常的……你不会查看它们的标识,而是查看它们代表的值"形成对照。
- 原始内容:引用对象(reference object)的例子是Customer(顾客)。在这里,标识非常重要……值对象(value object)就是像Date这样的东西。你经常用多个值对象代表现实世界中的同一个对象……如果你有两个日期,希望看看它们是否相同,你不会查看它们的标识,而是查看它们代表的值。