Metodologie di Programmazione



Scaricare 15.22 Kb.
21.12.2017
Dimensione del file15.22 Kb.

Metodologie di Programmazione

17 gennaio 2006
Soluzione
2) [17 punti] Si consideri la seguente classe astratta che specifica il tipo di dato astratto Tabella. Un oggetto di tipo Table ha un numero fisso di colonne e variabile di righe. Gli elementi di una colonna devono essere tutti del medesimo tipo. E` non modificabile.


  1. Per ciascuna delle due classi, si forniscano la specifica, la rappresentazione, la funzione di astrazione e l’invariante di rappresentazione.

Osservazione: Una tabella è una struttura [x11…x1n…xm1…xmn] con n,m≥=0


public class ETable {

// OVERVIEW: tabella vuota.

AF(c)=[]

I(c)=true

public Etable ();

// EFFECTS: costruisce una tabella vuota.

public boolean isempty ();



// EFFECTS: ritorna true.

public Table add (Object [] A) throws NullPointer Exception;



// EFFECTS: se A è null solleva NullPointer Exception, altrimenti restituisce la // tabella ottenuta aggiungendo in this la riga formata dagli elementi di A

// nell’ordine

public Table remove (int i) throws InvalidRowIndexException;



// EFFECTS: solleva InvalidRowIndexException

public Table reset (int i, int j,Object v) throws InvalidEntry Exception;



// EFFECTS: solleva InvalidEntryException

public Iterator elements ();



// EFFECTS: ritorna un generatore che produrrà 0 elementi
public class FTable {

// OVERVIEW: tabella non vuota

private Object[] Vector Rep;

AF(c)=[x11…x1n…xm1…xmn] dove m=c.Rep.size(), n=c.Rep.get(0).length, xij=c.Rep.get(i-1)[j-1]

I(c)=(c.Rep<>Null) & ((i1..c.Rep.size-1)c.Rep.get(0).length== c.Rep.get(0).length) & ((i1..c.Rep.size-1) (j0..c.Rep.get(0).length-1) Class.getClass(c.Rep.get(0)[j])==Class.getClass(c.Rep.get(i)[j])

protected Ftable(Object [] Vector R);

// REQUIRES: R una rappresentazione legale per Ftable (uso limitato al solo package e sottoclassi)

// EFFECTS: costruisce una tabella avente R come rappresentazione.

public boolean isempty ();

// EFFECTS: ritorna false.

public abstract Table add (Object [] A) throws NullPointer Exception,

InvalidRowSizeException, ClassCastException;

// EFFECTS: come da testo

public abstract Table remove (int i) throws InvalidRowIndexException;



// EFFECTS: come da testo

public abstract Table reset (int i, int j, Object v) throws NullPointer Exception,

InvalidEntryException, ClassCastException;

// EFFECTS: come da testo

public abstract Iterator elements();



// EFFECTS: come da testo
(b) Per la classe vuota si implementi il metodo add

if (A==Null) throw new NPE();

Vector R = new Vector;

R.add(A);

return new Ftable(R);



  1. Per la classe non vuota si implementino il costruttore ed i metodi add e reset.

private Ftable(Object [] Vector R){

Rep = R;}

Public Table add(Object[]A){

If (A==Null) throw new NPE();

If (Rep.get(0).length != A.length) throw new IRSE();

If (!TypeCheck(Rep.get(0),A)) throw new CCE();

Vector R = new Vector();

For (int i=0; i

R.add(A);

return new Ftable(R);}

Public Table reset(int i, int j, Object v) throws NPE,IEE, CCE{

If (v==Null) throw new NPE();

If (! ((Rep.size() > i) && (Rep.get(0).length >j)) throw new IRSE();

If (Class.getClass(Rep.get(i-1)[j-1]) != Class.getClass(v)) throw new CCE();

Vector R = new Vector();

For (int k=0; k

Int L = Rep.get(i-1).length;

Object [] temp = new Object [L];

For (int k=0; k< L-1; k++) temp[k]=Rep.get(i-1)[k];

temp[j] = v;

R[i-1] = temp;

return new Ftable(R);}




  1. Si dimostri che l’implementazione del metodo add del caso non vuoto preserva l’invariante di rappresentazione e soddisfa la propria specifica.

    • preserva invariante: dall’ipotesi induttiva che this soddisfi l’invariante, possiamo limitarci a verificare che i primi tre comandi del corpo mantengono l’invariante su this esteso con il nuovo array. In particolare, il secondo e il terzo comando verificano la seconda condizione, rsip., la terza condizione.

    • preserva specifica: I primi tre comandi soddisfano le clausole sul sollevamento delle eccezioni. I successivi comandi provvedono al calcolo della nuova tabella. In particolare, il quarto e quinto creano una copia R del vettore this.Rep. La nuova copia condivide gli array componenti che non possono, per la non modificabilità delle tabelle, essere modificati. Il sesto comando aggiunge alla copia R la nuova riga. Il settimo e ultimo invoca il costruttore che provvede a trasformare R in una tabella.

elenco: ~maggiolo
~maggiolo -> Si consideri la classe astratta che specifica IL tipo di dato astratto Tabella
~maggiolo -> Si consideri la classe astratta che specifica IL tipo di dato astratto Tabella
~maggiolo -> Le gerarchie di tipi: implementazioni multiple e principio di sostituzione Come si può utilizzare una gerarchia di tipi
~maggiolo -> Si consideri la seguente classe astratta che specifica IL tipo di dato astratto “Lista circolare polimorfa omogenea”
~maggiolo -> Implementazione di un linguaggio ad alto livello
~maggiolo -> Astrazione sul controllo: gli iteratori
~maggiolo -> Si consideri la seguente specifica del tipo di dato astratto Set
~maggiolo -> Metodologie di Programmazione 29-5-2006
~maggiolo -> Insert che inserisce un elemento nella Structure un metodo remove
~maggiolo -> Public abstract class Table {


Condividi con i tuoi amici:


©astratto.info 2017
invia messaggio

    Pagina principale