lunedì 16 aprile 2012

Concetti di OOP: Cos'è un Oggetto

Negli esempi dei post di questo blog, ho intenzione di servirmi il più possibile della OOP. 
Se non hai mai utilizzato prima un linguaggio di programmazione object-oriented, hai bisogno di apprendere i concetti base prima di poter iniziare a scrivere del codice. Con questo post e i successivi 3 voglio fornire una introduzione ai concetti di oggetti, classi, ereditarietà, interfacce. Ogni argomento mostra come questi concetti siano in relazione con il mondo reale, mentre si fornisce un'introduzione alla sintassi del linguaggio di programmazione PHP.

Cos'è un Oggetto?

Gli oggetti sono la chiave per comprendere la tecnologia object-oriented. Guardati intorno ora e vedrai molti esempi di oggetti del mondo reale: un cane, la scrivania, la televisione, una bicicletta.
Gli oggetti del mondo reale condividono due caratteristiche: tutti hanno stato e comportamento. I cani hanno uno stato (nome, colore, fame, razza) e comportamento (abbaiare, agitare la coda, riportare). Anche le biciclette hanno lo stato (marcia corrente, pedalata, velocità) e comportamento (cambia marcia, cambia pedalata, frenare). Identificando lo stato e il comportamento degli oggetti del mondo reale è un buon modo di iniziare a pensare in termini di programmazione object-oriented.
Prenditi qualche istante per osservare gli oggetti del mondo reale vicini a te. Per ogni oggetto puoi porti due domande: “In quali possibili stati può essere quest’oggetto?” e “Quali possibili comportamenti può realizzare?”. Prova ad annotare le tue osservazioni. Noterai che gli oggetti del mondo reale differiscono in complessità; la lampada sulla scrivania potrebbe avere due soli possibili stati (accesa o spenta) e due possibili comportamenti (accendi e spegni), ma una radio può avere molteplici stati (accesa, spenta, volume, stazione) e comportamenti (accendi, spegni, aumenta volume, diminuisci volume, cerca, cerca tutto e sintonizza). Puoi anche notare che alcuni oggetti ne contengono altri. Tutte queste osservazioni si traducono nel mondo della programmazione object-oriented.
Un oggetto software
Gli oggetti software sono concettualmente simili agli oggetti del mondo reale: anche loro sono costituiti da stato e relativo comportamento. Un oggetto memorizza il proprio stato nei campi (variabili in un qualche linguaggio di programmazione) ed espone il proprio comportamento attraverso i metodi (funzioni in un qualche linguaggio di programmazione). I metodi operano sullo stato interno di un oggetto e servono come principale meccanismo per la comunicazione tra oggetti. Il nascondere lo stato interno dell’oggetto e richiedere che tutte le interazioni siano realizzate tramite i metodi di quest'ultimo è conosciuto come incapsulamento dei dati – un principio fondamentale della programmazione object-oriented.


Considera per esempio una bicicletta:

Un modello per Bicicletta come oggetto software
Attribuendo lo stato (marcia, velocità, pedalata) e fornendo i metodi per cambiare quello stato, l’oggetto ha il controllo sul come il mondo esterno può utilizzarlo. Per esempio, se la bicicletta ha solo 6 marce, un metodo che cambia marcia potrebbe rifiutare qualunque valore minore di 1 o maggiore di 6.


Realizzare codice in oggetti software individuali fornisce alcuni benefici, tra cui:
  1. Modularità: il codice sorgente per un oggetto può essere scritto e mantenuto indipendentemente dal codice sorgente di altri oggetti. Una volta creato, un oggetto può essere facilmente trasferito all'interno del sistema.
  2. Nascondere l’informazione: attraverso l’interazione con i soli metodi dell’oggetto, i dettagli della sua implementazione interna restano nascosti al mondo esterno.
  3. Riuso del codice: se un oggetto esiste già (per esempio scritto da un altro sviluppatore), puoi utilizzare quell'oggetto nel tuo programma. Questo permette agli specialisti di implementare/testare/debuggare oggetti complessi e con compiti specifici, che possono poi essere eseguiti nel proprio codice.
  4. Facile debugging e integrazione: se un oggetto particolare mostra di avere dei problemi, puoi semplicemente rimuoverlo dalla tua applicazione e inserire un oggetto differente al suo posto. Ciò e simile alla riparazione di problemi meccanici nel mondo reale. Se si rompe un bullone, lo sostituisci, non cambi l’intera macchina.