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 dran
Wä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] Dreieck
usw. 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
- Eigenschaft (Programmierung)
- Fernmethodenaufruf
- Subroutine, auch Subprogramm, Routine, Prozedur oder Funktion genannt
Anmerkungen
- ^ "Was ist ein Objekt?". Oracle.com. Oracle Corporation. Abgerufen 13. Dezember 2013.
- ^ a b Martin, Robert C. (2009). Clean Code: Ein Handbuch der agilen Software -Handwerkskunst. Prentice Hall. p. 296. ISBN 978-0-13-235088-4.
- ^ Meyer, Bertrand (1988). Objektorientierte Softwarekonstruktion. Cambridge: Prentice Hall International Series in Informatik. S. 52–54. ISBN 0-13-629049-3.
- ^ "Abstrakte Methoden und Klassen". Oracle.com. Oracle Java -Dokumentation. Abgerufen 11. Dezember 2014.
Verweise
- Jana, Debasiish (1. Januar 2005). C ++ und objektorientiertes Programmierparadigma. PHI -Lernen Pvt. GmbH. ISBN 978-81-203-2871-6.
- Sengupta, Probal (1. August 2004). Objektorientierte Programmierung: Grundlagen und Anwendungen. PHI -Lernen Pvt. GmbH. ISBN 978-81-203-1258-6.
- Svenk, Goran (2003). Objektorientierte Programmierung: Verwenden von C ++ für Engineering und Technologie. Cengage -Lernen. ISBN 0-7668-3894-3.
- Balagurusamy (2013). Objektorientierte Programmierung mit C ++. Tata McGraw-Hill Education. ISBN 978-1-259-02993-6.
- Kirch-Prinz, Ulla; Prinz, Peter (2002). Eine vollständige Anleitung zum Programmieren in C ++. Jones & Bartlett Learning. ISBN 978-0-7637-1817-6.
- Conger, David (2006). Erstellen von Spielen in C ++: eine Schritt-für-Schritt-Anleitung. Neue Fahrer. ISBN 978-0-7357-1434-2.
- Skinner, M. T. (1992). Das erweiterte C ++ - Buch. Silicon Press. ISBN 978-0-929306-10-0.
- Liebe (1. September 2005). Linux -Kernelentwicklung. Pearson Ausbildung. ISBN 978-81-7758-910-8.
- Dehuri, Satchidananda; Jagadev, Alok Kumar; Rath, Amiya Kumar (8. Mai 2007). Objektorientierte Programmierung mit C ++. PHI -Lernen Pvt. GmbH. ISBN 978-81-203-3085-6.