PHP/Programmazione/OOP: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
aggiunte classi astratte
Riga 122:
===Ambito===
Abbiamo detto che un attributo non è altro che una variabile della classe; bisogna tuttavia fare attenzione all'ambito dell'attributo, ovvero alla visibilità che ha l'attributo dall'esterno.<br>
* '''public''' rende l'attributo o il metodo visibile e utilizzabile anche dall'esterno della classe <br>
* '''protected''' l'attributo o il metodo possono essere visti/usati solo dall'interno della classe o da una sottoclasse <br>
* '''private''' l'attributo o il metodo può essere visto/usato solo all'interno della classe.<br>
Se si usa la dichiarazione deprecata di php<5: <code>var</code>, senza specificare l'ambito dell'attributo, questo avrà come ambito per default '''pubblico'''
 
<source lang=php>
Riga 174:
 
===Classi Astratte===
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ù 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.
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 oop.
Una classe astrattao un metodo si definiscedichiarano astratti con la keyword <code>abstract</code> '''DAFINIRE''':
<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.
 
===Incapsulamento===
Line 181 ⟶ 195:
 
===Interfacce===
 
===Namespaces===
 
[[Categoria:PHP|Programmazione orientata agli oggetti]]
 
{{Avanzamento|5075%|27 marzo 2008}}