oops concepts c object oriented programming concept tutorial
Dieses Tutorial erklärt die OOPS-Konzepte in C #. Sie können etwas über objektorientierte Programmierprinzipien wie Polymorphismus, Kapselung, Vererbung und Abstraktion lernen:
Objektorientierte Programmierung ist ein Programmiermodell, das nach einem Prinzip arbeitet, das sich eher um Objekte als um Aktionen oder Logik dreht. Es ermöglicht den Benutzern, Objekte basierend auf der Anforderung zu erstellen und dann Methoden zu erstellen, um diese Objekte zu bearbeiten.
Die Arbeit an diesen Objekten, um das gewünschte Ergebnis zu erzielen, ist das Ziel einer objektorientierten Programmierung.
=> Entdecken Sie hier die gesamte Reihe von C # -Trainings-Tutorials
Lassen Sie uns einige der Konzepte überarbeiten, die wir in unseren früheren Tutorials gelernt haben !!
Namespace
Ein Namespace in C # ist eine Sammlung von Klassen. Es bietet eine Struktur, um einen Klassennamen von einem anderen Klassennamen zu trennen, indem sie in einem anderen Namespace deklariert werden. Damit die gleichnamigen Klassen nicht miteinander in Konflikt stehen.
Klasse
Eine Klasse ist eine Blaupause eines Datentyps. Es ist eigentlich eine Sammlung von Objekten. Es enthält Objekte und die Definition für die Operation, die für dieses Objekt ausgeführt werden muss.
Objekte
Objekte sind die Instanzen der Klasse.
In unseren vorherigen Tutorials haben wir bereits ausführlich über Klassen und Objekte gelernt.
Was du lernen wirst:
OOPS-Konzepte in C #
Die objektorientierte Programmierung bietet gegenüber anderen Programmiermodellen mehrere Vorteile wie:
- Der präzise und klare modulare Ansatz für Programme bietet ein einfaches Verständnis und Wartung.
- Im Projekt erstellte Klassen und Objekte können projektübergreifend verwendet werden.
- Durch den modularen Ansatz können verschiedene Module unabhängig voneinander existieren, sodass mehrere verschiedene Entwickler gemeinsam an verschiedenen Modulen arbeiten können.
In diesem Tutorial konzentrieren wir uns mehr auf andere wichtige OOPS-Kernkonzepte:
- Verkapselung
- Polymorphismus
- Erbe
- Abstraktion
Verkapselung
Encapsulation ist ein objektorientiertes Programmierkonzept, mit dem Programmierer Daten und Codefragmente in ein Gehäuse einbinden können. Mit dem Kapselungsprogramm können Sie die Mitglieder einer Klasse vor einer anderen Klasse ausblenden. Es ist so, als würde man ein logisches Element in einem Paket einkreisen. Es erlaubt nur relevante Informationen, die außerhalb verfügbar und sichtbar sind, und das auch nur für bestimmte Mitglieder.
Die Kapselung wird mithilfe von Zugriffsspezifizierern implementiert. Der Zugriffsspezifizierer wird zum Definieren der Sichtbarkeit und Zugänglichkeit des Klassenmitglieds in C # verwendet.
C # enthält die folgenden Zugriffsspezifizierer.
Testfall Vorlage Excel kostenloser Download
- Öffentlichkeit
- Privat
- Geschützt
- Intern
Die Zugriffsspezifizierer definieren die Sichtbarkeit der Klasse und ihrer Werte. Sie können damit Daten für einen bestimmten Teil des Codes sichtbar machen und vor einem anderen Teil verbergen. Die am häufigsten verwendete Sichtbarkeit ist öffentlich und privat.
Schauen wir sie uns an.
Öffentlichkeit: Mit dem öffentlichen Schlüsselwort können seine Mitglieder von überall im Projekt aus sichtbar sein. Dieser Zugriffsspezifizierer hat die geringste Sichtbarkeitsbeschränkung.
Privat: Auf die privaten Mitglieder kann nur das Mitglied innerhalb derselben Klasse zugreifen. Dies hat eine der am stärksten eingeschränkten Sichtbarkeit.
Geschützt: Durch die geschützte Barrierefreiheit kann auf das Mitglied innerhalb der Klasse und von einer anderen Klasse aus zugegriffen werden, die diese Klasse erbt.
Intern: Intern bietet Zugriff aus dem Projekt heraus. Eine andere ähnliche interne Zugänglichkeit ist intern geschützt. Dies ermöglicht dasselbe wie das interne und der einzige Unterschied besteht darin, dass eine untergeordnete Klasse diese Klasse erben und ihre Mitglieder auch von einem anderen Projekt aus erreichen kann.
Polymorphismus
Polymorphismus leitet sich aus dem griechischen Wörterbuch ab, es bedeutet eins mit vielen Formen. Poly steht für viele und Morph bedeutet Formen. Dadurch kann die Klasse in C # mehrere Implementierungen mit demselben Namen haben.
Der Polymorphismus besteht grundsätzlich aus zwei Teilen:
- Polymorphismus zur Kompilierungszeit
- Laufzeitpolymorphismus
# 1) Statischer oder Kompilierungszeitpolymorphismus
Der Polymorphismus zur Kompilierungszeit wird auch als statischer Polymorphismus bezeichnet. Das Überladen von Methoden ist eine der Möglichkeiten, mit denen ein Polymorphismus zur Kompilierungszeit erreicht wird. Es ist als Polymorphismus zur Kompilierungszeit bekannt, da die Methode zum Aufrufen der Methode zum Zeitpunkt des Kompilierens getroffen wird.
Dies wird erreicht, indem der Methodenname gleich bleibt, aber unterschiedliche Parametersätze übergeben werden. Bei der Methodenüberladung überprüft das System zunächst den verwendeten Parameter und entscheidet sich basierend auf dem Parametersatz, die entsprechende Methode aufzurufen.
Beispiel:
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i+j) ); } void print(string a, string b) { Console.WriteLine('Printing String: ' , (a+b)); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello','World'); Console.ReadKey(); } }
Im obigen Beispiel haben wir dieselbe Methode zweimal mit verschiedenen Parametern als 'Drucken' bezeichnet. Zuerst übergeben wir zwei Ganzzahlen als Parameter, dann haben wir zwei Zeichenfolgen als Parameter übergeben. Es gibt zwei gleichnamige Druckmethoden.
Wenn wir einen Parameter mit dem Integer-System übergeben, sucht es nach der Methode 'print', die zwei Integer-Parameter akzeptiert, und führt diese aus, wobei andere Methoden mit demselben Namen ignoriert werden.
Im zweiten Teil haben wir den String-Parameter übergeben. Das System sucht erneut nach der Methode, die zwei Zeichenfolgenparameter akzeptiert. Basierend auf den übergebenen Parametern fügt die erste Methode zwei Ganzzahlen hinzu und die nächste verkettet zwei Zeichenfolgen.
# 2) Dynamischer Polymorphismus oder Laufzeitpolymorphismus
Laufzeitpolymorphismus oder dynamischer Polymorphismus tritt auf, wenn sowohl der Methodenname als auch die Methodensignatur denselben Namen und dieselben Parameter haben. Das Überschreiben von Methoden ist ein Beispiel für dynamischen Polymorphismus. Es ermöglicht dem Benutzer, eine abstrakte Klasse mit teilweiser Schnittstellenimplementierung zu erstellen.
Das Überschreiben von Methoden wird mithilfe der Vererbung erreicht. Um ein Überschreiben der Methode zu erreichen, sollten sowohl die Basisklasse als auch die abgeleitete Klasse denselben Namen und Parameter haben. Während der Kompilierungszeit kann der Compiler die überschreibende Methode nicht erkennen und gibt daher keinen Fehler aus. Die Entscheidung, eine Methode auszuführen, wird zur Laufzeit getroffen.
Beispiel:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public void print() { Console.WriteLine('Printing from class Execute'); } public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe:
Printing from class Execute
Obwohl die Klasse Execute alle Methoden der Klasse Program geerbt hat, überschreibt die in der untergeordneten Klasse vorhandene Methode die Methode der übergeordneten Klasse, wenn wir die in beiden Klassen vorhandene Methode print aufrufen.
Dynamischer Polymorphismus wird verwendet, um die Abstraktion zu implementieren. Der Benutzer kann eine abstrakte Klasse erstellen, mit der eine Implementierung für eine Schnittstelle bereitgestellt wird, wenn diese von einer abgeleiteten Klasse geerbt wird. Die abstrakte Klasse kann Namen / Signaturen der Methoden enthalten, und die abgeleitete Klasse kann eine speziellere Definition für die Methode haben.
Erbe
Vererbung ist ein wichtiger Bestandteil des OOPS-Konzepts. Bei der Vererbung definieren wir übergeordnete und untergeordnete Klassen. Die untergeordnete Klasse kann alle Methoden, Objekte und Eigenschaften der übergeordneten Klasse erben. Eine untergeordnete Klasse kann auch eigene Methoden und spezifische Implementierungen haben.
Die übergeordnete Klasse wird auch als Basisklasse bezeichnet, und die untergeordnete Klasse, die die Basisklasse erbt, wird auch als abgeleitete Klasse bezeichnet.
Beispiel:
class Program { public void print() { Console.WriteLine('Printing from class Program'); } } class Execute : Program { public static void Main(string() args) { Execute exe = new Execute(); exe.print(); Console.ReadLine(); } }
Hier haben wir eine Klasse mit dem Namen eines Programms, das eine Methode hat. Wir haben eine andere Klasse Execute, die die Klasse Program erbt. Die Klasse Execute ist die abgeleitete Klasse und das Klassenprogramm wird als Basisklasse bezeichnet.
Anstatt eine Objektinstanz für das Klassenprogramm zu erstellen, haben wir jetzt eine Objektinstanz für die Klasse Execute erstellt. Mit dieser Instanz können wir von der Basisklasse aus auf die Druckmethode zugreifen.
Die Ausgabe des obigen Codes lautet also:
Printing from class Program
Die abgeleitete Klasse erbt nicht nur Methoden, sondern auch fast alle Klassenmitglieder wie Felder, Eigenschaften usw., abhängig von der Sichtbarkeit. Die Vererbung in C # erlaubt nicht die Verwendung mehrerer Vererbungen, d. H. Eine Klasse kann nicht von mehreren verschiedenen Klassen erben, eine Klasse kann jedoch von einer anderen Klasse erben, die von einer anderen Klasse erben kann.
Abstraktion
Abstraktion ist eines der Hauptprinzipien der objektorientierten Programmierung. Durch die Abstraktion kann der Programmierer der Welt nur die erforderlichen Details anzeigen, während die anderen ausgeblendet werden. Die Abstraktion wird in C # mithilfe der Abstract-Klasse und der Schnittstelle erreicht.
Eine Klasse kann mit dem Schlüsselwort 'Abstract' als abstrakte Klasse deklariert werden. Die abstrakte Klasse in C # ist immer die Basisklasse in der Hierarchie. Was sie von der anderen Klasse unterscheidet, ist, dass sie nicht instanziiert werden können. Eine abstrakte C # -Klasse muss vererbt werden.
Beispiel:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public void Describe() { return 'Description of the car'; } } class Hyundai : Car { }
Die Ausgabe der folgenden ist:
Description of the car
Wenn Sie es mit unseren vorherigen Beispielen während der Vererbung oder des dynamischen Polymorphismus vergleichen, werden Sie die Ähnlichkeiten finden. Der erkennbarste Unterschied ist die Verwendung eines abstrakten Schlüsselworts vor der Klasse Auto. Für den Fall, dass Sie dies überschreiben oder Ihre eigene Implementierung bereitstellen möchten, ähnlich wie wir es beim dynamischen Polymorphismus getan haben. Dann können Sie dies durch Folgendes erreichen.
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
Wenn Sie diesen Code jetzt ausführen, wird die folgende Ausgabe ausgegeben:
Description of the car is now Hyundai
Die abgeleitete Klassenmethode überschreibt die Basisklassenmethode. Auf diese Weise können Sie eine andere abgeleitete Klasse wie Ferrari, Porsche, BMW usw. mit eigenen Implementierungsmethoden erstellen.
Wenn Sie genau hinschauen, können Sie feststellen, dass unsere Beschreibungsmethode in der abstrakten Klasse keine Implementierung enthält.
Warum definieren wir dann leere Methoden?
Dies liegt daran, dass eine Abstract-Klasse eine Signatur der Methoden bereitstellt und die Unterklassen dazu verpflichtet, eine Implementierung für alle diese Methoden zu erstellen. Dies ermöglicht die gemeinsame Nutzung der Basisklasse, überprüft jedoch gleichzeitig die Methodenimplementierung der abgeleiteten Klasse.
Schnittstelle
In C # ist die Schnittstelle die Blaupause einer Klasse. Die Schnittstelle ähnelt einer abstrakten Klasse und wird verwendet, um eine hundertprozentige Abstraktion zu erreichen. Alle in der Schnittstelle beschriebenen Methoden sind standardmäßig abstrakt. Es hat keinen Methodenkörper und kann nicht instanziiert werden.
Die Schnittstelle wird hauptsächlich verwendet, um Mehrfachvererbung und vollständige Abstraktion zu erreichen. Alle in der Schnittstelle deklarierten Methodensignaturen sollten von der Klasse oder der Struktur, die sie implementiert, implementiert werden.
Beispiel:
class Program { static void Main(string() args) { Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } interface Car { string Describe(); } class Hyundai : Car { public string Describe() { return 'Description of the car is now Hyundai'; } }
Die Ausgabe des obigen Codes lautet:
Description of the car is now Hyundai
Hier haben wir ein Interface Car erstellt. Da die Schnittstelle keine Methodendefinition haben kann, haben wir nur den Methodennamen und den Rückgabetyp in der Schnittstelle angegeben. Wir haben dann die Schnittstelle Auto zu einer anderen Klasse Hyundai implementiert. In der implementierten Klasse haben wir die Definition für die in der Schnittstelle definierten Methoden bereitgestellt.
Fazit
Im objektorientierten Programmierkonzept wird jeder Teil des Programms als Objekt behandelt. Klasse ist eine Sammlung ähnlicher Elementtypen, und ein Objekt ist die Instanz der Klasse.
Durch die Kapselung in C # kann der Benutzer die Sichtbarkeit der Klasse und ihrer Mitglieder festlegen. Durch Polymorphismus können die Methoden denselben Namen haben, jedoch unterschiedliche Parameter innerhalb derselben Klasse oder denselben Parameter in einer anderen Klasse.
Vererbung ist, wenn eine untergeordnete Klasse, die auch als abgeleitete Klasse bezeichnet wird, alle Eigenschaften erbt, einschließlich Methoden, Objekte, Felder usw. der übergeordneten Klasse, die auch als Basisklasse bezeichnet wird. Durch die Abstraktion kann das Programm nur die Signatur anzeigen und gleichzeitig die Implementierungsdetails ausblenden.
Konsolidiertes Programm
class Program { void print(int i, int j) { Console.WriteLine('Printing int: {0}', (i + j)); } void print(string a, string b) { Console.WriteLine('Printing String '+ a + b); } static void Main(string() args) { Program prog = new Program(); // Call print for sum of integers prog.print(5, 6); // Call to concatenate strings prog.print('Hello', 'World'); Hyundai hyn = new Hyundai(); String descp = hyn.Describe(); Console.WriteLine(descp); Console.ReadKey(); } } abstract class Car { public virtual string Describe() { return 'Description of the car'; } } class Hyundai : Car { public override string Describe() { return 'Description of the car is now Hyundai'; } }
=> Entdecken Sie hier die gesamte Reihe von C # -Trainings-Tutorials
Literatur-Empfehlungen
- OOP Java: Einführung in die objektorientierte Programmierung in Java
- Objektorientierte Programmierung in C ++
- Unix Pipes Tutorial: Pipes in der Unix-Programmierung
- Python DateTime Tutorial mit Beispielen
- Objekt-Repository in QTP - Tutorial Nr. 22
- Python-OOPs-Konzepte (Python-Klassen, Objekte und Vererbung)
- QTP-Tutorial Nr. 7 - QTP-Paradigma zur Objektidentifizierung - Wie identifiziert QTP Objekte eindeutig?
- Erfahren Sie mehr über SoapUI Groovy Scripting-Konzepte - SoapUI Tutorial # 9