2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

インターフェースの抽象化について

Last updated at Posted at 2020-02-02

どうも、かまいたちの山内じゃない方のやまうちです。
現在進行系で『アジャイルソフトウェア開発の奥義』っていう本を読んでいます。
今まで読んでた本からステップアップした本を読もうと思ったわけですが、話しが難しい。。。(;・∀・)
ホントはこの本からなんか書こうと思ったんですが、どうも無理っぽいw

とはいえその中にあるSOLIDを読んでいたら、すこぶる刺激を受けました。
「プログラミングするなら抽象化するのが常識やん?」
こんな感じで。
そんなわけで、インターフェースによる抽象化をアウトプットしていきます。

Aボタンでパンチ

Untitled Diagram (5).png

こんな感じです。

これは使う側(Aボタン)から使われる側(パンチ)への依存が発生してます。
パンチ側から見ると誰かに呼ばれたらパンチするだけですが、Aボタン側から見るとボタンを押したらパンチしてほしいからですね。
パンチ側の気が変わって
「今日から俺、キックするわ」
こうなってしまっては、Aボタン側としてはボタンを押したらパンチして欲しいのにキックをしてしまうため非常に困ります。
ゴリゴリの依存です。

インターフェース登場

ではAボタンがパンチにゴリゴリ依存してしまっている状況を打破しましょう!
Untitled Diagram (4).png

パンチインターフェースがAボタンとパンチの間に入りました。
こうなることで、Aボタンとしてはパンチインターフェースを呼び出すことで、パンチをすることができるようになります。

インターフェースは、パンチが実装されていることを保証する役目もあります。
ですので、パンチを呼び出したのにキックをするということも発生しなくなります。
要するにAボタンとしては、パンチがどういう状態にあるかというのは全く気にする必要はなく、
ただインターフェースに「ボタン押したからパンチ呼び出して」。
こう告げるだけパンチが可能です。

依存するなら抽象に依存しよう!

もっとすごいパンチがしたい!

さて、なんかもっとすごいパンチがしたくなりました。
Untitled Diagram (3).png
今度はこんな設計。
すごいパンチが新しく加わりました。
すごいパンチは、パンチを継承してパンチインターフェースを実装しています。
あくまでAボタンは抽象であるインターフェースに依存しているので、パンチがふつうのパンチでもすごいパンチでも、はたまたヘナヘナパンチでも関係なく、AボタンはAボタンをポチッとするだけです。

これが抽象であるインターフェースに依存するメリットです。


簡単な例ですが、インターフェースによる抽象化はこんな感じです。
他にも設計思想がたくさんあって、全然勉強が追いつかないのですが、SOLIDだとかGoFのデザインパターンとか多分他にも色々あると思いますが、焦らず少しづつ学んで行きます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?