Object Oriented
L’oop cambia il modo di sviluppare applicazioni, se in passato ci si concentrava sulla scomposizione di algoritmi e procedura con la programmazione ad oggetti ci si concentra sull’interazione di elementi che comunicano tra loro.
Si definisce Object Oriented Programming un metodo di implementazione in cui i programmi sono organizzati attraverso un insieme di oggetti, ogni oggetto è istanza di una classe e le classi sono legate attraverso una relazione detta eredità.
Si definisce Object Oriented Design una metodologia di progettazione che comprende il processo di decomposizione ad oggetti e una notazione per rappresentare modelli logici, fisici, statici e dinamici del sistema in fase di progettazione.
Si definisce Object Oriented Analysis l’analisi di un problema e la costruzione di modelli con una visione orientata agli oggetti.
La programmazione Object Oriented si caratterizza in:
- abstraction – evidenziare le caratteristiche fondamentali di un oggetto;
- encapsulation – nascondere tutte le informazioni private di un oggetto;
- hierarchical – organizzare le diverse astrazioni in gerarchie, si dividono in strutturali o comportamentali;
- modularity – partizionare il programma in componenti che riescano a ridurre il grado di complessità;
Ogni programma si basa sull’interazione di oggetti che possono comunicare o modificare il proprio stato. Un Oggetto può avere:
- stato – insieme delle variabili interne che ne definiscono le caratteristiche in un certo istante dell’esecuzione;
- comportamento – come il suo stato cambia e come i messaggi passano;
Un oggetto “recipient” può ricevere un certo messaggio se possiede un metodo che l’oggetto “sender” è in grado di chiamare.
Una classe definisce tutti i messaggi che ciascuna istanza sarà in grado di ricevere, importante è evidenziare:
- l’insieme dei metodi che la classe supporta;
- l’insieme degli attributi che ne rappresentano lo stato;
Bisogna specificare la visibilità dei metodi e degli attributi. Ogni classe deve avere almeno un costrutto (eventualmente viene definito dal sistema un costrutto di default) il cui compito è quello di creare nuove istanze.
La definizione di eredità è realizzabile in:
- un elemento della classe A è anche un elemento della classe B (strutturale);
- gli elementi della classe A si comportano come gli elementi della classe B (interfacce);
- gli elementi della classe A hanno un elemento della classe B che può essere usato in sostituzione (patterns);
Scrivere class A extends B significa che ogni istanza della classe A sarà anche di tipo B ed avrà a disposizione tutti i metodi della classe B.
Un esempio di eredità
Il polimorfismo in generale si riferisce alla possibilità data ad una determinata espressione di assumere valori diversi. Possiamo distinguere i seguenti tipi:
- ad hoc polymorphism – ad un metodo possono essere applicate argomenti di tipi diversi;
- inclusion polymorphism – una sottoclasse di una data classe ridefinisce uno dei metodi della super-classe;
- parametric polimorphism – un nome indica istanze di molte classi diverse correlate da una superclasse comune;