
プログラミングで一番理解が難しい概念がクラスとインスタンスではないでしょうか。私もこの概念について理解するのにかなりの時間を費やしました。まだ十分に把握できていない節もあるため、今回は自分の理解を深めるためにも、自分なりにわかりやすくまとめてみました。
オブジェクト指向とは
オブジェクトとはデータ属性とその処理をまとめた1つのかたまりを示します。例えば、「動物」というオブジェクトがあったとします。「動物」には「生息地」、「年齢」、「性別」、「名前」などのパラメータを必ずもっており、このパラメータがオブジェクトでいうところの「データ属性」にあたります。また、動物はパラメータ以外にも、「走る」、「動く」、「吠える」など動作を行うことができ、この動作がオブジェクトでいうところの「データ処理」にあたります。オブジェクトについては自然界に存在するものに当てはめて考えるとすっきりと腑に落ちると思います。
class Animal def initialize() @country = gets.chomp @age = gets.to_i @sex = gets.chomp @name = gets.chomp end end
クラスとは
クラスとは上記で説明した、「動物」にあたります。クラスは持っているデータ属性や処理を指定してやらなくてはなりませんが、クラスを外部から使うだけなら内部の処理を知らなくても、その処理を利用することができるというメリットがあります。これをカプセル化といいます。また、「動物」というクラスを使って、「犬」や「猫」などの共通のパラメータを持ったオブジェクトを生み出すことができます。これが、この次に説明するインスタンスに繋がります。さらに、この「動物」を広義で捉えると「生物」の一部として捉えることもでき、この「動物」も「生物」から派生したものと考えることもできます。これをクラスの継承といいます。
class Animal < Living_things def move end def run end end
インスタンスとは
インスタンスとは、上記でも少し記載しましたが、「犬」や「猫」などのクラスから派生したオブジェクトのことを指します。このインスタンスは動物がもっている「生息地」、「年齢」などのデータ属性、「走る」などのデータの処理を継承させてあたかもそのインスタンスが元から持っているパラメータのように扱うことができます。このデータに「吠える」などのデータ処理を追加することもできますが、基本的なデータ処理をクラス部分で記載されているため、インスタンスに対する処理の記載は少なくてすむ上、「動物」のクラスを引き継ぐ「ライオン」や「ヘビ」が出てきた時使い回しができるというメリットがあります。
class Animal << Living_things def initialize() @country = gets.chomp @age = gets.to_i @sex = gets.chomp @name = gets.chomp end def move end def eat end end lion = Animal.new() snake = Animal.new()
クラスとインスタンスを使用するメリットとは
クラスとインスタンスの逆の概念として、「手続き型指向」という考え方があります。私もプログラミングを始めたばかりの頃はこちらの記載の方が短く書けるし、クラスやインスタンスなんてややこしい概念覚えても仕方がないと考えていました。しかし、短いプログラムを書くぶんには「手続き型指向」で十分ですが、多くの処理をさせなければならないアプリケーションを作成する上ではクラスを使い回すことで、アプリケーションをすばやく構築することができます。
コメント