Eine Frage an die OOP-Experten. - Seite 35

 
Реter Konow:

Wie werden Querverbindungen zwischen nachgeordneten Klassen hergestellt, die eine gemeinsame Wurzel irgendwo tief in der Hierarchie haben?

Zum Beispiel: Klasse F und Klasse Z sind die Endglieder einer Vererbungskette mit einer gemeinsamen Wurzel in der Hierarchie, Klasse A.

Wie kann man Daten oder Methoden der Klasse Z von der Klasse F erhalten?

Das können Sie nicht. So etwas gibt es nicht. Aber das ist nicht nötig.

Nach der Erstellung von Objekten können Sie einen Zeiger von einem Objekt auf das zweite und einen Zeiger vom zweiten Objekt auf das erste übergeben.

Wenn wir jedoch speziell über die Klasse sprechen, können Sie jedes Objekt mit zwei Doppelpunkten ansprechen. Aber wozu brauchen Sie es? Natürlich wird sie manchmal benötigt, aber sie ist ein äußerst unbedeutendes OOP-Feature.

 
Dmitry Fedoseev:

Niemals. So etwas gibt es nicht. Aber das ist nicht nötig.

Nach der Erstellung von Objekten können Sie einen Zeiger des einen Objekts an das zweite und einen Zeiger des zweiten Objekts an das erste übergeben.

Wenn wir jedoch speziell über die Klasse sprechen, können Sie sich mit zwei Doppelpunkten auf alles beziehen. Aber wozu brauchen Sie es?

Es kommt darauf an, welche Aufgaben die F-Klasse lösen soll. Es kann Situationen geben, in denen Daten oder Methoden, die in einer Vererbungskette eines Dritten verwendet werden, nützlich sein können.
 

Beispiel: Die Klasse F enthält die Methoden Farbe und Länge, die Klasse Z die Methoden Ton und Breite.

Es erscheint ein Objekt, das zwei Eigenschaften hat, Länge und Breite, die jedoch von verschiedenen F- und Z-Klassen berechnet werden. Was ist zu tun? Erstellen Sie eine separate Klasse mit Wiederholungen dieser Methoden, oder wie kann ich auf sie zugreifen? (Mit vier Punkten?).

 
Реter Konow:

Beispiel: Die Klasse F enthält die Methoden Farbe und Länge, die Klasse Z die Methoden Ton und Breite.

Es erscheint ein Objekt, das zwei Eigenschaften hat, Länge und Breite, die jedoch von verschiedenen F- und Z-Klassen berechnet werden. Was ist zu tun? Erstellen Sie eine separate Klasse mit Wiederholungen dieser Methoden, oder wie kann ich auf sie zugreifen? (Mit vier Punkten?).

Sie könnten eine neue Klasse anlegen und die Klassen F und Z darin aufnehmen.

class F{
};

class Z{
};

class Y{
   public:
   F f;
   Z z;
}
 
Dmitry Fedoseev:

Sie können eine neue Klasse anlegen und die Klassen F und Z darin aufnehmen.

Ein Bogenschießkurs? Ich hab's. Danke.
 
Dmitry Fedoseev:

Sie können eine neue Klasse anlegen und die Klassen F und Z darin aufnehmen.

Oder Sie können in der Klasse, in der Sie die Daten der anderen Klasse haben wollen, eine Methode einrichten, die einen Zeiger auf die gewünschte Klasse liefert.

 
Реter Konow:
Eine "Verbeugung" der Klasse? Ich hab's. Danke.

Sie können sich einfach einen Zeiger auf die gewünschte Klasse besorgen und den Zeiger verwenden, um ein Klassenobjekt zu erhalten. Sie müssen jedoch darauf achten, dass Sie keinen Zeiger auf ein leeres oder neues Klassenobjekt erhalten.

 
Artyom Trishkin:

Sie können sich einfach einen Zeiger auf die gewünschte Klasse besorgen und den Zeiger verwenden, um ein Klassenobjekt zu erhalten. Sie müssen jedoch darauf achten, dass Sie keinen Zeiger auf ein leeres Klassenobjekt erhalten.

Feinheiten. Vererbungshierarchie ist praktisch, wenn die Daten klar klassifizierbar, vordefiniert und eindeutig sind. Mit zunehmender Komplexität der Objekte können Kombinationen von Methoden und Eigenschaften auftreten, die in den Klassen nicht vorgesehen sind, was die Konstruktion von "Bindungen" - d.h. Querverbindungen zwischen den Klassen - erfordert. Dies ist nicht immer bequem und kann das schöne Verteilungsschema zerstören und eine Überarbeitung erzwingen.
 
Реter Konow:
Ein "Verbeugungskurs"? Ich verstehe. Ups.

In diesem Beispiel

class F{
};

class Z{
};

class Y{
   public:
   F f;
   Z z;
}

Die Klasse Y enthält Variablen mit Typen der Klassen F und Z.

Wenn Sie jedoch bereits Objekte der Klassen F und Z erstellt und irgendwo verwendet haben, können Sie in Objekt Y nicht auf sie zugreifen. Es werden zwei neue Objekte der Klassen F und Z im Objekt Y entstehen.

Um Zugang zu den Objekten der Klassen F und Z zu erhalten, die zuvor erstellt und bereits verwendet wurden, müssen Sie Referenzen zu den Objekten F und Z in der Klasse Y erhalten - dann kann die Klasse Y mit diesen Daten arbeiten, die bereits in F und Z geschrieben sind, anstatt neue und unberührte F und Z zu verwenden.

Aber wenn Sie ein solches Link-Objekt erstellen, dann geben F und Z in ihm Zugriff auf die Klassen F und Z, und sie sollten nur durch die Klasse Y gefüllt werden - wieder, geben Sie Zugriff auf Objekte F und Z von ihm, erhalten einen Zeiger auf das Objekt, das Sie brauchen, und arbeiten mit ihm durch den Zeiger.

 
Реter Konow:
Feinheiten. Vererbungshierarchie ist praktisch, wenn die Daten klar klassifizierbar, vordefiniert und eindeutig sind. Mit zunehmender Komplexität der Objekte können Kombinationen von Methoden und Eigenschaften auftreten, die nicht für Klassen vorgesehen sind, und dies erfordert den Aufbau von "Bindungen" - d. h. Querverbindungen zwischen Klassen. Dies ist nicht immer bequem und kann das schöne Verteilungsschema zerstören und eine Überarbeitung erzwingen.

Sie müssen nichts kaputt machen - Sie müssen nur eine Methode in die Klasse einfügen, die einen Zeiger auf das gewünschte Objekt einer anderen Klasse liefert.

In den letzten Artikeln habe ich auf diese Weise Zeiger auf bereits erstellte und funktionierendeObjekte der Klasse Symbolsammlung und das Objekt des aktuellen Kontos, die bereits Daten angesammelt haben, in Handelsobjekte übergeben. Und die Handelsklasse geht mit ihnen um, als hätte sie sie schon immer gehabt.