Klassen Erstellung

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Klassen Erstellung

Beitragvon messing » Do, 29. Mär 2012 13:20

Servus,
habe mal ein paar Tage die Doku studiert.
Wenn ich aus den Klassen XbpSLE und GET eine Klasse ableite z.B. MyGet erbt die abgeleitete Klasse die Eigenschaften.
Code: Alles auswählen
   CLASS MyGet from XbpSle, Get
   METHOD init
   ENDCLASS
   METHOD MyGet:init( nRow, nCol )
      ::nRow   := IIF( nRow == NIL, ROW(), nRow )
      ::nCol   := IIF( nCol == NIL, COL(), nCol )
   RETURN self


Wer hilft dabei, diese Klasse Schritt für Schritt aufzubauen?
Dies mag für Euch eventuell nicht nötig sein, doch würde dieser Klassenaufbau hier, jedem das Kapitel KLASSE näherbringen.
Davon profitieren alle, ob Anfänger oder Fortgeschrittene in der Klassen Programierung.
Die Methode Init habe ich einfach nur eingesetzt um mir das Objekt genauer ansehen zu können.
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon Jan » Do, 29. Mär 2012 13:27

Bruno,

schau Dir doch mal die SLEPic-Klasse an. Die ist ebenfalls von XbpSle abgeleitet. Das könnte Dir also gute Ansatzpunkte geben.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11755
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle

Re: Klassen Erstellung

Beitragvon brandelh » Do, 29. Mär 2012 13:31

Oder die von mir, Datum, Zahlen, auch eine mit Filter in der Wissensbasis gibt es meine Klassen.

Gerade am Anfang ist es nützlich zunächst fertige zu benutzen und den Quellcode anzusehen.
Gerade die Tastatursteuerung von SLE ist kein Anfänger Thema ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13372
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Klassen Erstellung

Beitragvon Tom » Do, 29. Mär 2012 13:33

Davon abgesehen glaube ich kaum, dass es gelingen wird, aus XbpSLE und Get eine funktionierende Klasse zu erzeugen. :wink:
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6707
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: Klassen Erstellung

Beitragvon messing » Do, 29. Mär 2012 14:08

Hi Jan, hi Hubert, hi Tom
an Jan, bitte Link zu SLEPic, Danke. Schon gefunden. Gibts das auch mit deutschem Datum und Zahlenformat?
an Hubert wonach muß ich in der Wissensbasis suchen?
an Tom, Ob sich eine funktionierende Klasse daraus erzeugen läßt? Ich habs im Debugger bis zum INIT laufenlassen und konnte eindeutig das Objekt erkennen. Das heißt zwar nicht, das diese Klasse funktionieren würde, aber auch nicht, das es nicht funktionieren würde. Ich bin von der Vererbung ausgegangen und der Beschreibung Objekt im Objekt. Natürlich habe ich von Klassen keine Ahnung, das gebe ich offen zu, aber zum lernen wäre die Idee nicht schlecht.
Zuletzt geändert von messing am Do, 29. Mär 2012 14:12, insgesamt 1-mal geändert.
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon georg » Do, 29. Mär 2012 14:12

Hallo, Tom -


manchmal liebe, manchmal hasse ich Deine kurzen, knappen, korrekten Antworten.

@messing: rein technisch ist die Ableitung möglich, aber GET ist eine Klasse für VIO bzw. Hybrid-Modus, während XbpSLE eigentlich für Hybrid- oder XbpDialog-Modus gedacht ist.

Ein offensichtliches Problem ist z.B. die Adressierung, während GET mit Zeile, Spalte operiert, verwendet XbpSLE eigentlich eine Pixel-Position zusammen mit einer Grössenangabe in Pixel.

Ableiten kannst Du eine solche Klasse schon, aber sie wird nicht richtig funktionieren.

SLEPic findest Du hier: http://www.gogalthorp.com/splash. Dort findest Du die SLEPic Version 1.88 mit Quellcode.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Fr, 08. Feb 2008 22:29

Re: Klassen Erstellung

