La programmazione orientata agli oggetti (Object Oriented Programming, da cui l'acronimo OOP) è uno stile fondamentale di programmazione (o paradigma) che si basa principalmente sul raggruppamento all'interno di un'unica entità (la classe) delle strutture dati e delle procedure che operano su di esse.
Istanziando la classe, che rappresenta fondamentalmente una struttura astratta, è possibile creare "oggetti" concreti (le cosiddette istanze) dotati di proprietà (dati/variabili) e metodi (procedure/funzioni) che operano sui dati dell'oggetto stesso.
Per quanto complessa possa essere questa definizione, potete rassicurarvi sapendo che quest'ultima racchiude la maggior parte dei concetti fondamentali della OOP.
OOP e PHP
Prima della nascita della versione 5, PHP era un linguaggio sostanzialmente procedurale, ovvero fortemente basato sulle funzioni, interne o user-defined. Nonostante fosse dotato di un singolare modello ad oggetti, questo non poteva assolutamente essere considerato completo e non permetteva di mettere in pratica i veri concetti della programmazione OOP. Di conseguenza, il vecchio modello non consentiva di usufruire di tutti i vantaggi di questo paradigma.
Con il rilascio della versione 5, le cose sono decisamente cambiate. Ora PHP dispone di un solido modello OOP completo di tutti i più importanti strumenti che questo offre. Dunque, anche se PHP continua a non essere un linguaggio nativamente orientato agli oggetti (come ad esempio Java o altri), permette ora di realizzare solide applicazioni OOP.
I vantaggi del modello ad oggetti
Nel mio precedente articolo denominato Codice procedurale vs OOP sono ben elencati tutti i vantaggi derivanti dall'utilizzo e dalla padronanza del modello ad oggetti (compresi, ovviamente, gli eventuali svantaggi) con tanto di dettagliate descrizioni e confronti con il modello procedurale. Riporto qui solo i principali benefici che lo sviluppatore PHP trae adottando una struttura OOP:
- presenza di regole precise da seguire
- migliore qualità dello sviluppo di applicazioni realizzate in team
- modularità dell'applicazione
- manutenibilità del progetto
- estensibilità dell'applicazione
- possibilità di usufruire dei design patterns
- possibilità di usufruire dei principali web services
- presenza di nuovi costrutti
In sostanza, oltre a garantire maggiore modularità ed estensibilità rispetto alla controparte procedurale, il modello ad oggetti consente di sviluppare applicazioni PHP di nuova generazione usufruendo degli strumenti (web services) e delle modalità logiche (design patterns) utili alla loro nascita.
Scopo ed obiettivi della guida
Come ho precedentemente dichiarato nell' articolo Codice procedurale vs OOP (e come ripasseremo nella prossima lezione), realizzare applicazioni usufruendo del modello ad oggetti è decisamente più complesso rispetto al modello procedurale. Questo perché le teorie che stanno alla base di questo paradigma sono molte e parecchio articolate, così come è elevata la quantità di gli strumenti che ci vengono forniti.
Questa guida ha appunto lo scopo di trasmettere questi concetti, o meglio, tutti i concetti fondamentali della programmazione ad oggetti in PHP e consentire allo sviluppatore di realizzare applicazioni object oriented con il linguaggio PHP. La guida sarà sostanzialmente divisa in due parti:
- una parte teorica dove si studieranno i concetti, le teorie, i namespaces ed il funzionamento fondamentale della OOP
- una parte pratica finale dove affronteremo lo sviluppo di una applicazione OOP completa in PHP
Nonostante percorra dettagliatamente i concetti di base della OOP e sia destinata principalmente ad un utenza di principianti, questa guida è scritta in modo che ogni categoria di sviluppatore PHP (principiante, intermedio ed esperto) possa trarre vantaggio dalla lettura.