 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 20.12.2007, 14:12 Titel: Fragen zu Constructoren/Destructoren |
|
|
Die Sache mit den Consturctoren habe ich noch nicht ganz verstanden:
Laut Online-Hilfe wird ein Consturctor immer dann aufgerufen, wenn ein UDT dimensioniert wird. Wenn der UDT aber keinen eigenen Consturctor enthält- gibt es einen Standard-Constructor in FreeBasic, der für solche Fälle herhält?
Kann ein Constructor einen Wert zurückgeben?
Wie kann ich einen UDT zur LAUFZEIT neu dimensionieren?
Gibt es ein Tutorial über verkettete Listen, Queues, Bäume o. ä. in FreeBasic? _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 20.12.2007, 14:40 Titel: Re: Fragen zu Constructoren/Destructoren |
|
|
Elektronix hat Folgendes geschrieben: | Wie kann ich einen UDT zur LAUFZEIT neu dimensionieren? |
Code: | Dim blub As MeinUDT ' hier wird blub dimensioniert, der Constructor wird aufgerufen
Erase blub ' hier wird der Destructor aufgerufen, blub wird gelöscht |
|
|
Nach oben |
|
 |
Bimi
Anmeldungsdatum: 03.12.2007 Beiträge: 66
|
Verfasst am: 20.12.2007, 14:45 Titel: |
|
|
Constructoren/Destructoren haben keine Rückgabewerte, den wer soll diese entgegennehmen.
Ist kein Constructor/Destructor definiert, gilt immer ein Standardconstructor.
Für Datenstrukturen wie verkettete Listen, Queues, Bäume und ähnliches muss das Tutorial nicht unbedingt in FreeBasic sein. Das Prinzip ist das gleiche wie in C oder vielen anderen Sprachen.
Votr allem Tuts aus dem Bereich C lassen sich sehr gut verwenden, das FB auch Zeiger beherscht. _________________ Rechtbehelf:
Rechschreibverfehlungen, Vergehen an der Deutschen Sprache sowie Stabwechselverbuchselungen unterliegen dem Urheberrecht, sind voll beabsichtigt und fördern das aufmerksame Lesen. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 20.12.2007, 14:56 Titel: |
|
|
Konstruktoren und Destruktoren sind allgemeine Grundkonzepte aus der objektorientierten Programmierung.
Sinn und Zweck: Automatische Aktionen beim Erzeugen und Löschen von Objekten durchführen. => Im Prinzip wird der Konstruktor mit der DIM-Anweisung aufgerufen, der Destruktor mit der ERASE-Anweisung. Achtung: Wenn eine SUB und FUNCTION endet und Du hast ein Objekt als lokale Variable instanziert, dann findet eine implizite ERASE-Operation sämtlicher lokalen Variablen statt (Aufrufstack wird freigegeben) => daher wird dort (oder muss es zumindest, wenn FreeBasic korrekt der OO-Grundphilosophie folgt) der Destruktor ebenfalls aufgerufen!
Beispiel: Du schreibst für irgend etwas eine Klasse, wo z.B. ein dynamischer Speicherbereich reserviert werden muss, der aber während des gesamten Lebenszyklus gilt. So könntest Du diesen im Konstruktor reservieren und im Destruktor wieder freigeben. Vorteil für den Benutzer Deiner Klasse: Man muss sich nicht mehr ums Speichermanagement kümmern, womit "Leichen" vermieden werden. Anderes Beispiel: Klasse, die intern eine Datei mit OPEN geöffnet hat und sich in einer privaten Variable die mit FREEFILE erhaltene Dateinummer merkt. => Damit das Filehandle nun nicht zu einer "Leiche" werden kann, könntest Du im Konstruktor die Boolean-Variable "dateiOffen" mit FALSE initialisieren, im Destruktor ein
Code: | IF dateiOffen THEN
CLOSE privatesAttributMitDateiNummer
END IF |
womit die Datei gegenüber dem Betriebssystem automatisch freigegeben wird, wenn die Variable "stirbt".
@FreeBasic-Experten: Sehe ich es demfall richtig, dass FreeBasic mittlerweilen zu einer voll objektorierten Programmiersprache ausgebaut wurde, die sich in Sachen OO-Konzepte überhaupt nicht hinter C++ und Java verstecken muss? _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 20.12.2007, 15:26 Titel: |
|
|
Zunächst mal danke für die ausführlichen Antworten.
Ich denke, FreeBasic ist noch keine wirkliche OOP-Sprache, weil die Möglichkeiten für Vererbung, virtuelle Datentypen/ Funktionen usw. fehlen. Außerdem bin ich hier noch nicht auf die Definition von Klassen gestoßen, obwohl der Begriff häufiger verwendet wird. Bisher bin ich der Bezeichnung "Klasse" nur im Sinne eines UDT begegnet, der private und public records und/oder Funktionen enthält. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett.
Zuletzt bearbeitet von Elektronix am 20.12.2007, 15:34, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 20.12.2007, 15:34 Titel: |
|
|
Zitat: | Sehe ich es demfall richtig, dass FreeBasic mittlerweilen zu einer voll objektorierten Programmiersprache ausgebaut wurde | Nein, erste Ansätze sind vorhanden und der Trend geht nach objektorierte Programmiersprache für die -lang FB - Fraktion der Entwickler.
Im Moment ist aber eine Abspaltung der -lang QB - Fraktion spürbar, zurück zur QB-Kompatibilität ohne die Aufblähung durch OO - Funktionen. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Bimi
Anmeldungsdatum: 03.12.2007 Beiträge: 66
|
Verfasst am: 20.12.2007, 17:14 Titel: |
|
|
Elektronix hat Folgendes geschrieben: | Zunächst mal danke für die ausführlichen Antworten.
Ich denke, FreeBasic ist noch keine wirkliche OOP-Sprache, weil die Möglichkeiten für Vererbung, virtuelle Datentypen/ Funktionen usw. fehlen. Außerdem bin ich hier noch nicht auf die Definition von Klassen gestoßen, obwohl der Begriff häufiger verwendet wird. Bisher bin ich der Bezeichnung "Klasse" nur im Sinne eines UDT begegnet, der private und public records und/oder Funktionen enthält. |
Der Begriff "Klasse" ist aber nichts anderes als die Definition eines Typs oder einer Structur - eben mit den Erweiterungen eines Kon-/Destruktors.
Du hast schon erwaähnt was FB zu einer echten OOP-Sprache fehlt. Dazu kommen noch Möglichkeiten der Reflection, etc.
Klassen ohne OOP finde ich sehr praktisch, also die Bindung von Methoden an Daten. Das jedoch FB zu einer vollwertigen OOP-Sprache wird, da bin ich nicht für. Das ganze hat weder Java noch C++ wirklich einfacher gemacht. _________________ Rechtbehelf:
Rechschreibverfehlungen, Vergehen an der Deutschen Sprache sowie Stabwechselverbuchselungen unterliegen dem Urheberrecht, sind voll beabsichtigt und fördern das aufmerksame Lesen. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 20.12.2007, 17:58 Titel: |
|
|
Zitat: | Klassen ohne OOP finde ich sehr praktisch, also die Bindung von Methoden an Daten. Das jedoch FB zu einer vollwertigen OOP-Sprache wird, da bin ich nicht für. Das ganze hat weder Java noch C++ wirklich einfacher gemacht. |
Wie man's nimmt- man muß den OOP-Kram ja nicht nutzen. Ich persönlich halte es eigentlich für unnötig, denn alles, was OOP kann, kann prozedurale Programmierung auch, nur anders. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
helium

Anmeldungsdatum: 10.09.2004 Beiträge: 397 Wohnort: Leverkusen
|
Verfasst am: 20.12.2007, 19:03 Titel: |
|
|
Elektronix hat Folgendes geschrieben: | virtuelle Datentypen |
Wow, das ist ja fast noch Reaserchgebiet. Die einzige Realworldsprache, die ich kenne ist Scala und die ist verglichen mit anderen Mainstream-Sprachen extrem weit, was das Typsystem angeht (und auch in den meisten anderen Belangen).
----------
OOP hat nichts mit Klassen zu tun, sondern mit Objekten (daher der Name). Es gibt objektorientierte Sprachen komplett ohne Klassen (Self, ECMAScript, ...).
-----------
FreeBasic unterstützt einen nicht unbedingt bei der OOP. "Objektorientierte Sprache" ist aber schwammiger als man denkt.
-----------
Bimi hat Folgendes geschrieben: | Der Begriff "Klasse" ist aber nichts anderes als die Definition eines Typs oder einer Structur - eben mit den Erweiterungen eines Kon-/Destruktors. |
Die meisten OO-Sprachen haben keinen Destruktor.
Ein Typ ist etwas anderes, als eine Klasse.
Bimi hat Folgendes geschrieben: | Dazu kommen noch Möglichkeiten der Reflection, etc. |
Nicht unbedingt ein zwingendes Feature für OO.
Bimi hat Folgendes geschrieben: | Klassen ohne OOP finde ich sehr praktisch, also die Bindung von Methoden an Daten. Das jedoch FB zu einer vollwertigen OOP-Sprache wird, da bin ich nicht für. Das ganze hat weder Java noch C++ wirklich einfacher gemacht. |
Wenn ich zusätzlich zu den bereits vorhanden Dingen noch die späte Bindung habe, was fehlt dir zur vollwertigen OO-Srpache?
C++ ist komplex, aber Java ist eine super primitive Sprache. Ich würde mich freuen, wenn es endlich mal einige der längst überfälligen Features gäbe, wie z.B. Closures gäbe (ist zwar weder Prozedural, noch OO, sondern funktional, aber es ist zurzeit in Diskussion).
Ich würde jetzt verdammt gerne einen ausschnitt aus einem Artikel von Paul Grehem zitieren zum Thema "Blob", aber leider habe ich gerade keine Zeit. vielleicht wenn ich zu hause bin. _________________ Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit. |
|
Nach oben |
|
 |
