ホームページ  >  記事  >  オブジェクト指向プログラミングの 3 つの要素とは何ですか?

オブジェクト指向プログラミングの 3 つの要素とは何ですか?

烟雨青岚
烟雨青岚オリジナル
2020-07-10 10:28:3817021ブラウズ

オブジェクト指向プログラミングの 3 つの要素は、カプセル化、継承、ポリモーフィズムです。カプセル化とは、物事がクラスに抽象化され、外部インターフェイスを公開し、実装と内部データを隠すことを意味します。継承とは、既存のクラスのすべての機能を使用できることを意味します。ポリモーフィズムとは、親オブジェクトを 1 つ以上の子オブジェクトと等しく設定できることを意味します。 。

オブジェクト指向プログラミングの 3 つの要素とは何ですか?

#オブジェクト指向プログラミングの 3 つの要素は、カプセル化、継承、ポリモーフィズムです。

オブジェクト指向プログラミングの 5 つの基本要素オブジェクト指向プログラミングの原則: 単一責任の原則、オープンとクローズの原則、リスコフ置換の原則、依存関係逆転の原則、インターフェイス抽象化の原則

カプセル化

カプセル化とは、物事を抽象化することです。クラスと外部インターフェイスに実装および内部データを公開、非表示にします。

継承

オブジェクト指向プログラミング (OOP) 言語の主な機能の 1 つは「継承」です。継承とは、元のクラスを書き直すことなく、既存のクラスのすべての機能を使用して拡張できる機能を指します。

継承によって作成された新しいクラスは、「サブクラス」または「派生クラス」と呼ばれます。

継承されたクラスは、「基本クラス」、「親クラス」、または「スーパークラス」と呼ばれます。

相続のプロセスは、一般から特殊へのプロセスです。

継承を実現するには、「継承」と「合成」によって実現できます。

一部の OOP 言語では、サブクラスが複数の基本クラスを継承できます。ただし、一般に、サブクラスは基本クラスを 1 つだけ持つことができるため、多重継承を実現するには、マルチレベル継承を使用します。

継承の概念の実装方法には、実装継承、インターフェース継承、ビジュアル継承の 3 種類があります。

実装の継承とは、追加のコーディングなしで基本クラスのプロパティとメソッドを使用できる機能を指します。

インターフェイスの継承とは、プロパティとメソッドの名前のみを使用できるが、サブクラスも使用できる機能を指します。実装を提供する必要があります ;

ビジュアル継承とは、サブフォーム (クラス) が基本フォーム (クラス) の外観と実装コードを使用できる機能を指します。

継承の使用を検討する場合、2 つのクラス間の関係は「所属」関係である必要があることに注意してください。たとえば、Employee は個​​人であり、Manager も個人であるため、どちらのクラスも Person クラスを継承できます。ただし、脚は人ではないため、Leg クラスは person クラスを継承できません。

抽象クラスは、サブクラスによって作成される一般的なプロパティとメソッドのみを定義します。抽象クラスを作成するときは、クラスの代わりにキーワード インターフェイスを使用します。

OO 開発パラダイムは大まかに次のとおりです: オブジェクトの分割 → 抽象クラス → クラスを階層構造に編成 (継承と合成) → クラスとインスタンスを使用していくつかの段階を設計および実装します。

ポリモーフィズム

ポリモーフィズム (ポリモーフィズム) は、代入後に親オブジェクトを 1 つ以上の子オブジェクトと等しくなるように設定できる手法です。親オブジェクトは、現在割り当てられている子オブジェクトの特性に基づいて、さまざまな方法で動作できます。簡単に言うと、「サブクラス型のポインタを親クラス型のポインタに代入することが許可されている」という一文です。

ポリモーフィズムを実現するには、上書きとオーバーロードという 2 つの方法があります。

上書きとは、サブクラスが親クラスの仮想関数を再定義することを指します。

オーバーロードとは、同じ名前の関数が複数存在できるが、これらの関数のパラメーター リストが異なることを意味します (パラメーターの数が異なるか、パラメーターのタイプが異なるか、またはその両方が異なる可能性があります)。

実際、オーバーロードの概念は「オブジェクト指向プログラミング」には属しません。オーバーロードの実装は次のとおりです: コンパイラは、関数の異なるパラメーター リストに基づいて、同じ名前の関数の名前を変更します。そして、同じ名前を持つこれらの関数は、(少なくともコンパイラに関する限り) 異なる関数になります。

たとえば、同じ名前の 2 つの関数、function func(p:integer):integer; と function func(p:string):integer; があります。この場合、コンパイラによって変更される関数名は、int_func、str_func のようになります。

これら 2 つの関数の呼び出しはコンパイラ間で決定されており、静的です (静的であることに注意してください)。言い換えれば、それらのアドレスはコンパイル時にバインドされる (早期バインディング) ため、オーバーロードはポリモーフィズムとは何の関係もありません。ポリモーフィズムに本当に関係しているのは「カバレッジ」です。

サブクラスが親クラスの仮想関数を再定義すると、親クラス ポインターは、割り当てられたさまざまなサブクラス ポインターに従って、サブクラスに属する関数を動的に呼び出します (動的であることを忘れないでください)。関数呼び出しはコンパイル中に決定できません (呼び出されたサブクラスの仮想関数のアドレスは指定できません)。

したがって、このような関数のアドレスは実行時にバインドされます (遅延バインディング)。結論は、オーバーロードは単なる言語機能であり、ポリモーフィズムやオブジェクト指向とは何の関係もありません。 Bruce Eckel の言葉を引用すると、「バカにしないでください。遅延バインディングでなければ、ポリモーフィックではありません。」

それでは、ポリモーフィズムの役割は何でしょうか。カプセル化により実装の詳細が隠蔽され、コードがモジュール化されること、継承により既存のコード モジュール (クラス) が拡張されること、

その目的はコードの再利用であることがわかっています。ポリモーフィズムは、別の目的のインターフェイスの再利用を実現することです。ポリモーフィズムの機能は、クラスが継承および派生するときに、「ファミリー ツリー」内の任意のクラスのインスタンスの特定の属性を使用するときに、正しい呼び出しを保証することです。

関連知識の詳細については、PHP 中国語 Web サイト をご覧ください。 !

以上がオブジェクト指向プログラミングの 3 つの要素とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。