Domande esami Flashcards

1
Q

Descrivere il meccanismo dell’overloading e overriding.
Produrre un esempio minimale scritto in Java che concretizzi quanto spiegato.

A

Overloading e Overriding sono concetti legati al polimorfismo il quale, nella programmazione ad oggetti,
si riferisce alla capacità di un’espressione di assumere valori diversi in base al tipo di dato su cui viene applicata o in base al tipo di dato in input.
OVERRIDE
Il processo chiamato override permette di rendere una sottoclasse più specifica rispetto alla classe base, potendo ridefinire i metodi della superclasse a patto che mantenga:
* Lo stesso nome e parametri
* Lo stesso tipo di valore di return
* La stessa semantica
public class Animale{
public void saluta(){
System.out.println(“Ciao, sono un animale!)
}
public class Cane extends Animale{
public void saluta(){
System.out.println(“Ciao, sono un cane!)
}
}
OVERLOAD
implementazione di più metodi con lo stesso nome ma con argomenti e valori di return diversi all’interno della stessa
classe, eseguendo operazioni diverse a seconda degli input ricevuti.
public void setDate(int day, int month, int year){
this.date = new Date(day, month, year);
}
public void setDate(String date){
String[] parts = date.split(“/”);
day = Integer.parseInt(parts[0]);
month = Integer.parseInt(parts[1]);
year = Integer.parseInt(parts[2]);
this.setDate(day, month, year);
// utilizzo dell’altro metodo definito (riuso del codice)
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Descrivere il concetto di interfaccia, spiegando le motivazioni che stanno alla base del suo utilizzo e i vantaggi che apporta allo sviluppo. Produrre un esempio minimale scritto in Java che concretizzi quanto spiegato

A

CONCETTO
Le interfacce sono un meccanismo di completa astrazione in grado di descrivere il comportamento di altre classi.
- Non hanno metodo costruttore e non può essere costruito un oggetto di tipo interfaccia.
- una classe può implemetare un num illimitato di interfacce
- tutte le sottoclassi che lo impementano devono fare la riscrittura dei metodi dell’interfaccia
- la classe che lo utilizza deve usare la keyword implements
- i metodi sono pubblici astratti (ossia senza una vera implemtezione)
- si possono efinire metodi di default che non hanno bisogno di essere riscritti dalle sottoclassi
es.
public interface Measurable{
double getMeasure();
}
public class Rectangle implements Measurable{
@Override
public double getMeasure(){
// ridefinizione del metodo
}
MOTIVAZIONI
Il linguaggio Java usa l’ereditarietà singola.
Questo vuol dire che una classe ha sempre una sola superclasse da cui eredita variabili, proprietà e metodi.
L’ereditarietà singola è più semplice da gestire ma comporta dei limiti.
Per superare questi limiti, in Java sono state introdotte le interfacce.
Le interfacce generano errori se le sottoclassi che le implementano non ridefiniscono i metodi, generando quindi una garanzia che le sottoclassi definiscano quei particolari metodi, e uno standard dato che i metodi hanno firma uguale definita dall’interfaccia.
con java 8 sono stati introdotti i metodi default per evitare la riscrittura di codice per sottoclassi che implementavano lo stesso metodo con lo stesso identico corpo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Spiegare le principali differenze tra ArrayList e Set in Java

A

ArrayList implementa l’interfaccia list che appartiene a Collections. è una collezione di dati, primitivi e non, sequenziale con politica FIFO, ad accesso posizionale, di grandezza dinamica,ammette duplictai.
I set anche implementanol’interfaccia Collections, sono una collezione di oggetti. Implementano Set le classi TreeSet e Hashset. hashset utilizza una tabella hash, non ha ordinamento, e svolge le operazioni add, remove, size,contains in tempo costante. treeset utilizza un albero per riuscire ad avere un oridnamento interno, non supporta in valore null, non ammette duplicati.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Descrivere il meccanismo dell’ereditarietà in modo esaustivo spiegando il suo funzionamento e come i
modificatori di visibilità si relazionano a tale meccanismo. Produrre un esempio (con codice minimale) che concretizzi quanto richiesto.

A

L’ereditarità è un principio della programmazione ad oggetti che consiste nel poter definire una sottoclasse (o classe derivata) di una classe base (superclasse), dalla quale erediterà tutti i metodi e gli attributi.si ha la possibilità di definire atri metodi, attributi, ridefinire con l’overriding e l’overloading i metodi ereditati (facendo uso del poliformismo). in generale, eredita tutti i modificatori di visibilità public, protected e default, mentre private resteranno visibile solo all interno della classe base.
Ricordiamo che i modificatori d’accesso sono
public - visibile da tutti
protected - visibile solo dalla classe e dalle sottoclassi che la estendeno
default - visibile solo dalla classe e dalle classi che appartengono allo stesso pacchetto (modificator eusato quando non è presente nessun modificatore esplicito)
private - visibile solo all’interno della stessa classe
L’ereditarietà permette di creare una gerarchia tra el classi e di modellare concetti generali (le classi superiori) e concetti più specifici (le clasi derivate). incentiva la progettazione compatta e il non riutilizzo del codice, permette il riutilizzo di funzionalità gia scritte, è più semplice da mantenere.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Spiegare le principali differenze tra l’utilizzo di un array e della classe ArrayList nella gestione di una
sequenza di elementi.

A

Un arraylist è una classe che impelmenta l’interfaccia List che appartiene a Collections, ha quindi a disposizione una serie di uitli operazioni che richiedono pochi parametri di input. rappresenta una collezioni di valori sequenziale secondo un ordinamento FIFO. ha grandezza dinamica, accetta duplicati, ha accesso posizionale.
un array ha grandezza prestabilita, ma è più indicato per la gestione delle matrici multidimensionali. le operazioni di manipolazione sono a carico del programmatore.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly