高凝集性と低結合性
「良いプログラムを書く」には、プログラミング言語の歴史を辿れば、「高凝集性と低結合性」にたどり着くのではなかろうか?
下記の2個の記事を読むと、オブジェクト指向という概念よりも、モジュール分割の基準は何なのか、という根本問題が大事である気がする。
「オブジェクト指向はどうやって身につけるのか?」記事によれば、オブジェクト指向で設計するときに重要な概念は「可換」と「隠蔽」であり、下記の特徴がある、と述べている。
・インターフェイスはオブジェクトの「可換」を実現する手段であり、結合度が低くなる。
・委譲やカプセル化はオブジェクトの「隠蔽」を実現する手段であり、凝集度が高くなる。
「初心者を卒業した技術者のためのオブジェクト指向再入門」記事によると、結合度と凝集性は、一昔前の構造化プログラミングではすごく意識されていたらしい。
前者の記事は、オブジェクト指向が「高凝集性と低結合性」を実現する手段を自然に担っていることを示している。
後者の記事では、オブジェクト指向の世界では「高凝集性と低結合性」という言葉が出てこないからと言って見落としてはいけないことを述べている。
僕個人の経験では、結合性よりも凝集性の方が重要である気がする。オブジェクト指向設計で自然に現れる「責務」という概念は、クラスの機能が高凝集性を満たすこととほぼ等価だ。だが、凝集性を意識することは、分割する機能を意識することだから、難しいと思う。
凝集性を突き詰めると、結局、まとまった機能を持つエンティティをどのように見出し、実現させるか、に行き着く。
システムの情報をRDBに格納する限り、エンティティをオブジェクトでいくら実現しても、最終的にはエンティティはRDBに合うようにマッピングされなければならない。
結局、ORマッピングの問題に行き着いてしまうのではないだろうか?
| 固定リンク
「日記・コラム・つぶやき」カテゴリの記事
- TwitterやFacebookは人力キュレーションツールとして使う(2022.10.02)
- 「現代病「集中できない」を知力に変える 読む力 最新スキル大全」の感想(2022.08.28)
- 人類は海辺から生まれた~水生類人猿説が面白い(2022.08.09)
- 戦前の日本人の気質はまだ成熟していない青年期と同じだった(2022.06.14)
- 物理学を攻略するためのマップ(2022.04.18)
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
コメント