cocoa pro01

119
第1回iPhone 輪講 1

Upload: hasegawa

Post on 08-Jul-2015

682 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cocoa Pro01

第1回iPhone 輪講

1

Page 2: Cocoa Pro01

Lesson1アプリケーションとフレームワーク

Page 3: Cocoa Pro01

利用しているフレームワークの調査方法

• ターミナルでotoolというコマンドを使う• Safariで使っているフレームワークを調査する例

• $ cd /Applications/Safari.app/Contents/MacOS/

• $ otool -L Safari

3

Page 4: Cocoa Pro01

Lesson2 CocoaとObjective-C

Page 5: Cocoa Pro01

API(アプリケーション プログラミング インターフェース)

• フレームワークにはその機能を呼び出す為の窓口がついている

• アプリケーションは、その窓口を経由し、フレームワークを操作する

• この窓口の事をAPIと呼ぶ

5

Page 6: Cocoa Pro01

アプリケーション

API

フレームワーク

6

Page 7: Cocoa Pro01

アプリケーション

API

フレームワーク

アプリケーションはAPIを経由してフレームワークの機能を

呼び出す

6

Page 8: Cocoa Pro01

Lesson3開発用アプリケーション

Page 9: Cocoa Pro01

開発用アプリケーション

• Mac OS Xの開発用アプリケーション• Cocoaの開発でメインに使うもの

• Xcode

• Interface Builder

8

Page 10: Cocoa Pro01

開発の為のアプリケーションと作業の流れ

•アプリケーションを作る材料• 一つのあうリケーションを作るにはまず必要な「素材」を集める事になる

• ソースコード、アイコンなど

9

Page 11: Cocoa Pro01

アプリケーションを作る素材

• ソースコード• プログラムが書いてあり、それがアプリケーションで行う処理になる

• ユーザインタフェースのレイアウト• デスクトップアプリケーションにはウィンドウやボタン、メニューなどのユーザインタフェースを持つ

10

Page 12: Cocoa Pro01

アプリケーションを作る素材

• 画像リソース• ソースコード以外で必要なファイルの事をリソースと呼ぶ

• アイコンなどの画像リソースも必要な素材

11

Page 13: Cocoa Pro01

ビルドの手順

.o

.o

XIB TIFF

.appコンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル アプリケーション

リソースファイル

12

Page 14: Cocoa Pro01

コンパイル

• ビルドの中で一番重要な処理• コンパイルは「翻訳」の意味

• ソースコードを翻訳する

• コンパイルするとバイナリファイルができる• コンパイルされたバイナリファイルには「.o」という拡張子がつく

13

Page 15: Cocoa Pro01

ビルドの手順(コンパイル)

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル アプリケーション

リソースファイル

14

Page 16: Cocoa Pro01

ビルドの手順(コンパイル)

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル アプリケーション

リソースファイル

14

Page 17: Cocoa Pro01

ビルドの手順(コンパイル)

.o

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル アプリケーション

リソースファイル

14

Page 18: Cocoa Pro01

ビルドの手順(コンパイル)

.o

.o

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル アプリケーション

リソースファイル

14

Page 19: Cocoa Pro01

リンク

• コンパイルするとソースコードの数だけバイナリファイルができる

• こられをまとめて1つのファイルに仕上げる処理をリンクと呼ぶ

15

Page 20: Cocoa Pro01

リンク

• リンクするときには使用しているフレームワークの情報も付け加えておく

• これによりプログラム実行時に、フレームワークが自動的に読み込まれる

• リンクしてできたファイルを実行ファイルと呼ぶ

• ターミナルから呼び出す事で起動できる

16

Page 21: Cocoa Pro01

ビルドの手順(リンク)

.o

.o

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル アプリケーション

リソースファイル

17

Page 22: Cocoa Pro01

ビルドの手順(リンク)

.o

.o

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル アプリケーション

リソースファイル

17

Page 23: Cocoa Pro01

ビルドの手順(リンク)

.o

.o

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル アプリケーション

リソースファイル

17

Page 24: Cocoa Pro01

ビルドの手順(リンク)

.o

.o

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル アプリケーション

リソースファイル

17

Page 25: Cocoa Pro01

ビルドの手順(リンク)

.o

.o

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル アプリケーション

リソースファイル

17

Page 26: Cocoa Pro01

バンドル

• 実行ファイルだけでは満足に動かない• 画像リソースやユーザーインターフェースのレイアウト、アプリケーションの情報などの必要な情報がまだそろっていないため

