Software-engineering-software-design-strategies

提供:Dev Guides
移動先:案内検索

ソフトウェア設計戦略

ソフトウェア設計は、ソフトウェア要件をソフトウェア実装に概念化するプロセスです。 ソフトウェア設計では、ユーザーの要件を課題とし、最適なソリューションを見つけようとします。 ソフトウェアが概念化されている間、意図されたソリューションを実装するための最良の設計を見つけるための計画がチョークアウトされます。

ソフトウェア設計には複数のバリエーションがあります。 簡単に調べてみましょう。

構造化設計

構造化設計は、問題をいくつかのよく組織化されたソリューション要素に概念化したものです。 基本的にはソリューションの設計に関係しています。 構造化設計の利点は、問題の解決方法をよりよく理解できることです。 また、構造化された設計により、設計者はより正確に問題に集中できます。

構造化設計は、主に「分割統治」戦略に基づいており、問題はいくつかの小さな問題に分割され、各小さな問題は問題全体が解決されるまで個別に解決されます。

問題の小さな部分は、ソリューションモジュールによって解決されます。 構造化設計では、正確なソリューションを実現するために、これらのモジュールが適切に編成されていることが強調されています。

これらのモジュールは階層構造になっています。 彼らは互いに通信します。 優れた構造設計は、常に複数のモジュール間の通信に関するいくつかのルールに従います。

*Cohesion* -機能的に関連するすべての要素のグループ化。

カップリング-異なるモジュール間の通信。

優れた構造設計には、高い凝集力と低い結合配置があります。

機能指向設計

機能指向設計では、システムは機能として知られる多くの小さなサブシステムで構成されます。 これらの機能は、システムで重要なタスクを実行できます。 システムは、すべての機能のトップビューと見なされます。

機能指向設計は、分割統治法が使用される構造化設計のいくつかのプロパティを継承します。

この設計メカニズムは、システム全体をより小さな機能に分割し、情報とその操作を隠すことにより抽象化の手段を提供します。 これらの機能モジュールは、グローバルに利用可能な情報の受け渡しと使用により、相互に情報を共有できます。

関数の別の特徴は、プログラムが関数を呼び出すと、その関数がプログラムの状態を変更することです。これは、他のモジュールでは受け入れられない場合があります。 機能指向設計は、システムの状態が重要でなく、プログラム/機能が状態ではなく入力で機能する場合にうまく機能します。

設計プロセス

  • システム全体は、データフロー図によってシステム内でデータがどのように流れるかと見なされます。
  • DFDは、機能がシステム全体のデータと状態をどのように変更するかを示します。
  • システム全体は、システム内での操作に基づいて、論理的に機能と呼ばれる小さな単位に分割されます。
  • 次に、各機能の概要を説明します。

オブジェクト指向設計

オブジェクト指向設計は、ソフトウェアシステムに関係する機能ではなく、エンティティとその特性を中心に機能します。 この設計戦略は、エンティティとその特性に焦点を当てています。 ソフトウェアソリューションの概念全体は、関与するエンティティを中心に展開します。

オブジェクト指向設計の重要な概念を見てみましょう。

  • *オブジェクト-*ソリューション設計に関係するすべてのエンティティはオブジェクトと呼ばれます。 たとえば、人、銀行、会社、顧客はオブジェクトとして扱われます。 すべてのエンティティには、いくつかの属性が関連付けられており、属性に対して実行するメソッドがいくつかあります。
  • *クラス-*クラスは、オブジェクトの一般化された説明です。 オブジェクトはクラスのインスタンスです。 クラスは、オブジェクトが持つことができるすべての属性と、オブジェクトの機能を定義するメソッドを定義します。 +ソリューション設計では、属性は変数として保存され、機能はメソッドまたはプロシージャによって定義されます。
  • カプセル化- OODでは、属性(データ変数)とメソッド(データに対する操作)が一緒にバンドルされ、カプセル化と呼ばれます。 カプセル化は、オブジェクトの重要な情報をまとめるだけでなく、外部からのデータとメソッドへのアクセスを制限します。 これは情報隠蔽と呼ばれます。
  • 継承- OODを使用すると、同様のクラスを階層的に積み重ねることができ、下位クラスまたはサブクラスは、許可された変数とメソッドを直接のスーパークラスからインポート、実装、再利用できます。 OODのこのプロパティは、継承と呼ばれます。 これにより、特定のクラスを簡単に定義し、特定のクラスから一般化されたクラスを作成できます。
  • 多態性- OOD言語は、同様のタスクを実行するが引数が異なるメソッドに同じ名前を割り当てることができるメカニズムを提供します。 これはポリモーフィズムと呼ばれ、単一のインターフェイスでさまざまなタイプのタスクを実行できます。 関数の起動方法に応じて、コードの各部分が実行されます。

設計プロセス

ソフトウェア設計プロセスは、一連の明確に定義されたステップとして捉えることができます。 デザインアプローチ(関数指向またはオブジェクト指向)によって異なりますが、次の手順が含まれる場合があります。

  • ソリューション設計は、要件または以前に使用されたシステムやシステムシーケンス図から作成されます。
  • オブジェクトは、属性特性の類似性のために識別され、クラスにグループ化されます。
  • クラス階層とそれらの間の関係が定義されます。
  • アプリケーションフレームワークが定義されます。

ソフトウェア設計アプローチ

ソフトウェア設計のための2つの一般的なアプローチを次に示します。

トップダウンデザイン

システムは複数のサブシステムで構成され、多くのコンポーネントが含まれていることがわかっています。 さらに、これらのサブシステムとコンポーネントは、サブシステムとコンポーネントのセットを持ち、システム内に階層構造を作成します。

トップダウン設計では、ソフトウェアシステム全体を1つのエンティティとして扱い、それを分解して、いくつかの特性に基づいて複数のサブシステムまたはコンポーネントを実現します。 各サブシステムまたはコンポーネントは、システムとして扱われ、さらに分解されます。 このプロセスは、トップダウン階層でシステムの最低レベルが達成されるまで実行され続けます。

トップダウン設計は、システムの一般化されたモデルから始まり、システムのより具体的な部分を定義し続けます。 すべてのコンポーネントが構成されると、システム全体が存在します。

トップダウン設計は、ソフトウェアソリューションをゼロから設計する必要があり、具体的な詳細が不明な場合に適しています。

ボトムアップ設計

ボトムアップ設計モデルは、最も具体的で基本的なコンポーネントから始まります。 基本または低レベルのコンポーネントを使用して、より高いレベルのコンポーネントを構成します。 目的のシステムが単一のコンポーネントとして進化しない限り、より高いレベルのコンポーネントを作成し続けます。 各レベルが高くなると、抽象化の量が増加します。

ボトムアップ戦略は、新しいシステムで基本的なプリミティブを使用できる既存のシステムからシステムを作成する必要がある場合に適しています。

トップダウンとボトムアップの両方のアプローチは、個別に実用的ではありません。 代わりに、両方の適切な組み合わせが使用されます。