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

Slides:



Advertisements
Similar presentations
1 C++ における OOP を用いた 書き方講座 H 山崎貴英. 2 今回の内容 OOP とは? C++ の超基礎 注釈 書いてあるコードはすべて一部抜粋。 コピペだと動かないよ!
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
復習ー I (General Review I) クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー.
C++ 基礎. 目次 C++ とは? C++ におけるオブジェクト指向 課題 C++ とは? Cには足りなかったものが付与されて出来た物 具体的には、 情報の隠蔽(カプセル化) 共通の名前付け(関数のオーバーロード) 再利用の仕組み クラスの導入 など オブジェクト指向 C++ では大規模なプログラミングの.
AIプログラミング Java とオブジェクト指向プログラミングの基 礎 認知システム論 情報工学コース コンピュータサイエンスコース 生体情報コース.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
AndroidとiPhoneに おける開発比較
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
Objective-Cでシューティングゲーム を作成してみる
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
構造体.
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
オブジェクト指向入門.
ピカチュウによる オブジェクト指向入門 (新版)
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
Javaとオブジェクト指向プログラミングの基礎
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
第10回 プログラミングⅡ 第10回
プログラミング演習3 第2回 GUIの復習.
補足説明.
第8回 iPhoneアプリ開発勉強会 マルチタッチ 鷲見政明.
コンパイラの解析 (2) GCJのデータ構造 - 1.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
ソフトウェア工学 知能情報学部 新田直也.
プログラミング論 ファイル入出力
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング論 ファイル入出力
プログラミング言語論 第12回 オブジェクト指向 情報工学科 篠埜 功.
プログラミング言語論 第13回 オブジェクト指向 情報工学科 篠埜 功.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
変数,式,関数,クラス,コンストラクタ, クラスの属性アクセス,メソッド,親クラ スからの継承
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
もっと詳しくArrayクラスについて調べるには → キーワード検索
ソフトウェア制作論 平成30年11月21日.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
独習Java ・ 5.7  静的変数と静的メソッド ・ 5.8  ローカル変数と変数のスコープ  11月20日    小笠原 一恵.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
18. Case Study : Imperative Objects
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

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

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

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

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

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

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

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

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

インスタンス化 (instantiation) クラスを基に実際の値としてデータを生成 0.001 -1.212 1.321 0.205 -1.314 0.987 0.231 9.231 5.232 -0.981 1.001 -3.212 1.321 5.687 0.321 1.051 2.914 1.324 -0.039 0.021 0.910 -1.039 1.021 0.905 class インスタンス化 解放 (設計図) instance コンストラクタが走る デストラクタが走る

インスタンス化 (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; } クラスの定義に相当 インスタンス化に相当

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

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

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

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

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

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

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

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

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

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

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

アクセサの実装例 インターフェース部 実装部 @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

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

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

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