インターフェースと抽象クラス
インターフェースと抽象クラス
前者が外部向けの設計図、後者が内部向けの設計図と表現されることが多い。
Javaで使われる用語だが、rubyにもインターフェースやダックタイピング、ポリモーフィズム等通ずるところが多いため、学習する価値はあると思う。
【詳解】抽象クラスとインタフェースを使いこなそう!! - Qiita
インターフェース
CAN DOの関係あるといえる。
テレビcan 音量調節、テレビcan 電源消し付け
継承先に対して、定義したものの実装を強制することができる
「Inputする値とOutputされる値が同じ」という規約がインターフェース。と認識している。
このインターフェースを継承させて多態性を作っていくと、ダックタイピングにつながってくる。
<aside> 💡 中(具体的な処理)は意識せず、外(他のクラス)から見てテレビが出来ることを定義する感じ
</aside>
インターフェース名には、作成したいインスタンス群を抽象的にした概念名をつけて、そのインターフェースを継承したインスタンスに保持しておいてほしいメソッドを、空のまま定義しておく。
ex)
テレビ(インターフェース)薄型テレビ(インスタンス)、ブラウン管(インスタンス)
テレビに音量調節(メソッド)、電源消し付け(メソッド)、チャンネル切り替え(メソッド)といった空のメソッドを定義しておく。
抽象クラス
Is Aの関係にあると言える。
薄型テレビ is テレビ、ブラウン管 is テレビ
インターフェースと同様、継承先に対して、定義したものの実装を強制することができる。
継承されることを前提としてて作られているクラスなので、抽象クラスを直接インスタンス化させることはできない。
振る舞いの型(電源をオンオフする、音量調節する)を継承をし、具体的な処理を個性(属性、値)に合わせて上書き(オーバーライド)する。