I vantaggi della programmazione ad oggetti

Ok, ma quali vantaggi offre la programmazione orientata agli oggetti?

I principali vantaggi offerti dalla programmazione ad oggetti sono: astrazione, incapsulamento, erediterietà, polimorfismo e riuso del codice.

Vediamoli molto brevemente, visto che in futuro li reincontreremo durante la trattazione delle classi e degli oggetti, ed avremo modo di vedere nei dettagli ognuna di queste caratteristiche:

Astrarre significa semplificare qualcosa di complesso.
Per continuare l'esempio dell'automobile, possiamo dire che questa sia uno strumento complesso, con dei meccanismi complicati come il funzionamento del motore, l'aerodinamica, il meccanismo dei freni e della frizione, tuttavia queste complessità vengono semplificate nell'astrazione automobile, e quando il guidatore si mette in macchina pensa all'automobile come un tutt'uno, non si preoccupa dei singoli componenti che formano l'automobile.
Allo stesso modo quando utilizzi il timer del microonde non ti preoccupi della complessità dei vari cavi elettrici e resistenze che lo fanno funzionare, ma ti limiti ad usare la sua interfaccia.

Lo stesso avviene per le classi, dove una classe fornisce un'astrazione di qualcosa di complesso.
Una classe potrà svolgere determinati compiti, implementare algoritmi vari, ma il programmatore si limita ad usare l'interfaccia fornita dalla classe senza preoccuparsi della complessità che c'è dietro.

Questo è a sua volta permesso dall'incapsulamento.
Nella programmazione procedurale infatti i dati e le funzioni sono separati l'uno dall'altro, e le stesse funzioni sono distaccate tra loro, non esiste un vero legame se non all'interno della testa del programmatore ma, con il crescere della complessità del programma, diviene via via più difficile capire quali dati vengono utilizzati da quali funzioni, e quali funzioni sono correlate tra loro ed in che modo collaborano.

Nella programmazione ad oggetti invece, tutti i dati e le funzioni appartenenti ad una classe sono incapsulati all'interno della classe stessa.
Quando utilizzi un'automobile non devi ogni volta andarti a cercare il motore da utilizzare, non devi chiederti quali parti servono per mettere su l'automobile, non devi consultare dei dati per sapere quante ruote ha una macchina o come funziona un volante o cosa serve per accendere l'auto. Sali in macchina e hai tutto lì, dentro l'automobile stessa.

L'erediterietà permette invece di creare dei legami di parentela tra le varie classi.
Ad esempio ogni automobile è un veicolo, ma anche ogni moto lo è.
Grazie all'ereditarietà, ci limiteremo a scrivere nelle classi automobile e moto i comportamenti specifici delle due classi: ad esempio la classe automobile avrà quattro ruote e un volante, mentre la classe moto avrà due ruoto e un manubrio.
Mentre le caratteristiche comuni ad entrambi saranno descritte dalla classe veicoli, e saranno ereditate da automobile e moto.

Perché riscrivere in ogni classe moto, auto, autobus, camion e così via le caratteristiche comuni a tutte? Ad esempio perché riscrivere in ogni classe la funzione motore()?
Molto meglio creare una classe veicolo che implementa la funzione motore(), e a tutte le altre classi basterà ereditare dalla classe veicolo.
In questo modo abbiamo scritto la funzione motore() una sola volta, invece di doverla riscrivere all'interno di ogni classe.
In futuro parleremo nel dettaglio dell'ereditarietà.

Il polimorfismo è la capacità degli oggetti di comportarsi in modo diverso in base alle circostanze. Questa è una caratteristica molto potente dei linguaggi object oriented, che vedremo in futuro nel dettaglio.

Tutte queste ed altre caratteristiche della programmazione ad oggetti fanno sì che il codice sia facilmente riutilizzabile per altri progetti.
Infatti invece di avere tante funzioni e variabili sparse e distaccate all'interno di un file sorgente, avremo degli oggetti autonomi ed autosufficienti, che non dipendono da quel progetto, e sono quindi riutilizzabili dove vogliamo.

Queste sono le caratteristiche principali della programmazione ad oggetti.
Ora che abbiamo una minima idea di cosa siano classi ed oggetti possiamo andare ad analizzarle nei dettagli.

Nessun commento:

Posta un commento