martedì 4 novembre 2014

[JAVA] Introduzione alla programmazione Java


Tra la fine degli anni ’80 e i primi anni ’90,  Java nasce come il linguaggio ‘OO’ di grande diffusione per eccellenza permettendo di rendere possibile una migliore rappresentazione all’interno dei programmi per rendere il codice più facilmente mantenibile ed estendibile.

Da strutturale/procedurale a OOP

Se volessimo costruire un programma per gestire  dei conti bancari, per ciascuno dei conti gestiti, dovremmo rappresentare lo stato (un nome, owner ed un importo, amount) e scrivere alcune procedure per modificarlo (funzioni, subroutine). Pensiamo ad operazioni come versamento e prelievo alle quali passare ogni volta tra gli argomenti la struttura conto su cui operare.

Con l’approccio OO nel medesimo programma potremo invece pensare di avere un tipo di oggetto, ad esempio chiamato Conto che contenga insieme:

- lo stato (fields, i campi dell’oggetto);
- le procedure per la sua gestione (methods, metodi).

Si agisce così nella stessa sezione del codice (classe), sia sullo stato, sia sul behavior.

L’integrazione dello stato e del behavior è chiamata encapsulation (incapsulamento) ed è la base di quella caratteristica della programmazione OO che viene chiamata information hiding che consiste nel mantenere interno a precise sezioni del codice l’accesso allo stato delle entità utilizzate.

È interessante osservare, che OOP è una metodologia ed uno stile di progettazione del software che, tranne in casi particolari, può essere impiegato indipendentemente dal linguaggio ma che risulta estremamente più facile da adottare se il linguaggio (come Java, C++ e altri) ne fornisce le primitive (come le classi in Java).

Classi e oggetti in Java

La classe viene definita come una collezione di uno o più oggetti contenenti un insieme uniforme di attributi e servizi, insieme ad una descrizione circa come creare nuovi elementi della classe stessa (Edward Yourdan).

Un oggetto è dotato di stato, behavior ed identità; la struttura ed il comportamento di oggetti simili sono definiti nelle loro classi comuni; i termini istanza ed oggetto sono intercambiabili (Grady Booch).

Una classe in Java si definisce con la keyword class, dove si osserva che:

- il corpo (dichiarazioni di variabili e metodi) della classe è racchiuso tra parentesi graffe;
- le linee sono terminate da punto-e-virgola (;);
- le linee che iniziano per doppio slash (//) sono commenti così come tutto quello che è racchiuso tra ‘/*‘ e ‘*/‘;
- il doppio asterisco all’inizio di un commento (/**) ha un significato speciale in relazione al comando javadoc che sarà introdotto in seguito e serve per la generazione di documentazione a partire dai commenti nel codice.

Qualificatori di visibilità

I qualificatori (public e private) determinano la visibilità degli elementi cui sono applicati:


Esistono altri 2 possibilità circa la visibilità:



Costruttore

Di particolare rilevanza è il metodo contrassegnato con il commento // costruttore: è diverso dagli altri metodi (versamento e prelievo) in quanto non dichiara un valore di ritorno e serve per creare nuove istanze di elementi di quella classe. Il costruttore delle classi deve essere utilizzato con la keyword new, la scrittura:

Conto myConto = new Conto("Portaletecnologico", 2.0e8);

In questo caso si vuole costruire una nuova istanza di un oggetto della categoria Conto ed inizializzarlo con owner “Portaletecnologico” e amount 2 miliardi.

Nel momento in cui non viene specificato nessun costruttore, nella definizione della classe ne avremmo dovuto creare uno di default senza argomenti. Si possono aggiungere quanti costruttori si vogliono a condizione che abbiano tutti diversa signature (firma). I costruttori devono avere il nome uguale a quello della classe.

this

All’interno del costruttore si può osservare anche l’uso della keyword this che in ciascuna classe rappresenta sempre l’istanza corrente.

Senza this l’assegnazione non avrebbe effetti in quanto significherebbe che si assegna il contenuto della variabile owner ad owner stessa, mentre con la qualificazione della variabile significa che stiamo assegnando il contenuto della variabile owner, che è stata passata come argomento al metodo, al field owner della classe Conto.

Notazione ‘.’

Una volta costruito l’oggetto conto sarà possibile utilizzare i suoi metodi con la notazione:

conto.versamento(10);
conto.prelievo(100);

L’accesso ai field può essere possibile con la medesima notation (e.g. conto.amount = 7) ma è proibito per scelta della nostra classe che definisce i field come private e quindi il compilatore ce lo segnalerebbe come errore.

Ereditarietà: estendere una classe

L’utilità della strutturazione OO diventa palese se si pensa a questo punto che potrebbe nascere la necessità di estendere l’immaginario programma per la gestione di conti con una banalizzazione di un conto in cui alcune somme vengano vincolate (e.g. nel tempo: sono nel conto ma disponibili solo dopo una certa data); in tal caso potremmo “estendere” direttamente la classe Conto.

Package

Ogni classe appartiene ad un package (dichiarato all’inizio del file in cui è definita una classe con la keyword package appunto) e serve a definire a qualche gruppo di classi essa appartiene.
Un package è del tutto simile ad un ‘path’ in un filesystem solo che al posto degli slash (/) le componenti sono separate da punti.

0 commenti:

Posta un commento