Newsgroup: it.comp.java
Titolo: le interfacce.

Una domanda stupida: a cosa servono le interfacce?
Se non sbaglio in una interfaccia vengono dichiarati dei metodi che poi 
vengono implementati nella varie classi.
Trovo allora che dichiararli in una interfaccia sia un passaggio in piu'.


La lacune delle interfacce e che non vengono presentate con degli
esempi che ne mostrino tutta la loro pratica utilità
Qui troverai un esempio ben fatto: 
http://forum.html.it/forum/showthread.php?threadid=1179769
e qui un secondo: 
http://www.ba.infn.it/~zito/jsem/lez2.html
Ciao

music ha scritto:

Pių che stupida da vero niubbo
In sintesi
tu dichiari nella interfaccia Int1 i metodi e usi come classe
l'interfaccia, quindi scrivi
Int1 pinco = blablabla
pinco.metodo1()
Il tuo codice in questo modo funziona qualunque sia la effettiva classe
dell'oggetto.
Potremmo definirlo livello di astrazione ;)
-- 
bye
DKano

 un passaggio in piu'.
beh prendi l'esempio classico: il jdbc. il package java.sql definisce 
tutte le interfacce, ma quale siano le classi concrete di accesso al 
database è noto solo a runtime. se fosse come dici tu dovresti scrivere 
(in java, tipizzazione statica) programmi diversi perché si collegano a 
database diversi.

Ho rivisto il codice del primo link che ho segnalato: l'esempio è
formalmente corretto, ma mal implementato.
L'ho corretto e lo posto qui sotto:
copiatelo in un file che chiamerete Main.java
dopodichè compilate
con
    javac Main.java
ed eseguito
digitando
    java Main
public class Main
{
    public static void main (String[] args)
    {
        Strumento chitarra = new Chitarra();
        Strumento violino = new Violino();
        playMusic(chitarra);
/*this.*/playMusic(violino);
    }
    public static void playMusic(Strumento strumento)
    {
        strumento.suona();
    }
}
//\\//\\//\\//\\//\\
/*public*/ interface Strumento {
    void suona();
}
//\\//\\//\\//\\//\\
/*public*/ class Chitarra implements Strumento {
    public void suona(){ System.out.println("la Chitarra fa zum-zum-
zum"); }
}
//\\//\\//\\//\\//\\
/*public*/ class Violino implements Strumento {
    public void suona(){ System.out.println("il Violino fa zin-zin-
zin"); }
}

l'utilità delle interfacce non l'ho compresa a pieno fino a quando non
sono passata allo studio di modelli di programmazione (pattern).
Primo: l'interfaccia serve a dichiarare COSA FA la classe. COME LO FA
è un altro paio di maniche. Qualcosa di simile ce l'hai con l'header
in C.
Secondo: l'interfaccia è utile parlando di polimorfismo, è il
meccanismo che ti evita di dover dichiare lista per interi, float ecc
ecc. Tu hai una lista (mappa o comunque collection), cioè un oggetto
in cui tramite l'interfaccia dici COSA devi fare.
List è un'interfaccia, dici che vuoi un oggetto in cui sia possibile
fare add(element), remove(element) e simili. Come le fa dipende dalla
particolare struttura (puoi avere una coda, una pila ecc), ma per i
tuoi motivi vuoi che sappia fare queste cose.
Risulta utile, perchè salti la tipizzazione dell'oggetto e soprattutto
perchè il tuo codice diventa riusabile: se oggi decidi che il tuo add
venga fatto al centro, non devi riscrivere tutto il codice fatto. ti
basta che la tua nuova classe listaCentrale implementi la classe List,
riusando il resto già fatto
Penso inoltre che è un argomento difficile da esaurire in un post,
newsletter o quello che sia. Ti consiglio l'uso di un buon testo come
javacore2 o thinking in java per capire bene cosa è l'interfaccia,
passerei allo studio dei pattern per capire a pieno l'uso