• 実行ファイルと上記のようなリソースをまとめあげる事をバンドルと呼ぶ

• Mac OS Xスタイルのアプリケーションが出来上がるこのファイルには「.app」という拡張子がつく

18

Page 27: Cocoa Pro01

ビルドの手順(バンドル)

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル

リソースファイル

19

Page 28: Cocoa Pro01

ビルドの手順(バンドル)

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル

リソースファイル

19

Page 29: Cocoa Pro01

ビルドの手順(バンドル)

XIB TIFF

コンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル

リソースファイル

19

Page 30: Cocoa Pro01

ビルドの手順(バンドル)

XIB TIFF

.appコンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル

リソースファイル

19

Page 31: Cocoa Pro01

ビルドの手順(バンドル)

XIB TIFF

.appコンパイル リンク バンドル

フレームワーク

ソースコード バイナリファイル 実行ファイル アプリケーション

リソースファイル

19

Page 32: Cocoa Pro01

Xcodeで提供される機能

• ソースコードエディタ• プログラミングの為に便利な機能を搭載

• ソースコードやリソースファイルの管理• アプリケーション作成に必要なソースコードや画像リソースを管理する

• 管理はプロジェクト単位で行われる

20

Page 33: Cocoa Pro01

Xcodeで提供される機能

• ビルド• コンパイル、リンク、バンドルといった手順を、まとめて行う

• デバッグ• 出来上がったアプリケーションのテストを行う

21

Page 34: Cocoa Pro01

プロジェクトウィンドウ

• Xcodeではソースコードやリソースをプロジェクトという単位で管理する

• Xcodeで作成されたプロジェクは「.xcodeproj」という拡張子を持つファイルに保存される

• これをXcodeで開くとプロジェクトウィンドウが開く

.xcodeprojファイル

22

Page 35: Cocoa Pro01

プロジェクトウィンドウ

• Xcode ToolsからインストールしたExamplesにあるプロジェクトファイルを開く

• /Developer/Examples/AppKit/BezierPathLab/BezierPathLab.xcodeprojを開いてみる

23

Page 36: Cocoa Pro01

プロジェクトウィンドウ

24

Page 37: Cocoa Pro01

プロジェクトウィンドウ

グループとファイル

25

Page 38: Cocoa Pro01

プロジェクトウィンドウ

c

グループとファイル

25

Page 39: Cocoa Pro01

プロジェクトウィンドウ

c

グループとファイル

プロジェクトにはソースコード、画像リソースを登録でき、

それをフォルダによってグループ化できるそのグループやファイルを表す

25

Page 40: Cocoa Pro01

プロジェクトウィンドウ

26

Page 41: Cocoa Pro01

プロジェクトウィンドウ

26

Page 42: Cocoa Pro01

プロジェクトウィンドウ

詳細表示

27

Page 43: Cocoa Pro01

プロジェクトウィンドウ

詳細表示

27

Page 44: Cocoa Pro01

プロジェクトウィンドウ

詳細表示

右の領域で選択されたグループの内容は

こちらの「詳細表示」の領域に表示される

27

Page 45: Cocoa Pro01

テキストエディタの表示

• BezierPathLab.xcodeprojに登録されている BezierView.hやBezierView.mなどのソースファイルをダブルクリックすると、ソースコード編集するエディタが開く

28

Page 46: Cocoa Pro01

テキストエディタの表示

29

Page 47: Cocoa Pro01

テキストエディタの表示

30

Page 48: Cocoa Pro01

テキストエディタの表示

プロジェクトウィンドウの右下付近のハンドラを上にドラッグすると、

3ペインの構造になる

30

Page 49: Cocoa Pro01

テキストエディタの表示

30

Page 50: Cocoa Pro01

テキストエディタの表示

30

Page 51: Cocoa Pro01

テキストエディタの表示

30

Page 52: Cocoa Pro01

テキストエディタの機能(関数、メソッドの一覧)

31

Page 53: Cocoa Pro01

テキストエディタの機能(関数、メソッドの一覧)

31

Page 54: Cocoa Pro01

テキストエディタの機能(関数、メソッドの一覧)

ここをクリックする

31

Page 55: Cocoa Pro01

テキストエディタの機能(関数、メソッドの一覧)

ここをクリックする

31

Page 56: Cocoa Pro01

テキストエディタの機能(関数、メソッドの一覧)

ここをクリックする

このソースに含まれる

関数やメソッドの一覧が表示される

31

Page 57: Cocoa Pro01

テキストエディタの機能(コードの補完)

32

Page 58: Cocoa Pro01

テキストエディタの機能(コードの補完)

BezierView.mの56行目「setLineColor」の前に

カーソルをあわせ、Escキーを押す

32

Page 59: Cocoa Pro01

テキストエディタの機能(コードの補完)

BezierView.mの56行目「setLineColor」の前に

カーソルをあわせ、Escキーを押す

32

Page 60: Cocoa Pro01

テキストエディタの機能(コードの補完)

BezierView.mの56行目「setLineColor」の前に

カーソルをあわせ、Escキーを押す

この場で使う事のできるメソッドの候補一覧が

表示される

32

Page 61: Cocoa Pro01

エンコード、改行の変更

• 「表示」→「テキスト」メニュー内にあるファイルエンコード、行末コードメニューを使う

• 表示しているテキストのエキスとエンコードや改行コードを変更できる

33

Page 62: Cocoa Pro01

その他のツール

• Interface Builder• ユーザインタフェースのレイアウトを行うデザイナソフトウェア

• 見た目はドロー系ソフトに近い

• パレットからボタンやスライダーなどの部品を選択して、ドラッグアンドドロップで貼付けて編集

• WYSIWYGでできるので直感的で効率が良い

34

Page 63: Cocoa Pro01

その他のツール

• File Merge• 2つのファイルを比較する為のツール

• ソースコードをある程度編集した後、過去のものと比べて変更点を確認するのに使う

• Icon Composer• アイコンファイルを作成する為のアプリケーション

• 画像ファイルを.icnsという拡張子を持つファイルに変換する

35

Page 64: Cocoa Pro01

その他のツール

• Property List Editor• プロパティリストの為の専用エディタ

• Mac OS Xではアプリケーションの様々な情報を「プロパティリスト」というフォーマットで記述する

• PackageMaker• インストーラ作成の為のツール

36

Page 65: Cocoa Pro01

Lesson4オブジェクト指向

Page 66: Cocoa Pro01

オブジェクト指向

• オブジェクト指向5つの用語• クラス• インスタンス• インスタンス変数• メソッド• 継承

38

Page 67: Cocoa Pro01

クラス

• クラス(class)は「設計図」のようなもの• アプリケーションを起動すればウィンドウが出るウィンドウの上にはボタンが表示されている

• 「ウィンドウクラス」や「ボタンクラス」という設計図から作られる

• プログラミングで使うウィンドウ、ボタン等の「もの」の為にクラスという設計図を作っていく

39

Page 68: Cocoa Pro01

クラス

• クラス(class)は「設計図」のようなもの• アプリケーションを起動すればウィンドウが出るウィンドウの上にはボタンが表示されている

• 「ウィンドウクラス」や「ボタンクラス」という設計図から作られる

• プログラミングで使うウィンドウ、ボタン等の「もの」の為にクラスという設計図を作っていく

これがオブジェクト指向の考え方「もの」というのがオブジェクトの事

39

Page 69: Cocoa Pro01

インスタンス

• クラスという設計図をもとに作られた「もの」が、インスタンス(instance)

• ウィンドウ上のボタンは実際にプログラム上で動いているのはボタンクラスから作られたボタンインスタンス

• クラスからインスタンスを作り出す事をインスタンス化(instantiate)と言う

ボタンクラス クラス

インスタンス化

インスタンス40

Page 70: Cocoa Pro01

インスタンス変数

• ボタンインスタンスを特徴づける、ボタンに表示するタイトル、ウィンドウ上でのボタンの位置などの値をインスタンスごとに管理する.これをインスタンス変数(instance variable)と呼ぶ

41

Page 71: Cocoa Pro01

メソッド

• インスタンスを作り、インスタンス変数を確保できたら操作する手段 が必要

• ボタンにタイトルを設定する、ユーザがボタンを押したときに行う処理など

• こういった処理を行うものをメソッド(method)と呼ぶ

42

Page 72: Cocoa Pro01

メソッド

• メソッドには2種類ある• インスタンスメソッド(instance method)

• インスタンス変数の値の設定など、インスタンスに対して処理を行うもの

• クラスメソッド(class method)

• クラス全体に対する処理を行うもの

• 代表的なクラスメソッドはインスタンス化を行うもの

43

Page 73: Cocoa Pro01

