【12-b-1】 実例で学ぶ objective-c 2.0 と gui の関係~ iphone...
TRANSCRIPT
![Page 1: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/1.jpg)
荻原剛志京都産業大学コンピュータ理工学部 教授
12-B-1
実例で学ぶ Objective-C 2.0 と
GUI の関係 ~ iPhone アプリ開発を視野に入れて
![Page 2: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/2.jpg)
(C)2009 T. Ogihara
プログラミング言語の歴史(一部のみ)
![Page 3: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/3.jpg)
(C)2009 T. Ogihara
GUIの歴史
● 現在のGUIの構成要素をすべて備えていた。
✦ 3ボタンマウス✦ ビットマップディスプレイと「ウィンドウ」の表示
✦ Ethernet network.
(一部のみ)
![Page 4: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/4.jpg)
(C)2009 T. Ogihara
NeXTstep
アプリケーション記述に Objective-C を採用した。
![Page 5: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/5.jpg)
(C)2009 T. Ogihara
NeXTstep
![Page 6: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/6.jpg)
(C)2009 T. Ogihara
NeXTstep
![Page 7: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/7.jpg)
(C)2009 T. Ogihara
Objective-C
C言語にオブジェクト指向を取り入れた言語。概念や記法はSmalltalkをまねている。
新たな記法以外、基本的には ANSI C の書き方が使える。(C++とは違う言語)
C言語の高速、緻密な処理とオブジェクト指向の柔軟性、拡張性を合わせ持ったプログラミングが可能。
![Page 8: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/8.jpg)
(C)2009 T. Ogihara
Objective-C (歴史)
1983年にBrad Coxが開発(Stepstone社) NeXTコンピュータ(1988年)の主力言語に 1996年、Apple社がNeXT社を買収 Mac OS X(2000年~)の主力言語に採用 Objective-C 2.0 が発表される(2007) iPhone(2007年~)の主力言語として採用
![Page 9: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/9.jpg)
オブジェクト指向の部分
オブジェクト指向らしくするために追加された機能
オブジェクト指向とは関係のない追加・拡張機能
C++ =
(C)2009 T. Ogihara
C++はCの拡張 既存の Cのプログラムを C++ に移行させたり、C++ と
C のコードを共存させることが可能。
C
![Page 10: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/10.jpg)
オブジェクト指向の部分
Objective-C =
(C)2009 T. Ogihara
Objective-C は C言語の上位互換
既存の Cのプログラムを Objective-C のプログラム内にそのまま混ぜて共存させることが可能。
ハイブリッド言語
Cオブジェクト指向らしくするために追加された機能
オブジェクト指向とは関係のない追加・拡張機能
![Page 11: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/11.jpg)
(C)2009 T. Ogihara
他のOO言語との比較 (1)
コンパイラ言語である。 型チェックが緩い。 多重継承、Mixin、ジェネリックはない。 Javaの「インタフェース」は Objective-
C が元祖。 ガーベジコレクションは一応利用可能。
![Page 12: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/12.jpg)
(C)2009 T. Ogihara
他のOO言語との比較 (2)
C++ の参照演算子「&」や、名前空間や「::」はない。
演算子のオーバーローディングはない。 関数、メソッドの引数の省略機能はない。 C#のような「プロパティ」を持つ。 クラスもオブジェクトである。
![Page 13: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/13.jpg)
(C)2009 T. Ogihara
他のOO言語との比較 (3)
インスタンスはヒープ領域にとられる。 基本型(int他)はオブジェクトではない。
![Page 14: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/14.jpg)
(C)2009 T. Ogihara
Objective-C 2.0の新機能
Appleが明示する3つの新機能 ガーベジコレクション 宣言プロパティ 高速列挙
宣言プロパティは便利だが、従来の1.0までのプログラミングでも不便はない。
ランタイムシステムが大幅に変更された
![Page 15: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/15.jpg)
(C)2009 T. Ogihara
メッセージ式 (1)
オブジェクトは、どのクラスに属するものでも id という特別な型で表現できる。
id obj; /* 変数の宣言 */
オブジェクト obj にメッセージを送ることを次のように記述し、メッセージ式と呼ぶ。
[ obj msg ]
![Page 16: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/16.jpg)
(C)2009 T. Ogihara
メッセージ式 (2)
メッセージに引数がある場合、メッセージキーワードに " : " を付け、その後に実引数を書く。 [ obj msg:100 ]
[ obj msg:100 param: N+1 ]
メッセージ式は、そのメッセージを処理した結果の値を返す。
r = [ obj msg:15 ];
![Page 17: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/17.jpg)
(C)2009 T. Ogihara
クラス定義
@interface クラス名 : スーパークラス名{ インスタンス変数の宣言; ...}メソッドの宣言; ...@end
通常はヘッダファイルに記述する
(インタフェース部)
![Page 18: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/18.jpg)
(C)2009 T. Ogihara
クラス定義
@implementation クラス名- (id)initWithName:(NSString *)str{ メソッドの定義(C言語の関数と同様) ...} ...@end
C言語の関数も混ぜて記述できる
(インプリメント部)
![Page 19: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/19.jpg)
(C)2009 T. Ogihara
動的結合
メッセージの処理は、動的結合とポリモーフィズムを基本とする。
virtual, final などは指定しない( C++, Java, C# などと異なる)。
送ったメッセージが存在しなければ、実行時エラーとなる。
![Page 20: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/20.jpg)
(C)2009 T. Ogihara
メモリ管理
Mac OS X の実行環境ではリファレンスカウンタ方式を用いてメモリを管理。
Mac OS X 10.5 (Leopard) からは、ガベージコレクション方式も併用可能。
OS X iPhone ではリファレンスカウンタ方式のみ。
![Page 21: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/21.jpg)
(C)2009 T. Ogihara
セレクタとメッセージ送信
セレクタ(と引数)を指定してメッセージを送ることができる。
セレクタはプログラム中では @selector( ) で表す。
呼び出されるメソッドは、セレクタが同じでもレシーバによって異なる(関数のポインタなどと動作原理が異なる)。
![Page 22: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/22.jpg)
(C)2009 T. Ogihara
セレクタとメッセージ送信
[obj show];
[obj performSelector:@selector(show)];
同じ動作
同じ動作SEL s = @selector(show);[obj performSelector: s];
セレクタは SEL型
![Page 23: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/23.jpg)
(C)2009 T. Ogihara
ターゲット-アクション・パラダイム
Cocoaアプリケーションでオブジェクト同士を連携させるための基本概念。
メッセージを送る相手をターゲット、送るメッセージをアクションと呼び、その双方を動的に変更できる。
GUI制御には、Cocoaバインディングという方法もある。
![Page 24: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/24.jpg)
(C)2009 T. Ogihara
ターゲット-アクション・パラダイム
ターゲットとなるオブジェクトのクラスは、実行時まで分からなくてもよい 知らない相手にメッセージ送信が可能 部品化を柔軟に実現
ターゲット
アクション show:
![Page 25: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/25.jpg)
(C)2009 T. Ogihara
ランタイムシステム
Objective-C の動的な振る舞いを実現するために、オブジェクトの生成、解放に伴うメモリ領域の管理、メソッドの探索などを行う。
プログラムからは、主にルートオブジェクトである NSObject を通して利用。
![Page 26: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/26.jpg)
(C)2009 T. Ogihara
システム階層
Mac OS X OS X iPhone
QuickTime
アプリケーションサービス
コアサービス
カーネル環境
Carbon
Cocoa
JDK
BSD
Cocoa Touch
メディア
コアサービス
コアOS
AppKitフレームワーク UIKitフレームワーク
![Page 27: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/27.jpg)
(C)2009 T. Ogihara
例題プログラムの概要
階層的なビューでマウス(タッチ)を処理する基本的なプログラム
できあいのGUI部品ではなく、自分でカスタムビューを作ってみる
ターゲット・アクションの仕組みを実装
![Page 28: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/28.jpg)
(C)2009 T. Ogihara
例題プログラムの概要
背景のビューをクリックすると新しいボタンが出現する
ボタンをクリックすると色が変わる
ビュー
ボタン
別のボタンにも動作が波及する
![Page 29: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/29.jpg)
(C)2009 T. Ogihara
例題プログラムの実装
クリックによって新しいボタンを作る
ボタンもカスタムビューとして実現
ビュー
ボタン別のボタンをターゲットとして参照する
BaseView
MyButton
![Page 30: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて](https://reader034.vdocuments.pub/reader034/viewer/2022052303/5561fb3bd8b42acd4e8b4d7a/html5/thumbnails/30.jpg)
(C)2009 T. Ogihara
iPhoneプログラミング
ターゲット-アクションの概念はそのまま Foundationフレームワークはほぼ同じ AppKit → UIKit は雰囲気は似ている グラフィックなどの APIでは Core
Foundation を使う場面が多い 高速化が必要な部分はC言語で記述