【基礎講座】インターフェースって何!?|継承との違いとその使い方

Kazu
Kazu
こんにちは。多言語(13言語&プログラミング大好き)&塾経営者&Apple信者のKazu(@kaz_620)です。

インターフェースって初心者の頃だと、
使い方がわからずどうしたらよいのかわからないですよね・・
私もそうでした。

ですが、オブジェクト指向を実践するためには、必要不可欠な機能です。

今回の記事では、そのような困った人を助けるために、インターフェースの使い方、継承との違いを具体的な例を交えながらお伝えしていきます。

Kazu
Kazu
最初は全く使い方も使い道もわかりませんでしたが、わかるようになりました。

機能が実装されていることの保証されている

まず結論からいいますと、

インターフェースを実装しているクラスは、▲ ▲の機能をもっているよ!ということを保証していることを意味しています。

例えば、充電というインターフェースを持っている電話クラスは、充電ができるという機能が約束されてます。

電話クラスには充電ができる電話クラスとできないクラスが混在していて、
充電インターフェースを持っていると必ずその電話クラスは充電の能力を持っているよ〜!ということがわかります。

一眼で見てわかるようになるんだね!
ブタトン
ブタトン
Kazu
Kazu
見た目としてはそうだね!コードを書く上でさらに便利になることがありますよ

インターフェースによってプログラムの変更がしやすくなる

Kazu
Kazu
コードを見ながら便利な面を考えていきますね。


インターフェースがある場合、
下記コードのようにCellphponeを実装したクラスはrechargeableのメンバーがあることが前提です。

そのため、Smartphoneクラスを改良する場合、Cellphoneのことを考えずに、smartphone部分のみの改良に専念することができます。

interface Cellphone{
    rechargeable: string
}
class Smartphone implements Cellphone
      rechargeable:string;
}

インターフェースによる疎結合の実現

Kazu
Kazu
これまで見てきたことから疎結合の実現がインターフェースを使うメリットと言えますよ!
なるほど!でもそもそも疎結合がわからないので説明して欲しい〜
ブタトン
ブタトン

疎結合ってなんだ?と思われる方も多いと思うので、、対概念である密結合との違いからお伝えします。こちらの記事で説明をしているので、ご確認ください。
 【基礎講座】疎結合と密結合なコードの違いとは?【基礎講座】疎結合と密結合なコードの違いとは?続きはこちら


なぜ疎結合が良いのか??
型の構造を事前に最低限これが欲しいということを設計の段階で規定することで、エラーをなくすことができるからです。

インターフェースのメリットがあまりない場合

インターフェースって初学者にとってよくわからないな・・と思われる場合がもちろんあります。
多くの場合、初学者が勉強しているようなシチュエーションがあてはまるでしょう。

一人で開発するアプリケーション

一人で開発する場合は、多くの場合そこまで大規模にならずどこに何があるのかがわかるためわざわざインターフェースを作って設計をして・・・と考えるとあまりメリットがないかもしれません。

一度作って終わるアプリケーション

インターフェースのメリットの大部分は、変更のしやすさにあるため、変更の可能性がないアプリケーションで実装してもメリットは得づらいでしょう。

コードを交えて説明!インターフェースのコンセントの例

ネットでインターフェースの実例としてよく使われるコンセントの例をコードを交えて、説明します。

まずは充電というコンセントインターフェースを作成します。
日本のコンセントと考えているので、ここでは定数として穴を2と置いています。
また、充電ができるというメソッドを定義することで、
どの家電であっても穴が二つあ流コンセントに対応できて、充電ができることが前提になったコンセントを持っています。

interface Outlet
{
    public function recharge();
    const holes = 2;
}

public class Cellphone implements Outlet{
	public function recharge(
		充電処理を記述
		);
}

public class TV implements Outlet{
	public function recharge(
		充電処理を記述
		);
}

public class Cleaner implements Outlet{
	public function recharge(
		充電処理を記述
		);
}

インターフェースと継承との違い

クラスの継承は、
実装されている全ての機能をそのまま受け継ぎます。一方インターフェースの場合は、同じ構造,要素を引き継ぎます。

上記の説明だけだと、わかりづらいので、iphoneを具体例にして考えてみましょう。
iphoneは毎年少しづつ機能を足しながら、新しいシリーズを出していますね。シリーズが変わろうとiphoneはiphoneですので、これは継承と言えるでしょう。
ですが、smartphoneをインターフェースとして考えると、Galaxy、Xperia、pixelといった別のスマートフォンも含むことができるのです。

このsmartphoneのインターフェースには、
電話ができる、音楽がきける、 ネットが見れる、アプリケーションで拡張ができる

といった基本的な骨格があり、そこから具体的な部分はそれぞれのsmartphoneでオリジナリティを出しているのです。

インターフェースをさらに理解するために

インターフェースって初学者の時だとメリットがなかなか理解しづらいですが、本記事が理解の助けになれば幸いです。

頑張って保守するのではなく、保守しづらいコードを書くということを目指しましょう。

この教材は、個人開発から大規模開発を変わって移る際に役立つことがたくさん載っています。何か一冊本を買うのであればこの本がおすすめです。

上記本を読んだ上で自分のコードが疎結合になっているのかどうかを確認したいのであれば、MENTA といったメンタリングをしてもらえるサービスでコードレビューをしてもらうと良いでしょう。私もつかったことありますが、他のプログラミング教室に通うよりも格安で、結構教育熱心な人もいるので一度やってみてもよいと思います。

コメントを残す