17. 2011/2/21
例:逐次表のための検索ルーチン
has (t: SEQUENTIAL_TABLE, x: ELEMENT): BOOLEAN is
-- 要素 x は表 t の中にあるか ?
do
from start until
after or else found(x)
loop
forth
end
Result := not after
end
start forth after found(x)
配列 i := 1 i := i+1 i > count t@i = x
連結リス
ト
c := first_cell c := c.right c = Void c.Item = x
ファイル rewind read end_of_file f^↑ = x
17オブジェクト指向プログラミング入門 3
20. 2011/2/21
整数の表の二分木による実装例
package INTEGER_TABLE_HANDLING feature
type INTBINTREE is
record
-- 二分木表現の記述の一例:
info: INTEGER
left, right: INTBINTREE
end
new: INTBINTREE is
-- 適切に初期化された新しい INTBINTREE を返す
do … end
has(t: INTBINTREE; x: INTEGER): BOOLEAN is
-- t の中に x があるか?
do … …検索操作の実装 end
put(t: INTBINTREE, x: INTEGER) is
-- t に x を挿入する
do …end
remove( …
end -- パッケージ INTEGER_TABLE_HANDLING
20オブジェクト指向プログラミング入門 3
21. 2011/2/21
典型的な利用者側の例
-- 補助的な宣言
x: INTEGER; b: BOOLEAN
-- INTEGER_TABLE_HANDLING で定義されている型で t
を
-- 宣言する
t: INTEGER_TABLE_HANDLING$INTBINTREE
-- ファンクション new によって作成される新しいテーブル
として
-- t を初期化する:
t := INTEGER_TABLE_HANDLING$new
-- プロシージャ put を使って x の値を表に挿入する:
INTEGER_TABLE_HANDLING$put(t, x)
-- x が t の中にあるかどうかによって True または False を b
に代入 -- する
-- 検索にはファンクション has を使う
b := INTEGER_TABLE_HANDLING$has(t, x)
21オブジェクト指向プログラミング入門 3
26. 2011/2/21
多重定義の役割
供給者側
square(x:INTEGER):INTEGER is do … end
square(x:REAL):REAL is do … end
square(x:DOUBLE):DOUBLE is do … end
square(x:COMPLEX):COMPLEX is do … end
顧客側
変数 x の型によらず, square(x) と書くだけでよい
ルーチンの多重定義は顧客のための機能である.あ
る一つの概念を表す異なる実装を使うとき,顧客は
一つの記述で済ませることができる.
26オブジェクト指向プログラミング入門 3