オブジェクト指向(object oriented)はシステムの提供する多くオブジェクトでアプリケーションなどを効率良く動かすという概念である。
現在はJava、C++、PHPなどの多くのプログラミング言語で採用されている概念です。
オブジェクト指向とはオブジェクト単位で扱う。ただし、オブジェクト指向はまだ発展途上であり、厳密な定義がない。
BASIC/C言語/Javaにおいて、「hello,world」を画面出力する部分を抜き出して、説明する。
○BASICの場合
1 2 |
|
○C言語の場合
1
2
3
| - | ! |
|
○JAVAの場合
プログラムだけを見るとBASICでは短いコードであり、Javaでは長いコードになっている。しかし、大きいプログラムの場合、Javaの方が効率的になる。というのも、BASICにはサブルーチンの非独立性があるからである。簡単に言えば、BASICはサブルーチンの効率が悪いのである。また、C言語は関数という考え方によりプログラムを分割して構築できる。JavaはC言語の作業効率をさらに進化させたオブジェクト指向が利用できるのである。
クラスやオブジェクトの概念はオブジェクト指向プログラミングのミソとなる概念である。オブジェクトの中にはプログラムの基礎となる関数(またはメソッド)と変数(またはフィールド)が入っている。オブジェクトに含まれるこれらメソッドやフィールドは他のオブジェクトからは影響されない。即ち、変数名や関数名のスコープも切り離されるし、許されたメソッド以外からは外からアクセスできないのである。例えるならば、ICに似ている。なぜならば、ICは直接中身をいじることができなく、ICの足のピンを通して制御するからである。
例:ドロー系ソフトウェアをオブジェクト指向で作ったとする。画面に描画することができる図形には線や多角形がある。ここに出てきた線や多角形がオブジェクトとして扱う。 ◇
Javaにおいて文字列比較したい場合がある。このとき、他のプログラミング言語に慣れてしまっている方は次のように「==」を使って比較演算式を書いてしまうかもしれない。しかし、これでは正しい結果を得ることができない。
なぜならば、これだとstrと"ABCD"が同じオブジェクトであるかどうかを比較してしまうからである。実際、strと"ABCD"はどちらも同じ文字列を保持しているString型のオブジェクトであるが、異なるオブジェクトである。
Javaで文字列自体を正しく比較するには次のようにequals()メソッドを用いればよい。
クラスはクッキーの型、オブジェクトは焼きあがったクッキーのようなものである。このクッキーを作ることをオブジェクト生成という。
オブジェクトは焼き加減、どのくらい食べられるのかなど、個々のオブジェクトに個別に反映される。
オブジェクト指向ではオブジェクトは性質(状態)と振る舞い(動作)の2つの要素で構成されている。前者の「状態」の要素をJavaではフィールド、後者の「振る舞い」の要素をメソッドと呼ぶ。
例えば、「携帯電話」というオブジェクト(物)は「カラー表示ができる」「電池持ちがよい」などという性質(状態)、「ダイヤル先のベルを鳴らす」「相手にメールを送る」「アラームを鳴らす」などという振る舞い(動作)を持っている。即ち、携帯電話のフィールドが「カラー表示ができる」「電池持ちがよい」など、メソッドが「ダイヤル先のベルを鳴らす」「相手にメールを送る」「アラームを鳴らす」などになる。
オブジェクトのメソッドを引き出すものをオブジェクト用語でメッセージと呼ぶ。様々なオブジェクトが互いにメッセージを交わしながらプログラムが進行していくのがオブジェクト指向の考え方である。
プログラミング言語でオブジェクトを扱うにはクラス(設計図)を元にオブジェクトの実体を作る。この作られた実体をインスタンス(instance:事実)と呼ぶ。同一クラスから作られたインスタンスは同じフィールドとメソッドを持っている。
よって、オブジェクト指向プログラミングの際にはクラスの定義、インスタンスの作成が行われる。
オブジェクト指向言語の場合、新しいクラスを定義するときに別のクラスの性質(フィールド)や振る舞い(メソッド)をそっくりそのまま受け継がせることができる。この機能を継承(inheritance)という。このとき、継承された方のクラスをスーパークラスといい、継承した方をサブクラスという。
JavaやPHPで既存のクラスを継承して新規クラスを作成するときは次のような書式で書く。
class クラス名 extends スーパークラス名{
公式のように次を覚えればよい。
A extends B
AはBを継承でき、このときAから見てBがスーパークラス、BからみてAがサブクラスになる。
継承によって、複数で分担開発を行っている際に間違えて重要なデータを消してしまうというトラブルを少なくさせることができる。なぜならば、重要なデータほどスーパークラスだからである。