La programmazione ad oggetti -2

Indice dei Contenuti

Il linguaggio UML

La classe in UML si rappresenta con un rettangolo diviso in tre aree nella prima il nome della classe, nella seconda gli attributi, nella terza i metodi.

Lo schema UML, mostra quanto affermato in precedenza, vi è un solo elemento di novità è il segno “+” davanti agli attributi e ai metodi che indica la modalità di accesso agli attributi e i metodi della classe che sono discussi più avanti in modo dettagliato.

Ora se nella classe definiamo un oggetto specificando valori per gli attributi e invocando metodi quando richiesto per compiere delle operazioni, significa che avremo definito istanza della classe. Ora una classe essendo astratta anche se definita a livello di codice nel nostro programma non allocherò risorse in termini di memoria fin quando non verrà istanziata.

Lo schema UML, di un oggetto quale istanza di una classe è sotto rappresentato:

UML della classe auto

Le classi e gli oggetti sono quindi le fondamenta della programmazione OOP, ma non sono l’unico elemento di novità introdotto nella metodologia. Abbiamo detto che la classe è composta da attributi e metodi; quest’ultimi rappresentano gli algoritmi che implementano le azioni sulle istanze (oggetti) della classe e solo attraverso di loro è possibile modificare gli attributi.
Questa proprietà degli oggetti è detta incapsulamento.
Da qui discende, che una classe che incorpora al suo interno attributi e metodi. In questo modo il programmatore non deve interessarsi dell’implementazione dei metodi della classe, ma solo di come utilizzarli; infatti egli vede solo le funzionalità della classe e non le modalità con cui quest’ultime si realizzano. Dell’implementazione dei metodi, eventualmente può essere interessato creatore di quella classe o che vuole estendere o ridefinire le funzionalità della classe.
Nel maggior parte dei casi, una classe per essere riutilizzata deve essere documentata.

Per gli sviluppatori questo approccio porta innumerevoli vantaggi;

  1. Robustezza del codice;
  2. Facilità di manutenzione;
  3. Facilità di comprensione del codice;
  4. Aumentata risolubilità di problemi complessi, in quanto il programma viene strutturato secondo specifici moduli funzionali. SI pensi ad esempio se uno sviluppatore deve realizzare un software di elaborazione testi.
    La realizzazione di tale software è complessa, in quanto il software deve possedere numerose funzionalità che spesso sono anche dipendenti fra loro. Ad esempio la gestione del documento, dipende dall’impaginazione, dalla formattazione, da elementi aggiuntivi del documento; così come ad esempio la stampa dipende dal documento stesso. In base a questo ragionamento, lo sviluppatore deve creare tante classi che interagiscono fra loro ma che spesso e volentieri non devono essere immediatamente disponibili in memoria centrale per problemi di spezio, ma anche di efficienza.