Programmazione Orientata agli Oggetti in Linguaggio Java



Documenti analoghi
Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Panoramica: che cosa è necessario

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli

Installazione del Software. per lo Sviluppo di Applicazioni Java

Appunti di Informatica 1

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Programmare in Java. Olga Scotti

Tutorial per l installazione del J2SE 6 e configurazione del sistema operativo

Ambienti di Sviluppo

Tecnologie di Sviluppo per il Web

Scrivere un programma in Java

Tale attività non è descritta in questa dispensa

Strumenti per la programmazione

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Corso di Informatica

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Approccio stratificato

Prova di Laboratorio di Programmazione

Programmazione in Java e gestione della grafica (I modulo) Lezione 1: Presentazione corso

Introduzione a Dev-C++

Java: Compilatore e Interprete

Programmazione Orientata agli Oggetti in Linguaggio Java

Note per generazione file.txt per invio trimestrale V.P. all AGENZIA DELLE ENTRATE

Getting Started. Walter Cazzola. Dipartimento di Informatica e Comunicazione Università degli Studi di Milano

Programmazione Orientata agli Oggetti in Linguaggio Java

Installazione del JDK 6

App-V Dynamic Suite Composition

Struttura di un programma Java

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Sistema operativo: Gestione della memoria

Le command line di Java

Il linguaggio Java. Concetti base. I packages

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Installazione e Configurazione della strumentazione necessaria. Antonio Gallo info@laboratoriolibero.com

2015 PERIODO D IMPOSTA

Eclipse - Nozioni Base

Ingegneria del Software 1: Eclipse

Gestione delle Cartelle dei Messaggi di Posta Elettronica

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

Esercizi su. Funzioni

Manuale di sistema Napoli 09 Ottobre T.R.F Transcodifica File V1.5

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

GUIDA AL PRONTUARIO MOBILE

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

Programmazione A.A Programmazione Orientata agli Oggetti: Lavorare con gli oggetti ( Lezione XXVII)

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Stampa unione - prof. Enzo Mardegan - 2

Guida per esecuzione dell aggiornamento del programma DINAMIC

Prima Esercitazione. Unix e GNU/Linux. GNU/Linux e linguaggio C. Stefano Monti smonti@deis.unibo.it

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Traduzione ed esecuzione di programmi. Dispensa 08

Product Shipping Cost Guida d'installazione ed Utilizzo

Codifica: dal diagramma a blocchi al linguaggio C++

Introduzione. Informatica B. Daniele Loiacono

Modulo 2 Uso del computer e gestione dei file

Corso Eclipse. Prerequisiti. 1 Introduzione

Il Sistema Operativo (1)

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

TRASMISSIONE RAPPORTO ARBITRALE IN FORMATO PDF

Capitolo 1 Installazione del programma

SOMMARIO... 3 INTRODUZIONE...

GUARINI PATRIMONIO CULTURALE VERSIONE MSDE/SQL SERVER MANUALE DI INSTALLAZIONE GUARINI PATRIMONIO CULTURALE VERSIONE MSDE/SQL SERVER

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN)

Programmazione in Java Parte I: Fondamenti

Eclipse. Avviare un progetto e compilare un semplice programma

Preparazione di una immagine di Windows XP per la distribuzione

Lezione 10: Librerie e compilazione separata

IBM SPSS Statistics per Windows - Istruzioni di installazione (Licenza per sito)

Mappatura dei canali logici sui canali fisici

Esercitazione 4 JDBC

Il Software. Il software del PC. Il BIOS

IBM SPSS Statistics per Windows - Istruzioni di installazione (Licenza di rete)

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

Web Content Management and E- Learning

Office 2007 Lezione 08

IBM SPSS Statistics per Linux - Istruzioni di installazione (Licenza per sito)

Transcript:

Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Conclusioni Parte b versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Classi e Oggetti: Conclusioni >> Sommario Sommario Strumenti Macchina Virtuale Il Concetto di Classpath 2

Strumenti Java 2 Software Development Kit collezione di strumenti per lo sviluppo Java In particolare compilatore, javac macchina virtuale, java librerie (API di Java) e molti altri 3 per Java compila il codice sorgente in bytecode per la macchina virtuale ne esistono vari Il compilatore della Sun javac.exe nella cartella bin di %JAVA_HOME% utilizzo: javac <percorso>\<classe>.java 4

Input per il compilatore un file.java contenente il codice sorgente di una classe Output del compilatore un file.class contenente il bytecode della classe relativa Circonferenza.java javac Circonferenza.class 5 Cosa c è nel file.class? codice oggetto nel linguaggio macchina della macchina virtuale Java è possibile disassemblarlo per intuirne il funzionamento attraverso il disassemblatore standard di Java: javap javap c l verbose Circonferenza 6

E il collegamento? nella programmazione procedurale, tipicamente il codice oggetto deve essere collegato una volta per tutte per generare l eseguibile in Java, viceversa, il collegamento è dinamico, e avviene a tempo di esecuzione di conseguenza, prima dell esecuzione è sufficiente solo la compilazione del codice 7 Riferimenti ad altre classi abbiamo detto che nel codice sorgente di una classe X è potenzialmente visibile qualsiasi altra classe Java Y purché, però, durante la compilazione di X, il file del codice sorgente di Y sia disponibile al compilatore per effettuare le verifiche di correttezza necessarie 8

ATTENZIONE alle regole del compilatore Il processo di compilazione un processo che si svolge secondo regole abbastanza complesse che dipendono dalla relazione tra codice sorgente e posizione fisica dei file Esempio il compilatore viene lanciato con il comando: javac circonferenzea\principale.java dalla cartella c:\codice ( cartella corrente ) 9 Primo passo il compilatore localizza il codice sorgente della classe da compilare utilizzando il percorso specificato sulla linea di comando a partire dalla cartella corrente es: cerca un file Principale.java nella cartella circonferenzea di c:\codice se trova il file, comincia a compilare il codice altrimenti restituisce un errore 10

La verifica dei riferimenti supponiamo che durante la compilazione di un file.java venga trovato un riferimento ad un altra classe es: compilando Principale.java viene trovato un riferimento a Circonferenza oppure a java.lang.system il compilatore comincia a cercare il bytecode della nuova classe per verificare il riferimento 11 Le API del JRE sono contenute nel file rt.jar ( runtime jar) nella cartella %JAVA_HOME%\jre\lib sono sempre visibili sia per il compilatore, sia per la macchina virtuale che ne conoscono la posizione Il formato.jar formato di java per la distribuzione di archivi complessi di classi 12

File.jar archivio compresso contenente una collezione di classi Java che rispetta la struttura di cartelle dei package analogo di.zip/.tar per Java l SDK fornisce uno strumento apposito per la manipolazione dei jar: jar.exe jar cvf <nomefile>.jar <cartella> per comprimere il contenuto di una cartella jar xvf <nomefile>.jar per decomprimere >> rt.jar 13 La risoluzione dei riferimenti il compilatore cerca il bytecode per verificare che la classe cercata esista e sia corretta è in grado di ispezionare il bytecode per verificare se le chiamate sono corrette se, per caso, invece del bytecode trova il codice sorgente (.java), lo compila per verificarne la correttezza quindi una compilazione può avviarne altre 14

ATTENZIONE all algoritmo di ricerca L algoritmo di ricerca come prima operazione, il compilatore completa il nome della nuova classe con il package corrispondente tre possibili casi: (a) stesso package; (b) java.lang; (c) un package delle import nell esempio: Circonferenza viene completato come circonferenzea.circonferenza, System viene completato come java.lang.system 15 L algoritmo di ricerca (continua) a questo punto viene cercata la nuova classe la ricerca viene effettuata in due posizioni Prima posizione in tutte le sottocartelle della cartella corrente Seconda posizione nell archivio che contiene le classi della piattaforma (il file %JAVA_HOME%\jre\lib\rt.jar) 16

Esempio in Principale: riferimento a Circonferenza >> circonferenzea.circonferenza >> cercata nella sottocartella circonferenzea della cartella corrente in Principale: riferimento a it.unibas.utilita.console >> cercata nella cartella it\unibas\utilita della cartella corrente in Principale: riferimento a System >> java.lang.system >> cercata in rt.jar 17 Quindi il funzionamento corretto della compilazione dipende da due fattori particolari Primo fattore scelta corretta della cartella corrente da cui lanciare il compilatore Secondo fattore corretta organizzazione delle classi all interno delle sottocartelle e dei package 18

c:\ Programmi... codice circonferenzea it unibas >> javac verbose circonferenzea\*.java Principale.java Circonferenza.java utilita 1. dalla cartella codice, eseguo javac circonferenzea\principale.java 2. il compilatore trova un riferimento a Circonferenza che espande in circonferenzea\circonferenza.java -cerca Circonferenza.java o.class -in codice\circonferenzea (OK) Console.java 3. il compilatore trova un riferim. a Console che espande in it\unibas\utilita\console.java -cerca Console.java o.class -in codice\it\unibas\utilita (OK) 4. il compilatore trova un rif. a System che espande in java\lang\system.class che trova in jre\lib\rt.jar (OK) 19 1. dalla cartella circonferenzea, eseguo javac Circonferenza.java c:\ Programmi... codice circonferenzea Principale.java 2. il compilatore trova un rif. a Math.java che espande in java\lang\math.class che trova in jre\lib\rt.jar (OK) 3. non ci sono altri riferimenti, per cui la compilazione ha successo >> Circonferenza.java it unibas utilita Console.java 20

Prima fonte di errori impossibilità di localizzare il file di codice sorgente da compilare per via del percorso errato; errore del tipo Impossibile trovare il file Seconda fonte di errori errori nel risolvere i riferimenti da una classe all altra per via di errori nella posizione dei file; errori del tipo cannot resolve symbol durante la compilazione 21 c:\ Errore Programmi... codice circonferenzea 1. dalla cartella codice, eseguo javac Principale.java (oppure javac.\principale.java) la compilazione fallisce perchè nella cartella non c è nessun file con il nome richiesto Errore: Impossibile trovare il file Principale.java >> Circonferenza.java it unibas utilita Console.java 22

c:\ Errore >> Programmi... codice circonferenzea it unibas Principale.java Circonferenza.java utilita 1. dalla cartella circonferenzea, eseguo javac Principale.java 2. il compilatore trova un riferimento a Circonferenza che espande in circonferenzea\circonferenza.java -cerca una sottocartella circonferenzea di circonferenzea che non trova: cannot resolve symbol Console.java 3. il compilatore trova un riferim. a Console che espande in it\unibas\utilita\console.java -cerca una sottocartella it di circonferenzea che non trova: cannot resolve symbol 23 c:\ Errore >> Programmi... codice it circonferenzea unibas utilita Principale.java Circonferenza.java Console.java 1. dalla cartella codice, eseguo javac circonferenzea\principale.java 2. il compilatore trova un riferimento a Circonferenza che espande in circonferenzea\circonferenza.java -cerca Circonferenza.java -in codice\circonferenzea (OK) 3. il compilatore trova un riferim. a Console che espande in it\unibas\utilita\console.java -cerca una sottocartella it della cartella codice che non trova: cannot resolve symbol 24

Alcune annotazioni è possibile compilare più di una classe contemporaneamente usando l asterisco es: javac circonferenzea\*.java inoltre, questo algoritmo è una versione semplificata dell algoritmo di ricerca di Java (lo approfondiremo successivamente) 25 Macchina Virtuale L interprete della macchina virtuale esegue il bytecode nella macchina virtuale in realtà, tipicamente compila al volo il bytecode per il processore della macchina fisica Just In Time (JIT) compilatore che compila il codice in modo che sia eseguibile dalla macchina fisica a tempo di esecuzione 26

Macchina Virtuale Anche in questo caso ne esistono vari attenzione: qui le prestazioni sono determinanti L interprete della Sun java.exe nella cartella %JAVA_HOME%\bin uso: java <nomeclasse> 27 Macchina Virtuale Anche in questo caso ci sono regole dovute al fatto che è necessario effettuare il collegamento dinamico del codice molto simili a quelle della compilazione ATTENZIONE alla differenza il compilatore è orientato ai file (gli argomenti sono nomi di file.java di codice sorgente) la macchina virtuale è orientata alle classi; gli argomenti sono nomi di classi 28

