第8回放送授業

第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 エンジン起動