《UML面向对象设计基础》—第1章1.4节对象标识-阿里云开发者社区

开发者社区> 美人迟暮> 正文

《UML面向对象设计基础》—第1章1.4节对象标识

简介:
+关注继续查看

本节书摘来自异步社区《UML面向对象设计基础》一书中的第1章1.4节对象标识,作者【美】Meliir Page-Jones,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 对象标识
UML面向对象设计基础
面向对象胜过ADT的第一个十分重要的概念就是对象标识特性:每个对象具有自己的标识。

对象标识(object identity)是指每个对象(不考虑其所属类或当前状态)可以作为不同的软件实体被标识、处理的特性。

对于给定对象可以用唯一的信息将其与其他对象伙伴区分开来。这个“唯一的信息”可以通过对象句柄机制提供,下面通过分析一行hominoid代码来解释这个问题:

var hom1:Hominoid :=Hominoid.New
这行代码的右边创建一个新的Hominoid类的对象,如图1.6所示。注意图中所示的这个对象的句柄为数字602237。句柄就是对象被创建时赋给它的标识符。


9f14c7bc014c29c12383d0b0bb6e819507c854d7

句柄遵守两个规则:

① 在任何情况下,对象在整个生命周期都保持同一个句柄。

② 两个对象不可能具有相同的句柄。系统在运行时无论何时创建一个新对象,都给这个对象赋予一个与其他所有句柄(包括过去、现在和未来)不同的句柄(注:句柄正规地被称为对象标识符(object identifier,OID)。大多数面向对象环境自动创建这个唯一的OID)。因此即使对象具有相同的结构或保存相同的信息也可以将对象区分开来,因为对象具有不同的句柄。

这行代码的左边是var hom1:Hominoid的声明。与通常的程序声明一样,起一个程序员容易记忆的可以保存值的名字(这里为hom1),Hominoid为hom1的类名,在1.6节专门讨论。

你可能已经想到,赋值符号(:= 读做“现在指向”或“现在引用”)使变量hom1保存了右边赋值语句所创建的对象的句柄,“指向”表示一般的含义。术语“指针”含义包括了C++指针,C++引用,Eiffel实体,Smalltalk和Java变量等。

没有人(包括程序员、用户或任何人)能真正看到新对象的句柄(602237),除非用调试程序调试内存。程序员通过其命名的变量hom1访问对象。换言之,hom1就表示句柄为602237的对象。如图1.7所示。

一些面向对象环境使用对象的物理内存地址作为句柄。这样做比较简单,但当对象在内存中移动或交换到硬盘时,这样做就比较可怕了。句柄最好是无意义的、随机的并且是唯一的数字(尽管我们不是编译程序的设计者,无法知道计算机是如何产生句柄值)。


35ea74c496212d048dafffe95099b9b5f040f095

比如我们执行另一行类似的代码:

var hom2:Hominoid :=Hominoid.New
该行代码创建类Hominoid的另一个对象,其句柄假设为142857,然后将句柄保存在变量hom2中(参见图1.8)。
360_20170608112039266


图片地址

为说明问题,写出下面的赋值语句:

hom2:= hom1
现在变量hom1和hom2都指向相同的对象(即创建的第一个对象,句柄为602237的Hominoid实例)。参见图1.9。

两个变量指向同一个对象通常没有什么意义。而且更糟糕的是,现在已经没有办法访问第二个对象(句柄为142857)。因此这个对象就消失了,仿佛掉进了一个黑洞!大多数面向对象环境此时起用一个垃圾回收程序将该对象从内存删除。垃圾回收程序是操作环境的一种服务,不是一辆发出气味的大卡车每周五早晨隆隆驶进死胡同,在JAVA和Eiffel中将实现自己垃圾回收程序,但不是在C++环境中。


9f80df17d50a8a35bad436b65fffa3752e837b5d

通过句柄使每个对象具有自己的标识似乎非常平常。但这种简单的思想却使设计和构造面向对象软件发生了深刻变化。在下一节中将可以看到这种变化。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《逻辑与计算机设计基础(原书第5版)》——1.6 字符编码
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.6节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1113 0
《逻辑与计算机设计基础(原书第5版)》——1.7 格雷码
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.7节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1256 0
《HTML5+CSS3网页设计入门必读》——导读
网页设计是基于标准的。虽然“real fonts”或CSS3也对网页设计产生了深远的影响,但HTML的影响是其他方面所无法比拟的。HTML是开发人员对W3C步调和政策不满的结果,它是为网页应用程序(而不仅仅是文件)而设计的,因此,虽然这个新版本的网络语言令网页设计界为之兴奋,但也导致了同等程度的愤怒
1665 0
《逻辑与计算机设计基础(原书第5版)》——1.3 数制
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.3节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1068 0
《逻辑与计算机设计基础(原书第5版)》——1.4 算术运算
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.4节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1226 0
《逻辑与计算机设计基础(原书第5版)》——1.5 十进制编码
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.5节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
755 0
《逻辑与计算机设计基础(原书第5版)》——1.2 计算机系统设计的抽象层次
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.2节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1713 0
《逻辑与计算机设计基础(原书第5版)》——1.8 本章小结
本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第1章,第1.8节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
994 0
嵌入式,vi基础命令
vi是linux最基本的文本编辑工具,他是“Visual Interface”的简称 vi没有菜单,其主要功能是由种类繁多的命令来完成的,从工作方式来看,vi有三种模式:命令模式,文本输入模式,和末行模式 命令模式:  在vi中,无论用户处于哪种模式,只要按下Esc,就可以进入命令模式。
551 0
+关注
美人迟暮
Nothing for nothing.
1020
文章
212
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载