Site Announcements

Liebe Gäste des Forums, wir freuen uns, dass ihr zu uns gelangt seid.
Windev ist eine sehr umfangreiche und starke Entwicklerumgebung für Anwendungen unter Windows, Linux und Internetapplikationen inkl. Mobile.
Hier sind Antworten und Anregungen dazu zu finden!
Möchtest du aktiv mitschreiben? Dann melde dich durch Klick auf den Text "Registrieren" hier rechts oberhalb an.

Zuweisungen von Klassen

Alle Themen rund um die Erstellung von Programmen

Zuweisungen von Klassen

Beitragvon FDominicus » 31. Mai 2017, 09:12

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?
FDominicus
Junior Member
 
Beiträge: 9
Registriert: 9. Mai 2015, 08:19
Has thanked: 0 time
Have thanks: 0 time

Re: Zuweisungen von Klassen

Beitragvon FDominicus » 31. Mai 2017, 10:20

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....
FDominicus
Junior Member
 
Beiträge: 9
Registriert: 9. Mai 2015, 08:19
Has thanked: 0 time
Have thanks: 0 time

Re: Zuweisungen von Klassen

Beitragvon Herbert » 3. Juni 2017, 16:05

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&name=class_inheritance&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.
Herbert
Site Admin
 
Beiträge: 329
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Has thanked: 5 times
Have thanks: 3 times

Re: Zuweisungen von Klassen

Beitragvon Lewi » 3. Juni 2017, 16:06

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?


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.
Lewi
Member
 
Beiträge: 72
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Has thanked: 0 time
Have thanks: 1 time

Re: Zuweisungen von Klassen

Beitragvon Lewi » 3. Juni 2017, 16:37

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....


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.


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   

//------------------------------- FileInfo
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


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
clSFilePath is FileInfo(SLE_File..Value)
clSFilePath:Display()


Viele Grüße
Olaf
Lewi
Member
 
Beiträge: 72
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Has thanked: 0 time
Have thanks: 1 time

Re: Zuweisungen von Klassen

Beitragvon FDominicus » 13. Juni 2017, 09:34

Lewi hat geschrieben:
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....


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.


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   

//------------------------------- FileInfo
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


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
clSFilePath is FileInfo(SLE_File..Value)
clSFilePath:Display()


Viele Grüße
Olaf


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.
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
FDominicus
Junior Member
 
Beiträge: 9
Registriert: 9. Mai 2015, 08:19
Has thanked: 0 time
Have thanks: 0 time

Re: Zuweisungen von Klassen

Beitragvon FDominicus » 13. Juni 2017, 09:51

Lewi 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.


Darum geht es gar nicht
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.
FDominicus
Junior Member
 
Beiträge: 9
Registriert: 9. Mai 2015, 08:19
Has thanked: 0 time
Have thanks: 0 time

Re: Zuweisungen von Klassen

Beitragvon Herbert » 16. Juni 2017, 07:28

Bleibt nett mieinander :angel:

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.
Herbert
Site Admin
 
Beiträge: 329
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Has thanked: 5 times
Have thanks: 3 times

Re: Zuweisungen von Klassen

Beitragvon Lewi » 17. Juni 2017, 22:57

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.


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:

Code: Alles auswählen
cA is dynamic
cB is dynamic

cA = new AClass( sFileName)
cB = new BClass( (sFileName)


Gruß Olaf
Lewi
Member
 
Beiträge: 72
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Has thanked: 0 time
Have thanks: 1 time

Re: Zuweisungen von Klassen

Beitragvon BRANDELH » 22. Juni 2017, 11:39

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 :angel:

https://de.wikipedia.org/wiki/Objektori ... rammierung
https://de.wikipedia.org/wiki/Liste_obj ... ersprachen
BRANDELH
Site Admin
 
Beiträge: 199
Registriert: 30. Juni 2010, 14:31
Wohnort: Germersheim
Has thanked: 0 time
Have thanks: 2 times


Zurück zu Programmierung allgemein

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron