[fpc-pascal] Extending an enumeration
    Thierry Coq 
    tcoq at free.fr
       
    Wed Jul 21 08:55:58 CEST 2010
    
    
  
On 18/07/2010 20:56, Mark Morgan Lloyd wrote:
...
> Yes, I was thinking that. However if the basic class was say a 
> round-robin scheduler with phases rrQuiescent and rrInitialised and 
> the descendant was say an HP comms protocol handler with additional 
> phases hpReceivingPadding, hpReceivedSync and so on it would seem to 
> be questionable practice to have to define all possible enumerated 
> values in the basic class.
>
...
In this case, enumeration cannot be extended. If you look at it from an 
analysis point of view, you're implementing a state machine with an 
enumeration. If your state machine is extendable instead of fixed, and 
you want to add substates to it, then a possible implementation is to 
define a state class:
TSchedulerPhase = Class(TObject);
where the basic phases are defined as variables in the base class, and 
initialized in the initialization of the base module:
var
    spQuiescent: TSchedulerPhase;
    spInitialized: TSchedulerPhase;
Initialization
   spQuiescent := TSchedulerPhase.Create;
...
The descendent class can add other states, and compute other transitions.
This is a classic implementation of the state design pattern.
I hope this helps,
Thierry.
    
    
More information about the fpc-pascal
mailing list