Presentation is loading. Please wait.

Presentation is loading. Please wait.

第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.

Similar presentations


Presentation on theme: "第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明."— Presentation transcript:

1 第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明

2 はじめに オブジェクト指向の考え方 Objective-C クラスの作成 アクセサの実装 イニシャライザの実装

3 オブジェクト指向の考え方 例.ファイルにデータを書き込むプログラム 1.書き込むデータをDBから取得 2.取得したデータをファイルに書き込む
書き込み依頼 データ取得依頼 C B DB FILE A 書き込み データ取得 メッセージ メッセージ 自律分散協調動作

4 クラス (class) と メソッド (method)
Bにはどんな機能が必要か? C B 書き込み依頼 データ取得依頼 A -データの取得を依頼する +ファイルに書き込む B クラス メソッド

5 インスタンス変数 (instance variable)とアクセサ (accessor)
書き込み依頼 データ取得依頼 A ファイル名指定 B クラス -書き込むファイル名 -上書きするか?(同名ファイル有時) インスタンス変数 -データの取得を依頼する +ファイルに書き込む メソッド +ファイル名を設定する +上書きするか否かを設定する アクセサ

6 コンストラクタ (構築子:constructor)
詳細な書き込み依頼をしない場合のBのデフォルトの動作を設定したい C B 書き込み依頼 データ取得依頼 A B クラス -書き込むファイル名 -上書きするか?(同名ファイル有時) インスタンス変数 +初期化 -データの取得を依頼する +ファイルに書き込む +ファイル名を設定する +上書きするか否かを設定する コンストラクタ メソッド アクセサ

7 デストラクタ (消去子: destructor)
Bの終了時(※)の動作を設定したい C B 書き込み依頼 データ取得依頼 A B クラス -書き込むファイル名 -上書きするか?(同名ファイル有時) インスタンス変数 +初期化 -データの取得を依頼する +ファイルに書き込む +ファイル名を設定する +上書きするか否かを設定する コンストラクタ メソッド アクセサ +終了時の動作 デストラクタ

8 オーバーロード (overload) 場合によっては書き込み依頼のときにファイル名を教えたい クラス インスタンス変数 コンストラクタ
C B 書き込み依頼 データ取得依頼 A ファイル名指定 B クラス -書き込むファイル名 -上書きするか?(同名ファイル有時) インスタンス変数 +初期化 -データの取得を依頼する +ファイルに書き込む +ファイル名を設定する +上書きするか否かを設定する +終了時の動作 コンストラクタ オーバーロード メソッド +ファイルに書き込む(ファイル名指定) アクセサ デストラクタ

9 インスタンス化 (instantiation)
クラスを基に実際の値としてデータを生成 class インスタンス化 解放 (設計図) instance コンストラクタが走る デストラクタが走る

10 インスタンス化 (instantiation)
C言語の構造体の使い方によく似ている /* header files */ #include <stdio.h> #include <string.h> #include <stdlib.h> /* structures */ typedef struct flab_tag { int no; char name[256]; char tel[256]; } flab; /* main */ int main(void) { flab member; member.no = 6116; strncpy(member.name, "Masaaki Sumi", 255); strncpy(member.tel, "090-xxxx-xxxxi", 255); printf("no: %d\nname: %s\ntel:%s\n", member.no, member.name, member.tel); return EXIT_SUCCESS; } クラスの定義に相当 インスタンス化に相当

11 これまでのまとめ 以下の用語を理解しておきましょう クラス (class) メソッド (method)
インスタンス変数 (instance variable) アクセサ (accessor) コンストラクタ (constructor) デストラクタ (destructor) オーバーロード (overload) インスタンス化 (instantiation) インスタンス (instance)

12 継承 (inheritance) 異なるフォーマットのファイルに書き込む 実装に手間がかかる B1 C1 A B2 C2 BN CN
請求ファイル 書き込み依頼 B1 C1 請求データ 取得依頼 A 収入ファイル 書き込み依頼 B2 収入データ 取得依頼 C2 ・・・・ 支出ファイル 書き込み依頼 BN 支出データ 取得依頼 CN 実装に手間がかかる

13 継承 (inheritance) オーバーライド(override) ファイル #書き込むファイル名 #上書きするか?(同名ファイル有時)
+初期化 #データの取得を依頼する +ファイルに書き込む +ファイルに書き込む(ファイル名指定) +ファイル名を取得する +上書きするか否かを取得する +ファイルをクローズする 請求ファイル 収入ファイル +ファイルに書き込む +ファイルに書き込む(ファイル名指定) +ファイルに書き込む +ファイルに書き込む(ファイル名指定) オーバーライド(override)

14 継承 (inheritance) 般化 スーパークラス (親クラス:superclass) サブクラス (子クラス:subclass)
Objective-Cは多重継承可能 特化

15 クラスの作成 Objective-Cのクラス 一般的な実装 インターフェース部 実装部 1つのクラスで2つのファイル
クラス名.h (インターフェース部) クラス名.m (実装部 )

16 クラスの作成 インターフェース部 実装部 @interface クラス名 : スーパークラス名 { インスタンス変数の宣言; ・・・ }
    インスタンス変数の宣言;     ・・・ } メソッドの宣言; ・・・ @end 実装部 @implementation クラス名 メソッドの定義     ・・・ @end

17 クラスの実装例 インターフェース部 実装部 @interface HelloWorld : NSObject - (void) hello;
@end 実装部 @implementation HelloWorld - (void) hello { world!"); } @end

18 NSObjectクラス NSObject subclass1 subclass2 ・・・ subclassN
ルートクラス (root class) 基本的にすべてのクラスはNSObjectを継承しなければならない!

19 クラスのインスタンス化 基本 実用的なインスタンス化 イニシャライザ (initializer) [クラス名 alloc]
[[クラス名 alloc] init] イニシャライザ (initializer)

20 HelloWorld /* header files */ #import <Foundation/Foundation.h>
/** class */ /* インターフェース部 */ @interface HelloWorld : NSObject - (void) hello; @end /* 実装部 */ @implementation HelloWorld - (void) hello { world!"); } /* main */ int main(void){ /* インスタンス化 */ HelloWorld *h = [[HelloWorld alloc] init]; /* helloメソッドの呼び出し */ [h hello]; /* インスタンスの解放 */ [h release];

21 アクセサの実装 ゲッターの実装 セッターの実装 インスタンス変数と同じ名前のメソッドを定義 以下の名前のメソッドを定義
 ・インスタンス変数名の前に”set”をつける  ・setの次の文字を大文字にする

22 アクセサの実装例 インターフェース部 実装部 @interface FileAccess : NSObject {
/* インスタンス変数 */ NSString *fileName; // ファイル名 } - (NSString *)fileName; // getter [ファイル名] (void)setFileName:(NSString *)value; // setter [ファイル名] @end 実装部 @implementation FileAccess /** * getter [ファイル名] */ - (NSString *)fileName { return fileName; } * setter [ファイル名] - (void)setFileName:(NSString *)value; fileName = value; @end

23 イニシャライザ (initializer)
Objective-Cはコンストラクタが存在しない インスタンス変数の初期化はどうするか? 初期化用のメソッドを作成 = イニシャライザ NSObjectクラスのイニシャライザ: initメソッド そこで initメソッドをオーバーライドして初期化処理を記述

24 イニシャライザの実装例 インターフェース部 実装部 @interface FileAccess : NSObject {
/* インスタンス変数 */ NSString *fileName; // ファイル名 } - (id)init; // initializer @end 実装部 @implementation FileAccess /** * initializer */ - (id)init { self = [super init]; // スーパークラスのイニシャライザを呼ぶ if ( self != nil ) { fileName } return self; @end

25 おわりに 本日の内容 Next Week オブジェクト指向 Objective-Cによるクラスの実装(基礎) 継承の実装
インスタンス変数のスコープ


Download ppt "第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明."

Similar presentations


Ads by Google