• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Introduzione agli oggetti in PHP

ptm

Utente Master
Autore del topic
13 Maggio 2008
2.716
62
Miglior risposta
0
Introduzione

A partire dalla versione 5 di PHP è stato introdotto il supporto agli oggetti (in verità era disponibile già dalla versione 3, ma era molto semplificato; nella versione 5 il modello ad oggetti è stato completamente riprogettato). La programmazione orientata agli oggetti (Object Oriented Programming - OOP) è un paradigma di programmazione che ha come principio fondamentale la suddivisione del problema in una serie di sottosistemi correlati tra loro detti oggetti che contengono sia i dati sia il codice che li manipola.

La definizione del modello di un oggetto avviene tramite un modello logico detto classe che definisce due entità fondamentali:
  • attributi, cioè i dati riguardanti un oggetto
  • metodi, cioè le procedure che possono essere eseguite all'interno di un oggetto e che in particolare operano sugli attributi
Un oggetto può essere quindi visto come l'istanza di una classe.

La programmazione orientata agli oggetti presenta alcuni meccanismi fondamentali:
  1. Incapsulamento
  2. Polimorfismo
  3. Ereditarietà

Concetti

1. Incapsulamento

L'incapsulamento è la proprietà che permette di raggruppare i dati e le operazioni che possono essere effettuate allo scopo di proteggerli da utilizzi non conformi. Le buone norme della programmazione object oriented prevedono che dall'esterno debba essere visibile solo ciò che è strettamente necessario, il resto va mantenuto nascosto e vi si può accedere solamente dall'interno dell'oggetto stesso
Wikipedia ha detto:
Se gestito opportunamente, l'incapsulamento permette di vedere l'oggetto come una black-box, cioè una "scatola nera" di cui, attraverso l'interfaccia, è noto cosa fa, ma non come lo fa

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!
In questo caso gli attributi $modello e $motore di Auto non sono accessibili dall'esterno; si può usare il metodo getModello() per ottenere il modello dell'auto (si nasconde dell'informazione e si adottano apposite interfacce per accedervi - in inglese si utilizza spesso il termine information hiding per questa pratica)

2. Polimorfismo

Consiste nella possibilità di creare interfacce e metodi che possono essere applicate ad istanze di classi diverse; è poi l'ambiente a runtime a decidere quale metodo o interfaccia applicare all'oggetto. Questo concetto si collega anche all'ereditarietà.

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!
Non soffermiamoci su cosa significhi la parola chiave abstract; vediamo due classi Auto e Camion che entrambe sono "figlie" (estendono, specializzano) di Veicolo. Immaginiamo di non sapere a priori quando vale la variabile $isauto (per esempio può essere determinata da un input utente). Tuttavia, dal momento che $v sarà sempre un'istanza di una classe figlia di Veicolo che per forza deve implementare il metodo cosasono(), a runtime non si verificheranno errori perchè verrà eseguito il metodo relativo all'oggetto istanziato.


3. Ereditarietà

Il modello ad oggetti generalemente porta all'implementazione di una gerarchia di classi. L'ereditarietà rappresenta il meccanismo per il quale una sottoclasse acquisisce attributi o metodi appartenenti alla superclasse.
PHP:
Perfavore, Entra oppure Registrati per vedere i codici!
Vediamo anche qui che Auto è una classe figlia di Veicolo. Da Veicolo eredita i metodi e gli attributi public o protected: di conseguenza vengono ereditati l'attributo $nruote e il metodo ruote().
 
Ultima modifica: