Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in objektorientierte PHP-Grundkonzepte (Schnittstellen) und abstrakte Klassenbeispiele

Einführung in objektorientierte PHP-Grundkonzepte (Schnittstellen) und abstrakte Klassenbeispiele

伊谢尔伦
伊谢尔伦Original
2017-07-08 09:16:021043Durchsuche

Was ist eine Schnittstelle?

Schnittstelle ist eine Abstraktion von Methoden. Wenn verschiedene Klassen dieselben Methoden haben, sollten Sie die Verwendung von Schnittstellen in Betracht ziehen.
(1) Eine Schnittstelle ist eine Verhaltensspezifikation und ein Protokoll. Tatsächlich handelt es sich um eine Vereinbarung und eine Einschränkung zwischen Klassen
(2) C# unterstützt keine Mehrfachvererbung, überlässt diese Funktion jedoch der Schnittstelle zur Implementierung.
(3) Die Methoden zum Aufrufen von Systemressourcen zwischen den Klassen sind unterschiedlich, was die Kommunikation zwischen ihnen erschwert. Schnittstellen können jedoch die Unterschiede zwischen ihnen abschirmen und ihnen eine reibungslose Kommunikation ermöglichen.

(4) Sie können angeben, welche Methoden eine bestimmte Klasse implementieren muss, müssen jedoch nicht den spezifischen Inhalt dieser Methoden definieren.

Was ist eine abstrakte Klasse (abstractclass)?

1. Eine abstrakte Klasse stellt nur eine teilweise Implementierung eines Typs bereit. Abstrakte Klassen können Instanzvariablen und einen oder mehrere Konstruktoren haben. Eine abstrakte Klasse kann sowohl abstrakte als auch konkrete Methoden haben. Eine abstrakte Klasse hat keine Instanzen und diese Konstruktoren können nicht von Clients aufgerufen werden, um Instanzen zu erstellen. Der Konstruktor einer abstrakten Klasse kann von seinen Unterklassen aufgerufen werden, sodass alle Unterklassen einer abstrakten Klasse einige gemeinsame Implementierungen haben können und verschiedene Unterklassen darauf basierend ihre eigenen Implementierungen haben können.

2. Zweck abstrakter Klassen 1) Konkrete Klassen werden nicht zur Vererbung verwendet. Scott Meyers hat einmal darauf hingewiesen, dass die Vererbung von konkreten Klassen nach Möglichkeit vermieden werden sollte. 2) Angenommen, es gibt zwei konkrete Klassen, Klasse A und Klasse B. Klasse B ist eine Unterklasse von Klasse A. Dann besteht der einfachste Änderungsplan darin, eine abstrakte Klasse (oder Java-Schnittstelle) C zu erstellen und dann Klasse A und Klasse B zuzulassen wird eine Unterklasse der abstrakten Klasse C. 3) Abstrakte Klassen sollten so viel gemeinsamen Code wie möglich haben. Um die Code-Wiederverwendungsrate zu verbessern. 4) Abstrakte Klassen sollten so wenig Daten wie möglich haben.

3. Muster und Prinzipien basierend auf abstrakten Klassen 1) Programm für Abstraktionen, nicht für spezifische Programmierung. 2) Versuchen Sie, Komposition (ComPosition) anstelle von Vererbung zu verwenden, um eine Wiederverwendung zu erreichen. 3) Verwenden Sie den Vorlagenmethodenmodus

4. Wann sollten Vererbung und Wiederverwendung verwendet werden? 1) Eine Unterklasse ist eine spezielle Kategorie der Oberklasse, nicht eine Rolle der Oberklasse. Das heißt, es müssen zwei Beziehungen unterschieden werden: „is-a“ und „has-a“. 2) Es wird nie eine Situation geben, in der Sie eine Unterklasse durch eine andere Unterklasse ersetzen müssen. Wenn der Designer nicht sicher ist, dass eine Klasse in Zukunft nicht zu einer Unterklasse einer anderen Klasse wird, sollte die Klasse nicht als Unterklasse der Oberklasse entworfen werden. 3) Unterklassen haben die Verantwortung, die Oberklasse zu erweitern, aber nicht die Oberklasse zu ersetzen (Override) oder aufzuheben (Nullify). 4) Vererbung kann nur verwendet werden, wenn sie in der Taxonomie sinnvoll ist, nicht die Vererbung von Werkzeugklassen.

