GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gewusst wie:Objektorientierte Programmierung – Mehr mit Klassen und Objekten

Bonusrunde

Willkommen zurück zu unserer Einführung in die objektorientierte Programmierung! Vielleicht wäre es angemessener zu sagen:„Willkommen zur Bonusrunde unserer Einführung in die objektorientierte Programmierung!“. Dieser Artikel und der folgende Artikel sind für diejenigen unter Ihnen, die etwas mehr über einige der Grundlagen der Objektorientierung erfahren möchten und sich über einige Bonusinhalte freuen!

Wenn Sie einige der ersten fünf Artikel dieser Reihe gelesen haben, haben Sie einiges gelernt:

  • Wie Abstraktion hilft, Programmieraufgaben zu vereinfachen.
  • Die Grundlagen von Klassen, Methoden und Eigenschaften der Objektorientierung.
  • Die Grundlagen der Arbeit mit Variablen und Typen und der Bearbeitung dieser Daten.
  • Umgang mit Flusskontrolle mit for und while Schleifen.
  • Wie man all dies zusammenfügt, um ein einfaches Programm zu erstellen.

Dieser und der nächste Artikel nehmen das auf, was Sie aus dieser Einführung gelernt haben, und zeigen Ihnen mehr darüber, wie Sie einige der Prinzipien der Objektorientierung (oft als OO abgekürzt) verwenden können, um effizienten und gut organisierten Code zu erstellen. Wir beginnen mit einem neuen Programm, das es uns ermöglicht, einige grundlegende Konzepte zu überprüfen und zu einigen neuen Konzepten, wie Konstruktoren, zu führen und Vererbung .

Auch hier programmieren wir in C# mit Microsofts Visual Studio. Wenn Sie mitmachen möchten (und dies noch nicht getan haben), finden Sie die Einrichtung direkt hier.

Wenn Sie dem Setup in diesem Artikel bis zum Abschnitt „Under the Hood“ folgen, sind Sie genau dort, wo wir anfangen werden. Der einzige Unterschied zu diesem Artikel ist, dass ich nicht den Standardprojektnamen „ConsoleApplication1“ verwenden werde. Stattdessen nenne ich mein Projekt „PettingZoo“ (in einem Wort), weil wir als Beispielprogramm einen Streichelzoo bauen werden.

Hinweis:Die Objektorientierung ist in vielen Sprachen und Plattformen verfügbar und die Konzepte sind sehr ähnlich. Ich habe mich für C# entschieden, weil der Einstieg einfach ist und alle benötigten Ressourcen kostenlos zur Verfügung stehen. Möglicherweise haben Sie andere Sprachen und Plattformen, die Sie verwenden möchten, und das ist auch in Ordnung. Wir sind hier, um Objektorientierung zu lernen, nicht irgendeine Sprache oder Implementierung im Besonderen.

.

Erste Einrichtung

Bevor wir beginnen, vergewissern Sie sich, dass Sie eine Konsolenanwendung in Visual Studio erstellt haben. Es sollte in etwa so aussehen wie in Abbildung 1.

Abbildung 1:Ersteinrichtung des PettingZoo-Programms

Mit dieser in Visual Studio verfügbaren Konsolenanwendung können wir mit der Erstellung unserer ersten Klasse beginnen. In C# gibt es mehrere Möglichkeiten, eine Klasse zu erstellen. In einigen Sprachen wie Java müssen Sie Klassen auf bestimmte Weise erstellen, indem Sie bestimmte Dateinamen und Ordnermuster verwenden, aber C# kümmert sich nur darum, dass wir sagen, dass etwas eine Klasse ist.

Beachten Sie, dass Sie sogar in der Standard-Konsolenanwendung bereits eine Klasse namens Program haben . Mit dem Schlüsselwort class gefolgt vom Namen der Klasse, so definieren Sie eine Klasse in C#.

Für unseren Ansatz erstellen wir eine neue Codedatei für unsere Klassen. Klicken Sie mit der rechten Maustaste auf den PettingZoo-Knoten im Projektmappen-Explorer-Bereich, und klicken Sie dann auf Hinzufügen -> Klasse, wie in Abbildung 2 gezeigt.

Abbildung 2:Hinzufügen einer Klasse mit dem Projektmappen-Explorer

Suchen Sie im sich öffnenden Dialogfeld entweder durch Suchen oder Navigieren nach dem Code-Element und nennen Sie Ihre Klassendatei etwa Animals.cs, wie in Abbildung 3 gezeigt.

Abbildung 3:Dialogfeld „Klassendatei hinzufügen“

Sie sollten jetzt eine neue, von Visual Studio erstellte Klassendatei erhalten, die etwa Folgendes enthält:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PettingZoo
{
    class Animals
    {
    }
}

Beachten Sie, dass Visual Studio standardmäßig sowohl eine Klassendatei als auch eine Klassendefinition basierend auf dem von Ihnen gewählten Dateinamen erstellt. In einigen Sprachen – wie Java – ist diese Struktur eine Voraussetzung, aber in C# ist sie nicht so streng. Wir werden den Klassennamen gleich ändern, aber belassen es vorerst dabei.

In der gerade von Visual Studio erstellten Datei werden Sie eine Reihe von using bemerken Anweisungen sowie einen namespace Codeblock. Diese Zeilen sind für unsere Klasse nicht wichtig, aber falls Sie neugierig sind – ein Namespace in C# ist eine Möglichkeit, Namen in Ihrem Projekt zu organisieren. Sie können beispielsweise mehrere Klassen mit demselben Namen haben, die unter verschiedenen Namespaces organisiert sind.

Solange Sie innerhalb eines einzigen Namensraums arbeiten, ist die Adressierung von Klassen ziemlich einfach. Aber wenn Sie Ihr Projekt in komplexere Abteilungen organisieren müssen, müssen Sie möglicherweise verschiedene Namespaces verwenden, in diesem Fall using -Anweisungen ermöglichen es Ihnen, Verknüpfungen zu diesen Namespaces zu erstellen.

.

Klassen und Objekte

Die Datei, die Sie jetzt haben, enthält eine vorgefertigte Klasse mit einem Namen, der auf dem von Ihnen gewählten Dateinamen basiert. Wir werden keine Animals haben Klasse, also ändern wir das in etwas anderes. In einem Streichelzoo brauchen wir natürlich Hunde, also ändern Sie den Namen der Klasse von Animals zu Dog :

class Dog
{
}

Beachten Sie die Änderung von Animals (Plural) zu Dog (Singular). Wir werden später eine weitere Klasse namens Animal erstellen , seien Sie also vorsichtig, wenn Sie den Code lesen und solche Nuancen aufgreifen.

Bevor wir beginnen, der Klasse Inhalte hinzuzufügen, wollen wir den Unterschied zwischen Klassen und Objekten untersuchen. Denken Sie daran, dass eine Klasse die Vorlage dafür ist, wie Objekte sein sollten. Eine einfache und nicht sehr genaue Analogie ist die eines Rezepts und eines Kuchens.

(Dieser Abschnitt ist eine Überprüfung von Klassen und Objekten, angepasst an die Erklärung im oben verlinkten Artikel. Wenn Sie diese Auffrischung überspringen und direkt zur Programmierung übergehen möchten, springen Sie direkt zum nächsten Abschnitt! Ansonsten genießen Sie etwas Kuchen!)

Das Rezept sagt Ihnen, wie man einen Kuchen macht und ist somit – in OO-Begriffen – ein Klassen . Ein Kuchen ist das Ergebnis der Rezeptausführung und – wiederum in OO-Begriffen – ein Objekt . Ein weiterer häufig verwendeter Begriff ist Instanz , um anzuzeigen, dass der Kuchen eine Instanz der Ausführung eines Rezepts ist.

Wie bei Kuchen und Rezepten ist jeder Kuchen ein einzigartiger Kuchen. Was Sie mit einem Kuchen machen, wirkt sich nicht auf andere Kuchen aus. Zuckerguss auf einen Cupcake zu geben bedeutet nicht, dass alle Cupcakes jetzt Zuckerguss haben. Genauso, wenn du einen Cupcake isst, hast du immer noch alle anderen übrig.

Es reicht jedoch nicht aus, ein Rezept zu haben und zu wissen, dass daraus ein Kuchen wird. Sie brauchen auch eine Küche, in der Sie den Kuchen backen können. In OO-Begriffen ist dies das Programm, in dem Sie das Objekt erstellen, und in unserem Fall wäre das die Hauptdatei Program.cs.

.

Zurück zum Streichelzoo

Verwenden wir unsere neue Klasse, um einen Dog zu erstellen Objekt, öffnen Sie also die Datei Program.cs und fügen Sie die folgende Zeile in static void main ein Codeblock:

Dog myDog = new Dog();

Diese Zeile erstellt einen neuen Dog Objekt vom Dog Klasse und speichern Sie sie in myDog Variable. Lassen Sie mich diese Zeile in drei Teile unterteilen, damit ich erklären kann, was vor sich geht.

[1]Dog [2]myDog = [3]new Dog();

Das erste Element [1], Dog , ist der Variablentyp, den wir erstellen möchten. In statisch typisierten Sprachen wie C# und Java müssen wir deklarieren, welchen Typ eine Variable hat, bevor wir ihr Werte zuweisen können. Sprachen, die dynamisch typisiert sind, wie JavaScript oder Perl, erfordern dies nicht und legen die Verantwortung dafür, zu verfolgen, welche Art von Daten eine Variable enthält, auf den Entwickler.

Das zweite Element [2], myDog , ist der Variablenname, den wir verwenden, um auf das Objekt zuzugreifen. Dies ist nicht unbedingt der Name des von uns erstellten Hundes, sondern der Name, den wir verwenden, um auf diese bestimmte Instanz eines Dog zu verweisen Klasse.

Hinweis:Weitere Informationen zu Variablen und Datentypen wie Zeichenfolgen finden Sie in unserem Artikel zur Einführung in die Programmierung zu Variablen und Typen.

.
Schließlich das dritte Element [3], new Dog() , teilt uns mit, dass wir erstellen oder instanziieren möchten –ein neues Objekt basierend auf dem Dog Klasse. Beachten Sie, dass nach dem Klassennamen Klammern stehen, was bedeutet, dass es sich tatsächlich um eine Methode handelt . Wir kommen auf diese Methode zurück, die eine spezielle Methode namens Konstruktor ist (Wir werden im nächsten unten verlinkten Artikel tiefer auf Konstruktoren eingehen).

Mit unserem Programm erstellen wir nun ein neues Objekt aus dem Dog Klasse, die sie in myDog speichert Variable können wir mit dem Zugriff auf die Eigenschaften und Methoden unseres Objekts beginnen. Außer natürlich, dass unsere Klasse völlig leer und inhaltsleer ist! Lassen Sie uns das beheben.
.

Eigenschaften und Methoden

Kehren wir zu unserer Animals.cs-Datei zurück, in der unser Dog Klasse hat einen Namen, aber sonst nichts. Alles, was wir in diesen Codeblock einfügen, wird jedoch Teil der Klassendefinition. Denken Sie daran, dass Klassen Eigenschaften und Methoden haben, die jeweils definieren, was ein Objekt ist und was es tun kann.

Lassen Sie uns sowohl eine Eigenschaft als auch eine Methode erstellen, und dann werden wir besprechen, was jede tut. Innerhalb der geschweiften Klammern Ihres Codeblocks {} , fügen Sie die folgenden zwei Zeilen hinzu:

string Name;
void Speak() { Console.WriteLine("Woof"); }

Die erste Zeile (string Name; ) ist eine Eigenschaft oder Feld . In der Objektorientierung definieren Eigenschaften, was etwas ist. In unserem Fall möchten wir, dass unser Hund einen Namen hat, also haben wir eine String-Eigenschaft erstellt, die den Namen des Hundes enthält.

Denken Sie daran, dass die Objektorientierung darauf abzielt, programmatische Darstellungen realer Objekte zu erstellen. Natürlich macht ein Name allein noch keinen Hund, aber OO versucht nicht, alle Eigenschaften jedes Objekts zu duplizieren, sondern nur die, die wir brauchen. Wir werden später weitere Eigenschaften hinzufügen.

Die zweite Zeile ist eine Methode Definition (oder Methodensignatur ) und ist etwas komplexer, also möchte ich es wie zuvor etwas aufschlüsseln und Ihnen zeigen, was jedes Element tut.

[1]void [2]Speak() [3]{ Console.WriteLine("Woof"); }

Element [1], void , ist die Rückgabe Art der Methode oder die Art der Ausgabe, die die Methode bei ihrer Ausführung liefert. In statisch typisierten Sprachen wie C# und Java müssen wir zusätzlich zum Deklarieren von Variablentypen immer deklarieren, welche Art von Daten wir von Methoden zurückgeben. Dynamisch typisierte Sprachen überlassen die Verantwortung, zu bestimmen, was aus einer Methode herauskommt, dem Entwickler.

In unserem Fall wollen wir zumindest anfangs nur, dass der Hund „Wuff“ sagt, wenn wir ihn bitten zu sprechen, also müssen wir nichts zurückgeben. Dies wird sich später ändern, wenn wir uns im nächsten Artikel mit der Vererbung befassen.

Auch wenn wir keinen bestimmten Wert zurückgeben möchten, müssen wir dies im Programm dennoch ausdrücklich angeben. Dazu können wir deklarieren, dass die Methode einen void zurückgibt value, was in C# und ähnlichen Sprachen bedeutet, dass wir nichts zurückgeben.

Element [2], Speak() , ist der Methodenname, und wir verwenden ihn, um die Methode aufzurufen oder auszuführen. Beachten Sie, dass Methoden wie Eigenschaften zum Objekt gehören.

Element [3], der Codeblock , ist der Code, den das Programm ausführt, wenn wir die Methode aufrufen. Möglicherweise sehen Sie diese Art von Codeblock auch als Methodenkörper bezeichnet . Im Moment weisen wir die Konsole innerhalb dieses Codeblocks einfach an, eine Zeile mit „Woof“ zu schreiben.
.

Veröffentlichung Ihrer Methode

Jetzt, da wir eine Methode haben, können wir sie von unserem Programm aus aufrufen oder ausführen und den Hund bellen lassen. Es gibt jedoch ein Problem, das mir eine großartige Gelegenheit gibt, ein weiteres Schlüsselkonzept der Objektorientierung zu wiederholen.

Um auf die Eigenschaften und Methoden eines Objekts zuzugreifen, schreiben Sie normalerweise zuerst den Namen der Variablen, die Ihr Objekt enthält, und dann den Namen Ihrer Eigenschaft oder Methode. Zum Beispiel, um den Wert von Name zu erhalten String-Eigenschaft könnten Sie schreiben:

string dogName = myDog.Name;

Um die Speak()-Methode auszuführen, könnten Sie dann schreiben:

myDog.Speak();

Wenn Sie dies jedoch in Program.cs tun, erhalten Sie eine Fehlermeldung wie in Abbildung 4 gezeigt.

Abbildung 4:Schutzstufenfehler

Der Fehler, der besagt, dass „‘PettingZoo.Dog.Speak()‘ aufgrund seiner Schutzebene nicht zugänglich ist“, tritt aufgrund eines Schlüsselkonzepts in OO namens Abstraktion auf .

Kurz gesagt, Abstraktion nimmt die Details, wie etwas funktioniert, weg, wenn wir diese Details nicht kennen müssen. In unserem Programm müssen wir nur wissen, dass der Hund sprechen kann, uns aber nicht wirklich darum kümmern, wie er es tut.

Die Abstraktion ermöglicht es dem Klassendesigner stattdessen, Zugangspunkte in die Klasse zu finden, über die er mit den Objekten arbeiten kann. Viele Sprachen ermöglichen diesen Zugriff durch Zugriffsmodifikatoren .

