29/11/2005
La programmazione orientata agli oggetti prevede l'esistenza di tre
componenti fondamentali che caratterizzano profondamente ogni aspetto di questa metodologia differenziandola dall'approccio
procedurale, stiamo parlando di: incapsulazione, ereditarietà e polimorfismo. Parliamo di
concetti estranei a chi fino ad ora non ha mai digitato listati secondo la logica OOP, cercheremo quindi di
analizzarli singlarmente provando a coglierne le specificità.
Il concetto di incapsulazione si
ricollega alla possibilità di rendere "invisibili" in sede di scrittura del codice determinati dettagli ricollegati
allo sviluppo di una classe specifica; il risultato ottenuto sarà quindi quello di impedire l'accesso ai dettagli
interessati da parte di porzioni di codice esterni non ricompresi nell'insieme in oggetto.
Dal punto di vista degli
oggetti, in virtù del fatto che questi ultimi interagiscono fra loro tramite i messaggi e i metodi, il loro interscambio
sarà reso più agevole dalla possibilità di celare alcuni dettagli; infatti, al momento della stesura del
listato non si avrà la necessità di conoscere come un certo oggetto è stato realizzato, basterà
avere a disposizione i metodi e le proprietà di cui è portatore. Quindi, tramite l'incapsulazione abbiamo la
possibiltà di creare scripts più "leggeri" in termini di numero di righe di codice.
L'incapsulazione, crea
una gerarchia tra i soggetti utilizzatori in grado di accedere all'applicativo. Ad esempio, sarà possibile celare gli
attributi relativi agli oggetti di una classe permettendo all'utente unicamente l'accesso ai metodi.
Per fare un
esempio, pensiamo ad una sala giochi, chiunque può entrare e divertirsi con i videogames attraverso le modalità
di gioco proposte, pagando ne avrà il pieno utilizzo ma non potrà certo modificare alcun gioco secondo le sue
preferenze.
Quando vengono celati gli attributi degli oggetti di una classe, i metodi appartenenti ad essa sono
rappresentati per mezzo di un'interfaccia; con il termine interfaccia intendiamo un collegamento che funge da
mediatore tra gli oggetti con lo scopo di trasferire dati da un oggeto all'altro; per mezzo di questo medium l'utilizzatore
avrà la possibilità di operare con le proprietà sulla base dei metodi disponibili.
Per quanto
riguarda il concetto di ereditarità, con essa si configura un processo mirato alla creazione di gerarchie
interne alle classi, grazie ad esso saranno maggiori le opportunità di riutilizzare porzioni del listato alla
base di un applicativo.
Per mezzo dell'ereditarietà, potremo concepire una classe principale o generale, che
chiameremo classe base oppure superclasse, con la funzione di definire le particolarità di uno
specifico insieme di oggetti. La classe generale potrà quindi essere ereditata da delle classi secondarie o
sottoclassi, chiamate anche classi derivate, che incrementeranno la classe base tramite i loro specifici
elementi. Qunidi, a loro volta, le classi secondarie rappresenteranno delle superclassi per quelle successive protraendo la
scala gerarchica.
Una classe derivata, "figlia" della principale, incorpora per definizione ogni informazione e
ogni proprietà della classe base ereditata e, questo avviene senza perdere i propri metodi e i propri attributi; il
meccanismo descritto comporta non pochi vantaggi, infatti, sulla base dell'ereditarietà della OOP potremo
definire una classe specificando semplicemente le differenze di quest'ultima con un'altra classe.
Quello
dell'ereditarietà è un concetto abbastanza semplice da comprendere in quanto si basa sull'emulazione della
realtà che ci circonda, infatti, nella vita quotidiana abbiamo numerosi esempi riguardanti il funzionamento di questo
meccanismo.
Si pensi ad una classe chiamata animali, essa si trasfomerà in una classe base quando le
classi derivate mammiferi e rettili erediteranno da essa le proprietà e i metodi mantenendo le proprie
peculiarità; mammiferi e rettili saranno pur sempre degli animali in quanto dotati di caratteristiche similari che li
rendono sottoclassi della medesima classe base, ciò non di meno preserveranno specificità in grado di renderli
distinguibili tra loro. Procedendo nella scala gerachica, le due classi secondarie potranno suddividersi al loro interno in
ulteriori derivate, ad esempio, in felini e bovini, in serpenti e lucertole, da cui tigri
e bisonti, cobra e ..
Passiamo ora all'ultimo concetto base dell'OOP, il cosiddetto
polimorfismo che è strettamente collegato alle dinamiche proprie dell'ereditarietà; con il
polimorfismo è possibile originare comportamenti e risultati diversi impiegando i medesimi metodi a carico di oggetti
differenti.
Il meccanismo polimorfico, è quindi fondato sulla possibilità di ridefinire in delle classi
derivate comportamenti dati da uno o più metodi ereditati da una classe base. Potremmo così dare origine a metodi in
grado di operare su oggetti di natura differente, sarà quindi compito dell'ambiente in cui funziona l'applicativo
decidere quale metodo utilizzare "preferendolo" ad un altro sulla base delle azioni da svolgere sui differenti oggetti.
Il meccanismo del polimorfismo diventa palese nei processi di overloading, in questi ultimi infatti le classi
derivate ridefiniscono metodi predefiniti nella classe base. Quando verrà utilizzato il metodo sottoposto a
ridefinizione, quello prorio della superclasse verrà ignorato; con l'overloading, posto un insieme di classi in
relazione gerarchica, per ciascuna di esse saremo in grado di impiegare diversamente un metodo presente in altre classi.
Attenzione: questo articolo è stato concesso in esclusiva per la pubblicazione a Mrwebmaster.it; ne è vietata la riproduzione, anche parziale,
senza l'esplicito consenso dell'autore e della redazione di Mrwebmaster.it.
© Claudiogarau.it :: Tutorials & Scripts, PHP, Linux and more.