Programmazione in Java Parte I: Fondamenti



Documenti analoghi
Marco Faella Introduzione al corso

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Concetto di Funzione e Procedura METODI in Java

Java: Compilatore e Interprete

Oggetti Lezione 3. aspetti generali e definizione di classi I

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Inizializzazione, Assegnamento e Distruzione di Classi

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Variabili e tipi di dato

Struttura di un programma Java

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Le variabili. Olga Scotti

Algoritmi di Ricerca. Esempi di programmi Java

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

4. Un ambiente di sviluppo per Java

Programmazione ad oggetti

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Java? Sì, grazie. Scopo del corso

GESTIONE INFORMATICA DEI DATI AZIENDALI

Panoramica: che cosa è necessario

Funzioni in C. Violetta Lonati

RMI Remote Method Invocation

Programmare in Java. Olga Scotti

Introduzione alla programmazione in C

Esercitazione n 4. Obiettivi

Corso di Informatica

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.


13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Richiesta pagina PHP (es: index.php)

Parola chiave extends

LINGUAGGI DI PROGRAMMAZIONE

Allocazione dinamica della memoria - riepilogo

Strumenti per la programmazione

Java Virtual Machine

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Programmazione a Oggetti Modulo B

Linguaggi per COMUNICARE. Il linguaggio è un sistema codificato di segni che consente la comunicazione, intesa come scambio di informazioni

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

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

Ambienti di Sviluppo

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

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

Installazione del JDK 6

Object Oriented Programming

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

costruttori e distruttori

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

La selezione binaria

esercizi Esercizi / problemi

3. La sintassi di Java

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Programmazione Orientata agli Oggetti in Linguaggio Java

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

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

Modulo 4: Ereditarietà, interfacce e clonazione

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?

Appunti di Informatica 1

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

Corso di Informatica

Visibilità dei Membri di una Classe

Breve riepilogo della puntata precedente:

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

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

Introduzione a Classi e Oggetti

Obiettivi dell Analisi Numerica. Avviso. Risoluzione numerica di un modello. Analisi Numerica e Calcolo Scientifico

Programmazione ad Oggetti. Java Parte I

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

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

Gestione dei File in C

Matematica in laboratorio

I file di dati. Unità didattica D1 1

Le command line di Java

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

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Analizzatore lessicale o scanner

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Oggetto: MASTER DI ALTA FORMAZIONE PROFESSIONALE IN PROGRAMMATORE JAVA PARTECIPAZIONE GRATUITA

Telematica II 17. Esercitazione/Laboratorio 6

Tecniche di traduzione da C ad assembly Note generali

Rappresentazione dell informazione Codifica Binaria

Linguaggio C. Fondamenti. Struttura di un programma.

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

4 3 4 = 4 x x x 10 0 aaa

Le variabili di Visual Basic consentono di memorizzare temporaneamente valori durante

Linguaggi di programmazione

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Corso di Fondamenti di Informatica

Transcript:

Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella

Riferimenti Testi consigliati: Progettazione del software e design pattern in Java di C.S. Horstmann Apogeo Gli esempi di codice si possono scaricare da: www.apogeonline.com Core Java 2, (7a edizione), volumi 1 e 2 di C.S. Horstmann e Cornell Pearson/Prentice Hall Gli esempi di codice si possono scaricare da: www.phptr.com

Riferimenti Per installare Java: java.sun.com Scaricare: JDK 6.0 (Java Development Kit: compilatore + JVM) JDK 6.0 + NetBeans Non è sufficiente JRE (Java Runtime Environment: solo la JVM) Editor: ultraedit, jedit http://people.na.infn.it/mfaella

Prerequisiti Questo corso presuppone la conoscenza di almeno un linguaggio di programmazione procedurale, come il C, il Fortran, una delle varianti moderne del BASIC, il Pascal, etc. Ad esempio, bisogna conoscere i seguenti concetti variabili ed espressioni procedure/funzioni istruzioni di controllo di flusso (almeno if-then-else e for)

Il linguaggio Java Orientato agli oggetti Relativamente recente: 1995 Creato e controllato da Sun (ora Oracle) Ispirato alla sintassi C/C++, con numerose semplificazioni rispetto a quest'ultimo Attualmente molto utilizzato per applicazioni web lato server Ibrido tra compilato e interpretato Il compilatore crea il bytecode (linguaggio intermedio tra sorgente e macchina) La Java Virtual Machine (JVM) esegue (cioè, interpreta) il bytecode Si facilita la portabilità Sorgenti:.java Bytecode:.class Compilatore: javac JVM: java

HelloWorld.java Il primo programma Java

I tipi base di Java I tipi base sono nove: void, boolean, char, byte, short, int, long, float e double void è solo il tipo di ritorno delle procedure (metodi senza valore di ritorno) boolean può assumere solo i valori true e false char è un singolo carattere Le stringhe non sono un tipo base, ma una classe (String) byte, short e int sono tipi numerici interi, con segno byte: 8 bit, da -128 a 127 short: 16 bit, da -32000 a 32000 (circa, precisamente: da -2 15 a 2 15-1 ) int: 32 bit, da -2 miliardi a 2 miliardi (circa, precisamente: da -2 31 a 2 31-1) long: 64 bit, da -2 63 a 2 63-1 float e double sono tipi numerici a virgola mobile float: 32 bit double: 64 bit

