Modul BaseClass (Modul als Objekt)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt)

Beitrag von mk-soft »

Zu A:
In dem Sinne gibt es kein Copy-Kontruktor. Was du wahrscheinlich meinst ist ein kopieren des Objekts.
Diese ist aber so komplex das die Objekt-Klasse die Methode Copy mitliefern muss. Um die BaseClass bei mir sauber in eine neues Objekt zu kopieren gibt es das Hilfs-Macro CloneObject(). Alles andere wie zum Beispiel ein Image zu kopieren muss in der Methode programmiert werden.

Zu B:
Die Reihenfolge von Dispose kann man ja mal ändern. Aber wie du sagst macht es in 99,9% der Fälle keinen Unterschied.

Deine Bezeichnung ParentClass und ChildClass finde ich nicht ganz passend. Nach einer Vererbung erhält man eine neue Objekt-Klasse welches nur die Methoden und Properties erworben hat. Jede Änderung an der neuen Objekt-Klasse darf an den Original der geerbten Klasse keinen Einfluss haben.

Den Begriff Parent verstehe ich als einen Verweis auf das übergeordnete Objekt welches das Objekt erzeugt hat. Die Methode Parent muss das Objekt liefern.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Modul BaseClass (Modul als Objekt)

Beitrag von GPI »

mk-soft hat geschrieben:Zu A:
In dem Sinne gibt es kein Copy-Kontruktor. Was du wahrscheinlich meinst ist ein kopieren des Objekts.
Diese ist aber so komplex das die Objekt-Klasse die Methode Copy mitliefern muss. Um die BaseClass bei mir sauber in eine neues Objekt zu kopieren gibt es das Hilfs-Macro CloneObject(). Alles andere wie zum Beispiel ein Image zu kopieren muss in der Methode programmiert werden.
Hmm... so schwer stell ich mir das nicht vor. Du musst nur eine weitere Liste, neben Initalize.udtInvoke() und Dispose.udtInvoke() führen. Das Image zu kopieren ist klar die Aufgabe der entsprechenden "SubClass". Aber dein Code sieht das bisher nicht so vor. Konstruktoren würde ich jetzt nicht zwingend als Methode bezeichnen. Sie sind zumindest eine Sonderstellung, gerade weil sie nicht überschrieben werden.
Die Reihenfolge von Dispose kann man ja mal ändern. Aber wie du sagst macht es in 99,9% der Fälle keinen Unterschied.
Ich mag so kleine Details. Es sind meist so kleinigkeiten, über die man nicht nachdenkt, aber irgendwann enorm wichtig werden könnten.
Deine Bezeichnung ParentClass und ChildClass finde ich nicht ganz passend. Nach einer Vererbung erhält man eine neue Objekt-Klasse welches nur die Methoden und Properties erworben hat. Jede Änderung an der neuen Objekt-Klasse darf an den Original der geerbten Klasse keinen Einfluss haben.

Den Begriff Parent verstehe ich als einen Verweis auf das übergeordnete Objekt welches das Objekt erzeugt hat. Die Methode Parent muss das Objekt liefern.
Scheint wohl beides zu geben, siehe Wikipedia https://de.wikipedia.org/wiki/Vererbung ... ammierung)
Die vererbende Klasse wird meist Basisklasse (auch Super-, Ober- oder Elternklasse) genannt, die erbende abgeleitete Klasse (auch Sub-, Unter- oder Kindklasse).
In englischen sind sie sich auch uneinige. Da wird an einer stelle von "Such an inherited class is called a subclass of its parent class or super class." und an anderer "A Subclass, "derived class", heir class, or child class"
Macht auch Sinn, man spricht ja von Vererbung :) Aber Super- und Subclass wären wohl eindeutiger
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt)

Beitrag von mk-soft »

Ok.
Die Reihenfolge von Dispose habe ich jetzt geändert. War auch irgendwie auf meine ToDo liste.

Das mit Images, Fonts, etc hat bei mir nichts in der BaseClass zu suchen. Der Konstruktor (Initalize) bleibt bei mir nur zum anlegen eines neuen Objektes vorbehalten. Verliere sonst die Kompatibilität zu den Standards zum erstellen von Objekten.

Mein Ziel ist es immer noch mit Purebasic möglichst einfach ein Objekt zu erstellen und nicht eine neu Objektsprache zu implementieren.

Vielen Dank für Deine Anregungen die zu einen Update geführt haben. Auch gerade für mein Projekt BaseClass ClassDispatch zur Erstellung von COM-DLL´s.

Link ClassDispatch http://www.purebasic.fr/english/viewtop ... 12&t=68101
Zuletzt geändert von mk-soft am 02.05.2017 15:22, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt)

Beitrag von mk-soft »

Update v1.29
- Dispose Object wird jetzt rückwärts verarbeitet.
- LinkedList Initalize() und Dispose() über Mutex geschützt da diese über alle Objekte der Klasse gemeinsam verwendet werden.
- ObjectCounter über alle Klassen hinzugefügt. Kann dazu verwendet werden um ein Programm oder eine DLL erst zu beenden wenn kein Object mehr referenziert ist.
(If BaseClass::Class\ObjectCounter = 0 ...)

:wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Modul BaseClass (Modul als Objekt)

Beitrag von GPI »

Ich hätte noch einen Vorschlag:

Code: Alles auswählen

Procedure __AddDisposeObject#Name()
      If FindMapElement(Class\Entry(), #PB_Compiler_Module)
        FirstElement(Class\Entry()\Dispose())
        InsertElement(Class\Entry()\Dispose())
        Class\Entry()\Dispose()\Invoke = @Name()
      Else
        Debug "Error: Class is not initialized. Module '" + #PB_Compiler_Module + "'!"
        CallDebugger
      EndIf
    EndProcedure : __AddDisposeObject#Name()
So wird die Liste gleich von Anfang an "Rückwärts" aufgebaut. So kann man mit einer einfachen ForEach-Next-Schleife alle Proceduren aufrufen.

Ich glaub du hast mich leicht missverstanden. Der Konstruktor ist nicht gleich der Kopie-Konstruktor. Das sind zwei paar Stiefel. Ist auch keine Erfindung von mir, sondern wird bspw. in C++ verwendet.
Die Images, Fonts etc. haben in der BaseClass natürlich nichts zu suchen, aber in einer eigenen Konstrukt. Wie wäre es bspw. mit einen Image-Objekt, das alle Funktionen zum manipulieren in Image enthält? Wenn man jetzt eine Kopie von den Objekt erstellen will, weil man bspw. die Größe ändern will (Thumbnail-Bild), aber das Original nicht verlieren will, dann wird ein Copy-Funktion sehr praktisch. Wenn man jetzt ein SubKlasse von dieser Image-Klasse erstellt, müsste man aktuell den komplette Copy-Methode neu schreiben. Mit einen Copy-Construktor-Ding wird das einfacher. Ist halt ein i-Tüpfelchen.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt)

Beitrag von mk-soft »

Update v1.31
- Rechtschreibkorrektur: Initalize -> Initialize

Sorry, ist mir bis nicht aufgefallen...

Eigene Projekte einfach mit 'Suchen und Ersetzen' korrigieren.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt)

Beitrag von mk-soft »

Update v1.32
- Geändert: Interne Initialize und Dispose von List auf Array geändert, zur Vermeidung von Thread-Blocking
- Hinzugefügt: Kurze Version von 'BaseClass' hinzugefügt 'Modul_BaseClassSmall'

:wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt)

Beitrag von mk-soft »

BaseClass small version

Update v1.05
- Now compatible to extended version
+ Macro AsNewMethode, Macro CloneObject

Immer noch der kleinste Code zur Erstellung von Objekts :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt)

Beitrag von mk-soft »

Update v1.07
- Bugfix FreeMutex

Habe noch ein Bug gefunden. Bei Release Object wurde das Mutex nicht freigegeben

Link zum BaseClass
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul BaseClass (Modul als Objekt)

Beitrag von mk-soft »

Neue Version der BaseClassSmall :wink:

Update v1.09r3
- Die Klassen im Modul gekapselt
- Überprüfung der neuen Klasse in der Procedure 'AddClass(...)' erweitert
- Macros geändert da die Klassen nicht mehr global sind
- Geändert CheckInterface. Der Parameter wird nicht mehr benötigt
- Die Namen der Klassen sind nicht mehr 'Case Sensitive'
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten