オブジェクト指向とは?

オブジェクト指向の処理の仕方

構造化プログラミングでは、結果を得る為にどんな処理をしなければならないか、其の為に3つの基本構造をどう組み立てていったら良いかと言う事に主眼を置いて考えました。
しかし、ソフトウェアにとって1番大事なのは、データです。
プログラムを設計する上で、データをどう扱うかは重要なテーマです。
オブジェクト指向プログラミングでは、先ずデータを主眼に置き、其れからデータに対してどんな処理をしなければならないかを考えて行くプログラミング方式です。
構造化プログラミングは、処理の手順が中心です。
其の周りに必要な「素材(データ)」が点在しています。
「御飯」を「パン」に変えようとすると、手順を全て見直さなければなりません。
(影を付けた部分は、「御飯」に関係の有る部分です。)
オブジェクト指向プログラミングでは、データを中心に「部品化」する為、他のオブジェクトとの関係を互いに完全に独立した物に出来、仕様変更等が生じた時には、簡単に差し替えられます。
又、作った「部品」を他のプログラムでも使えるので、プログラム作成の効率が上がります。

他のプログラムで利用する事を、「再利用」と言います。

データを1パックに

変数は1つ1つのデータがバラバラです。
又、配列は幾つかの変数をまとめて扱う物ですが、型が同じでなければならないと言う大きな制限が付いています。
しかし実際には、関連するデータが同じ型とは限りません。
其処で、異なる型のデータをクラスと言う枠で1パックにする事を考えました。

此等の変数や配列をフィールドと言います。

データに対する処理をメソッドで記述

データは貯めて置いただけでは、何の役にも立ちません。
加工したり、取り出したり、活用こそのデータなのです。
其処で、データに対する処理を細かく分けて、それぞれをメソッドの形で書いてクラスに登録しておきます。
例えば例では、

「total」にデータを設定する為のメソッド
「total」のデータを取り出すメソッド
「x」の6つの要素にデータを設定するメソッド
「x」の6つのよう其の合計を求めて「total」に設定するメソッド

等が考えられます。
勿論それぞれ独立したメソッドですから、第3章で学んだ様に、「仮引数」「戻り値」等メソッド毎に決定し、クラスの中に記述します。
此等のメソッドは、「クラスのデータに対してこんな事をしたかったら、此のメソッドを利用して下さい」と言う立て看板の様な物です。
此が、即ちクラスに所属するメソッドです。
従って、クラスは「フィールドと其れに対するメソッドを1パックにした物」なのです。

クラス定義は規則書

クラスにフィールドを記述しても、実際にメモリ領域が確保される訳ではありません。
又、メソッドを記述しても、其れが実行される訳でもありません。
クラスの定義は規則書の様な物で、「此のクラスはこう言うデータを持ち、此のメソッドを呼び出せばこう言う処理が出来ます」と言う約束を決めるだけです。
其れは丁度、「int型は、こう言う型です」と説明しても、int型のデータを記憶する為の領域が確保されないのと同じです。
変数は、

int x;

の様に、変数名を宣言した時に初めて領域が確保され、データを記憶出来ます。
クラスの場合は、

クラス名 オブジェクト名;

の様にオブジェクト名を宣言し、更にコンストラクタを呼び出してインスタンス化すると領域が確保される事は、既に第2章で体験しました。
次はメソッドです。
第3章でユーザ定義メソッドを作りましたが、メソッドを作っただけでは何も起きません。
実引数を与えてメソッドを呼び出した時に、初めて実行されます。
又、第3章で作ったメソッドは同じクラスの中から呼び出されましたが、別のクラスから呼び出される場合には、どのオブジェクトに対する処理なのかを、

オブジェクト名.メソッド名;

の様に指定します。
Javaでは、コンパイラと一緒に提供されているクラスが多数有ります。
此迄使って来たStringクラスや、Colorクラス、Fontクラス等も其の1つです。
インストールしたドキュメントには、提供されている各クラスのフィールドやメソッドの一覧と使い方が書かれています。
此等既存のクラスを利用する事で、効率良くプログラムを作れます。
既存のクラスを拡張してオリジナルのクラスにも焼き直せます。
勿論、1からオリジナルのクラスも作れます。

既存のクラスを拡張して別のクラスを作る事をクラスの継承と言います。

戻る