1 Corso Basilare di Java e OOP - ITI Majorana

Corso Basilare di Java e OOP - ITI Majorana, Grugliasco(TO)
Primo Incontro – Venerdì 8 maggio 2009
•
•
•
•
•
•
•
•
•
•
•
Presentazione del corso
Breve storia di Java
Problemi di programmazione che hanno portato alla nascita di Java
Caratteristiche di Java
Analisi del primo programma “Hello World!!!”
Concetti di Classe e Oggetto
Classe punto e istanza di oggetti
Concetto di Metodo
Classe prodotto, istanza di oggetti e implementazione di metodi
Metodo Costruttore
Cenno all’Input utente in Java
Presentazione del corso
Il corso nasce dalla necessità di alcuni studenti delle classi quarte del corso di informatica dell’ITI Majorana,
Grugliasco(TO) di affrontare i paradigmi della programmazione ad oggetti in vista dello stage estivo.
È stato dunque scelto Java come linguaggio di programmazione base del percorso, che permette una piena
e corretta comprensione dei paradigmi della programmazione orientata ad oggetti.
Durante il corso verranno mostrate le principali tecniche legate all’OOP ed affrontati stili di
programmazione professionale.
Il corso è condotto da Carabetta Luca e il libro scelto da guida è “Manuale di Java 6”, Claudio De Sio Cesari,
Hoepli Editore.
Il materiale prodotto durante ogni lezione verrà successivamente riassunto e raccolto su uno spazio web
accessibile a tutti presso l’indirizzo http://luxxweb.altervista.org/corsojava/.
Breve Storia di Java
Java è un linguaggio di programmazione orientato agli oggetti nato in casa Sun Microsystem ufficialmente
nel 1995.
Il nome Java deriva da una pianta di caffè indonesiana.
Dal boom di internet negli USA nel 1993, si iniziò a pensare di dover distribuire codice eseguibile sulla rete
web, Java nasce quindi come elemento web ma fino ad oggi si è evoluto e può essere distribuito ed
eseguito su qualsiasi architettura e sistema purchè esso supporti JVM.
Carabetta Luca - Corso Basilare di Java e OOP - Primo Incontro
1
Problemi di programmazione che hanno portato alla nascita di Java
La struttura di Java è stata definita basandosi su una riflessione sulle tecniche di programmazione di uso
comune, emersero quindi tre problematiche, elementi di intralcio al corretto funzionamento di un
programma.
•
•
•
Scorretto uso dell’aritmetica dei puntatori; i puntatori permettono una gestione della memoria
migliore ma il loro uso è spesso antagonista a molti programmatori e la maggioranza degli
applicativi C/C++ delgi anni ‘90 soffriva di problemi legati alla stessa aritmetica dei puntatori.
Abuso delle variabili globali, esse rappresentano una facilitazione per il programmatore, ma
essendo condivise tra i sottoprogrammi, se ne può facilmente perdere il controllo.
Utilizzo non controllato del comando goto che rappresenta anch’esso una facilitazione per i
programmatori ma facilmente induce in errore.
Java quindi elimina l’utilizzo dei puntatori e il comando goto dalla sua struttura.
Caratteristiche di Java
•
•
•
•
•
•
•
•
Sintassi simile a C/C++, Case Sensistive.
Gratuito.
Robustezza, soprattutto nella gestione delle eccezioni.
Librerie e standardizzazione rilasciate direttamente da Sun Microsystem.
Indipendenza dall’architettura e portabilità del software.
Java Virtual Machine, è un applicativo che si occupa dell'interpretazione dell'oggetto Java, il quale
non è tradotto direttamente in linguaggio macchina, ma in uno pseudo linguaggio macchina
chiamato bytecode, ogni architettura che è provvista e supporta la JVM può eseguire programmi
Java, questa è la chiave della portabilità del software Java.
OOP gestita in modo preciso, si è obbligati a sfruttare i paradigmi della programmazione ad oggetti.
Un punto a sfavore della programmazione in Java deriva dall’eliminazione dei puntatori, essi
permettono una migliore e veloce gestione della memoria; in assenza di queste tecniche gli
applicativi Java risultano di prestazioni e velocità minori rispetto ad un codice C++ ad esempio.
Analisi del primo programma “Hello World!!!”
public class Principale
{
}
public static void main(String args[])
{
System.out.println("Hello World!!!");
}
Carabetta Luca - Corso Basilare di Java e OOP - Primo Incontro
2
“public class Principale” indica che stiamo operando su una classe(vedi paragrafo successivo)
chiamata Principale e definita come pubblica(vedi paragrafi successivi).
“public static void main(String args[]){...}” è il metodo che per primo viene chiamato in
un applicazione Java, il parametro del sottoprogramma è un array di stringhe che rappresenta i parametri
passati da riga di comando all’applicazione.
“System.out.println("Hello World!!!");” rappresenta la via per realizzare un output in un
codice Java; è complessa nella sua struttura e prevede elementi che affronteremo più avanti nel percorso.
Concetti di Classe e Oggetto
La programmazione orientata agli oggetti o OOP(Object Oriented Programming) prevede la simulazione
della realtà nel codice.
Definiamo classe una struttura di un certo gruppo presente o concepibile nella realtà, possiamo ad
esempio definire la classe “i Computer”; essa non rappresenta un’entità fisica tangibile ma delinea le
caratteristiche che tutti i computer dovrebbero avere.
Definiamo come oggetto un’istanza di una classe, nel nostro esempio potrebbe essere un computer
preciso mioComputer che rispecchia le caratteristiche della sua classe di appartenenza(“i Computer”) ma
che esiste fisicamente nella realtà.
3
Classe Punto e istanza di oggetti Punto
public class Punto
{
int x;
int y;
}
public class Principale
{
public static void main(String args[])
{
Punto p1 = new Punto();
p1.x = 10;
p1.y = 20;
System.out.println("ascissa:" + p1.x + "; ordinata: " + p1.y);
}
}
La classe punto definisce la struttura che tutti i punti dovrebbero avere ovvero la struttura P(x, y).
Nella classe Principale abbiamo utilizzato la parola chiave new per creare(istanziare) un oggetto
appartenente alla classe punto chiamato p1.
Il modificatore public definisce che la classe, o un suo membro, sono visibili da altre classi.
Carabetta Luca - Corso Basilare di Java e OOP - Primo Incontro
La forma per l’istanza di un oggetto è la seguente
<<classe>> <<nome oggetto>> = new <<classe>>(<<eventuali parametri>>);
Si può scegliere una seconda via che prevede per prima cosa la dichiarazione di un oggetto appartenente ad
una certa classe e successivamente l’istanza dell’oggetto stesso.
<<classe>> <<nome oggetto>>;
<<nome oggetto>> = new <<classe>>(<<eventuali parametri>>);
Possiamo notare che, una volta istanziato l’oggetto, è possibile accedere ai suoi campi, ovvero quei valori
che sono stati definiti nella classe punto ovvero i valori interi x e y.
L’accesso a questi valori avviene tramite l’operatore di accesso ‘.’ e si struttura nella seguente forma:
<<oggetto>>.<<campo>>
Concetto di Metodo
Un metodo può essere interpretato come un’azione che un oggetto compie o subisce.
Ad esempio se noi avessimo l’oggetto “MioComputer”, i metodi potrebbero essere “Accendi”, “Spegni”,
“Riavvia” e così via e l’accesso a questi metodi dovrebbe avvenire, secondo la sintassi descritta
precedentemente, nel seguente modo “MioComputer.Accendi”, “MioComputer.Spegni” e così via.
Classe prodotto, istanza di oggetti e implementazione di metodi
public class Prodotto
{
double prezzo;
public void InserisciPrezzo(double prezzo)
{
this.prezzo = prezzo;
}
}
public class Principale
{
public static void main(String args[])
{
Prodotto mioProdotto = new Prodotto();
mioProdotto.InserisciPrezzo(8.9);
System.out.println("Il prodotto costa " + mioProdotto.prezzo + "€");
}
}
Carabetta Luca - Corso Basilare di Java e OOP - Primo Incontro
4
Osserviamo la classe Prodotto, possiamo notare questo:
public void InserisciPrezzo(double prezzo)
{
this.prezzo = prezzo;
}
Che per l’appunto è un metodo della classe Prodotto, esso potrà essere associato ad un eventuale oggetto
istanziato.
Una particolarità che si nota nel codice è la parola chiave this, essa indica l’elemento che attualmente è
considerato, in questo caso c’è differenza tra this.prezzo e prezzo poichè this.prezzo rappresenta la variabile
propria della classe mentre prezzo è il parametro.
Il metodo in sostanza preleva da parametro un valore e lo va a scrivere nella variabile prezzo propria
dell’oggetto considerato.
Normalmente i programmatori Java non scelgono dei nomi diversi per le variabili ma preferiscono utilizzare
la parola chiave this per distinguere.
Osserviamo il metodo main nella classe Principale, in sequenza possiamo trovare un’istanza di un oggetto di
nome “mioProdotto” che segue la classe Prodotto.
Successivamente viene richiamato il metodo InserisciPrezzo e ad esso viene passato come parametro il
valore 8.9 che verrà quindi scritto nella variabile prezzo dell’oggetto mioProdotto.
Questo fatto è dimostrato dal fatto che la terza riga, andando a stampare a video la variabile prezzo, manda
in output effettivamente il valore 8.9.
Metodo Costruttore
Il metodo costruttore è un elemento caratteristico della programmazione ad oggetti, è un metodo che
viene richiamato direttamente all’istanza(quando utiliziamo la parola chiave new) di un oggetto.
Un metodo costruttore viene dichiarato nella classe interessata e ha lo stesso nome della sua classe.
Potremmo ad esempio dichiarare il metodo costruttore della classe Prodotto, che svolge le stesse
operazioni del metodo InserisciPrezzo con la differenza che in questo caso il prezzo verrà inserito nel
momento dell’istanza di un prodotto.
public void Prodotto(double prezzo)
{
this.prezzo = prezzo;
}
Carabetta Luca - Corso Basilare di Java e OOP - Primo Incontro
5
L’istanza dell’oggetto quindi dovrà avere come parametro un valore double che verrà poi assegnato alla
variabile prezzo dell’oggetto.
Prodotto mioProdotto = new Prodotto(8.9);
Cenno all’Input utente in Java
Durante l’incontro è sorta la necessità di conoscere quelle tecniche che permettono la gestione dell’input
dell’utente.
Purtroppo Java gestisce anche un banale input da tastiera secondo un procedimento alquanto complesso,
il motivo deriva dal fatto che questa stessa metodologia è utilizzata per leggere da stream diversi.
Vediamo un breve codice per la lettura di una stringa da tastiera premettendo che verranno mostrati
meccanismi come decorazione di oggetti, eccezioni e stream che verranno in seguito trattati in modo più
approfondito.
import java.io.*;
public class principale
{
public static void main(String args[])
{
String stringa = null;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(isr);
System.out.println("Digita qualcosa e premi invio");
try
{
stringa = in.readLine();
System.out.println("hai scritto " + stringa);
}
catch(IOException e){}
}
}
La prima istruzione indica che stiamo andando ad importare tutto il contenuto delle librerie java.io.
Inizializiamo una stringa a null.
Viene istanziato un oggetto isr di tipo InputStreamReader il cui costruttore riceve come parametro
System.in ovvero l’input standard del sistema che solitamente è la tastiera; InputStreamReader permette di
convertire uno stream di byte in caratteri.
Viene quindi creato un oggetto in che rappresenta un’evoluzione di isr, in quanto è un isr modificato,
questo procedimento si chiama decorazione e verrà analizzato in seguito.
La classe BufferedReader ci permette l’accesso ad un metodo, readLine() che ci consente di leggere
dall’input definito.
Carabetta Luca - Corso Basilare di Java e OOP - Primo Incontro
6
Brevemente il costrutto “try ... catch” è una gestione delle eccezioni che non è completa in questo codice
ma comunque è necessaria per avere un corretto funzionamento del metodo readLine().
Brevemente il meccanismo di controllo delle eccezioni è utilizzato per prevenire errori gravi che potrebbero
compromettere il corretto funzionamento del programma, Java è un linguaggio di programmazione sicuro
in quanto prevede una forte e precisa gestione delle eccezioni che vedremo in dettaglio in seguito.
L’editor utilizzato durante il corso è eclipse ed è reperibile gratuitamente presso il sito
http://www.eclipse.org/
Link diretto: http://tinyurl.com/cdu8qh
Questo documento può essere scaricato in formato pdf presso l’indirizzo
http://luxxweb.altervista.org/corsojava/1.pdf
Tutto il materiale sarà raccolto presso questo indirizzo
http://luxxweb.altervista.org/corsojava/
7
Carabetta Luca - Corso Basilare di Java e OOP - Primo Incontro