skillup

技術ブログ

プログラミング全般

オブジェクト指向設計 柔軟なインターフェイス

投稿日:

オブジェクト指向シリーズ。今回はインターフェイスについて。

インターフェイスといっても、implementsを使った実装だけではなく、要はあるクラスが外部の窓口となるときに使うメソッドってことだと思う。

柔軟なインターフェイス

メモ

  • インターフェイス(正確にはパブリックインターフェイス)により内部構造を隠蔽する(p90の厨房の例はわかりやすすぎ)のが基本。
  • パブリックインターフェイスはクラスの責任を明確に述べる契約書
  • シーケンス図を書いて、「どのように」を伝えるのではなく「何を」頼むか。
  • 内部のクラスにはあえてタッチせず(これに関しては「どのように」に属する)、あくまでインとアウトだけを考える(これが「何を」に当たる)
  • 内部のクラスが保持しているクラスのさらにメソッド・・みたいな書き方をしない
  • なるべく内部を公開しない。インターフェイスが契約書であり、

実際のコーディング上のコツ

  • 引数に関しては不変なものを変数でとり、オプションの引数としてハッシュをとる。
  • チェーン的なドットは1つまで(Aに依存しているBに依存しているCというものを使ってはダメ)にしてなるべく依存度を下げる。3~4つのようなチェーンメソッドは依存度を上げ、変更が難しくなる。デルメルの法則(P114)

感想

この章はコードがない分抽象的な例が多くてなかなか難しかった・・。

ポイントとしては内部構造にできるだけ、後悔しない=依存しないようにするってことだと思う。入口(インターフェイス)のところで主要となる引数と戻り値を決めたら内部構造はなるべく隠蔽するスタイルをとるようにする。ドットは1つまでというのはチェーン的なメソッドを前提とするとクラスの関連性が深くなってしまい、密結合になってしまうため。

自分自身、このスタイルのコーディングを練習しているけど、1クラスを単一責任にするとpublicなクラス(外部から呼ばれる)は非常に少なくなり、あとは内部の中だけで呼ばれるものが非常に多くなる。このスタイルを目指すべし。また内部で外部のクラスを使うときは依存度が高くならないように(クラスのクラスなど)注意。

参考リンク

デルメルの法則
http://ruby-rails.hatenadiary.com/entry/20150922/1442923521

-プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

オブジェクト指向 アプリケーション層に関して

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にアプリケーション層(以下AP層)。MVCモデルでいうところのコントローラーに近い?)の考え方について。 Contents1 …

no image

CIことはじめ

業務でJavaのテキスト変換ツールを作成。 プログラムよりもCIツールを使って他人の環境下で正常に稼動させるためにどうするかの調査に時間かかりましたね。 今回やりたかったことは下記の通りです。いわゆる …

no image

オブジェクト指向について その3

今回は場合分けによる変更コストとオブジェクト指向のメリットについてです。 例えば給付金が発生して、その金額を死亡時、退職時、通常時で場合分けするとき、if-elseで書けば下記のようになります。 [c …

no image

ポート解放

新サーバー構築をしていたときにwebサーバーとしてnginxを立てましたが、外部から接続ができません。 500エラーすら吐かれず、ログも残っていません。 こんな時はホスト自体にアクセスが届いていない可 …

no image

ミスを少なくする工夫について

プログラマであればだれもが「いかにバグを少なくするか」に腐心すると思います。 ところが、人間がある以上、バグ(ミス)は絶対にゼロにはなりません。バグ云々以前に、「人間はもともとミスをする生き物だ」とい …