Zuweisungen von Klassen
-
- Member
- Beiträge: 72
- Registriert: 9. Mai 2015, 08:19
Zuweisungen von Klassen
Zu meinen Entsetzen habe ich festgestellt: Ich kann einem Elternobjekt kein Kindobjekt zuweisen.
Beispiel:
AClass is a Class
BClass is a Class
inherits Aclass
nun geht ein
AClass = new BClass nicht
Ich kenne sonst keine Programmiersprache wo diese Zuweisung unzulässig wäre. Den einzigen Weg da herum habe ich über Variant gefunden.
Ist das korrekt oder habe ich etwas bei der WLanguage übersehen?
Beispiel:
AClass is a Class
BClass is a Class
inherits Aclass
nun geht ein
AClass = new BClass nicht
Ich kenne sonst keine Programmiersprache wo diese Zuweisung unzulässig wäre. Den einzigen Weg da herum habe ich über Variant gefunden.
Ist das korrekt oder habe ich etwas bei der WLanguage übersehen?
-
- Member
- Beiträge: 72
- Registriert: 9. Mai 2015, 08:19
Re: Zuweisungen von Klassen
Leider ist es noch schlimmer
AClass is Class
m_Element is variant
Element (vValue is variant)
m_Element = vValue
geht nicht wenn man folgendes macht
clClass = new AClass
clClass.Element = new AClass
Was geht ist
clClass.m_Element = new AClass
Das ist nicht schlecht das ist richtig schlecht. Properties kann man so nicht verwenden und man kann keine Lösung objktorientiert aufbauen. Weil die Zuweisungen von Kinderklassen and Elternklassen nicht funktioniert. Das ist unglaublich schlecht....
AClass is Class
m_Element is variant
Element (vValue is variant)
m_Element = vValue
geht nicht wenn man folgendes macht
clClass = new AClass
clClass.Element = new AClass
Was geht ist
clClass.m_Element = new AClass
Das ist nicht schlecht das ist richtig schlecht. Properties kann man so nicht verwenden und man kann keine Lösung objktorientiert aufbauen. Weil die Zuweisungen von Kinderklassen and Elternklassen nicht funktioniert. Das ist unglaublich schlecht....
-
- Site Admin
- Beiträge: 535
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Zuweisungen von Klassen
Ich weiss zu wenig, warum du das so machst. Ich erstelle meine Klassen im Projekt, nicht im Code.
Was du meinst ist die Class inheritance, welche von der angegebenen Klasse erbt und als Subclass erscheint.
https://doc.pcsoft.fr/en-US/?6010007&na ... product=WD
In der Subclass werden nur Neue Elemente definiert, die anderen sind ja von Haus an schon da.
Aber wie gesagt, ich verstehe zu wenig, was du genau machen willt.
Was du meinst ist die Class inheritance, welche von der angegebenen Klasse erbt und als Subclass erscheint.
https://doc.pcsoft.fr/en-US/?6010007&na ... product=WD
In der Subclass werden nur Neue Elemente definiert, die anderen sind ja von Haus an schon da.
Aber wie gesagt, ich verstehe zu wenig, was du genau machen willt.
Re: Zuweisungen von Klassen
Ein Klassenobjekt, egal ob "Local", "Privat" oder "Global, darf in WinDEV nicht den gleichen Namen einer existierenden Klasse haben. Ich sehe hier überhaupt kein Problem und kann damit leben.FDominicus hat geschrieben:Zu meinen Entsetzen habe ich festgestellt: Ich kann einem Elternobjekt kein Kindobjekt zuweisen.
Beispiel:
AClass is a Class
BClass is a Class
inherits Aclass
nun geht ein
AClass = new BClass nicht
Ich kenne sonst keine Programmiersprache wo diese Zuweisung unzulässig wäre. Den einzigen Weg da herum habe ich über Variant gefunden.
Ist das korrekt oder habe ich etwas bei der WLanguage übersehen?
Re: Zuweisungen von Klassen
Deine Aussage ist, mit Verlaub, "bull shit". Dein Beispiel macht für mich auch keinen Sinn, weil die Member-Vartiable durch die Zuweisung widerrum zum Klassenobjekt der selben Klasse wird.FDominicus hat geschrieben:Leider ist es noch schlimmer
AClass is Class
m_Element is variant
Element (vValue is variant)
m_Element = vValue
geht nicht wenn man folgendes macht
clClass = new AClass
clClass.Element = new AClass
Was geht ist
clClass.m_Element = new AClass
Das ist nicht schlecht das ist richtig schlecht. Properties kann man so nicht verwenden und man kann keine Lösung objktorientiert aufbauen. Weil die Zuweisungen von Kinderklassen and Elternklassen nicht funktioniert. Das ist unglaublich schlecht....
Das OOP mit WinDev ganz easy ist, soll Dir nachfolgendes Beispiel veranschaulichen:
Beispiel:
//------------------------------- Filename
Code: Alles auswählen
FileName is a Class
Name is string
Extension is string
Directory is string
END
PROCEDURE Constructor(sFile is string)
Name = fExtractPath(sFile, fFileName)
Directory = fExtractPath(sFile, fDrive + fDirectory)
Extension = fExtractPath(sFile, fExtension)
PROCEDURE Destructor()
RETURN
// Methode "Display", um Datenauzugeben
PROCEDURE Display()
Trace(Name)
Trace(Directory)
Trace(Extension)
RETURN
Code: Alles auswählen
FileInfo is a Class
inherits from FileName // erbt die Klasse "FileName"
FileSize is int
FileCreation is string
FileModify is string
FileAccess is string
END
PROCEDURE Constructor( sFile is string)
Constructor FileName(sFile) // Der Klasse FileName den Dateinamen mitteilen, um dort die Member-Variablen die Daten zuzuweisen
FileSize = fSize(sFile)
FileCreation = fDate(sFile, "", fCreation)
FileAccess = fDate(sFile, "", fAccess)
FileModify = fDate(sFile, "", fModify)
PROCEDURE Destructor()
//Methode Display um Daten FileInfo-Klasse und der geerbten Klasse auszugeben.
PROCEDURE Display()
Ancestor:Display() // oder auch: FileName:Display() möglich
Trace( "FileSize : " + NoSpace(NumToString(FileSize,"10.0FS")) + " Byte")
Trace( "Angelegt am : " + DateToString(FileCreation,"DD.MM.YYYY"))
Trace( "Letzter Zugriff : " + DateToString(FileAccess,"DD.MM.YYYY"))
Trace( "Letze Aktuali.: " + DateToString(FileModify,"DD.MM.YYYY"))
RETURN
Code: Alles auswählen
clSFilePath is FileInfo(SLE_File..Value)
clSFilePath:Display()
Olaf
-
- Member
- Beiträge: 72
- Registriert: 9. Mai 2015, 08:19
Re: Zuweisungen von Klassen
Hast Du das Beispiel ausprobiert? Das ist ein Polymorphes Assgignment. Und wenn Du meinst es klappt bei Dir dann erkläre mir wie Du es hinbekommst.Lewi hat geschrieben:Deine Aussage ist, mit Verlaub, "bull shit". Dein Beispiel macht für mich auch keinen Sinn, weil die Member-Vartiable durch die Zuweisung widerrum zum Klassenobjekt der selben Klasse wird.FDominicus hat geschrieben:Leider ist es noch schlimmer
AClass is Class
m_Element is variant
Element (vValue is variant)
m_Element = vValue
geht nicht wenn man folgendes macht
clClass = new AClass
clClass.Element = new AClass
Was geht ist
clClass.m_Element = new AClass
Das ist nicht schlecht das ist richtig schlecht. Properties kann man so nicht verwenden und man kann keine Lösung objktorientiert aufbauen. Weil die Zuweisungen von Kinderklassen and Elternklassen nicht funktioniert. Das ist unglaublich schlecht....
Das OOP mit WinDev ganz easy ist, soll Dir nachfolgendes Beispiel veranschaulichen:
Beispiel:
//------------------------------- Filename//------------------------------- FileInfoCode: Alles auswählen
FileName is a Class Name is string Extension is string Directory is string END PROCEDURE Constructor(sFile is string) Name = fExtractPath(sFile, fFileName) Directory = fExtractPath(sFile, fDrive + fDirectory) Extension = fExtractPath(sFile, fExtension) PROCEDURE Destructor() RETURN // Methode "Display", um Datenauzugeben PROCEDURE Display() Trace(Name) Trace(Directory) Trace(Extension) RETURN
Hier nun ein Test, um alle Dateinformation für ein Datei in einem Edietifeld "SLE_FILE" anzuzeigen, einscließlich der Daten der Klasse FileName:Code: Alles auswählen
FileInfo is a Class inherits from FileName // erbt die Klasse "FileName" FileSize is int FileCreation is string FileModify is string FileAccess is string END PROCEDURE Constructor( sFile is string) Constructor FileName(sFile) // Der Klasse FileName den Dateinamen mitteilen, um dort die Member-Variablen die Daten zuzuweisen FileSize = fSize(sFile) FileCreation = fDate(sFile, "", fCreation) FileAccess = fDate(sFile, "", fAccess) FileModify = fDate(sFile, "", fModify) PROCEDURE Destructor() //Methode Display um Daten FileInfo-Klasse und der geerbten Klasse auszugeben. PROCEDURE Display() Ancestor:Display() // oder auch: FileName:Display() möglich Trace( "FileSize : " + NoSpace(NumToString(FileSize,"10.0FS")) + " Byte") Trace( "Angelegt am : " + DateToString(FileCreation,"DD.MM.YYYY")) Trace( "Letzter Zugriff : " + DateToString(FileAccess,"DD.MM.YYYY")) Trace( "Letze Aktuali.: " + DateToString(FileModify,"DD.MM.YYYY")) RETURN
Viele GrüßeCode: Alles auswählen
clSFilePath is FileInfo(SLE_File..Value) clSFilePath:Display()
Olaf
In jeder "objektorientierten" Sprache ist es möglich Nachfolgerklassen Vorgängerklasse zu zuweisen. Und genau das geht nicht. Also definiere eine Klasse
AClass is a Class
END
inherits AClass
END
in einem Window kannst Du schreiben:
clA is AClass
cB is BClass
clA = new BClass
cB = new BClass
Und in jeder vernünftigen OO-Sprache geht. Also zeig mir wie das geht und dann können wir mal über "bull shit "reden.
Die Fehlermeldung ist eindeutig:
Error at line 4 of Click Test_Assignment process.
An object of 'BClass' class cannot be assigned in an object of 'AClass' class.
----- Technical Information -----
Project : ObjectAssignment
WL call:
Process of 'Click Test_Assignment' (Win_Main.Test_Assignment), line 4, thread 0
What happened?
An object of 'BClass' class cannot be assigned in an object of 'AClass' class.
Error code: 2406
Level: fatal error
Dump of the error of 'wd220vm.dll' module (22.0.219.4).
Identifier of detailed information (.err): 2406
Additional Information:
EIT_PILEWL :
Click Test_Assignment (Win_Main.Test_Assignment), line 4
EIT_DATEHEURE : 13/06/2017 10:33:01
EIT_TYPE_WDFILE : <2>
EIT_IDCODE : <18>
Fall es interessiert für was es gut ist: Stelle die eine Prozeur mach_was vor.
mach_was von Klasse A macht was anderes wie das von Klasse B aber alle könnte mit
eine Klasse.mach_was aufgerufen werden und ich bekäme bei einer funktionierenden polymorphen Zuwweisung genau was ich will eine Änderung des Verhaltens einer Klasse
Damit kann man einmal einen Alorithmus implementieren der glech abläuft aber z.B. speziellere Arbeiten für bestimmt Klassen ausführt.
Danke
-
- Member
- Beiträge: 72
- Registriert: 9. Mai 2015, 08:19
Re: Zuweisungen von Klassen
Darum geht es gar nichtLewi hat geschrieben:[
Ein Klassenobjekt, egal ob "Local", "Privat" oder "Global, darf in WinDEV nicht den gleichen Namen einer existierenden Klasse haben. Ich sehe hier überhaupt kein Problem und kann damit leben.
Definiere ein Klasse
AClass is a Class
END
definiere eine abgeleitete Klasse:
BClass is a Class
inherits AClass
END
Definiere in einer Prozedur:
clA is AClass
cB is BClass
clA = new BClass
cB = new BClass
Und dann bekommst Du von WinDev eine Fehlermeldung. Und das ist Mist. Kannst Du gerne mal so in jeder andere OO Sprache machen und wirst sehen, dort klappt es ohne Probleme, und das ist richtig.
-
- Site Admin
- Beiträge: 535
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Zuweisungen von Klassen
Bleibt nett mieinander
Falls dich dieser Umstand stört, melde dies dem Support von PC-Soft. Dazu sind die Leute dort da und du bekommst auch recht schnell Antwort. Du kannst auf französisch oder Englisch schreiben.
Menü Home/Help/Request to technical support.
In deinem Beispiel definerst du clA als ClasseA und cB als Subclass von KlasseA. Die zweite Zuweisung nachher kann meiner Meinung nach nicht viel Sinn machen, da du cB erneut definieren willst, obwohl diese bereits als solche besteht. Die letzte Linie "cB=new BClass" kannst ganz einfach weglassen und du hast bereits das Gewünschte.
Was ich nicht ganz verstehe: wieso schreibst du im Code eine Klasse? Für mich sind Klassen stets Objekte, welche mehrfach verwendet werden können. Daher definiere ich diese ausschliesslich im Projekt.
Falls dich dieser Umstand stört, melde dies dem Support von PC-Soft. Dazu sind die Leute dort da und du bekommst auch recht schnell Antwort. Du kannst auf französisch oder Englisch schreiben.
Menü Home/Help/Request to technical support.
In deinem Beispiel definerst du clA als ClasseA und cB als Subclass von KlasseA. Die zweite Zuweisung nachher kann meiner Meinung nach nicht viel Sinn machen, da du cB erneut definieren willst, obwohl diese bereits als solche besteht. Die letzte Linie "cB=new BClass" kannst ganz einfach weglassen und du hast bereits das Gewünschte.
Was ich nicht ganz verstehe: wieso schreibst du im Code eine Klasse? Für mich sind Klassen stets Objekte, welche mehrfach verwendet werden können. Daher definiere ich diese ausschliesslich im Projekt.
Re: Zuweisungen von Klassen
Die ersten beiden Anweisungen definieren und instanzieren dlA und cV als Klassenobjekte von ACLASS und BClass. Die beiden nachfolgenden Anweisungen sind nicht erforderlich bzw. falsch, da es sich bereits um Klassenobjekte handelt.Definiere in einer Prozedur:
cA is AClass
cB is BClass
cA = new BClass
cB = new BClass
Und dann bekommst Du von WinDev eine Fehlermeldung. Und das ist Mist. Kannst Du gerne mal so in jeder andere OO Sprache machen und wirst sehen, dort klappt es ohne Probleme, und das ist richtig.
Richtig wäre folgendes:
Code: Alles auswählen
cA is dynamic
cB is dynamic
cA = new AClass( sFileName)
cB = new BClass( (sFileName)
- BRANDELH
- Site Admin
- Beiträge: 199
- Registriert: 30. Juni 2010, 14:31
- Wohnort: Germersheim
- Kontaktdaten:
Re: Zuweisungen von Klassen
Hallo miteinander ...
was OO Sprachen alles können hängt sehr von deren Umsetzung und noch mehr von der Herkunft der Entwickler ab.
Wir stammen aus der prozeduralen Welt (dBase, Cli**er, Xbase++ / PowerBasic) und freuen uns über Klassen, mit denen wir Objekte erstellen die uns helfen das zu tun was wir wollen.
Für einen Entwickler der von Smalltalk oder Java kommt sieht die Welt wohl anders aus.
Wie auch immer, muss man sich an die Regeln halten, die die jeweilige Entwicklungsumgebung vorgibt.
Jammern nützt nix. ;-)
Fehler melden manchmal, aber häufig wird das was einer als Fehler ansieht von der Firma als Feature verkauft
https://de.wikipedia.org/wiki/Objektori ... rammierung
https://de.wikipedia.org/wiki/Liste_obj ... ersprachen
was OO Sprachen alles können hängt sehr von deren Umsetzung und noch mehr von der Herkunft der Entwickler ab.
Wir stammen aus der prozeduralen Welt (dBase, Cli**er, Xbase++ / PowerBasic) und freuen uns über Klassen, mit denen wir Objekte erstellen die uns helfen das zu tun was wir wollen.
Für einen Entwickler der von Smalltalk oder Java kommt sieht die Welt wohl anders aus.
Wie auch immer, muss man sich an die Regeln halten, die die jeweilige Entwicklungsumgebung vorgibt.
Jammern nützt nix. ;-)
Fehler melden manchmal, aber häufig wird das was einer als Fehler ansieht von der Firma als Feature verkauft
https://de.wikipedia.org/wiki/Objektori ... rammierung
https://de.wikipedia.org/wiki/Liste_obj ... ersprachen
-
- Member
- Beiträge: 72
- Registriert: 9. Mai 2015, 08:19
Re: Zuweisungen von Klassen
Darum geht es nicht es geht darum, daß man in jeder vernünftigen und brauchbare OO-Sprache eine Nachfolger dem Vorgänger zuweisen kann. Und darauf basieren die meisten Rezepte im GoF Buch. Das geht mit W-Language nicht und das macht Sie zu einer völlig unbrauchbaren OO-Sprache. Und ja der Support hat mir bestätigt, daß die Zuweisung nicht geht und die Begründung war "abenteuerlich". Gegen jedes Konzept einer OO -Sprache. Sogar Visual Basic for Applications kann das.Lewi hat geschrieben:Die ersten beiden Anweisungen definieren und instanzieren dlA und cV als Klassenobjekte von ACLASS und BClass. Die beiden nachfolgenden Anweisungen sind nicht erforderlich bzw. falsch, da es sich bereits um Klassenobjekte handelt.Definiere in einer Prozedur:
cA is AClass
cB is BClass
cA = new BClass
cB = new BClass
Und dann bekommst Du von WinDev eine Fehlermeldung. Und das ist Mist. Kannst Du gerne mal so in jeder andere OO Sprache machen und wirst sehen, dort klappt es ohne Probleme, und das ist richtig.
Richtig wäre folgendes:
Gruß OlafCode: Alles auswählen
cA is dynamic cB is dynamic cA = new AClass( sFileName) cB = new BClass( (sFileName)
-
- Member
- Beiträge: 72
- Registriert: 9. Mai 2015, 08:19
Re: Zuweisungen von Klassen
BRANDELH hat geschrieben:Hallo miteinander ...
was OO Sprachen alles können hängt sehr von deren Umsetzung und noch mehr von der Herkunft der Entwickler ab.
Wir stammen aus der prozeduralen Welt (dBase, Cli**er, Xbase++ / PowerBasic) und freuen uns über Klassen, mit denen wir Objekte erstellen die uns helfen das zu tun was wir wollen.
Für einen Entwickler der von Smalltalk oder Java kommt sieht die Welt wohl anders aus.
Wie auch immer, muss man sich an die Regeln halten, die die jeweilige Entwicklungsumgebung vorgibt.
Jammern nützt nix. ;-)
Fehler melden manchmal, aber häufig wird das was einer als Fehler ansieht von der Firma als Feature verkauft
https://de.wikipedia.org/wiki/Objektori ... rammierung
https://de.wikipedia.org/wiki/Liste_obj ... ersprachen
Sorry, eine solche Selbstverständlichkeit die nicht funktioniert, kann niemand erwarten. Und ja man muß sich an die Regeln halten, nur damit wird schlicht und einfach gelogen. Denn W-Language ist keine OO-Sprache, dann kann ich jetzt auch bezweifeln ob die Sachen mit den three-tier Konstruktion hilft. Also kann ich Windev nur als ein "glorifiziertes" X-Base benutzen. Wäre nett wenn man solche Sachen vor der Nutzung wissen hätte können. Und ja dieser Fehler wurde gemeldet und als Feature verkauft wegen Typsicherheit, was an Lächerlichkeit schwerlich zu überbieten ist. Ich habe mir mal aus Jux-und-Dollerei das ganze in C# umgesetz und klar läuft, läuft auch in Visual Bascic for Appllications, Smalltalk, Eiffel, C++, Objective-C und jeder anderen OO-Sprache. Was daran so schwierig sein kann dieses grundlegende Prinzip von OO-Sprachen zu untertützen, kann wohl nur PC-Soft beantworten. Aber hey es ist kein Bug sondern ein "Feature"
-
- Member
- Beiträge: 72
- Registriert: 9. Mai 2015, 08:19
Re: Zuweisungen von Klassen
Wahrscheinlich kann man um diesen eklatanten Bruch von OO-Prinzipien mit Indirektionen herum programmieren. Dann hat man eben statt eine Funktion format(): string mehrere Methoden wie
format_Zahl, format_Date etc und wählt dann ausgehend vom Typ die passende Erweiterung an. Es bleibt eine Krücke und es ist - sorry armselig.
format_Zahl, format_Date etc und wählt dann ausgehend vom Typ die passende Erweiterung an. Es bleibt eine Krücke und es ist - sorry armselig.
Re: Zuweisungen von Klassen
Armselig?!
Dieses Prädikat trifft augenscheinlich auf Deine Argumente zu.
In Unkenntnis Deiner Programmierkenntnisse mit WinDev kommt Du z.B. zum Schluss ...
Abgesehen davon habe ich von Dir noch nichts gelesen, was für mich in Bezug auf Unzulänglichkeiten der Object-Programmierung mit WinDev irgendein Sinn ergibt. Deine Beispiele sind grottenschlecht und sinnfrei. Im Übrigen hättest Du im Vorfeld mit der Free-Version schon feststellen können, dass die Objekt-Programmierung nicht Deinen Ansprüchen genügt.
Gruß Olaf
Dieses Prädikat trifft augenscheinlich auf Deine Argumente zu.
In Unkenntnis Deiner Programmierkenntnisse mit WinDev kommt Du z.B. zum Schluss ...
In WinDev können Parameter in Funktionen und Methoden auf deren Typ hin untersucht, spezifiziert und weiter verarbeitet werden. Nichts anders macht man in C++ mittels "decltyp“ und Weiterleitungsfunktionen. In C++ müssen z.B. Funktions-Parameter immer typisiert (wie "int", "string" usw.) werden, in WinDev nicht.Dann hat man eben statt eine Funktion format(): string mehrere Methoden wie
format_Zahl, format_Date etc und wählt dann ausgehend vom Typ die passende Erweiterung an.
Abgesehen davon habe ich von Dir noch nichts gelesen, was für mich in Bezug auf Unzulänglichkeiten der Object-Programmierung mit WinDev irgendein Sinn ergibt. Deine Beispiele sind grottenschlecht und sinnfrei. Im Übrigen hättest Du im Vorfeld mit der Free-Version schon feststellen können, dass die Objekt-Programmierung nicht Deinen Ansprüchen genügt.
Gruß Olaf
-
- Site Admin
- Beiträge: 535
- Registriert: 23. Februar 2010, 08:06
- Wohnort: Langenthal, Schweiz
- Kontaktdaten:
Re: Zuweisungen von Klassen
Wie Olaf und ich auch schon schrieb: diese erneute Zuweisung ist nicht notwendig, da die Typisierung bereits eine Klasse erstellt. Windev macht eben alles einfacher.Lewi hat geschrieben: Die ersten beiden Anweisungen definieren und instanzieren dlA und cV als Klassenobjekte von ACLASS und BClass. Die beiden nachfolgenden Anweisungen sind nicht erforderlich bzw. falsch, da es sich bereits um Klassenobjekte handelt.
Richtig wäre folgendes:
Und ... alle Windev-Programmierer programmieren OO, auch wenn dies nicht bemerkt wird, indem jedes GUI-Element intern aus Klassen hergeleitet wird. Damit arbeiten wir doch primär.
Dui hast immer noch nicht gesagt, was du denn eigentlich programmieren möchtest.