La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.

Presentazioni simili


Presentazione sul tema: "Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni."— Transcript della presentazione:

1 Ese 1 e 3 (del 6 Aprile 2005)

2 Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni ed uso dei nomi (metodi e variabili)-visibilita’ tra nomi

3 public class Sopra extends Object{ private int [] a; private int b; public void metodo1(int i) {b=a[i];} public Sopra metodo2 (Object o) { o. metodo1(10); return o;} * o di tipo Object {a = new int [10]; b = 5;} } public class Sotto extends Sopra { public int c; public Sopra metodo2 (Object o) { Sopra y = new Sotto(); ((Sopra) o).metodo1(3); return y;} {c = a[0]; }* a private } public class Princ extends Object{ static Sopra e; static Sotto f; public static void main() { Sopra d = new Sotto(); e = f.metodo2(d); e.c = 15; f = e; * e di tipo Sopra System.out. println (f); } }

4 Si abbia il tipo di dato stack di interi (IntStack) così specificato: public class IntStack { \\ OVERVIEW: uno Stack è una collezione di interi organizzati \\ per ordine di inserimento con una politica LIFO. \\ E’ modificabile. public Stack () { \\ EFFECTS: costruisce uno Stack vuoto } public int top() throws EmptyException {\\ EFFECTS: se this è vuoto solleva EmptyException, \\ altrimenti restituisce l’ultimo elemento inserito. } public void pop() throws EmptyException { \\ MODIFIES: this \\ EFFECTS: se this non è vuoto rimuove l’ultimo elemento \\ inserito, altrimenti solleva EmptyException. } public void push (int i) { \\ MODIFIES: this \\ EFFECTS: inserisce i nella pila }

5 Si dia la rappresentazione e si implementino il costruttore ed il metodo push Facile piccola variante di quello visto in classe in cui gli elementi erano pero’ Object

6 public class IntStack { \\ OVERVIEW: uno Stack è una collezione di interi organizzati \\ per ordine di inserimento con una politica LIFO. \\ E’ modificabile private Vector pila; \\ rappresentazione privata public IntStack () { \\ EFFECTS: costruisce uno Stack vuoto pila=new Vector(); } public void push (int i) { \\ MODIFIES: this \\ EFFECTS: inserisce i nella pila pila.add (new Integer(i)); }

7 Si realizzi una procedura stand-alone che, dato uno stack di interi, lo modifica aggiungendo in testa la somma degli elementi (0 se lo stack è vuoto). La procedura deve sollevare eccezione se lo stack e’ null SPECIFICA (metodo statico di un’altra classe) public static void sum(IntStack p) throws NullPointerException { \\MODIFIES: p \\EFFECTS: se p e’ null solleva NullPointerException, altrimenti inserisce al top la somma degli elementi inseriti }

8 Come si implementa? Bisogna utilizzare l’interfaccia pubblica del tipo di dato astratto IntStack (costruttori e metodi) La rappresentazione (ovvero la variabile d’istanza pila di tipo Vector non e’ visibile) Questo e’ fondamentale per preservare l’astrazione, ovvero per rendere i moduli che usano IntStack indipendenti dalla sua implementazione

9 Problemi Non esiste un modo per accedere direttamente a tutti gli elementi della pila Per leggere gli elementi e farne la somma bisogna usare top e pop fino a che non si e’ svuotata !!!!! Non esiste un metodo per dirci che la pila e’ vuota (bisogna catturare EmptyException) Inoltre la pila deve essere alla fine ricostruita (gli elementi vanno memorizzati in una struttura ausiliaria una pila o un Vector per esempio)

10

11 Altro modo Esisteva un modo molto piu’ semplice per fare la procedura Procedendo in modo ricorsivo Caso base: la pila e’ vuota, metto 0 al top. Caso ricorsivo: richiamo il metodo sum sulla pila da cui ho tolto l’elemento al top x Faccio poi la somma tra l’elemento x che era al top ed il top della pila modificata dalla chiamata ricorsiva (contiene la somma di tutti gli elementi della pila -x)

12

13 Errori Comuni Nelle dichiarazioni delle variabili d’istanza (stanno nella classe non dentro i metodi---vedi la semantica diversa) Nella procedura statica: Accedere direttamente alla rappresentazione di IntStack ovvero al Vector che la implementa p.pila.size() Per vedere quanti elementi ha

14 Altri Confondere le operazioni del tipo di dato IntStack con quelle del tipo di dato usato per implementarlo p.size() p.add(sum) Errore Metodologico: cambiare la specifica del tipo di dato IntStack (dovete imparare a pensare che la specifica e’ fissata a priori in base alle esigenze di altri) dovete imparare usare quello che c’e’) Dovete imparare usare quello che c’e’, se si potesse sempre modificare tutti i moduli di un programma in base alle nostre esigenze pensate che casino, ogni utente farebbe le sue modifiche e poi?


Scaricare ppt "Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni."

Presentazioni simili


Annunci Google