スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

プロトコルの作成、宣言、継承、多重継承。

どうもお久しぶりです。

ええとですね。前まではObjective-C勉強ログだったんですが、もうObjective-Cの基本的なことは理解してしまったので勉強ログじゃなくなってしまいましたが、備忘録として、更新します。

今回は、、、うーんと。どうしよう。どこまで説明したか忘れてしまった。じゃぁ適当にプロトコルあたりで行きますか。

@説明開始

【プロトコルってなに?】
プロトコルってよく聞く言葉ですよね。httpとかftpとか。これは、インターネットの通信のための分類のプロトコルですが、obj-cのプロトコルでもだいたい雰囲気は同じです。要するに、いろいろなところで使うメソッドを集めておける部分です。プロトコル自体はオブジェクトにはできませんが、クラスが準拠(プロトコルを継承するようにした後実装すること)して、プロトコルを採用できます。

例えば、子供に人気の某ポケットモンスターというDS用のアプリケーションがあります。このポケットモンスターは『モンスター』が相手をその『モンスター』の持っている「技」を使って、『相手のモンスター』を「攻撃」します。『相手のモンスター』は、その「攻撃を受ける」と攻撃から【防御率】を「引いた値」分【ライフ】が削られます(らしいです)。
ほんとは多分ここまで単調にはならないはずですが、原理は多分こんな感じなはずなんではないでしょうか。ここでは、オブジェクトを『』でくくって、「」がメソッド【】をインスタンス変数で表しました。
@interface monster_a
{
int defence;//スペル間違ってたらすいません。防御率のインスタンス変数
int life;ライフのインスタンス変数
int power;攻撃の時の大きさ
}
- (void)spec_a;//技a
- (int)attack;//相手モンスターを攻撃する時に使う
- (void)damage:(int)a;//受けるダメージを計算する。引数は、相手から受ける攻撃力の大きさ
- (id)initWithDefence:(int)a life:(int)b power:(int)c;//イニシャライザ
}
こんな感じですかね。実装はめんどくさいのでしません。すいません。説明なので、コメントでだいたいを理解してください。
ここから、プロトコルについての話です。何やら、それぞれのモンスターにはタイプが存在するみたいなんですね(炎とか風とか雷とかでしょうか)。これを一つ一つ実装するとなるとさっきのコードに
@interface monster_a
{
int defence;//スペル間違ってたらすいません。防御率のインスタンス変数
int life;ライフのインスタンス変数
int power;攻撃の時の大きさ
int type;//数値でタイプを決める。例えば1だったら雷とか2だったら、光とか。
}
- (void)spec_a;//技a
- (int)attack;//相手モンスターを攻撃する時に使う
- (void)damage:(int)a;//受けるダメージを計算する。引数は、相手から受ける攻撃力の大きさ
- (id)initWithDefence:(int)a life:(int)b power:(int)c;//イニシャライザ
- (void)type;//ダメージ計算の時にこのメソッドを呼び出し、タイプ別計算を行う
}
太字で追加した部分が計算部分です。別にdamageメソッドに追加してもいいのですが、どちらにしてもめんどくさいですね。はい。ここでプロトコル登場です。プロトコルはいろいろなクラスの似てしまう部分をまとめておくことができるので、例えば雷タイプのモンスターのためのプロトコルは
@protocol lightningType
- (void)type;
@end
というのを作り、先ほどのmonster_aクラスがこのプロトコルに準拠するには

@interface monster_a <lightningType>
{
int defence;//スペル間違ってたらすいません。防御率のインスタンス変数
int life;ライフのインスタンス変数
int power;攻撃の時の大きさ
}
- (void)spec_a;//技a
- (int)attack;//相手モンスターを攻撃する時に使う
- (void)damage:(int)a;//受けるダメージを計算する。引数は、相手から受ける攻撃力の大きさ
- (id)initWithDefence:(int)a life:(int)b power:(int)c;//イニシャライザ
}
とすればいいだけなので簡単です。

とは言ってもこの程度のプログラムではあんまり良さが分からないでしょうが、この雷タイプのモンスターはもっとたくさんいるはずです。これらに一つ一つメソッドを実装するよりかは確実に楽ではないでしょうか。

と、まぁこんな感じです。

【プロトコルの継承】
プロトコルの継承もクラスの継承と同じです。

@protocol protocol_b <protocol_a>

とするだけで継承することができ、あとは、クラスの継承と同じように行うことができます。

【多重継承】
実はですね。C++から来た人は知っているけどあんまり使ったことが無いなぁ。と言う多重継承もこのシステムにより一応使うことができます。宣言の方法は、

@interface myClass : NSObject <protocol_a, protocol_b>

とするだけです。簡単ですね。クラスの多重継承はあまり使いませんが、プロトコルの多重継承は大きなプログラムを作成する上では結構お目にかかるシステムだと思います。

@説明終了

まぁプロトコルの概要の説明は終わりました。

ふー疲れた。

ではまた
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

小さなプログラマ

Author:小さなプログラマ
小さなプログラマです。

これはあくまで、「勉強ログ」なので間違っている場合が多々あります。

なので、このブログに書いてあることは、8%くらいの信じ度でお願いします。

間違っているじゃないか!と言われてもあれなので。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
メールフォーム

名前:
メール:
件名:
本文:

カテゴリ
カウンター
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。