検索
連載

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

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

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

「汎化・特化」、Javaでは多くの場合「継承」

 ところで、ラーメン屋では、ラーメンだけではなく、チャーシューメンとねぎラーメンも作っているとします。

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

 ラーメン、チャーシューメン、ねぎラーメンを見比べてみると、とても似ていることが分かります。ラーメンに“チャーシュー”を載せると「チャーシューメン」、ラーメンに“ねぎ”を載せると「ねぎラーメン」であると考えることができますね(こだわりラーメン屋では、チャーシューメンとねぎラーメンには独自のレシピがあるかもしれません。しかし話を単純化するために、それら特殊レシピについては考慮しないこととします)。

 ここでは、Java言語のextends継承)を用いてチャーシューメン・クラスとねぎラーメン・クラスを記述してみます。

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

 この例では、どのラーメンもスープは同じ「とんこつ」です。このような、共通した性質を親クラスにまとめることを「汎化」と呼びます。逆に、チャーシューメン、ねぎラーメンは、ラーメンとトッピングが異なります。このように、共通していない性質を子クラスに付け加えることを「特化」と呼びます。

 上記のソースコードでは、ラーメン・クラス、チャーシューメン・クラス、ねぎラーメン・クラスに、以下のような関係があるということが表現されています。

  • ラーメン・クラスはチャーシューメン・クラスを汎化したもの
  • ラーメン・クラスはねぎラーメン・クラスを汎化したもの
  • チャーシューメン・クラスはラーメン・クラスを特化したもの
  • ねぎラーメン・クラスはラーメン・クラスを特化したもの

上級者向けの注意!

「汎化」「特化」は、Java言語上では「継承」により表現されることがよくありますが、場合により、「委譲」として実装されることもあります。


ラーメン料理人クラスにメソッドを追加

 ラーメンの品ぞろえが増えたので、ラーメン料理人クラスにメソッドを追加して、さまざまなラーメンの注文を受けられるようにしましょう。

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

 ラーメン、チャーシューメン、ねぎラーメンの3つの商品が必要です。

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

 では、早速ねぎラーメンを注文してみましょう。

図6 ねぎラーメンを注文するラーメン屋のお客
図6 ねぎラーメンを注文するラーメン屋のお客(こちらの図はJavaプログラミング[アプリケーション編]ステップアップラーニング』(技術評論社)で使われた図を引用して再作成したものです)

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

 ねぎラーメンを注文するメソッドを呼び出すように変更し、ねぎラーメンの表示メソッドを呼び出します。

ラーメンを表示
 トッピング : ねぎ
 スープ : とんこつ
実行結果(コンソール出力)

 ちゃんと、ねぎラーメンが出来上がっていますね。

 続いて次ページでは、メッセージ・パッシング、カプセル化、多態性について解説します。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る