Public class PolyList {



Scaricare 14.32 Kb.
01.06.2018
Dimensione del file14.32 Kb.

METODOLOGIE DI PROGRAMMAZIONE




7\9\2007



  1. [12 punti] Si mostri l’evoluzione dello stato (ambiente delle classi, heap, pila) durante la valutazione delle seguenti dichiarazioni di classe e durante l’esecuzione del metodo main. Si mostri lo stato anche durante le chiamate dei metodi.

public class Up extends Object{

public static int w;

public int x;

public void met1() {w=x+2; x=x+3;}

{x=3;}


}
public class Down extends Up {

public Up y;

public int z;

public void met2()

{y=new Up(); y.x=x+2; y.met1();}

public void met1() {x=x+w; z=z+1; w=0;}

{w=x+1; z=5;}

}

public class Princ extends Object {



public static void main(String[] argv) {

Down p1 = new Down();

p1.met2();

Down p2=new Down();

p2.y= p1.y;

p2.y.met1();}

}

2. Si consideri la seguente specifica del tipo di dato astratto Tabella, di cui si chiede una progettazione e implementazione gerarchica. Il supertipo è la seguente classe astratta:


public abstract class Tabella {

// OVERVIEW: una Tabella è una funzione da un dominio di oggetti omogenei a un codominio di

// oggetti omogenei. Gli elementi del dominio sono del tipo collegato a un oggetto Adder.

// Una Tabella è non modificabile.

// metodi astratti

public abstract Tabella bind (Object x, Object y) throws DuplicateException, ClassCastException, NullPointerException;



// EFFECTS: se x o y sono null solleva NullPointerException, se this è già definite per x,

// solleva DuplicateException, se x non è dello stesso tipo del dominio di this o y non è

// dello stesso tipo del codominio solleva ClassCastException, altrimenti restituisce

// una tabella diversa da this solo perché è definita anche per x e applicata a x restituisce y
public abstract boolean defined (Object x);

// EFFECTS: ritorna true se la this è definita per x, false altrimenti
public abstract Object apply (Object x) throws UndefinedException;

// EFFECTS: se this non è definita per x solleva UndefinedException, altrimenti restituisce this(x)

public abstract Object sum();



// EFFECTS: restituisce la somma degli elementi del dominio (per cui la funzione è definita)

}


  1. [5 punti] Si forniscano le specifiche delle due sottoclassi concrete Tabellavuota e Tabellanonvuota, specificando i costruttori e quei metodi per cui è diversa la specifica (verificando che venga soddisfatto il principio di sostituzione).

  2. [5 punti] Per entrambe le classi si definiscano la rappresentazione, con funzione di astrazione e invariante di rappresentazione.

  3. [5 punti] Per la classe non vuota si fornisca l’implementazione dei metodi bind, apply e sum.

  4. [3 punti] Per la classe vuota si fornisca l’implementazione dei metodi bind e sum.

public interface Adder {

// OVERVIEW: i sottotipi di Adder forniscono metodi per

// sommare e sottrarre gli elementi di un “tipo collegato”

public Object add (Object x, Object y) throws NullPointerException, ClassCastException;

// EFFECTS: se uno tra x o y è null, solleva

// NullPointerException; se x e y non sono sommabili solleva

// ClassCastException; altrimenti restituisce la somma di x e y

public Object sub (Object x, Object y) throws NullPointerException, ClassCastException;

// EFFECTS: se uno tra x o y è null,solleva NullPointerException, se x e y non sono sommabili

// solleva ClassCastException; altrimenti restituisce la differenza tra x e y

public Object zero ( );



// EFFECTS: restituisce lo zero per il tipo collegato

}



©astratto.info 2017
invia messaggio

    Pagina principale