Esonero del corso di Programmazione a Oggetti



Documenti analoghi
Esonero del corso di Programmazione a Oggetti

Esonero del corso di Programmazione a Oggetti

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 20 febbraio 2012

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo

Soluzione della prova scritta del 5 febbraio 2013

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Overloading - Overriding

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione. Cognome... Nome... Matricola... Compitino del 17 gennaio 2007

Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili

Oggetti. Interfacce e sottotipi

La classe java.lang.object

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

public double getraggio() restituisce la lunghezza del raggio del cerchio che esegue il metodo.

Università Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1

Parte I Java. Metodologie di Programmaziona Secondo Appello, 14/2/2006 1

Esempi in Java di program.ne O-O

Università Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Programmazione Concorrente e Distribuita

Programmazione. Cognome... Nome... Matricola... Compitino del 26 gennaio 2009

ereditarietà e polimorfismo

Risoluzione dei metodi

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Corso di Progettazione del Software

Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125

Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1

GESTIONE DEGLI ERRORI

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre Alcune Soluzioni

Ingegneria del Software

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

Corso di Laurea in Ingegneria Informatica. Corso di Reti di Calcolatori A.A. 2009/2010

Uguaglianza e copia di oggetti

Programmazione a Oggetti Lezione 10. Ereditarieta

NON ABBIAMO ANCORA CORRETTO LE PROVETTE!!!

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Istruzioni. Il codice Java delle domande non mostra gli import, che si assumono essere correttamente presenti.

JAVA GENERICS. Angelo Di Iorio Università di Bologna

Esempio: Interfacce. Gioco Interfacce

Programmazione a Oggetti. Ereditarieta

Esempio 2: Subtyping

Esempio: Interfacce. Gioco Interfacce

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73

GESTIONE DEGLI ERRORI

Programmazione ad oggetti Prova scritta 15 Gennaio 2013

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

Sommario. I Uso degli oggetti 39

Riassunto. La programmazione OO. Oggi. Esempio

Oggetti e dati primitivi 1

Motorino colore velocità tipo antifurto getvelocità accelera antifurto inserisciantifurto antifurto

Programmazione a oggetti

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

L ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà

L ereditarieta` Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni)

Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30

Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice

Implementare un'interfaccia

Passaggio dei parametri

Programmazione a Oggetti Lezione 8. Definizioni di Classi II

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Questionario di autovalutazione 4

Il Linguaggio Java. Le interfacce

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione a Oggetti Lezione 11. Eccezioni e Packages

Polimorfismo. Subtyping-polimorfismo

Capitolo 7 Un primo sguardo agli oggetti Schema e valori Elementi di classe e d istanza

Oggetti. Definizioni di Classi II

Ereditarietà: concetti di base

OCA JAVA 8 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Note ed esercizi aggiuntivi

Ereditarietà (ultima)

Ereditarietà (ultima)

Programmazione Concorrente e Distribuita

Ereditarietà e Polimorfismo

OOP Ereditarietà A. FERRARI

Greenfoot. Una Introduzione a Java, giocando. Marco Ronchetti Università di Trento

Programmazione Java: Polimorfismo

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Uguaglianza e Identità. (no, non avete sbagliato corso )

LA CLASSE Data ESERCIZIO. Definiamo la classe Data che incapsuli giorno, mese e anno (tutti int)

Programmazione I - corso B a.a prof. Viviana Bono

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

Interfacce. Dichiarazioni di tipi riferimento che descrivono oggetti in modo astratto Specificano solo le firme dei metodi.

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Corso di Fondamenti di Informatica I

unità di compilazione

COGNOME NOME MATRICOLA DATA

Transcript:

Esonero del corso di Programmazione a Oggetti Roma, 1 dicembre 2005 Considerate le seguenti definizioni di classi e interfacce in Java: interface Fumetto{ void esclama(); void utile(); class Personaggio implements Fumetto{ private String nome = ""; public void esclama(){print("gulp"); public void utile(){if (salvailmondo()) print("personaggio utile"); else print("personaggio inutile"); protected boolean salvailmondo(){return false; protected void print(string s) {System.out.println(s); public Personaggio() {print("sono nato"); public Personaggio(String s) {nome=s; class Papero extends Personaggio{ public void esclama() {print ("quack"); public void pubblicatoda() {print("disney"); public Papero() {print("si e schiuso l uovo"); public Papero(String s) {super(s); class SuperEroe extends Personaggio{ public void esclama() {print("accidenti"); protected boolean salvailmondo(){return true; public SuperEroe() {print("eccomi!"); public SuperEroe(String s){super(s); class Xman extends SuperEroe{ public void esclama() {print("per tutti i mutanti!"); public Xman() {print("sono mutato!"); public void pubblicatoda(){print("marvel Comics"); public void esclama(int x){print(""+x+"volte sono mutato"); 1

Domanda 1 Quali delle seguenti dichiarazioni produce un errore di tipo in compilazione: Xman wolverine = new SuperEroe(); SuperEroe wolverine = new Xman(); Xman wolverine = new Xman(); Infatti SuperEroe non é sottotipo di Xman Domanda 2 Quali delle seguenti dichiarazioni produce un errore in compilazione: SuperEroe wolverine = new SuperEroe("Wolverine"); SuperEroe wolverine = new Xman("Wolverine"); Personaggio wolverine = new SuperEroe("Wolverine"); Infatti la classe Xman non ha il costruttore con un parametro Domanda 3 Considerate la dichiarazione: Fumetto f = new Fumetto(); E corretta; E scorretta perché una variabile non può essere dichiarata di tipo interfaccia; E scorretta perché non si possono istanziare oggetti dalle interfacce. Domanda 4 La creazione di oggetto Fumetto gastone = new Papero("gastone"); produce in output: sono nato si e schiuso l uovo si e schiuso l uovo nessun output Infatti il costruttore con parametro della classe Papero si limita a settare la variabile nome Domanda 5 Considerate l istruzione Fumetto mystica = new Xman(); Essa produrrà l output: sono nato eccomi! sono mutato! sono mutato! eccomi! sono nato sono mutato! Infatti i costruttori delle sottoclassi prima chiamano i costruttori delle superclassi. Domanda 6 Data la dichiarazione: Fumetto magneto = new Xman(); l invocazione del metodo magneto.pubblicatoda(); produce un errore in esecuzione, perché il l oggetto magneto non può rispondere al metodo pubblicatoda() produce un errore in compilazione, perché il il tipo Fumetto non prevede nella sua interfaccia il metodo pubblicatoda() 2

Domanda 7 Data la dichiarazione: Personaggio tempesta = new Xman(); l invocazione del metodo tempesta.esclama(); produce l output gulp produce l output per tutti i mutanti! produce un errore in esecuzione, perché non è possibile determinare il codice da eseguire Infatti la scelta del metodo dipende dal tipo dinamico. Osservare che tra i due metodi esclama della classe Xman si sceglie quello senza parametri (overloading). Domanda 8 Data la dichiarazione Personaggio colosso = new Xman(); l invocazione del metodo colosso.utile(); produce l output personaggio utile produce l output personaggio inutile produce un errore in esecuzione, perché il metodo utile non è definito nella classe Xman Attenzione al dynamic method lookup: salvailmondo é ridefinito nella classe SuperEroe! E la ricerca del metodo ricomincia sempre dalla classe a cui appartiene l oggetto ricevente! Domanda 9 Data la dichiarazione Xman colosso = new Xman(); l invocazione del metodo colosso.utile(); produce l output personaggio utile produce l output personaggio inutile produce un errore in esecuzione, perché il metodo salvailmondo() non é definito nella classe Xman Come sopra: non é rilevante che cambi il tipo statico della variabile colosso. Domanda 10 Data la dichiarazione Personaggio paperinik = new Papero(); l invocazione del metodo paperinik.utile(); produce l output personaggio utile produce l output personaggio inutile produce un errore in esecuzione, perché il metodo utile() non é definito nella classe Papero Beh, non fatevi confondere dal fatto che paperinik si atteggia a SupeEroe :-) Domanda 11 Data la dichiarazione Personaggio paperone = new Papero(); l invocazione del metodo paperone.pubblicatoda(); produce l output Disney produce un errore in compilazione, perché il metodo pubblicatoda() non appartiene all interfaccia del tipo Personaggio Il compilatore controlla i tipi statici e poco importa al compilatore se al run-time paperone sarà un Papero, invece di un Personaggio. Domanda 12 Data la dichiarazione Papero paperino = new Papero(); l invocazione del metodo paperino.pubblicatoda(); produce l output Disney produce un errore in compilazione, perché il metodo pubblicatoda() non appartiene all interfaccia Fumetto 3

Domanda 13 Data la dichiarazione SuperEroe spiderman = new SuperEroe(); l invocazione del metodo spiderman.pubblicatoda(); produce l output Disney produce un errore in compilazione, perché il metodo pubblicatoda() non è definito nella classe SuperEroe Domanda 14 Considerare la definizione di classe: class Antenato implements Fumetto{ public void esclama(system.out.println("yabadabadu")) E corretta; E scorretta perché non implementa il metodo utile(); E scorretta perché non definisce il metodo costruttore; Una classe, se estende un interfaccia, deve dichiarare pubblici tutti i metodi dichiarati nell interfaccia. Domanda 15 Considerare la definizione di classe: class Antenato extends Personaggio{ public void esclama(){system.out.println("yabadabadu"); E corretta; E scorretta perché non implementa il metodo salvailmondo(); E scorretta perché non definisce il metodo costruttore. Osservare che sarebbe corretta anche class Antenato extends Personaggio implements Fumetto, perché il metodo utile() si erediterebbe da Personaggio Domanda 16 Relativamente alle definizione date, quale delle seguenti affermazioni è vera: Papero è sottotipo di SuperEroe; SuperEroe è sottotipo di Papero: I tipi Papero e SuperEroe non sono in nessuna relazione rispetto alla nozione di sottotipo. Domanda 17 Relativamente alle definizione date, quale delle seguenti affermazioni è vera: Personaggio è sottotipo di Fumetto Fumetto è sottotipo di Personaggio SuperEroe è sottotipo di Papero Domanda 18 Relativamente alle definizione date, quale delle seguenti affermazioni è vera: Tutti i tipi definiti sono sottotipi di Fumetto; Solo il tipo Personaggio è sottotipo di Fumetto; Nessun tipo definito è sottotipo di Fumetto. 4

Domanda 19 Considerate una classe TestaFumetti in cui sia dichiarato il seguente metodo: public static void esclama(fumetto f){f.esclama() Considerate la dichiarazione Personaggio dorettadoremi = new Papero();. L invocazione del metodo: TestaFumetti.esclama(dorettaDoremi) E scorretta perché dorettadoremi non è di tipo Fumetto; E scorretta perché TestaFumetti non è un oggetto; produce l output quack. Ricordare che i metodi statici si invocano sulle classi e i parametri formali possono essere supertipi dei parametri attuali. Domanda 20 Considerate la definizione: Fumetto[] F; L array F potrà contenere: Solo oggetti di tipo Fumetto; Solo oggetti istanziati con una operazione della forma new Fumetto(); Solo oggetti che hanno un tipo dinamico sottotipo di Fumetto, Domanda 21 Considerate una classe TestaFumetti in cui sia dichiarato il seguente metodo: public static void esclama(personaggio[] f) {for (int i=0; i<f.length; i++) f[i].utile(); Il metodo darà errore in esecuzione se un qualche elemento dell array fosse di tipo Xman; Il metodo stamperà solo la stringa personaggio inutile un numero di volte pari alla lunghezza del vettore; Il metodo stamperà un po di volte la stringa personaggio inutile e un po di volte la stringa personaggio utile a seconda del tipo dinamico degli elementi presenti nell array. infatti il lookup del metodo dipenderà dal tipo dinamico, mentre staticamente si é controllato che tutti gli elementi dell array siano sottotipo di Personaggio. Domanda 22 Considerate una classe TestaFumetti in cui sia dichiarato il seguente metodo: public static void esclama(personaggio[] f) {for (int i=0; i<f.length; i++) f[i].pubblicatoda(); Il metodo darà errore in compilazione perché il metodo pubblicatoda() non è definito sul tipo Personaggio; Il metodo stamperà un po di volte la stringa Disney e un po di volte la stringa Marvel Comics a seconda del tipo dinamico degli elementi presenti nell array; Il metodo potrebbe dare errori in esecuzione se il tipo dinamico di un elemento fosse Personaggio, mentre funzionerebbe se tutti gli elementi dell array avessero tipo dinamico Papero o Xman. Domanda 23 Considerata la dichiarazione: Fumetto uomoghiaccio = new Xman();. L invocazione di metodo uomoghiaccio.esclama(3); produce in output 3 volte sono mutato; produce in output sono mutato!; produce un errore in compilazione. perché staticamente uomoghiaccio ha tipo Fumetto, che non definisce il metodo esclama(int) Domanda 24 Considerata la dichiarazione: SuperEroe paperinik = new Papero();. compila ed esegue correttamente; produce un errore in esecuzione; produce un errore in compilazione. vedi risposta domanda 16. 5