einmalige Variable in Superklasse [ERLEDIGT]
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
einmalige Variable in Superklasse [ERLEDIGT]
Hi,
mir fällt kein besserer Titel ein.
Ich komme nicht weiter, weil ich mich sicherlich wieder zu sehr verbissen habe in das Problem.
Ich habe meine "berühmte" Datenbankklasse, von der jedes Objekt erbt, wie eine Datenbank zu behandeln ist (kurzgefasst)
Jetzt ist es ja eine feine Sache, jedes erzeugte Objekt in ein Array zu schreiben, um dann über Aeval das Array zu durchlaufen und z.B. dann alle Objekte dazu zu bewegen, ihre Db zu öffnen, oder zu schließen.
So, bis hierher ist alles kein Problem. Jetzt habe ich mir Gedanken darüber gemacht, dass es ja wesentlich einfacher sein könnte innerhalb der Superklasse, beim Öffnen einer DB auch direkt das entsprechende Objekt in ein Array zu schreiben, damit ich es nicht jedesmal im Standardquelltext machen muß.
Leider kriege ich es jetzt nicht auf die Reihe, eine Var als Array in der Superklasse zu erzeugen, die nur 1x deklariert wird, wenn die Superklasse das 1. Mal aufgerufen wird um dann bei jedem DB Öffnen das jeweilige Objekt in das Array zu schreiben.
Das müßte doch irgendwie gehen?
Ich habe immer nur eine Var vom Array, für jedes Objekt, dass ich bilde und in dem steht nur das jeweilige Objekt. Ich brauche aber alle Objekte um sie an zentraler Stelle 1x aufzurufen, wenn es erforderlich ist.
Wo liegt mein Knick in der Hirnwindung?
Ach so, mit CLASS VAR und CLASS METHOD initclass habe ich es ausprobiert, aber es klappt nicht.
mir fällt kein besserer Titel ein.
Ich komme nicht weiter, weil ich mich sicherlich wieder zu sehr verbissen habe in das Problem.
Ich habe meine "berühmte" Datenbankklasse, von der jedes Objekt erbt, wie eine Datenbank zu behandeln ist (kurzgefasst)
Jetzt ist es ja eine feine Sache, jedes erzeugte Objekt in ein Array zu schreiben, um dann über Aeval das Array zu durchlaufen und z.B. dann alle Objekte dazu zu bewegen, ihre Db zu öffnen, oder zu schließen.
So, bis hierher ist alles kein Problem. Jetzt habe ich mir Gedanken darüber gemacht, dass es ja wesentlich einfacher sein könnte innerhalb der Superklasse, beim Öffnen einer DB auch direkt das entsprechende Objekt in ein Array zu schreiben, damit ich es nicht jedesmal im Standardquelltext machen muß.
Leider kriege ich es jetzt nicht auf die Reihe, eine Var als Array in der Superklasse zu erzeugen, die nur 1x deklariert wird, wenn die Superklasse das 1. Mal aufgerufen wird um dann bei jedem DB Öffnen das jeweilige Objekt in das Array zu schreiben.
Das müßte doch irgendwie gehen?
Ich habe immer nur eine Var vom Array, für jedes Objekt, dass ich bilde und in dem steht nur das jeweilige Objekt. Ich brauche aber alle Objekte um sie an zentraler Stelle 1x aufzurufen, wenn es erforderlich ist.
Wo liegt mein Knick in der Hirnwindung?
Ach so, mit CLASS VAR und CLASS METHOD initclass habe ich es ausprobiert, aber es klappt nicht.
Zuletzt geändert von Manfred am Fr, 12. Mär 2010 17:24, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Moin Manfred,
ich weiß nicht, ob ich Dich mal wieder nicht verstehe...
Aber mit CLASS VAR muß es klappen - zumindest hast Du dann eine Variable (z.B. Dein Array), das in allen Subklassen identische Werte enthält!
Viele Grüße,
Martin
ich weiß nicht, ob ich Dich mal wieder nicht verstehe...
Aber mit CLASS VAR muß es klappen - zumindest hast Du dann eine Variable (z.B. Dein Array), das in allen Subklassen identische Werte enthält!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
hatte ich ja auch so gedacht. Aber irgendwie ist dem nicht so. Ich finde aber meinen Denkfehler nicht.
Hier ein paar Zeilen, vielleicht siehst DU ja schon was?
bei der Instanziierung von objekt1 und objekt2, ist das der Fall. Es wird nur einmal die initclass aufgerufen.
Wenn ich dann aadd(::adb, self) mach in der datenbankklasse, dann sind beide drin. (natürlich als {Test,test})
Wenn ich nun aber objekt3 erzeuge, dann wird aDb wieder initialisiert und somit geleert und danach steht dann über Aadd() nur das Objekt3 drin und nicht 1+2+3
hatte ich ja auch so gedacht. Aber irgendwie ist dem nicht so. Ich finde aber meinen Denkfehler nicht.
Hier ein paar Zeilen, vielleicht siehst DU ja schon was?
Code: Alles auswählen
CLASS datenbank
CLASS VAR aDb
CLASS METHOD initclass
ENDCLASS
********************
METHOD CLASS datenbank:initclass()
::aDb := {}
RETURN self
CLASS test FROM datenbank
ENDCLASS
CLASS test2 FROM datenbank
ENDCLASS
objekt1 := test():new()
objekt2 := test():new()
objekt3 := test2():new()
Wenn ich dann aadd(::adb, self) mach in der datenbankklasse, dann sind beide drin. (natürlich als {Test,test})
Wenn ich nun aber objekt3 erzeuge, dann wird aDb wieder initialisiert und somit geleert und danach steht dann über Aadd() nur das Objekt3 drin und nicht 1+2+3
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Jaha! Kein Wunder, objekt1 und objekt2 sind Subklassen von Test und objekt3 ist eine Subklasse von Test2.
Somit kennen objekt1 und objekt2 eine gemeinsame Variable und objekt3 eine andere.
Würden alle drei Objekte von datenbank direkt abstammen (oder von test bzw. test2), dann würden alle auf einer Variablen arbeiten.
Da ist eine Hierarchieebene "zu viel" drin - würde ich jetzt mal sagen...
Was passiert denn, wenn Du test2 von test ableitest?
Viele Grüße,
Martin
Somit kennen objekt1 und objekt2 eine gemeinsame Variable und objekt3 eine andere.
Würden alle drei Objekte von datenbank direkt abstammen (oder von test bzw. test2), dann würden alle auf einer Variablen arbeiten.
Da ist eine Hierarchieebene "zu viel" drin - würde ich jetzt mal sagen...
Was passiert denn, wenn Du test2 von test ableitest?
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
dass hatte ich mir auch schon gedacht. Aber es muß doch irgendeine Möglichkeit geben, mein Vorhaben zu realisieren. Naja, ich kann das Array in eine Systemklasse platzieren, die in jedem Programm vorhanden ist. Ich dachte halt nur, dass die DAtenbankklasse es ja eigentlich wissen müßte und somit dafür geeignet wäre. Gibt es da einen anderen Trick?
dass hatte ich mir auch schon gedacht. Aber es muß doch irgendeine Möglichkeit geben, mein Vorhaben zu realisieren. Naja, ich kann das Array in eine Systemklasse platzieren, die in jedem Programm vorhanden ist. Ich dachte halt nur, dass die DAtenbankklasse es ja eigentlich wissen müßte und somit dafür geeignet wäre. Gibt es da einen anderen Trick?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
wie gesagt - lass' Deine Klasse test2 nicht von datenbank erben, sondern von test.
Viele Grüße,
Martin
wie gesagt - lass' Deine Klasse test2 nicht von datenbank erben, sondern von test.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
ich sage mal so ganz locker: Das geht nicht. Ich bekomme sonst alle Werte, die test hat auch in test2. Und das kann ich nicht gebrauchen.
Außerdem sind es viele Klassen. Und nicht alle werden immer benötigt. somit müßte schon ganz zu Anfang feststehen, welche immer benötigt wird und das ist sehr umständlich.
Ich wollte auch nur wissen, ob ich irgendwas falsch gemacht habe. Ich werde die Systemklasse nehmen und das Array da rein bauen.
ich sage mal so ganz locker: Das geht nicht. Ich bekomme sonst alle Werte, die test hat auch in test2. Und das kann ich nicht gebrauchen.
Außerdem sind es viele Klassen. Und nicht alle werden immer benötigt. somit müßte schon ganz zu Anfang feststehen, welche immer benötigt wird und das ist sehr umständlich.
Ich wollte auch nur wissen, ob ich irgendwas falsch gemacht habe. Ich werde die Systemklasse nehmen und das Array da rein bauen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
'türlich geht das! Du setzt die Werte doch jetzt auch in test und in test2!
Test2 hat erst mal die Werte von test - aber die kannst Du doch anpassen!
Viele Grüße,
Martin
'türlich geht das! Du setzt die Werte doch jetzt auch in test und in test2!
Test2 hat erst mal die Werte von test - aber die kannst Du doch anpassen!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hm,
ich denke ich weiß was Du meinst. Ich lasse eine Klasse von Datenbank erben und dann alle anderen von der einen Klasse, die von Datenbank geerbt hat. Jedesmal wenn ich eine Klasse erzeuge, dann überschreibe ich auch die Werte, die in der "Hauptklasse" stehen, die von Datenbank erbt. Somit wäre es dann so, als wenn jede Klasse getrennt von Datenbank erbt.
Habe ich das so richtig verstanden? Also wäre das dann die Mehrfachvererbung....
Das hieße dann aber auch, ich bräuchte Werte, die in jeder Klasse neu gesetzt werden und die auch noch innerhalb jeder Klasse gleich sind auch nur 1x in der "Hauptklasse" zu setzen.
ich denke ich weiß was Du meinst. Ich lasse eine Klasse von Datenbank erben und dann alle anderen von der einen Klasse, die von Datenbank geerbt hat. Jedesmal wenn ich eine Klasse erzeuge, dann überschreibe ich auch die Werte, die in der "Hauptklasse" stehen, die von Datenbank erbt. Somit wäre es dann so, als wenn jede Klasse getrennt von Datenbank erbt.
Habe ich das so richtig verstanden? Also wäre das dann die Mehrfachvererbung....
Das hieße dann aber auch, ich bräuchte Werte, die in jeder Klasse neu gesetzt werden und die auch noch innerhalb jeder Klasse gleich sind auch nur 1x in der "Hauptklasse" zu setzen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
Viele Grüße,
Martin
Ja!Manfred hat geschrieben:Habe ich das so richtig verstanden?
Nein! Mehrfachvererbung ist, wenn eine Klasse von zwei (oder noch mehr Klassen) erbt...Manfred hat geschrieben:Also wäre das dann die Mehrfachvererbung....
Ja.Manfred hat geschrieben:Das hieße dann aber auch, ich bräuchte Werte, die in jeder Klasse neu gesetzt werden und die auch noch innerhalb jeder Klasse gleich sind auch nur 1x in der "Hauptklasse" zu setzen.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
also Mehrfachvererbung wäre nicht:
sondern
also Mehrfachvererbung wäre nicht:
Code: Alles auswählen
class test from haupt
endclass
class test from test
endclass
Code: Alles auswählen
class test
endclass
class test2 from test, haupt
endclass
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Bau dir doch eine Klasse, in der du bei Init alle Klassenstrukturen des Programms übergibst und als Datenbankserver öffnest. Alle Server werden in ::aDb gespeichert. noch eine Methode, die dir das Serverobject zurückgibt . Die Klasse legst du global ab und dann läuft die Sache ohne 150 Unterklassen.Manfred hat geschrieben:Hi Martin,
dass hatte ich mir auch schon gedacht. Aber es muß doch irgendeine Möglichkeit geben, mein Vorhaben zu realisieren. Naja, ich kann das Array in eine Systemklasse platzieren, die in jedem Programm vorhanden ist. Ich dachte halt nur, dass die DAtenbankklasse es ja eigentlich wissen müßte und somit dafür geeignet wäre. Gibt es da einen anderen Trick?
Viele Grüße
Stevie
Stevie
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
ist wohl noch etwas früh am Tag. Ich verstehe zwar was Du meinst, aber nicht wie es gemacht werden sollte.
ist wohl noch etwas früh am Tag. Ich verstehe zwar was Du meinst, aber nicht wie es gemacht werden sollte.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Na gut, so geht das unter Xclass.Manfred hat geschrieben:Hi,
ist wohl noch etwas früh am Tag. Ich verstehe zwar was Du meinst, aber nicht wie es gemacht werden sollte.
Aber bei Xbase hatten wir das so, dass wir alles nötige (Name,Index und sowas) an die Klasse übergeben haben (ein Array mit allen Datenbanken) und dann in unserer open_db sämtliche angegebenen geöffnet. Aber ich denk mal, wenn man das ein wenig anpasst, sollte das auch gehen.
Viele Grüße
Stevie
Stevie
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Im MOment regel ich das so, dass ich eine DAtenbankklasse habe, die weiß wie man öffnet, schließt, Felder einliest/speichert usw.
Dann gibt es für jede unterschiedliche DB eine Extraklasse, in der dann die Dateistruktur, die Indexstruktur usw. steht. Ich wüßte jetzt nicht wie das zu vereinfachen ginge, ohne den Überblock zu verlieren. Zumal es m.E. den Vorteil bringt, die DAtenbankklasse bleobt für alle gleich, aber von projekt zu Projekt müssen nur die EInzelnen DB Klassen getauscht werden.
Dann gibt es für jede unterschiedliche DB eine Extraklasse, in der dann die Dateistruktur, die Indexstruktur usw. steht. Ich wüßte jetzt nicht wie das zu vereinfachen ginge, ohne den Überblock zu verlieren. Zumal es m.E. den Vorteil bringt, die DAtenbankklasse bleobt für alle gleich, aber von projekt zu Projekt müssen nur die EInzelnen DB Klassen getauscht werden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Rekursionen-Architekt
- Beiträge: 164
- Registriert: Mo, 09. Jan 2006 17:06
- Wohnort: Paderborn
- Hat sich bedankt: 2 Mal
- Kontaktdaten:
Hallo Manfred,
ich habe zwar noch nie mit classvars und initclass() gearbeitet, hab' mir das aber mal in der Doku angesehen:
Ich würde mal folgendes versuchen:
Hans
ich habe zwar noch nie mit classvars und initclass() gearbeitet, hab' mir das aber mal in der Doku angesehen:
Wenn ich das richtig verstehe, wird also die initClass-Methode der Superklasse aufgerufen, wenn ein Objekt der Subklasse das erste mal neu erzeugt wird. Das bedeutet, dass in Deinem Beispiel das ::aDB - Array beim test2():nwew() in datenbank:initclass() wieder leer gemacht wird.Hinweis: ist :initClass() in einer Subklasse nicht deklariert, so wird implizit die :initClass() Methode der Superklasse ausgeführt, sobald das Klassenobjekt der Subklasse erzeugt ist. Falls :initClass() deklariert und implementiert ist, muß darin die :initClass() Methode der Superklasse aufgerufen werden.
Ich würde mal folgendes versuchen:
Code: Alles auswählen
METHOD CLASS datenbank:initclass()
IF ::aDb == NIL
::aDb := {}
ENDIF
RETURN self
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
wenn ich dich bisher richtig verstanden habe, hast du eine DBF Basisklasse von der du Instanzen erzeugst, die jeweils eine offene DBF representieren. Somit müsste doch aDB für jede DBF einmalig in jeder INSTANZ sein oder ?
Wenn du aber eine CLASS VAR nutzt, hast du ein aDB für alle Instanzen deiner Klasse - und wie im obigen Beispiel auch noch Nebenwirkungen
Willst du wirklich genau ein aDB mit immer gleichem Inhalt für alle Instanzen (DBFs) deiner Klasse haben ?
wenn ich dich bisher richtig verstanden habe, hast du eine DBF Basisklasse von der du Instanzen erzeugst, die jeweils eine offene DBF representieren. Somit müsste doch aDB für jede DBF einmalig in jeder INSTANZ sein oder ?
Wenn du aber eine CLASS VAR nutzt, hast du ein aDB für alle Instanzen deiner Klasse - und wie im obigen Beispiel auch noch Nebenwirkungen
Willst du wirklich genau ein aDB mit immer gleichem Inhalt für alle Instanzen (DBFs) deiner Klasse haben ?
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
Ja, so sieht es aus.brandelh hat geschrieben:Hallo Manfred,
wenn ich dich bisher richtig verstanden habe, hast du eine DBF Basisklasse von der du Instanzen erzeugst, die jeweils eine offene DBF representieren. Somit müsste doch aDB für jede DBF einmalig in jeder INSTANZ sein oder ?
Ja, so ist es, aber das will ich auch noch nicht haben. Wobei ich jetzt die Aussage: Nebenwirkung nicht ganz einsortieren kann.Wenn du aber eine CLASS VAR nutzt, hast du ein aDB für alle Instanzen deiner Klasse - und wie im obigen Beispiel auch noch Nebenwirkungen
Nein, ich möchte ein aDb haben, in dem ALLE Objekte stehen, die von der Basisklasse erben. Das ist aber nicht der Fall. Wenn ich z.B. X verschiedene Instanzen bilde, dann habe ich auch X verschiedene aDb mit jeweils 1 Objekt. Das bringt mich nicht weiter.Willst du wirklich genau ein aDB mit immer gleichem Inhalt für alle Instanzen (DBFs) deiner Klasse haben ?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: einmalige Variable in Superklasse
hi,
dir fehlt eine :AddItem Methode / Class
üblicherweise, wenn man von einem XbPart ausgeht, ist es ja als einzelnes
Object gedacht. Eine XbpPushbutton Class erzeugt einen Pushbutton.
Wenn du aber eine Gruppe von Pushbutton hättes z.b. in einer Listbox
dann müsstes du also eine Class haben für alle deine einzelnen Buttons.
Diese Class hat nun eine Methode :AddItem die ein neuen Button :create()
und verwaltet nun in seiner Class in einen Array alle deine "SubClass"en.
zusammen mit der letzten Antwort von Hans denke ich nun :Manfred hat geschrieben: Leider kriege ich es jetzt nicht auf die Reihe, eine Var als Array in der Superklasse zu erzeugen, die nur 1x deklariert wird, wenn die Superklasse das 1. Mal aufgerufen wird um dann bei jedem DB Öffnen
dir fehlt eine :AddItem Methode / Class
üblicherweise, wenn man von einem XbPart ausgeht, ist es ja als einzelnes
Object gedacht. Eine XbpPushbutton Class erzeugt einen Pushbutton.
Wenn du aber eine Gruppe von Pushbutton hättes z.b. in einer Listbox
dann müsstes du also eine Class haben für alle deine einzelnen Buttons.
Diese Class hat nun eine Methode :AddItem die ein neuen Button :create()
und verwaltet nun in seiner Class in einen Array alle deine "SubClass"en.
gruss by OHR
Jimmy
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Jimmy,
also eine Extraklasse, die die Objekte aufnimmt?
Das hatte ich auch vermutet. Ich dachte nur es ginge auch anders. Ich hatte die Sache mit dem MDI Fenster zählen, in einem anderen Thread, aber da war es ja so, das immer wieder die gleiche Klasse aufgerufen wird. Und dann habe ich die Möglichkeit eine Var zu nutzen, die nur 1x initialisiert aber immer wieder gefüllt wird. Aber bei verschiedenen DB Klassen, geht das so nicht. Naja, man kann nicht immer gewinnen.
also eine Extraklasse, die die Objekte aufnimmt?
Das hatte ich auch vermutet. Ich dachte nur es ginge auch anders. Ich hatte die Sache mit dem MDI Fenster zählen, in einem anderen Thread, aber da war es ja so, das immer wieder die gleiche Klasse aufgerufen wird. Und dann habe ich die Möglichkeit eine Var zu nutzen, die nur 1x initialisiert aber immer wieder gefüllt wird. Aber bei verschiedenen DB Klassen, geht das so nicht. Naja, man kann nicht immer gewinnen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
jetzt verstehe ich, du willst alle Instanzen in dem Array sammeln.
Martin hat dir einen Hinweis gegeben, ob der reicht weiß ich aber nicht.
In der INIT CLASS darfst du nicht einfach:
sondern per Abfrage sicherstellen, dass es nur einmal zugewiesen wird:
zusätzlich musst du sicherstellen, dass immer das gleiche aDB genutzt wird, da bin ich jetzt überfragt, ob die obige Lösung reicht, wahrscheinlich musst du auch grundsätzlich die gleiche Basisklasse verwenden, oder immer auf das Objekt von dieser zugreifen ... probieren
Außerdem musst du natürlich eine Methode einbauen, die das aktuelle SELF in aDB einträgt, das meinte Jimmy. Ähnlich wie du ein Menüeintrag in das Menü hängst.
Hier würde sich sicher eine CLASS METHOD AddDBF oder AddSelf etc. anbieten.
jetzt verstehe ich, du willst alle Instanzen in dem Array sammeln.
Martin hat dir einen Hinweis gegeben, ob der reicht weiß ich aber nicht.
In der INIT CLASS darfst du nicht einfach:
Code: Alles auswählen
aDB := {} // immer neu erzeugen
Code: Alles auswählen
if aDB == NIL
aDB := {}
endif
Außerdem musst du natürlich eine Methode einbauen, die das aktuelle SELF in aDB einträgt, das meinte Jimmy. Ähnlich wie du ein Menüeintrag in das Menü hängst.
Hier würde sich sicher eine CLASS METHOD AddDBF oder AddSelf etc. anbieten.
Code: Alles auswählen
CLASS METHOD ...:AddDBF(oSelf)
if 0=ascan(::aDB,oSelf)
aadd(::aDB,oSelf)
endif
...
METHOD AbgeleiteteClasse:INIT(...)
::super:...:...:AddDBF(Self)
...
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
werde ich mir mal zu Gemüte führen.
werde ich mir mal zu Gemüte führen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Rekursionen-Architekt
- Beiträge: 417
- Registriert: Mo, 17. Sep 2007 18:20
- Wohnort: Senftenberg
- Kontaktdaten:
Ich schon.Manfred hat geschrieben:Ich wüßte jetzt nicht wie das zu vereinfachen ginge, ohne den Überblock zu verlieren.
Du übergibst der KLasse beim Initialisieren ein zweidimensionales Array.
aDb:={;
{"Dbfname1","Indexname",;
{;
{"Feld1",Feldstruktur},;
{"Feld2",Feldstruktur};
},;
{Indexeinstellungen};
},;
{"Dbfname2","Indexname",;
{;
{"Feld1",Feldstruktur},;
{"Feld2",Feldstruktur};
},;
{Indexeinstellungen};
};
}
Übersichtlich und sicher
Viele Grüße
Stevie
Stevie
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
hi,
daraus eine "Ober Class" und fügst eine Methode :AddDBF ein. Jedes
der :AddDBF Item nimmst du dann in eine Array als Element auf und
greifst nun "von oben" auf deine beiden Class(en) zu.
Aus diesem Grund sollten die beiden "unteren" Class(en) auch nur die
"Grundeigenschaften" haben damit man die später auch noch für andere
solchte Construktionen nutzen kann was ja das schöne an OOP ist.
Ja genau das meine ich. Du nimmst deine beiden Class(en) und machstManfred hat geschrieben: also eine Extraklasse, die die Objekte aufnimmt?
daraus eine "Ober Class" und fügst eine Methode :AddDBF ein. Jedes
der :AddDBF Item nimmst du dann in eine Array als Element auf und
greifst nun "von oben" auf deine beiden Class(en) zu.
Aus diesem Grund sollten die beiden "unteren" Class(en) auch nur die
"Grundeigenschaften" haben damit man die später auch noch für andere
solchte Construktionen nutzen kann was ja das schöne an OOP ist.
gruss by OHR
Jimmy
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
das hatte ich aber anders geplant. Mit Deiner Oberklasse habe ich aber noch Verständnisschwierigkeiten. Hilf mir bitte kurz auf die Sprünge, wie das auszusehen hat.
das hatte ich aber anders geplant. Mit Deiner Oberklasse habe ich aber noch Verständnisschwierigkeiten. Hilf mir bitte kurz auf die Sprünge, wie das auszusehen hat.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!