Download presentation
Presentation is loading. Please wait.
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によるクラスの実装(基礎) 継承の実装
インスタンス変数のスコープ
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.