オブジェクト指向パラダイム
オブジェクト指向(OO)パラダイムは、新しいプログラミングアプローチの最初の概念から形作られましたが、設計および分析方法への関心はずっと後になりました。オブジェクト指向分析と設計のパラダイムは、オブジェクト指向プログラミング言語が広く採用された論理的な結果です。
最初のオブジェクト指向言語は Simula (実際のシステムのシミュレーション)1960年にノルウェーコンピューティングセンターの研究者によって開発されました。
1970年、 Alan Kay Xerox PARCの彼の研究グループは、 Dynabook そして最初の純粋なオブジェクト指向プログラミング言語(OOPL)-DynabookをプログラミングするためのSmalltalk。
1980年代には、 Grady Booch主にプログラミング言語であるAdaのデザインを紹介するObjectOrientedDesignというタイトルの論文を発表しました。その後の版では、彼はアイデアを完全なオブジェクト指向設計手法にまで拡張しました。
1990年代には、 Coad オブジェクト指向メソッドに行動のアイデアを取り入れました。
その他の重要な革新は、によるオブジェクトモデリング技法(OMT)でした。 James Rum Baugh およびオブジェクト指向ソフトウェアエンジニアリング(OOSE) Ivar Jacobson。
オブジェクト指向パラダイムの概要
オブジェクト指向パラダイムは、あらゆるソフトウェアを開発するための重要な方法論です。パイプとフィルター、データリポジトリ、コンポーネントベースなど、ほとんどのアーキテクチャスタイルまたはパターンは、このパラダイムを使用して実装できます。
オブジェクト指向システムの基本的な概念と用語-
オブジェクト
オブジェクトは、物理的または概念的な存在を持つ可能性のあるオブジェクト指向環境の実世界の要素です。各オブジェクトには-があります
システム内の他のオブジェクトからそれを区別するアイデンティティ。
オブジェクトの特性プロパティと、オブジェクトが保持するプロパティの値を決定する状態。
オブジェクトの状態の変化に関して、オブジェクトによって実行される外部から見えるアクティビティを表す動作。
オブジェクトは、アプリケーションのニーズに応じてモデル化できます。オブジェクトには、顧客や車などの物理的な存在が含まれる場合があります。または、プロジェクト、プロセスなどの無形の概念的存在。
クラス
クラスは、共通の動作を示す同じ特性を持つオブジェクトのコレクションを表します。ブループリントまたはそこから作成できるオブジェクトの説明を提供します。クラスのメンバーとしてのオブジェクトの作成は、インスタンス化と呼ばれます。したがって、オブジェクトはinstance クラスの。
クラスの構成要素は次のとおりです。
クラスからインスタンス化されるオブジェクトの属性のセット。一般に、クラスのオブジェクトが異なれば、属性の値にも多少の違いがあります。属性は、クラスデータと呼ばれることがよくあります。
クラスのオブジェクトの動作を表す一連の操作。操作は、関数またはメソッドとも呼ばれます。
Example
2次元空間で幾何学的図形の円を表す単純なクラスCircleを考えてみましょう。このクラスの属性は次のように識別できます-
- x座標、中心のx座標を示します
- y座標、中心のy座標を示します
- a、円の半径を示す
その操作のいくつかは次のように定義できます-
- findArea()、面積を計算するメソッド
- findCircumference()、円周を計算するメソッド
- scale()、半径を増減するメソッド
カプセル化
カプセル化は、クラス内で属性とメソッドの両方をバインドするプロセスです。カプセル化により、クラスの内部の詳細を外部から隠すことができます。これにより、クラスの要素は、クラスによって提供されるインターフェイスを介してのみ外部からアクセスできます。
ポリモーフィズム
ポリモーフィズムはもともとギリシャ語で、複数の形をとる能力を意味します。オブジェクト指向パラダイムでは、ポリモーフィズムは、操作対象のインスタンスに応じて、さまざまな方法で操作を使用することを意味します。ポリモーフィズムにより、内部構造が異なるオブジェクトに共通の外部インターフェイスを持たせることができます。継承を実装する場合、ポリモーフィズムは特に効果的です。
Example
それぞれがメソッドfindArea()を持つ2つのクラスCircleとSquareを考えてみましょう。クラス内のメソッドの名前と目的は同じですが、内部実装、つまり面積の計算手順はクラスごとに異なります。クラスCircleのオブジェクトがそのfindArea()メソッドを呼び出すと、操作はSquareクラスのfindArea()メソッドと競合することなく円の領域を検索します。
Relationships
システムを説明するには、システムの動的(動作)仕様と静的(論理)仕様の両方を提供する必要があります。動的仕様は、メッセージパッシングなどのオブジェクト間の関係を記述します。また、静的仕様は、集約、関連付け、継承など、クラス間の関係を記述します。
メッセージパッシング
どのアプリケーションでも、調和のとれた方法で相互作用する多数のオブジェクトが必要です。システム内のオブジェクトは、メッセージパッシングを使用して相互に通信できます。システムに2つのオブジェクト(obj1とobj2)があるとします。obj1がobj2にそのメソッドの1つを実行させたい場合、オブジェクトobj1はオブジェクトobj2にメッセージを送信します。
構成または集約
集約または構成は、クラス間の関係であり、これにより、クラスは他のクラスのオブジェクトの任意の組み合わせで構成できます。これにより、オブジェクトを他のクラスの本体内に直接配置できます。集約は「一部」または「持っている」関係と呼ばれ、全体からその一部にナビゲートする機能があります。集約オブジェクトは、1つ以上の他のオブジェクトで構成されるオブジェクトです。
協会
アソシエーションは、共通の構造と共通の動作を持つリンクのグループです。関連付けは、1つ以上のクラスのオブジェクト間の関係を表します。リンクは、関連付けのインスタンスとして定義できます。関連付けの程度は、接続に関係するクラスの数を示します。度は、単項、2進数、または3進数の場合があります。
- 単項関係は、同じクラスのオブジェクトを接続します。
- 二項関係は、2つのクラスのオブジェクトを接続します。
- 三項関係は、3つ以上のクラスのオブジェクトを接続します。
継承
これは、機能を拡張および改良することにより、既存のクラスから新しいクラスを作成できるようにするメカニズムです。既存のクラスは基本クラス/親クラス/スーパークラスと呼ばれ、新しいクラスは派生クラス/子クラス/サブクラスと呼ばれます。
サブクラスは、スーパークラスで許可されている場合に限り、スーパークラスの属性とメソッドを継承または派生させることができます。さらに、サブクラスは独自の属性とメソッドを追加したり、スーパークラスのメソッドを変更したりできます。継承は「is-a」関係を定義します。
Example
哺乳類のクラスから、人間、猫、犬、牛などの多くのクラスを導き出すことができます。人間、猫、犬、牛はすべて、哺乳類の独特の特徴を持っています。さらに、それぞれに固有の特性があります。牛は哺乳類であると言えます。
OO分析
ソフトウェア開発のオブジェクト指向分析フェーズでは、システム要件が決定され、クラスが識別され、クラス間の関係が確認されます。オブジェクト指向分析の目的は、アプリケーションドメインとシステムの特定の要件を理解することです。このフェーズの結果は、システムの論理構造と実現可能性の要件仕様と初期分析です。
オブジェクト指向分析のために互いに組み合わせて使用される3つの分析手法は、オブジェクトモデリング、動的モデリング、および機能モデリングです。
オブジェクトモデリング
オブジェクトモデリングは、オブジェクトの観点からソフトウェアシステムの静的構造を開発します。オブジェクト、オブジェクトをグループ化できるクラス、およびオブジェクト間の関係を識別します。また、各クラスを特徴付ける主な属性と操作も識別します。
オブジェクトモデリングのプロセスは、次の手順で視覚化できます。
- オブジェクトを識別し、クラスにグループ化します
- クラス間の関係を特定する
- ユーザーオブジェクトモデル図を作成する
- ユーザーオブジェクトの属性を定義する
- クラスで実行する必要のある操作を定義します
動的モデリング
システムの静的な動作を分析した後、時間と外部の変化に関するシステムの動作を調べる必要があります。これが動的モデリングの目的です。
動的モデリングは、「個々のオブジェクトが、他のオブジェクトによってトリガーされる内部イベント、または外界によってトリガーされる外部イベントのいずれかのイベントにどのように応答するかを記述する方法」として定義できます。
動的モデリングのプロセスは、次の手順で視覚化できます。
- 各オブジェクトの状態を特定する
- イベントを特定し、アクションの適用可能性を分析します
- 状態遷移図で構成される動的モデル図を作成します
- オブジェクト属性の観点から各状態を表現する
- 描画された状態遷移図を検証します
機能モデリング
機能モデリングは、オブジェクト指向分析の最後のコンポーネントです。機能モデルは、オブジェクト内で実行されるプロセスと、メソッド間を移動するときにデータがどのように変化するかを示します。これは、オブジェクトモデリングの操作の意味と動的モデリングのアクションを指定します。機能モデルは、従来の構造化分析のデータフロー図に対応しています。
機能モデリングのプロセスは、次の手順で視覚化できます。
- すべての入力と出力を特定する
- 機能依存性を示すデータフロー図を作成する
- 各機能の目的を述べる
- 制約を特定する
- 最適化基準を指定する
オブジェクト指向設計
分析フェーズの後、概念モデルは、オブジェクト指向設計(OOD)を使用してオブジェクト指向モデルにさらに発展します。OODでは、分析モデルのテクノロジに依存しない概念が実装クラスにマッピングされ、制約が識別され、インターフェイスが設計されて、ソリューションドメインのモデルが作成されます。オブジェクト指向設計の主な目的は、システムの構造アーキテクチャを開発することです。
オブジェクト指向設計の段階は、次のように識別できます。
- システムのコンテキストを定義する
- システムアーキテクチャの設計
- システム内のオブジェクトの識別
- 設計モデルの構築
- オブジェクトインターフェイスの仕様
オブジェクト指向設計は、概念設計と詳細設計の2つの段階に分けることができます。
Conceptual design
この段階では、システムの構築に必要なすべてのクラスが識別されます。さらに、各クラスには特定の責任が割り当てられています。クラス図はクラス間の関係を明確にするために使用され、相互作用図はイベントの流れを示すために使用されます。としても知られていますhigh-level design。
Detailed design
この段階では、属性と操作は、相互作用図に基づいて各クラスに割り当てられます。ステートマシン図は、設計の詳細を説明するために作成されています。としても知られていますlow-level design。
設計原則
以下は主要な設計原則です-
Principle of Decoupling
相互依存性の高いクラスのセットでシステムを維持することは困難です。1つのクラスを変更すると、他のクラスの更新がカスケードされる可能性があるためです。オブジェクト指向設計では、新しいクラスまたは継承を導入することで、密結合を排除できます。
Ensuring Cohesion
凝集クラスは、密接に関連する一連の機能を実行します。結束の欠如は、システム全体の動作には影響しませんが、クラスは無関係の機能を実行することを意味します。これにより、ソフトウェアの構造全体の管理、拡張、保守、および変更が困難になります。
Open-closed Principle
この原則によれば、システムは新しい要件を満たすために拡張できる必要があります。システム拡張の結果として、既存の実装とシステムのコードを変更しないでください。さらに、以下のガイドラインは、オープンクローズ原則で従う必要があります-
具象クラスごとに、個別のインターフェースと実装を維持する必要があります。
マルチスレッド環境では、属性をプライベートに保ちます。
グローバル変数とクラス変数の使用を最小限に抑えます。