【iPhoneアプリ】基本を忘れないように「オブジェクト指向」について
今回は「オブジェクト指向」についてです。
今後、「Objectiv-C」や「Java」などの開発を行うにあたり
忘れては行けないと思いましたので記載します。
オブジェクト指向とは
プログラム作成する処理内容を物(オブジェクト)として捉え
「属性」と「機能」に分類して表現する考え方です。
では、実際にオブジェクト指向の例を使って記載して行きます。
■自動販売機のシステムをオブジェクト指向を考えてみます。
まず、性質を整理します。
下記の絵のように洗い出してみます。
次に、「属性」「機能」に分けてみます。
▼属性とは
オブジェクトが持っている値を指します。
▼機能とは
オブジェクトの値を操作する事を指します。
このように整理を行うと
以下の特徴がある事が見えてきます。
・オブジェクト生成時に以下の項目の値を決める必要がある。
商品名、商品の価格
・オブジェクト生成後に以下の項目の値が決まる。
投入金額
・属性・操作ともに洗い出しの時点では抽象的な言葉で表現してある
例:どんな商品名なのか不明
どんな商品を出すのか不明
など
特徴を整理し設計を行う
これらを以下のようにまとめ(設計し)てみます。
▼初期設定について(コンストラクタまたは、イニシャライズ)
・「オブジェクト生成時に以下の項目の値を決める必要がある。」
とのことで属性の「商品名」「商品の価格」を初期設定する。
▼機能について
・機能「お金を入れる」を利用すれば、属性の「投入金額」を設定出来る。
・機能「商品を出す」を利用すれば、初期設定した属性の「商品名」が出てくる。
・機能「おつりを出す」を利用すれば、初期設定した属性の「商品の価格」と「投入金額」の差額を出す。
上記の記載内容を見ると機能によって、属性の値が変換している事が分かります。
■実際にプログラムで書くと以下のようになります。
ヘッダーファイルはこんな感じです。
■Vending.h
#import <Foundation/Foundation.h> @interface Vending : NSObject{ //商品名 @private NSString *itemName; //商品の金額 @private int itemPrice; //投入金額 @public int itemPay; } //イニシャライザ -(id)initWithVending:(NSString *)name price:(int)price; //メソッド名:お金を入れる -(void)setCoin:(int)coin; //メソッド名:おつりを出す -(int)getCoin; //メソッド名:商品を出す -(NSString*)getItem; @end
モデルファイルはこんな感じです。
■Vending.m
#import "Vending.h" @implementation Vending /** * イニシャライザ(初期化) */ -(id)initWithVending:(NSString *)name price:(int)price{ if((self = [super init])) { //商品名 itemName = name; //商品の価格 itemPrice = price; } return self; } /** * メソッド名:お金を入れる * 用途:引数で受け取った、「投入金額」を属性「投入金額」に代入 * * @param coin 投入金額 * */ -(void)setCoin:(int)coin{ itemPay = coin; } /** * メソッド名:おつりを出す * 用途:「投入金額」と「商品の価格」差額を返す。 * * @return おつり * */ -(int)getCoin{ return itemPay-itemPrice; } /** * メソッド名:商品を出す * 用途:「商品名」を返す。 * * @return 商品名 * */ -(NSString*)getItem{ return itemName; } @end
メインファイルをこんな感じで書いて、実行します。
■ViewController.m
Vending *Ven = [[Vending alloc] initWithVending:@"コーラ" price:100]; [Ven setCoin:200]; NSLog(@"商品名;%@",[Ven getItem]); NSLog(@"おつり:%d",[Ven getCoin]);