対象者
ruby初心者.
オブジェクト指向とはなんぞやという方.
この記事を読んでわかること
オブジェクト指向が使われているプログラミング言語、pythonやrubyがどういうプログラミング言語であるのかをざっくり理解できます.
目次
オブジェクト指向の三代要素とは.
継承とは.
⇨あるクラスを丸々コピーし、新たなメソッドを追加したりメソッドの中身を変更したりする(オーバーライド).
メリット⇨重複を排除しメンテナンスがしやすくなる。
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とする必要がある。
メリット⇨メンテナンスがしやすい.
例部長クラスの中身を変更するとき『この変更は社長クラスで呼び出す時に何か問題が起きないだろうか』と心配する必要がなくなる。