Re: Poo class abstraite
Publié : dim. 17/déc./2017 10:11
Il faudrait que tu me montre une lib que désirerais utilisée et regarderais ce qu'il est possible de faire? Du moins si cela t’intéresse
Truc de dingue, en fait dans tout ce que je t'ai écrit avant, je voulais rajouter (et oui j'ai pas tout dit ) que le rêve serait de trouver quelque chose qui permettrait de "traduire" la POO en quelque chose d'utilisable en PB, en fait FRED y avait déjà pensé il y a longtempsLes 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 [Couic]
Code : Tout sélectionner
Interface Inter_Face
MSG(Message.s)
EndInterface
Structure OBJ
VTable.l
Function.l[SizeOf(Inter_Face)/4]
EndStructure
Procedure Message(*t.Inter_Face, Message.s)
MessageRequester("", Message.s)
EndProcedure
Procedure Constructor()
*OBJ.OBJ = AllocateMemory(SizeOf(OBJ))
*OBJ\VTable = *OBJ+OffsetOf(OBJ\Function)
*OBJ\Function[0] = @Message()
ProcedureReturn *OBJ
EndProcedure
Procedure Destructor(*OBJ.OBJ)
FreeMemory(*OBJ.OBJ)
EndProcedure
*MyOBJ.Inter_Face = Constructor()
*MyOBJ\MSG("Hallo, dies ist ein Testtext")
Destructor(*MyOBJ)
Code : Tout sélectionner
Structure maStructure
nom.s
var.l
EndStrucure
Code : Tout sélectionner
Structure maStructure
*MaFonction1
*MaFonction2
nom.s
var.l
EndStrucure
Code : Tout sélectionner
maStructure\MaFonction1 = @MaFonction1() ; Même la fonction à des paramètres on ne les indique pas ici
;etc..
Code : Tout sélectionner
Structure maStructure
*MesFonctions
nom.s
var.l
EndStrucure
Code : Tout sélectionner
DataSection
MESFONCTIONS:
data.i @MaFonction1()
data.i @MaFonction2()
data.i @MaFonction3()
EndDataSection
Code : Tout sélectionner
maStructure\MesFonctions = ?MESFONCTIONS
Code : Tout sélectionner
*monPointeur.maStructure = AllocateMemory(maStructure)
; ou (moi je préfère cela)
*monPointeur.maStructure =AllocateStructure(maStructure)
Code : Tout sélectionner
Structure people
*fonctions ; adresse des procédures
nom.s
EndStructure
; simple procédure ou l'adresse de l'objet sera automatiquement renvoyée par
; l'interface
Procedure hello(*this.people)
With *this
Debug "Bonjour "+\nom
EndWith
EndProcedure
Procedure bye(*this.people)
With *this
Debug "Aurevoir "+\nom
EndWith
EndProcedure
; le constructeur
Procedure newPeople(nom.s)
Protected *this.people = AllocateStructure(people)
With *this
\fonctions = ?FONCTIONS
\nom = nom
ProcedureReturn *this
EndWith
EndProcedure
DataSection
FONCTIONS:
Data.i @hello()
Data.i @bye()
EndDataSection
; l'interface je vais utiliser d'autre noms de fonction
; pour te montrer que le nom importe peux, l'ordre des fonction par contre
; est primordial
Interface Personne ; je peux également peux appeller l'interface comme je le veux
Bonjour()
Aurevoir()
EndInterface
; je crée quelques objet
Global.Personne Jean,Pierre,Alain
Jean = newPeople("Jean")
Pierre = newPeople("Pierre")
Alain = newPeople("Alain")
Debug Alain\Bonjour()
Debug Pierre\Bonjour()
Debug Jean\Bonjour()
Debug Alain\Aurevoir()
Debug Pierre\Aurevoir()
Debug Jean\Aurevoir()