In diesen Zeiten, in denen KI-Unternehmen und ihre Propagandisten mit Nebelkerzen um sich werfen, ist das Erlernen der Programmierung notwendiger denn je. Im vierten Teil des Python-Programmierkurses mit Linux werden wir weiterhin erklären, wie man das Paradigma der objektorientierten Programmierung versteht. Denken Sie daran, dass sich der Link zur vorherigen Lektion am Ende des Beitrags befindet.
Obwohl KI-Agenten und -Modelle in der Lage sind, Code zu verstehen und zu schreiben, ist es dennoch notwendig, dass ein Mensch ihnen detaillierte Anweisungen gibt. Was sie leisten soll. Dazu ist es nicht nur notwendig, das Problem zu verstehen, das die Anwendung lösen will, sondern auch die Lösung unter Berücksichtigung der Eigenschaften der Sprache zu entwerfen.
Mal sehen, ob wir das anhand einer Analogie verdeutlichen können.
Bauarbeiter errichten Wolkenkratzer. Doch bevor der Bau beginnt, werden Architekten für die Planung und Ingenieure für die statischen Berechnungen sowie die Planung der Elektro-, Gas- und Wasseranschlüsse benötigt. Nach Fertigstellung des Gebäudes kümmern sich andere um die Inneneinrichtung. Erfahrene Handwerker könnten diese Aufgabe natürlich kompetent erledigen, sofern keine Komplikationen auftreten. In der Praxis scheut jedoch jeder dieses Risiko.
Tatsächlich liefert Vibe Coding umso bessere Ergebnisse, je detaillierter die Anweisungen sind. Und dass große Unternehmen unter Serviceausfällen litten und unersetzliche Datenbanken durch übereifrige KI-Agenten mit unzureichenden Anweisungen gelöscht wurden.
Python-Programmierkurs mit Linux
In früheren Artikeln haben wir gesehen, dass das objektorientierte Programmiermodell auf vier Säulen basiert: Objekte, Klassen, Methoden und Attribute. Klassen sind die Vorlagen, die zur Modellierung der Objekte oder Entitäten verwendet werden, mit denen wir arbeiten. Diese Vorlagen definieren die Attribute, die die Objekte haben, während Methoden das Verhalten des Objekts definieren.
Die verschiedenen Elemente, die mithilfe der in den Klassen festgelegten Vorlage erstellt werden, werden als Instanzen bezeichnet. Beispielsweise enthält die Klasse „Betriebssysteme“ die Instanzen Linux, Windows und macOS. Möglicherweise möchten wir jedoch Klassen erstellen, die sich nur geringfügig von bestehenden Klassen unterscheiden. Eine Code-Neuschreibung ist nicht notwendig, da wir ein Merkmal der objektorientierten Programmierung namens Vererbung nutzen können.
Schauen wir uns das folgende Programm mit einer zusätzlichen Klasse an.
Der Grund, warum ich den Code nicht direkt in den Artikel einfüge, ist, wie ich bereits erklärt habe, dass die Plattform, die wir zum Veröffentlichen des Blogs verwenden, keine Einrückung unterstützt. Diese Vorgehensweise beinhaltet das Einfügen von Leerzeichen oder Tabulatoren (beachten Sie das "oder Tabulatoren", da diese nicht gemischt werden können), wodurch der Code leichter verständlich wird.
Durch Einrückungen lässt sich Code leichter hierarchisch strukturieren. Codeblöcke wie Schleifen, Funktionen oder Klassen müssen unterschieden werden. Außerdem funktionieren Python-Programme nicht, wenn sie nicht korrekt eingerückt sind.
Nun analysieren wir das Programm Zeile für Zeile.
class Sistemas:
Wie wir gesehen haben, erstellt dieses Programm die Vorlage, auf der die Betriebssysteminstanzen erstellt werden.
def __init__(self, nombre, version, derivada):
Hier erstellen wir die Klasse. Der erste Teil ist eine automatisierte Methode, die jedes Mal angewendet wird, wenn ein solcher Datensatz erstellt wird. Die in Klammern stehenden Elemente sind die Parameter des Objekts. `Self` wird immer verwendet und bezieht sich auf das Objekt. Es steht immer an erster Stelle. Die anderen Parameter sind diejenigen, die wir in vorherigen Kursen festgelegt haben: der Name der Linux-Distribution, die Version und die Distribution, von der sie abgeleitet ist.
self.nombre = nombre
self.version = version
self.derivada = derivada
Diese Zeilen dienen der Erstellung der Attribute des Objekts. Es handelt sich um objektspezifische Variablen, die innerhalb des Objekts als Variablen fungieren und bei Bedarf beibehalten werden.
def mostrar_info(self):
Diese Methode definiert, wie die Attributinformationen des Objekts angezeigt werden. Der Parameter `self` gibt an, dass nur als Attribute gespeicherte Parameter verwendet werden sollen.
print(f"Nombre: {self.nombre}")
print(f"Versión: {self.version}")
print(f"Derivada: {self.derivada}")
Diese 3 Zeilen zeigen an, dass die Attributinformationen durch Ausdrucken auf dem Bildschirm angezeigt werden sollen.
class SistemaConPeso(Sistemas):
Hier unterscheidet sich unser Programm vom vorherigen. Wir haben eine neue, erweiterte Klasse hinzugefügt, die auf der vorherigen aufbaut. Deshalb wird der Name der vorherigen Klasse in Klammern an den Klassennamen angehängt.
def __init__(self, nombre, version, derivada, peso):
Dies ist der Konstruktor der Kindklasse, fast identisch mit dem zuvor gezeigten, jedoch mit dem zusätzlichen Gewichtsparameter.
super().__init__(nombre, version, derivada)
Um Code-Wiederholungen zu vermeiden, weisen wir das Programm mit der Super-Anweisung darauf hin, dass die Behandlung von Name, Version und Ableitung in der Verantwortung der Elternklasse liegt.
self.peso = peso
Wir mussten uns noch darum kümmern, das Gewichtsattribut zu speichern.
def mostrar_info(self):
Da das Ziel darin besteht, das Schreiben von zusätzlichem Code zu vermeiden, werden wir, anstatt eine neue Funktion zu erstellen, die die zusätzlichen Daten anzeigt, die bereits vorhandene Funktion modifizieren.
super().mostrar_info()
Rufen Sie die Methode der übergeordneten Klasse auf, um festzulegen, wie die darin gespeicherten Attribute angezeigt werden sollen.
print(f"Peso: {self.peso}
Fügen Sie Informationen darüber hinzu, wie die Daten für die aktuelle Klasse angezeigt werden sollen.
sistema = SistemaConPeso("Linux Mint", "22", "Ubuntu", "3GB")
Erstellen Sie das Objekt, in dem die Informationen mit dem hinzugefügten neuen Parameter gespeichert werden sollen, und speichern Sie es in der Systemvariablen.
sistema.mostrar_info()
Rufen Sie die Methode auf, die für die Anzeige der Informationen zuständig ist.
Dieses Programm hat natürlich keinen praktischen Nutzen. Es wäre sinnlos, Attributwerte im Code eingeben zu müssen, da jedes Mal ein Programmierer benötigt würde, wenn etwas geändert werden soll. Wie wir im Tic-Tac-Toe-Beispiel gesehen haben, kann Python vom Benutzer über die Tastatur eingegebene Informationen empfangen und speichern. Dies ist auch durch das Lesen von Dateien oder die Interaktion mit Datenbanken möglich.
Es war jedoch hilfreich, um wichtige Konzepte der objektorientierten Programmierung wie Klassen, Attribute, Konstruktoren, Methoden, Vererbung und Polymorphismus zu verdeutlichen. Ich verspreche, dass ich im nächsten Artikel die objektorientierte Programmierung abschließen und anschließend auf die Umsetzung in Python eingehen werde.