Gibt es viele Leute, die denken, dass Schreibkurse heutzutage objektorientiert sind? Der Inhalt handelt von **, die selbst Grundschüler für solche Menschen verstehen können **. Ich werde versuchen, die Objektorientierung selbsternannt mit einer Mischung aus Subjektivität zu erklären. Bitte beachten Sie, dass es etwas schwierig zu verstehen sein kann, da der Wortschatz niedrig ist.
Zunächst werde ich es ziemlich zäh erklären. Es gibt verschiedene Bedeutungen von ** "Objekt" **, aber hier werden wir mit ** "Objekt" ** erklären. Es gibt vier grundlegende Schwankungen bei "Objekt": ** "Produktion", "Bewegung", "Veränderung" und "Zerstörung" **. Diese Schwankungen haben je nach ** Art des "Objekts" ** unterschiedliche Verhaltensweisen.
Als "Roboter" ausgedrückt, ist es wie folgt.
Als nächstes ist das "Tier" wie folgt.
** Die Art der Schwankungen ist ähnlich **, ** aber ** das Verhalten ist völlig anders **. Wir werden ein Framework ** erstellen, das diese ** Verhaltensweisen für jede Eigenschaft des Dings ** "objektorientiert" ** separat verarbeitet.
Videospiele, die Sie alle kennen. Alles, was auf diesem Bildschirm dargestellt wird, ist ** "Objekt" **. Werfen wir einen Blick auf die vier Variationen der Grundanzeige im Spiel.
Objekt | Produktion | Bewegung | Veränderung | Zerstörung |
---|---|---|---|---|
Charakter | Aussehen | Betrieb, KI-Verhalten | Erhöhen / verringern Sie die Lebensdauer, steigen Sie auf | Geh, stirb |
Textinformationen | Anzeige | Animation anzeigen | Farbe, Schriftart | Ausblenden |
Hintergrund | Anzeige | scrollen | Farbe, Veränderung im Laufe der Zeit | Ausblenden |
Der Rahmen für die Verwaltung dieser als "Objekte" ist "objektorientiert". Man kann sagen, dass das Spiel selbst "objektorientiert" läuft **. Menschen, die an der Spieleentwicklung beteiligt sind, müssen ein objektorientiertes Verständnis gemeinsam haben.
Es gibt einige ** Attribute **, die Objekte in jeder Umgebung gemeinsam haben.
Sei A diese ** gemeinsamen Attribute **. Betrachten Sie als nächstes den Unterschied zwischen Tieren und Maschinen. (Verschiedene Dinge können im Spiel angenommen werden, aber hier nehmen wir die reale Welt als Beispiel)
** Ich verstehe irgendwie, dass das Phänomen anders ist, aber das Wesen ist das gleiche **. Nennen wir diese Unterschiede B. Als nächstes überlegen Sie **, ob der Unterschied anhand des Aussehens beurteilt werden kann **. Achten Sie auf B ①②.
-① Tiere machen Geräusche mit ihren Stimmbändern, Maschinen machen Geräusche mit ihren Lautsprechern ――② Das Tierherz bewegt sich durch den Blutdruck, die CPU der Maschine durch die Spannung
** Die Essenz ist dieselbe, aber der Mechanismus ist unterschiedlich. ** ** ** Sei dieser Unterschied C.
Es sollen die drei objektorientierten Prinzipien ** "Vererbung", "Polymorphismus" und "Einkapselung" sein. Wie einige von Ihnen vielleicht bemerkt haben, gilt das in Level 3 erläuterte Element ABC tatsächlich dafür.
--A: Elemente mit gemeinsamen Attributen erben: ** Erben **
Ich schreibe endlich ein Programm, aber dieses Mal schreibe ich es in ** C ++ - wie Notation **.
Es ist lang, es zu tun, also werde ich versuchen, es mit * "Unterschied zwischen Hund und Affe" * auszudrücken, der nur einfache Zeichen ausgibt. Als Voraussetzung werden die folgenden im Beispiel verwendeten Klassen / Funktionen / Makros erläutert.
Name | Klasse/Funktion/Makro | Erläuterung |
---|---|---|
String | Klasse | Vereinfacht die Verarbeitung von Zeichenfolgen. |
Funktion | Gibt eine Zeichenfolge aus. | |
strMarge | Funktion | Kombiniert zwei oder mehr Zeichenfolgen. |
std::shared_ptr |
Standardbibliothek | Verwenden Sie den Smart Pointer. |
Unterschied zwischen Hund und Affe
class Animal{
private:
String name;
String voice;
String food;
protected:
void init(const String& in_name, const String& in_voice, const String& in_food)
{
this->name = in_name;
this->voice = in_voice;
this->food = in_food;
}
virtual ~Animal() {}
public:
String getName() { return this->name; }
String getVoice() { return this->voice; }
String getFood() { return this->food; }
virtual void actionRun(){} //Mit Vererbungsziel überschreiben
virtual void actionTalk(){} //Mit Vererbungsziel überschreiben
virtual void actionEat(){} //Mit Vererbungsziel überschreiben
};
class Dog : public Animal{
public:
Dog(){ this->init("Hund", "einer! einer!", "Knochen"); }
virtual void actionRun() override { print(strMarge(this->getName(), "Geht mit vier Beinen")); }
virtual void actionTalk() override { print(strMarge(this->getName(), "Ist", this->getVoice(), "Gebell")); }
virtual void actionEat() override { print(strMarge(this->getName(), "Ist", this->getFood(), "Iss mit einem Gorigori")); }
};
class Monkey : public Animal{
public:
Monkey(){ this->init("Affe", "Schlüssel! Schlüssel!", "Banane"); }
virtual void actionRun() override { print(strMarge(this->getName(), "Geht mit Gliedern")); }
virtual void actionTalk() override { print(strMarge(this->getName(), "Ist", this->getVoice(), "Schrei")); }
virtual void actionEat() override { print(strMarge(this->getName(), "Ist", this->getFood(), "Von Hand schälen und essen")); }
};
int main()
{
std::shared_ptr<Animal> dog = std::make_shared<Dog>();
std::shared_ptr<Animal> monkey = std::make_shared<Monkey>();
dog->actionRun(); //Der Hund geht mit vier Beinen
dog->actionTalk(); //Der Hund ist einer! einer! Gebell
dog->actionEat(); //Hunde fressen Knochen
monkey->actionRun(); //Affe geht mit Gliedern
monkey->actionTalk(); //Affe ist der Schlüssel! Schlüssel! Schrei
monkey->actionEat(); //Affen schälen Bananen von Hand und essen
return 0;
}
Selbst wenn ** Typ ** Tier ist, ist der Ausgabeinhalt unterschiedlich, da ** Entität (Instanz) ** Hund und Affe ist. Die Hauptpunkte des obigen Codes sind in einem Aufzählungszeichen zusammengefasst.
Wenn ①②③ abgeschlossen ist, ** ist das objektorientierte Framework abgeschlossen **.
Wenn es um das eigentliche Spiel geht, ist jede im Level 5-Beispiel geschriebene Klassenmethode Es wird ein komplizierterer Mechanismus mit Animations- und Statusänderungen sein, anstatt mit einfachen Inhalten wie der Zeichenausgabe. Teilen Sie den komplizierten Mechanismus in Klassen ein, um das Verhalten von außen zu verbergen. ** Es ist möglich, die Implementierungsgeschwindigkeit zu verbessern und lesbaren Quellcode auf natürliche Weise zu implementieren **, Es ist ein absoluter objektorientierter Vorteil.
Recommended Posts