Methode (Computerprogrammierung)

A Methode in Objekt orientierte Programmierung (Oop) ist a Verfahren verbunden mit a Botschaft und ein Objekt. Ein Objekt besteht aus Zustandsdaten und Verhalten; Diese bestehen an Schnittstelle, was angibt, wie das Objekt von einem seiner verschiedenen Verbraucher genutzt werden kann. Eine Methode ist ein Verhalten eines von einem Verbrauchers parametrierten Objekts.

Daten werden als dargestellt als Eigenschaften des Objekts und Verhaltensweisen werden als Methoden dargestellt. Zum Beispiel a Fenster Objekt könnten Methoden wie haben wie z. offen und nah dranWährend sein Zustand (ob zu einem bestimmten Zeitpunkt offen oder geschlossen) wäre eine Eigenschaft.

Im Klassenbasierte Programmierung, Methoden werden in a definiert Klasseund Objekte sind Instanzen einer bestimmten Klasse. Eine der wichtigsten Fähigkeiten, die eine Methode bietet, ist Methodenüberschreibung - Gleicher Name (z. B.,, Bereich) kann für mehrere verschiedene Arten von Klassen verwendet werden. Auf diese Weise können die Sendungsobjekte Verhaltensweisen aufrufen und die Implementierung dieser Verhaltensweisen an das empfangende Objekt delegieren. Eine Methode in Java Die Programmierung legt das Verhalten eines Klassenobjekts fest. Zum Beispiel kann ein Objekt eine senden Bereich Nachricht an ein anderes Objekt und die entsprechende Formel wird aufgerufen, ob das empfangende Objekt a ist Rechteck, Kreis, Dreieck, etc.

Methoden bieten auch die Schnittstelle, mit der andere Klassen auf die Eigenschaften eines Objekts zugreifen und diese ändern. Dies ist bekannt als als Verkapselung. Einkapselung und Überschreibung sind die beiden primären Unterscheidungsmerkmale zwischen Methoden und Verfahrensaufrufen.[1]

Überlastung und Überlastung

Methodenüberschreibung und Überladung sind zwei der wichtigsten Möglichkeiten, wie sich eine Methode von einem herkömmlichen Verfahren oder Funktionsaufruf unterscheidet. Übergeordnet bezieht sich auf eine Unterklasse, die die Implementierung einer Methode ihrer Superklasse neu definiert. Zum Beispiel, Findarea Kann eine Methode sein, die auf einer Formklasse definiert ist,[2] Dreieckusw. würde jeweils die geeignete Formel definieren, um ihren Bereich zu berechnen. Die Idee ist, Objekte als "schwarze Boxen" zu betrachten, damit Änderungen an den Interna des Objekts mit minimalen Auswirkungen auf die anderen Objekte vorgenommen werden können, die es verwenden. Dies wird als Kapselung bezeichnet und soll den Code leichter zu pflegen und wiederverwenden zu erleichtern.

Die Methodenüberladung hingegen bezieht sich auf die Differenzierung des Code, der zur Verarbeitung einer Nachricht basierend auf den Parametern der Methode verwendet wird. Wenn man das empfangende Objekt als erster Parameter in einer beliebigen Methode betrachtet, ist das Überschreiben nur ein Sonderfall der Überlastung, bei dem die Auswahl nur auf dem ersten Argument basiert. Das folgende einfache Java -Beispiel zeigt den Unterschied:

Accessor-, Mutator- und Manager -Methoden

Accessor -Methoden werden verwendet, um die Datenwerte eines Objekts zu lesen. Mutatormethoden werden verwendet, um die Daten eines Objekts zu ändern. Manager -Methoden werden verwendet, um Objekte einer Klasse zu initialisieren und zu zerstören, z. Konstrukteure und Zerstörer.

Diese Methoden liefern eine Abstraktionsschicht das erleichtert Verkapselung und Modularität. Zum Beispiel, wenn eine Bank-Account-Klasse a bereitstellt GetBalance () Accessor -Methode zum Abrufen des Stroms Gleichgewicht (anstatt direkt auf die Balance -Datenfelder zugreifen), dann später Überarbeitungen des gleichen Code kann einen komplexeren Mechanismus für das Gleichgewichtsabruf implementieren (z. B. a Datenbank Abrufen), ohne dass der abhängige Code geändert werden muss. Die Konzepte der Kapselung und Modularität sind nicht nur für objektorientierte Programmierung. In vielerlei Hinsicht ist der objektorientierte Ansatz einfach die logische Erweiterung früherer Paradigmen wie z. Abstrakte Datentypen und Strukturierte Programmierung.[3]

Konstrukteure

A Konstrukteur ist eine Methode, die zu Beginn der Lebensdauer eines Objekts genannt wird, um das Objekt zu erstellen und zu initialisieren, ein Prozess heißt Konstruktion (oder Instanziierung). Die Initialisierung kann einen Erwerb von Ressourcen umfassen. Konstruktoren können Parameter haben, geben jedoch in den meisten Sprachen normalerweise keine Werte zurück. Siehe das folgende Beispiel in Java:

Öffentlichkeit Klasse Hauptsächlich {  Saite _Name;  int _rollen;  Hauptsächlich(Saite Name, int rollen) { // Konstruktormethode  Dies._Name = Name;  Dies._rollen = rollen;  } } 

Zerstörer

A Zerstörer ist eine Methode, die am Ende der Lebensdauer eines Objekts automatisch bezeichnet wird, ein Prozess heißt Zerstörung. Die Zerstörung in den meisten Sprachen erlaubt weder Argumente für Destruktor -Methoden noch Rückgabeteile. Zerstörung kann so umgesetzt werden, dass die Aufgaben und andere Aufgaben bei der Zerstörung von Objekten durchgeführt werden.

Finalizer

Im garbage gesammelt Sprachen wie z. Java, C#, und Python, Destruktoren sind bekannt als Finalizer. Sie haben einen ähnlichen Zweck und eine ähnliche Funktion wie Destruktoren, aber aufgrund der Unterschiede zwischen Sprachen, die Müllsammlung und Sprachen mit manueller Speicherverwaltung verwenden, ist die Reihenfolge, in der sie genannt werden, unterschiedlich.

Abstrakte Methoden

Ein Zusammenfassung Methode ist eins mit nur a Unterschrift und nein Implementierungsbehörde. Es wird häufig verwendet, um anzugeben, dass eine Unterklasse eine Implementierung der Methode bereitstellen muss. Abstrakte Methoden werden verwendet, um festzulegen Schnittstellen in einigen Programmiersprachen.[4]

Beispiel

Folgende Java Der Code zeigt eine abstrakte Klasse, die erweitert werden muss:

abstrakt Klasse Form {  abstrakt int Bereich(int h, int w); // Abstract Method Signature } 

Die folgende Unterklasse erweitert die Hauptklasse:

Öffentlichkeit Klasse Rechteck erweitert Form {  @Override  int Bereich(int h, int w) {  Rückkehr h * w;  } } 

Reabraktion

Wenn eine Unterklasse eine Implementierung für eine abstrakte Methode bietet, kann eine andere Unterklasse sie erneut abstrakt machen. Das nennt man Reabraktion.

In der Praxis wird dies selten verwendet.

Beispiel

In C#kann eine virtuelle Methode mit einer abstrakten Methode überschrieben werden. (Dies gilt auch für Java, wo alle nicht privaten Methoden virtuell sind.)

Klasse IA {  Öffentlichkeit virtuell Leere M() { } } abstrakt Klasse Ib : IA {  Öffentlichkeit überschreiben abstrakt Leere M(); // erlaubt } 

Die Standardmethoden von Interfaces können ebenfalls readiert werden, wodurch Unterklassen implementiert werden müssen. (Dies gilt auch für Java.)

Schnittstelle IA {  Leere M() { } } Schnittstelle Ib : IA {  abstrakt Leere IA.M(); } Klasse C : Ib { } // Fehler: Klasse 'C' implementiert nicht 'ia.m'. 

Klassenmethoden

Klassenmethoden sind Methoden, die auf a aufgerufen werden Klasse eher als eine Instanz. Sie werden normalerweise als Teil eines Objekts verwendet Meta-Modell. D.h. für jede Klasse wurde eine Instanz des Klassenobjekts im Meta-Modell erstellt. Meta-Model-Protokolle Lassen Sie die Klassen erstellt und gelöscht. In diesem Sinne liefern sie die gleiche Funktionalität wie oben beschriebene Konstrukteure und Zerstörer. Aber in einigen Sprachen wie dem Gemeinsames Lisp -Objektsystem (CLOS) Mit dem Meta-Modell kann der Entwickler das Objektmodell zur Laufzeit dynamisch verändern: z. B. neue Klassen erstellen, die Klassenhierarchie neu definieren, Eigenschaften ändern usw.

Besondere Methoden

Besondere Methoden sind sehr sprachspezifisch und eine Sprache kann keine, einige oder alle hier definierten speziellen Methoden unterstützen. Der Compiler einer Sprache kann automatisch Standard -Spezialmethoden generieren, oder ein Programmierer kann optional spezielle Methoden definieren. Die meisten speziellen Methoden können nicht direkt aufgerufen werden, sondern der Compiler generiert Code, um sie zu entsprechenden Zeiten aufzurufen.

Statische Methoden

Statische Methoden sollen für alle Fälle einer Klasse und nicht für eine bestimmte Instanz relevant sein. Sie sind ähnlich wie Statische Variablen in diesem Sinne. Ein Beispiel wäre eine statische Methode, um die Werte aller Variablen jeder Instanz einer Klasse zusammenzufassen. Zum Beispiel, wenn es a gab Produkt Klasse Es könnte eine statische Methode haben, um den Durchschnittspreis aller Produkte zu berechnen.

In Java ist eine häufig verwendete statische Methode:

Math.max (Doppel A, Double B)

Diese statische Methode hat kein besitzendes Objekt und wird nicht in einer Instanz ausgeführt. Es erhält alle Informationen aus seinen Argumenten.[2]

Eine statische Methode kann auch dann aufgerufen werden, wenn noch keine Fälle der Klasse vorhanden sind. Statische Methoden werden als "statisch" bezeichnet, weil sie bei gelöst werden Zeit kompilieren Basierend auf der Klasse werden sie aufgerufen und nicht dynamisch wie im Fall mit Instanzmethoden, die polymorph aufgelöst werden, basierend auf dem Laufzeittyp des Objekts.

Kopiersignierungsbetreiber

Kopiersignierungsoperatoren definieren Aktionen, die vom Compiler ausgeführt werden sollen, wenn ein Klassenobjekt einem Klassenobjekt desselben Typs zugewiesen wird.

Bedienungsmethoden

Bedienungsmethoden Operatorsymbole definieren oder neu definieren und definieren Sie die Operationen, die mit dem Symbol und den zugehörigen Methodenparametern ausgeführt werden sollen. C ++ - Beispiel:

#enthalten  Klasse Daten {  Öffentlichkeit:   bool Operator<(Const Daten& Daten) Const { Rückkehr rollen_ < Daten.rollen_; }   bool Operator==(Const Daten& Daten) Const {   Rückkehr Name_ == Daten.Name_ && rollen_ == Daten.rollen_;   }  Privatgelände:   std::Saite Name_;   int rollen_; }; 

Mitgliedsfunktionen in C ++

Einige prozedurale Sprachen wurden mit objektorientierten Fähigkeiten erweitert, um die großen Fähigkeiten und den Legacy-Code für diese Sprachen zu nutzen, aber dennoch die Vorteile der objektorientierten Entwicklung bieten. Das vielleicht bekannteste Beispiel ist C ++, eine objektorientierte Erweiterung der C Programmiersprache. Aufgrund der Entwurfsanforderungen, um das objektorientierte Paradigma einer vorhandenen Verfahrenssprache hinzuzufügen, verfügt die Weitergabe von C ++ über einige einzigartige Funktionen und Terminologien. Zum Beispiel wird in C ++ eine Methode als a bezeichnet Mitgliedsfunktion. C ++ hat auch das Konzept von Virtuelle Funktionen Welches sind Mitgliedsfunktionen, die sein können überschrieben in abgeleitete Klassen und erlauben Dynamischer Versand.

Virtuelle Funktionen

Virtuelle Funktionen sind die Mittel, mit denen eine C ++ - Klasse ein polymorphes Verhalten erreichen kann. Nicht virtuelle Mitgliedsfunktionen, oder Regelmäßige Methoden, sind diejenigen, an denen nicht teilnehmen Polymorphismus.

C ++ - Beispiel:

#enthalten  #enthalten  Klasse Super {  Öffentlichkeit:   virtuell ~Super() = Ursprünglich;   virtuell Leere Ich bin() { std::Cout << "Ich bin die Superklasse!\n"; } }; Klasse Sub : Öffentlichkeit Super {  Öffentlichkeit:   Leere Ich bin() überschreiben { std::Cout << "Ich bin die Unterklasse!\n"; } }; int hauptsächlich() {   std::Unique_ptr<Super> Inst1 = std::make_unique<Super>();   std::Unique_ptr<Super> Inst2 = std::make_unique<Sub>();   Inst1->Ich bin();  // Anrufe | Super :: iam |.   Inst2->Ich bin();  // Anrufe | sub :: iam |. } 

Siehe auch

Anmerkungen

  1. ^ "Was ist ein Objekt?". Oracle.com. Oracle Corporation. Abgerufen 13. Dezember 2013.
  2. ^ a b Martin, Robert C. (2009). Clean Code: Ein Handbuch der agilen Software -Handwerkskunst. Prentice Hall. p. 296. ISBN 978-0-13-235088-4.
  3. ^ Meyer, Bertrand (1988). Objektorientierte Softwarekonstruktion. Cambridge: Prentice Hall International Series in Informatik. S. 52–54. ISBN 0-13-629049-3.
  4. ^ "Abstrakte Methoden und Klassen". Oracle.com. Oracle Java -Dokumentation. Abgerufen 11. Dezember 2014.

Verweise