martedì 17 aprile 2012

Concetti di OOP: Cos'è un'Interfaccia

Come già discusso nel post Cos'è un Oggetto, gli oggetti definiscono la loro interazione con il mondo esterno tramite i metodi che espongono. I metodi costituiscono l’interfaccia dell’oggetto con il mondo esterno; i bottoni sul tuo televisore, per esempio, sono l’interfaccia tra te e gli elementi elettrici di là dell’involucro in plastica. Premendo il bottone di accensione, il televisore si accende e spegne.

Nella sua forma più comune, una interfaccia è un gruppo di metodi senza corpo. Il comportamento di una bicicletta, se specificato come un'interfaccia, potrebbe apparire come segue:

interface Bicicletta{
    public function cambiaPedalata($nuovoValore);
    public function cambiaMarcia($nuovoValore);
    public function aumentaVelocità($incremento);
    public function frena($decremento);
    public function stampaStato();
}

Per implementare questa interfaccia, il nome della propria classe va cambiato (con una particolare marca di bicicletta, per esempio, come BiciclettaAtala), e va utilizzata la parola chiave implements nella dichiarazione della classe:

class BiciclettaAtala implements BiciclettaBicycle {
    // Il resto della classe implementata come nel post precedente
}

Implementare un’interfaccia permette a una classe di divenire più formale riguardo al comportamento che promette di fornire. Le interfacce sono un contratto tra la classe e il mondo esterno, e il rispetto di questo contratto è reso obbligatorio dall'interprete PHP. Se la classe dichiara di implementare un'interfacci, tutti i metodi definiti da quell’interfaccia devono apparire nel suo codice sorgente prima che la definizione della classe sia interpretata da PHP.

Ecco cosa accade se si tenta di eseguire uno script in cui una classe non implementa tutti i metodi previsti dall'interfaccia:
La classe BiciclettaAtala provoca un errore fatale se non
implementa tutti i metodi previsti dall'interfaccia