Indice dei contenuti
Elementi fondamentali della Programmazione ad oggetti
Introduzione
Nel corso dell’evoluzione tecnologica che è intercorsa dalla nascita dei primi calcolatori anni post II guerra mondiale ai giorni nostri, anche le modalità di sviluppo del software sono cambiate, spesso integrandosi fra di loro; il motivo è da ricercare nella crescente complessità dei compiti che in epoca moderna si affidano ai computer richiedendo loro di risolvere problemi sempre più complessi.
Negli anni ‘70 si sviluppano diversi linguaggi di programmazione come il Fortran, il Pascal, il C, il Basic, Cobol che poi nei decenni successivi saranno protagonisti in specifici settori dell’informatica e delle tecnologie ICT in generale.
Tutti i linguaggi sopra menzionati, hanno come visto nel caso del C++ che è una naturale estensione del linguaggio C approccio procedurale che possiamo riassumere nelle fasi di realizzazione di un programma:
- Analisi: si definiscono i dati che devono essere elaborati, il come devono essere elaborati, e i risultati attesi, anche dettagliando le soluzioni in termini di algoritmi;
- Implementazione: definiti gli algoritmi risolutivi e i dati coinvolti si passa alla codifica in linguaggio di programmazione. La scelta non è sempre semplice anche perché nella fase di analisi devono essere definite le piattaforme hardware/software che devono poi eseguire i programmi.
Su quest’ultimo aspetto farei attenzione in quanto, prima i software non sono facilmente multipiattaforma. Un programma scritto in C eseguito in ambiente Windows non può essere eseguito in ambiente Linux, nemmeno se si prende il codice sorgente si ricompila il codice.
Nei capitolo “tecniche di sviluppo software avanzate” saranno chiariti anche questi aspetti. - Test e Collaudo: è una fase molto delicata in quanto i programmatori devono ricercare errori logici e di funzionamento non sempre prevedibili, questo è uno dei motivi per i quali il software spesso è mantenuto e sono rilasciati aggiornamenti.
- Distribuzione: è l’atto finale nel quale il software viene distribuito ai clienti finali, è quindi deve essere corredato di manuale d’uso per l’utente finale e di licenza (commerciale, open source, ecc.)
Orbene a metà anni ‘70 con l’introduzione del C++, si comincia ad intravedere un altro aspetto della programmazione, legato ad una nuova modalità di sviluppo del software la programmazione ad oggetti, che sposta completamente il modello di sviluppo dei programmi su una base moderna è più efficiente.
Il punto di vista del programma orientata agli oggetti (che d’ora in poi chiameremo brevemente OOP), risiede nel definire degli oggetti della realtà che ci circonda e di definire le interazioni che possono avvenire fra essi. In altri termini il problema da risolvere non è visto unicamente come una sequenza prefissata di istruzioni anche lunga, ma è costituito da un insieme di oggetti che interagiscono fra loro per risolvere il problema.
Questo approccio, all’apparenza più complesso (e in parte lo è), stravolge il concetto di programma come entità derivante da uno o più algoritmi, aumentando il livello di astrazione talvolta necessario nella risoluzione di problemi più complessi.
In quest’ottica come vedremo cambiano gli strumenti concettuali anche di analisi e progettazione, che non sono più il flow-chart, ma una serie di schemi concettuali che sono definiti nell’ambito dell’UML, Unified Modelling Language che sarà discusso più avanti.
La domanda che allora viene spontanea, ma allora tutto quello che è realizzato con il procedurale è da ritenersi superato ?
La risposta è assolutamente no, in quanto nell’implementazione, di questo nuovo metodo, l’approccio procedurale è l’aspetto tecnico maggiormente rilevante all’implementazione di tale stile di programmazione, come vedremo più avanti.
I vantaggi dell’approccio OOP
Nel cambiamento, occorre definire il rapporto costi e benefici; i costi sono l’apprendimento di una nuova metodologia raffinata, mentre i benefici sono il riuso del codice, che permettono al programmatore di costruire i propri programmi su un un set di oggetti sul quale poter lavorare, conoscendo solo le modalità di utilizzo.
Dal punto di vista operativo negli anni 90, si è poi sviluppato il linguaggio Java che è completamente OOP come tanti altri C##. Ruby, ecc.
Elementi fondamentali della programmazione OOP
Per poter comprendere meglio, la metodologia occorre comprendere i concetti chiave di tale approccio.
Definizione: Per oggetto si intende un singolo elemento della rappresentazione astratta di un’entità della realtà che si vuole rappresentare, che al suo interno racchiude sia le sue caratteristiche, che le modalità con le quali può essere utilizzato.
A titolo di esempio, proviamo a rappresentare l’oggetto auto; di tale oggetto si possono individuare diverse caratteristiche per semplicità cilindrata, colore, alimentazione, porte, velocità e delle modalità di utilizzo della stessa quali accelera, frena, retromarcia, ecc.
Le caratteristiche sono definite attributi, mentre le modalità di utilizzo metodi.
L’oggetto per essere completamente definito deve avere dei valori assegnati ai suoi attributi ad esempio:
colore=”rosso”;
cilindrata=1299 cm cubi;
alimentazione=”diesel”;
porte=5;
velocità=0; // auto ferma
E’ possibile utilizzare l’oggetto auto solo attraverso i suoi metodi ad esempio il metodo accelera potrebbe essere specificato così:
accelera ( a )
{
accelerazione=a;
}
in questo modo a è un numero che rappresenta quanto l’autista spinge sull’acceleratore che si traduce in un’accelerazione sull’auto producendo un aumento della velocità. Si tenga presente che l’auto raggiunta una velocità di crociera può azzerare l’accelerazione attraverso l’invocazione del metodo “accelera”.
Simili ragionamenti, possono essere lasciati al lettore per esercizio, quello che interessa è l’aspetto fondamentale dell’oggetto ovvero esso si riferisce ad un’entità singola (una sola auto nell’esempio).
Occorre, quindi definire il concetto di classe come una collezione di oggetti dello stesso tipo caratterizzati da attributi e metodi.