cocoa pro01

Post on 08-Jul-2015

679 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

第1回iPhone 輪講

1

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

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

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

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

• $ otool -L Safari

3

Lesson2 CocoaとObjective-C

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

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

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

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

5

アプリケーション

API

フレームワーク

6

アプリケーション

API

フレームワーク

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

呼び出す

6

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

開発用アプリケーション

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

• Xcode

• Interface Builder

8

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

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

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

9

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

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

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

10

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

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

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

11

ビルドの手順

.o

.o

XIB TIFF

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

フレームワーク

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

リソースファイル

12

コンパイル

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

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

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

13

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

XIB TIFF

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

フレームワーク

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

リソースファイル

14

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

XIB TIFF

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

フレームワーク

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

リソースファイル

14

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

.o

XIB TIFF

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

フレームワーク

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

リソースファイル

14

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

.o

.o

XIB TIFF

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

フレームワーク

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

リソースファイル

14

リンク

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

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

15

リンク

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

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

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

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

16

ビルドの手順(リンク)

.o

.o

XIB TIFF

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

フレームワーク

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

リソースファイル

17

ビルドの手順(リンク)

.o

.o

XIB TIFF

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

フレームワーク

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

リソースファイル

17

ビルドの手順(リンク)

.o

.o

XIB TIFF

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

フレームワーク

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

リソースファイル

17

ビルドの手順(リンク)

.o

.o

XIB TIFF

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

フレームワーク

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

リソースファイル

17

ビルドの手順(リンク)

.o

.o

XIB TIFF

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

フレームワーク

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

リソースファイル

17

バンドル

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

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

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

18

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

XIB TIFF

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

フレームワーク

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

リソースファイル

19

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

XIB TIFF

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

フレームワーク

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

リソースファイル

19

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

XIB TIFF

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

フレームワーク

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

リソースファイル

19

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

XIB TIFF

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

フレームワーク

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

リソースファイル

19

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

XIB TIFF

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

フレームワーク

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

リソースファイル

19

Xcodeで提供される機能

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

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

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

20

Xcodeで提供される機能

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

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

21

プロジェクトウィンドウ

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

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

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

.xcodeprojファイル

22

プロジェクトウィンドウ

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

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

23

プロジェクトウィンドウ

24

プロジェクトウィンドウ

グループとファイル

25

プロジェクトウィンドウ

c

グループとファイル

25

プロジェクトウィンドウ

c

グループとファイル

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

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

25

プロジェクトウィンドウ

26

プロジェクトウィンドウ

26

プロジェクトウィンドウ

詳細表示

27

プロジェクトウィンドウ

詳細表示

27

プロジェクトウィンドウ

詳細表示

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

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

27

テキストエディタの表示

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

28

テキストエディタの表示

29

テキストエディタの表示

30

テキストエディタの表示

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

3ペインの構造になる

30

テキストエディタの表示

30

テキストエディタの表示

30

テキストエディタの表示

30

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

31

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

31

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

ここをクリックする

31

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

ここをクリックする

31

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

ここをクリックする

このソースに含まれる

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

31

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

32

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

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

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

32

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

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

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

32

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

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

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

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

表示される

32

エンコード、改行の変更

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

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

33

その他のツール

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

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

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

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

34

その他のツール

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

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

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

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

35

その他のツール

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

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

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

36

Lesson4オブジェクト指向

オブジェクト指向

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

38

クラス

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

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

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

39

クラス

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

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

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

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

39

インスタンス

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

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

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

ボタンクラス クラス

インスタンス化

インスタンス40

インスタンス変数

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

41

メソッド

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

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

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

42

メソッド

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

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

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

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

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

43

継承

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

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

44

継承の具体例

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

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

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

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

これ

45

継承の具体例

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

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

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

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

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

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

45

継承の具体例

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

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

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

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

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

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

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

継承の具体例

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

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

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

46

継承の具体例

47

継承の具体例

47

継承の具体例

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

47

継承の具体例

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

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

47

継承の具体例

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

47

継承の具体例親クラス

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

47

継承の具体例親クラス

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

47

継承の具体例親クラス

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

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

47

継承の具体例親クラス

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

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

47

継承の具体例親クラス

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

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

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

47

継承の具体例親クラス

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

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

47

継承の具体例親クラス

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

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

47

継承の具体例親クラス

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

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

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

47

継承の具体例親クラス

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

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

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

47

継承の具体例親クラス

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

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

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

47

継承の具体例親クラス

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

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

47

継承の具体例親クラス

サブクラス

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

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

47

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

クラスメソッド

インスタンス変数

インスタンスメソッド

インスタンス化

クラス インスタンス

48

Cocoaでの実例

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

49

Cocoaでの実例

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

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

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

• この手順はInterface Builderで行う

50

Cocoaでの実例

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

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

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

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

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

51

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

52

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

クラスを確認

52

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

NSButtonクラスを確認

52

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

NSButtonクラスを確認

52

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

NSButtonクラスを確認

インスタンス化

52

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

NSButton

Push Me!

クラスを確認

インスタンス化

52

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

NSButton

Push Me!

クラスを確認

インスタンス化

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

52

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

NSButton

Push Me!

setTitle:@”Push Me!”

クラスを確認

インスタンス化

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

52

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

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

53

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

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

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

• NSSearchField

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

54

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

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

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

• NSTokenField

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

55

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

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

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

• NSTokenField

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

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

55

NSTextFieldのクラス階層

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

• NSControlはNSViewを継承している

• NSViewはNSResponderを継承している

• NSResponderはNSObjectを継承している

56

NSTextFieldのクラス階層

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

• NSControlはNSViewを継承している

• NSViewはNSResponderを継承している

• NSResponderはNSObjectを継承している

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

56

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

57

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

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

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

57

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

57

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

57

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

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

57

NSTextFieldのクラス階層

NSSecureTextField

NSResponder

NSView

NSControl

NSTextField

NSTokenFieldNSComboBoxNSSearchField

NSObject

57

おわり

58

top related