3 5ADT 和OOP 中的」等價性」

2021-09-24 05:41:24 字數 3093 閱讀 5725

1.等價關係

2.不變型別的等價性

3.引用等價性和物件等價性

4.可變資料型別的觀察等價性和行為等價性

5.object契約

6. autoboxing and equality

1 equivalence relation 等價關係

adt 是對資料的抽象,體現為一組對資料的操作

抽象函式 af :內部表示 à 抽象表示

基於抽象函式 af 定義 adt 的等價操作

等價關係:自反、對稱、傳遞

2 equality of immutable types 不可變型別的等價性

1)用af定義等價:af對映到同樣的結果,則等價

2)站在外部觀察角度定義等價性

兩個類的每乙個操作都能得到相同的結果。

3 == vs. equals()

==:引用等價性,對基本資料型別使用==;對物件來說==是判斷兩個物件的指向的記憶體空間是否相同。

equals:物件等價性,對物件應該用equals

利用@override幫助編譯器判斷

4 implementing equals()

在 object 中實現的預設 equals() 是在判斷引用等價性,這通常不是程式設計師所期望的,故需要重寫

equals裡可以使用instanceof 來進行檢查

5.the object contract   object契約

等價關係:自反、傳遞、對稱

除非物件被修改了,否則呼叫多次 equals 應同樣的結果

「相等」的物件,其 hashcode() 的結果必須一致

不相等的物件要有不一樣的hashcode

always override hashcode() when you override equals().

6 equality of mutable types

觀察等價性:在不改變狀態的情況下,兩個 mutable 物件是否看起來一致

行為等價性:呼叫物件的任何方法都展示出一致的結果

對可變型別來說,往往傾向於實現嚴格的觀察等價性

但在有些時候,觀察等價性可能導致 bug ,甚至可能破壞 ri

list是放在雜湊桶裡的,如果值變了,雜湊值也會改變

如果某個 mutable 的物件包含在集合類中,當其發生改變後,集合類的行為不確定

對可變型別,equals實現行為等價性即可

也就是說,只有指向同樣記憶體空間的 objects,才是相等的。

如果一定要判斷兩個可變物件看起來是否一致,最好定義乙個新的方法。

得到false,最好還是用equals

軟體構造 3 5 ADT和OOP中的等價性

adt 對資料的抽象 體現為一組對資料的操作 af 內部表示 抽象表示 基於af定義adt的等價操作 等價關係 自反 對稱 傳遞 從af的角度 af對映到同樣的結果 等價 從外部觀察者角度 對兩個物件呼叫任何相同的操作都會得到相同的結果 等價 引用等價性,即是否指向記憶體中同一位址 在快照圖中指向同...

第三章 ADT與OOP ADT與OOP中的等價性

首先先談一下引用等價性與物件等價性,試想有兩個同樣的產品ab,那麼a是否等價於b呢?先說結論從引用等價性來講a不等價於b,而從物件等價性來講a等價於b。原因 a與b是同樣的產品,所以樣子形狀等等屬性都是一樣的所以物件等價性等價,但a與b雖說一模一樣,但畢竟是兩個物品,所以引用等價性不等價。回到正題,...

android中ADT和SDK的關係

adt android development tools sdk software development kit 手機rom中包含兩個基本的image,乙個是boot.image,這個image中主要是kernel和檔案系統 目錄下的一些東西。kernel我就不說了,目錄下主要是init和相關的...