Problème en POO
Publié : sam. 14/mars/2009 12:32
Voilà, j'avance tranquillement en POO.
Dans ce code, j'ai deux erreurs lignes 130 et 131 (champ de structure introuvable). Bon, c'est normal puisque je veux appeler des méthodes or *This récupère la structure "gabarit" (template).
2 solutions sont possibles:
1) Globaliser l'objet Prog[]. L'inconvénient c'est que les créations perdent soudain beaucoup de souplesse.
2) Corriger les lignes qui plantent en réécrivant les noms des procédures mais ça me semble faire de la POO un peu tordue.
Est-ce qu'il y a une troisième alternative plus normalisée?
Dans ce code, j'ai deux erreurs lignes 130 et 131 (champ de structure introuvable). Bon, c'est normal puisque je veux appeler des méthodes or *This récupère la structure "gabarit" (template).
2 solutions sont possibles:
1) Globaliser l'objet Prog[]. L'inconvénient c'est que les créations perdent soudain beaucoup de souplesse.
2) Corriger les lignes qui plantent en réécrivant les noms des procédures mais ça me semble faire de la POO un peu tordue.
Est-ce qu'il y a une troisième alternative plus normalisée?
Code : Tout sélectionner
Interface ProcessObject
SetName.I(Name.S)
SetParam.I(Param.S)
SetDir.I(Dir.S)
SetFlag.I(Flag.I)
ResetFlag.I()
Run.I()
Running.I()
Close.I()
ResetText.I()
ReadText.I()
GetText.S()
GetExitCode.I()
ReadWhileRunning.I()
EndInterface
Structure _ProcessClass
*vTable
Hnd.I
Name.S
Param.S
Dir.S
Flag.I
Text.S
ExitCode.I
EndStructure
Procedure.I NewProcessObject()
Protected *Object._ProcessClass
*Object = AllocateMemory(SizeOf(_ProcessClass) )
If *Object
*Object\vTable = ?VTable_ProcessClass
*Object\Name = ""
*Object\Param = ""
*Object\Dir = ""
EndIf
ProcedureReturn *Object
EndProcedure
Procedure.I ProcessClass_SetName(*This._ProcessClass, Name.S)
Protected Result.I
*This\Name = Name
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_SetParam(*This._ProcessClass, Param.S)
Protected Result.I
*This\Param = Param
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_SetDir(*This._ProcessClass, Dir.S)
Protected Result.I
*This\Dir = Dir
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_SetFlag(*This._ProcessClass, Flag.I)
Protected Result.I
*This\Flag | Flag
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_ResetFlag(*This._ProcessClass)
Protected Result.I
*This\Flag = 0
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_Run(*This._ProcessClass)
Protected Result.I
With *This
\Hnd = RunProgram(\Name, \Param, \Dir, \Flag)
EndWith
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_Running(*This._ProcessClass)
Protected Result.I
With *This
Result = ProgramRunning(\Hnd)
EndWith
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_Close(*This._ProcessClass)
Protected Result.I
With *This
\ExitCode = ProgramExitCode(\Hnd)
CloseProgram(\Hnd)
EndWith
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_ResetText(*This._ProcessClass)
Protected Result.I
With *This
\Text = ""
EndWith
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_ReadText(*This._ProcessClass)
Protected Result.I
With *This
\Text + ReadProgramString(\Hnd) + Chr(13)
EndWith
ProcedureReturn Result
EndProcedure
Procedure.S ProcessClass_GetText(*This._ProcessClass)
Protected Result.S
With *This
Result = \Text
EndWith
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_GetExitCode(*This._ProcessClass)
Protected Result.I
With *This
Result = \ExitCode
EndWith
ProcedureReturn Result
EndProcedure
Procedure.I ProcessClass_ReadWhileRunning(*This._ProcessClass)
Protected Result.I
With *This
While \Running()
\ReadText()
Wend
EndWith
ProcedureReturn Result
EndProcedure
DataSection
VTable_ProcessClass:
Data.I @ProcessClass_SetName()
Data.I @ProcessClass_SetParam()
Data.I @ProcessClass_SetDir()
Data.I @ProcessClass_SetFlag()
Data.I @ProcessClass_ResetFlag()
Data.I @ProcessClass_Run()
Data.I @ProcessClass_Running()
Data.I @ProcessClass_Close()
Data.I @ProcessClass_ResetText()
Data.I @ProcessClass_ReadText()
Data.I @ProcessClass_GetText()
Data.I @ProcessClass_GetExitCode()
Data.I @ProcessClass_ReadWhileRunning()
EndDataSection
;-> Main < <
Prog.ProcessObject = NewProcessObject()
Prog\SetDir(#PB_Compiler_Home + "\Compilers\")
Prog\SetName("PBCompiler.EXE")
Prog\SetParam("/?")
Prog\SetFlag(#PB_Program_Open)
Prog\SetFlag(#PB_Program_Read)
Prog\SetFlag(#PB_Program_Hide)
Prog\Run()
Prog\ResetText()
Prog\ReadWhileRunning()
MessageRequester("", Prog\GetText() )
Prog\Close()