Abstrakte Methoden sind Methoden, die implementiert werden müssen. Und nur in abstrakten Klassen.

Schnittstellen und abstrakte Klassen

Eine Klasse kann mehrere Schnittstellen erben. . .
Eine Klasse kann nur eine abstrakte Klasse erben. . .

Abstrakte Methoden sind Methoden, die implementiert werden müssen. So wie Tiere atmen müssen. Aber Fische atmen mit ihren Kiemen und Schweine mit ihrer Lunge.
Tiere müssen über Atemmethoden verfügen. Wie man atmet, ist eine Frage von Unterklassen.

Es gibt mittlerweile viele Diskussionen und Vorschläge, die die Verwendung einer Schnittstelle anstelle einer abstrakten Klasse befürworten. Die beiden können in der Theorie im Allgemeinen gemischt werden, in der praktischen Anwendung weisen sie jedoch immer noch gewisse Unterschiede auf. Abstrakte Klassen dienen im Allgemeinen als öffentliche Elternklassen, um die Grundlage für Erweiterungen von Unterklassen bereitzustellen. Die Erweiterungen umfassen hier Attribute und Verhaltensweisen. Im Allgemeinen berücksichtigen Schnittstellen keine Attribute, sondern nur Methoden, sodass Unterklassen die von der Schnittstelle definierten Methoden frei ergänzen oder erweitern können. Wie der JAVA-Prinz sagte, ist der Adapter in Ereignis eine gute Anwendung .
Anhand eines einfachen Beispiels, z. B. eines Lehrers, behandeln wir ihn als abstrakte Klasse mit eigenen Attributen wie Alter, Bildungsniveau, Lehrernummer usw., und Lehrer sind auch in viele Typen unterteilt, die wir erben können die Lehrerklasse und erweitern die eindeutigen Kategorieattribute, während die universellen Attribute direkt vererbt wurden.
Was die Benutzeroberfläche betrifft ~ nehmen wir Lehrer als Beispiel. Zusätzlich zu den gleichen Verhaltensweisen wie normale Menschen gibt es auch berufsbezogene Verhaltensweisen, wie z. B. das Korrigieren von Prüfungsarbeiten, das Halten von Vorträgen usw. Wir Definieren Sie diese Verhaltensweisen als körperlos. Methoden sind als Sammlung eine Schnittstelle. Die Lehrer Zhang San und Li Si haben unterschiedliche Verhaltensmerkmale, sodass sie ihre Verhaltenskörper erweitern können. In diesem Sinne konzentriert sich Interface auf das Verhalten.
Kurz gesagt: In vielen Fällen können Schnittstellen tatsächlich abstrakte Klassen ersetzen, wenn Sie die Vererbung von Eigenschaften nicht ausdrücken müssen.

Eine Schnittstelle definiert die allgemeine Spezifikation für die Implementierung eines bestimmten Dienstes und deklariert die erforderlichen Funktionen und Konstanten, gibt jedoch nicht an, wie dieser implementiert wird. Der Grund dafür, dass keine Implementierungsdetails angegeben werden, liegt darin, dass verschiedene Entitäten öffentliche Methodendefinitionen möglicherweise auf unterschiedliche Weise implementieren müssen. Der Schlüssel besteht darin, eine Reihe allgemeiner Grundsätze festzulegen, die umgesetzt werden müssen. Nur wenn diese Grundsätze erfüllt sind, kann von einer Implementierung gesprochen werden.

Klassenmitglieder sind in der Schnittstelle nicht definiert! Die Definition der Klassenmitglieder wird vollständig der Implementierungsklasse überlassen.

Mehr Schnittstellen erben

<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 (){  
    }  
}  
?>

In PHP kann nicht nur eine Klasse mehrere Schnittstellen implementieren, sondern Sie können auch mehrere Schnittstellen implementieren, während Sie eine Klasse erben . Schnittstelle, Sie müssen zuerst die Klasse erben und dann die Schnittstelle implementieren

Das obige ist der detaillierte Inhalt vonEinführung in objektorientierte PHP-Grundkonzepte (Schnittstellen) und abstrakte Klassenbeispiele. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn