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