2. LA PROGRAMMAZIONE AD OGGETTI
La programmazione a oggetti si propone come una nuova
metodologia, con un approccio risolutivo completamente diverso,
l’approccio a oggetti. L’utilizzo di linguaggi orientati agli oggetti
costringe il programmatore ad adottare nuove metodologie di
programmazione.
L’impiego di un linguaggio OOP impone l’utilizzo dei principi
fondamentali della programmazione a oggetti, che si possono
riassumere in modularità, incapsulamento, protezione
dell’informazione, che sono le caratteristiche richieste al software di
buona qualità.
Con la programmazione a oggetti è possibile modellare la realtà in
modo più naturale e vicino all’uomo, offrendo nuovi strumenti con
cui poter descrivere tutti i livelli di astrazione del sistema software
nelle varie fasi della sua progettazione.
3. ASTRAZIONE
L’astrazione è il risultato di un processo, detto appunto
astrazione, secondo il quale, assegnato un sistema,
complesso quanto si voglia, si possono tenere nascosti
alcuni particolari evidenziando quelli che si ritengono
essenziali ai fini della corretta comprensione del
sistema.
L’astrazione nasce dall’individuazione di proprietà simili
tra certi oggetti, situazioni o processi del mondo reale e
dalla decisione di concentrarsi su queste proprietà simili
e di ignorare temporaneamente, le loro differenze.
4. LIVELLI DI ASTRAZIONE
L'informatica presenta comunemente livelli di astrazione,
dove ogni livello rappresenta un diverso modello della
stessa informazione o processo, ma usa un sistema di
espressione che implica un diverso set di oggetti e
composizioni che si applicano solo ad un particolare
dominio. I livelli più "alti" di astrazione tendono a
costruirsi su qualcosa di relativamente concreto, mentre
quelli più "bassi" tendono a dare progressivamente una
rappresentazione più "granulare".
5. OGGETTI, METODI, ATTRIBUTI, CLASSI
Gli oggetti sono raccolti in classi, che definiscono proprietà (attributi) e
metodi comuni a tutti gli oggetti (istanze) di un certo tipo.
Mediante il procedimento di astrazione, gli oggetti fisici vengono virtualizzati
in oggetti software che offrono le stesse informazioni e servizi degli oggetti
reali. Si scompone il sistema reale preso in esame in classi di oggetti,
ognuna delle quali possiede le proprie variabili e funzioni, che assumono il
nome di attributi (caratteristiche specifiche) e metodi (comportamenti
uguali).
I metodi possono essere di tre tipi, classificati in base al tipo di operazioni
che eseguono:
•costruttori, per creare gli oggetti della classe;
•visualizzatori, per accedere ai valori delle variabili;
•modificatori, per modificare i valori delle variabili.
6. EREDITARIETA’, INCAPSULAMENTO, POLIMORFISMO
La classe è l’elemento base della OOP, un programma a oggetti è
costituito da un insieme di classi che generano oggetti che
comunicano tra loro. Se una classe non soddisfa appieno le
esigenze specifiche di un caso particolare è possibile completarla,
aggiungendole tutto quello che necessita per la nuova esigenza. Si
parla di classe ereditata e l’ereditarietà è la vera potenzialità della
OOP, che va oltre realizzando quello che comunemente prende il
nome di information hiding, cioè l’incapsulamento all’interno della
classe sia della rappresentazione dei dati sia delle elaborazioni che
possono essere eseguite su di essi. Un’ulteriore caratteristica della
OOP è quella che prende il nome di polimorfismo, ovvero la
possibilità di applicare lo stesso operatore a classi diverse.
8. OGGETTI
Gli oggetti sono le istanze delle classi, quindi oggetti della stessa classe si
differenziano tra loro per le loro proprietà (attributi), ma hanno in comune
con tutti gli altri oggetti il comportamento.
Un oggetto è un’entità astratta dotata di specifici attributi e in grado di
cooperare con altri oggetti svolgendo specifiche azioni.
Un oggetto è quindi la rappresentazione di una qualsiasi cosa che ha uno
stato e un comportamento.
La creazione di un oggetto non è altro che l’allocazione in memoria dello
spazio necessario per utilizzare questo elemento, ovvero si memorizza lo
stato corrente dell’oggetto.
Gli attributi di istanza sono quelli di cui un oggetto dispone, detti anche più
semplicemente attributi, un attributo costante è un attributo il cui valore non
cambia nel tempo ma resta invariato. Un metodo di istanza è un metodo
che, per essere utilizzato, necessita della creazione di un oggetto della
classe a cui appartiene, su cui essere invocato.
9. CLASSI
Una classe è un modello per un insieme di oggetti analoghi, caratterizzati:
•dalla stessa rappresentazione interna;
•dalle stesse operazioni con lo stesso funzionamento.
Possiamo definire la classe come lo schema di base dal quale è possibile
creare i singoli oggetti, attributi e metodi di una classe sono detti membri
della classe.
Un attributo di classe è un attributo condiviso da tutte le istanze della
classe, ovvero da tutti gli oggetti creati con essa. Un metodo è un’azione
che può essere eseguita dall’oggetto. Un metodo di classe è un metodo
invocabile sulla classe stessa senza che sia necessario istanziare un
oggetto.
La definizione della classe deve naturalmente sempre precedere la
creazione dell’oggetto. La classe è un elemento statico, gli oggetti
appartenenti alla classe sono elementi dinamici.
10. PUBBLICO E PRIVATO
La parte pubblica di una classe, costituita dall’insieme
dei metodi e degli attributi public, costituisce l’interfaccia
che ha lo scopo di dichiarare che cosa può fare la classe
e come può essere utilizzata da un utente. La parte
privata, costituita dall’insieme dei metodi e degli attributi
private, di una classe definisce come lavora la classe.
11. INCAPSULAMENTO
Con il termine incapsulamento si intende il meccanismo
che permette di racchiudere all’interno della stessa
struttura sia dati che codice, in altre parole, una scatola
che protegge i propri dati e il proprio codice tramite
l’incapsulamento, dove i dati descrivono l’oggetto e il
codice opera sui dati dell’oggetto. Questo principio
prevede che si possa accedere alle informazioni di un
oggetto unicamente attraverso i suoi metodi, che
rappresentano l’interfaccia dell’oggetto.
13. COSTRUTTORE, DISTRUTTORE
Il metodo costruttore è quel particolare metodo che viene invocato alla
creazione dell’oggetto e che contiene tutte le istruzioni da eseguire per la
sua inizializzazione. Può essere definito anche un metodo costruttore con
parametri, in questo caso non sarà possibile instanziare la classe senza
passare i parametri. Un metodo costruttore è un metodo particolare che si
distingue dagli altri per tre elementi:
•ha lo stesso nome della classe;
•non ha tipo di ritorno, nemmeno void;
•ha visibilità public.
Il metodo distruttore è quel particolare metodo che si occupa di rilasciare le
risorse.
14. OVERLOADING
Una classe può contenere più costruttori e metodi con lo stesso
nome purché distinti da diverse intestazioni:
•con un numero diverso di parametri (forma numerica);
•con numero uguale di parametri ma di tipo diverso (forma tipale);
•numero e tipo di parametri è lo stesso, ma la loro posizione è
scambiata (forma posizionale).
Si dice anche che l’overloading consente di sovraccaricare il
metodo con più di un significato.
16. EREDITARIETA’
L’ereditarietà è un’importante funzionalità della OOP che permette
di definire nuove classi partendo da classi sviluppate in
precedenza. La nuova classe viene definita esprimendo solamente
le differenze che essa possiede rispetto alla classe di partenza. La
classe antenato di una nuova classe prende il nome di superclasse,
la classe discendente di una classe esistente prende il nome di
sottoclasse. Ogni sottoclasse eredita le caratteristiche della sua
superclasse.
17. POLIMORFISMO
In informatica, il termine polimorfismo (dal greco "avere molte forme") viene usato in
senso generico per riferirsi a espressioni che possono rappresentare valori di diversi
tipi (dette espressioni polimorfiche). Una funzione si dice polimorfa se è capace di
operare su oggetti di tipo diverso specializzando il suo comportamento in base al tipo
di oggetto su cui agisce. Il termine polimorfismo indica la possibilità di implementare
in modo speciale metodi e proprietà ereditati dalla classe antenato mantenendone il
nome.
Il polimorfismo per metodi è la modalità operativa che permette di utilizzare lo stesso
nome per metodi differenti e viene realizzato in due modi:
•mediante l’overloading, che significa letteralmente “sovraccaricare” ed indica la
possibilità di definire metodi che hanno lo stesso nome ma firma differente;
•mediante l’overridding, che significa letteralmente “sovrascrittura” ed indica la
possibilità che le sottoclassi hanno di ridefinire un metodo ereditato da una
superclasse, in questo caso si deve utilizzare la stessa identica firma.
Il polimorfismo per dati o per classi è il meccanismo che permette di assegnare un
riferimento di una superclasse all’istanza di una sottoclasse.