Laden...

Referenzen und OOP

Erstellt von GhoBu vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.291 Views
G
GhoBu Themenstarter:in
36 Beiträge seit 2004
vor 19 Jahren
Referenzen und OOP

Moin!

In verschiedenen Threads ist ja die Diskussion über Referenzen ausgebrochen...
Ich möchte nicht weiter in themenfremden Threads darüber diskutieren, deshalb hier der neue Thread!

Immer wieder lese ich, daß eine Referenzübergabe gegen objektorientierte Programmierung verstößt! 8o

Habe ich denn immer etwas falsch verstanden? Kann ich denn gar nicht objektorientiert denken???

Bsp:
Wenn ich meinen konkreten Apfel(myApfel = newApfel()) in Deine Hände lege und Du abbeißt (Du.beisstAb(myApfel)), dann ist mein Apfel kleiner geworden und es wurde nie von einer Kopie meines Apfels abgebissen.
Das ist die Nachbildung der realen Welt, das ist in meinen Augen OOP.

Liege ich da so falsch?

Gruß
Jürgen

X
2.051 Beiträge seit 2004
vor 19 Jahren

ne, ne, ne

es läuft so:

myApfel = newApfel();
Du.nimmst(myApfel);
Du.rennst_schnell_zu_netto_mit(myApfel);
Netto.gibt_dem_lieferantgaertner_einen_auftrag_eine_kopie__zuerstellen_von(myApfel);
Lieferantgaertner.pflanzt_einen_baum_als_kopie_von(myApfel);
Baum.waechst();
System.Threading.Thread.Slep(100000000....000000000000);
Lieferantgaertner.liefert_an_netto(myApfel, myApfelKopie);
Netto.gibt_dir(myApfel, myApfelKopie);
Du.beisstAb(myApfelKopie); // 8o
Du.gibst_mir(myApfel);

und alle sind zu frieden!! 😁

G
GhoBu Themenstarter:in
36 Beiträge seit 2004
vor 19 Jahren

Gut! Das widerspricht nicht meinem Verständnis von OOP! 😉

Aber ich befürchte ein Prob wegen des Sleeps... Das sollte in einem Extra-Thread passieren, damit am Ende auch myApfel.isVerfault = true ist. 😁

Gruß
Jürgen

R
139 Beiträge seit 2004
vor 19 Jahren

nein ich bin nicht zufrieden !

du hast bei

Du.beisstAb(myApfelKopie) ";" vergessen. tsts 😁

gruß,

r00t

posted by the real prince of persia

T
81 Beiträge seit 2004
vor 19 Jahren

Wenn ich ned will, dass in ner Methode meine Referenz
verändert wird, dann übergeb ichs halt so:

Apfel myApfel = new Apfel();
Du.BeisstAb(new Apfel(myApfel));

Muss man halt nen Kopier Konstruktor bereitstellen,
aber das ist ja kein Problem.

Ist daran irgendwas falsch ? Oder warum machen manche
ne Kopie in ne Struktur oder ähnliches ?

btw: Finde es blöd, dass const in C# nicht das selbe bewirkt,
wie in C++, auch wenn mans da wegcasten konnte ..

greetz

C
1.215 Beiträge seit 2004
vor 19 Jahren

eine kleine bemerkung:

der copy-constructor soll in .net eigendlich nicht mehr verwendet werden...
...stattdessen gibt es die schnittstelle 'IClonable', welche die implementierung der methode 'Clone()' vorschreibt.

hiermit sollen in .net tiefe kopien erzeugt werden.

grtz
chief

F
71 Beiträge seit 2004
vor 19 Jahren

Wenn ich auf den anderen Thread schiele, fällt mir leider auf, das viele keinerlei Ahnung von Referenzierung und dem Umgang damit haben.
Und leider auch nicht warum man das macht.

Das finde ich (gelinde gesagt) erschreckend....

G
GhoBu Themenstarter:in
36 Beiträge seit 2004
vor 19 Jahren

Original von Ftee
Wenn ich auf den anderen Thread schiele, fällt mir leider auf, das viele keinerlei Ahnung von Referenzierung und dem Umgang damit haben.

Denn bin ich ja beruhigt. Ich dachte schon die ganze Zeit, dass ich im falschen Film bin. 8o

X
2.051 Beiträge seit 2004
vor 19 Jahren

ich vermute einfach, dass viele (besonders die aus c/c++ Ecke kommen) die C#-Referenzen mit C/C++ Referenzen, die mit & bei Funktionen gemacht werden, verwechseln.

void func(class1 &cl)
{
…
}

Wobei C#-Referenzen eine Art Pointer sind.