7. 2011/4/14
オブジェクト指向プログラミング入門
10 7
政略結婚(実装継承)
顧客による方法( STACK2 )りもシンプルになる
class ARRAYED_STACK[G] inherit
STACK[G]
ARRAY[G]
… rename …サブ句がここに入る
feature
full: BOOLEAN is
do Result := (count = capacity) end
put(x: G) is
require not full
do
count := count + 1
array_put(x, count)
end
…
end
*
STACK
ARRAY
ARRAYED_
STACK
10. 2011/4/14
オブジェクト指向プログラミング入門
10 10
特性の改名
多重継承によって,名前の衝突が生じうる
クラス内では1つの名前は1つのことを意味しなければならな
い
継承先で改名する
class SANTA_BARBARA inherit
LONDON rename foo as fog end
NEW_YORK rename foo as zoo end
feature
…
end
LONDON NEW_YORK
SANTA_
BARBARA
foo
foo→fog foo→zoo
foo
15. 2011/4/14
オブジェクト指向プログラミング入門
10 15
例:大陸間移動ドライバ
class FRENCH_US_DRIVER inherit
FRENCH_DRIVER
rename
address as french_address,
violation_count as french_violation_count,
pay_fee as pay_french_fee
end
US_DRIVER
rename
address as us_address,
violation_count as us_violation_count,
pay_fee as pay_us_fee
end
feature
…
20. 2011/4/14
オブジェクト指向プログラミング入門
10 20
複製における衝突:選択
D は A の特性 f から2つの別々の特性を得る
名前の衝突はないが,動的束縛で問題が生じる
型 A の多相的エンティティ a1 が,実行時に D のインスタ
ンスにアタッチされたとき,呼び出し a1.f では何が実行さ
れるか?
select 句を使う
class D inherit
B
C
select f end
feature
…
D
B C
A
f→bf++
f