C# verbirgt standardmäßig Eigenschaften und Methoden außerhalb der Klasse. Die Richtlinien für diese Art der Trennung unterscheiden sich jedoch in anderen Sprachen, und einige Sprachen wie JavaScript bieten nicht einmal dieses Maß an Schutz.

Das Prinzip bleibt jedoch, dass Sie öffentlich machen, was jeder verwenden soll, und den Rest verbergen. Der Teil „Öffentlich machen“ bedeutet zumindest in C# einfach das Hinzufügen des Schlüsselworts public vor den Eigenschaften und Methoden, auf die jemand zugreifen soll. Wenn Sie also den Dog aktualisieren Klasse zum Hinzufügen von public vor dem void Speak() Zeile in Animals.cs verschwinden die roten Schnörkel in Program.cs, wie in Abbildung 5 gezeigt.

Abbildung 5:Öffentliche Methodendeklaration

Als zusätzlichen Bonus fügt Visual Studio die Methode zu den verfügbaren Optionen über das IntelliSense-Autovervollständigungssystem hinzu, wenn Sie Ihre Methode öffentlich machen. Wenn Sie myDog eingeben und den Punkt drücken, erhalten Sie eine Liste aller öffentlichen Eigenschaften und Methoden dieses Objekts, wie in Abbildung 6 gezeigt.

Abbildung 6:Visual Studio Intellisense Auto-Complete mit unserer neuen öffentlichen Methode

Andere Code-Editoren haben ähnliche Systeme zur automatischen Vervollständigung. Diese automatischen Vervollständigungen sind einer der Hauptvorteile dieser Editoren für Programmierer:Sie werden lernen, diese Funktionen zu lieben, wenn Sie sich als Programmierer weiterentwickeln!

.
Jetzt, da wir alle Fehler behoben haben, sollten wir in der Lage sein, unser Programm auszuführen und zu sehen, dass der Hund bellt. Sie können einen Haltepunkt in Ihrer Program.cs platzieren, indem Sie auf den linken Rand klicken oder Ihren Cursor auf die Klammer nach myDog.Speak() platzieren und drücken Sie F9. Drücken Sie dann F5, um das Programm auszuführen. Sie sollten sehen, dass die Konsole auftaucht, und die Ausgabe Ihres bellenden Hundes sollte erscheinen, wie in Abbildung 7 gezeigt.

Abbildung 7:Unser Hund spricht!

Natürlich können wir jetzt einen Wurf von Hunden erstellen, indem wir mehrere Variablen erstellen und Objekte darin instanziieren. Sie können zum Beispiel so etwas wie Abbildung 8 versuchen:

Abbildung 8:Zwei Hunde sprechen

Haben Sie ein ähnliches Ergebnis? Super, klopf dir auf die Schulter, aber nur einmal, denn wir haben noch viel zu tun. Schließlich haben wir versprochen, dass die Objektorientierung es uns ermöglicht, einzigartige Objekte zu erstellen, und alles, was wir getan haben, ist, zwei identische „Hunde“ zu erstellen. Als Nächstes zeigen wir Ihnen, wie Sie Konstruktoren verwenden, um separate und eindeutige Objekte zu erstellen.
.
.


Linux
  1. Programmieren mit Bash:Syntax und Tools

  2. Flatpak unter Linux:Was es ist und wie man Apps damit installiert

  3. So richten Sie LogAnalyzer mit Rsyslog und MySQL ein

  4. Entfernen von Dateien mit rm unter Verwendung von find und xargs

  5. Wie fülle ich eine Datei mit FF mit dd auf?

Gewusst wie:Objektorientierte Programmierung – Konstruktoren und Vererbung

So stellen Sie eine PHP-Anwendung mit Nginx und MySQL mit Docker und Docker Compose bereit

Verwenden von Tailscale unter Windows für eine einfachere Vernetzung mit WSL2 und Visual Studio Code

So installieren und konfigurieren Sie WordPress mit Ansible

Wie geht man mit LinkageErrors in Java um?

Erstellen von Klassen und Objekten mit Bash-Scripting