董保華 6527 字 1個月前

◎第一章 人工智能語言 麵向對象語言

(5 / 6)
登入後報錯可獲 3天VIP 免廣告——立即登入

類型的組成結構決定的呢?還是由名字決定呢?

由類型的組成結構決定的subtype是這樣的:如果類型一具有了類型二的所有需要具備的屬性和方法,就說類型一是類型二的subtype.

由類型名字決定的subtype是這樣的:隻有當類型一具有了類型二的所有需要具備的屬性和方法,並且類型一被明確聲明為類型二的subtype時,才認可這種關係。

而如果的選擇是一,那麼那些屬性和方法是subtype所必需具備的呢?哪些是可有可無的呢?

由組成結構決定的subtype能夠在分布式環境和objectpersistence係統下進行類型匹配。缺點是,如果兩個類型碰巧具有了相同的結構,但實際上卻風馬牛不相及,那就會造成錯誤。不過,這種錯誤是可以用一些技術來避免的。

相比之下,基於名字的subtype不容易精確定義,而且也不支持基於結構的subtype.

目前,可以先定義一個簡單的基於結構的subtype關係:

對兩個類型O和O’,

O’<:O當O’具有所有O類型的成員。O’可以有多於O的成員。

例如:ReCell<:Cell.

為了簡明,這個定義沒有考慮到方法的特化。

另外,當類型定義有遞歸存在的時候(類似於鏈表的定義),對subtype的定義需要額外地加小心。

因為不關心成員的順序,這種subtype的定義自動地就支持多重的subtype.

比如說:

ObjectTypeReIntegeris

vars:Integer;

varbackup:Integer;

methodrestore();

end;

那麼,就有如下的subtype的關係:

ReCell<:Cell

ReCell<:ReInteger

(按,例子中沒有考慮到象interface不能包含數據域這樣的細節。實際上,如果支持對數據域的override,而不支持shadowing--作者的基於結構的subtype語義確實隱含著這樣的邏輯―那麼,interface裡包含不包含數據域就無關緊要了,因為令人頭疼的名字衝突問題已經不存在了)

從這個定義,可以得出:

如果c’是c的子類,那麼ObjectTypeOf(c’)<:ObjectTypeOf(c)

注意,這個定義的逆命題並不成立,也就是說:

即使c’和c之間沒有subclass的關係,隻要它們所定義的成員符合了subtype的定義,ObjectTypeOf(c’)<:ObjectTypeOf(c)仍然成立。

回過頭再看看在前麵的subclass-is-subtyping:

InstanceTypeOf(c’)<:InstanceTypeOf(c)當且僅當c’是c的子類在那個定義中,隻有當c’是c的子類時,ObjectTypeOf(c’)<:ObjectTypeOf(c)才能成立。

相比之下,已經部分地把subclassing和subtyping分離開了。Subclassing仍然是subtyping,但subtyping不再一定要求是subclassing了。

把這種性質叫做“subclassing-implies-subtyping”而不是“subclass-is-subtyping”了。

泛型

泛型(TypeParameters)

【𝗼𝗼𝗽.𝘁𝘄 無錯章節】

一般意義上來說,泛型是一種把相同的代碼重用在不同的類型上的技術。它作為一個相對獨立於其它麵向對象特性的技術,在麵向對象語言裡已經變得越來越普遍了。這裡之所以討論泛型,一是因為泛型這種技術本身就很讓人感興趣,另外,也是因為泛型是一個被用來對付二元方法問題(binarymethodproblem)的主要工具。

和subtyping共同使用,泛型可以用來解決一些在方法特化等場合由反協變帶來的類型係統的困難。考慮這樣一個例子:

有Person和Vegitarian兩種類型,同時,有Vegitable和Food兩種類型。而且,Vegitable<:Food

ObjectTypePersonis

;)dooF:doof(taedohtem

;dne

sinairategeVepyTtcejbO

;)elbatigeV:doof(taedohtem

;dne

.nosreP:

。來肉起吃地誤錯以可就nairategeV個一是於。用來nosreP作當被以可就象對的nairategeV個一,則原noitpmusbus的epytbus據根,nosreP:

。)數函的型類對於似類上念概,型類個一另出導型類個一從,是就也(rotarepOepyT入引,術技型泛用使

si]dooF:

;)F:doof(taedohtem

;dne

si]elbategeV:

;)F:doof(taedohtem

;dne

)型泛的束約型類有沒的單簡持支隻,++C如,言語的它其.noitaziretemaraPepyTdednuoB持支都avaJcireneG及以editpaR,LIOTyloP,leffiE,rehtaS,lwO/\illerT(.noitaziretemaraPepyTdednuoB作稱被術技的用使裡這


✅ 付款功能已修復,現在可以正常購買了 — 支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
😤 廣告總在最入戲的時候跳出來?
月付 $5 USD,升級 VIP 後全站所有頁面廣告立即全關——
不是只有這本書,是整個 oop.tw 每一頁、每一章,從此一路讀到底不被打斷。 $5 USD ≈ 一杯珍奶的錢,換一整個月零廣告清爽閱讀 · 隨時可取消
✅ 全站廣告全關 ✅ 工口專區全本解鎖 ✅ 月卡 $5 USD · 季卡 $13 USD · 年卡 $45 USD
⭐ 登入 / 免費註冊後升級
加我 LINE 好友,分享好書不錯過
第一時間獲得新書推薦、書單更新通知
立即加入
上一頁 書頁/目錄
/ 6 頁
下一頁
為本書評分(每位讀者可評一次,提交後無法修改
發表評論
匿名讀者 身份發表
讀者評論