atari gesperrt
Anmeldungsdatum: 26.08.2007 Beiträge: 144
|
Verfasst am: 20.12.2007, 19:50 Titel: |
|
|
Zitat: |
im Moment ist aber eine Abspaltung der -lang QB - Fraktion spürbar, zurück zur QB-Kompatibilität ohne die Aufblähung durch OO - Funktionen.
|
darum finde ich es an der zeit, diesen eiertanz zu qb sein zulassen und sich auf das moderne von c zu stürzen. es schleichen sich immer mehr fehler ein, die aufspaltungen für verschiedene compilercode der erstellten programme machen das freebasic jetzt schon umbrauchbar für eine rationelle, funktionelle verwendung.
die zumutbarkeit mit der vielfalt der zerstückelten programme von freebasic für den anwender hat die grenzen mit der version 0.17 schon überschritten.
"schluss jetzt" muss es heissen.
die stabilität fängt an zu bröckeln.
es gibt wieder zeiten wo man sagt : die betonköpfe müssen rollen... |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.12.2007, 20:11 Titel: |
|
|
gratulation zu einem absoluten nonsens-post... geh doch zu gfa-basic, fände ich eine super idee. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 20.12.2007, 21:10 Titel: |
|
|
Kannst du uns wenigstens mal 'ne Stellungnahme geben, warum du dauernd FB quasi als Schrottprodukt hinstellst, aber GFA-Basic ja das Höchste der Gefühle bei dir ist? Dann geh, lass uns hier zufrieden und wär glücklich, damit du endlich Programme schreiben kannst die "rationell" und "funktionell" sind... _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 20.12.2007, 22:06 Titel: |
|
|
Hallo,
ich habe neulich ein Beispiel zu verketteten Listen in FB geschrieben. Das ist eigentlich für FBP gedacht, aber noch nicht genügend kommentiert und erklärt, um es da als Tutorial einzustellen. Eine relativ unkommentierte Version könnte ich dir per Mail zuschicken. Von CONSTRUCTOR und DESTRUCTOR mach ich da allerdings keinen Gebrauch.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 20.12.2007, 22:26 Titel: |
|
|
Danke für die Kurzinfo betreffend OO-Fähigkeiten-Zwischenstand von FreeBasic. Ansonsten für in dem Sinn "schönes" OO bräuchte es noch etliche weitere Konzepte.
Elementar:
- private und öffentliche Attribute. Für die OO-Neulinge: private Attribute sind diejenigen Bestandteile eines TYPE, auf die man im Hauptprogramm keinen direkten Zugriff haben soll. Stichwort Datenkapselung. Sinn und Zweck: private Eigenschaften können nach Belieben geändert werden, ohne dass die Kompatibilität der Klasse in einem Hauptprogramm verloren geht
- Dito auch für SUB und FUNCTION-Methoden
- Vererbung (Polymorphismus)
- Unterscheidung Klassen- und Objektmethoden
Erweiterte Konzepte:
- Templates: Klasse, bei der man ein Datentyp abstrakt deklariert. Paradebeispiel: Sortierroutine: Dort möchte ich bekanntlich jeden beliebigen Datentyp zulassen, zu welchem lediglich ein "<"-Operator, der die Bedingung "Wenn a < b und b < c gilt, so gilt a < c" erfüllt (tönt banal, aber versucht einmal eine derartige Vergleichoperation für z.B. Vektoren oder vollkommen eigenen Recordtyp sinnvoll zu definieren!), existiert. => Erst in der DIM-Anweisung gibt man dann den konkreten Datentyp mit in der Art
Code: | Dim oSortDbl As SortKlasse<Double>, oSortStr As SortKlasse<String> |
- Properties: Verhalten sich wie
Code: | TYPE foobar
foo AS INTEGER
END TYPE
DIM bar AS foobar
bar.foo = 1 ' Hier wird bei Properties eine SUB aufgerufen!
PRINT bar.foo ' Hier wird bei Properties eine FUNCTION aufgerufen! |
wie normale Attribute, ausser das implizit eine Prozedur aufgerufen wird. Beispiel: Gesamtes VBScript von meinen Beispielen beruht auf Properties. Sinnvolle Prozedurinhalte sind logischerweise, dass z.B. in einem CAD ein
Code: | DIM kr AS Kreis
kr.Farbe = rot |
eine implizite SUB aufruft, die mit CIRCLE diesen Kreis automatisch rot nachfärbt. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Bimi
Anmeldungsdatum: 03.12.2007 Beiträge: 66
|
Verfasst am: 20.12.2007, 23:18 Titel: |
|
|
helium hat Folgendes geschrieben: |
OOP hat nichts mit Klassen zu tun, sondern mit Objekten (daher der Name). Es gibt objektorientierte Sprachen komplett ohne Klassen (Self, ECMAScript, ...).
|
Ist den ein Objekt nicht die lebende Instanz seiner Definition, der Klasse?
helium hat Folgendes geschrieben: |
Ein Typ ist etwas anderes, als eine Klasse.
|
Erklär mal den Unterschied...
helium hat Folgendes geschrieben: |
Wenn ich zusätzlich zu den bereits vorhanden Dingen noch die späte Bindung habe, was fehlt dir zur vollwertigen OO-Srpache?
|
...latebbinding ist ebenfalls kein Feature einer OOP-Sprache
Lass doch endlich die Katze aus dem Sack:
Es gibt nicht die OOP-Sprache!
OOP ist ein Konzept, keine Eigenschaft einer Programmiersprache. Der Grundgedanke ist die Kapselung von Daten und zugehörigen Code.
Die Definition eines Objektes ist eine Klasse - die Definition kann explizit erfolgen oder (wie in self) gekapselt implizit stattfinden. Aus jedem Objekt kann eine Klassendefinition abgeleitet werden.
OOP-Sprachen vereinfachen die Defintion in der Objektorientierten Programmierung - sind aber dafür nicht notwendig.
Eine Klasse ist ein Typ, welches neben der Datendefinition auch Definitionen für die Methoden enthält. Intern werden in jeder Sprache Klassen auf Typen abgebildet.
Objekte sind Lebensformen von Klassen ob die Definition ueber eine Klasse oder durch Ableitung erfolgt, ist irrelevant.
helium hat Folgendes geschrieben: |
C++ ist komplex, aber Java ist eine super primitive Sprache. Ich würde mich freuen, wenn es endlich mal einige der längst überfälligen Features gäbe, wie z.B. Closures gäbe (ist zwar weder Prozedural, noch OO, sondern funktional, aber es ist zurzeit in Diskussion).
|
Closures könnten mit Java7 kommen.
Java ist alles andere als primitiv - ich weiß nicht wie du zu dieser Aussage kommst.
Damit ich eine Sprache als OOP-tauglich betitle, solten die explizite oder implizite Definition von Klassen ermöglichen, Vererbung, Polymorphismus, Abstraktion, Zugriffskonzept.... _________________ Rechtbehelf:
Rechschreibverfehlungen, Vergehen an der Deutschen Sprache sowie Stabwechselverbuchselungen unterliegen dem Urheberrecht, sind voll beabsichtigt und fördern das aufmerksame Lesen. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 21.12.2007, 01:29 Titel: |
|
|
late binding ist teil so ziemlich jeder oop-sprache, schonmal this benutzt? oO
und wegen objekt und klasse - man kann objekte auch anders beschreiben als durch klassen, die "großen" sprachen benutzen halt alle klassen.
den Unterschied zwischen klasse und typ würde ich in bezug auf FB zB mal darauf beziehen, dass eine klasse wirklich eigene methoden und ein eigenes verhalten hat. In FB hast du ganz normale Methoden die du einfach deinen type zuordnest, die sind nicht wirklich da "drin". der Typ definiert einfach nur werte, kein Verhalten.
und - im vergleich zu c++ besonders, aber auch allgemein, ist java als sprache wirklich extrem simpel. Die API ist gigantisch, aber das macht die sprache nicht komplex. Das sind alles nur bibliotheken, definierte routinen, nichts in die Sprache integriertes. komplexität ist nicht durch große vielfalt definiert sondern durch die ganzen kniffe, zusammenhänge, sprachkonstrukte usw. die du machen kannst/musst. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 21.12.2007, 10:07 Titel: |
|
|
Sebastian hat Folgendes geschrieben: | Hallo,
ich habe neulich ein Beispiel zu verketteten Listen in FB geschrieben. Das ist eigentlich für FBP gedacht, aber noch nicht genügend kommentiert und erklärt, um es da als Tutorial einzustellen. Eine relativ unkommentierte Version könnte ich dir per Mail zuschicken. Von CONSTRUCTOR und DESTRUCTOR mach ich da allerdings keinen Gebrauch. |
Das wäre mal eine Hilfe. Vielleicht kannste es doch mal bei fbp reinstellen mit den wichtigsetn Kommentaren. Vermutlich interessiert es ja nicht nur mich  _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 21.12.2007, 11:42 Titel: |
|
|
@dreael:
Unterscheidung/Einteilung in Private und Public Member ist bereits möglich.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
atari gesperrt
Anmeldungsdatum: 26.08.2007 Beiträge: 144
|
Verfasst am: 21.12.2007, 14:10 Titel: |
|
|
es wundert mich sehr, das modern denkende user diese meinung vertreten und keinen zukunkftsträchtigen ausbau von freebasic zustimmen obwohl die sackgasse sichtbar wird. vielfältigkeit führt kurz oder lang immer zum untergang. und so hoch ist der tellerand hier nicht, um mal einen blick darüber zu machen. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 21.12.2007, 14:18 Titel: |
|
|
@atari
Ich finde das schon ganz in Ordnung. Man könnte sich ja auch ärgern, daß C++ immer noch rückwärtskompatibel zu C ist.
Soweit ich es mitbekomme, definierten die Programmierer FreeBasic gerade durch seine Compatibilität zu QBasic (weil VisualBasic ist nun mal kein vernünftiger Ersatz für QBasic). Schließlich wird dadurch vielen QB-Proggern der Umstieg erleichtert und/oder der Einstig in die GUI-Programmierung ermöglicht. Mir selbst hat das sehr geholfen. Wenn das endet, ist ein wichtiges Merkmal von FreeBasic verloren. _________________ Und die Grundgebihr is aa scho drin- DOS is jo nett. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|