継承

• 継承(inheritance)は「何かを基に拡張する」というイメージ

• 何を継承するかというと,クラスを継承する

44

Page 74: Cocoa Pro01

継承の具体例

• 一行のテキストを編集する為のテキストフィールドを「テキストフィールドクラス」とする

• しかしテキストフィールドだけでは物足りない場合がある

• パスワード入力の為のテキストファールドの中はすべて黒点で表示したい場合

• 検索の為のテキストフィールドは特別なデザインにしたい場合など

これ

45

Page 75: Cocoa Pro01

継承の具体例

• 一行のテキストを編集する為のテキストフィールドを「テキストフィールドクラス」とする

• しかしテキストフィールドだけでは物足りない場合がある

• パスワード入力の為のテキストファールドの中はすべて黒点で表示したい場合

• 検索の為のテキストフィールドは特別なデザインにしたい場合など

これほとんどの機能は同じなのに、それぞれのクラスを

新しく作り直すのは面倒!

45

Page 76: Cocoa Pro01

継承の具体例

• 一行のテキストを編集する為のテキストフィールドを「テキストフィールドクラス」とする

• しかしテキストフィールドだけでは物足りない場合がある

• パスワード入力の為のテキストファールドの中はすべて黒点で表示したい場合

• 検索の為のテキストフィールドは特別なデザインにしたい場合など

これほとんどの機能は同じなのに、それぞれのクラスを

新しく作り直すのは面倒!

こういったときに継承を使う45

Page 77: Cocoa Pro01

継承の具体例

• 基になるクラスを親クラス又は、スーパークラス(super class)という

• 新しいクラスを、サブクラス(subclass)という

• 親クラスのインスタンス変数と、メソッドをすべて受け継ぎ、独自のインスタンス変数とメソッドを追加する事ができる

46

Page 78: Cocoa Pro01

継承の具体例

47

Page 79: Cocoa Pro01

継承の具体例

47

Page 80: Cocoa Pro01

継承の具体例

通常のテキストフィールド

47

Page 81: Cocoa Pro01

継承の具体例

まずテキストフィールドクラスを作る

通常のテキストフィールド

47

Page 82: Cocoa Pro01

継承の具体例

通常のテキストフィールド

47

Page 83: Cocoa Pro01

継承の具体例親クラス

通常のテキストフィールド

47

Page 84: Cocoa Pro01

継承の具体例親クラス

通常のテキストフィールド

47

Page 85: Cocoa Pro01

継承の具体例親クラス

親クラスを継承セキュアクラスフィールドクラスを追加

通常のテキストフィールド

47

Page 86: Cocoa Pro01

継承の具体例親クラス

親クラスを継承セキュアクラスフィールドクラスを追加

通常のテキストフィールド

47

Page 87: Cocoa Pro01

継承の具体例親クラス

親クラスを継承セキュアクラスフィールドクラスを追加

通常のテキストフィールド

セキュアテキストフィールド

47

Page 88: Cocoa Pro01

継承の具体例親クラス

通常のテキストフィールド

セキュアテキストフィールド

47

Page 89: Cocoa Pro01

継承の具体例親クラス

通常のテキストフィールド

セキュアテキストフィールド

47

Page 90: Cocoa Pro01

継承の具体例親クラス

親クラスを継承検索フィールドを追加

通常のテキストフィールド

セキュアテキストフィールド

47

Page 91: Cocoa Pro01

継承の具体例親クラス

親クラスを継承検索フィールドを追加

通常のテキストフィールド

セキュアテキストフィールド

47

Page 92: Cocoa Pro01

継承の具体例親クラス

親クラスを継承検索フィールドを追加

通常のテキストフィールド

セキュアテキストフィールド 検索テキストフィールド

47

Page 93: Cocoa Pro01

継承の具体例親クラス

通常のテキストフィールド

セキュアテキストフィールド 検索テキストフィールド

47

Page 94: Cocoa Pro01

継承の具体例親クラス

サブクラス

通常のテキストフィールド

セキュアテキストフィールド 検索テキストフィールド

47

Page 95: Cocoa Pro01

オブジェクト指向の用語の関連図

クラスメソッド

インスタンス変数

インスタンスメソッド

インスタンス化

クラス インスタンス

48

Page 96: Cocoa Pro01

Cocoaでの実例

• ウィンドウの上に、「push me!」というタイトルを設定した一つボタンを作り配置する

49

Page 97: Cocoa Pro01

Cocoaでの実例

• クラスを確認する• ボタンの為のクラスを確認する

• CocoaにはNSButtonというボタンの機能を提供するクラスがある

• インスタンス化してインスタンスを作成する• NSButtonのインスタンスを作成する

• この手順はInterface Builderで行う

50

Page 98: Cocoa Pro01

Cocoaでの実例

• インスタンスメソッドを呼び出してタイトルを設定する

• ボタンにはタイトルを表すインスタンス変数がある

• インスタンスメソッドを使って設定する

• NSButtonクラスのタイトルを設定する為のインスタンスメソッドはsetTitle:というもの

• これを呼び出す事でタイトルが設定できる

51

Page 99: Cocoa Pro01

Cocoaでの実例• NSButtonのインスタンス化と、インスタンスメソッドの呼び出し

52

Page 100: Cocoa Pro01

Cocoaでの実例• NSButtonのインスタンス化と、インスタンスメソッドの呼び出し

クラスを確認

52

Page 101: Cocoa Pro01

Cocoaでの実例• NSButtonのインスタンス化と、インスタンスメソッドの呼び出し

NSButtonクラスを確認

52

Page 102: Cocoa Pro01

Cocoaでの実例• NSButtonのインスタンス化と、インスタンスメソッドの呼び出し

NSButtonクラスを確認

52

Page 103: Cocoa Pro01

Cocoaでの実例• NSButtonのインスタンス化と、インスタンスメソッドの呼び出し

NSButtonクラスを確認

インスタンス化

52

Page 104: Cocoa Pro01

Cocoaでの実例• NSButtonのインスタンス化と、インスタンスメソッドの呼び出し

NSButton

Push Me!

クラスを確認

インスタンス化

52

Page 105: Cocoa Pro01

Cocoaでの実例• NSButtonのインスタンス化と、インスタンスメソッドの呼び出し

NSButton

Push Me!

クラスを確認

インスタンス化

インスタンスメソッッドを呼び出して,タイトルを設定

52

Page 106: Cocoa Pro01

Cocoaでの実例• NSButtonのインスタンス化と、インスタンスメソッドの呼び出し

NSButton

Push Me!

setTitle:@”Push Me!”

クラスを確認

インスタンス化

インスタンスメソッッドを呼び出して,タイトルを設定

52

Page 107: Cocoa Pro01

テキストフィールドの継承

• Cocoaのテキストフィールドクラス• Cocoaにはテキストフィールドを表すNSTextFieldというクラスが提供されている

53

Page 108: Cocoa Pro01

テキストフィールドの継承

• NSTextFieldにはサブクラスもいくつかある• NSSecureTextField

• パスワード入力などに使われるクラス

• NSSearchField

• 検索フィールドであるクラス

54

Page 109: Cocoa Pro01

テキストフィールドの継承

• NSTextFieldにはサブクラスもいくつかある• NSComboBox

• コンボボックスであるクラス

• NSTokenField

• トークン分割する事のできるクラス

55

Page 110: Cocoa Pro01

テキストフィールドの継承

• NSTextFieldにはサブクラスもいくつかある• NSComboBox

• コンボボックスであるクラス

• NSTokenField

• トークン分割する事のできるクラス

それぞれ、基のテキストフィールドの機能を残しつつ、独自の拡張を行っている

55

Page 111: Cocoa Pro01

NSTextFieldのクラス階層

• NSTextFieldもほかのクラスを継承している• NSTextFieldはNSControlを継承している

• NSControlはNSViewを継承している

• NSViewはNSResponderを継承している

• NSResponderはNSObjectを継承している

56

Page 112: Cocoa Pro01

NSTextFieldのクラス階層

• NSTextFieldもほかのクラスを継承している• NSTextFieldはNSControlを継承している

• NSControlはNSViewを継承している

• NSViewはNSResponderを継承している

• NSResponderはNSObjectを継承している

このような継承の連なりをクラス階層と呼ぶ

56

Page 113: Cocoa Pro01

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

57

Page 114: Cocoa Pro01

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

クラス階層をたどっていくと、必ず大元のクラスにたどり着く

このクラスの事をルートクラスという

57

Page 115: Cocoa Pro01

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

57

Page 116: Cocoa Pro01

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

57

Page 117: Cocoa Pro01

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

Cocoaの場合ルートクラスはNSObject

57

Page 118: Cocoa Pro01

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

57

Page 119: Cocoa Pro01

おわり

58