Aktuelle Zeit: 18.10.2018 21:47

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Module in PureBasic, was ist der Zweck?
BeitragVerfasst: 28.06.2013 22:51 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Ich hab hier mal meine Gedanken zu den Modulen zusammengefasst, weil ich denke, solange es noch
keine finale Version von PB5.20 mit vollständiger Hilfe gibt, ist dies vielleicht sehr hilfreich.

Welchen Zweck haben Module?
- Module sollen größere Softwareprojekte kontrollierbar und übersichtlich machen.
- Universelle Module müssen nur einmal programmiert werden und können wiederverwendet werden.
- Mit Modulen wird der prozedurale Ansatz dahingehend erweitert, das Prozeduren zusammen mit Daten
in logische Einheiten zusammengefasst werden.

Module haben nichts mit Klassen oder OOP zu tun!


Erläuterung:
Code in einem Module hat keinen Zugriff zu bereits im Mainsource definierten Variablen, Konstanten, Prozeduren usw...,
anders herum kann der Mainsource nur auf „exportierte“ Variablen, Konstanten, Prozeduren usw. zugreifen.
Auch Compilerdirektiven wie EnableExplicit im Mainsource haben keinen Einfluss auf das Modul (und umgekehrt).
Dies gilt auch für den Variablen-Default Type. Define.s im Mainsource wird im Modul ignoriert, es ist dort, solange nicht
anders definiert, weiterhin Integer der Default Type.

Ein Modul hat in dieser Hinsicht also eine gewisse Ähnlichkeit zu einer DLL oder einer UserLib, hat aber nicht dieselben
Nachteile.

Kollisionen mit bereits verwendeten Namen, wie Variablennamen, Procedurenamen usw. sind hier weitgehend minimiert.
Kollidieren kann nur der Modulname selber, solange wir einen voll qualifizierten Aufruf in der Form:
Modulname::Funktion() nutzen.
Bei Verwendung von UseModule erhöht sich die Gefahr der Namenskollision allerdings wieder, so das dies mit
Vorsicht zu verwenden ist (der Debugger erkennt dies und gibt eine Meldung aus!).

Es stellt also kein Problem dar, sehr kurze einfache Namen in einem Modul zu verwenden, solange wir dies nur mit
voll qualifizierten Aufruf nutzen. Wer aber UseModule vorzieht, um sich z.B. etwas schreibarbeit zu sparen, sollte,
wie man es meist auch in bisherigen Includes gemacht hat, eindeutigere Namen verwenden.

Code:
DeclareModule Name
  ; hier werden alle "Public" Variablen, Strukturen, Proceduren usw. deklariert.
  ; Proceduren sollten hier wirklich nur deklariert werden, implementiert werden sie im
  ; Module Abschnitt!
  ; Dieser Abschnitt sollte gut dokumentiert sein, so das eine Anwendung des Modules
  ; nur durch lesen dieses Abschnitt möglich ist, der Rest steht evtl. in einem TEAM
  ; auch garnicht zur Verfügung
 
  ; Wichtig: Dieser Abschnitt ist immer erforderlich! (Ansonsten wäre eine Nutzung auch
  ; gar nicht möglich ;-)
 
EndDeclareModule

Module Name
  ; Alle hier deklarierten Variablen, Strukturen, Proceduren usw., wenn sie nicht im
  ; DeclareModule deklariert wurden, sind von ausserhalb nicht erreichtbar, auch
  ; hier Global deklarierte Variablen oder hier deklarierte Konstanten!
EndModule


Auf die Syntax werde ich hier nicht weiter eingehen, das ist eigentlich aus den Beispielen von Fred
ersichtlich. Wer noch ergänzende Erklärungen hat, kann diese gerne posten.

Gruß
Thomas

_________________
PureBasic 5.70 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 19.0 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module in PureBasic, was ist der Zweck?
BeitragVerfasst: 28.06.2013 23:16 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Schön geschrieben. :allright:

_________________
BildBildBildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module in PureBasic, was ist der Zweck?
BeitragVerfasst: 29.06.2013 02:13 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg
:allright:

Wers noch mal von jemand anderem erklärt haben möchte
und des englischen mächtig ist, kann auch freaks Ausführung
hier finden:
http://www.purebasic.fr/english/viewtop ... 92#p416292

MFG PMV

_________________
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module in PureBasic, was ist der Zweck?
BeitragVerfasst: 19.08.2013 01:36 
Offline
Benutzeravatar

Registriert: 25.03.2008 15:07
Wohnort: 's Ländle
Der Eintrag im PureBasic-Blog zum Thema Module ist in dem Zusammenhang noch ganz interessant, da er die Grundregeln zur Modul-Nutzung ganz klar definiert, damit die IDE nicht rumzickt! Hier mal g'schwind 'ne recht freie Übersetztung:

Die Regeln lauten:
  1. Der gesamte DeclareModule/EndDeclareModule-Teil soll sich in einer einzelnen Datei befinden.
  2. Der gesamte Module/EndModule-Code sollte am Besten ebenso in eine einzelne Datei geschrieben werden, welche allerdings nicht zwingend mit der DeclareModule-Datei übereinstimmen muss.
  3. Zumindes die Datei, welche DeclareModule enthält sollte in Projekten zum scannen für den Autovervollständiger eingebunden werden. Der eigentliche Modul-Code muss nicht eingebunden werden, da sein Inhalt sowieso mach außen hin unsichtbar ist.
  4. Bei der Verwendung von UseModule in einer Codedatei sollten alle Module in selbiger geöffnet werden. Am Besten sind diese UseModule-Aufrufe einfach ganz an den Anfang des Codes zu setzen.
  5. Man sollte die wesentlichen Befehle des Moduls nicht durch Makros verschleiern. Die IDE löst Makros nicht auf und wird daher nicht wissen, welche Schlüsselwörter enthalten sind.

_________________
PureBasic 5.70b1 x86/x64 | Windows 7 (x64) | Windows XP (x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module in PureBasic, was ist der Zweck?
BeitragVerfasst: 19.08.2013 10:10 
Offline

Registriert: 08.11.2004 01:50
gute info :allright:

ts-soft hat geschrieben:
Module haben nichts mit Klassen oder OOP zu tun!


Mann kann sie aber in verbindung mit Interfaces verwenden um Public & Private zu reälisieren was echt praktisch ist :D

_________________
SimpleDX11 rev: 50


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module in PureBasic, was ist der Zweck?
BeitragVerfasst: 01.02.2014 16:44 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Solange man Module nur als "wiederverwendbare Library" sieht, macht es ja Sinn, das alle Strukturen, Konstanten,
Variablen usw. aus dem Mainscope nicht sichtbar sind, aber wenn man Module zur Organisation von Teamarbeit einsetzen
möchte, wäre es doch Wünschenswert, wenn auch diese Dinge in Modulen zur Verfügung stehen würden.

Hierzu greifen wir zu einer Technik, wie sie auch in einigen anderen Programmiersprachen standard ist, wir nutzen
keinen Code ausserhalb von Modulen, sondern das Modul Main (in C wird z.B. die Funktion Main oder WinMain genutzt).

Hier mal ein kleines Beispiel (Template):
Code:
DeclareModule Main
 
  Enumeration CustomEvents #PB_Event_FirstCustomValue
  EndEnumeration
 
  Enumeration Windows
    #frmMain
  EndEnumeration
 
  Enumeration Gadgets
    #frmMain_btn_ok
  EndEnumeration
EndDeclareModule

Module Main
  EnableExplicit
 
  Procedure EventClose()
    End
  EndProcedure
 
  Procedure EventClick()
    Debug "#frm_btn_ok clicked!"
  EndProcedure
 
  OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 640, 480, "Example")
  ButtonGadget(#frmMain_btn_ok, 100, 100, 80,25, "Okay")
 
  BindEvent(#PB_Event_CloseWindow, @EventClose(), #frmMain)
  BindGadgetEvent(#frmMain_btn_ok, @EventClick())
 
  Repeat : WaitWindowEvent() : ForEver
EndModule

UseModule Main

Lediglich UseModule Main wird im Mainscope aufgerufen und der Code im Module Main unterscheidet sich eigentlich
nicht von dem Code, den wir ansonsten ohne dieses Modul schreiben würden.

Das DeclareModule sollte zusammen mit allen DeclareModule in eine Extra-Datei ausgelagert werden und die weiteren
Module in Extra-Dateien, weil die lädt sich nur das Teammitglied, das für dieses Modul zuständig ist, alle anderen
benötigen nur die Deklaration um die Werte/Funktionen nutzen zu können.

Wenn die DeclareModule auch noch entsprechend dokumentiert werden, sollte einer Teamarbeit eigentlich nicht mehr
viel im Wege stehen :wink:

Gruß
Thomas

_________________
PureBasic 5.70 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 19.0 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module in PureBasic, was ist der Zweck?
BeitragVerfasst: 04.12.2015 02:09 
Offline
Benutzeravatar

Registriert: 15.03.2007 21:47
Zitat:
Module haben nichts mit Klassen oder OOP zu tun!


Technisch gesehen trifft dies bestimmt zu, allerdings haben Module und OOP gemein, dass sie das Prinzip der Kapselung verfolgen. Module könnte man sogar als statische Klassen betrachten. Evtl. willst du das ja ergänzen.

_________________
Kostenfreier Setup Creator | RCon Tool für DayZ

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module in PureBasic, was ist der Zweck?
BeitragVerfasst: 04.12.2015 10:48 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Man kann sie trotzdem nicht vererben, oder Module in Module verschachteln. Von daher sind das eher Namespaces, die nicht verschachtelbar sind, aber das hat nichts mit OOP zu tun.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module in PureBasic, was ist der Zweck?
BeitragVerfasst: 08.12.2015 16:36 
Offline
Benutzeravatar

Registriert: 15.03.2007 21:47
Statische Klassen kann man auch nicht vererben (zumindest in C#).

_________________
Kostenfreier Setup Creator | RCon Tool für DayZ

Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye