不變
那麼再考慮函數g:A->A
這裡,A既出現在參數的位置,又出現在返回的位置,可以證明,它既不是協變的,也不是反協變的。
對於這種既不是協變的,也不是反協變的情況,稱之為Invariance
值得注意的是,對於第一個例子中的Pair類型,如果支持setA(A),那麼,Pair就變成Invariance了。
方法特化
方法特化(MethodSpecialization)
在前麵對subclass的討論中,采取了一種最簡單的override的規則,那就是,overriding的方法必須和overriden的方法有相同的signature.
但是,從類型安全的角度來說,這並不是必須的。
這樣,隻要A<:A’,B’<:B,下麵的代碼就是合法的:
classcis
methodm(x:A):Bis…end;
methodm1(x1:A1):B1is…end;
end;
subclassc’ofcis.
區分方法
傳統的基於類的麵向對象語言的一個主要特點就是inheritance,subclassing和subtyping之間的密不可分的聯係。很多的麵向對象語言的語法,概念,就是從這三者而來的。比如說,通過subclassing,可以繼承父類的一些方法,而同時又可以在子類中改寫父類的方法。這個改寫過的方法,通過subtyping、subsumption,又可以從一個類型是父類的對象去調用。
但是,inheritance,subclassing,subtyping這三者並不是永遠和睦相處的。在一些場合,這三者之間的糾纏不清會妨礙到通過繼承或泛型得到的代碼重用。因此,人們開始注意到把這三者分離開來的可能性。區分subclassing和subtyping已經很常見了。而其它的一些方法還處於研究的階段。
對象類型
在早期的麵向對象語言中(如Simula),類型的定義是和方法的實現是混合在一起的。這種方式違反了今天已經被廣泛認識到的把實現和規範(Specification)分離的原則。這種分離得原則在開發是團隊進行的時候尤其顯得重要。
更近期一些的語言,通過引入不依賴於實現的對象類型來區分實現和規範。Modula-3以及其它如Java等的支持class和interface的語言都是采用的這種技術。
開始引入InstanceTypeOf(cell)時,它代表的概念相當有限。看上去,它似乎隻表示用newcell生成的對象的類型,於是,並不能用它來表示從其它類new出來的對象。但後來,當引入了subclassing,methodoverriding,subsumption和dynamicdispatch之後,事情變得不那麼簡單了。的InstanceTypeOf(cell)已經可以用來表示從cell的子類new出來的對象,這些對象可以包括不是cell類定義的屬性和方法。
如此看來,讓InstanceTypeOf(cell)依賴於一個具體的類似乎是不合理的。實際上,一個InstanceTypeOf(cell)類型的對象不一定會跟classcell扯上任何關係。
它和cell類的唯一共同之處隻是它具有了所有cell類定義的方法的簽名(signature).
基於這種考慮,可以引入對象類型的語法:
針對cell類和reCell類的定義:
classcellis
vars:Integer:=0;
methodget():Integeris
returnself.s;
end;
methodset(n:Integer)is
請到𝐨𝐨𝐩.𝐭𝐰查看完整章節
self.s:=n;
end;
end;
subclassreCellofcellis
varbackup:Integer:=0;
overrideset(n:Integer)is
self.backup:=self.s;
super.set(n);
end;
methodrestore()is
;pukcab.fles=:s.fles
;dne
;dne
:義定型類象對的樣這出給以可
silleCepyTtcejbO
;regetnI:srav
;regetnI:)(tegdohtem
;)regetnI:n(tesdohtem
;dne
silleCeRepyTtcejbO
;regetnI:srav
;regetnI:pukcabrav
regetnI:)(tegdohtem
;)regetnI:n(tesdohtem
;)(erotserdohtem
;dne
。類’c是還類c是的用使它心關必不者用使的型類lleC而,lleC型類的同相有具以可,’c和c類的關無全完個兩。離分的現實和範規現實以口接的的關無節細現實與作當被以可就們它,樣這。現實括包不並卻但,型類的法方和性屬的義定類lleCer和類llec有所了括包義定的型類個兩這
。了罷節小是隻那但。名簽法方的裡lleC寫重裡lleCeR在免避來法語的承繼似類的外額入加以可還,意注
gnipytbuS和gnissalcbuS離分
.epytbus的ssalcbus於立獨義定要需也麼那,ssalc於立獨epyt讓要想果如但。的上礎基的係關ssalcbus在立建是係關的epytbus,中論討的麵上在
由是epytbus:擇選種幾著臨麵又,時epytbus義定在