オブジェクト指向のメリット
クラスを作成することが第一歩と考えるオブジェクト指向では、このようにオブジェクトの分析から始めることによって、属性と操作が一体化して無駄なく振る舞うよう、対象のオブジェクトを整理します。このこともオブジェクト指向を採用する重要なポイントです。
クラスを作成しておくことによって、保守性も向上します。
例えば、自動販売機が故障したときのことを考えてみてください。故障個所を探す際に、設計図があればその場所を的確に把握することができ、ほかの機能に影響を与えずに修理(修正)することができるはずです。つまり、クラスがあることによってメンテナンスや仕様変更が容易になるのです。
最大のメリットは「再利用性」
クラスを作成しておく最大のメリットは、再利用性(汎用性)です。
自動販売機クラスに定義した「自動販売機」というクラス名や「商品名」などの属性名は、非常にあいまいで抽象的です。つまり、このクラスからは「ジュースの自動販売機」や「タバコの自動販売機」など、「自動販売機」と名の付くものなら何でも生成できる可能性があるのです。
クラスの段階では意図的に抽象的に定義し、オブジェクトを生成する際に属性の値を決定するような仕組みは、非常に合理的だといえます。
オブジェクトの共通点を見いだして、その共通項目を定義した抽象的なクラスこそ、汎用性が高く使い回しの利くものになるのです。
Javaとオブジェクト指向の関係
Javaの言語仕様は、オブジェクト指向に完全にマッチしたもので、プログラミングと切り離して分析したクラスを表現することが可能です。
まず対象のオブジェクトを分析し、抽象化してクラスを定義し、そのクラスをインスタンス化して利用するという流れは、Javaプログラミングでもまったく同じなのです。
オブジェクト指向によって見いだされた自動販売機クラスをJavaプログラミングで表現したものが、前回紹介したVendingクラスです(ソースファイルがダウンロードできます)。
利用者側のプログラムであるUser1と併せて見ていきましょう。
Vendingクラスの内容を見ると、やはり属性と操作に分けて定義してあります。Javaの言語仕様では、属性を変数で、操作をメソッドでそれぞれ表現します(操作部分[メソッド]に関しては次回解説します)。
4 //自動販売機(Vending)が扱う属性 5 String goods; //商品 6 int price; //価格 7 int payment; //支払
5行目は「goods」という名の属性を文字列(String)で定義していることを表しています。同様に6行目、7行目でも「price」「payment」という名の属性を整数(int)で定義しています。
利用者側のプログラムであるUser1クラス6行目の「new Vending("Coffee", 130);」は、Vendingクラスをインスタンス化しているところです。
その際、初期設定値として( )内に「"Coffee", 130」を設定しています。User1クラス6行目「new」キーワードの後の「Vending("Coffee", 130)」と、Vendingクラス10行目の「Vending(String g, int p)」が似たような記述になっていることに注目してください。
9 //初期設定機能(コンストラクタ) 10 Vending(String g, int p){ 11 goods = g; 12 price = p; 13 System.out.println("Vending was constructed !"); 14 System.out.println(" Goods: "+ goods); 15 System.out.println(" Price: "+ price +" yen"); 16 }
Vendingクラス10行目の「Vending(String g, int p)」は、利用者が初期設定値として ( )内に指定する「"Coffee"」を文字列(String)の「g」として、「130」を整数(int)の「p」としてそれぞれ扱い、11行目、12行目で「g」は属性の「goods」に、「p」は属性の「price」に設定する処理が書かれています。
13〜15行目はコマンドプロンプトに対する出力文で、特に14行目、15行目は設定された属性「goods」と「price」を表示する処理命令になっています。
まとめると、User1クラスを実行することでmainメソッドの処理が開始され、開始されたmainメソッドの処理内では、「new」キーワードによってVendingクラスの初期設定機能(コンストラクタ)が呼び出され、属性に初期設定値が設定されてオブジェクトが生成されるという流れになります。
今回は、クラスからオブジェクトを生成する「インスタンス化」までを紹介しました。オブジェクトの操作(機能)を利用する方法は、最終回である次回で見ていきたいと思います。
筆者紹介
佐藤賢一郎
「Java/XML塾」講師。1974年東京都生まれ。一般企業に勤務後、2001年6月ケンソフトに入社。KEN IT Engineer School プログラムコースのインストラクターを担当。Webアプリケーション開発を経験した後に、同スクールにて企業向けの新人研修や個人向け研修の主任講師として従事。著書に『OMG認定 UML技術者資格試験対策問題集ファンダメンタル』(秀和システム刊)がある。
Copyright © ITmedia, Inc. All Rights Reserved.