ume

ruby オブジェクト指向の三代要素とは?

対象者

目次

  1. オブジェクト指向の三代要素とは.

  2. 継承とは.

  3. カプセル化とは.

  4. ポリモーフィズムとは.

オブジェクト指向の三代要素とは.

  1. 継承.
  2. カプセル化.
  3. ポリフォーフィズム.
    この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とする必要がある。

メリット⇨メンテナンスがしやすい.
例部長クラスの中身を変更するとき『この変更は社長クラスで呼び出す時に何か問題が起きないだろうか』と心配する必要がなくなる。