第7回放送授業
「ソフトウェアのしくみ」
8 オブジェクト指向 プログラム言語(1)
8.1 オブジェクト指向 プログラム言語の考え方
クラス インスタンス 属性 メソッド オブジェクト 属性やメソッドを有するインスタンス
クラス 人類 インスタンス Aさん、Bさん、… 属性 身長、体重、… メソッド 走る、現れる、消える オブジェクト 属性やメソッドを有するインスタンス
クラス 窓 インスタンス 窓A、窓B、… 属性 サイズ、位置、… メソッド 現れる、消える、移動する、テキストを表示する、…
クラス 円図形 インスタンス 円A、円B、… 属性 位置、半径、色、縁の色、… メソッド 現れる、消える、移動する、半径を変える、色を変える…
8.2 継承、多様性、カプセル化
親子のような家系が作られる 点→円→楕円 ↓ 正方形→長方形→平行四辺形→多角形
継承 属性の継承 位置→+半径→+もう一つの径 メソッドの継承 位置の決定→+半径の決定→+もう一つの径の決定
属性 Figure @x, @y Circle @x, @y, @r
メソッド Figure initialize(x, y) pos Circle initialize(x, y, r) radius draw erase
多様性 上位と異なる動作をするメソッドも定義可
# 図形のスーパクラス(位置だけ保有) class Figure def initialize(x=0. 0, y=0 # 図形のスーパクラス(位置だけ保有) class Figure def initialize(x=0.0, y=0.0) @xorg = x @yorg = y end # 位置を知るメソッド def pos [@xorg, @yorg]
# 円のクラス(中心位置と半径+描画+消去) class Circle < Figure def initialize(x=0 # 円のクラス(中心位置と半径+描画+消去) class Circle < Figure def initialize(x=0.0, y=0.0, r=0.0) super(x, y) @r = r end def radius @r #(続く)
#(続き) def draw # 本来,OSの図形を描くサブプログラムを呼び出し # putsの出力文は継続行 puts("draw circle: org=[#{@xorg},#{@yorg}],radius=#{@r}") end #(続く)
#(続き) def erase # 本来,OSの図形を消すサブプログラムを呼び出し # putsの出力文は継続行 puts("erase circle: org=[#{@xorg},#{@yorg}],radius=#{@r}") end
カプセル化 見えない属性やメソッドを定義できる (情報隠蔽) 見えない属性を見たり変えたりするにはメソッドを利用する