Esercizio 4
Definisci l'oggetto Strumento dotato di un metodo suona() atto ad esternalizzare
il suono di uno strumento musicale.
Successivamente ottenere gli oggetti derivati Tamburo, Chitarra e Tromba,
ciascuno dotato di un suo specifico suono che possa essere usato dal metodo
suona definito per l'oggetto Strumento.
In base alle semplici nozioni viste nella parte teorica è relativamente semplice realizzare un breve scritto che soddisfi la richiesta .
La semplicità della soluzione, mette in evidenza la praticità di JS nell'approccio ai vari problemi per la gestione di gerarchie di oggetti .
Usando il linguaggio Java avremmo dovuto definire una interfaccia per ottenere lo stesso risultato:
class Test { public static void main(String[] args) {
Strumento lista[]=new Strumento[5];
lista[0]=new Tromba();
lista[1]=new Tamburo();
lista[2]=new Chitarra();
lista[3]=new Tromba();
lista[4]=new Chitarra();
for (int i=0;i<lista.length;i++)lista[i].produciSuono();
}
}
interface Strumento {
public void produciSuono(); }
class Chitarra implements Strumento {
public void produciSuono() {System.out.println("dlen-dlen-dlen");}
}
class Tamburo implements Strumento {
public void produciSuono() {System.out.println("bum-bum-bum");}
}
class Tromba implements Strumento {
public void produciSuono() { System.out.println("ta ta ta"); }
}
Ricordiamo che un'interfaccia è
• È un'unità di programmazione definita da un certo numero di metodi
d'istanza pubblici che sono implicitamente astratti
• È un contenitore di metodi astratti, non contiene variabili istanza
• La classe che implementa un'interfaccia deve implementare tutti i
metodi d'istanza definiti nell'interfaccia, altrimenti diventa astratta
• In Java viene definita con la parola riservata interface