Zum Inhalt springen

Xbase++

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 30. September 2004 um 13:33 Uhr durch Klammerauf (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

XBase++ ist eine Programmiersprache für 32-Bit Plattformen. Sie kann sowohl prozedural als auch objektorientiert benutzt werden, wobei die eindeutigen Stärken in der Objektorientierung liegen.

XBase++ ist mit einem internen Befehlssatz für das Arbeiten mit dBase Datenbanken ausgerüstet, weshalb zur Arbeit mit DBF-Dateien keine weiteren Treiber oder DBMS erforderlich sind. XBase++ bietet eine vollständige Integration aller gängien Windows-Forms, die innerhalb des Programmcodes als Objekte gekapselt sind. In XBase++ werden alle objektorientierten Ansätze unterstützt (Einfach- und Mehrfachvererbung, Abstrakte Klassen, abstrakte Methoden, ...). Leider fehlt im Standardsprachumfang bzw. in den mitgelieferten Laufzeitbibliotheken eine Unterstützung für Standardnetzwerkprotokolle (ausser NetBios), wie TCP/IP, was aber durch zahlreiche Zusatzprodukte ausgeglichen werden kann. Zudem gibt es eine Vielzahl weiterer Zusatzbibliotheken, mit denen beispielsweise E-Mail Funktionalität via SMTP und POP Protokoll genutzt werden kann. Deweiteren kann man die OpenGL Schnittstelle nutzen oder via ODBC auf beliebige Datenbanken zugreifen. Die Integration von ActiveX Komponenten ist ebenso möglich wie das Benutzen von .Net Komponenten. Über einen so genannten WebApplicationAdapter ist es sogar möglich Geschäftsprozesse via Internet zu tätigen und direkt über das Internet auf dBase-Datenbanken zuzugreifen. Das Ergebnis kann dann bequem in jedem beliebigen Browser dargestellt werden oder über ActiveX-Komponenten sogar in der eigenen Programmoberfläche.

Leider findet XBase++ keinen so großen Anklang wie andere Produkte, wie beispielsweise C++, Visual Basic oder C#, obwohl die Sprache gegenüber diesen einige deutliche Vorteile aufweist. So ist man bei XBase++ nicht gezwungen Variablen zu deklarieren. Dynamische Variablen, die zur Laufzeit erzeugt werden, stellen für XBase++ kein Problem dar. Auch die durch zugewiesene Datentypen weithin eingeschränkte Nutzbarkeit von Variablen ist in XBase++ nicht vorhanden. So kann man prinzipiell in jede Variable während der Abarbeitung einer Funktion, Prozedur oder Methode jeden beliebiegen Datentypen speichern. Dadurch kann man beispielsweise in einem Kontext die Variable "i" als numerischen Counter innerhalb einer "FOR ... NEXT" Anweisung benutzen und die gleiche Variable unmittelbar nach Beendigung der Schleife mit einem Stringwert belegen oder ein Array darüber referenzieren. Ein großer Nachteil ergibt sich jedoch direkt aus der relativ geringen Durchdringung des Marktes mit Produkten dieser Sprache, was sich zwangsläufig bis zum Entwickler niederschlägt. Dem nämlich steht für seine Arbeit nicht in dem Umfang Informationsmaterial zur Verfügung, wie das bei den "großen" Sprachen der Fall ist und viele Dinge, wie oben beschriebene Zusatzfunktionalitäten, müssen bei Drittanbietern für oftmals viel Geld nachgekauft werden, während diese in den weitverbreiteten Sprachen bereits zur Grundausrüstung gehören. Bis vor einigen Jahren gab es für XBase++ noch keine offiziell vom Hersteller der Sprache (Alaska Software) vertriebene IDE. Man musste sich also mit anderen Multilanguage-IDE's behelfen, was aber nicht unbedingt von Nachteil war. Seit einiger Zeit wird aber die IDE Visual XBase angeboten, die mittlerweile in der Version 2.0 (Stand 24.09.2004) zu haben ist.

XBase++ ist kompatibel zu Clipper, was eine Portierung von Clipperprogrammen in die 32-Bit Windowswelt ermöglicht.

  • Nachteil von XBase

Es ist leider nicht möglich komponentenbasiert und sprachübergreifend mit XBase++ zu arbeiten. So kann man zwar in C++ oder Visual Basic geschriebene DLL's nutzen, umgekehrt jedoch kann man mit XBase++ keine DLL's erstellen, die sich aus anderen Sprachen heraus nutzen lassen.

  • Syntaxbeispiel

Ein wesentlicher Punkt, warum man sich als Programmierer für oder gegen eine bestimmte Sprache entscheidet, ist sicher der Aufwand den es macht, diese zu erlernen. XBase++ stellt dahingehend eine recht einfache Sprache dar, die starke Parallelen und C++ zeigt. Folgender Beispielquellcode zeigt eine Klasse, deren Objektinstanzen nur eine Methode haben, mit der sie alle in einem angegebenen Verzeichnis vorhandenen Dateien eines bestimmtesn Typs sammeln, in einer Klassenvariable speichern und in einer einfachen Messagebox anzeigen.


  • zuerst wird die Klasse definiert

CLASS FolderScanner

EXPORTED:
VAR aFiles
VAR cFileMask
VAR cDirectory
METHOD Init
METHOD ListFilesFromFolder

ENDCLASS

  • dann werden die Methoden definiert

METHOD FolderScanner:Init( cMask, cDirectory )

//die übergebenen Variablen cMask und cDirectory werden automatisch als LOCAL definiert
IF VALTYPE( cMask ) == "C" .AND. ! EMPTY( ALLTRIM( cMask ) )
::cFileMask := ALLTRIM( cMask )
ELSE
::cFileMask := ""
ENDIF
IF VALTYPE( cDirectory ) == "C" .AND. ! EMPTY( ALLTRIM( cDirectory ) )
::cDirectory := ALLTRIM( cDirectory )
ELSE
MSGBOX( "Kein Pfad zum Durchsuchen angegeben. Programmabbruch", "Achtung" )
QUIT
ENDIF
::aFiles := {}

RETURN self

METHOD FolderScanner:ListFilesFromFolder()

LOCAL aX, i //eine Typisierung ist nicht notwendig
LOCAL cMessageString := "" //bei der Deklaration können Werte zugewiesen werden
IF ! DIRCHANGE( ::cDirectory ) == NO_DISK_ERR
//Konstanten wie NO_DISK_ERR können in Include-Dateien definiert werden, ähnlich den *.h-Dateien in C
MSGBOX( "Das angegebene Verzeichnis existiert nicht. Programmabbruch", "Achtung" )
QUIT
ELSE
aX := DIRECTORY( "*." + ::cFileMask )
ENDIF
FOR i:= 1 TO LEN(aX)
IF RIGHT( aX[ i, F_NAME], LEN( ::cFileMask ) ) == ::cFileMask
AADD( ::aFileMask, ::cDirectory + "\" + aX[ i, F_NAME ] )
cMessageString += aX[ i, F_NAME ] + CHR(13) + CHR(10)
ENDIF
NEXT
MSGBOX( "Zur Dateimaske " + ::cFileMask + ;
" wurden folgende Dateien im angegebenen Verzeichnis gefunden : " + ;
::cMessageString, "Ergebnis" )

RETURN self

  • So kann die Klasse verwendet werden

PROCEDURE Main()

LOCAL oFolderscanner
oFolderscanner := Folderscanner():New( "*.EXE", "C:\TEMP" )
oFolderscanner:ListFilesFromFolder()

RETURN

Quellcode neu formatiert, überarbeitet und ergänzt --Klammerauf 13:33, 30. Sep 2004 (CEST)