30
荻原剛志 京都産業大学 コンピュータ理工学部 教授 12-B-1 実例で学ぶ Objective-C 2.0 GUI の関係 iPhone アプリ開発を視野に入れて

【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

Embed Size (px)

Citation preview

Page 1: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

荻原剛志京都産業大学コンピュータ理工学部 教授

12-B-1

実例で学ぶ Objective-C 2.0 と

GUI の関係 ~ iPhone アプリ開発を視野に入れて

Page 2: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

プログラミング言語の歴史(一部のみ)

Page 3: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

GUIの歴史

● 現在のGUIの構成要素をすべて備えていた。

✦ 3ボタンマウス✦ ビットマップディスプレイと「ウィンドウ」の表示

✦ Ethernet network.

(一部のみ)

Page 4: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

NeXTstep

アプリケーション記述に Objective-C を採用した。

Page 5: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

NeXTstep

Page 6: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

NeXTstep

Page 7: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

Objective-C

C言語にオブジェクト指向を取り入れた言語。概念や記法はSmalltalkをまねている。

新たな記法以外、基本的には ANSI C の書き方が使える。(C++とは違う言語)

C言語の高速、緻密な処理とオブジェクト指向の柔軟性、拡張性を合わせ持ったプログラミングが可能。

Page 8: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(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 アプリ開発を視野に入れて

オブジェクト指向の部分

オブジェクト指向らしくするために追加された機能

オブジェクト指向とは関係のない追加・拡張機能

C++ =

(C)2009 T. Ogihara

C++はCの拡張 既存の Cのプログラムを C++ に移行させたり、C++ と

C のコードを共存させることが可能。

C

Page 10: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

オブジェクト指向の部分

Objective-C =

(C)2009 T. Ogihara

Objective-C は C言語の上位互換

既存の Cのプログラムを Objective-C のプログラム内にそのまま混ぜて共存させることが可能。

ハイブリッド言語

Cオブジェクト指向らしくするために追加された機能

オブジェクト指向とは関係のない追加・拡張機能

Page 11: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

他のOO言語との比較 (1)

コンパイラ言語である。 型チェックが緩い。 多重継承、Mixin、ジェネリックはない。 Javaの「インタフェース」は Objective-

C が元祖。 ガーベジコレクションは一応利用可能。

Page 12: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

他のOO言語との比較 (2)

C++ の参照演算子「&」や、名前空間や「::」はない。

演算子のオーバーローディングはない。 関数、メソッドの引数の省略機能はない。 C#のような「プロパティ」を持つ。 クラスもオブジェクトである。

Page 13: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

他のOO言語との比較 (3)

インスタンスはヒープ領域にとられる。 基本型(int他)はオブジェクトではない。

Page 14: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

Objective-C 2.0の新機能

Appleが明示する3つの新機能 ガーベジコレクション 宣言プロパティ 高速列挙

宣言プロパティは便利だが、従来の1.0までのプログラミングでも不便はない。

ランタイムシステムが大幅に変更された

Page 15: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

メッセージ式 (1)

オブジェクトは、どのクラスに属するものでも id という特別な型で表現できる。

id obj; /* 変数の宣言 */

オブジェクト obj にメッセージを送ることを次のように記述し、メッセージ式と呼ぶ。

[ obj msg ]

Page 16: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(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 アプリ開発を視野に入れて

(C)2009 T. Ogihara

クラス定義

@interface クラス名 : スーパークラス名{ インスタンス変数の宣言; ...}メソッドの宣言; ...@end

通常はヘッダファイルに記述する

(インタフェース部)

Page 18: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

クラス定義

@implementation クラス名- (id)initWithName:(NSString *)str{ メソッドの定義(C言語の関数と同様) ...} ...@end

C言語の関数も混ぜて記述できる

(インプリメント部)

Page 19: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

動的結合

メッセージの処理は、動的結合とポリモーフィズムを基本とする。

virtual, final などは指定しない( C++, Java, C# などと異なる)。

送ったメッセージが存在しなければ、実行時エラーとなる。

Page 20: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(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 アプリ開発を視野に入れて

(C)2009 T. Ogihara

セレクタとメッセージ送信

セレクタ(と引数)を指定してメッセージを送ることができる。

セレクタはプログラム中では @selector( ) で表す。

呼び出されるメソッドは、セレクタが同じでもレシーバによって異なる(関数のポインタなどと動作原理が異なる)。

Page 22: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(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 アプリ開発を視野に入れて

(C)2009 T. Ogihara

ターゲット-アクション・パラダイム

Cocoaアプリケーションでオブジェクト同士を連携させるための基本概念。

メッセージを送る相手をターゲット、送るメッセージをアクションと呼び、その双方を動的に変更できる。

GUI制御には、Cocoaバインディングという方法もある。

Page 24: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

ターゲット-アクション・パラダイム

ターゲットとなるオブジェクトのクラスは、実行時まで分からなくてもよい 知らない相手にメッセージ送信が可能 部品化を柔軟に実現

ターゲット

アクション show:

Page 25: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

ランタイムシステム

Objective-C の動的な振る舞いを実現するために、オブジェクトの生成、解放に伴うメモリ領域の管理、メソッドの探索などを行う。

プログラムからは、主にルートオブジェクトである NSObject を通して利用。

Page 26: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(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 アプリ開発を視野に入れて

(C)2009 T. Ogihara

例題プログラムの概要

階層的なビューでマウス(タッチ)を処理する基本的なプログラム

できあいのGUI部品ではなく、自分でカスタムビューを作ってみる

ターゲット・アクションの仕組みを実装

Page 28: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

例題プログラムの概要

背景のビューをクリックすると新しいボタンが出現する

ボタンをクリックすると色が変わる

ビュー

ボタン

別のボタンにも動作が波及する

Page 29: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

例題プログラムの実装

クリックによって新しいボタンを作る

ボタンもカスタムビューとして実現

ビュー

ボタン別のボタンをターゲットとして参照する

BaseView

MyButton

Page 30: 【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて

(C)2009 T. Ogihara

iPhoneプログラミング

ターゲット-アクションの概念はそのまま Foundationフレームワークはほぼ同じ AppKit → UIKit は雰囲気は似ている グラフィックなどの APIでは Core

Foundation を使う場面が多い 高速化が必要な部分はC言語で記述