第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.0) @xorg = x @yorg = y end # 位置を知るメソッド def pos [@xorg, @yorg] end end # 円のクラス(中心位置と半径+描画+消去) class Circle < Figure def initialize(x=0.0, y=0.0, r=0.0) super(x, y) @r = r end def radius @r end #(続く) #(続き) 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 end カプセル化 • 見えない属性やメソッドを定義できる (情報隠蔽) • 見えない属性を見たり変えたりするに はメソッドを利用する
© Copyright 2024 ExpyDoc