見出し画像

プログラミングの基礎:凝集度で学ぶモジュール設計の原則

注釈:この記事はChatGPT 4.0とDALL·Eを使用して生成しています。


「クラス以前:モジュールによる再利用」というテーマは、プログラミングの歴史においてクラスやオブジェクト指向プログラミング(OOP)が一般的になる前の、コードの再利用手法に焦点を当てています。特に、「モジュール」という概念が中心です。ここでは、そのアプローチの基本と、アーキテクチャの観点からどのように機能するかについて説明します。

モジュールとは

モジュールとは、特定の機能を集めた独立したプログラムの部分で、関数、変数、データ構造などを内包します。モジュールは独立性が高く、他のプログラムの部分と緩やかに連結されることが多いです。これにより、特定の機能を他のプログラムでも容易に再利用できるようになります。

モジュールのアーキテクチャ的利点

  1. 独立性: モジュールは他のコードと独立しているため、変更が他の部分に影響を与えにくいです。これにより、メンテナンスやアップデートが容易になります。

  2. 再利用性: 効率的なコード再利用を促進します。一度作成したモジュールは、異なるプロジェクトで同様の機能が必要な場合に再利用することができます。

  3. テストの容易さ: 独立したモジュールは単体でテストが行いやすいです。モジュールごとにテストを行うことで、エラーの特定と修正がしやすくなります。

  4. 理解しやすさ: 小さく分割されたモジュールは、個々の機能が明確であるため、新しい開発者が理解しやすいです。

モジュールを使ったアーキテクチャの例

初期のプログラミング言語、例えばC言語では、ファイルを分割してモジュール化することが一般的でした。各ファイルには特定の関数やデータ定義が含まれ、これらのファイルはプログラム全体で再利用されることがあります。ヘッダーファイル(.h)と実装ファイル(.c)を使って、インターフェイスと実装を分離することができます。これにより、他の部分に影響を与えずに内部実装を変更することが可能です。

このアーキテクチャのアプローチは、クラスやオブジェクト指向よりも単純でありながら、大規模なソフトウェア開発においても十分に機能することが示されています。ただし、現代の多くの言語ではオブジェクト指向の概念が一般的であり、クラスとオブジェクトを使ってモジュール性、カプセル化、継承などをより洗練された形で実現しています。

アーキテクトがモージュル性を把握するために役立つメトリクス、凝集度、結合度、コナーセンスという、キーとなる3つの考えた方があります。そのうちの7つの凝集度を説明します。

凝集度はモジュール内部の要素間の関連の強さを示します。一般的には、凝集度が高いモジュールほど望ましいとされます。凝集度は主に7つのレベルに分類され、これらは下位レベルから上位レベルへと機能的に関連する強さが高まります。

  1. 偶発的凝集度(Coincidental Cohesion):

    • モジュール内の各要素が偶然一緒になったもので、関連性がほとんどまたは全くありません。このレベルの凝集度は、機能や目的が完全にランダムであり、保守性や理解が非常に困難です。

  2. 論理的凝集度(Logical Cohesion):

    • 関連する種類のタスクが一つのモジュールにまとめられていますが、これらのタスクは実行時には選択的にしか使用されません。例えば、異なる種類のレポートを生成する関数が一つのモジュールにまとめられる場合です。

  3. 時間的凝集度(Temporal Cohesion):

    • モジュール内の要素が特定の時間やイベントの期間中に実行される関数で構成されています。例えば、アプリケーションの起動時に必要な初期化関数群が一つのモジュールにまとめられる場合です。

  4. 手続き的凝集度(Procedural Cohesion):

    • モジュール内の要素が特定の順序で実行されるべき操作を行う場合に見られます。これらは一連のステップやプロセスの一部として機能しますが、それぞれのステップは別の操作を実行します。

  5. 通信的凝集度(Communicational Cohesion):

    • モジュールが同じデータを操作するための操作を行う場合にこのレベルの凝集度が見られます。たとえば、同一の入力データやデータ構造に対する異なる関数が一つのモジュールにまとめられている場合です。

  6. 逐次的凝集度(Sequential Cohesion):

    • モジュール内の一つの要素の出力が別の要素の入力として使用される場合です。この凝集度では、各部分が密接に連携して連続的な処理を形成します。

  7. 機能的凝集度(Functional Cohesion):

    • モジュール内のすべての要素が単一の明確なタスクまたは機能を遂行するために協力する場合です。これは凝集度の中で最も強い形であり、モジュールが一つのことを完全にかつ効率的に行うことを意味します。

これらの凝集度のレベルを理解し、適切に適用することで、ソフトウェアの設計と構造を改善し、その結果として保守や拡張がしやすい高品質なソフトウェアを開発することが可能になります。

いいなと思ったら応援しよう!

川村康弘(Yasuhiro Kawamura、Ted)@クラウド屋
おもしろきこともなき世を面白く 議論メシ4期生http://gironmeshi.net/ メンタリストDaiGo弟子 強みほがらかさと発散思考 外資系企業でインフラエンジニア