少~し間が空きましたが、今回はObjective-C入門、第4回目となります。
すっかり忘れてしまった人もいるかもしれませんので、前回の復習をしておきましょう。
Objective-C入門その3:「@」って何だ?
前回はHello worldの中でも大枠、
#import 関連プログラムの呼び出し
@interface ~ @end クラスの宣言
@implementation ~ @end クラスの実装
この3つの存在を確認しました。
「@」は、「コンパイラディレクティブ」と言って、
「こっからObjective-Cだからよろしく!」ということをコンパイラに命令する言葉でしたね。
今回はもう少しクラスついて深堀りしてみましょう。
前回お話しした部分をすこーし薄く塗ってみました。
はい、どん!
@interfaceの後ろに何か書いてありますね。
@interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate>
コレ、クラスの名前です。
ちょっと長いですね。
長いのにはワケがあります。
@interface クラス名:スーパークラス名 <プロトコル>
こんな感じで書いてるからです。
つまり実際のクラス名は「HelloWorldAppDelegate」となります。
スーパークラスはオブジェクト指向の見本のような考え方で、
文字通りスーパーなクラスです。
以上。
以上じゃない。
極限まで平たく言ってしまえば、
「虎の威を借る狐」の「虎」に該当します。
何を言っているかわからない?
ご説明しましょう。
まずアナタの作ったクラスを「狐」とします。
やりたいことは「子豚を脅かすこと」です。
ですがそれには手続きが必要です。
・子豚を見つけること
・逃げ道を軽く塞いでおくこと
・親豚がいないかを確認すること。
・ガー
ぜーんぶ自分でプログラミングしてもいいのですが、
面倒なら「虎」を呼んできて「ガー」してもらえば良いのです。
それがスーパークラスです。
親クラスとも言います。
スーパークラスを指定しておくことで、そのスーパークラスが持つ全ての機能が使えます。
虎の威、借り放題です。
これを、継承と言います。
なんとなく北斗神拳が浮かんだら私と同じ世代ということです。
場面によって虎を借りてくるのかライオンを借りてくるのか、
はたまたペンギンを借りてくるのかは自由です。
ここで出ている、NSObject。
実はiPhone OSのObjective-Cを使ったフレームワークは、ほぼ全てこのクラスを親にしています。
長々と説明して来ましたが、とりあえずNSObject呼んどけ、というのが答えです。
<知りたがりのアナタのために>
NSObjectのNSは、「NEXTSTEP」の略です。
Mac OS XはNEXTSTEPというOSが元になって作られました。
Mac OS Xを元にして作られているiPhone OSにも残る名残というわけです。
<ここまで>
もうひとつのプロトコルは何でしょう?
これは、メソッドの宣言(プロトタイプ宣言)の集合を指しています。
さっぱりわかりませんね。
Objective-Cでは単一継承というルールがあります。
要は虎とライオンを同時に呼んできてはいけないというルールです。
でもどうしても呼びたくなったら、<カッコ>付けてプロトコルとして呼びます。
カンマで区切れば何個でも呼ぶことができます。
じゃぁ呼びたい放題かというと、プロトコルの場合、
メソッドの宣言だけで実装部分が無いので、「ちょい面倒」
という制限が付きます。
(メソッドの宣言については次回)
ここではNSObjectに加えて、UIApplicationDelegateというクラスも継承しようとしているわけです。
UIApplicationDelegateは、アプリの起動終了時に行われる固有の処理を担当するクラスです。
テンプレートから作ってもあらかじめ設定してありますので、お約束だと思っておきましょう。
まとめてみましょう。
@interface 狐:虎<ライオン>
「狐」クラスを宣言します。
「虎」スーパークラスから継承します。
「ライオン」プロトコルで、メソッドの宣言だけ継承します。
ぐっと身近になってきました!
この調子で、宣言シリーズを片っ端から理解していきましょう。