• Home
  • |
  • Blog
  • |
  • C# Tutorial [13/17] – Objektorientierte Programmierung in C#

C# Tutorial [13/17] – Objektorientierte Programmierung in C#

Zuletzt aktualisiert: Juni 28, 2023

Jetzt, nachdem wir uns alle wichtigen Grundlagen der C# Programmierung angesehen haben, ist es an der Zeit, in die objektorientierte Programmierung in C# einzutauchen. C# ist eine vollkommen objektorientierte Programmiersprache, weshalb ich dir dieses unheimlich wichtige Thema nun Schritt für Schritt erklären werde.

In diesem Artikel werden wir uns mit den Grundlagen der Objektorientierung befassen und in den kommenden Beiträgen werden wir uns dann verschiedene objektorientierte Konzepte auch in der Praxis ansehen.

Inhaltsverzeichnis

1. Was bedeutet objektorientierte Programmierung?

Die Objektorientierung ist ein Programmierparadigma. Doch so schwierig wie dieser Begriff klingt, ist es tatsächlich gar nicht. Anders gesagt ist ein Programmierparadigma ein Programmierstil. Ich sage auch gerne „Denkweise“ dazu, mit der man mit einer bestimmten Programmiersprache arbeitet. Schließlich ist ein Programmierstil im Grunde genommen eine bestimmte Art und Weise beim Programmieren zu denken.

Die OOP (Objektorientierte Programmierung) ist dem menschlichen Denken sehr ähnlich. Das hat einen ganz bestimmten Grund: Alles in der OOP wird durch sogenannte Objekte beschrieben. Diese Denkweise ist dem menschlichen Denken deshalb so ähnlich, weil wir in der echten Welt auch die verschiedenen Dinge, die um uns herum existieren, als Objekte wahrnehmen.

Wenn wir beispielsweise durch ein Zimmer laufen, dann laufen wir durch einen physischen Raum, in dem verschiedene Objekte existieren. Auf meinem Schreibtisch sehe ich zum Beispiel gerade eine Kaffeetasse. Dieser Kaffeetasse kann ich verschiedene Eigenschaften zuordnen, wie etwa eine Farbe. Dazu aber gleich noch mehr.

In der objektorientierten Programmierung ist es auch so, dass alle Dinge, die in unserem Programm existieren, solche Objekte sind. Wenn wir also beispielsweise ein Videospiel programmieren, in dem es ein Kamel in einem Wüstenlevel gibt, dann ist dieses Kamel ein Kamelobjekt.

Wenn wir eine Verwaltungssoftware für unsere Mitarbeiter unserer Firma schreiben, können wir jeden einzelnen Mitarbeiter in dieser Software als ein Personenobjekt darstellen.

Wenn wir eine Immobiliensoftware schreiben, dann können wir jedes Haus, das wir in unserer Software verwalten, als ein Hausobjekt darstellen.

Und das ist im Grunde die objektorientierte Programmierung in C#. Es geht dabei also um diese Objekte. Wenn wir Dinge in unserem Programm erstellen, dann erstellen wir diese als Objekte. Was man genau unter diesen Objekten versteht, werde ich dir jetzt im weiteren Verlauf dieses Artikels erklären.

2. Eigenschaften

Jedes Objekt in unserem Programm wird durch sogenannte Eigenschaften beschrieben.

Nehmen wir einmal an, wir haben unsere Immobiliensoftware geschrieben und in dieser jedes Haus als ein Hausobjekt gespeichert. Damit können wir einem Haus verschiedene Eigenschaften zuteilen.

objektorientierte programmierung in c# beispiel

Ein Haus hat zum Beispiel eine bestimmte Anzahl an Zimmern und Fenstern, eine Farbe, ein Baujahr und zudem einen Besitzer.

Dieses spezifische Hausobjekt auf der Abbildung hat beispielsweise acht Zimmer, zehn Fenster, die Farbe Blau, das Baujahr 1990 und gehört Peter Müller.

Jetzt ist es natürlich so, dass wir mehrere Hausobjekte in unserem Programm haben können. Diese verschiedenen Hausobjekte haben alle die gleichen Eigenschaften, aber jeweils unterschiedliche Werte für diese Eigenschaften.

c# oop

Das heißt, über die Eigenschaften kann man unterschiedliche Objekte, die eigentlich vom selben Typ sind, noch mal voneinander unterscheiden.

Das zweite Haus hat zum Beispiel sechs Zimmer, neun Fenster, ist grün, hat das Baujahr 1975 und gehört Sabrina Fredl.

Das sind nun die Unterschiede zwischen den beiden Objekten. Sie haben die gleichen Eigenschaften, stellen also im Grunde die gleichen Dinge dar und sind somit vom gleichen Typ. Aber sie können für diese Eigenschaften unterschiedliche Werte haben, wodurch sie sich differenzieren. So wie es auch in der echten Welt ist.

Um noch mal auf das Kaffeetassenbeispiel zurückzukommen: Es gibt zig Millionen Tassen, die auf der Welt existieren. Aber all diese Tassen haben unterschiedliche Merkmale. Die Tasse auf meinem Tisch ist beispielsweise weiß.

Auf deinem Tisch könnte allerdings eine grüne Tasse stehen. Auf meiner Tasse steht ein Text, während deine Tasse vielleicht lediglich eine Farbe besitzt. Tassen können von unterschiedlicher Größe sein etc. Ich denke, du verstehst das Prinzip und genauso verhält es sich in der C# OOP auch.

Jetzt können Objekte aber natürlich nicht nur Daten beinhalten, also Eigenschaftswerte speichern, sondern auch sogenannte Methoden aufrufen.

3. Methoden

Was Methoden sind, hast du vermutlich bereits in einem der vergangenen Beiträge gelernt. Das sind im Grunde Codeblöcke, die man über ihren Namen immer wieder aufrufen kann (und das sogar mit unterschiedlichen Parametern).

Und solche Methoden können Objekte selbst auch haben und entsprechend aufrufen.

Nehmen wir noch mal das Haus als Beispiel. Ein Hausobjekt könnte eine Verkaufen-Methode aufrufen, wodurch sich beispielsweise der Besitzer wechseln und der vorherige Besitzer Geld erhalten würde.

objektorientierte programmierung in c# methoden

Objekte können also nicht einfach nur statisch für sich existieren und eine Sammlung von Daten darstellen. Objekte können auch tatsächlich etwas machen.

Außerdem können sie über Methoden miteinander interagieren. Das heißt, Objekte können auch miteinander kommunizieren und zusammen eine Problemlösung darstellen.

4. Klassen

Nun gibt es einen Begriff, den man in der C# OOP immer und immer wieder hört. Und das ist der Begriff „Klassen“.

Wie du ja bereits gesehen hast, wurde beim Anlegen eines Projekts auch eine Class Program automatisch generiert. In dieser hat bisher unser ganzes Programm stattgefunden. Klassen sind nun aber ein sehr wichtiges Konzept, das wir auch selbst kennenlernen und nutzen sollten. Denn: Klassen sind Baupläne für Objekte.

Das heißt, wenn wir selbst Objekte von eigenen Typen erstellen möchten, müssen wir dafür Klassen definieren. Klassen geben die Eigenschaften und Methoden vor, die ein Objekt haben soll. Sie beschreiben sozusagen die Art von Objekt bzw. den Objekttyp, den man mit einer bestimmten Kasse erstellen kann.

Kommen wir noch mal zurück auf unser Beispiel mit der Immobiliensoftware. Stellen wir uns einmal vor, wir programmieren eine Software, in der es Häuserobjekte geben soll. Wenn wir Häuserobjekte erstellen möchten, müssen wir natürlich zuerst eine Klasse namens Haus erstellen.

Die Klasse stellt den Bauplan für die Häuserobjekte dar. Das heißt, wir erstellen zuerst eine Klasse Haus und in der Klasse Haus geben wir an, welche Eigenschaften Häuser haben sollen.

c# klassen

Häuser haben immer eine bestimmte Anzahl an Zimmern und Fenstern, sie haben eine Farbe, ein Baujahr und einen Besitzer. Dabei schreiben wir an dieser Stelle den Eigenschaften noch keine Werte zu. Stattdessen geben wir die Eigenschaften lediglich vor, sodass einzelne Häuserobjekte hierfür Werte bereitstellen können. Dann können wir auch noch Methoden innerhalb einer Klasse definieren, die jedes einzelne Hausobjekt für sich später aufrufen kann.

Ein Haus kann man zum Beispiel verkaufen, vermieten, abreißen oder renovieren. Diese Methoden enthalten natürlich auch Code, den man ebenfalls in dieser Klasse definiert.

Jetzt können wir diese Klasse, also diesen Bauplan für Objekte, nutzen, um damit Objekte zu erstellen. Das heißt, wir können nun mithilfe dieser Klasse Hausobjekte in unserem Programm erstellen und diese können für die verschiedenen Eigenschaften einzelne Werte haben. Darüber hinaus können sie für sich die Methoden aufrufen.

Das sind also Klassen – Baupläne für Objekte.

5. Vererbung

Es gibt ein Konzept, das ich in diesem Beitrag auch noch anschneiden möchte: das Konzept der Vererbung. Denn in der C# OOP, also der objektorientierten Programmierung, ist es auch möglich, Klassen zu vererben. Was bedeutet das?

Bei der Vererbung übernimmt eine Klasse alle Eigenschaften und Methoden einer anderen Klasse. Das ermöglicht uns, Klassen zu erweitern, ohne diese selbst zu verändern. Was meine ich damit?

Beispiel: Stellen wir uns einmal eine Basisklasse vor, die wir Säugetier nennen. In dieser Klasse sind alle Eigenschaften und Methoden definiert, die jedes Säugetier benötigt. Davon können wir jetzt mithilfe von Vererbung weitere Klassen ableiten, die spezifische Säugetiere darstellen.

Wir können also von Säugetier noch eine spezifischere Klasse ableiten, die Hund heißt. Oder wir können noch eine andere spezifischere Klasse namens Katze ableiten.

c# oop vererbung

Diese Klasse Säugetier können wir also mithilfe von Vererbung in anderen Klassen erweitern, ohne die Klasse Säugetier selbst verändern zu müssen.

Und das ist ziemlich praktisch, weil wir so zum Beispiel eine Klasse Hund erstellen können und alle hundespezifischen Eigenschaften und Methoden sich nur darin befinden.

Die anderen Säugetiere, wie etwa eine Katze, betrifft das dann nicht.

Oder wir erstellen eine Katze, die dann auch eigene Methoden und Eigenschaften besitzen kann. Diese sind dann katzenspezifisch, was damit die Hundeklasse nicht interessiert. Sie haben dann schlichtweg nichts miteinander zu tun.

Das Thema Vererbung ist also ziemlich spannend. Das werde ich dir aber natürlich noch in der Praxis zeigen.

Damit hast du nun eine theoretische Einführung in die objektorientierte Programmierung in C# bzw. in das Thema Objektorientierung allgemein bekommen.

Falls du das Ganze jetzt noch nicht wirklich nachvollziehen kannst, ist das kein Beinbruch. Dieser Blogartikel soll wirklich erst mal eine Basis schaffen, die du nutzen kannst, um die folgenden Beiträge zu diesem Thema besser zu verstehen.

Denn die objektorientierte Programmierung in C# ist meiner Meinung nach so ein Thema, das man erst mal in der Theorie grundlegend verstehen sollte, bevor man in die Praxis übergeht. In den kommenden Beiträgen werden wir uns direkt mit Begriffen wie „Klassen“ und „Objekte“ beschäftigen. Demnach ist es sinnvoll, im Vorhinein schon etwas darüber gelesen zu haben.