c-MOS NOT ゲート

第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
カプセル化
• 見えない属性やメソッドを定義できる
(情報隠蔽)
• 見えない属性を見たり変えたりするに
はメソッドを利用する