Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, das auf dem Konzept der “Objekte” basiert, die Daten und Code zur Bearbeitung dieser Daten enthalten können. Die objektorientierte Programmierung ist ein beliebtes Programmierparadigma, das in vielen verschiedenen Programmiersprachen verwendet wird, darunter Python, Java und C++. In diesem Artikel werden wir uns auf die objektorientierte Programmierung in Python konzentrieren.
Welchen Grundlagen folgt die objektorientierte Programmierung?
Die objektorientierte Programmierung ist ein Programmierparadigma, das auf dem Konzept von Objekten basiert, die Daten und Code enthalten können, der auf diese Daten wirkt. Die Grundidee besteht darin, einen Bauplan für ein Objekt zu erstellen, der als Klasse bezeichnet wird. Objekte sind Instanzen von Klassen, die ihre eigenen Daten und ihr eigenes Verhalten haben.
Die objektorientierte Programmierung folgt ingesamt vier grundlegenden Konzepten:
- Verkapselung: Dies ist die Praxis, Daten und Code, der mit diesen Daten arbeitet, in einer einzigen Einheit, einer so genannten Klasse, zu halten. Die Kapselung ermöglicht eine bessere Kontrolle des Zugriffs auf die Daten und stellt sicher, dass die Daten vor externen Manipulationen geschützt sind.
- Vererbung: Dadurch kann eine Klasse Eigenschaften und Methoden von einer anderen Klasse erben. Dies ist nützlich, um spezialisierte Klassen zu erstellen, die einer Basisklasse ähneln, aber über zusätzliche Funktionen verfügen.
- Polymorphismus: Dies ist die Möglichkeit, einen einzigen Methodennamen zu verwenden, um je nach dem Objekt, das die Methode aufruft, unterschiedliche Aktionen durchzuführen. Dies wird durch die Verwendung von Schnittstellen oder abstrakten Klassen erreicht.
- Abstraktion: Hierbei handelt es sich um die Praxis, die Implementierungsdetails einer Klasse zu verbergen und nur die notwendigen Methoden und Eigenschaften offenzulegen. Dies ermöglicht einen einfacheren und flexibleren Code, der leicht geändert werden kann.
Die objektorientierte Programmierung hat ihren Schwerpunkt auf der Erstellung von wiederverwendbarem Code und der Schaffung von Objekten, die in verschiedenen Zusammenhängen verwendet werden können. Dies macht die Programmierung effizienter, da der Code einmal geschrieben und mehrfach verwendet werden kann.
Python ist eine objektorientierte Programmiersprache, die diese Konzepte unterstützt und damit ein leistungsfähiges Werkzeug für die Erstellung komplexer Programme ist. Python verfügt außerdem über eine Reihe von integrierten Funktionen und Modulen, die die Arbeit mit Objekten und Klassen erleichtern.
Wie wird die objektorientierte Programmierung in Python umgesetzt?
In Python ist alles ein Objekt, und wir können unsere eigenen Objekte erstellen, indem wir Klassen definieren. Eine Klasse ist ein Entwurf oder eine Vorlage für die Erstellung von Objekten, die ähnliche Eigenschaften haben. Sie definiert die Eigenschaften und Verhaltensweisen eines Objekts. Sobald eine Klasse definiert ist, können wir aus ihr Objekte erstellen, die Instanzen dieser Klasse sind.
Hier ist ein Beispiel für eine einfache Klasse in Python:
In diesem Beispiel haben wir eine Klasse namens Car
definiert, die drei Attribute hat: Marke, Modell und Baujahr. Die Methode init()
ist eine spezielle Methode, die die Attribute des Objekts initialisiert, wenn es erstellt wird. Die Methode drive()
ist ein Verhalten der Klasse Car.
Um ein Objekt aus dieser Klasse zu erstellen, können wir wie folgt vorgehen:
In diesem Beispiel haben wir ein Objekt namens my_car
aus der Klasse Car
erstellt. Wir haben die Attribute Marke, Modell und Jahr an die Methode init()
übergeben.
Verkapselung
Die objektorientierte Programmierung nutzt die Verkapselung, die sich auf die Praxis bezieht, die internen Details eines Objekts zu verbergen und nur die notwendige Funktionalität nach außen hin offenzulegen. In Python können wir die Kapselung erreichen, indem wir Attribute und Methoden entweder als privat oder öffentlich definieren.
Private Attribute und Methoden sind durch einen doppelten Unterstrich (__) gekennzeichnet und können nur innerhalb der Klasse aufgerufen werden. Öffentliche Attribute und Methoden sind von außerhalb der Klasse zugänglich.
Hier ist ein Beispiel:
In diesem Beispiel haben wir eine Klasse namens BankAccount definiert, die zwei private Attribute hat: __account_number
und __balance
. Auf diese Attribute kann nur innerhalb der Klasse zugegriffen werden. Außerdem haben wir drei öffentliche Methoden definiert: deposit()
, withdraw()
und get_balance()
. Auf diese Methoden kann von außerhalb der Klasse zugegriffen werden.
Vererbung
Die objektorientierte Programmierung nutzt die Vererbung als ein grundlegendes Konzept, und Python unterstützt Vererbung in seiner Klassenhierarchie. Durch Vererbung kann eine Klasse auf einer anderen Klasse basieren und alle Attribute und Methoden der übergeordneten Klasse erben. Dies ermöglicht die Wiederverwendung von Code und fördert die Modularität des Codes, wodurch die Verwaltung und Aktualisierung einer großen Codebasis erleichtert wird.
In Python wird die Vererbung durch die Erstellung einer neuen Klasse erreicht, die von einer bestehenden Klasse abgeleitet wird. Die neue Klasse wird als “Kind” oder “Unterklasse” bezeichnet, und die bestehende Klasse wird als “Elternklasse” oder “Oberklasse” bezeichnet. Die untergeordnete Klasse erbt alle Attribute und Methoden der übergeordneten Klasse, kann aber auch eigene Attribute und Methoden hinzufügen oder die der übergeordneten Klasse außer Kraft setzen.
Um eine Unterklasse in Python zu erstellen, kannst Du eine neue Klasse definieren und die Elternklasse in Klammern hinter dem Klassennamen angeben. Hier ist ein Beispiel:
In diesem Beispiel haben wir eine übergeordnete Klasse namens Animal
, die eine init
-Methode hat, die das Attribut name
initialisiert, und eine speak
-Methode, die nichts tut. Wir haben auch zwei untergeordnete Klassen, Dog
und Cat
, die von der Klasse Animal
erben und die Methode speak
überschreiben, um den jeweiligen Tierlaut zurückzugeben.
Wenn wir eine Instanz von Dog
oder Cat
erstellen, erbt sie das Attribut name
von der Klasse Animal
und die Methode speak
von der Unterklasse:
Die Vererbung unterstützt auch ein Konzept namens “method resolution order” (MRO), das die Reihenfolge bestimmt, in der Methoden in der Klassenhierarchie gesucht werden. In Python wird die MRO durch eine Tiefensuche in der Klassenhierarchie ermittelt, die der in der Klassendefinition angegebenen Vererbungsreihenfolge folgt. Auf die MRO kann mit der Methode mro einer Klasse zugegriffen werden:
Dies zeigt, dass die MRO für die Klasse Hund [Hund, Tier, Objekt] ist, was bedeutet, dass Python zuerst nach Methoden in der Klasse Hund, dann in der Klasse Tier und schließlich in der integrierten Objektklasse sucht.
Die Vererbung kann auch verwendet werden, um mehrere Ebenen von Unterklassen zu erstellen, wobei jede Unterklasse von ihrer Elternklasse erbt. Dies kann nützlich sein, um Klassen in einer Hierarchie zu organisieren und die Wiederverwendung von Code zu fördern.
Zusammenfassend lässt sich sagen, dass Vererbung eine leistungsstarke Funktion der objektorientierten Programmierung ist, die die Wiederverwendung von Code ermöglicht und die Modularität des Codes fördert. Python unterstützt die Vererbung in seiner Klassenhierarchie, so dass es einfach ist, Unterklassen zu erstellen, die Attribute und Methoden von einer übergeordneten Klasse erben.
Polymorphie
Polymorphismus ist ein grundlegendes Konzept in der objektorientierten Programmierung, das es Objekten ermöglicht, je nach ihrem Kontext unterschiedliche Formen oder Verhaltensweisen anzunehmen. Der Begriff “Polymorphismus” leitet sich von den griechischen Wörtern “poly” für “viele” und “morph” für “Form” oder “Gestalt” ab.
In Python wird Polymorphismus durch Methodenüberladung und Methodenüberschreibung erreicht.
Das Überladen von Methoden ermöglicht es einer Klasse, mehrere Methoden mit demselben Namen, aber unterschiedlichen Parametern zu haben. Wenn eine Methode aufgerufen wird, bestimmt Python automatisch, welche Methode zu verwenden ist, je nach Anzahl und Art der übergebenen Argumente.
Nehmen wir zum Beispiel eine Klasse namens Shape
, die eine Methode namens area()
hat. Diese Methode kann überladen werden, um verschiedene Parameter für verschiedene Formen zu übernehmen. Ein Rechteck-Objekt könnte eine area()
-Methode haben, die zwei Parameter, Länge und Breite, benötigt, während ein Kreis-Objekt eine area()
-Methode haben könnte, die einen einzigen Parameter, den Radius, benötigt.
Das Überschreiben einer Methode ermöglicht es einer Unterklasse, eine eigene Implementierung einer Methode bereitzustellen, die bereits in ihrer Oberklasse definiert ist. Wenn eine Methode auf einem Objekt der Unterklasse aufgerufen wird, wird die Implementierung der Methode der Unterklasse anstelle der Implementierung der Oberklasse verwendet.
Betrachten wir zum Beispiel eine Klassenhierarchie, die aus einer Oberklasse namens Animal
und zwei Unterklassen namens Cat
und Dog
besteht. Die Klasse Animal
hat eine Methode namens speak()
, die einen generischen Tierlaut zurückgibt. Die Klassen Cat
und Dog
können die Methode speak()
außer Kraft setzen, um ihre eigenen spezifischen Geräusche zurückzugeben.
Die objektorientierte Programmierung besitzt durch die Polymorphe ein leistungsstarkes Merkmal, das die Wiederverwendung von Code und Flexibilität ermöglicht. Sie ermöglicht es, Objekte auf generische Weise zu behandeln, ohne ihre spezifischen Typen zu kennen, und ermöglicht die Erstellung von modularerem und wartbarem Code.
Abstraktion
Abstraktion ist ein wichtiges Konzept in der objektorientierten Programmierung, das es uns ermöglicht, uns auf die wesentlichen Merkmale eines Objekts zu konzentrieren und gleichzeitig unnötige Details auszublenden. In Python können wir das Konzept der Abstraktion nutzen, um abstrakte Klassen und Methoden zu erstellen.
Eine abstrakte Klasse ist eine Klasse, die nicht instanziiert werden kann und nur als Blaupause für andere Klassen dient, von denen sie erben kann. Sie definiert die grundlegende Struktur und das Verhalten, das die abgeleiteten Klassen implementieren müssen. Um eine abstrakte Klasse in Python zu definieren, verwenden wir das Modul abc, das für abstrakte Basisklassen steht.
Nehmen wir zum Beispiel an, wir wollen eine Klasse Shape
erstellen, die als Basisklasse für andere Formen wie Rectangle
und Circle
dient. Wir können die Klasse Shape
als abstrakte Klasse definieren, indem wir das abc
-Modul verwenden:
In diesem Beispiel definieren wir die Klasse Shape
als abstrakte Klasse, indem wir die Metaklasse abc.ABCMeta
verwenden. Wir definieren auch zwei abstrakte Methoden, area()
und perimeter()
, die keine Implementierung in der Klasse Shape
haben. Diese Methoden müssen in allen abgeleiteten Klassen, die von Shape
erben, implementiert werden.
Wir können nun abgeleitete Klassen wie Rectangle
und Circle
erstellen, die von der Shape
-Klasse erben und ihre eigenen Implementierungen für die Methoden area()
und perimeter()
bereitstellen:
In diesem Beispiel definieren wir die Klassen Rectangle
und Circle
als abgeleitete Klassen von Shape
. Wir stellen Implementierungen für die Methoden area()
und perimeter()
in jeder dieser Klassen bereit.
Durch die Verwendung von Abstraktion in unserem Code können wir eine saubere und organisierte Struktur schaffen, die die wesentlichen Merkmale unserer Objekte von den unnötigen Details trennt. Dadurch wird unser Code wartbarer, wiederverwendbar und leichter zu verstehen.
Das solltest Du mitnehmen
- Die objektorientierte Programmierung ist ein leistungsfähiges Paradigma, mit dem sich modularer und wiederverwendbarer Code erstellen lässt.
- Python ist aufgrund seiner Einfachheit und Flexibilität eine beliebte Sprache für die objektorientierte Programmierung.
- Vererbung, ein grundlegendes Konzept der objektorientierten Programmierung, ermöglicht es einer Klasse, Attribute und Methoden von einer übergeordneten Klasse zu erben, was die Wiederverwendung von Code ermöglicht und Redundanz reduziert.
- Durch Polymorphismus können verschiedene Klassen so behandelt werden, als wären sie vom gleichen Typ, was den Code vereinfacht und die Flexibilität fördert.
- Die Abstraktion ermöglicht es Entwicklern, sich auf die wesentlichen Details eines Objekts zu konzentrieren, während die objektorientierte Programmierung versucht unnötige Komplexität weitestgehend auszublenden.
- Wenn sie effektiv eingesetzt wird, kann die objektorientierte Programmierung in Python zu effizienterem, wartbarem und skalierbarem Code führen.
Vielen Dank an Deepnote für das Sponsoring dieses Artikels! Deepnote bietet mir die Möglichkeit, Python-Code einfach und schnell auf dieser Website einzubetten und auch die zugehörigen Notebooks in der Cloud zu hosten.
Was sind Python Inputs und Outputs?
Python Inputs und Outputs beherrschen: Erforschen Sie Eingaben, Ausgaben und den Umgang mit Dateien in der Python-Programmierung.
Wie kannst Du mit Python Excel / CSV Dateien bearbeiten?
In diesem Artikel werden Möglichkeiten aufgezeigt, um mit Python Excel- und CSV-Dateien öffnen, bearbeiten und schreiben zu können.
Wie funktioniert die Python Dateiverarbeitung?
Nutzen Sie die Möglichkeiten der Python Dateiverarbeitung mit unserem Artikel. Lernen Sie, Dateien effizient zu schreiben und zu navigieren.
Was sind Python Loops?
Beherrsche Python Loops: Lerne `for` und `while` Iterationen, Steueranweisungen und praktische Anwendungen in diesem Leitfaden kennen.
Klassen und Objekte in Python – einfach erklärt!
Objektorientierte Programmierung in Python beherrschen: Erforschen Sie Klassen, Objekte und Interaktionen in unserem informativen Artikel!
Was ist Threading und Multiprocessing in Python?
Steigern Sie die Leistung von Python mit Threading und Multiprocessing. Lernen Sie, wie Sie die Parallelverarbeitung nutzen können.
Andere Beiträge zum Thema objektorientierte Programmierung
Dieser Link führt Dich zu meiner Deepnote-App, in der Du den gesamten Code findest, den ich in diesem Artikel verwendet habe, und ihn selbst ausführen kannst.