nikkie-ftnextの日記

イベントレポートや読書メモを発信

読書ログ | 『A Philosophy of Software Design, 2nd Edition』4章「Modules Should Be Deep」システムの複雑さという観点から小さなクラスを問う

はじめに

人生初ライブ現地がAct-3でよかった〜! 最高だったよ〜!! にっPです(今日は仕掛け人モード)

ちょうぜつ本_読書pyで『A Philosophy of Software Design』が話題に挙がりました(後述するClassitis)。
存在は知っていて永遠の積ん読という存在だったのですが、待ってても邦訳は出なさそう1、英語自体は平易ということでエイヤッと4章だけ読みました。
読んで理解したことをバックアップします

目次

4章「Modules Should Be Deep」

ソフトウェアの複雑さ(complexity)を扱う(manageなので、なんとかする)テクニックを扱った章の1つです。
modular designというテクニックについてで、肝は「Modules Should Be Deep」

modules

modular design

  • 相対的に独立したモジュール群からソフトウェアシステムを構築する
  • モジュール間の依存を最小化する
    • 依存(dependency
      • 例:モジュールAはモジュールBの関数を呼び出す
      • =他のモジュールについて開発者が知っている必要がある部分

モジュールを2つの要素で考える

  • interface
    • モジュールが何をするか2
    • そのモジュールを使う開発者が知っている必要がある
  • implementation(実装)
    • モジュールがどのようなコードか

モジュールとは(例で列挙)

書籍での議論はクラスについてだが、高次のモジュールについても適用可能

deep

deepなモジュールとは、パワフルな機能を持ち、かつ、単純(simple)なinterfaceのモジュール

  • deep 縦に長い長方形
    • 縦に長い=十分な機能を提供
    • 一番上の辺が短い=単純なinterface
  • shallow 横に長い長方形

deepなモジュールの例

著者はdeepなモジュール(クラス)推しなので、「クラスは小さくあるべき」というアプローチに警鐘を鳴らしている

  • 個々の単純なクラス群を作ってしまう(Classitis
    • 末尾のitisは「症」とか「狂」という意味みたいです(ウィズダム英和辞典)
  • 小さなたくさんのクラスは、システム全体の複雑さを増加させるという主張

t-wadaさんによる解説

以下のスライドの理解が深まりました

fukabori.fmにもあるみたいです

終わりに

『A Philosophy of Software Design』4章でdeep modulesという概念を知りました。
これに関しては思うところもあるので、近日中にアウトプット予定です(ライブで源Pみたいに感情爆発してしまったので、1記事にまとめきれず🙏)


  1. 読書会で聞いた話ですが、原著者の意向によるものだそうです
  2. abstractionというトピックもありました
  3. interfaceにはformalなもの(シグネチャ)とinformalなもの(コメント)があると紹介されています