Bevor wir anfangen zu lernen die neuen erweiterten Funktionen von C++, Wir müssen über einige der Prinzipien sprechen von gutem Klassendesign. Warum ist ein gutes Klassendesign wichtig? Denn ohne gutes Klassendesign die Möglichkeit, die Softwarefunktionalität zu erweitern oder neue Funktionen hinzuzufügen, wird stark eingeschränkt. Sprechen wir also über einige der Prinzipien die sind am nützlichsten und fangen wir an mit dem Prinzip namens DRY. DRY ist ein Akronym, das für "Repeat yourself" steht. was bedeutet, dass Sie Code schreiben sollten, um etwas zu tun oder etwas einmal und nur einmal beschreiben. Was bedeutet das also genau? Schauen wir uns ein Beispiel an. Sie haben eine Klasse namens DoNotRepeat, die hervorgehoben wird. Und diese Klasse hat einige Variablen, einige Mitgliedsvariablen namens integer_var, double_var und string_var. Es hat auch Funktionen zum Setzen dieser Variablen und rufen Sie auch ihre Werte ab. Betrachten wir nun die andere Klasse, nannte diese Klasse Wiederholt. Schauen Sie sich an, dass es ein sehr ähnliches Layout hat. Es hat eine ähnliche Member-Variable namens integer_var, double_var, string_var und hat ähnliche Schnittstellenfunktionen um diese Variablen zu setzen und einige ihrer Werte abzurufen, aber auch um einen anderen Wert zu berechnen basierend auf diesen Werten. Also wenn du dir diese 2 Klassen ansiehst und du wirst das verstehen Wenn Sie eine Funktion ändern müssen, das ist bei ihnen gleich, Sie müssen wahrscheinlich zweimal Änderungen vornehmen. Sie müssen die DoNotRepeat . ändern und Sie müssen dann auch Wiederholt ändern, was natürlich praktisch möglich ist, aber sehr schlechte idee wegen änderungen des code die 2, 3, 4 mal wiederholt werden müssen ist eine sehr gute Möglichkeit, Fehler in Ihrem Programm einzuführen. C++ bietet Ihnen also einen Mechanismus damit kannst du den Code schreiben das ist zwischen den 2 Klassen einmal und nur einmal üblich, was als Vererbung bezeichnet wird. Und wir werden darüber reden in einigen der folgenden Abschnitte. Ein weiteres Prinzip, das wir brauchen zu sprechen ist Kapselung. Und dieses Prinzip ist eigentlich sehr wichtig. Kapselung ist ein Prinzip, nach dem die Eigenschaften von Objekten ist vor direktem Zugriff geschützt durch externe Funktionen oder Klassen. Dies ist nicht das einzige, was eine Kapselung erfordert. Richtig gekapselte Objekte haben eine sehr schmale Schnittstelle, was bedeutet, dass ein externer Benutzer nur wenige Dinge tun kann mit den Objekten, aber die anzahl der komponenten und interne Funktionen innerhalb des Objekts können groß sein und einige Dinge alleine tun, aber Sie können diese Funktionen nicht ausführen ohne auf die Schnittstelle des kapselnden Objekts zuzugreifen. Für dieses Beispiel, Werfen wir einen Blick auf eine Objektklasse namens Mixer, was einen stehenden Küchenmischer beschreibt. In meinem Beispiel, Ich beschreibe einen Kitchen Aid Mixer und wie Sie sehen können, Es hat eine sehr einfache Schnittstelle. Sie können es starten, stoppen, mischen. Sie können die Tasse entfernen, Sie können die Tasse installieren, Sie können den Mixer entsperren, den Mixer sperren, und Sie können den Mixer auch anheben. Dies sind die einzigen Funktionen, die Sie ausführen können auf dem richtig gekapselten Objekt. Sie wissen auch, dass der Mixer Zahnräder enthält, Motor, Steuerung und einige andere Komponenten, aber du hast keinen Zugriff darauf als normaler Benutzer des Objekts. Sie wissen, dass diese einzeln existieren. Sie interessieren dich sehr wenig und du musst sie nicht kontrollieren oder die Funktion haben, sie zu kontrollieren außer durch das Objekt. Das nächste Prinzip, das wir uns ansehen werden wird als Einzelverantwortungsprinzip bezeichnet. Das ist eine schicke Art zu sagen diese Klasse sollte für eine Sache verantwortlich sein und nur eines. Wenn eine Klasse z. ist verantwortlich für die Beschreibung eines Kundenauftrags, Es sollte nicht für die Speicherung der Informationen verantwortlich sein dieses Kundenauftrags in die Datenbank es sollte auch nicht für die Konvertierung selbst verantwortlich sein in ein anderes Format wie XML. Warum ist das keine gute Idee? Nun, es ist eigentlich ganz einfach. Selbst in die Datenbank, zum Beispiel, das Objekt benötigt die Datenbankinformationen. Wenn Sie also viele Kundenaufträge haben, jeder muss eine Kopie der Datenbankinformationen haben, was fehleranfällig ist und macht den Code wirklich verwirrend zu lesen und sehr schwer zu pflegen. Wenn es also nicht unbedingt erforderlich ist, Abhängigkeiten wie diese sollten vermieden werden. Das letzte Prinzip, über das wir in diesem Abschnitt sprechen werden nennt man das Offen-Geschlossen-Prinzip. Das Prinzip besagt, dass die Klasse offen sein sollte zur Erweiterung, aber kurz vor der Änderung. Was bedeutet das also genau? Sehen wir uns etwas zur Regelvalidierung an. Sie haben eine Klasse namens RuleValidation, die eine Schnittstellenmethode namens Validierungsregel hat dem Sie ein Regelobjekt hinzufügen, die Sie selbst beschreiben können. Und dann haben Sie die Validierungslogik in der Methode und es bedeutet, dass jedes Mal, wenn Sie eine neue Regel hinzufügen oder eine neue Art der Validierung, Sie müssen die RuleValidation-Klasse ändern um die neue Funktionalität unterzubringen. Ein besserer Weg, dies zu tun, wäre zu haben eine Klasse namens ValidateRule, die eine öffentliche Funktion namens valid haben wird. Also für jede Art von Validierung, die Sie wollen, Sie erstellen ein Objekt dieser Klasse. Und Sie können dies wieder erweitern, indem Sie Vererbung verwenden. Sie können es verlängern um bieten eine bestimmte Art der Validierung an. Und dann können Sie tatsächlich eine Regelvalidierung durchführen, einen Satz von Validierungsregelobjekten haben, welche valide wir tatsächlich nacheinander aufrufen bis die Regel gültig ist, oder es wird den Fehler bei allen bekommen. Auf diese Weise wird das Regelvalidierungsobjekt muss sich nicht viel ändern um neue Validierungsregeln aufzunehmen. Das einzige was du brauchst hinzuzufügen ist eine Funktion namens addRuleValidator, die das Validierungsregelobjekt nimmt, und werde sie hinzufügen zum Validierungsset. Validierungsregel hinzufügen. Und dann kannst du ganz einfach viele Validierungen hinzufügen so viele Bestätigungen wie Sie möchten, genau so wird es beschrieben im Auf-Zu-Prinzip.