[:it]
Si consideri un’automobile.
Essa è caratterizzata:
- dal colore,
- dalla cilindrata,
- dalle caratteristiche degli interni,
- dalla dimensione
Essa ha alcune funzioni:
- si accende e si spegne
- va più o meno veloce
- trasposta una o più persone
Per definire il modello ho effettuato:
- un’astrazione sui dati mediante le sue caratteristiche (attributi)
- un’astrazione funzionale individuando le azioni che può compiere (operazioni)
Queste due astrazioni sono alla base dell’approccio orientato agli oggetti OO (Object Oriented), sia in relazione alla progettazione OOD (Object Oriented Design) sia alla programmazione (OOP, Object Oriented Programming).
In pratica un dato è caratterizzato da:
- insieme di valori
- insieme di operazioni
Con l’espressione tipo di dato astratto ADT (Abstract Data Type) ci si riferisce a un tipo di dato completamente specificato, ma indipendentemente da una sua particolare implementazione.
Lo sviluppatore si occuperà dei contenuti informativi (dati o attributi) che per le operazioni specifiche associate al tipo di dato (metodi)
CLASSE
Il concetto di classe è alla base della progettazione e programmazione orientate agli oggetti.
Una classe rappresenta un modello formale per la descrizione di un certo tipo di oggetti definendone gli attributi, i metodi e le caratteristiche dell’interfaccia.
Le funzionalità sono chiamate METODI
Le componenti informative (dati) sono proprietà o ATTRIBUTI
Nella programmazione OO la creazione di un oggetto ha come conseguenza due azioni fondamentali:
- allocare un’area di memoria per la memorizzazione dell’oggetto stesso;
- inizializzare i valori degli attributi che costituiscono la componente informativa dell’oggetto–> COSTRUTTORE della classe.
UML
Per schematizzare una classe si usa la rappresentazione UML (Unified Modeling Language).
il simbolo + e – distingue il fatto che le componenti sono pubbliche o private.
- nella prima sezione, a partire dall’alto, si inserisce il nome della classe;
- la seconda sezione è relativa alla definizione degli attributi (proprietà)
- la terza ed ultima sezione è relativa alla definizione delle operazioni (metodi).
Per ogni metodo, oltre al suo livello di visibilità (pubblica o privata) è necessario definire:
- i nomi e i tipi degli eventuali parametri e il loro ruolo (in/out/in-out)
- il tipo dell’eventuale valore restituito
EREDITARIETA’
Si possono creare nuove classi a partire da classi già esistenti ereditandone le caratteristiche (attributi e/o metodi), aggiungendone di nuove o ridefinendone alcune. L’ereditarietà è finalizzata alla creazione di gerarchie di classi e grazie a essa si estende la possibilità di riutilizzare componenti comuni a più classi della stessa gerarchia.
Si definisce una classe generale o (classe base o superclasse) avente la funzione di definire le caratteristiche comuni a uno specifico insieme di oggetti. Le caratteristiche della classe generale potranno quindi essere ereditate o estese da altre classi (classi derivate o sottoclassi) che integreranno le caratteristiche della classe base con elementi specifici.
POLIMORFISMO
Utilizzando il polimorfismo è possibile ottenere comportamenti e risultati diversi invocando gli stessi metodi a carico di oggetti diversi.
Il polimorfismo è fondato sulla possibilità di ridefinire nelle classi derivate i comportamenti originali dei metodi ereditati dalla classe base; in questo modo è possibile ottenere metodi in grado di operare in modo appropriato su oggetti di diversa tipologia.
Ad esempio definisco una classe figura_geometrica ed all’interno di essa un metodo per il calcolo dell’area. Poi definisco tante figure geometriche con all’interno la classe calcolo area che si adatta alla singola figura geometrica.
METODI ASTRATTI
Il funzionamento dell’ereditarietà e del polimorfismo nei linguaggi di programmazione OO prevede esplicitamente la ridefinizione nelle sottoclassi derivate e i metodi definiti in una superclasse; in alcuni casi l’implementazione di un metodo in una classe base diviene puramente formale.
Ad esempio nel caso dell’area di una figura il metodo calcola area è vuota nel senso che la sua definizione viene poi demandata alle classi derivate.
I metodi con questa caratteristica prendono il nome di metodi astratti.
Classi che presentano uno o più metodi astratti sono definite classi astratte.[:]