[備忘録]オブジェクト指向、オブジェクト、クラス、インスタンスとは?


この記事では、オブジェクト、クラス、インスタンスの概念をざっくり理解することを目指します。

オブジェクト指向とは?

ざっくり言うとプログラミングをする上での考え方のことで、
プログラムを手順ではなく、「モノ」の生成と操作として見る考え方になります。
難しく言うと変数と関数をひとまとめにしたクラスを作るプログラミングの手法です。
ちなみにオブジェクトとは「モノ」を意味します。

また以下のプログラミング言語はすべてオブジェクト指向言語です。
・さまざまなプラットフォームで動作するJava
・Webページに動きを与えるRubyやPHPやJavaScript
・Mac OSやiOSのアプリ開発で使われるSwift
・商用のプログラミング言語として定評のあるC++
・WordやExcelのマクロとして使用されているVBA

オブジェクト指向型のメリット
仕様変更に強く、実際の開発現場で円滑に作業を進める事ができる点がメリットになります。
ざっくり以下4点になります。

①プログラムのメンテナンスがしやすくなる
プログラムの一つ一つを小さなまとまりで考える事が出来る為、複雑なプログラムが減ります。
改修による影響度が減り、メンテナンスがしやすくなります。

②分業化ができる
システムの規模が大きくなる程、プログラムの実装は膨大になります。大人数で開発作業を並列で行う事が出来ます。処理内容を細かく分類したり他の機能と似通った機能を共通化したり誰かが作った機能を使って、影響を与えずにカスタマイズしたりという事が実現出来る為、開発の生産性が高まります。

③カスタマイズがしやすい
オブジェクト指向型プログラムの特徴である、「継承」や「ポリモフィズム」という考え方を使う事で、既存機能の処理を引き継ぐ事が出来ます。

④プログラムの品質が向上する
プログラムのいたるところが部品化されている為、不具合が発生した場合の問題箇所特定が速くなります。
また、まとまりのあるプログラム仕様の為、コードの可読性が向上します。

オブジェクト指向型は
「それぞれの持つ共通の情報をまとめたものから個別の情報を持ったものを作る」
ため、変更に強いコードが書けることがメリットになります。

オブジェクトとは

オブジェクトはオブジェクト指向の根本であり、プログラミングにおいてはデータと処理の集まりを意味しています。
文字を表現するための文字列オブジェクト、数を表現するための数値オブジェクト、そして「オブジェクトを保管するオブジェクト」である配列オブジェクトやハッシュオブジェクトなどがあります。

前述していましたが、オブジェクトは「モノ」という意味で、
オブジェクト指向で現実のものを例えると、人間もオブジェクトであり、身の回りにあるスマホや車もオブジェクトだと言えます。
車には「メーカー」や「色」といったデータ(個体の情報)があり、「走る」「止まる」といった処理を持っています。
そういうデータや処理が記載された設計図から作った実物がオブジェクトです。

クラスとは

クラスとはざっくり言うと「ひな形」となるものです。
よく車で例えられますが、クラスは車の設計図で、設計図から作られた実物がオブジェクトです。
深掘りすると、いろんな種類の車が世の中にはありますが、すべての車で共通する部分があります。
「車体、ハンドル、タイヤ」などの個体の情報を持っていることや、
「アクセルで加速する、ブレーキで減速する」など処理があることです。
クラスではこれらの共通している変数や関数をプロパティやメソッドと呼ばれるデータで定義することができます。
関数がクラスの中に含まれている時、メソッドと呼ばれ、変数がクラスの中に含まれている時は属性と呼ばれます

プロパティ(property)
オブジェクトが持っているデータのことをプロパティ(属性)と言います。
車の例えだと、車というオブジェクトは「メーカー」、「排気量」、「色」といったプロパティを持っていると言えます。
データにはさまざまな種類があり、たとえば「速度」などといったオブジェクトの状態を示すものもあります。

メソッド(method)
メソッド(操作)とは、オブジェクトが持っている処理のことで、車の例だと「走る」、「曲がる」「止まる」など、
オブジェクトが何らかのアクションを起こす処理のことです。

クラスのメリット
共通の情報はクラスにまとめ、個別の情報はオブジェクトごとに分けられることで、
開発・管理・保守がし易くなるというメリットがあります。

インスタンスとは

インスタンスとはクラスを元にして作られるデータのことです。
ちなみにインスタンス(Instance)とは、実体という意味です。
プログラミングで考えてみると、
クラスからデータや処理を引き継いで複製されたオブジェクトがインスタンスです。
またクラス(設計図)からオブジェクトを作ることをインスタンス化といいます。

まとめ

ざっくりいうとオブジェクトはモノ、クラスはオブジェクトの設計図、インスタンスはオブジェクトの実体というイメージで
す。

参考URL
https://algorithm.joho.info/programming/class-instance/
https://eng-entrance.com/what-oop
https://www.sejuku.net/blog/5973
https://www.vacslab.co.jp/object-orientation/