DIC
29

Introduzione alla OOP – Ereditarietà

Sono stati rilevati dei problemi tecnici nell'articolo che stai leggendo. Probabilmente si tratta di un problema temporaneo, riprova tra un pò. In caso contrario ti prego di avvertirmi nella pagina dei contatti in modo che possa risolvere al più presto il problema. Grazie!
Rimani aggiornato sui commenti a questo articolo

help

Mi è capitata su un forum una domanda alquanto bizzarra, ma assolutamente non scontata e banale per chi non si intende di programmazione. La domanda in questione era: a cosa servono le interfacce? Effettivamente, vista da chi ha qualche anno di programmazione sul groppone potrebbe sembrare una domanda stravagante, ma pensandoci meglio, è una domanda lecita che a ripensarci, me la sono posta anch’io ai tempi. In questo articolo, con qualche semplice regola, voglio illustrare cosa sono e come funzionano i principi base della programmazione Object Oriented, quindi l’uso di interfacce, classi, classi astratte e loro proprietà come l’ereditarietà o il polimorfismo, con qualche esempio in C#.

Innanzitutto la cosa principale che ogni buon programmatore deve chiedersi appena inizia a pensare ad un programma è: quale linguaggio di programmazione uso? Come dice il mio professore di Linguaggi e modelli computazionali, non bisogna fossilizzarsi su di un linguaggio. Molto spesso, basterebbe utilizzare linguaggi più semplici o diversi per risolvere lo stesso problema in minor tempo. Faccio un esempio che può essere d’aiuto: se vi viene chiesto di realizzare un sistema di controllo per le grammatiche, che linguaggio scegliereste? C, Java, C#, VB6, Cobol, Fortrand? La risposta è che esiste un linguaggio all’infuori di tutti questi che permette di semplificare la vita in questo campo… il Prolog. Con qualche semplice istruzione avreste il vostro sistema di controllo grammaticale, senza impazzire più di tanto. Provate a fare la stessa cosa in C e molto probabilmente impazzireste! Ma non dilunghiamoci troppo, questa era solo una premessa! Detto questo, analizziamo il problema e cerchiamo di trovare un linguaggio adatto. Il problema è questo:

Si deve realizzare un sistema in grado di operare su diverse autovetture. Si supponga che l’utente, una volta scelta una qualsiasi autovettura tra quelle disponibili, possa accelerare, frenare e curvare a destra e sinistra. Le vetture disponibili sono:

  1. Fiat Cinquecento, acceleratore di tipo 1
  2. Seat Leon, acceleratore di tipo 2
  3. Porsche Boxter, acceleratore di tipo 3
  4. Ferrari F399, acceleratore di tipo 4

Ogni acceleratore incrementa una variabile di un valore direttamente proporzionale al tipo (ad esempio l’acceleratore di tipo 4 incrementa di 4 volte, l’acceleratore di tipo 1 incrementa di 1 volta sola). Il freno decrementa la stessa variabile di 1 ogni volta che viene premuto. Destra e sinistra impostano semplicemente una variabile che indica lo stato di curvatura dell’autovettura (ad esempio sinistra decrementa di 1, destra incrementa di 1).

Il sistema deve inoltre poter prevedere l’immissione di un’autovettura personalizzata dell’utente, con acceleratore a sua discrezione (tra i 4 disponibili).

Bene! Il problema è bene impostato. Io personalmente porterei la mia scelta su 2 linguaggi fra quelli proposti sopra: C# e Java. Perchè proprio questi? Perchè sono ad oggetti e sono orientati agli oggetti, C# e Java in particolare. Potrebbe andar bene anche VB6, con qualche ritocco.

Adesso da bravi programmatori, cerchiamo di progettare il sistema in modo che quanto descritto sopra possa essere scritto sotto forma di codice ben impostato. Personalmente, la prima cosa che mi balza all’occhio è la forte ereditarietà del sistema. Cosa intendiamo con ereditarietà? Beh è molto semplice. Se io, oggetto, ho in comune delle cose, come delle funzioni o delle proprietà, con un altro oggetto, ma sono più specializzato di lui, allora io sono una sorta di suo figlio, ho cioè una sorta di parentela con lui. Ecco che nasce il concetto di ereditarietà. Prendiamo come esempio le figure geometriche (escluso il cerchio): una figura generica probabilmente avrà come proprietà un numero finito di lati. Un quadrilatero sarà una particolare figura geometrica con 4 lati. Un triangolo una particolare figura geometrica con 3 lati e così via.

oop figure

Nel nostro particolare problema, possiamo vedere che esiste una relazione tra le varie vetture… la prima è che tutte hanno un acceleratore, un freno e possono curvare a destra a sinistra e poi hanno tutte un nome che volendo è possibile visualizzare a video. Ecco che perciò potremmo creare una interfaccia, un oggetto che semplicemente mostra agli altri delle proprietà di diversi oggetti.

imacchina

L’interfaccia IMacchina mostra al mondo alcuni metodi, che sono comuni a tutte le macchine: Accelera, Frena, CurvaADestra e Sinistra e una proprietà che ci restituisce il nome dell’autovettura. Per capire meglio a cosa servono le interfacce, attendete il prossimo articolo… per ora c’è già abbastanza carne al fuoco!

Nessun commento per questo articolo
Sentiti libero/a di lasciare un commento a questo articolo, mi fa piacere se mi scrivi!
Se vuoi avere anche tu un'immagine personalizzata, iscriviti subito a gravatar! È gratis!