Macchina Virtuale Esempi di istruzioni di compilazione javac calcolatrice\calcolatrice.java javac it\unibas\utilita\console.java javac c:\codice\circonferenza\*.java Esempi di istruzioni di esecuzione java calcolatrice.principale java circonferenzea.principale java it.unibas.utilita.console 29 Macchina Virtuale ATTENZIONE alle regole del collegamento dinamico Il processo di esecuzione supponiamo che l utente esegua la macchina virtuale su una classe; es: java circonferenzea.principale da c:\codice Primo passo caricamento del codice della classe da eseguire il caricamento viene effettuato da un modulo opportuno chiamato ClassLoader 30

Macchina Virtuale ClassLoader modulo della macchina virtuale che si incarica di localizzare e reperire il bytecode delle classi L algoritmo del ClassLoader simile a quello utilizzato dal compilatore per localizzare la classe, il ClassLoader sfrutta la relazione tra nome della classe e struttura dei file su disco 31 Macchina Virtuale Esempio la macchina virtuale chiede al ClassLoader di trovare circonferenzea.principale per avviare l esecuzione per prima cosa il ClassLoader risale dal nome della classe, completo di package, al file.class che contiene la classe la ricerca avviene secondo le stesse regole del compilatore: nelle sottocartelle della cartella corrente e nel file rt.jar di %JAVA_HOME%\jre\lib se il ClassLoader trova il file lo carica, altrimenti restituisce un errore (NoClassDefFoundError) 32

Macchina Virtuale Il processo di esecuzione (continua) a questo punto la macchina virtuale comincia l esecuzione dal metodo main se non c è metodo main, restituisce un errore durante l esecuzione del codice della classe, la macchina virtuale incontra riferimenti ad altre classi (nome package e nome della classe) a questo punto si avvia il processo di collegamento dinamico la macchina virtuale chiede al ClassLoader di ritrovare e caricare il file secondo le stesse regole 33 c:\ Macchina Virtuale >> Programmi... codice circonferenzea it 1. dalla cartella codice, eseguo java circonferenzea.principale il ClassLoader trova il file circonferenzea\principale.class e lo carica la macchina virtuale esegue il main unibas Principale.class Circonferenza.class utilita 2. la macchina virtuale trova un riferimento a Circonferenza che espande in circonferenzea.circonferenza il ClassLoader trova il file circonferenzea.circonferenza.class Console.class 3. la m.v. trova un riferimento a it.unibas.utilita.console il ClassLoader trova il file in it\unibas\utilita\console.class 4. il m.v. trova un rif. a System che espande in java.lang.system che trova in jre\lib\rt.jar (OK) 34

Strumenti Di conseguenza dal punto di vista sintattico, le classi visibili in una classe java sono tutte le classi raggiungibili dal compilatore durante la compilazione e durante la macchina virtuale durante l esecuzione Concetto dinamico di visibilità dipende dalla struttura delle cartelle al momento della compilazione e dell esecuzione 35 Il Concetto di Classpath ATTENZIONE al concetto di Classpath Classi visibili in un applicazione Java classi delle API standard (in rt.jar) tutte le classi che durante la compilazione e l esecuzione sono raggiungibili a partire dal classpath Classpath di Java insieme di percorsi per la ricerca delle classi collezione di riferimenti a cartelle del disco e a file.jar 36

Il Concetto di Classpath Il Classpath standard la cartella corrente da cui viene eseguito il compilatore/macchina virtuale ovvero: la cartella. ma può essere modificato aggiungendo ulteriori cartelle e file.jar (>>) Cambiamento del Classpath di Java richiede la definizione di una variabile di ambiente denominata CLASSPATH 37 Classi e Oggetti: Conclusioni >> Sommario Riassumendo Strumenti Macchina Virtuale Il Concetto di Classpath 38

Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 39