Guida Php – Esempio pratico per l’uso di Interfacce

Introduzione

In questo capitolo scriverò delle classi e delle interfacce per la creazione e la gestione di alcuni account per un sito web.

Ovviamente il codice non sarà utilizzabile, in quanto solo parzialmente scritto. Lo scopo è quello di far capire meglio le potenzialità delle interfacce, mediante un esempio pratico facilmente intuibile e più vicino ad un’applicazione reale.

Definizione del concetto base

Questa pseudo-libreria, fornirà gli strumenti per creare e gestire 3 tipi di account :

  • Utente – Utente normale senza privilegi particolari
  • Premium – Utente premium con la possibilità di gestire una propria casella messaggi
  • Amministratore – Utente con privilegi amministrativi ed una casella messaggi personale

Per questo scopo scriveremo 1 classe astratta, 2 interfacce e 3 sottoclassi elencate di seguito :

  • AccountClasse Astratta
    Fornirà gli attributi di base per gli altri account e un metodo astratto per registrare gli account nell’archivio del sito (es. Database MySQL o file esterno)
  • AmministrazioneInterfaccia
    Fornirà dei metodi astratti di base per amministrare l’utenza, inserendo, modificando e cancellando utenti dall’archivio del sito
  • CasellaMessaggiInterfaccia
    Fornirà dei metodi astratti per la gestione di una casella messaggi personale interna al sito
  • UtenteSottoclasse derivata da Account
    Oggetto per la memorizzazione dei dati su un utente con metodo per la registrazione in archivio
  • PremiumSottoclasse derivata da Account che implementa l’interfaccia CasellaMessaggi
    Oggetto per memorizzare un utente con privilegi premium e metodi per registrare l’utente in archivio e gestire una casella messaggi personale
  • AmministratoreSottoclasse derivata da Account che implementa l’interfaccia Amministrazione e CasellaMessaggi
    Oggetto per la memorizzazione di un account di amministrazione, con metodi per la registrazione dell’account in archivio, la gestione di altri utenti (inserimento, modifica e cancellazione) e la gestione di una casella messaggi personale

Ecco un diagramma che mostra tutti gli oggetti e le loro relazioni.

Di seguito il codice testato con la corretta sintassi :

<?php

// Classe Astratta di Base
abstract class Account
{
protected $nome_utente;
protected $pass_utente;
protected $data_iscrizione = NULL;

abstract protected function registraAccount();
}

// Inizio INTERFACCE
interface Amministrazione
{
function aggiungiUtente(Utente $utente);
function modificaUtente(Utente $utente);
function cancellaUtente(Utente $utente);
}

interface CasellaMessaggi
{
const MAX_MESSAGGI = 100;

function controllaCasella();
function leggiMessaggio($id_messaggio);
function cancellaMessaggio($id_messaggio);
}
// Fine INTERFACCE

// Classi per la definizione dei vari tipi di Account

class Utente extends Account
{
public function Utente($n, $p, $d)
{
$this->nome_utente = $n;
$this->pass_utente = $p;
$this->data_iscrizione = $d;
}

public function registraAccount()
{ /* Codice per la registrazione dell'utente */ }
}

class Premium extends Account implements CasellaMessaggi
{
public function Premium($n, $p, $d)
{
$this->nome_utente = $n;
$this->pass_utente = $p;
$this->data_iscrizione = $d;
}

public function registraAccount()
{ /* Codice per la registrazione dell'utente */ }

public function controllaCasella()
{ /* Codice per il controllo della Casella Messaggi */ }

public function leggiMessaggio($id_messaggio)
{ /* Codice per la lettura di un messaggio della casella */ }

public function cancellaMessaggio($id_messaggio)
{ /* Codice per la cancellazione di un messaggio dalla casella */ }
}

class Amministratore extends Account implements Amministrazione, CasellaMessaggi
{
public function Amministratore($n, $p)
{
$this->nome_utente = $n;
$this->pass_utente = $p;
}

public function registraAccount()
{ /* Codice per la registrazione dell'utente */ }

public function aggiungiUtente(Utente $utente)
{
echo "Stai aggiungendo l'utente " . $utente->nome_utente . "<br />\n";
// Codice per aggiungere un utente all'archivio ...
echo "Utente " . $utente->nome_utente . " aggiunto con successo!<br />\n";
}

public function modificaUtente(Utente $utente)
{
echo "Stai modificando l'utente " . $utente->nome_utente . "<br />\n";
// Codice per modificare un utente dell'archivio ...
echo "Utente " . $utente->nome_utente . " modificato con successo!<br />\n";
}

public function cancellaUtente(Utente $utente)
{
echo "Stai cancellando l'utente " . $utente->nome_utente . "<br />\n";
// Codice per cancellare un utente dall'archivio ...
echo "Utente " . $utente->nome_utente . " cancellato con successo!<br />\n";
}

public function controllaCasella()
{ /* Codice per il controllo della Casella Messaggi dell'Amministratore */ }

public function leggiMessaggio($id_messaggio)
{ /* Codice per la lettura di un messaggio della casella dell'Amministratore */ }

public function cancellaMessaggio($id_messaggio)
{ /* Codice per la cancellazione di un messaggio dalla casella dell'Amministratore */ }
}

// Inizio codice di esempio

$utente = new Utente("mario", "miapassword", 1185456501);
$admin = new Amministratore("francesco", "altrapass");

$admin->aggiungiUtente($utente);

?>

Le ultime tre righe di codice, puramente a scopo illustrativo, genereranno il seguente output :

Stai aggiungendo l’utente mario
Utente mario aggiunto con successo!

Ricordatevi che l’ereditarietà multipla è concessa solo fra interfacce con extends, mentre fra classi è necessario ricorrere all’implementazione di interfacce con implements.

Nota : le interfacce non possono ereditare dalle classi.

Versione originale dell’articolo

Lezione Precedente -> Guida Php – Interfacce

Lezione Successiva -> Guida Php – Classi e metodi Final

Tags: , ,

Una Risposta a "Guida Php – Esempio pratico per l’uso di Interfacce"

Lascia un Commento

Connect with Facebook