Utente:Cristianocinotti/Sandbox
La programmazione object oriented (o Programmazione orientata agli oggetti, abbreviata spesso con OOP, object oriented programming) è uno stile, un paradigma di programmazione che consiste nel modellare un problema definendo degli oggetti che interagiscono fra di loro. Un oggetto è un insieme logico costituito da dati e da funzioni che manipolano i dati stessi e creano l'interfaccia tramite la quale l'oggetto interagisce con gli altri oggetti.
In questo capitolo tratteremo di programmazione orientata agli oggetti in PHP 5. Una delle maggiori novità di PHP 5, infatti, è proprio il nuovo object model che rende PHP un linguaggio realmente object oriented (orientato agli oggetti). Infatti, sono proprio queste nuove caratteristiche, che analizzeremo nel proseguio del capitolo, che hanno permesso lo sviluppo di tecniche aderenti ai pattern di progettazione più moderni.
Inoltre, come annunciato sul sito ufficiale, PHP 4 è ormai giunto al tramonto e non sarà più supportato a partire dall'agosto 2008.
Pertanto, per quanto riguarda l'object model di PHP 4, rimandiamo alla documentazione ufficiale (in italiano)
Le classi
[modifica | modifica sorgente]Una classe definisce una categoria di oggetti, aventi tutti le stesse caratteristiche. In effetti, il concetto di classe precede quello di oggetto:
- prima penso ad una classe e ne definisco i dati, detti attributi (i quali in realtà sono delle variabili), e le funzioni che li manipolano, dette metodi
- in seguito istanzio un oggetto a partire dalla classe: possiamo pensare alla classe come ad uno "stampino" per creare oggetti e ad un oggetto come ad un'entità "concreta" della classe.
Facciamo un esempio mentale. La classe "cane" definisce, nella nostra mente, il miglior amico dell'uomo, con tutte le sue caratteristiche, cioè gli attributi (per es. la razza, il colore del manto). L'oggetto "Lassie" è un'istanza della classe cane in cui l'attributo razza è Collie, il colore del manto è bianco e marrone, ecc....
Nel corso del capitolo, scriveremo degli esempi di codice PHP per esemplificare i concetti esposti e tenteremo di modellare il mondo animale attraverso una serie di classi. La nostra prima classe, pertanto sarà proprio la classe "Animale".
Per creare una classe in PHP è sufficiente utilizzare la sintassi:
class Animale {
//qui dentro vanno inserite le variabili (gli attributi)
//e le funzioni (metodi)
} //qui finisce la dichiarazione della classe
In questo modo è stata creata una classe Animale. Per crearne una nuova instanza, sarà sufficiente scrivere:
$var = new Animale(); //istanzia un nuovo oggetto della classe Animale
L'operatore new, infatti, crea una variabile oggetto e ne inserisce il riferimento nella variabile $var.
Adesso che abbiamo imparato a creare una classe, procediamo con la modellazione del nostro animale. Le azioni che un animale compie sono: muoversi, respirare, nutrirsi, riprodursi. Dato che, nella programmazione orientata agli oggetti, le azioni sono i metodi della nostra classe ed i metodi sono funzioni interne alla classe stessa, la nostra definizione di classe diventa:
class Animale {
function muoviti ($parametri) {
//codice del metodo
}
function respira($parametri) {
//codice del metodo
}
function mangia($parametri) {
//codice del metodo
}
function riproduzione($parametri) {
//codice del metodo
}
} //fine della definizione di classe
Adesso, dopo aver istanziato un oggetto Animale, possiamo indicargli di compiere un'azione:
$var = new Animale(); //creo l'oggetto Animale
$var->mangia(); //esecuzione dell'azione mangia()
Come si può notare dall'esempio di cui sopra, possiamo accedere ai metodi di un oggetto tramite l'operatore ->.
La pseudo-variabile $this
[modifica | modifica sorgente]Nel mondo animale, il movimento genera un dispendio di energia e quindi un aumento della respirazione. Pertanto, se vogliamo che la nostra classe modelli rigorosamente un animale, il metodo 'muoviti' dovrà richiamare il metodo 'respira', per aumentare opportunamente la respirazione. Purtroppo, però, quando si definisce una classe, non è possibile prevedere quale nome avrà l'oggetto istanziato nel programma. Quindi non è possibile scrivere:
class Animale {
function muoviti ($parametri) {
$var->respira(); //errore !!
//codice del metodo
}
//segue il resto della classe
}
perché, in fase di progettazione, non possiamo prevedere che l'oggetto, istanza della nostra classe, sia proprio $var.
Per poter accedere alle funzioni e alle variabili interne di una classe perciò si usa la pseudo-variabile $this che può essere letta come 'di questo oggetto'. Quindi, se scriviamo:
$this->respira();
PHP leggerà l'istruzione come: "richiama la funzione respira di questo oggetto. Pertanto, la nostra classe diventa:
class Animale {
function muoviti ($parametri) {
$this->respira(); //Adesso va bene !!
//codice del metodo
}
//segue il resto della classe
}
E se scriviamo:
<?php
$bestia = new Animale();
$var = new Animale();
$bestia->muoviti(); //richiama $bestia->respira()
$var->muoviti(); // questo, invece, richiama $var->respira()
?>
l'istruzione $bestia->muoviti() richiamerà correttamente $bestia->respira(), mentre $var->muoviti() richiamerà $var->respira().
Visibilità di attributi e metodi
[modifica | modifica sorgente]Costruttori e distruttori
[modifica | modifica sorgente]Ereditarietà
[modifica | modifica sorgente]Incapsulamento
[modifica | modifica sorgente]Polimorfismo
[modifica | modifica sorgente]