PROGRAMMA ZIONE AD OGGETTI                 ESEMPI  APPLICATIVI

 

In questo primo esempio viene preso in esame un tipo molto semplice di oggetto: una pila. Nell’ implementazione dell’oggetto pila si possono notare le due fasi: costruzione della struttura dati (campi o variabili di istanza) e definizione dei metodi (operazioni) che manipolano i dati. Ogno accesso o informazione sulla pila sono possibilli attraverso i suoi metodi. L’implementazione è in linguaggio Pascal.

 

Program ObjPila;

Const

     MAXELEPIL = 100;                   { numero max elementi di pila}

Type ElePil  = integer;                 { tipo di elementi della pila}

{

****************************************************************

}  Type Pila = Object       { oggetto Pila                     *

****************************************************************

}

 

   V:array [1..MAXELEPIL] of Elepil;            { vettore contenente gli elementi                                  }

   SP:integer;                           { stack pointer                                                            }

   Constructor Init;                  { Inizializza la struttura pila                                        }

   Procedure Push(E: Elepil);            { Inserisce un nuovo elemento sulla cima della pila            }

   Procedure Pop(var E:Elepil);            {Estrae un elemento dalla cima della pila                    }

   Function Empty: boolean;            { Restituisce il valore true se la pila e' vuota            }

   Function Full: boolean;             { Restituisce il valore  true se la pila e' piena            }

   Function NumEle:integer;     { Restituisce il numero di elementi    }

   Destructor Done;             { Nun fa nulla                                                 }

end;

Constructor Pila.Init;

            begin

                        SP := 1

            end;

 

Procedure Pila.Push ( E:ElePil);

            begin

                        V[SP] := E;

                        SP:= SP + 1

            end;

Procedure Pila.Pop ( var E:ElePil);

            begin

                        SP := SP - 1;

                        E := V[SP]

            end;

 

Function Pila.Full:boolean;

            begin

                        Full := (SP>MAXELEPIL);

 

            end;

 

 

 

Function Pila.Empty:boolean;

            begin

                        Empty := (SP<=1);

            end;

Function Pila.NumEle:integer;

            begin

                        NumEle:= SP-1;

            end;

Destructor Pila.Done;

            begin

            end;

{

************************************************

*  variabili globali                           *

************************************************

}

var c1:pila;

    i:integer;

{

************************************************

*  main program                                *

************************************************

}

begin

   c1.init;

   for i:=1 to 10 do c1.push(i);

   Writeln('numero di elementi', c1.NumEle);

   While not c1.Empty do

      begin

        c1.pop(i);

        writeln('elemento', i)

      end

 

end.