Was ist objektorientierte Programmierung? Vier Grundkonzepte von OOP

Kyle Herrity

5. Oktober 2021

Kyle Herrity ist ein erfahrener Softwareentwickler mit über 15 Jahren Branchenerfahrung, die von der Anwendungsentwicklung auf hohem Niveau bis hin zu Projekten für eingebettete Systeme auf niedrigerem Niveau reicht.

Kenntnisse in der Computerprogrammierung sind in der heutigen technologiegetriebenen Gesellschaft sehr gefragt. Kenntnisse in objektorientierter Programmierung (OOP) können bei der Entwicklung und Wartung von Software hilfreich sein. In diesem Artikel besprechen wir die Grundprinzipien von OOP und erklären sie anhand leicht verständlicher Beispiele.

Was ist objektorientierte Programmierung?

Die objektorientierte Programmierung kombiniert eine Gruppe von Datenattributen mit Funktionen oder Methoden zu einer Einheit, die als „Objekt“ bezeichnet wird. Typischerweise sind OOP-Sprachen klassenbasiert, was bedeutet, dass eine Klasse Datenattribute definiert und als Blaupause für die Erstellung von Objekten fungiert, die Instanzen der Klasse sind. Zu den beliebten klassenbasierten OOP-Sprachen gehören Java, Python und C++. Mehrere unabhängige Objekte können von derselben Klasse erstellt oder dargestellt werden und auf komplexe Weise miteinander interagieren.

Ein einfaches Beispiel wäre eine Klasse, die eine Person repräsentiert. Die Personenklasse muss Attribute enthalten, um Informationen wie Alter, Name, Größe usw. darzustellen. Die Klassendefinition kann auch Funktionen wie „sayMyName“ enthalten, die einfach den Namen dieser Person auf dem Bildschirm anzeigen.

Eine Familie kann erstellt werden, indem für jedes Familienmitglied Instanzen von Personenobjekten aus einer Klasse erstellt werden. Jedes Personenobjekt enthält unterschiedliche Datenattribute, da jede Person einzigartig ist.

Dieser Programmierstil wird häufig in gängigen Programmiersprachen wie Java, C++, Python, JavaScript und C# verwendet. Durch die Definition von Klassensätzen, die Objekte in einem Programm darstellen und kapseln, können Klassen in Modulen organisiert werden, wodurch die Struktur und Organisation von Programmen verbessert wird. Daher verwenden Entwickler OOP häufig als Werkzeug, wenn sie komplexe Programme erstellen müssen, da es einfacher ist, in Klassen und ihren Beziehungen zu denken.

Mehr Details: 50 Interviewfragen zur objektorientierten Programmierung

Vier Grundlagen der objektorientierten Programmierung

Die objektorientierte Programmierung besteht aus vier Hauptkonzepten: Kapselung, Abstraktion, Vererbung und Polymorphismus. Auch wenn diese Konzepte unglaublich komplex erscheinen, hilft Ihnen das Verständnis ihrer allgemeinen Funktionsweise, die Grundlagen eines OOP-Computerprogramms zu verstehen. Im Folgenden erläutern wir diese vier Grundprinzipien und was sie bedeuten:

  1. Verkapselung

  2. Abstraktion

  3. Nachlass

  4. Polymorphismus

1. Kapselung

Das Wort „einkapseln“ bedeutet „etwas einschließen“. So wie eine Pille ein Medikament „einkapselt“ oder in ihrer Hülle enthält, funktioniert das Prinzip der Kapselung in OOP auf ähnliche Weise: indem eine Schutzbarriere um die in einer Klasse enthaltenen Informationen gegenüber dem Rest des Codes gebildet wird.

Bei OOP kapseln und verknüpfen wir Daten und Funktionen, die mit diesen Daten arbeiten, zu einem einzigen Ganzen – einer Klasse. Auf diese Weise können wir private Informationen über die Klasse vor der Außenwelt verbergen und nur Zugriff auf die Funktionalität gewähren, die für die Interaktion mit ihr wichtig ist. Wenn eine Klasse es dem aufrufenden Code nicht erlaubt, direkt auf ihre privaten Daten zuzugreifen, sprechen wir von einer guten Kapselung.

Beispiel: Wenn wir das Personenklassenbeispiel aus dem vorherigen Beispiel erweitern, können wir private Daten in der Klasse haben, wie zum Beispiel „socialSecurityNumber“, die nicht für andere Objekte im Programm verfügbar gemacht werden sollen. Durch die Kapselung dieses Datenelements als private Variable in einer Klasse hat externer Code keinen direkten Zugriff darauf und es bleibt im Objekt dieser Person sicher.

Wenn in der Personenklasse eine Methode namens „bankTransaction()“ geschrieben wurde, um beispielsweise eine Banktransaktion durchzuführen, kann diese Funktion optional auf die Variable „socialSecurityNumber“ zugreifen. Die persönlichen Daten einer Person werden in einer solchen Klasse gut zusammengefasst.

2. Abstraktion

Es ist oft einfacher, über ein Programm nachzudenken und es zu entwerfen, wenn Sie die Schnittstelle einer Klasse von ihrer Implementierung trennen und sich auf die Schnittstelle konzentrieren können. Dies ist so, als würde man das System als „Black Box“ behandeln, bei der es nicht wichtig ist, das verdammte Innenleben zu verstehen, um die Vorteile seiner Nutzung zu nutzen.

Dieser Prozess wird in OOP „Abstraktion“ genannt, weil wir die wichtigen Details der Implementierung einer Klasse abstrahieren und nur eine saubere, benutzerfreundliche Schnittstelle durch die Mitgliedsfunktionen der Klasse präsentieren. Eine sorgfältig eingesetzte Abstraktion hilft dabei, die Auswirkungen von am Code vorgenommenen Änderungen zu isolieren, sodass sich die Änderung bei einem Fehler nur auf die Implementierungsdetails der Klasse und nicht auf den externen Code auswirkt.

Beispiel. Stellen Sie sich eine Stereoanlage als ein Objekt mit einer komplexen Logikplatine im Inneren vor. An der Außenseite befinden sich Knöpfe, mit denen Sie mit dem Objekt interagieren können. Wenn Sie einen der Knöpfe drücken, denken Sie nicht darüber nach, was im Inneren passiert, weil Sie es nicht sehen können. Auch wenn Sie nicht sehen können, wie das Board diese Funktionen durch Drücken einer Taste ausführt, führt es sie dennoch aus, wenn auch für Sie verborgen.

Es handelt sich um ein Abstraktionskonzept, das in allen Bereichen der Technologie äußerst nützlich ist und auch in der objektorientierten Programmierung sehr effektiv eingesetzt wird.

Beispiel: In OOP könnten wir eine Klasse haben, die einen menschlichen Körper darstellt. Es ist möglich, einige Funktionen als Teil einer öffentlichen Schnittstelle zu definieren, beispielsweise „walk()“ oder „eatFood()“. Der aufrufende Code kann diese Funktionen aufrufen, ohne sich der komplexen Innenabläufe des menschlichen Körpers und seiner notwendigen Funktionen zum Gehen oder Essen bewusst zu sein. Diese Details sind in der Implementierung der Körperfunktionen walk() und eatFood() vollständig verborgen und daher für den Endbenutzer abstrahiert. In diesen Fällen ist es für den aufrufenden Code nicht wichtig zu verstehen, wie das Gehirn das Gehen koordiniert oder wie der Magen mit der Verdauung umgeht, sondern lediglich, dass die Person ging oder aß.

3. Vererbung

Objektorientierte Sprachen, die Klassen unterstützen, unterstützen fast immer das Konzept der „Vererbung“. Klassen können in einer Hierarchie organisiert sein, wobei eine Klasse eine oder mehrere übergeordnete oder untergeordnete Klassen haben kann. Wenn eine Klasse eine übergeordnete Klasse hat, sagen wir, dass sie von der übergeordneten Klasse abgeleitet oder geerbt ist und eine Beziehung vom Typ „IS-A“ darstellt. Das heißt, eine untergeordnete Klasse vom Typ „IS-A“ der übergeordneten Klasse.

Wenn also eine Klasse von einer anderen Klasse erbt, erhält sie automatisch viele der Funktionen und Eigenschaften dieser Klasse und kann um separate Codes und Daten erweitert werden. Das Gute an der Vererbung ist, dass sie häufig zu einer guten Wiederverwendung von Code führt, da die Funktionen einer übergeordneten Klasse in keiner ihrer untergeordneten Klassen überschrieben werden müssen.

Betrachten Sie zwei Klassen: eine ist eine Superklasse oder übergeordnete Klasse und die andere ist eine Unterklasse oder untergeordnete Klasse. Eine untergeordnete Klasse erbt die Eigenschaften ihrer übergeordneten Klasse und ändert oder erweitert möglicherweise deren Verhalten. Programmierer, die Vererbungstechniken verwenden, ordnen diese Klassen in sogenannten „IS-A“-Beziehungen an.

Beispiel: In der Tierwelt könnte ein Insekt beispielsweise durch die Oberklasse Insekt repräsentiert werden. Alle Insekten haben ähnliche Eigenschaften, wie zum Beispiel sechs Beine und ein Exoskelett. Für Heuschrecken und Ameisen können Unterklassen definiert werden. Da sie von der Klasse „Insekten“ erben oder von ihr abgeleitet sind, teilen sie automatisch alle Insekteneigenschaften.

4. Polymorphismus

In OOP stellt Polymorphismus sicher, dass Klassen in einer Hierarchie einheitlich behandelt werden. Daher sollte der aufrufende Code nur für die Verarbeitung von Objekten aus der Wurzel der Hierarchie geschrieben werden, und alle von einer untergeordneten Klasse in der Hierarchie erstellten Objekte werden auf die gleiche Weise behandelt.

Da abgeleitete Objekte dieselbe Schnittstelle wie ihre übergeordneten Objekte verwenden, kann der aufrufende Code jede Funktion auf der Schnittstelle dieser Klasse aufrufen. Zur Laufzeit wird je nach Typ des übergebenen Objekts die entsprechende Funktion aufgerufen, was zu unterschiedlichem Verhalten führen kann.

Beispiel. Nehmen wir an, wir haben eine Klasse namens „Animal“ und zwei untergeordnete Klassen „Cat“ und „Dog“. Wenn die Klasse „Animal“ über eine Methode zum Erzeugen von Geräuschen namens „makeNoise“ verfügt, können wir die von den Unterklassen „Cat“ und „Dog“ geerbte Funktion „makeNoise“ mit „meow“ überschreiben. bzw. „bellen“. Anschließend können Sie eine weitere Funktion schreiben, die ein beliebiges Animal-Objekt als Parameter verwendet und dessen Mitgliedsfunktion makeNoise aufruft. Das Geräusch wird unterschiedlich sein: entweder „miauen“ oder „bellen“, abhängig von der Art des Tierobjekts, das tatsächlich an die Funktion übergeben wurde.

Entdecken Sie Indeeds beste Ressourcen für Technologie Talente, einschließlich Karriereberatung, Lebenslaufbeispiele, schnelle Links zur Jobsuche und mehr.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert