軟體構造課程筆記 物件等價性

2021-09-24 16:35:54 字數 795 閱讀 5635

可變類

equals() 比較引用,同==運算子。即比較行為等價性而非觀察等價性。

hashcode() 將引用位址對映到整型。

不當覆寫equals(),hashcode()。

不可邊類

equals() 比較抽象值。即比較行為等價性(對不可變類來說,觀察等價即行為等價)。

hashcode() 將抽象值對映的整型。

應當覆寫equals(),hashcode()。

自反性 x.equals(x)==true。

對稱性 y.equals(x)==true <—> x.equals(y)==true

傳遞性 x.equals(y)==true,y.equals(z)==true —> x.equals(z)==true

一致性 若xy引用的物件為變化,則反覆呼叫x.equals(y)的返回值當恆定

非空性 x.equals(null) == false

equals()示例

@override

public boolean equals(object otherobject)

等價物件必須有相同hash值

不等物件應盡可能避免相同hash值

hash值應當恆定(不可變物件的抽象值恆定,其hash自然恆定;可變物件用位址hash,固也恆定)

覆寫equals()時,也應覆寫hashcode()

否則,使用基於hash的資料結構時會出現混亂的行為。

軟體構造課程

課程目標 在高階語言程式設計的基礎上,認識軟體構造的質量標準與目標,學習軟體 構造的基本過程,從而具備面向質量目標的複雜軟體構造方法與能力 深入學習抽象資料型別 adt 與物件導向程式設計 oop 初步掌握面向關鍵質量目標 可理解性 可維護性 可復用性 健壯性 時 空效能 的軟體構造基本技術 了解軟...

軟體構造課程 ADT

abstract data types可簡單理解為乙個封裝的型別,它不需要提供各種詳細的資訊,但是可以有強大的功能。它具有一定的防禦性,只對外提供一些操作,但是內部可以是各種複雜的函式。對於乙個抽象類操作它的型別主要有4種 t非此型別的資料 t則為該資料型別。creators t t。比如對於int...

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

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