第7回放送授業

第7回放送授業
•  オブジェクト
•  メッセージ
A、身長は∼
メッセージ
175cm
リターン
A
オブジェクト
•  オブジェクト
•  メッセージ
B、身長は〜
メッセージ
165cm
リターン
B
オブジェクト
•  共通の概念がある
–  身長データを持っている
–  メッセージ「身長は〜」を受け付ける
•  インスタンス:クラスのメンバ
…
A
B
クラス
クラス
•  インスタンス変数
–  この例では身長
–  他に体重、姓名、性別、年齢、…
•  メソッド
–  この例では「身長は〜」
–  他に「あなたの姓名〜」、「BMI〜」など
•  メッセージ:インスタンス.メソッド()
クラスの定義
クラス名
インスタンス変数の定義
(Rubyでは
無くてもよい)
メソッドの定義
インスタンス変数
メソッドの定義
クラスの定義(プログラム)
class クラス名
def メソッド名()
… @インスタンス変数名 …
…
end
…
end
複数のクラスの関係
•  クラス間に階層関係や所有関係がある場合
•  階層関係は is-a 関係と呼ばれる
–  例:「人間 is a 哺乳類」 •  所有関係は has-a 関係と呼ばれる
–  例:「自動車 has a エンジン」 •  必ずしも明確ではない場合が多い
•  is-a 関係があると、クラスの定義で省略で
きる要素がある
is-a 関係と has-a 関係
is-a 関係
•  スーパクラス←サブクラス
•  継承:サブクラスがスーパクラスの
インスタンス変数やメソッドを引き継げる
•  オーバライド:サブクラスはスーパクラス
のメソッドを変更できる
# クラス Engine の定義
class Engine
def initialize(disp="") # コンストラクタ
@disp = disp
# 排気量 end
def howDisp()
# 排気量の問合せ puts("排気量 #{@disp} cc")
end
def start()
end
# エンジンの起動
def stop()
end end
# エンジンの停止
# クラス GasEngine の定義
class GasEngine < Engine
def start()
#
エンジンの起動
puts("#{@disp} cc の G エンジンの起動")
end
def stop()
# エンジンの停止
puts("G エンジンの停止")
end end
継承
•  class Engine
インスタンス変数:@disp
メソッド: initialize(disp="")
howdisp()
start()
stop()
•  class GasEngine < Engine
インスタンス変数:@disp
継承
メソッド: initialize(disp="") 継承
howdisp()
継承
start()
オーバライド
stop()
オ
ーバライド
カプセル化
•  インスタンス変数、
メソッド initialize() は
外からは見えない(隠蔽されている)
– インスタンス変数:@disp
– メソッド initialize():
new() でインスタンス生成時に
利用され、直接には使えない