株式会社エス・スリー・フォー

[Java入門]3.2 Java 言語はオブジェクト指向だ

オブジェクト指向というと、なんだか難しいなあ、と思う方もたくさんおられるでしょう。 しかし、実はオブジェクト指向の考え方はとても単純なのです。 オブジェクト指向の考え方を用いると私たちの暮らしている世界をより自然に表現することができます。 オブジェクトとは「物」という意味ですから、「オブジェクト指向」という言葉には、現実にある「物」を思い描きながらプログラミングができるという意味があります。 つまり、現実の世界とコンピュータの中の仮想的な世界との橋渡しをしてくれるとても有効な考え方なのです。

はたしてそれはどんなものなのでしょうか。 まずはJava言語の基本となる、オブジェクト指向の考え方を紹介しましょう。

3.2.1 オブジェクトってなんだろう

皆さんの部屋には電気製品がどのくらいありますか?
テレビ、ビデオ、カセットデッキ、CDプレーヤー、LDプレーヤー…。 きっとたくさんのものが並んでいるでしょう。 すべての機能を使いこなしているとは言えないまでも、それなりにちゃんと使えていますね。 時々、器械が苦手という人がいますが、大抵はビデオの録画予約ができない程度で、再生もできないという人は少ないと思います。 再生、PLAY、または’右向き三角マーク’の書かれたボタンを押すだけなのですから。

しかし、考えてみると、これらの器械は普通の人にはなかなか理解できない難しい技術で作られています。 たとえビデオデッキ本体のカバーを開けて中を見ても、大抵の人にとってはチンプンカンプンでしょう。 さらに、A社のビデオとB社のビデオでは中身が違っているはずです。 それでも、再生ボタンひとつで簡単にビデオを観ることができます。

また、例えばビデオとCDプレーヤーは使う目的も動く仕組みも異なっています。 それなのに、一台一台の取り扱い説明書を一所懸命読まなくても、混乱なく再生できるのはなぜでしょう。 きっと、すべての機械が再生ボタンを押せばいいようになっているからでしょう。 単純な操作だといっても、それぞれの機械で少しずつ違っていたり、再生ボタンの表示が違っていたらそうはいかなくなってしまいます。 物が違っても同じように再生ボタンがついているから、ボタンを押して「再生」と命令すれば、その機械が知っている、その機械なりの「再生」を実行するのです。 そしてそれが映像を映し出すことだったり、音楽を奏でることであったりするわけです。

ソフトウェアを作るときも、コレと同じことをしたいと思いませんか。 つまり、誰かが作ってくれたプログラムがあったとします。 すると、その中身は知らなくても、それが何をしてくれるものでどんな命令を理解できるかがわかれば利用できるはずです。 例えばビデオ、カセットデッキ、CDプレーヤーのように、よく似た機能を持っているソフトウェアは、同じ命令を聞いてくれるとすれば、プログラミングはずっと簡単になるでしょう。

さて、先ほど例にあげた電気製品はもちろん「物」です。 つまりオブジェクトであるわけです。 オブジェクトというのは、自分の動き方、つまり自分がどう機能すればよいのかということについての具体的な手続きを知っています。 また、そのために必要な情報も持っています。 例えば、ビデオが再生する情報はビデオテープに入っていますが、これはビデオデッキの中にあるわけです。 この2つ、手続きと情報によって物は機能を果たすことができます。 そして、オブジェクトとは、手続きと情報をひとつにしたものなのです。

では、この手続きと情報をどのようにプログラミングに取り入れることができるでしょうか。

3.2.2 クラスとインスタンス

いきなりですが、ガソリンスタンドときいてどんな場所を思い浮かべますか? できるだけたくさん挙げてみてください。

ガソリンを入れるところ、道をたずねるところ、飲み物を買ったりトイレを借りたりするところ…。 他にもたくさん思いつくかも知れません。 でも、少なくとも「ガソリンを入れるところ」というのは誰でも思い浮かぶでしょう。 これは単なる言葉遊びですが、全員が納得する答である「ガソリンを入れるところ」というのが「ガソリンスタンド」という言葉の定義といってもよさそうです。 つまりコレが一般に、ガソリンスタンドとはどんなところなのかを表しているのです。

ところで、この質問の答を考えるとき、皆さんはきっと、今までに行ったことのあるたくさんのガソリンスタンドを思い浮かべたでしょう。 そしてなるべく多くのガソリンスタンドに共通の事項を選び出したはずです。 今までに一度しか見たことのない特別なガソリンススタンド、例えば温泉付きのガソリンスタンドなどを挙げた人は少なかったのではないでしょうか。 本当にあるのかどうか疑われてしまいますからね。

しかし、現実にあるのなら、それも間違いなくガソリンスタンドですし、そんなに特殊なところでなくても本当は一軒一軒のガソリンスタンドは必ずどこかが違っています。 世の中にはたくさんのガソリンスタンドがあって、それぞれに値段も違えば広さやサービスも違っているのです。

このように、同じ種類のものすべてに共通な性質や情報と、個々に違いを持った実体に分けるというとらえ方は、多くのものに当てはめることができます。 オブジェクト指向はこの考え方に従って様々なものを自然にソフトウェアの世界に取り込んでいきます。 そして、共通部分を記述したものをクラス、それぞれに違いを持った個々の実体をインスタンスといいます。 とある街はずれにガソリンスタンドがあるとすると、それがガソリンスタンドというクラスのインスタンスになるわけです。

さて、ガソリンスタンドについてどんなに良く定義できたとしても、現実のガソリンスタンドがなければ役にたちません。 つまり、ガソリンスタンドを作る必要があるのです。 ガソリンスタンドがどんなものであるかはクラスに書いてあるので、その内容に従えばガソリンスタンドを作ることができるはずです。 そして、ガソリンの値段などの、各ガソリンスタンドそれぞれに違う部分を決めます。 このように、現実のガソリンスタンド、つまりインスタンスを作成することを、クラスからインスタンスを生成する(インスタンシエーション) といいます。 そして、実際にプログラムの中でオブジェクトとして使用するのは、実体であるインスタンスです。

どうでしょう? オブジェクト指向の考え方が、なんとなくわかってきたでしょうか? Java言語に限らず、オブジェクト指向といわれる言語やシステムはすべて上記のような考え方を基本思想にしています。 しかし、その性格はそれぞれ大きく異なっています。 それらの中で、Java言語は非常にバランスのとれた、実用的なオブジェクト指向言語であるといえます。

オブジェクト指向言語のプログラミングはクラスを作ることだといっても過言ではありません。 Java言語でも、クラスを作ることがすなわちプログラミングをすることになります。 クラスを作るときには、クラスのもつ情報や機能をそのプログラミング言語で記述する必要があります。 これを、クラスを定義すると言います。

さあ、それではいよいよプログラミングです。 この節で取り上げたガソリンスタンドを例に、実際にクラスを作ってみましょう。

prev next