|
今回から基礎ではなく、より応用的なプログラミングを行っていきます。いままで皆さんが行っていたプログラミングの大半は、関数を作るプログラミングだったと思います。これからは関数のような機能だけではなく状態を持つプログラミングを行ってみましょう。
講義の当初から頻繁にオブジェクト指向の話をしていましたね。ではオブジェクト指向プログラミングにおけるオブジェクトとはいったいなんでしょう?もちろんただの変数ではありません。これにはいろいろな解釈が存在すると思われますが、私は以下の表現をもってオブジェクトと認識しています。
1つの集合(型)として表され、内部に複数の状態(フィールド)や機能(メソッド)を持つもの
この表現をあまり難しく考えないでくださいね。我々の身近にたくさん存在しています。例えばコンビニエンスストアなどもオブジェクトとして表現することが可能です。下図を見て下さい。
私たちが日常利用している「コンビニ」オブジェクトは「商品を売る」「荷物を送る」などの機能をもち、なおかつ内部に「店員」「レジスター」「商品棚」「銀行ATM」などの別なオブジェクトを保持しています。当然ながら「店員」オブジェクトは内部に「脳」「手」「足」「内臓」「口」オブジェクトを保持し「接客する」や「掃除する」という機能を持っています。その他の「レジスター」や「商品棚」、「銀行ATM」も同じように考えることができます。どうですか?オブジェクトという概念がなんとなく理解できたでしょうか?普段からこのような形で日常生活の事象をモデル化して扱ってみる訓練をしておくと非常に良い訓練になります。
それでは抽象的な話ではなく実際にJavaにおいてはどのようにこの概念を適用するかというと、話は単純です。ここで表されているオブジェクト自体はクラス、オブジェクト内部に保持されている他オブジェクトはフィールド、機能をメソッドとして扱えば良いのです。例えば「コンビニ」クラスであれば下記のようなコードとなるでしょう。(*これはサンプルです。コンパイルできません。)
|
例:「コンビニ」クラスのサンプル
|
| |
|
|
| |
/**
コンビニを表現するクラス
*/
public class ConvenienceStore {
/**
店員配列
*/
private Assistant[] asist = null;
/**
レジスター
*/
private Register regi = null;
/**
銀行ATM
*/
private BankAtm atm = null;
/**
商品棚配列
*/
private Shelf[] Shelf = null;
/**
コンビニクラスのデフォルトコンストラクタ、店員やレジ、ATMの登録を行う
*/
public ConvenienceStore(){
//店員配列のセット:店員のコンストラクタは名前と時給
asist = { new Assistant("牧野",850) , new Assistant("安西",800)
};
//レジスターのセット:コンストラクタの引数はレジのお金と操作できる店員配列
regi = new Register( 300000 , asist );
//ATMのセット:Bankクラスのスタティックメソッドを利用してATMを取得
atm = Bank.getAtm("ATM00325");
//棚をセット
shelf = { new Shelf("食品") , new Shelf("化粧品") ,new
Shelf("飲料") };
}
/**
商品を売るメソッド
*/
public int sell( Goods[] goods , int money ) {
//なんかロジックを記入
}
/**
荷物を送るメソッド
*/
public void send( Goods[] goods ){
//なんかロジックを記入
}
}
|
|
| |
|
|
|
いかがですか?これは少し難しいかもしれませんね。しかし実際にはこのようなイメージでクラスを作ることができるということを忘れないようにしてください。
|