Javaはオブジェクト指向のプログラミング言語です。今回と次回に分けてJavaプログラミングの概要を紹介していきますが、その前にオブジェクト指向プログラミングについて簡単に説明しておきます。
- JavaとC++言語 -
JavaはC++をベースにして作られた言語なので、ソースの書き方はC++とよく似ており、C++のオブジェクト指向の考え方が随所に取り入れられています。ただ、C++はC言語を拡張してオブジェクト指向の概念を取り入れた言語であり、特定OS上で動作するプログラムの開発を目的としているのに対し、Javaはブラウザに実装された仮想マシン上で動作するプログラムの開発を目的としているため、C言語の持つ記号性の高さや細やかなメモリアクセス機能は影を薄め、安全・確実に実行できることを主眼としています。
- オブジェクトとクラス -
オブジェクト指向プログラミングでは、入出力、ファイル、画像要素などプログラムが操作する対象を「オブジェクト(object)」と捉えます。オブジェクトは概念であり、プログラムではオブジェクトを「クラス(class)」という形でソース上に定義します。
クラスはオブジェクトのテンプレートであり、設計図です。ソースコード上に定義されたクラスは、プログラムがコンピュータ上で動作したとき、メモリ上にその実体を持ちます。これをインスタンス(instance)と呼びます。インスタンスは、オブジェクトという概念を個別に実体化したものです。
「自動車」という概念があり、その設計図が作られ、工場で組み立てられてたくさんの同じ自動車が出来上がります。「自動車」という概念がオブジェクト、設計図が定義されたクラス、工場で組み立てられた実体がインスタンス――というイメージで捉えると、分かりやすいでしょう。
- プロパティとメソッド -
自動車に、全長、総重量、エンジン排気量、エンジン出力、乗車定員……などの諸元(specification)があるように、オブジェクトには属性――プロパティ(property)があります。また、自動車はギアを前身位置に入れてアクセルを踏むと前進し、ギアを後退位置に入れてアクセルを踏むと後退します。ブレーキを踏むと停車し、ハンドルを回すと左右に旋回します。これらの操作を行う機構――アクセル、ブレーキ、ハンドルなどがオブジェクトではメソッド(method)となります。
例えば、画面に表示されるウィンドウはオブジェクトです。表示値の座標、幅、高さ、スクロールバーの有無などはプロパティです。最大化ボタンをクリックするとウィンドウは画面いっぱいに広がり、クローズボタンをクリックすれば閉じてしまいます。これらはユーザーが操作しますが、これをプログラムの側で操作する命令がメソッドです。
- Javaプログラミングはクラスの定義 -
メソッドがどのようなコードで実現されているか、メソッドとプロパティが内部でどのように関連し合っているかなどは、オブジェクトを扱うプログラマーからは見えません。ただ、プロパティとメソッドの仕様だけが公開されます。
先にJavaBeansについて触れました。プログラムの個々の機能を部品化し、それらを組み合わせて1つの処理を作り上げる作法は、Visual BasicのVBXから始まったコンポーネント・プログラミングの基本的な思想であり、元をたどればオブジェクト指向に行き当たります。1つのクラスを定義することです。クラスの中にはさらに別のクラスがあり……という形で、複雑な処理が組み上がっていきます。
- 派生と継承 -
オブジェクト指向プログラミングでは、新たに定義するクラスに既存のクラスの性質を受け継がせることができます。元になるクラスを基底クラスと呼び、新しいクラスはそこから派生したクラスとなります。派生クラスが基底クラスの性質を受け継ぐことを「継承」と言います。
「自動車」というクラスには、エンジンや運転席やタイヤや変速機構など、自動車の基本となる機能が定義されています。これを基底クラスとして「乗用車」を定義すれば、基底クラスの「自動車」が持っていたエンジンや運転席などの機能はそのままに、排気量、シートの数、変速機の機能などを定義し直し、具体的なクラスを記述できます。
「バス」というクラスも「自動車」から派生できます。当然、「乗用車」とはエンジンもシートの数も異なります。
オブジェクト指向プログラミングでは、クラスライブラリにあらかじめ基本的なクラスが用意されており、そこから目的に応じた新しいクラスを派生させて定義し直すことで、プログラムを作っていきます。
|
|
|