第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() でインスタンス生成時に 利用され、直接には使えない
© Copyright 2024 ExpyDoc