Beitragvon messing » Do, 29. Mär 2012 14:22

georg hat geschrieben:Hallo, Tom -


manchmal liebe, manchmal hasse ich Deine kurzen, knappen, korrekten Antworten.

@messing: rein technisch ist die Ableitung möglich, aber GET ist eine Klasse für VIO bzw. Hybrid-Modus, während XbpSLE eigentlich für Hybrid- oder XbpDialog-Modus gedacht ist.

Ein offensichtliches Problem ist z.B. die Adressierung, während GET mit Zeile, Spalte operiert, verwendet XbpSLE eigentlich eine Pixel-Position zusammen mit einer Grössenangabe in Pixel.

Ableiten kannst Du eine solche Klasse schon, aber sie wird nicht richtig funktionieren.

SLEPic findest Du hier: http://www.gogalthorp.com/splash. Dort findest Du die SLEPic Version 1.88 mit Quellcode.


Gruss,

Georg

Hi Georg
deine Antwort gibt Hoffnung ! :D !
Wenn man bei GET keine Pos. angibt, landet es bei 0,0
Fakt ist, das mit den paar Codezeilen, im Debugger eindeutig ein Objekt erkennbar ist, welches auch die PICTURE Bezeichnung enthält.
Betreffend der Koordinaten gebe ich zu, 0,0 bei GET bezieht sich auf oben links im CRT.
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon georg » Do, 29. Mär 2012 14:35

Hallo, messing -


der Compiler erzeugt einfach eine Kreuzung aus den beiden Objekten. Theoretisch geht das, ob das Objekt aber verwendbar ist, steht auf einem anderen Blatt.

Das dieses zusammengesetzte Objekt eindeutige Merkmale der beiden Eltern-Objekte besitzt, und diese auch im Debugger einzusehen ist, liegt an der Sprache.

Ein Compiler prüft auch nur die Übereinstimmung mit der Sprachsyntax, nicht aber den logischen Aufbau des Programmcodes.
Code: Alles auswählen
cFeld := "heute"
dFeld := Date()
IF cFeld = dFeld


wird vom Compiler problemlos übersetzt, wird aber beim IF in der Ausführung scheitern, obwohl beide Variablen doch die richtigen, zugewiesenen Werte (auch im Debugger) besitzen ...


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Fr, 08. Feb 2008 22:29

Re: Klassen Erstellung

Beitragvon Tom » Do, 29. Mär 2012 14:49

Fakt ist, das mit den paar Codezeilen, im Debugger eindeutig ein Objekt erkennbar ist, welches auch die PICTURE Bezeichnung enthält.


Wenn ein Laster mit einem PKW bei sehr hoher Geschwindigkeit zusammenstößt, entsteht daraus tatsächlich eine Limousine mit Ladefläche, also, wenn man so will, ein "best of two worlds". Tatsächlich dürfte es schwierig werden, mit dem neu entstandenen "Fahrzeug" Personen oder Last zu bewegen. Durch die Kollision entsteht nämlich vor allem sehr viel Schrott.

Klassen, die in eine gemeinsame, neue Klasse überführt werden, dürfen nicht interferieren, und sie sollten sich sinnvoll ergänzen. Außerdem ist Deine Denkweise nicht ganz richtig: Die Klassen werden nicht "gemischt" (Paarung eines Esels mit einer Taube - wir erhalten ein mausgraues, fliegendes Lasttier), was allerdings eine faszinierende Idee ist. Schau Dir mal die Klassenbeschreibung der XbpComboBox an. Die verweist auf die Superklassen XbpSLE und XbpListbox. Sie erzeugt zwei Objekte. Die abgeleitete Klasse sorgt dafür, dass die Objekte automatisch interagieren können, sich also ergänzen. Das dürfte sehr schwierig werden, wenn man ein XbpSLE und ein Get "verheiratet".
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6707
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: Klassen Erstellung

Beitragvon messing » Do, 29. Mär 2012 15:05

Hi Tom,

