面接対策でおそらく聞かれるであろうオブジェクト指向について説明できるようになりたい。
chatGPTを使いながら勉強を進めていきます。
オブジェクト指向とは?
オブジェクト指向(Object-Oriented)は、プログラミングの設計思想や方法論の1つで、現実世界の物事や概念を「オブジェクト」として捉え、それらのオブジェクト間の関係や相互作用をプログラムに落とし込むことを目指します。
分かりやすく例を挙げると、考えてみてください。現実の世界で「車」というものを考えた時、車には「色」や「速度」、「ブランド」といった属性があり、また「走る」や「止まる」といった動作ができますよね。
この「車」というものをオブジェクト指向の考え方でプログラムに表現すると、
- 属性(プロパティ、フィールド):色、速度、ブランドなど
- 動作(メソッド、関数):走る、止まるなど
といった形で「車」というオブジェクトを設計します。
このようにオブジェクト指向は、現実の事象や概念をプログラムに落とし込むことができるため、大規模なプログラムや複雑なシステムを効率よく開発する際に役立ちます。
また、オブジェクト指向には以下のような主要な概念があります:
- カプセル化:オブジェクトの内部情報や詳細を隠蔽し、必要な部分だけを外部に公開すること。
- 継承:あるオブジェクトの特性や機能を受け継ぎ、新しいオブジェクトを作成すること。
- 多態性:同じ名前の動作でも、オブジェクトの種類によって異なる動きをすること。
このような特性を利用することで、再利用性や拡張性、保守性の高いプログラムを開発することが可能となります。
簡潔的に人に説明する際にどのようにオブジェクト指向を説明する?
簡潔にオブジェクト指向を説明する場合、以下のように表現できます:
「オブジェクト指向は、現実の物や概念を"オブジェクト"としてプログラムに表現する考え方。オブジェクトは属性(例:車の色)と動作(例:車が走る)を持ち、これを使って効率的にプログラムを組み立てることができます。」
オブジェクト思考の主要概念をコードで解説
Rubyのコードを使って、オブジェクト指向の主要な概念(カプセル化、継承、多態性)を説明します。
- カプセル化:
class Car
# インスタンス変数は外部から直接アクセスできない(カプセル化)
def initialize(color)
@color = color
end
# colorを取得するためのメソッド(ゲッター)
def color
@color
end
# colorを設定するためのメソッド(セッター)
def color=(new_color)
@color = new_color
end
end
car = Car.new("red")
puts car.color # "red"を出力
car.color = "blue"
puts car.color # "blue"を出力
- 継承:
class Vehicle
def move
puts "Vehicle is moving"
end
end
# CarクラスがVehicleクラスを継承
class Car < Vehicle
def honk
puts "Beep beep!"
end
end
car = Car.new
car.move # "Vehicle is moving"を出力
car.honk # "Beep beep!"を出力
- 多態性:
class Bird
def speak
puts "Some sound"
end
end
class Sparrow < Bird
def speak
puts "Chirp chirp"
end
end
class Parrot < Bird
def speak
puts "Hello! I'm a parrot!"
end
end
def bird_sound(bird)
bird.speak
end
sparrow = Sparrow.new
parrot = Parrot.new
bird_sound(sparrow) # "Chirp chirp"を出力
bird_sound(parrot) # "Hello! I'm a parrot!"を出力
上記の例では、bird_sound
メソッドは異なる種類の鳥のオブジェクトを受け取ることができ、それぞれの鳥のspeak
メソッドを呼び出すことで、異なる音を出力します。これが多態性の一例です。