Le conversioni implicite Tra tipi base esistono le seguenti conversioni implicite (o promozioni): Da byte a short, da short a int, da int a long, da long a float e da float a double Da char a int Le conversioni implicite sono transitive Se esiste una conversione implicita dal tipo x al tipo y, è possibile assegnare un valore di tipo x ad una variabile di tipo y Alcune di queste conversioni possono comportare una perdita di informazione Ad esempio: int i = 1000000001; // un miliardo e uno float f = i; Dopo queste istruzioni, f contiene un miliardo, perchè un float non ha abbastanza bit di mantissa per rappresentare le 10 cifre significative di i.

Tipi base: esercizi 1) Inserire una dichiarazione (e inizializzazione) per la variabile i, in modo che il seguente ciclo sia infinito. while (i == i+1) {...} 2) Quante volte viene eseguito il seguente ciclo? for (double x=0; x<=1 ;x+=0.1) {...}

Le classi e il loro contenuto Una classe è uno stampo per creare oggetti Contiene dati e gli algoritmi che li elaborano I dati: rappresentano lo stato dell'oggetto sono variabili di cui ogni oggetto avrà una copia vengono chiamate campi istanza Gli algoritmi: sono le funzioni associate alla classe vengono chiamate metodi istanza possono accettare parametri e restituire un valore vengono invocati a partire da un oggetto della classe Campi istanza e metodi istanza sono tutti chiamati membri della classe Un tipo particolare di metodo è chiamato costruttore, e serve a creare nuove istanze di quella classe

I costruttori Sintatticamente, un costruttore si presenta come un metodo che: ha lo stesso nome della classe non ha tipo restituito Compito di un costruttore è di inizializzare lo stato (cioè, i campi istanza) dell'oggetto Viene invocato un costruttore ogni volta che si crea un nuovo oggetto, tramite il costrutto new Esempio: String s = new String( ciao ); Una classe può avere più costruttori Se una classe non ha costruttori, il compilatore aggiunge automaticamente un costruttore senza argomenti (chiamato costruttore di default), che non esegue alcuna operazione Esempio: Strings.java

Data1.java Esempio di costruttore

Memory layout Si utilizzerà talvolta la nozione di memory layout di un programma Ci si riferisce ad una rappresentazione grafica dello stato della memoria ad un determinato punto di un programma Come primo esempio, dato il frammento di codice Java: class A { // campi istanza private String x; private int n; // costruttore public A(String x, int n) { this.x = x; this.n = n; } }... A a = new A( ciao, 7); Figura 1: Il memory layout del frammento di programma a fianco. il suo memory layout può essere raffigurato come in Figura 1

Data2.java Esempio di metodi

Riferimenti e passaggio di argomenti A differenza di altri linguaggi orientati agli oggetti (ad es., il C++), non esistono variabili che contengono oggetti, solo riferimenti ad oggetti, ovvero variabili che contengono l'indirizzo di un oggetto Tali riferimenti Java sono quindi simili ai puntatori del linguaggio C Tuttavia, i riferimenti Java sono molto più restrittivi Niente aritmetica dei puntatori (p++) e conversioni tra puntatori e numeri interi Niente doppi puntatori Niente puntatori a funzioni Quindi, rispetto ai puntatori, i riferimenti Java sono meno potenti, più facili da utilizzare e meno soggetti ad errori al run-time Java prevede solo il passaggio per valore: sia i tipi base che i riferimenti sono passati per valore Non è possibile passare oggetti per valore, l'unico modo di manipolare (ed in particolare, passare) oggetti è tramite i loro riferimenti (ovvero, indirizzi)

Parameters.java Passaggio di argomenti

Passaggio di argomenti Stralcio di Parameters.java: Memory layout: public static void swap_str( String a, String b) { String tmp = a; a = b; b = tmp; }... x y Ciao Pippo String x = Ciao, y = Pippo ; swap_str(x, y); (prima di invocare swap_str)

Passaggio di argomenti Stralcio di Parameters.java: Memory layout: public static void swap_str( String a, String b) { String tmp = a; a = b; b = tmp; }... x y Ciao Pippo a b String x = Ciao, y = Pippo ; swap_str(x, y); (all'inizio di swap_str)

Passaggio di argomenti Stralcio di Parameters.java: Memory layout: public static void swap_str( String a, String b) { String tmp = a; a = b; b = tmp; }... x y Ciao Pippo a b String x = Ciao, y = Pippo ; swap_str(x, y); tmp (alla fine di swap_str)

Soluzione degli esercizi 1) Inserire una dichiarazione (e inizializzazione) per la variabile i, in modo che il seguente ciclo sia infinito. while (i == i+1) {...} Soluzione: float i = 1000000000; // un miliardo Sommare 1 ad i non ne modifica il valore, in quanto un float non ha abbastanza cifre binarie nella sua mantissa per rappresentare il numero un miliardo e uno.

Soluzione degli esercizi 2) Quante volte viene eseguito il seguente ciclo? for (double x=0; x!=1 ;x+=0.1) {...} Soluzione: infinite volte. La variabile x non assumerà mai esattamente il valore 1, perché 0.1 non è rappresentabile in maniera esatta con un double. Infatti, in rappresentazione binaria 0.1 è il numero periodico 0.00011. La morale di questi esercizi è che l'aritmetica in virgola mobile nasconde molte insidie. A tale proposito, si veda anche l'interessante disamina "How Java's Floating-Point Hurts Everyone Everywhere, facilmente rintracciabile sul web.