Wenn ein Laster mit einem PKW bei sehr hoher Geschwindigkeit zusammenstößt, entsteht daraus tatsächlich eine Limousine mit Ladefläche, also, wenn man so will, ein "best of two worlds". Tatsächlich dürfte es schwierig werden, mit dem neu entstandenen "Fahrzeug" Personen oder Last zu bewegen. Durch die Kollision entsteht nämlich vor allem sehr viel Schrott.

Ich lach mich scheckig :D :D .

Dein Vergleich hat mir die Tränen in die Augen getrieben! Vor Lachen ! :D Ich hab mir das mal bildlich vorgestellt. Limoousine mit Ladefläche !!! :D
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon messing » Do, 29. Mär 2012 15:16

Servus,
SLEPic verlangt Clickdate
was müßte ich abändern, da clickdate nicht benötigt wird.
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon Tom » Do, 29. Mär 2012 15:24

Clickdate ist doch dabei. Musst nix ändern.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6707
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: Klassen Erstellung

Beitragvon Jan » Do, 29. Mär 2012 15:39

Ich habe clickdate und so einiges anders, was für mich überflüssig ist, rausgeschmissen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11755
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle

Re: Klassen Erstellung

Beitragvon messing » Do, 29. Mär 2012 16:31

Jan hat geschrieben:Ich habe clickdate und so einiges anders, was für mich überflüssig ist, rausgeschmissen.

Jan

Servus Jan,
Ich brauch nur die Formatierungsmöglichkeit.
Wenn du das soweit geändert hast, dann bitte ich um den Quellcode. Begründung: Wenn ich deine geänderte Version mit SLEPic vergleiche, fallen mir mit Sicherheit die Änderungen auf. Wäre eine Möglichkeit zu vergleichen wie sich das in der Klassenprogramierung auswirkt.
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon brandelh » Do, 29. Mär 2012 17:22

messing hat geschrieben:an Hubert wonach muß ich in der Wissensbasis suchen?


Author: BrandelH
HB_CLAS* .... aber ich habe es dir rausgesucht:

viewtopic.php?f=16&t=499
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13372
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Klassen Erstellung

Beitragvon messing » Fr, 30. Mär 2012 1:50

Hi Hubert,

Danke
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon AUGE_OHR » Sa, 31. Mär 2012 10:12

Tom hat geschrieben:Davon abgesehen glaube ich kaum, dass es gelingen wird, aus XbpSLE und Get eine funktionierende Klasse zu erzeugen. :wink:
ich "denke" es ist so was wie C:\ALASKA\XPPW32\Source\samples\solution\xbpget\xbpget.prg gemeint
Code: Alles auswählen
/*
 * XbpGet Klasse
 */
CLASS XbpGet FROM XbpSLE
...

CLASS InvisibleGet FROM Get
   EXPORTED:
   METHOD init
   METHOD display
ENDCLASS

METHOD InvisibleGet:Init( nRow, nCol, bVarBlock, cVarName, cPicture, ;
                          cColor, bValid, bWhen )
RETURN ::Sle:Init( bVarBlock, cVarName, cPicture, bValid, bWhen )

METHOD InvisibleGet:display()
RETURN self
da wird "auf" einem XbpSLE ein ( invisible ) GET erzeugt.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10263
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Klassen Erstellung

Beitragvon messing » Di, 24. Apr 2012 13:53

Servus an die Gemeinde,
jetzt mal was neues.
Ich hab hier mal was angesetzt, und wäre erfreut, wenn Ihr mir helft.
Stundenumrechnung mal als Klasse. lSchalter = .T. für Zeit 00:00:00 bzw. .F. als Stundenzahl
Code: Alles auswählen
   CLASS StdUmrechnung
     EXPORTED:                         
        VAR    cAnfang, cEnde , nAnfang, nEnde, cZeit, nZeit,;
               lSchalter
        METHOD  init, Zeit
   ENDCLASS

   METHOD StdUmrechnung:init( cAnfang, cEnde, lSchalter )
      ::cAnfang   := IIF( cAnfang == NIL, "00:00:00", cAnfang )
      ::cEnde     := IIF( cEnde == NIL, "00:00:00", cEnde )
      ::lSchalter := IIF( lSchalter == NIL, .T., lSchalter )
   RETURN self

   METHOD StdUmrechnung:Zeit
      LOCAL nAnfang, nEnde, nZeit
         if val(substr(::cAnfang,1,2)) = 0
            stuff(::cAnfang,1,0,"00")
         elseif val(substr(::cAnfang,4,2)) = 0
            stuff(::cAnfang,4,0,"00")
         elseif val(substr(::cAnfang,7,2)) = 0
            stuff(::cAnfang,7,0,"00")
         endif
         if Substr(::cAnfang,3,1) <> ":"
            stuff(::cAnfang,3,0,":")
         elseif substr(::cAnfang,6,1) <> ":"
            stuff(::cAnfang,6,0,":")
         endif
         nAnfang:=TimeToSec(::cAnfang)
         nEnde:=TimeToSec(::cEnde)
         nZeit:= nEnde - nAnfang
         if ::lSchalter = .T.
            ::cZeit:=SecToTime(Abs(nZeit))
         else
            ::cZeit:=str(abs(nZeit/60/60,8,2))
         endif
   RETURN self

      oTest1:=StdUmrechnung():new("05:00:00","15:30:00",.T.)
      oTest1:cAnfang:="08:00:00"
      oTest1:Zeit()
      Zeitdifferenz:=oTest1:cZeit

Was müßte ich jetzt noch berücksichtigen, wenn ich dieses Objekt für die Stundenberechnung mit einem SLE verknüpfe?
Und was müßte man allgemein ändern um diese Klasse auszubauen etc.
Ihr seid selber Schuld !!! :D Ihr habt mich nach Hannover gelockt, und ich hab "Blut geleckt"! :D
Und ja, daraus wird keine Limousine mit Ladefläche gemacht :D :D
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon AUGE_OHR » Di, 24. Apr 2012 23:28

messing hat geschrieben:Was müßte ich jetzt noch berücksichtigen, wenn ich dieses Objekt für die Stundenberechnung mit einem SLE verknüpfe?
Und was müßte man allgemein ändern um diese Klasse auszubauen etc.
hm ... das "validate" fehlt noch.
alles in ein SLE zu packen ist ja möglich ... ich hab nun 3 x SLE die aussehen wie 1 SLE ... ich finde es leichter zu handlen

p.s. Windows hat ja auch eine Time / Date Class. Den "Wrapper" und Demosource findest du auf dem USB Stick von der Devcon in meinem Vortrag.

messing hat geschrieben:Ihr seid selber Schuld !!! :D Ihr habt mich nach Hannover gelockt, und ich hab "Blut geleckt"! :D
Und ja, daraus wird keine Limousine mit Ladefläche gemacht :D :D
hehehe ... die "Seele" haben wir bekehrt.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10263
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: Klassen Erstellung

Beitragvon messing » Mi, 25. Apr 2012 8:41

AUGE_OHR hat geschrieben:hm ... das "validate" fehlt noch.
alles in ein SLE zu packen ist ja möglich ... ich hab nun 3 x SLE die aussehen wie 1 SLE ... ich finde es leichter zu handlen

p.s. Windows hat ja auch eine Time / Date Class. Den "Wrapper" und Demosource findest du auf dem USB Stick von der Devcon in meinem Vortrag.


Hi Jimmy,
na gut Heim gekommen?

validate, hilf mal auf die sprünge.
Mit SLE verknüpfen meine ich eigentlich, Eingabe von zwei SLE mit versch, Zeiten, welche dann auf das Objekt zugreifen und somit in einem SLE oder Static die Differenz erscheint.
Ich hab erst mal damit angefangen, um den Aufbau der Klassen besser zu verstehen.
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon Jan » Mi, 25. Apr 2012 9:55

AUGE_OHR hat geschrieben:hehehe ... die "Seele" haben wir bekehrt.


Mich werdet Ihr nie bekommen! :roll: :lol:

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11755
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle

Re: Klassen Erstellung

Beitragvon messing » Mi, 25. Apr 2012 11:42

