\
2014年11月21日
Posted by 屋台ブルー at 2014年11月21日00:00 Comment(0)

Swiftで遊ぼう! - 133 - プロトコールとデリゲーション 1

swift_logo2015年8月18日追記:プロトコールとデリゲーション関連を調べていてこのページにいらしたSwift言語の初心者の皆さま、ここの内容は私が理解できていなかった頃に書いた記事なので注意して下さい。この後紆余曲折してプロトコールとデリゲーションの関係性は理解しました。その解説は次のリンクを見て下さい。

Swiftで遊ぼう! - 260 - プロトコールとデリゲーション ProtocolsとDelegation

-----ここから過去の記事
またまたプロトコールの話に戻ります。UIDynamicAnimatorクラスの話をしているのになぜプロトコール?って疑問に思うでしょう。iOSのAPI利用にプロトコールの概念が必要なんですよね。でも理解できていないので再び復習(^_^;)

プロトコールはここで何度も説明をしていて、ある程度基本的なことは理解しているんですが、まだ利用することができないんですよ。自分の理解度は今まで50%ぐらいで、今日勉強したことを加えてやっと60%ってとこです。完全理解に向けて実践的にプログラミングをしながら勉強するしかないでしょう。

さて、プロトコールってのは、OOP(オブジェクト指向プログラミング)の中核をなす3つの特徴、クラス、継承、ポリモーフィズムの中で、ポリモーフィズムを実現するための部品(道具?)として使う考え方だ妥当だと思う。

実は、継承とポリモーフィズムってのはどちらも似ているところがあるが、私なりに考えると、プログラミングの指向がトップダウンがボトムアップかという方向性にあると思う。

共通部分の核になるプログラムを抽出して、機能を追加して拡張していくのはトップダウンである、継承という特徴となる。これを実際のコードで説明する。playgoroundを使って以下のコードを書いてみよう。

import UIKit

class Talk {
func speak() -> String {
return "Speaking Ability"
}
}

/* 上に書いているTalkクラスが拡張されていく最初の基本構造となり上位に位置するクラスと考える。speak()というメソッドには何も機能が割り当てられていない。 */

class Yuji: Talk {
override func speak() -> String {
return "I'm Yuji Tai"
}
}

/* YujiクラスはTalkクラスを継承しているのでspeak()メソッドを拡張して独自の機能を割会えてることができている。*/

class Miyuki: Talk {
override func speak() -> String {
return "I'm Miyuki Tai"
}
func walk() -> String {
return "I'm walking"
}
}

/* MiyukiクラスもTalkクラスを継承してspeak()メソッドの拡張と独自のメソッドwalk()を追加している。*/

let yuji = Yuji()
yuji.speak()
yuji.walk()
// 当然のようにyujiインスタンスはYujiクラスから生成されているので、walk()メソッドが実装されていないのでwalk()はエラーになります。

let miyuki = Miyuki()
miyuki.speak()
miyuki.walk()
// miyukiインスタンスはTalkクラスを継承したMiyukiクラスのインスタンスなのでwalk()メソッドは使える。

/* とまあ、「継承」を説明する時によくありがちなサンプルコードを書いたけど、実はこのインスタンスの作り方だけを覚えていても不十分なんですよね。私も最初に勉強したとき、こういうインスタンスの作り方しか無いと思っていました。しかし、実は下のようなインスタンス生成法があるんですよね。

var talker:Talk
talker = Miyuki()
talker.speak() // "I'm Miyuki Tai"
talker.walk() // エラー!
/* 最初にスーパークラス(元のクラス)でインスタンス宣言をするんです。そして、それを子クラス(継承したクラス)で生成してやると、子クラスの拡張性とスーパークラスの制限を加えることができるんです! */

あ、申し訳ないちょっとずつだけど続きは明日...m(_ _)m


同じカテゴリー(Swiftで遊ぼう!)の記事画像
Swiftで遊ぼう! - プログラミングまとめ(ときどき更新)
Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明
Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect
Swiftで遊ぼう! - 208 - ルートビューのコード
Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ
Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる
同じカテゴリー(Swiftで遊ぼう!)の記事
 Swiftで遊ぼう! - プログラミングまとめ(ときどき更新) (2021-01-31 00:00)
 Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明 (2015-04-05 00:00)
 Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect (2015-02-06 00:00)
 Swiftで遊ぼう! - 208 - ルートビューのコード (2015-02-05 00:00)
 Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ (2015-02-04 00:00)
 Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる (2015-02-03 00:00)

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
Swiftで遊ぼう! - 133 - プロトコールとデリゲーション 1
    コメント(0)