ホームページ  >  記事  >  バックエンド開発  >  PHPオブジェクト指向(インターフェース)の基本概念と抽象クラス例の紹介

PHPオブジェクト指向(インターフェース)の基本概念と抽象クラス例の紹介

伊谢尔伦
伊谢尔伦オリジナル
2017-07-08 09:16:021102ブラウズ

インターフェイスとは何ですか?

インターフェイスはメソッドの抽象化です。異なるクラスが同じメソッドを持つ場合は、インターフェイスの使用を検討する必要があります。
(1) インターフェースは動作仕様およびプロトコルです。実際には、これはクラス間の合意と制約です。 (2) C# は多重継承をサポートしていませんが、この機能は実装のためにインターフェイスに任せられています。
(3) クラス間でシステムリソースの呼び出し方法が異なるため、クラス間の通信が困難になりますが、インターフェースを使用することでクラス間の違いをシールドし、スムーズな通信を可能にします。

(4) 特定のクラスが実装する必要があるメソッドを指定できますが、これらのメソッドの具体的な内容を定義する必要はありません。


抽象クラス(abstractclass)とは何ですか?

1.抽象クラスは、型の部分的な実装のみを提供します。抽象クラスには、インスタンス変数だけでなく、1 つ以上の

コンストラクター を含めることができます。抽象クラスには、抽象メソッドと具象メソッドの両方を含めることができます。抽象クラスにはインスタンスがなく、クライアントがこれらのコンストラクターを呼び出してインスタンスを作成することはできません。抽象クラスのコンストラクターはそのサブクラスから呼び出すことができるため、抽象クラスのすべてのサブクラスはいくつかの共通の実装を持つことができ、異なるサブクラスはこれに基づいて独自の実装を持つことができます。

2.抽象クラスの目的 1) 具象クラスは継承には使用されません。 Scott Meyers はかつて、可能な限り具象クラスからの継承を避けるべきだと指摘しました。 2) 2 つの具象クラス、クラス A とクラス B があるとします。クラス B はクラス A のサブクラスです。その場合、最も簡単な変更ソリューションの 1 つは、抽象クラス (または Java インターフェイス) C を作成し、クラス A とクラス B を作成することです。クラス B は抽象クラス C のサブクラスになります。 3) 抽象クラスには、できるだけ多くの共通コードが必要です。コードの再利用率を向上させるため。 4) 抽象クラスには、できるだけ少ないデータを含める必要があります。

3.抽象クラスに基づくパターンと原則 1) 特定のプログラミングではなく、抽象化のためのプログラム。 2) 再利用を実現するために、継承の代わりに合成 (Com

position) を使用してみてください。 3) テンプレートメソッドを使用します

4.継承と再利用はどのような場合に使用する必要がありますか? 1) サブクラスはスーパークラスの役割ではなく、スーパークラスの特別なカテゴリです。つまり、「is-a」と「has-a」という 2 つの関係を区別する必要があります。 2) サブクラスを別のサブクラスに置き換える必要がある状況は決してありません。設計者が、あるクラスが将来別のクラスのサブクラスにならないかどうか確信が持てない場合は、そのクラスをスーパークラスのサブクラスになるように設計すべきではありません。 3) サブクラスはスーパークラスを拡張する責任がありますが、スーパークラスを置き換える (オーバーライド) またはキャンセルする (無効にする) ことはできません。 4) 継承は、ツール クラスの継承ではなく、分類法で意味がある場合にのみ使用できます。

抽象メソッドは実装する必要があるメソッドです。そして抽象クラスのみで。

インターフェースと抽象クラス

クラスは複数のインターフェースを継承できます。 。 。

クラスは 1 つの抽象クラスのみを継承できます。 。 。

抽象メソッドは実装する必要があるメソッドです。動物が呼吸をしなければならないのと同じです。しかし、魚はえらで呼吸し、豚は肺で呼吸します。

動物には呼吸法が必要です。どのように呼吸するかはサブクラスの問題です。

現在、抽象クラスの代わりにインターフェイスを使用することを推奨する多くの議論や提案がありますが、理論的にはこの 2 つを混在させることができますが、実際のアプリケーションでは依然として一定の違いがあります。抽象クラスは通常、サブクラスの拡張の基礎を提供するパブリック親クラスとして機能します。ここでの拡張には、属性と動作が含まれます。一般に、インターフェイスは属性を考慮せず、メソッドのみを考慮するため、サブクラスはインターフェイスによって定義されたメソッドを自由に埋めたり拡張したりできます。JAVA 王子が言ったように、

Event のアダプターは優れたアプリケーションです。 教師などの簡単な例を使用します。年齢、教育レベル、教師番号などの独自の属性を持つ抽象クラスとして扱います。また、教師も多くの種類に分類されるため、教師クラスを継承できます。固有のカテゴリ属性を拡張し、ユニバーサル属性は直接継承されています。 インターフェースについて〜教師を例に挙げてみましょう。教師には一般の人と同じようにさまざまな行動があるほか、テスト問題の添削や講義などのキャリア関連の行動もあります。本体のないメソッドとしての動作は、コレクションとしてはインターフェイスです。 Zhang San 先生と Li Si 先生は異なる行動特性を持っているため、行動体を拡張できます。この意味で、インターフェイスは動作に焦点を当てます。 つまり、プロパティの継承を意図的に表現する必要がない場合、多くの場合、インターフェイスは実際に抽象クラスを置き換えることができます。

インターフェースは、特定のサービスを実装するための一般的な仕様を定義し、必要な関数と定数を宣言しますが、実装方法は指定しません。実装の詳細が示されていない理由は、エンティティが異なればパブリック メソッド定義を異なる方法で実装する必要がある可能性があるためです。重要なのは、実装する必要がある一連の一般原則を確立することです。これらの原則が満たされた場合にのみ、インターフェイスが実装されていると言えます。

クラスメンバーがインターフェースで定義されていません!クラス メンバーの定義は完全に実装クラスに任されます。

より多くのインターフェースを継承する

<span style="color:#000000"><span style="color:#0000bb"></span></span>

<?php  
interface  a{  
    public function  foo ();  
}  
interface  b{  
    public function  bar ();  
}  
//一个接口类可以继承多个接口  
interface  c  extends  a ,  b{  
    public function  baz ();  
}  
  
class  d  implements  c  
{  
    public function  foo (){  
    }  
    public function  bar (){  
    }  
    public function  baz (){  
    }  
}  
?>

PHPでは、1つのクラスが複数のインターフェースを実装できるだけでなく、クラスを継承しながら複数のインターフェースを実装することもできます。まずクラスを継承してからインターフェースを実装する必要があります

以上がPHPオブジェクト指向(インターフェース)の基本概念と抽象クラス例の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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