オブジェクト指向

プログラムは様々なAPIや作成したプログラムを組み合わせることで理論上、どのような巨大なシステムでも作成することが可能です。

しかし、実際に本格的なプログラムを開発し始めると、クラスやメソッドが大量に作成され、
ソースがコードが長く複雑になりすぎて、開発者自身が作成した内容を把握しきれなくなるという課題に直面してしまいます。
大きなシステムを作るとなった時に、人が管理できるシステムの幅に限界があり、開発が難航してしまうことも多々あります。

そこで誕生したのがオブジェクト指向プログラミングという考え方です。

オブジェクト指向とは

オブジェクト指向とは、「処理を部品化して、その部品を組み合わせることで1つの大きなプログラムを作り出そう。」という考え方です。

会社を例に考えてみましょう。
会社には本業を行う業務部とそれ以外を行う総務部があり、このどちらかが欠けても会社は機能しなくなります。
この2つの部署のそれぞれが「オブジェクト」です。

オブジェクト指向を会社にたとえた画像

各部署はそれぞれ担当業務を行いますが、自分の部署では出来ない業務は他の部署に依頼します。
その結果を元に作業を進めていき、最終的に一つの会社として機能していきます。

プログラムでいうと、会社はソフトウェア(アプリケーション)で、各部署がソフトウェアの機能となります。

現実の世界にはさまざまなモノが存在します。それらのモノたちは、それぞれ独立して機能し、また互いに連携しながら別の機能を生み出しています。
単独のモノと2つ以上のモノ同士の関係を、忠実にコンピュータシステム内に再現しようというのが、「オブジェクト指向」のアプローチなのです。  

オブジェクト指向のメリット

オブジェクト指向を取り入れることによる一番大きなメリットは、保守性や再利用性の向上にあります。

保守性とは、システム管理の効率のことを指します。
オブジェクト指向によって機能が整然と振り分けられていれば、修正をする人が処理を素早く正確に把握することができ、
不具合が起きたときや機能追加をしたいときに効率よくコーディングすることができます。

不具合が起きたときにすぐ修正できるように作っていたり、機能追加をしやすく作っていると、そのシステムは「保守性が高い」と言われます。

再利用性とは、処理を行うためにいくつものパーツを使いまわすのではなく、処理が同じなら同じ部品を使いまわしてしまおう、という考え方です。

オブジェクト

オブジェクトは日本語に訳すと「もの」ですが、オブジェクト指向における「もの」は個体の実体を指します。

例えば、パソコンは1つの「もの」ですが、オブジェクト指向の考え方で表すと、
「Aさんが持っている型番○○で、製造番号が△△のパソコン」が1つのオブジェクトに対応します。
型番が同じパソコンは複数ありますが、製造番号が同じパソコンは1つしか存在しません。

つまり、人間が別の「もの」だと認識できる「個体」を表す単位が「オブジェクト」です。

オブジェクト指向のオブジェクトは、属性と操作を持っています。

属性はオブジェクトが持つ情報やデータを指し、操作はオブジェクトが持つ機能を指します。
Javaプログラムで2つを表現すると属性は「変数」、操作は「メソッド」に該当します。

多態性・継承・カプセル化

オブジェクト指向には「多態性・継承・カプセル化」という代表的な3つの特徴があります。

これらは、ソフトウェアの保守性や再利用性を向上させるための仕組み(プログラミングのための仕組み) です。

多態性

多態性(ポリモーフィズム)とは、似通った処理や部品をざっくりと分類して利用する、といった考え方です。

オーバーライドやオーバーロードといった仕組みを使いメソッドを使い分けするのですが、それらについては後ほど詳しく説明いたします。

継承

継承とは、すでに存在するクラスをベースにして新しいクラスを作成し、
ベースになったクラスのメンバーを引き継いだり、上書きしたり、新しい機能を追加したりすることです。
この仕組みを使いこなすことで、クラスの再利用性を高め、開発効率を向上させることが可能になります。

継承において、ベースになるクラス(継承元)を親クラスと呼びます。また親クラスを継承して作られたクラスを、子クラスと呼びます。

カプセル化

カプセル化とは、オブジェクトの情報(メソッドなど)を隠蔽することで、外部からは、そのオブジェクトが提供するメソッドを通じてのみデータにアクセスできるようにする概念です。

オブジェクトへの直接のアクセスを防ぐことで、不整合を引き起こすような操作をできなくさせ、オブジェクトの詳細な実装が外部に影響を与えることなく変更が可能となります。

また、カプセル化は、データとそのデータを操作するメソッドを一緒にまとめることで、コードの再利用性と保守性を向上させます。
カプセル化を行うことで、フィールド変数への直接的なアクセスは禁止し、フィールド変数の値を設定するメソッド(setterメソッド)や取得するメソッド(getterメソッド)を用意します。
それにより、フィールドには決められた操作しかできないように強制できます。
このようなフィールドへアクセスする「セッターメソッド」と「ゲッターメソッド」を総称してアクセサメソッドと呼びます。

カプセル化はアクセス修飾子を使用することによって、クラスの内部データに対するアクセスを制限することができます。


アクセサメソッド・アクセス修飾子については、「クラスとオブジェクト」の単元にて詳しく説明します。

オブジェクト指向は概念のようなもので、理解するのは大変だと思いますので、
自分なりに調べたり、以下のようなサイトを見て、ゆっくりと頭に落とし込んでみましょう。
参照サイト:「オブジェクト指向」とは?プログラミングに必要不可欠な要素を解説!

タイトルとURLをコピーしました