Jan hat geschrieben:
AUGE_OHR hat geschrieben:hehehe ... die "Seele" haben wir bekehrt.


Mich werdet Ihr nie bekommen! :roll: :lol:

Jan

Bekommen nicht ! :D bist ja schon dabei :lol:
Hilf mal nach =D>
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon Tom » Mi, 25. Apr 2012 12:14

Hallo, Bruno.

Eine wirklich zwingende Anwendung für eine Klasse ist das nicht - sondern eher ein Klassiker für eine UDF. Whatsoever.

Du müsstest vor dem Aufbau des Dialogs/der SLEs ein Klassenobjekt erzeugen - eines sollte genügen. Alle betroffenen SLEs bestückten dann beispielsweise im SetInputFocus-Slot die beiden iVars und aktualisierten das Anzeigestatic. Im KillInputFocus-Slot müsste dasselbe passieren. Wichtig wäre, dass die Statics auch wirklich nur von dort aktualisiert würden (SetCaption()).
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 6707
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin

Re: Klassen Erstellung

Beitragvon messing » Mi, 25. Apr 2012 13:07

Tom hat geschrieben:Hallo, Bruno.

Eine wirklich zwingende Anwendung für eine Klasse ist das nicht - sondern eher ein Klassiker für eine UDF. Whatsoever.

Du müsstest vor dem Aufbau des Dialogs/der SLEs ein Klassenobjekt erzeugen - eines sollte genügen. Alle betroffenen SLEs bestückten dann beispielsweise im SetInputFocus-Slot die beiden iVars und aktualisierten das Anzeigestatic. Im KillInputFocus-Slot müsste dasselbe passieren. Wichtig wäre, dass die Statics auch wirklich nur von dort aktualisiert würden (SetCaption()).

Servus Tom,
hoffe Du bist gut Nach Haus gekommen.
Ja ist ein Klassiker, aber da ich genau weis, was der macht läßt sich das Klassenbeispiel damit gut nachvollziehen. Nach meinem neuesten Wissensstand, sind Klassen nichts anderes als eine Objektbeschreibung, wie was wo das Objekt machen soll bzw. darf. Noch fehlt es mir an der Umsetzungsmöglichkeit allgemein, deswegen frag ich ja an, was evtl. noch fehlt, worauf man noch achten muß.
Als Function liefert RETURN ... einen Wert zurück, im Objekt kann man auf den Wert solange zurückgreifen bis er geändert wurde. In der Func nicht. Die Frage wegen SLE bzw. Static, naja hab geschlafen, Objekt greift auf Objekt zu, SLE oder Static sind ja Objekte. Wie Du siehst, so langsam kommt mehr durch.
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 216
Registriert: Mi, 13. Jan 2010 10:42
Wohnort: Lauterbach / Hessen

Re: Klassen Erstellung

Beitragvon Martin Altmann » Mi, 25. Apr 2012 13:26

Moin Konstantin,
messing hat geschrieben:Als Function liefert RETURN ... einen Wert zurück, im Objekt kann man auf den Wert solange zurückgreifen bis er geändert wurde. In der Func nicht.

kleiner Hinweis am Rand: Wenn Du eine Variable in der Funktion oder Prozedur als STATIC deklarierst, dann merkt sie sich sehr wohl den Wert!
Beispiel:
Code: Alles auswählen
PROCEDURE AufrufNr()
STATIC nI := 0
? "Dies ist der " + ALLTRIM( STR( nI++ ) ) + ". Aufruf der Prozedur."
RETURN

Wenn Du das jetzt aufrufst, kommt jeweils die folgende Ausgabe auf den Bildschirm:
Code: Alles auswählen
AufrufNr() // -> Dies ist der 1. Aufruf der Prozedur.
AufrufNr() // -> Dies ist der 2. Aufruf der Prozedur.
AufrufNr() // -> Dies ist der 3. Aufruf der Prozedur.
AufrufNr() // -> Dies ist der 4. Aufruf der Prozedur.


Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 12946
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin

Nächste

Zurück zu OOP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast