Interfaces


Syntax
Interface <name> [Extends <name>]
  ...
EndInterface
Description
Les Interfaces sont utilisées pour accéder facilement aux modules 'Orientés Objets' tels que les bibliothèques COM (Component Object Model) ou DirectX. Ce type de bibliothèques sont de plus en plus courantes sous Windows et les interfaces permettent une exploitation de ces fonctions sans impacts de performances. Les interfaces jettent aussi les bases pour une 'Programmation Orientée Object' (OOP en anglais) avec PureBasic mais de solides connaissances sont nécessaires pour en tirer parti (les interfaces n'ont pas été conçues pour ajouter une couche objet à PureBasic mais plutôt pour accéder facilement à des objets dejà conçus). La plupart des interfaces utilisées sous Windows sont déjà incluses dans les fichiers résidents 'Interfaces.res' et 'InterfaceDX.res', ce qui rend leur utilisation immédiate.

Le paramètre optionnel Extends permet d'étendre une interface sans avoir à dupliquer ses fonctions (ces 'fonctions' sont aussi communément appelées 'méthodes' dans les autres langages objet tels que C++ ou Java). Toutes les fonctions contenues dans l'interface étendue seront disponibles dans la nouvelle interface. C'est utile pour un héritage simple d'objets.

La commande SizeOf peut être utilisée avec les interfaces pour déterminer la taille d'une interface et la commande OffsetOf peut être utilisée pour déterminer l'index d'une fonction dans une interface.

Les pseudotypes peuvent être utilisés pour les paramètres des fonctions de l'interface, mais pas pour le type de retour.

Note: Les concepts objets sont principalement appropriés pour les développeurs expérimentés et il n'est pas nécessaire de les maîtriser ou même les comprendre pour réaliser des applications ou jeux professionnels.

Exemple: Appel à une fonction objet

  ; Nous allons considérer que vous voulez accéder à une fonction
  ; d'un objet externe en PureBasic. Premièrement, déclarez son interface.
  ;
  Interface MyObject
    Move(x,y)
    MoveF(x.f,y.f)
    Destroy()
  EndInterface
  
  ; CreateObject est la fonction qui permet la création de l'objet.
  ; Création du premier objet..
  ;
  Object1.MyObject = MyCreateObject()
  
  ; Et du deuxieme.
  ;
  Object2.MyObject = MyCreateObject()
  
  ; Nous pouvons alors utiliser les fonctions de l'objet directement comme suit:
  ;
  Object1\Move(10, 20)
  Object1\Destroy()
  
  Object2\MoveF(10.5, 20.1)
  Object2\Destroy()

Exemple: Utilisation de 'Extends'

  ; Définition d'une interface générique 'Cube'
  ;
  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
  
  ; Nous avons maintenant 3 interfaces pour chaque objet:
  ;
  ; - 'Cube' a les fonctions Get/SetPosition() et Get/SetWidth()
  ; - 'ColoredCube' a les fonctions Get/SetPosition(), Get/SetWidth() et Get/SetColor() 
  ; - 'TexturedCube' a les fonctions Get/SetPosition(), Get/SetWidth() et Get/SetTexture()
  ;