PHP/Programmazione/OOP: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 171:
La riga 32 mostra che il metodo ristampa può accedere alla variabile protetta <code>prot</code>, infatti tale variabile è estesa alla classe <code>altro</code>.
 
==Classi Astratteastratte==
Le ''classi astratte'' definiscono delle linee guida per i metodi che le classi che estendono dovranno seguire. Non definiscono il corpo del metodo, bensì il nome, la visibilità, i parametri, cioè quella che viene definita la ''signature''. Il motivo è semplice, si pensi ad un programma sviluppato da più gruppi di sviluppatori, un gruppo definisce la classe madre, mentre gli altri scrivono delle sottoclassi ridefinendo alcuni metodi. Se i gruppi non hanno una buona intercomunicabilità potrebbero ridefinire a piacere i metodi della superclasse cambiando i parametri o la visibilità dello stesso metodo e per evitare ciò esistono le classi astratte.<br>
 
Il motivo è semplice, si pensi ad un programma sviluppato da più team, il team A definisce la classe madre ed i team B e C definiscono delle sottoclassi ridefinendo alcuni metodi. Se i due team non hanno una buona intercomunicabilità potrebbero ridefinire a piacere i metodi della superclasse cambiando i parametri o la visibilità dello stesso metodo, per evitare ciò esistono le classi astratte.<br>
Se una classe ha anche solo un metodo astratto è obbligatorio definirla come astratta, se una classe eredita da una classe astratta è obbligatorio ridefinirne tutti i metodi astratti. In PHP non è possibile dichiarare un metodo come astratto e definirlo nella stessa classe come permettono alcuni linguaggi oopOOP.
 
Una classe o un metodo si dichiarano astratti con la keyword <code>abstract</code>:
<source lang=php>
class abstract prova {
public $var="ciao";
abstract public function miometodo($var1, $var2);
}
 
class sotto extends prova {
public function miometodo($var1, $var2){
echo "$var1 $var2";
}
</source>
 
Bisogna mantenere inalterata la signature e cioè nome namespace parametri, si può cambiare solo la visibilità, restringendola.<br>
Bisogna mantenere inalterata la signature e cioè nome namespace parametri, si può cambiare solo la visibilità, restringendola. Una classe astratta NON'''non può essere istanziata direttamente'''.
 
==Incapsulamento==