ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > wie programmiert man "vererbung" | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
1 -2- | [ - Beitrag schreiben - ] |
23.12.2010, 07:27 Uhr AGSzabo Posts: 1663 Nutzer |
@Der_Wanderer: Ok. Ein Beispiel aus der Praxis: der Imagebutton soll sich ein anderes Image darstellen wenn er gedrückt ist. Der Image-Teil des Imagebuttons weis aber nix von der maus und den coordinaten des Button-Teils. oder? -- Sam mini os4.1 upd. 2 / e-uae 39bb2 / A4000D 3.0 & 3.9 2mbchip 8mbfast Ariadne_II ide DVD und HD / A500 3.1 (mkick) adide 50mb / Athlon ii X2 Ubuntu Linux [ Dieser Beitrag wurde von AGSzabo am 23.12.2010 um 07:27 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
23.12.2010, 10:43 Uhr Der_Wanderer Posts: 1229 Nutzer |
Wieso sollte er das nicht wissen? Du solltest eher in C denken als in Assembler, das ist eigentlich nicht gut für OOP geeignet. Die Unterklasse erweitert ja einfach nur den Struct. Warum sollte sie nicht auf die geerbten Felder zugreifen können? -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
23.12.2010, 10:59 Uhr AGSzabo Posts: 1663 Nutzer |
@Der_Wanderer: heisst das die subklasse muss den struct der superklasse beim kompilieren kennen? -- Sam mini os4.1 upd. 2 / e-uae 39bb2 / A4000D 3.0 & 3.9 2mbchip 8mbfast Ariadne_II ide DVD und HD / A500 3.1 (mkick) adide 50mb / Athlon ii X2 Ubuntu Linux [ - Antworten - Zitieren - Direktlink - ] |
23.12.2010, 11:58 Uhr Der_Wanderer Posts: 1229 Nutzer |
Ja, natürlich. Man kann nichts subclassen, was man nicht kennt, was wäre sonst der Sinn davon? Dann wären es zwei getrennte Klassen. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
23.12.2010, 12:02 Uhr AGSzabo Posts: 1663 Nutzer |
@Der_Wanderer: Ich hatte eine Idee wie es vielleicht doch geht, nämlich zB indem die subklasse die werte der superklasse per einer funtkion wie GetSuperAttr() oder änliches her holt! -- Sam mini os4.1 upd. 2 / e-uae 39bb2 / A4000D 3.0 & 3.9 2mbchip 8mbfast Ariadne_II ide DVD und HD / A500 3.1 (mkick) adide 50mb / Athlon ii X2 Ubuntu Linux [ - Antworten - Zitieren - Direktlink - ] |
23.12.2010, 12:07 Uhr Der_Wanderer Posts: 1229 Nutzer |
Nein, so macht man das nicht. Das ist sogar eine ganz schlechte Idee, denn die Funktionen der Ober-Klasse müssen selbstverständlich mit den aktuellen Daten arbeiten. Merke: Redundanz (z.b. Daten an zwei verschiedenen Stellen speichern) = ganz, ganz schlechte Idee. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
23.12.2010, 13:27 Uhr tboeckel Posts: 124 Nutzer |
@AGSzabo: Warum versuchst du eigentlich mit aller Macht ein eigenes OOP-System auf die Beine zu stellen, obwohl du doch nun schon sehr ausführlich demonstriert hast, daß dir das Verständnis für die Grundlagen fehlt. Es macht wenig Sinn mit fehlendem Verständis für die Natur das Rades zu versuchen eben dieses Rad neu zu erfinden, nur weil man meint das eigene wäre runder als die anderen. Warum nimmst du nicht einfach das funktionierende BOOPSI-System und leitest deine Klassen von rootclass ab. Damit bekommst du auf jeden Fall schon mal ein funktionierendes Grundsystem plus Notifications geschenkt. Wenn dir BOOPSI nicht gefällt oder nicht nutzbar ist, dann solltest du aber auch mal nachvollziehbare Gründe anführen warum genau du BOOPSI nicht verwenden kannst/willst. Oder geht es einfach wieder nur um deine übliche "mit dem Kopf durch die Wand und ich mache alles selbst und besser als alle anderen" Mentalität? Dann hast du definitiv ein größeres Problem... Generell wäre was die Verwaltung der Instanzdaten angeht auch mal ein Blick in intuition/classes.h angeraten. Da steht mehr oder weniger ausführlich drin (man muß halt etwas nachdenken!), wie die Instanzdaten der einzelnen Objekte in Bezug auf ihre Klassen- und Subklassenabstammung verwaltet werden. Es braucht auf jeden Fall keine Klasse die Struktur der Instanzdaten der Mutterklasse zu kennen. Zum Abfragen und Manipulieren von Attributen (auch der übergeordneten Klassen) gibt es Get/SetAttrs() und DoSuperMethod(). Damit ist dann alles gekapselt und kann auch beliebig durch Subclassing erweitert und ersetzt werden. [ - Antworten - Zitieren - Direktlink - ] |
23.12.2010, 18:18 Uhr Thore Posts: 2266 Nutzer |
Da er in Assembler programmiert, gibt es ja kein echtes OOP. Aber wer so ein GUI System bauen will braucht Verständnis für Klassen, Subklassen und Event-, bzw Messagehandling. Deshalb sagte ich mal an anderer Stelle, einmal die RKMs durchackern und dann die Fragen stellen In so einem Projekt lernst du es, aber versuch mal selbst Dinge so rauszufinden. Als ich programmieren gelernt hab, gabs noch kein Internet für die Masse, da musste man sich anderweitig helfen Viel Glück und Erfolg für Dein Projekt. [ - Antworten - Zitieren - Direktlink - ] |
23.12.2010, 22:12 Uhr AGSzabo Posts: 1663 Nutzer |
Danke an alle und frohe Weihnachten! :-) -- Sam mini os4.1 upd. 2 / e-uae 39bb2 / A4000D 3.0 & 3.9 2mbchip 8mbfast Ariadne_II ide DVD und HD / A500 3.1 (mkick) adide 50mb / Athlon ii X2 Ubuntu Linux [ Dieser Beitrag wurde von AGSzabo am 23.12.2010 um 22:13 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
29.12.2010, 14:51 Uhr Holger Posts: 8116 Nutzer |
Zitat: Zitat:Hier will ich doch mal einhaken und darauf hinweisen, dass Du ein OOP-System propagierst, dass so in der Praxis ziemlich unüblich ist. Typischerweise haben alle Instanzen einer Klasse dieselben Methoden, weshalb es eine ziemliche Speicherverschendung wäre, deren Funktionspointer in jeder Instanz vorzuhalten. Deshalb gibt es, sofern man späte Bindung verwendet, zur Laufzeit sehr wohl eine Klasse in der Form von Daten, die mindestens die Funktionstabelle enthält. Diese enthält auch alle Funktionen der Superklasse, die allerdings auf andere Implementierungen zeigen können. Deshalb benötigt die Klasse auch einen Zeiger auf die Superklasse, falls eine Implementierung explizit die Funktion der Superklasse aufrufen will. Wenn man allerdings keine späte Bindung verwenden will, braucht man überhaupt keine Funktionspointer oder IDs, sondern kann die Methoden wie ganz normale Unterprogramme direkt aufrufen. Zitat:Kann man machen, hat allerdings ziemlich geringe Vorteile. Die Klasse muss ja trotzdem wissen, dass die Superklasse dieses Attribut besitzt. Zitat:BOOPSI zu benutzen setzt mindestens genausoviel Verständnis von OOP voraus. Es zu verstehen, bevor man probiert, sein eigenes System zu implementieren, kann allerdings wirklich von Vorteil sein. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
29.12.2010, 22:09 Uhr Der_Wanderer Posts: 1229 Nutzer |
@Holger Du hast natürlich, wie so oft, Recht, man kann die Pointer auch in der Klasse speichern, wenn man dafür eine Instanz anlegt. Bei vielen und kleinen Objekten ist das wesentlich effizienter, wenn auch etwas aufwendiger. Bei NTUI habe ich das nicht gemacht, da es wenige Methoden sind und der overhead nicht so gross. Dafür spart man sich den Aufwand, die Klasse zu verwalten, und kann leichter "von aussen" in non-OOP Style Methoden subclassen, ähnlich wie SetFunction() für Libraries. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
30.12.2010, 20:49 Uhr AGSzabo Posts: 1663 Nutzer |
@Holger: > Deshalb gibt es, sofern man späte Bindung verwendet, zur Laufzeit sehr wohl eine Klasse in der Form von Daten, die mindestens die Funktionstabelle enthält. Diese enthält auch alle Funktionen der Superklasse, die allerdings auf andere Implementierungen zeigen können. Deshalb benötigt die Klasse auch einen Zeiger auf die Superklasse, falls eine Implementierung explizit die Funktion der Superklasse aufrufen will. Das ist genau die art von inside infos die ich möchte. danke Bei mir können Klassen zB auch ihr eigenen konfigurationsdaten halten. es gibt auch einen speziellen funktionspointer mittels dem sich ein beispiel gadget(s) zur demonstration im ox-info programm anlegen lässt. außerdem haben klassen ihnenen eigene initialisierungsroutinen. -- Sam mini os4.1 upd. 2 / e-uae 39bb2 / A4000D 3.0 & 3.9 2mbchip 8mbfast Ariadne_II ide DVD und HD / A500 3.1 (mkick) adide 50mb / Athlon ii X2 Ubuntu Linux [ Dieser Beitrag wurde von AGSzabo am 30.12.2010 um 20:50 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
04.01.2011, 16:14 Uhr Holger Posts: 8116 Nutzer |
Zitat:Du musst dann ja jede einzelne Instanz patchen, wenn Du eine Funktion in einer Subklasse überschreiben will. Und wenn die neue Funktion die ursprüngliche aufrufen will (super-call), musst Du für den Funktionspointer extra Platz in der Instanz reservieren. Ob das wirklich einfacher ist? -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
1 -2- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > wie programmiert man "vererbung" | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |