で、オブジェクト指向とは何者なのか?【初心者向けに簡単説明】

 プログラミングを勉強すると「オブジェクト指向」というものが登場してくると思います。人気のJavaやPythonなどはオブジェクト指向のプログラミング言語となります。

 ですが、オブジェクト指向を調べれば調べるほど「クラス」や「インスタンス」など様々な単語が出てきて混乱している方もいるのではないでしょうか?
 今回はそんなオブジェクト指向について、自分自身の復習も兼ねて、できる限りわかりやすく解説して行きたいと思います。

調べれば調べるほど知らない単語が出てくる。

 

・まずオブジェクト指向とは? 

 オブジェクト指向とは設計・プログラミングをする際の考え方・方針・概念になります。そのためオブジェクト指向言語と呼ばれているJavaやPythonでも、絶対にオブジェクト指向で書かなければならないわけではなく、1つのファイルに全てを書いたとしても正常に動作します。

 では何故「オブジェクト指向」というものが登場したのかですが、これは大きなプロジェクトを複数人でプログラミングする際や、後から仕様変更などを行う際に都合が良いからです。

 オブジェクト指向の場合は、プログラムを「オブジェクト(物)」という考え方をしていきます。その「物」を組み合わせて1つのシステムを作っていくため、複数人で作る場合「あなたはこの物を作って、そちらのあなたはこの物を作ってください」という役割分担が行いやすくなります。

 某銀行のシステムは何万人というエンジニアが関わって作っていたという事なので、そのような大規模プロジェクトの場合は効果を発揮します。逆に小さなシステム(個人で作るようなもの)である場合、オブジェクト指向で書くと複雑になってしまう場合があります。(後の管理は楽ですが)

 

・オブジェクト指向の例 

 例えば動物園のゲームを作るとします。様々な動物の情報が必要になり、1つ1つプログラムを書いていっても良いのですが、「年齢」「大きさ」「鳴き声」「歩行」などは全ての動物に対して共通して必要な項目だと思います。もし1つ1つ書いていった場合、すべての動物情報にそれらを全て記載しなければなりませんし、途中で「出身地」を追加するという話になると、再度全動物のプログラムを1つ1つ変更していかなければなりません。

 そのような場合があっても、オブジェクト指向では「動物」という1つの共通なプログラムを用意し、各種類の動物はそれを使用してプログラムを書いていきます。この方法なら、先ほどのように「出身地」の追加となった場合でも、共通で使用している「動物」に出身地を追加すればすべての動物たちの情報に出身地の項目が追加されます。

 

・オブジェクト指向でててくる単語 

 ここまででなんとなくオブジェクト指向の考え方は分かっていただけたかと思います。ここからは先ほどの例を用いながら、オブジェクト指向を勉強していると出てくる単語について、いくつか簡単に解説していきたいと思います。

・クラス

 クラスとは先ほどの例ですと「動物」に当たるものです。動物すべてに共通する設計図のようなものになります。クラスの中には「プロパティ」と「メソッド」というものを定義します。
 プロパティは特徴を入れる部分になります。今回の例でいうと「年齢」「大きさ」「誕生日」といったその個体特有の情報が入る部分です。
 メソッドは動作を入れる部分で、今回ですと「歩行」が動作の部分になります。

・インスタンス

 インスタンスとはクラスを元に作られたオブジェクトになります。今回だと「動物クラス」を元に作られた動物になり、ゾウやキリンなどがインスタンスとなります。

・継承

 継承とは共通する部分を引き継ぐ事です。例えば、動物園と併設して水族館を置くとしたら「魚クラス」が必要になりますが「動物クラス」と「魚クラス」に共通したものがある場合、同じものを書くことになってしまいます。例えば「年齢」というのは動物にも魚にも共通する部分ですので、「生き物」というクラスを用意しておいてそれを「継承」すると年齢については生き物クラスにのみ記載すれば良いことになります。

 このように継承を利用するとプログラム量が減らせたり、後からの管理が楽になります。ちなみに生き物クラスのように継承される側を「スーパークラス」、動物クラス・魚クラスのように継承する側を「サブクラス」と呼びます。

・カプセル化

 カプセル化とは、簡単に言うと外部から守ることです。何を何から守るのかですが、オブジェクト内のデータを外部のプログラムから勝手に変更されないように守ります。例えば、ライオンというオブジェクトに鳴き声が「ガオー」と設定されていた場合、他のプログラムから「ニャー」に変えられると困るわけです。
 このように外部から変更されると困る項目に対して外部からの変更を受け付けないように設定することを、「カプセル化」と呼びます。

やはりオブジェクト指向は難しい 

 ここまでオブジェクト指向の説明や、単語の説明を行ってきましたが正直わかったような、わからないような状態だと思います。このオブジェクト指向という考え方は、ものとして存在するものでは無く概念なので理解するのは難しいです。(私も理解しているとは…)

 実際に手を動かしてオブジェクト指向を意識しながらプログラムを作っていくと、理解が進んでいくと思います。