OOAD-オブジェクト指向の原則
オブジェクト指向システムの原理
オブジェクト指向システムの概念フレームワークは、オブジェクトモデルに基づいています。オブジェクト指向システムの要素には2つのカテゴリがあります-
Major Elements−メジャーとは、モデルにこれらの要素のいずれも含まれていない場合、オブジェクト指向ではなくなることを意味します。4つの主要な要素は次のとおりです。
- Abstraction
- Encapsulation
- Modularity
- Hierarchy
Minor Elements−マイナーとは、これらの要素が有用であるが、オブジェクトモデルの必須部分ではないことを意味します。3つのマイナーな要素は次のとおりです。
- Typing
- Concurrency
- Persistence
抽象化
抽象化とは、OOPの要素またはオブジェクトの本質的な機能に焦点を当て、その無関係または偶発的な特性を無視することを意味します。重要な機能は、オブジェクトが使用されているコンテキストに関連しています。
Grady Boochは、抽象化を次のように定義しています。
「抽象化とは、他のすべての種類のオブジェクトと区別するオブジェクトの本質的な特性を示し、したがって、視聴者の視点に対して、明確に定義された概念的な境界を提供します。」
Example −クラスStudentが設計されると、属性enrolment_number、name、course、addressが含まれますが、pulse_rateやsize_of_shoeなどの特性は、教育機関の観点からは無関係であるため、削除されます。
カプセル化
カプセル化は、クラス内で属性とメソッドの両方をバインドするプロセスです。カプセル化により、クラスの内部の詳細を外部から隠すことができます。クラスには、クラスによって提供されるサービスを使用できるユーザーインターフェイスを提供するメソッドがあります。
モジュール性
モジュール性は、問題(プログラム)をモジュールのセットに分解して、問題の全体的な複雑さを軽減するプロセスです。Boochは、モジュール性を次のように定義しています。
「モジュール性は、まとまりのある疎結合モジュールのセットに分解されたシステムの特性です。」
モジュール性は本質的にカプセル化と関連しています。モジュール性は、カプセル化された抽象化を、モジュール内の凝集性が高く、モジュール間の相互作用または結合が低い実際の物理モジュールにマッピングする方法として視覚化できます。
階層
Grady Boochの言葉では、「階層は抽象化のランク付けまたは順序付けです」。階層を通じて、システムは相互に関連するサブシステムで構成できます。サブシステムは、最小レベルのコンポーネントに到達するまで、独自のサブシステムなどを持つことができます。それは「分割統治」の原則を使用しています。階層により、コードの再利用が可能になります。
OOAの2つのタイプの階層は次のとおりです。
“IS–A” hierarchy−継承における階層関係を定義します。これにより、スーパークラスから、サブクラスなどを持つ可能性のあるいくつかのサブクラスが派生する可能性があります。たとえば、クラスFlowerからクラスRoseを派生させる場合、バラは「is–a」の花であると言えます。
“PART–OF” hierarchy−クラスが他のクラスで構成される可能性のある集約の階層関係を定義します。たとえば、花はがく片、花びら、雄しべ、および心皮で構成されています。花びらは花の「一部」であると言えます。
タイピング
抽象データ型の理論によれば、型は要素のセットの特性です。OOPでは、クラスは他のタイプとは異なるプロパティを持つタイプとして視覚化されます。入力とは、オブジェクトが単一のクラスまたはタイプのインスタンスであるという概念を強制することです。また、異なるタイプのオブジェクトは一般的に交換できないことを強制します。どうしても必要な場合にのみ、非常に制限された方法で交換できます。
タイピングの2つのタイプは次のとおりです。
Strong Typing −ここでは、プログラミング言語Eiffelと同様に、コンパイル時にオブジェクトの動作がチェックされます。
Weak Typing−ここでは、メッセージはどのクラスにも送信できます。プログラミング言語Smalltalkのように、動作は実行時にのみチェックされます。
並行性
オペレーティングシステムの同時実行性により、複数のタスクまたはプロセスを同時に実行できます。システム内に単一のプロセスが存在する場合、単一の制御スレッドがあると言われます。ただし、ほとんどのシステムには複数のスレッドがあり、一部はアクティブ、一部はCPUを待機、一部は一時停止、一部は終了しています。複数のCPUを搭載したシステムでは、本質的に同時制御スレッドが許可されます。ただし、単一のCPUで実行されているシステムは、適切なアルゴリズムを使用して、同時実行を可能にするためにスレッドに公平なCPU時間を与えます。
オブジェクト指向環境では、アクティブなオブジェクトと非アクティブなオブジェクトがあります。アクティブオブジェクトには、他のオブジェクトのスレッドと同時に実行できる独立した制御スレッドがあります。アクティブオブジェクトは、純粋にシーケンシャルなオブジェクトと同様に、相互に同期します。
永続性
オブジェクトはメモリ空間を占有し、特定の期間存在します。従来のプログラミングでは、オブジェクトの寿命は通常、オブジェクトを作成したプログラムの実行の寿命でした。ファイルまたはデータベースでは、オブジェクトの寿命は、オブジェクトを作成するプロセスの期間よりも長くなります。作成者が存在しなくなった後もオブジェクトが存在し続けるこのプロパティは、永続性と呼ばれます。