Interfaces


Syntax
Interface <Name> [Extends <Name>]
  ...
EndInterface
Beschreibung
Interfaces werden benutzt, um auf objektorientierte Module wie COM (Component Object Model) oder DirectX Dynamic Libraries (DLL) zuzugreifen. Diese Art von Bibliotheken (Libraries) werden unter Windows mehr und mehr üblich und die Interfaces füllen die Lücke, um auf diese ohne Performanz-Verlust zugreifen zu können. Sie legen auch die Basis für objektorientiertes Programmieren in PureBasic, erfordern zu deren Realisierung jedoch einige fortgeschrittene Kenntnisse. Die meisten der Standard Windows Interfaces sind bereits in einer Resident-Datei implementiert, was die direkte Nutzung dieser Objekte ermöglicht.

Der optionale Extends Parameter ermöglicht, ein Interface mit neuen Funktionen eines weiteren Interfaces zu erweitern (diese Funktionen werden in objektorientierten (OO) Sprachen wie C++ oder Java üblicherweise 'Methoden' genannt). Alle im erweiterten (extended) Interface gefundenen Funktionen werden im neuen Interface verfügbar und werden vor die neuen Funktionen platziert. Dies ist nützlich, um grundlegende Vererbung von Objekten durchzuführen.

SizeOf kann bei Interfaces benutzt werden, um die Größe des Interface zu ermitteln. OffsetOf kann verwendet werden, um den Index der angegebenen Funktion zu ermitteln.

Hinweis: Das Konzept und die Verwendung von Objekten sind hauptsächlich für erfahrene Programmierer gedacht und es ist nicht erforderlich, diese zu verstehen oder sogar zu benutzen, um professionelle Software oder Spiele zu erschaffen.

Beispiel: Einfaches Beispiel eines Objekt-Aufrufs

  ; Wir stellen uns jetzt vor, Sie möchten auf ein externes Objekt (in einer DLL zum Beispiel)
  ; in PureBasic zugreifen. Zuerst müssen Sie sein Interface deklarieren:
  ;
  Interface MyObject
    Move(x,y)
    MoveF(x.f,y.f)
    Destroy()
  EndInterface
  
  ; CreateObject ist die Funktion zum Erstellen Ihres Objekts, aus der DLL.
  ; Erstelle das erste Objekt...
  ;
  Object1.MyObject = MyCreateObject()
  
  ; Und das zweite.
  ;
  Object2.MyObject = MyCreateObject()
  
  ; Dann benutzen Sie einfach die Funktionen zum Zugriff auf das gewünschte Objekt.
  ;
  Object1\Move(10, 20)
  Object1\Destroy()
  
  Object2\MoveF(10.5, 20.1)
  Object2\Destroy()

Beispiel: Beispiel mit 'Extends'

  ; Definieren eines einfachen Würfel Interface Objekts
  ;
  Interface Cube
    GetPosition()
    SetPosition(x)
    GetWidth()
    SetWidth(Width)
  EndInterface
  
  Interface ColoredCube Extends Cube
    GetColor()
    SetColor(Color)
  EndInterface
  
  Interface TexturedCube Extends Cube
    GetTexture()
    SetTexture(TextureID)
  EndInterface
  
  ; Wir haben jetzt 3 verschiedene Objekt-Interfaces:
  ;
  ; - 'Cube' welches Get/SetPosition() und Get/SetWidth() Funktionen besitzt.
  ; - 'ColoredCube' welches Get/SetPosition(), Get/SetWidth() und Get/SetColor() Funktionen besitzt
  ; - 'TexturedCube' welches Get/SetPosition(), Get/SetWidth() und Get/SetTexture() Funktionen besitzt
  ;

Beispiel: Erstellen eines eigenen Objekts in PureBasic (sehen Sie die fortgeschrittenen Beispiele im Ordner 'PureBasic/Sources')