第8回放送授業 • has-a 関係は、所有先のインスタン スを生成して利用する • 言語によっては多重継承でも 実現できるが、推奨しない # クラス Auto の定義 class Auto def initialize(disp="") @aEngine = Engine.new(disp) end def start() # 自動車のスタート puts("ハンドブレーキを緩める") @aEngine.start() end def stop() # 自動車のストップ puts("ハンドブレーキを締める") @aEngine.stop() end end # クラス Engine の定義 class Engine def initialize(disp="") # コンストラクタ @disp = disp # 排気量 end def howDisp() # 排気量の問合せ puts("排気量 #{@disp} cc") end def start() end # エンジンの起動 def stop() end end # エンジンの停止 # クラス Sedan の定義 class Sedan < Auto def initialize(disp="") @aEngine=GasEngine.new(disp) end end # クラス GasEngine の定義 class GasEngine < Engine def start() # エンジンの起動 puts("#{@disp} cc の G エンジンの起動") end def stop() # エンジンの停止 puts("G エンジンの停止") end end 多態性 • 同じメソッド名が異なるクラスで 別々に定義可 • 例:start()、stop()はEngine、 GasEngine、Auto、Sedanで定義 OOPの三本柱 • 継承 • カプセル化 • 多態性 クラス Auto を使った プログラム aAuto = Auto.new() # Auto のインスタンス aAuto の生成 aAuto.start() # 出力: ハンドブレーキを緩める aSedan = Sedan.new(1000) # Sedan のインスタンス aSedan 生成 aSedan.start() # 出力: ハンドブレーキを緩める # 1000 cc の G エンジン起動 オブジェクトの型変換 aAuto = aSedan # aAuto に aSedan を代入 aAuto.start() # 出力: ハンドブレーキを緩める # 1000 cc の G エンジン起動
© Copyright 2024 ExpyDoc