初心者向け学習方法一覧はこちら
この記事はプログラミングでよく耳にするオブジェクト指向という言葉をRubyを例にして解説した記事です。
また、この記事ではサンプルコードを実行しながら説明しています。
Rubyの実行環境がない方はこちらの記事から先に環境構築をすることをおすすめします!
オブジェクト指向とは簡単に
オブジェクト指向には明確な定義はありません。
そのため、一言で説明するとオブジェクト指向とは初めにオブジェクトというまとまりを作り、オブジェクトを変形させたり、組み合わせることでプログラミングをするという考え方のことです。
オブジェクト指向のプログラミング言語にはRuby、C++、Python、JavaScript等があり、有名な言語はオブジェクト指向であることが多いです。
また、オブジェクト指向の対義語として手続き型という上から順番に処理を書いていくプログラミングの考え方があります。
オブジェクト指向の言語でも手続き型のようなコードの書き方をしてしまう場合があります。
しかし、そういった書き方は可読性が下がってしまいますし、オブジェクト指向のプログラミング言語である意味がありません。
この記事でオブジェク指向について理解をして、オブジェクト指向のメリットを最大限活かしたコードが掛けるようになりましょう。
オブジェクト指向のメリット・デメリット
オブジェクト指向にはメリットが大きく3つあります。
1つ目のメリットはオブジェクトごとに自分で定義したメソッドという方法でオブジェクトを操作する為、ユーザーからの予期しない操作が行われることを防ぐことができます。
つまりセキュリティ面に優れています。
このことをオブジェクト指向ではカプセル化と呼ばれています。
2つ目に、オブジェクトごとにプログラミングをすることができるため共同作業でも分担作業が簡単です。
規模が大きくなると、プログラム量も多くなり大人数で開発しなければなりません。
分担内容を簡単に決定できるため時間を短縮でき、生産性の向上になります。
3つ目に、一度作成したオブジェクトと似たようなオブジェクトを作る場合に一度作成したオブジェクトを再利用して改良することができます。
コピー&ペーストをして改良するとコード量が2倍になってしまうため、再利用することでコード量を減らし可読性を上げることもできます。
このことはオブジェクト指向では継承と呼ばれています。
用語の解説
オブジェクト指向には横文字の用語がたくさんあります。
一度に全て覚えることは大変ですのでその中でも特に必要な用語について紹介をします。
紹介する用語は以下の通りです。
- クラス
- オブジェクト
- インスタンス変数
- メソッド
- コンストラクタ
クラス
クラスとは、オブジェクトの設計図のことです。
オブジェクトを生成する場合にはまずクラスを定義する必要があります。
また、通常クラス名は大文字と小文字を組み合わせたキャメル型という書き方をします。
オブジェクト
オブジェクトとは、クラスを実体化したものです。
クラス1つにオブジェクト1つという訳ではなく、クラス1つに複数のオブジェクトが存在します。
オブジェクトとクラスの関係はよくたい焼きを例に表現されます。
クラスはたい焼き器であり、オブジェクトはたい焼きという関係と似ているからです。
たい焼きを作るのにたい焼き器は必須ですが、実際に作りたいものはたい焼きであり、たい焼きは複数作ることが出来るという関係に近いということです。
また、オブジェクトという言葉は「インスタンス」という言葉と混同されることが多いです。
オブジェクトという言葉はインスタンスを抽象化したものを指すこともありますが、Rubyではオブジェクトとインスタンスは同じものです。
インスタンス変数
インスタンス変数とは、オブジェクトが持つことの出来る文字列や数字等の変数のことです。
インスタンス変数を用いることで名前やID等の固有な値をオブジェクトごとに持たせることができます。
また、インスタンス変数のことをメンバ変数ともいいます。
メソッド
メソッドとは、オブジェクトに対して行う処理をまとめたものです。
ユーザーがオブジェクトにアクセスするためにはメソッドを使用してアクセスします。
つまり、作り手が決めたメソッドというアクセス方法でしかユーザーはオブジェクトにアクセスできません。
また、アクセスする際にデータを渡すことができます。
このデータのことをパラメータや引数と呼びます。
メソッド名は小文字と「_」を組み合わせたスネーク型で名前が長くなっても良いので処理内容がわかりやすいように命名します。
コンストラクタ
コンストラクタとは、オブジェクトを生成したときに一度だけ自動的に実行されるメソッドのことです。
コンストラクタに「オブジェクト生成時に引数で受け取ったものデータをオブジェクトのインスタンス変数に代入する処理」を書くことで、効率的にオブジェクトを作成することができます。
自動的に実行されるためコンストラクタの名前はプログラミング言語によって決まっていることが多いです。
Rubyではコンストラクタの名前は「initialize」とする決まりです。
用語を使用したオブジェクト指向の説明
用語の確認も兼ねて、先程紹介した用語を使用してオブジェクト指向について説明します。
オブジェクト指向とはクラスを参照してオブジェクトを生成し、メソッドを使用して加工、組み合わせることで一つのプログラムを作成するという考え方のことです。
コードでオブジェクト指向を紹介
実例として、PersonalDataクラスというクラスを作成し、コンストラクタ、インスタンス、インスタンス変数、メソッドを具体例を用いて解説します。
PersonalDataクラスは以下のような仕様です。
PersonalDataクラスのインスタンス変数
- name:名前
- tel_num:電話番号
- e_mail:メールアドレス
- password:パスワード
PersonalDataクラスのメソッド
- initialize:コンストラクタ
- change_name:名前の変更
- change_pass:パスワードの変更
- show_info:登録情報の確認
PersonalDataクラスのコード全体像
class PersonalData
def initialize(name,tel_num,e_mail,password)
@name = name
@tel_num = tel_num
@email = e_mail
@password = password
end
def change_name(new_name)
@name = new_name
p "名前を" + @name + "に変更しました"
end
def change_pass(new_pass)
@password = new_pass
p "パスワードを変更しました"
end
def show_info()
p "name:" + @name
p "telephon number:" + @tel_num
p "email:" + @email
p "pass word:" + @password
end
end
i = PersonalData.new("Bob","00012345678","example@email.com","1234")
i.show_info()
#name:Bob
#tel_num:0012345678
#e_mail:example@email.com
#password:1234
クラス
class PersonalData
def initialize(name,tel_num,e_mail,password)
@name = name
@tel_num = tel_num
@email = e_mail
@password = password
end
def change_name(new_name)
@name = new_name
p "名前を" + @name + "に変更しました"
end
def change_pass(new_pass)
@password = new_pass
p "パスワードを変更しました"
end
def show_info()
p "name:" + @name
p "telephon number:" + @tel_num
p "email:" + @email
p "pass word:" + @password
end
end
これがPersonalDataの設計図です。
ここで設計した内容を参照してオブジェクトが生成されます。
コンストラクタ
def initialize(name,tel_num,e_mail,password)
@name = name
@tel_num = tel_num
@email = e_mail
@password = password
end
Rubyではコンストラクタの名前は「initialize」とすると定められています。
またインスタンス変数として名前、電話番号、メールアドレス、パスワードを設定するために
def initialize(name,tel_num,e_mail,password)
として引数で渡しています。
メソッド(コンストラクタを含む)
def initialize(name,tel_num,e_mail,password)
@name = name
@tel_num = tel_num
@email = e_mail
@password = password
end
def change_name(new_name)
@name = new_name
p "名前を" + @name + "に変更しました"
end
def change_pass(new_pass)
@password = new_pass
p "パスワードを変更しました"
end
def show_info()
p "name:" + @name
p "telephon number:" + @tel_num
p "email:" + @email
p "pass word:" + @password
end
クラスにメソッドを定義することでオブジェクトで使用することができます。
オブジェクト生成
i = PersonalData.new("Bob","00012345678","example@email.com","1234")
newメソッドを使用することでオブジェクトを生成することが出来ます。
また、newメソッドを使用してオブジェクトを生成すると自動的にコンストラクタが動く為、コンストラクタで設定した引数をnewメソッドに渡しています。
オブジェクト名
i
オブジェクトをnewメソッドで生成した時にiに代入した為、今回の場合のオブジェクト名はiです。
メソッドを使用
i.show_info()
#name:Bob
#tel_num:0012345678
#e_mail:example@email.com
#password:1234
クラスで設計したメソッドを呼び出しています。
まとめ
オブジェクト指向と調べると横文字が多く取っ掛りが難しい印象ですが実例も合わることで理解しやすいと思います。
オブジェクト指向は非常に抽象的な概念ですので深く理解するために自分の手でオブジェクト指向を動かしてみることが大切です。
自分の手でオブジェクト指向を体験して意識せずともオブジェクト指向を用いたプログラミングができるようになれることを目指しましょう。
Rubyの便利なメソッドを紹介した記事を用意しております。
オブジェクト指向を勉強した方におすすめの記事となっています。
プログラミングスクールの選び方
転職を検討中の方向け
フリーランス・副業で活躍したい方向け
教養・キャリアアップしたい方向け
給付金について詳しく知りたい方向け