オブジェクト指向について

オブジェクト指向

オブジェクト指向は,ソフトウェアの設計や開発において,操作手順よりも操作対象に重点を置く考え方を指す.
関連するデータの集合と,それに対する手続き(メソッド)を「オブジェクト」と呼ばれる一つのまとまりとして管理し,その組み合わせによってソフトウェアを構築する. (*1)

…とはいえ,いきなり「はいそうですか」と理解はしにくいと思う.特にCなどの非オブジェクト指向言語に慣れている人にとっては,抵抗が大きいのではないだろうか.

そこで,自分のメモがてら,私なりに解釈しているオブジェクト指向のイメージを今回の記事で記載しようと思う.
(※あくまで自分の解釈というかイメージなので,もし間違っているようであればご指摘願いたいと思う.そもそも私自身オブジェクト指向を完全に理解している訳ではないので,こんな偉そうに言ってしまっていいのかとは思うが…)

オブジェクト指向には,様々な用語が登場する.
本当はもっと用語があるが,今回は以下の用語に焦点を当てる.

●オブジェクト
- 「データ(属性)」や「手続き(メソッド)」を保持・管理しているもの.

●クラス
- オブジェクトを抽象化したもの.

インスタンス
- クラスに属するオブジェクト.

今回は,これらの概念をプラモデルで例えてみる.具体的に,ミニ四駆を例に出して記載する(爆走兄弟レッツ&ゴー世代なので).

例えてみた

…何かしらのミニ四駆を購入し,箱を開封したところをイメージしてほしい.
箱の中には説明書やらマシン組み立てに必要なパーツが入っている.

【データ(属性)】
「タイヤが4個」「シャーシが1個」「マシンボディが1個」「ウィングが1個」など,何が何個あるのかという情報が属性に相当する.
int  tire  4;          //タイヤ4つ
int chassis  1;    //シャーシ1つ

【手続き(メソッド)】
説明書には,「まず最初に~しろ.次の手順で~しろ」という,マシン組み立てに必要な処理の流れが書かれている.この説明書の記載情報が,メソッドに相当する.
void  tejun1() { ... }
void  tejun2() { ... }

【オブジェクト】
上記「属性」と「メソッド」を持っているもの.今回の例だと,いろいろなミニ四駆に相当する.マグナムセイバー,ソニックセイバー,スピンアックス,erc...

【クラス】
オブジェクトの概念を抽象化したもの.マグナムセイバーやソニックセイバーなどは「ミニ四駆」という大枠の中に属している.
また,マグナムセイバーの作り方もソニックセイバーのパーツや作り方も,だいたい同じである.このように,各オブジェクトに共通する属性や手続きを「ミニ四駆」というクラスで管理することができる.↓こんな感じになるだろうか.
public  class  ミニ四駆  {
    int  tire  4;          //タイヤ4つ
    int chassis  1;    //シャーシ1つ
    ...
    void  tejun1() { ... }
    void  tejun2() { ... }
    ...
}

インスタンス
ミニ四駆」という大枠の中に属する具体的な実態を指す.マグナムセイバー,ソニックセイバー,スピンアックス,erc...
ところで,「オブジェクト」と「インスタンス」は同じ意味合いで使われることが多い.私自身,「オブジェクトとインスタンスの違いは何だ?」と聞かれると,上手く答えられる自信がないので,ここでの記載は控えることにする(別途調べてみます…).

ちなみに,インスタンス化する際は以下のようにnew演算子を使うことで実現できる.

ミニ四駆  マグナムセイバー = new ミニ四駆();
//↑ミニ四駆クラスからマグナムセイバーというインスタンスを生成

最後に

以上,オブジェクト指向に関する私なりの解釈をミニ四駆を例に記載した.
冒頭にも記載したが,私自身オブジェクト指向を完璧に理解している訳ではない.むしろまだまだ勉強中の身である.
あくまで自分なりの解釈を書いただけなので,その道を極めている人にしてみれば突っ込みどころ満載だとは思う(そもそもパーツだの説明書だのの例えでよかったのだろうか…).その際はこっそり教えて頂けるとありがたいです….

参考文献

*1 IT用語辞典e-wordshttp://e-words.jp/w/E382AAE38396E382B8E382A7E382AFE38388E68C87E59091.html