OOPの一般化、特殊化、および依存関係の調査

OOP(オブジェクト指向プログラミング)は、アクションやロジックではなく、オブジェクトやデータを中心としたパラダイムです。OOPを使用する場合は、オブジェクトとその関係を特定することが不可欠です。

OOPでは、問題はいくつかのオブジェクトとそれらが互いにどのように関連しているかに分解されます。これはデータモデリングと呼ばれるプロセスです。オブジェクト間の基本的な関係には、関連付け、一般化、特殊化、集約、依存関係、および構成が含まれます。この記事では、概念を説明するために、C#のコード例を使用してOOPの依存関係と継承関係について説明します。

依存

依存関係とは、1つまたは複数のオブジェクトがその実装のために他のオブジェクトに依存している、2つ以上のオブジェクト間の関係です。これらのオブジェクトの1つが変更されると、他のオブジェクトが影響を受ける可能性があります。 2つ以上のオブジェクト間の依存関係は、破線の矢印を使用してUMLで示されます。言い換えると、2つ以上のオブジェクト間に依存関係が存在する場合、オブジェクトは、依存している他のオブジェクトについて知る必要があります。

BlogEntryクラスとViewクラスについて考えてみましょう。前者にはブログエントリに関連するすべての関連情報が含まれていますが、後者にはBlogEntryクラスから受信したデータをユーザーインターフェイスに表示することが含まれます。したがって、ViewクラスはBlogEntryクラスに依存して、ユーザーインターフェイスにコンテンツ(ブログエントリ)を表示します。したがって、ViewクラスとBlogEntryクラスの間には依存関係が存在します。依存関係は、破線の矢印を使用してUMLで表されます。

public class BlogEntry

    {

        //Members of the BlogEntry class

    }

public class View

    {

        //Members of the View class

    }

一般化と専門化

一般化は、2つ以上のサブクラスから本質的な特性(属性、プロパティ、メソッドを含む)を抽出し、それらを一般化された基本クラス(スーパークラスとも呼ばれる)内で結合する手法として定義できます。それどころか、特殊化は一般化の逆であり、既存の基本クラスからサブクラスを作成することによって「タイプオブ」関係を表すために使用されます。

継承は、1つ以上のクラス(基本クラスとも呼ばれます)を拡張するクラスの機能として定義されます。一般化関係に参加しているクラスは互いに緊密に結合されているため、一般化はクラス関係の最も強力な形式であることに注意してください。親クラスの内部の複雑さのほとんどは、子クラスに表示されます。

基本クラスまたは親クラスを拡張するクラスは、子クラスまたは派生クラスとも呼ばれます。継承または一般化されたクラスは、その基本クラスまたは親クラスを拡張または継承します。継承では、子クラスは、プライベートなものを除いて、基本クラスまたは親クラスのメソッドと属性を継承します。本質的に、基本クラスのプライベートメンバーは、それらが属するクラスに「単独で」属しているため、継承されません。したがって、一般化を利用する必要があるのは、実際には別のクラスのより特殊な形式であるクラスを表す必要がある場合のみです。

継承には次のタイプがあります。

  • シングル
  • 複数
  • マルチレベル
  • 階層的
  • ハイブリッド

単一継承は、あるクラスが別のクラスを拡張する最も単純な形式の継承です。次のコードスニペットは、この形式の継承を示しています。BlogAuthorクラスがAuthorクラスを拡張する方法に注意してください。

public class Author

    {

        //Members of the Author class

    }

public class BlogAuthor : Author

    {

        //Members of the BlogAuthor class

    }

多重継承では、クラスの派生元となる複数の基本クラスがあります。JavaやC#などのOOPプログラミング言語では、多重継承はサポートされていないことに注意してください。

リストの次のタイプの継承は、マルチレベルの継承です。この形式の継承では、クラスを相互に継承してチェーンを形成します。次のコードスニペットはこれを示しています。

public class Person

    {

        //Members of the Person class

    }

public class Author : Person

    {

        //Members of the Author class

    }

public class BlogAuthor : Author

    {

        //Members of the BlogAuthor class

    }

階層継承には、家系図のように、継承を通じて階層構造を表すクラスがあります。このタイプの継承では、同じ基本クラスまたは親クラスを持つ複数の子クラスがあります。言い換えると、これは、1つ以上の派生クラスが共通のベースクラスまたは親クラスを持つタイプの継承です。

ハイブリッド継承は、2つ以上の形式の継承が1つに結合されるタイプの継承です。基本的に、このタイプの継承は、2つ以上の形式の継承を組み合わせて、閉じた構造を形成します。ハイブリッド継承は、C#やJavaなどのオブジェクト指向プログラミング言語でもサポートされていないことに注意してください。