JavaProgrammazione

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;
Follow by Email
Facebook
Twitter
Telegram