検索
連載

いまさら聞けないJavaによるオブジェクト指向の常識プログラマーの常識をJavaで身につける(11)(2/5 ページ)

本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は、Javaを学習する際によく耳にする「オブジェクト指向」について。いまさら聞けない人はぜひ読んでみてください。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

JavaにおけるClassとObject

 Java言語をご存じの皆さんにとって、クラスオブジェクトは、すでになじみが深いことと思います。ここからは、ラーメン屋を例に話を進めていきましょう。

取りあえず、ラーメンをクラスで表すと……

 早速、ラーメンを表すラーメン・クラスを考えてみましょう。

図1 ラーメンの調理方法
図1 ラーメンの調理方法(こちらの図はJavaプログラミング[アプリケーション編]ステップアップラーニング』(技術評論社)で使われた図を引用して再作成したものです)

 Java言語でラーメン・クラスを表すと、例えば以下のようになります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 おいしいラーメンが出来上がる気持ちがしてきましたか?

次に、ラーメンを作る料理人をクラスで表すと……

 先ほどのラーメン・クラスを使って、実際のラーメンに当たるラーメン・オブジェクトを作ってみます。とはいえ、ここはラーメン屋なので、ラーメン料理人にラーメンを作ってもらいましょう。

図2 ラーメン屋で働く料理人
図2 ラーメン屋で働く料理人(こちらの図はJavaプログラミング[アプリケーション編]ステップアップラーニング』(技術評論社)で使われた図を引用して再作成したものです)

 ラーメン料理人クラスは、注文を受けると、ラーメン・クラスのインスタンスを作ります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

さらに、ラーメン屋のお客をクラスで表すと……

 では、ラーメン料理人に、実際にラーメンを作ってもらうために、ラーメン料理人にラーメンを注文する「ラーメン屋のお客」クラスを登場させましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 ラーメン屋のお客は、ラーメン料理人にラーメンの注文をすることにより、ラーメンを受け取ることができます。出来上がったラーメンを表示するためにramen.showRamen()メソッドを呼び出しています。

図3 ラーメン屋のお客
図3 ラーメン屋のお客(こちらの図はJavaプログラミング[アプリケーション編]ステップアップラーニング』(技術評論社)で使われた図を引用して再作成したものです)
ラーメンを表示
 スープ : とんこつ
実行結果(コンソール出力)

オブジェクトとクラス

 ここで、オブジェクトとクラスの関係について、あらためて見てみましょう。オブジェクトは、「もの」を、あるものの見方に基づいて表現したものです。今回の例では、スープを持つものとしてラーメン・オブジェクトが表現されています。これに対し、オブジェクトを、あるものの見方にもとづいて分類したものがクラスです。今回の例では、とんこつスープを持つものとしてラーメン・クラスが表現されています。

 ここで、「あるものの見方に基づいて」という点に注意が必要です。上記の例では、ラーメンのスープに着目して、ラーメン・クラスが作られていますが、ものの見方が異なれば、ラーメン・クラスも変わってきます。

 例えば、ラーメン屋の売り上げに着目すれば、ラーメン・クラスにはラーメンの価格が含まれるかもしれませんし、そもそもラーメンと餃子は同じクラスとして表現されるかもしれません。

 このように、何に興味を持って“もの”を見るかによってオブジェクトやクラスは変わってきます

 また、オブジェクトはクラスを基に作られます。ラーメン・クラスが「ラーメンの調理方法」とすれば、「その調理方法により作られたラーメン」そのものがラーメン・オブジェクトだと考えることができます。「ラーメンの調理方法」は食べることができませんが、「ラーメンの調理方法」に従ってラーメンを調理すると、実際に食べることができるラーメンができるというわけです。

コラム 「オブジェクトとインスタンスは違うものなの?」

オブジェクトを表す用語として「インスタンス」という用語もよく用いられます。インスタンスは特定のクラスから生成されたオブジェクトを指す場合に用いられます。例えば「ラーメン・オブジェクトは、ラーメン・クラスのインスタンスである」というように使われます。


java.lang.Objectとjava.lang.Class

 ここで、Java言語におけるオブジェクトとクラスについて、もう少し詳しく見ていきます。Java言語にはオブジェクトそのものを表現するクラスであるjava.lang.Objectがあります。

 私たちがJava言語で作成するクラスは、すべてjava.lang.Objectを継承しています。このため、例えば、先ほど作ったラーメン・クラスのインスタンスをjava.lang.Objectとして受け取ることができます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 一方、クラス自体を表現するクラスとしてjava.lang.Classもあります。java.lang.Classを使うと、クラス自体に関するさまざまな情報を取得できます。例えば、ラーメン・オブジェクトのクラス名を表示するためのソースコードは以下のようになります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 java.lang.Objectから引き継がれているgetClassメソッドを呼び出すことにより、java.lang.Classのインスタンスを取得できます。このインスタンスに対してgetNameメソッドを呼び出すと、このラーメン・クラスのクラス名を取得できます。

 私たちが Javaプログラミングで何げなく利用しているオブジェクトには、実はこのようなメソッドが提供されているのです。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る