Liebe Gäste des Forums
Danke, dass ihr euch hier auf dem inoffiziellen Windev-Forum umschaut. Hier werden Tipps und Hinweise zu der von PC-Soft angebotenen Software Windev besprochen.
Windev ist eine leistungsstarke, sehr umfangreiche Entwicklersoftware für Webseiten, Handys und Rechner verschiedener Betriebssysteme. Mehr unter http://www.windev.com

Zuweisungen von Klassen

Alle Themen rund um die Erstellung von Programmen
FDominicus
Junior Member
Beiträge: 21
Registriert: 9. Mai 2015, 08:19

Re: Zuweisungen von Klassen

Beitrag von FDominicus » 3. Juli 2017, 13:16

Nun ich habe genau das gefunden was funktioniert (als einziges)
AClass is a Class

END

PROCEDURE Constructor()


PROCEDURE Destructor()


PROCEDURE run()
Trace("AClass.run")



Dann die BClass

BClass is a Class
inherits AClass
END

PROCEDURE Constructor()


PROCEDURE Destructor()


// Redefinition of AClass.run method
PROCEDURE run()
Trace("BClass.run")


Nun kann ich zumindest diese einem anderen Objekt zuwweisen:
oTest is object dynamic
oTest = new AClass()
oTest.run()
oTest = new BClass()
oTest.run()

Genau das ergibt zumindest die richtigen Ausgaben. Und vor allem kann ich oTest AClass und BClass zuweisen.

Was ich will ist ganz klar. Ich implementiere einen Algorithmus. In diesem kann ich dann die einzelnen Prozeduren so überschreiben, daß es für ein bestimmes Objekt paßt. Bei mir aktuell geht es um die Kommunikation mit einer Waage. Eine Systec Waage hat ein anderes Programmiermodell als eine Wöhrle. Ich kann aber die Gemeinsamkeiten in einer Oberklasse herausarbeiten in dieser wird dann je nach aktuelle Waage eben das Systec oder Wöhrle Protokoll abgespult und das geht nur auf die oben angeführte Weise. Variant kann man dafür anscheinend nicht benutzen.

Offensichtlich geht es auch mit oAClass is Aclass dynamic. So das W-Language Zauberwort scheint hier dynamic zu sein....

Lewi
Member
Beiträge: 74
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Kontaktdaten:

Re: Zuweisungen von Klassen

Beitrag von Lewi » 3. Juli 2017, 18:41

Eine Variable als 2x als Objekt zu deklarieren ohne das sie auf "null" gesetzt wird, halte ich persönlich für einen schlechten Programmstil und es kann im Weiten zu "Speicher-Lecks" führen. In C z.B. sollte ein Objekt mit ::Delete gelöscht werden - damit der Speicherbereich durch den Garbage-Colector wieder frei gegeben wird (Bereinigung des Stacks bzw, Heaps)- um dann die gleiche Variable auf ein anderes Objekt zu referenzieren. Dies gilt insbesondere, wenn mit dynamischen Arrays gearbeitet wird.

In WinDev würde ich in diesem Sinne vorgehen und ein

Code: Alles auswählen

oTest = NULL 
einfügen.

Mir ist immer noch nicht deutlich geworden, warum die OOP-Fähigkeiten von WinDev "armselig" sind. Dein angeführtes Beispiel ist diesbezüglich nicht schlüssig und auch "kontraproduktiv".

Gruß, Olaf

FDominicus
Junior Member
Beiträge: 21
Registriert: 9. Mai 2015, 08:19

Re: Zuweisungen von Klassen

Beitrag von FDominicus » 10. Juli 2017, 10:08

Nun ich habe geschrieben was das "Zauberwort" war: dynamic. Damit bekomme ich genau was ich in anderen OO-Sprachen auch bekomme. Das war mir aber so nicht ersichtlich. Hätte es aber sein können den in C ++ ist es eben auch ein Unterschiede ob man Class * pointerToClass hat oder nicht. Dynamic ist dafür offensichtlich der Name in W-Language.

Und das macht nun Polymorphismus und polymorphe Zuweisungen möglich....

FDominicus
Junior Member
Beiträge: 21
Registriert: 9. Mai 2015, 08:19

Re: Zuweisungen von Klassen

Beitrag von FDominicus » 10. Juli 2017, 10:19

Lewi hat geschrieben:Eine Variable als 2x als Objekt zu deklarieren ohne das sie auf "null" gesetzt wird, halte ich persönlich für einen schlechten Programmstil und es kann im Weiten zu "Speicher-Lecks" führen. In C z.B. sollte ein Objekt mit ::Delete gelöscht werden - damit der Speicherbereich durch den Garbage-Colector wieder frei gegeben wird (Bereinigung des Stacks bzw, Heaps)- um dann die gleiche Variable auf ein anderes Objekt zu referenzieren. Dies gilt insbesondere, wenn mit dynamischen Arrays gearbeitet wird.

In WinDev würde ich in diesem Sinne vorgehen und ein

Code: Alles auswählen

oTest = NULL 
einfügen.

Mir ist immer noch nicht deutlich geworden, warum die OOP-Fähigkeiten von WinDev "armselig" sind. Dein angeführtes Beispiel ist diesbezüglich nicht schlüssig und auch "kontraproduktiv".

Gruß, Olaf
Ich denke die W-Language hat einen Garbage Collector, delete ist für spezielle "Aufräumaktionen", ist aber nach meinem Verständnis nicht nötig es explizit aufzurufen. Definitiv eine der großen Vorteile der W-Language. Sie ist halt schon speziell, m..E. war es gar nicht nötig die W-Language zu erfinden. Da hätten andere existierende durchaus schon gereicht. Ich bin jetzt aber erst mal beruhigt, weil man W-Language doch als "vernünftige" OO-Sprache benutzen kann ohne die Assignments zwischen Vorgänger und Nachfolger wäre es der eine Mist gewesen und eine Mogelpackung. Eine OO-Sprache muß das haben.

Antworten