Laden...

Basisklasse kopieren

Erstellt von Unikum vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.998 Views
U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 17 Jahren
Basisklasse kopieren

Hallo,

mein Problem wurde schon teilweise hier besprochen, aber mir fehlt noch das I-Tüpfelchen. Es geht um das Kopieren der Basisklasse. Also das Thema: "B erbt von A, wie erhalte ich nun das Objekt von A?"...

Ich habe mir das hier Klonen von Unterklassen auch schon durchgelesen, aber jetzt kommt für mich ein anderes Problem. Jetzt erstelle ich eine Klasse C, die von A erbt. Meinetwegen ich Clone jetzt die Basisklasse vom Objekt B, wie weise ich nun dieses eine Objekt einfach der Basisklasse von C zu?

Hatte mir schon überlegt, Attribut für Attribut extra zuzuweisen. Aber das kanns ja auch nicht sein, oder? Irgendwie habe ich selber den Eindruck ich gehe falsch an die Sache ran, aber sehe mein Denkfehler nicht.

Gruß Olli

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,

Original von Unikum
wie weise ich nun dieses eine Objekt einfach der Basisklasse von C zu?

zuweisen kannst Du das nicht, da Du ja einen anderen Typen hast (auch wenn dieser bei beiden Basisklasse ist).
Du kannst aber z.B. eine Methode schreiben, die ein Objekt der Basisklasse annimmt und die eingenen Felder entsprechend setzt.

EDIT: In diesem Fall würde sich aber auch das Klonen erübrigen, da Du auch direkt das Objekt B in die Methode stecken kannst.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

_
227 Beiträge seit 2006
vor 17 Jahren

bin mir jetzt nicht sicher was du kopieren willst wenn du

lso B erbt von A, wie erhalte ich nun das Objekt von A.

willst

geht denn

A a = (A)meinObjeckt;

nicht?

U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 17 Jahren

Nein, der Satz ist unglücklich gewählt. Ich wollte damit nochmals die Thematik benennen. Es war ja öfters die Frage, wie erhalte ich das Objekt von der Basisklasse. Mir gings jetzt nur darum, wie weise ich ein nun ein Objekt von einer Basisklasse einer anderen wieder zu....

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
so wie ich oben beschrieben habe. Eien direkte Zuweisung geht nicht.
Du kannst entweder eine normale Set-Methode schreiben, um ein Objekt der Basisklasse anzunehmen, oder einen Konstruktor. Wie Du#s am besten machst, hängt davon ab ob Du bei der Übergabe ein neues Objekt erstellen willst oder ein vorhandenes verändern.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 17 Jahren

Ok, habe ich mir schon gedacht...

Nun, da muß ich dann wohl durch 🙂 Danke dir trotzdem aber...

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Unikum,

nur noch mal zur Sicherheit: zuweisen und klonen ist bei Referenztypen ein Unterschied wie Tag und Nacht. Mir ist immer noch nicht klar geworden, was du eigentlich willst (Anwendungsfall).

herbivore

U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 17 Jahren

Hi Habivore...

Ich habe zwei Klassen.. Nennen wir sie Klasse B und C. Beide erben von der Klasse A.

Also ich habe in dem Moment zwei Objekte. Das ist mir klar. Ich wollte jetzt einfach, daß ich einfach die Basisklasse von Klasse B zur Klasse C kopiere.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Unikum,

warum? Klingt sehr, sehr merkwürdig.

Wie heißen die Klassen konkret?

Meinst du wirklich kopieren? Oder zuweisen?

herbivore

U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 17 Jahren

Ich meine eigentlich eher zuweisen. Ich hab mal nen kleines Bild angehangen wie ich mir das so vorstelle.

Ich habe einfach zwei Objekte von der Klasse A erben und ich möchte der Klasse C die Basisklasse der Klasse B zuweisen (sagen wir mal referenzieren). Ich hab schon den ganzen tag probiert das zu bewerkstelligen. Mit Intefaces, abstrakten Klassen. Ich weiß, das geht, ich habe dazu schon mal vor Wochen ein Artikel im Internet dazu gelesen. Aber ich weiß die Seite nicht mehr...

Ich möchte einfach nur die Möglichkeit haben, zu einem bestimmten Zeitpunkt die Basisklasse eines Objektes auf andere Objekte zu referenzieren.

Uff, drück ich mich so unklar aus? 😁 Wenn ja, dann tuts mir echt leid. Ich weiß nicht wieso, ich habe heute eine total lange Leitung (liegt am Wochenende was irgendwie sehr partyreich war 🙂 ).

Gruß Olli

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Unikum,

zumindest weiß ich immer noch nicht, was du meinst und willst.

Wenn es um Zuweisung geht, dann ist folgendes problemlos möglich (wobei a, b und c Variablen der Klassen A, B und C sind).

a = b;
a = c;

aber

b = c;
c = b;

sind nicht erlaubt. Stichwort wäre hier Polymorphie.

Wie heißen die Klassen konkret?

herbivore

U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 17 Jahren

Die haben noch gar keinen Namen mein lieber herbivore. Es ging mir einfach nur um die Problematik an sich

G
40 Beiträge seit 2005
vor 17 Jahren

Das mit der Zuweisung funktioniert nicht und das ist auch gut so, denn das würde dem Prinzip der Kapselung widersprechen und kaum zu überblickende Abhängigkeiten erzeugen.
Kopie ist was anderes, da erzeugt man ein unabhängiges neues Objekt.
Dazu müsste in der Basisklasse eine Kopier-Fabrikmethode sein, mit der jeweils neue Objekte der Unterklassen erzeugt werden können. Die Unterklassen haben dann einen protected -Kopier-Konstruktor, der die privaten Felder aus der Basisklasse übernimmt.
Beispiel:
fortlaufender Text, für jede Zeile ein eigenes Objekt mit Textkoordinaten X und Y.
Y wird jeweils hochgezählt, damit die Zeilen schön untereinander kommen. Will man im Textverlauf eine Linie, brauchts dafür ein Objekt einer anderen Unterklasse. Eine Möglichkeit ist nun, in der Basisklasse dieser Objekte ein statisches Feld 'statY ' zu haben, das dann für alle Unterklassen gilt. Funktioniert wunderbar, solange man jeweils nur einen Ausdruck hat. Wenn es mehrere gleichzeitig sind geht das mit dem statischen Feld nicht mehr. Mit dem oben skizziertem Kopierverfahren würde es aber gehen: jede neue Zeile oder Linie usw. wird dann aus der jeweils vorhergehenden erzeugt, übernimmt von ihr über die Basisklasse die Koordinaten, zählt Y hoch und hat natürlich einen anderen Text, der extra zugewiesen werden muss.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo gespannter_Bogen,

das geht aber auch deutlich leichter, wenn die ID-Vergabe als Methode der Oberklasse implementiert ist und von allen Unterklassen genutzt wird. Ich kann mir keinen Fall vorstellen, in dem das, was Unikum will - so wie ich es verstanden habe - Sinn macht.

herbivore

U
Unikum Themenstarter:in
228 Beiträge seit 2004
vor 17 Jahren

😁 😁 Bei herbivor braucht immer alles eine Brgründung warum wieso weshalb 🙂 Aber in dem Fall gibts keine Begründung. Das war einfach so ein Gedanke ob es geht und wenn ja wie man es am besten realisieren kann. So einfach. Ich habe ja noch Gedanken dieser Art 🙂)

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Unikum,

Ich habe ja noch Gedanken dieser Art 🙂)

kannst du ja auch gerne haben. Und gerade deshalb solltest du froh sein, wenn jemand kommt, und die Richtung weist, wenn es die "falsche" ist, wie in diesem Fall.

herbivore

B
1.529 Beiträge seit 2006
vor 17 Jahren

Ich glaube, herbivore will eher verstehen, was du machen willst und nicht warum.

Wenn es dir nur um die einfache Beantwortung deiner Frage ging, wurde das schon im ersten Post erledigt.
Da du jedoch weiterhin nachgehakt hast, weil du dich nicht verstanden fühlst (zugegeben habe ich auch nicht wirklich verstanden, was du machen willst bzw. denkst),
haben natürlich alle versucht deine Pläne und Vorstellungen zu ergründen.

Drück dich doch einfach mal deutlich aus. (etwas C#- oder wenigstens Pseudo-Code wirkt da wahre Wunder).

Und wenn du dann meinst:

...und wenn ja wie man es am besten realisieren kann... dann überführst du dich selbst eines unfairen Verhaltens.
Denn realisieren kann man grundsätzlich alles. Die Frage bleibt immer nur, wie gut es die Sprache unterstützt.