DIコンテナって何だろう?(1/2)
DIコンテナについて説明を始める前にまずはオブジェクト指向について説明します。
オブジェクト指向とはなにか
オブジェクト指向とは属性と振る舞いをもったオブジェクトというものにまとめそれを一つの部品として、オブジェクト同士をくっつけていくことによって何か一つのものをつくるという考え方です。
オブジェクト指向には主に以下のような特徴がある。
それぞれ簡単に説明していきます。
継承とは
継承とはあるオブジェクトの特性をほかのオブジェクトが引き継ぐことです。
実際に例を使って説明してみます。
以下の図をみてください。コンピューターというオブジェクトがあって、それの定義(属性)はCPUとメモリ、ハードディスクが入っていればコンピュータとします。振る舞いとしてコンピューターの主な振る舞いとして「計算する」という振る舞いをもっています。
コンピュータにはノートパソコンとデスクトップパソコンの2種類が存在します。それぞれの特徴を以下のように定義してみました。
それぞれ別のものではありますが、大元はといえばコンピューターの一種です。そのため以下のようにコンピューターというオブジェクトを継承して「ノートパソコン」、「デスクトップパソコン」というオブジェクトを定義することができます。
ある共通のデータや振る舞いを再利用するための概念を継承といいます。
ポリモーフィズムとは
ポリモーフィズムとはひとことでいうと同じメソッドを使って、違い振る舞いをするということです。ポリモーフィズムには「多相性」、「多義性」という意味があります。
たとえば、「遊ぶ」ということを考えるときに「女と遊ぶ」、「男と遊ぶ」、「公園で遊ぶ」とでは遊ぶということに関しては一緒ですが、対象がなにであるかによって遊び方が変わってきます。
対象によって遊び方が変わるということは、プログラムの世界では別の名前で実装しなければなりません。対象物が違うだけで違うプログラムを作らなければいけないというのはとても煩雑です。そういった煩雑さをなくす概念がポリモーフィズムです。
ポリモーフィズムは対象物によって「遊ぶ」という振る舞い方をかえてくれる優れた機能のことです。
カプセル化とは
カプセル化とはオブジェクトの持つデータと振る舞いについて公開部分と非公開部分に分けることです。これによって他オブジェクトからみられたくない情報を隠蔽することができます。カプセル化をすることによって「情報隠蔽」することができます。
「人」オブジェクトをつかって例をあげてみました。
下のような図をみてください。「+」はpublic、「-」はprivateとして扱います。「-」がついているところはあまり人に知られたくない情報、「+」は人に知られてもいい情報となっています。
カプセル化によってデータを隠蔽することができます。
まとめ
オブジェクト指向の概念的なところだけではありますがなんとなくオブジェクト指向ってこんなん(?)っていうのがわかったかなとおもいます。
それでは、次回DIコンテナとは何かについて説明していきたいと思います。
どうしても説明だけだと今一イメージがわきにくいと思いますので、オブジェクト指向についてプログラムで書くとこんなんだよっていうのをそのうち紹介していきたいと思います。