So machen Sie Ihren Code mit Abstraktion besser lesbar

Während Sie lernen, wie man programmiert, ist es üblich, dass Leute einen Begriff namens Abstraktion verwenden. Sie fragen sich: Was ist Abstraktion und warum ist sie wichtig?

In diesem Artikel erkläre ich Ihnen das Konzept der Abstraktion und deren Verwendung und gebe einige Beispiele in Python.

Das Wichtigste zuerst: Was ist Abstraktion?

Nach meinen Grundlagen des Programmierlehrers:

"Abstraktion ist eine vereinfachte Spezifikation einer Entität"

Dies bedeutet, dass eine Abstraktion eine Darstellung einer Rechenentität ist. Es ist eine Möglichkeit, bestimmte Informationen zu verbergen und dem Programmierer nur die relevantesten Informationen zu geben.

Eine Abstraktion ist auch situativ: Jede Abstraktion entspricht einem Bedarf, sodass Sie eine gute Abstraktion mit der besonderen Verwendung dieser Entität verknüpfen können .

Werfen wir einen Blick in die binären Suchbäume (Wenn Sie nicht wissen, was sie sind, lesen Sie meinen Artikel darüber). Wir können einen Knoten als Entität mit den folgenden Eigenschaften definieren:

A Node has: Node * left Node * right int val

Hier würden wir sagen, ein Knoten hat zwei Zeiger auf andere Knoten und einen int-Wert. Aber wie nützlich ist dies für jemanden im Vergleich zu einer Funktion insert(node, value)und es würde sie einfach richtig einfügen? Auf diese Weise müssten Sie es nur aufrufen und es wurde getan. Einfach.

So ist Abstraktion nützlich. Alle Bibliotheken, die Sie in Ihren Programmen verwenden, verwenden es, so dass die Verwendung einer Bibliothek wirklich einfach wird.

Ok, aber wie gut ist die Datenabstraktion?

Die Datenabstraktion ermöglicht es uns, eine komplexe Datenstruktur in eine einfache und benutzerfreundliche zu verwandeln. Dies hat zur Folge, dass ein Programm mit einer hohen Codekomplexität in ein Programm umgewandelt werden kann, das dem Englischen nahe kommt (nennen wir es High-Level-Code ).

Ein Datentyp besteht aus zwei Dingen: Eigenschaften und Methoden, die öffentlich oder privat sein können. Die öffentlichen sind die einzige Möglichkeit, die Daten zu verwenden. Sie sollten alle Funktionen abdecken, die die Daten erfüllen sollen.

Was passiert dann, wenn Sie Ihren abstrakten Code verwenden? Es spielt keine Rolle, ob sich Ihre internen Eigenschaften ändern, solange die Methoden dieselben Argumente erhalten und dasselbe tun wie zuvor. Wenn etwas nicht stimmt, müssen Sie es nur einmal ändern.

Lassen Sie uns ein Beispiel auswählen und damit arbeiten: Vektoren

Wir nehmen an, dass Vektoren sind:

  • Objekte mit 2 Werten, x und y
  • x und y sind beide nicht negative Zahlen

Auf diese Weise sind Vektoren so etwas wie (2, 5), (0, 19) und so weiter.

Eine gute Möglichkeit, Abstraktionen zu erstellen, ist die Verwendung von Objekten. Sie bieten Informationsverschleierung und Repräsentationsanonymität. Dadurch kann der Benutzer die Abstraktion beibehalten.

Beginnen wir mit der Definition unserer Klasse (ich werde keine Typüberprüfung definieren, um den Code sauberer zu halten, aber Sie sollten es tun):

Also haben wir mehrere Methoden definiert und wir haben jetzt eine Menge Dinge zu tun:

Für einen 2D-Vektor mag dies einfach erscheinen. Wenn Sie dies in größeren und komplexeren Programmen implementieren, werden Sie feststellen, dass diese sehr nützlich sind.

Lassen Sie uns nun eine andere Implementierung des Klassenvektors (Ändern seines internen Zustands) in etwas mit denselben Methoden, aber mit unterschiedlichem Code vornehmen:

Wenn wir dieselben Befehle ausführen, bleibt die Ausgabe unverändert. Dies liegt an der von uns verwendeten Abstraktion, auch wenn sich der Code vollständig geändert hat. Deshalb ist es sehr wichtig, Abstraktion zu verwenden. Es ermöglicht Flexibilität in Ihrem Code und Unabhängigkeit vom Code anderer Personen.

Lassen Sie uns nun ein anderes Beispiel verwenden, diesmal mit zwei Klassen: Stadt und Bürger.

Und wir bekommen folgendes:

### OUTPUT ###City population is 1000, random: Citizen is a female 20 years oldCity population is 1000, random: Citizen is a male 74 years old

Aber stellen Sie sich jetzt vor, wir möchten die Funktionsweise der Citizen-Klasse im Inneren ändern. Wenn wir keine Abstraktion verwenden würden, müssten wir den gesamten Code ändern! Das ist viel Arbeit!

Wenn der Code nun erneut ausgeführt wird, wissen wir, dass er funktioniert, obwohl die Ergebnisse unterschiedlich sind. Wie Sie sehen, haben wir eine ganze Klasse gewechselt, aber alles funktioniert!

Einpacken

Auf den ersten Blick könnte die Abstraktion so aussehen, als würde sie nicht benötigt. Je niedriger die Ebene der Sprache ist, die Sie verwenden, desto wichtiger ist die Verwendung der Abstraktion. Dies vermeidet komplexen Code und hält alles wirklich einfach. In Sprachen wie C ist es wirklich sehr, sehr nützlich. Wenn Sie Zweifel haben, überprüfen Sie dieses Projekt, in dem ich die Abstraktion implementiert habe, und es war wirklich leicht zu verstehen, was los war.

Wenn Sie Fragen haben oder etwas, über das Sie sprechen oder diskutieren möchten, hinterlassen Sie unten einen Kommentar!

Vergiss nicht, mir auf Instagram und Twitter zu folgen!