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

ExcelVBAでの他のアプリの起動

2日続けてExcelVBA。 やはり細かく分けてすぐにプロシージャごとにテストできるのはものすごく大きなメリットですね。本日は別のアプリ起動と操作に関して。 自分がやったことはWordとメモを起動して …

no image

オブジェクト指向設計 ダックタイピング

オブジェクト指向シリーズ。ダックタイピング・・読む前は名前は聞いたことあるような気がする・・程度で細かいことは何一つわからない状態でした。今回具体的なコード例があった分イメージを何とかつかむことはでき …

no image

オブジェクト指向 データベース層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にデータベース層の考え方について。 Contents1 データべース層1.1 要点1.1.1 典型的なダメテーブル設計1.1 …

no image

メモリに関して 静的領域、スタック、ヒープなど

実務でメモリの調査をしましたが、肝心のメモリについてほとんどわかっていないのでメモ。 メモリの領域を大きく分けると静的、スタック、ヒープに別れる。 Contents1 静的2 スタック3 ヒープ4 そ …