この記事は、12月22日都内某所で行われた、IT学習の継続を目的とした勉強会
(通称:コミット会)のレポートです。
参加者と発表内容
- YUUKI
- PHP Traitの概要
- Moby
- AWS CloudFormationを用いたインフラのコード化
YUUKI 発表内容の目次
- オブジェクト指向のおさらい
- ポリモーフィズム
- Trait
オブジェクト指向のおさらい
以下のような階層式の考え方でプログラミングを行うのがオブジェクト指向プログラミング
- クラス
- プロパティ
- メソッド
- インスタンス
例として、自分の部屋をクラスに見立てると、オブジェクト指向プログラミングではまずMyRoomクラスを定義する。
部屋の中に時計やハンガー、服などがあれば、それらをwearプロパティ、clockプロパティ、hangerプロパティとして定義し、それらを動かす処理をメソッドに書く。
しかし、クラスは設計図であるため、プロパティやメソッドを定義しただけでは、時計やハンガーや服は動かすことが出来ない。実際に動作させるには、クラス(設計図)をインスタンス化(実体化)し、実際に使えるようにする。
オブジェクト指向のメリットは、一つクラスを作ってしまえば、新しい機能が追加された時に一から設計しなくても済むということ。例えば、MyRoomクラスという部屋の中に、新しくPCを追加したい場合、PCプロパティを追加するだけで済む。
ポリモーフィズム
日本語でいうと多態性。
ざっくり言うと、複数の同じ名前のメソッドが別々の挙動をすることであり、それには親クラス子クラスの継承概念だけでなく、「インターフェイス」というメソッドや定数を「定義」することのみ可能な物を用いる。
インターフェイスに書かれたメソッドは、クラスで必ず実装しなければならない。
これを、インターフェイスに書かれた機能を「実装する」と言う。
また、インターフェイスを実装したクラスのことを、「実装クラス」と呼ぶ。
インターフェイスとクラスの関係性の問題は、必ず実装しなければいけないという点。他の開発者がプロジェクトに参画した場合でも、インターフェイスで定義されたメソッドを必ず実装しなければならない。無駄な実装クラスが増える可能性がある。
Trait
インターフェイスとクラスの関係性のデメリットを払拭するのがTraitである。TraitはPHP以外のJavaなどの静的型付け言語にも同じ機能がある(らしい)
Traitはインターフェイスの機能を受け継ぎ、処理を書くことが出来る。
その実装されたTraitは、クラスで自由に呼び出すことが出来る。
Traitのメリットは、インターフェイスに定義されたメソッドを、Traitでまとめて処理を書ける点であり、その実装したTraitをクラスで好きに呼び出すことで、無駄な実装クラスを増やすデメリットを払拭できる。
参考にした本
質問/意見
- Moby(質問)
- Traitという機能は他の言語にもある?
- YUUKI(回答)
- Javaにもあるらしい
- ただ、数ある言語の中でもPHPではTraitはよく知られている
- 理由は、PHPは最近のバージョンアップで型指定などが出来るようになったことやオブジェクト指向型言語として整ってきたことにより、緩く/堅く書ける言語の橋渡し役としてTraitを利用するメリットが大きいから
- PHPが多重継承ができないことも関係している
- YUUKI(回答)
- 最近TypeScriptを書いていて、TypeScriptはJavaScriptに型指定を強く意識したもので、クラスやメソッドの定義時に型指定をすることから、今日聞いたクラスやメソッドなどオブジェクト指向の話には共感した
- YUUKI(回答)
- 静的型付け言語と動的型付け言語とは?
- YUUKI(回答)
- こちらの図がわかりやすいhttps://qiita.com/kaitaku/items/148d1491596a58b9c97d
- Traitという機能は他の言語にもある?
コメント