トレイトについて その4

ヒューマンリソシア 2016/1/19(火) 17:35 tweet15このエントリーをはてなブックマークに追加 印刷用
※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。また、編集部はこの内容について正確性を保証できません。

ヒューマンリソシア株式会社はコラム「トレイトについて その4」を公開しました。
前回は「多重継承怖い!」ってお話だったので。
今回は「でも多重継承便利!」というお話をしていきたいと思います。

個人的に実務で「欲しい!」と思うのが、情報の「読み書き」のインタフェースですね。
例えば、ある「情報の塊」のクラスがあるとして。
こんな風に書けると便利だなぁ、と思う事しきり、でございます。

class ファイルへの書き込みクラス {
}
class ファイルからの読み込みクラス {
}
//
class 情報の塊クラス extends ファイルへの書き込みクラス, ファイルからの読み込みクラス {
}

ぱっと見で「ファイルへの読み書きが出来るんだなぁ」というのもわかりますし、
例えば「書かせたくない」のであれば読み込みクラスだけ継承すればよいので、色々と扱いやすくなります。
一方で「ファイルアクセス」は、書き込みまたは読み込みクラスの1箇所にちゃんと集約されるので、
調査にしても追加にしてもセキュリティ対策にしてもログ仕込むにしても、比較的簡単に、かつ漏れなく、
修正や追加が可能になります。

別口で、ゲームですと例えば「シューティングゲーム」のクラスなんかは、多重継承が大変に
「欲しい」と感じる瞬間です。
画面に出てくるのは「自機本体」「敵機本体」「自機の弾」「敵機の弾」なのですが。
「自機の弾」は、「自機(味方である)」と同時に「弾」なので。
そうすると、「自機」と「弾」の2つのクラスを多重継承させるのが、一番自然に設計することができます。

さて…こんな「便利だけど困るんだけど便利」な多重継承ですが。
人間困ったら色々と考えるモノで…という流れで、traitが出てきました。

継承の話を改めて思い出しますと。71で「is-a」と「has-a」のお話をしたかと思いますが。
その「has-a」の関係の時にtraitがとても便利になります。

例えば「ファイルの読み書き」であれば。
「ファイルから読み込める」はhas-aの部品の一つ、「ファイルに書き込める」もhas-aの部品の一つとして考えると、
その2つは「クラスではなく、traitとして実装して」「情報の塊クラスからuseする」ことで、
これならPHPで(5.4.0以降ですが)実際に実装可能な設計になります。

この続きは以下をご覧ください
http://resocia.jp/column/4829/

この記事が役に立ったらシェア!
tweet15このエントリーをはてなブックマークに追加
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやアクセス解析のなどノウハウをゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く
  • 編集長コラムを一足先に読める
用語集 PHP
日本赤十字社 東日本大震災 義援金募集
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやアクセス解析のなどノウハウをゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く
  • 編集長コラムを一足先に読める

人気記事トップ10(過去7日間)

今日の用語

CSR
Corporate Social Responsibilityの略。 ... →用語集へ

連載/特集コーナーから探す

インフォメーション

Web担のメルマガを購読しませんか?
Web担の記事がコンパクトに毎週届くメールマガジン「Web担ウィークリー」は、10万人が読んでいる人気メルマガ。忙しいあなたの情報収集力をアップさせる強い味方で、お得な情報もいち早く入手できます。

Web担に広告を掲載しませんか?
購読者数10万人のメールマガジン広告をはじめとする広告サービスで、御社の認知向上やセミナー集客を強力にお手伝いいたします。

サイトマップ
RSSフィード


Web担を応援して支えてくださっている企業さま [各サービス/製品の紹介はこちらから]

GOLD SPONSOR
さくらインターネット株式会社株式会社KDDI ウェブコミュニケーションズ株式会社日本レジストリサービスオープンテキスト株式会社トランスコスモス株式会社株式会社ハイパーボックスDomain Keeper
SPONSOR
株式会社キノトロープ株式会社アイレップ株式会社ニューズ・ツー・ユーシックス・アパート株式会社ウェブアンテナ株式会社サイバーエージェント富士通株式会社Sitecore