平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

オブジェクト指向の神髄

オブジェクトのアイデンティティってのは、オブジェクト参照のことだと思います。

オブジェクト参照とは、あるオブジェクトの状態が変化しても、オブジェクトが生存している限り変わらず同じオブジェクトを指し示し続けるようなもの。

変数aがあるオブジェクトを指し示してるとして、

b = a;
b.method();

とやったとしても、aとbは同じオブジェクトを指し示している、こういうのがオブジェクト参照。

オブジェクトの同一性は、オブジェクト参照で判定する。オブジェクト参照が同じなら、それは同じオブジェクト。オブジェクト参照が異なれば、それは異なるオブジェクト。

「同一であるにもかかわらずそれが判定できない」っていうのは、参照ではなくCのポインタみたいな場合だったらあり得る。

int array[10];
int *a, *b;
a = &array[0];
b = &array[1];

この場合、aもbも同じ配列オブジェクトを指し示しているということは、プログラマにしか分からない。(それとも、この場合はaとbは違うオブジェクトを指していると考えるのかな?)

「同一でないにもかかわらずそれが判定できない」っていうのは、たとえば「メモリ上に2つのオブジェクトが存在するが、参照がまったく同じ」みたいなことなので、普通あり得ないと思う。