Prof. Pagani corrado
JAVA
NASCITA DI JAVA
Java è stato creato, a partire da ricerche effettuate
alla Stanford University agli inizi degli anni Novanta, da un
gruppo di esperti sviluppatori capitanati da James Gosling in
Sun Microsystems.
Per facilitare il passaggio a Java ai programmatori legati a
linguaggi come il C++, la sintassi di base è stata mantenuta
pressoché identica a quella del C++; tuttavia, non sono state
introdotte caratteristiche ritenute fonti di una complessità
non necessaria come l'aritmetica dei puntatori, l'ereditarietà
multipla delle classi, e l'istruzione goto.
In un primo momento Sun decise di destinare questo nuovo
prodotto alla creazione di applicazioni complesse per piccoli
dispositivi elettronici; a metà degli anni ‘90, con l'esplosione
di internet, Java iniziò a farsi notare e a diffondersi
enormemente come strumento di programmazione web.
PUNTI DI FORZA
1.
Paradigma ad oggetti
puro ad eccezione dei tipi primitivi
2.
3.
4.
Portabilità
Ampia disponibilità di librerie e strumenti
Sicurezza del codice
Applet eseguono codice scaricato (tramite browser)
da server remoto in modalità sicura (sandbox)
necessitano della JVM su PC locale
5.
Multithreading nativo
Non dipende dal SO
PORTABILITA’
Java è un linguaggio al tempo stesso compilato
e interpretato
Compilatore produce bytecode (linguaggio
intermedio portabile) che facilità il lavoro
dell’interprete (e quindi le prestazioni)
Interprete JVM dipende dalla piattaforma
hardware/software e deve essere installato sul
PC su cui si avvia il programma
COMPILATORE E JVM
JDK
JRE
LIBRERIE DEL LINGUAGGIO
Java prevede numerose librerie che permettono
l’interazione con diverse tecnologie software:
Accesso a DB relazionali
XML
Programmazione WEB sia client sia server
Interfaccia grafica utente
multimedialità
LIBRERIE E PIATTAFORME SOFTWARE (API)
Il linguaggio in sé definisce solo una minima
parte delle librerie utilizzabili. La parte restante
è definita dalla piattaforma sulla quale il
programma sarà eseguito.
La Oracle mette a disposizione tre piattaforme
ufficiali, ciascuna destinata ad ambiti diversi:
Java Platform, Standard Edition
Java Platform, Micro Edition
Java EE
JAVA PLATFORM, STANDARD EDITION
La Java Platform, Standard Edition è
una piattaforma software ampiamente utilizzata
nella programmazione in linguaggio Java per
costruire e distribuire applicazioni portatili ad uso
generale.
Java SE consiste di
una macchina virtuale (Java Virtual Machine), che deve
essere usata per eseguire
(interpretare) programmi Java
Librerie (API) necessarie per consentire l'uso di file
system, reti, interfacce grafiche e così via, all'interno di
tali programmi.
JAVA PLATFORM, ENTERPRISE EDITION
La specifica Java EE include tecnologie che estendono
le funzionalità di base della piattaforma Java;
principalmente abbiamo:
Componenti web
Le componenti che rientrano in questa categoria sono
quelle legate alla visualizzazione delle pagine web ed
all'esposizione di web service.
Componenti enterprise
L'uso di queste componenti è richiesto solamente in
applicativi di medie e grandi dimensioni.
Componenti per l'interazione con la base dati
Questa categoria contiene le tecnologie che permettono la
persistenza dei dati all'interno di una base dati relazionale
PACKAGE
Le classi che costituiscono un programma JAVA sono
normalmente suddivise in insiemi definiti PACKAGE, in modo
da avere una struttura il più possibile ordinata
Package nomePackage;
I package una volta compilati possono essere memorizzati in
file compressi con estensione .JAR che ne comprendono i
Lbytecode
Un package definisce un nuovo spazio dei nomi per le classi
che si trovano al suo interno, per questo i programmatori
possono creare classi con lo steso nome all’interno di
package diversi
E’ possibile importare package diversi tramite le istruzioni
import java.io.InputStream;
import java.io.*;
CLASSI
Regole
Il nome della classe deve coincidere con il nome del file
(convenzionalmente inizia con la lettera maiuscola)
Convenzione di inserire una sola classe per file
Può avere un proprio metodo main di tipo static
Un programma è composto da 1 o + classi che risiedono su
altrettanti file. Almeno una classe deve possedere il metodo
main
Sintassi
Public class nomeClasse
{
Attributi (o proprietà)
Costruttori
Metodi
Eventuale metodo static main per l’avvio
}
FILE CHE CONTIENE LA CLASSE
Deve avere lo steso nome della classe che
contiene
Struttura e Sintassi
Commento di intestazione del file
Dichiarazione del package
Sezione di import di altri package
Package dell’applicazione
Package delle librerie
Definizione della classe
PRIMA APPLICAZIONE CONSOLE
Eseguire somma e media tra tre numeri
ES 1 CODICE
Non programmo
sfruttando il paradigma
ad oggetti (ho solo il
metodo main che è
static quindi non
istanziabile)
Utilizzo la sintassi del
paradigma ad oggetti
il “.” separa l’oggetto
dalla proprietà o dal
metodo
La parola chiave new
serve per istanziare
(richiama il costruttore)
ES 1 SINTASSI
Stampo a schermo
System.out.println("inserisci un numero");
Out è una proprietà statica della classe System
Scanner input = new Scanner(System.in);
Costruisco (instanzio) un oggetto di tipo Scanner
(classe) dal nome input (posso istanziarne quanti ne
voglio) a cui delego il compito di fare l’input da console
double a = input.nextDouble();
Il mio oggetto input richiama il suo metodo nextDouble
che legge l’input utente ed estrae il primo double che
incontra
APPLICAZIONE CONSOLE CON CLASSE ESTERNA
Leggere i dati di un dipendente in input (nome,
cognome, anno di nascita, anno di assunzione)
e determinare in output età, e stipendio (si
consideri che lo stipendio parte da una base di
1000€ e per ogni anno dopo il 5° di
assunzione cresce di 30 €)
ES 2 CODICE – CLASSE PRINCIPALE
Dopo aver letto i dati di input istanzio un oggetto delle
classe Dipendente
La classe dipendente espone due metodi pubblici
getEta e getStipendio
Non mi preoccupo di chi li implementerà e di come
saranno implementati
ES 2 CODICE – CLASSE DIPENDENTE
Nello sviluppare la
classe devo stare
attento a rispettare
l’interfaccia richiesta
(metodi e proprietà
pubbliche)
Tutto ciò che è privato
me lo gestisco io,
compresa la struttura
dati (dall’esterno
risulterà invisibile)
Il costruttore è un
metodo pubblico (o +
metodi) con lo stesso
nome della classe che
non ritornano valore
ES 2 SINTASSI
Richiamo il costruttore passandogli i parametri appena letti da console
creo l’oggetto mioDipendente
Dipendente mioDipendente = new Dipendente(mioNome, mioCognome,
mioAnnoNascita, mioAnnoAssunzione);
All’occorrenza posso creare tutti i diependenti che voglio richiamando più
volete il costruttore
Il costruttore accede alle proprietà private dell’oggetto appena
instanziato
public Dipendente(String mioNome, String mioCognome, int
mioAnnoNascita, int mioAnnoAssunzione)
{
nome= mioNome;
….
Stampo a video
System.out.printf("Età: " + Integer.toString(mioDipendente.getEta()) +
"\n");double a = input.nextDouble();
Richiamo il metodo getEta riferito all’oggetto mioDipendente non
passo parametri, ma passo direttamente tutto l’oggetto !
ESERCIZIO MOTORINO
Implementare la classe Motorino con i seguenti attributi:
Velocita (in metri) alla creazione del motorino la velocità deve essere 0
Colore
marca
Modello
antifurtoInserito (boolean)
- inserimento attributi per gestire lo spazio da percorrere e lo spazio percorso attualmente (m)
- attributo static velMax si consideri che la velocità deve sempre essere compresa tra 0 e velMax
E metodi
- getVelocita
- inserisciAntifurto
- invertAntifurto
- accelera(prende come parametro il valore di velocità da aggiungere al valore attuale – la velocità può
essere incrementata solo se l’antifurto non è inserito)
- avanza(int sec) avanza per il numero di secondi indicato alla velocità attuale del motorino
Main:
Istanziare almeno un motorino e richiamare i metodi sopra indicati
Implementare un ciclo nel quale l’utente può modificare la velocità corrente ed avanzare di un certo numero
di secondi, il programma deve verificare l’avanamento ed avvisare quando il motorino ha compito il numero
di metri richiesti
ESERCIZIO MOTORINO – SVILUPPO
Gestione del serbatoio:
inserire attributi consumo (lit/metro),
capacitaSerbatoio, livelloCarburanteAttuale
metodo per riempire il serbatoio.
quando avanzo devo aggiornare il
livelloCarburanteAttuale ed impedire
l’avanzamento se il livello di carburante si
annulla