[Klassen] Zugriff auf übergeordnete möglich?
Übersicht

SkulkBetreff: [Klassen] Zugriff auf übergeordnete möglich? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey zusammen,
nachdem SucoX mir bei dem Klassen-Verschachteln so super geholfen hat, hab ich eine weitere Frage. Gehen wir von Folgender Situation aus: (bitte nicht auf syntax achten, ich schreibe aus gedächtnis. syntax ist jetzt auch noch net so wild, hauptsache ihr versteht was ich meine Code: [AUSKLAPPEN] Type tMerkmale Field fLieblingsessen Field fHautfarbe ... End Type Type tKI method EntscheideWasDuEssenWillst() End Type Type tObjekt field Merkmal:tMerkmale field Kopf:tKI method new() Self.Position = new tPosition Self.Kopf = new tKI end method End Type soweit so gut. was wäre wenn ich jetzt in tObjekt.Kopf.EntscheideWasDuEssenWillst() auf die Variable tObjekt.Merkmal.Lieblingsessen zugreifen will? ist das möglich? eigentlich dürfte ja die (ich nenns etz mal so, ich weiss der begriff hat eine andre bedeutung) SubKlasse tKI nicht von der Existenz von tMerkmale wissen. danke für eure (zahlreiche) hilfe ![]() |
||
War doesn't determine who's right,
war determines who's left... |
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
Über Extend:
Code: [AUSKLAPPEN] Type tObjekt field Merkmal:tMerkmale field Kopf:tKI method new() Self.Position = new tPosition Self.Kopf = new tKI end method method EntscheideWasDuEssenWillst() ; end method End Type Type tKI Extends tObject method EntscheideWasDuEssenWillst() local blub = super.merkmal.fLieblingsessen end method End Type Oder direkt : Code: [AUSKLAPPEN] blub = .tMerkmale.fLieblingsessen
wobei fLieblinsessen dann aber eine global Variable sein müßte und für alle Köpfe gleich wäre. |
||
- Zuletzt bearbeitet von d-bug am Fr, Jul 07, 2006 14:30, insgesamt einmal bearbeitet
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
so vieleicht: Code: [AUSKLAPPEN] Type tKI method EntscheideWasDuEssenWillst( Merkmal:tMerkmale ) End Type oder so: Code: [AUSKLAPPEN] Type tMerkmale Field fLieblingsessen Field fHautfarbe ... End Type Type tKI Extends tMerkmal method EntscheideWasDuEssenWillst() End Type Type tObjekt field Kopf:tKI method new() Self.Position = new tPosition Self.Kopf = new tKI end method End Type mfg Rone |
||
Skulk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nein das hilft mir nicht weiter...
was ich erreichen will ist eine art gruppierung. ich missbrauche das klassensystem um ähnliche werte zu gruppieren. z.b. Objekt.Position.X Objekt.Position.Y Objekt.Bewegung.MoveRandom Objekt.Bewegung.MoveDirectToPoint Objekt.Bewegung.RunFaster Objekt.KI.DecideIfYouWannaFollowALeader Objekt.KI.DecideIfYouWannaFindFood Objekt.Merkmale.Geschwindigkeit Objekt.Merkmale.Hautfarbe etc. mir geht es nicht darum ein grund objekt zu schaffen (Tier) und weitere Objekte (Ratte, Hund) davon zu bilden Also NICHT Tier Tier.Hund Tier.Hund.Dogge Tier.Hund.Schäferhund Tier.Ratte Tier.Ratte.BlackHooded Tier.Ratte.Husky etc. dass erst dort das objektorientierte programmieren seine vorzüge ausspielt ist mir klar. |
||
War doesn't determine who's right,
war determines who's left... |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das geht so nicht, dann müsstest du in jedem Objekt eine Referenz auf das Hauptobjekt haben. | ||
Skulk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmmm verdammt ich hab sowas befürchtet....
mist dann muss ich mir was neues, übersichtliches einfallen lassen trotzdem danke für eure hilfe! |
||
War doesn't determine who's right,
war determines who's left... |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Warum?
So schwer bei den Merkmalen ein Field parent:TObjekt einzufügen, damit du rauf und runter springen kannst in der Struktur? (du musst dann einfach eine zerstörungsfunktion schreiben, weil sonst weder das TObjekt noch die Merkmale je aufgeräumt werden können!) Auf der anderen Seite: Die Merkmale müssen doch eigentlich eh nicht auf einander zugreifen oder? Andere Objekte werden, wenns sauber design ist, nur auf das TObjekt eine Referenz halten und die für sie notwendigen abfragen |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Suco-X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso kann man in der OOP eigentlich nur vorwärts und nicht rückwärts? ![]() Nicht dass ich es jemals gebraucht hätte, aber bin schon etwas neugierig. Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Warum, du kannst in beide Richtungen?
Du musst einfach bei beiden eine Referenz einrichten. In einem managed System ist es einfach nicht sonderlich geschickt wegen dem Garbage Collecting. Java löst das über Reflection Mechanismen, wenn ich mich richtig erinner ... ob C# sowas hat, weiss ich nicht. Eiffel hats ziemlich sicher nicht, weils nicht auf gutes Objektdesign schliessen lässt, wenn diese Richtung notwendig ist. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Suco-X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich meine ohne eine Referenz anzulegen. Hat man ein Objekt, geht man ja eigentlich von Oben nach unten (Alien->Aussehen->Farbe). Wieso sollte man diesen Weg nicht ohne Extrareferenz zurückgehen können?
Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Skulk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wie lege ich eine referenz an?
wenn ich das über Klass = New tKlasse mache, erzeuge ich doch eine neue instanz oder nicht? |
||
War doesn't determine who's right,
war determines who's left... |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil Aussehen eine Eigenschaft des Aliens ist. Alien ist aber keine Eigenschaft von Aussehen. Anders gesagt, Aussehen ist eigentlich unabhängig vom Alien. Du könntest ein Aussehen Objekt evtl. auch einem Haus zuteilen. Und da Objekte im Speicher sowieso keine bestimmte Anordnung haben, wie sollte man da ohne Referenz wissen, welches Parent ein Objekt hat. Hinzu kommt, dass das genau gleiche Aussehen Objekt mehrere Parents haben könnte.
Erst durch Referenzen wird ja so eine verschachtelte Hierarchie erstellt, wenn man rückwärts gehen will, muss man es halt wieder mit Referenzen machen, da es kein eindeutiges Parent-Objekt gibt. @Skulk: Das stimmt, aber die Variable, die auf diese neu erstellte Instanz zeigt, ist eine Referenz. Das Objekt selbst ist die Instanz. |
||
Skulk |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mir ist schon klar wieso dass (eigentlich) nicht nötig sein sollte...und es macht ja auch keinen sinn...
aber da ich IT als beruf hab, weiss ich, dass dies keine gründe sein müssen und das es dennoch implementiert sein könnte *g* |
||
War doesn't determine who's right,
war determines who's left... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group