Programmazione orientata agli oggetti
La programmazione orientata gli oggetti (nel seguito O.O.P.) è un paradigma di programmazione evolutosi dal precedente paradigma della programmazione procedurale. La O.O.P. prevede di raggruppare in un'unica entità (la classe) sia i dati che le procedure che operano su di essi, creando per l'appunto un "oggetto" software dotato di proprietà (dati) e metodi (procedure) che operano sui dati dell'oggetto stesso. L'oggetto può dichiarare riservati una parte delle sue proprietà e/o dei suoi metodi, e riservarne l'uso a se stesso e/o a particolari tipi di oggetti a lui correlatiIn teoria, un programma dovrebbe essere completamente costituito da oggetti software (istanze di classi) che interagiscono gli uni con gli altri.
Inoltre la O.O.P. prevede due meccanismi molto importanti, l' ereditarietà ed il polimorfismo, che permettono di derivare nuovi tipi di oggetti a partire da altri oggetti esistenti.
Se nel mio programma esiste già una classe "mezzoditrasporto" che ha come proprietà i dati di posizione, velocità , destinazione e carico utile, e io ho bisogno di una nuova classe "aereo", la posso creare direttamente dall'ogetto "mezzoditrasporto" dichiarando una cosa tipo "AEREO eredita MEZZODITRASPORTO" e aggiungendo anche il dato "Quota di crociera" alla nuova classe "aereo": con il vantaggio che la nuova classe sarà sia un "aereo" che un "mezzoditrasporto", permettendomi di gestire in modo omogeneo tutti i mezzi con una semplice lista di "mezziditrasporto".
I nuovi oggetti "ereditano" quindi dati e procedure dagli oggetti usati come base, introducendo nuovi dati e nuove proprietà quando necessario. Inoltre possono ridefinire i metodi e le proprietà dei loro antenati, in modo che oggetti diversamente derivati rispondano diversamente alle stesse istruzioni: cioè sono anche "polimorfi".
Per ritornare all'esempio di poco fa, supponiamo che un "aereo" debba affrontare procedure per l'arrivo e la partenza molto più complesse di un normale camion, come in effetti è: allora le procedure arrivo() e partenza() devono essere cambiate rispetto a quelle della classe base "mezzoditrasporto". Quindi provvediamo a ridefinirle nella classe "aereo" in modo che facciano quello che è necessario (polimorfismo): a questo punto, dalla nostra lista di mezzi possiamo prendere qualsiasi mezzo e chiamare arrivo() o partenza() senza doverci più preoccupare di che cos'è l'oggetto che stiamo maneggiando: che sia un mezzo normale o un aereo, si comporterà rispondendo alla stessa chiamata sempre nel modo giusto.
Naturalmente non sono tutte rose e fiori; la O.O.P. soffre di grossi problemi di efficienza se applicata a tutto indiscriminatamente, come fa il linguaggio Smalltalk che infatti è molto lento.
Un approccio più pratico e realista è quello dei linguaggi come Java e C++ che limitano la creazione di oggetti alle sole entità che il programmatore decide di dichiarare come tali più eventualmente una serie di oggetti predefiniti, per lo più riguardanti il sistema. In questo modo tali linguaggi restano efficienti, ma l'uso degli oggetti creati richiede più attenzione e più disciplina.
Inoltre il fatto di ridefinire i metodi ereditati dalle classi base può portare a introdurre errori nel programma se per caso questi sono usati all'interno della classe base stessa (il noto problema della fragilità delle classi base).
Astronomia | Biologia | Botanica | Chimica | Ecologia | Economia | Fisica | Geometria | Informatica | Matematica | Medicina | Statistica | Telecomunicazioni |