対象者
-
ruby初心者.
-
オブジェクト指向とはなんぞやという方.
この記事を読んでわかること
- オブジェクト指向が使われているプログラミング言語、pythonやrubyがどういうプログラミング言語であるのかをざっくり理解できます.
目次
-
オブジェクト指向の三代要素とは.
-
継承とは.
-
カプセル化とは.
-
ポリモーフィズムとは.
#オブジェクト指向の三代要素とは.
- 継承.
- カプセル化.
- ポリフォーフィズム.
この3つの特徴がオブジェクト指向にはあります。
継承とは.
⇨あるクラスを丸々コピーし、新たなメソッドを追加したりメソッドの中身を変更したりする(オーバーライド).
メリット⇨重複を排除しメンテナンスがしやすくなる。
class Car
def accele
puts("アクセルを踏みました")
end
def brake
puts("ブレーキを踏みました")
end
end
↑例えば車クラスというのがあったとして、スポーツカーを作りたいとします。
class SportsCar
def accele
puts("アクセルを踏みました")
end
def brake
puts("ブレーキを踏みました")
end
def openRoof
puts("ルーフを開けました")
end
end
このようにスポーツカーが作れますが、
def openRoof
puts("ルーフを開けました")
end を追加しただけなのにCar クラスにも定義されているものも書かないといけなく記述量が増えます。
またcarクラスのacceleメソッドに何か変更があるとSportCarクラスも合わせて2箇所修正する必要がありメンテナンスがしにくいです.
そこで継承するを使うとメンテナンス性が高まります。
class SportsCar < Car
def openRoof
puts("ルーフを開けました")
end
end
↑このようにすることで SportsCarとCar クラスの重複をなくせるのとCarクラスに何か変更があってもSportsCarクラスの初期値も一緒に変更できる。
class クラス名 < 継承したいクラス名
#カプセル化とは.
⇨イメージはモノにカバーを1枚かぶせて中身を隠してしまうようなこと。外からインスタンス変数の中身を参照したり変更したりをできなくする. 要は関連するデータと振る舞いを1つの単位にまとめ、外部からのアクセスを制限すること.データ属性と振る舞いをクラスというデータにまとめる
class Human
def initialize(name)
@name = name
end
def greet
put "こんにちは"
end
end
tanaka = Human.new("田中")
tanaka.@name こんな感じで参照できない
tanaka.name = "井上" こんな風に変更もできない
#ポリモーフィズムとは.
⇨類似したクラスに対するメッセージの送り方を共通にする仕組み.
例えば 社長が部下(部長、マネージャー)を起立させるという状況と仮定して、
この時たとえ部長クラスの中身を変更しても
社長クラスで部長に起立させる時に呼び出し方(shain.standup)は変わらない.
もちろん部長クラスのインスタンス作成時はshain = Bucho.newとする必要がある。
メリット⇨メンテナンスがしやすい.
例部長クラスの中身を変更するとき『この変更は社長クラスで呼び出す時に何か問題が起きないだろうか』と心配する必要がなくなる。