Università di Trento JAVA: una introduzione

48
1 Fac.Scienze – Università di Trento Programmazione 2 - Marco Ronchetti Java JAVA: una introduzione

Transcript of Università di Trento JAVA: una introduzione

1Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Java

JAVA:

una introduzione

2Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Traditional “portability” (ideal)

C-codeCompiler(Linux)

Compiler(Pentium)

Compiler (Mac)

Linux

Mac

Windows 32

Executable(Linux)

Executable(Win32)

Executable(Mac)

3Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Portability of Java programs

Java-codeCompiler

(Unix)

Compiler(Pentium)

Compiler (Mac)

Unix+JVM

Bytecode(Platform

independent)

WRITE ONCE, RUN EVERYWHERE!“Executable” files can be dowloaded through the netBut… Java version problem… Solve with a Plug-In

Mac+JVM

Pentium +JVM

Java basedNETWORK COMPUTER

4Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Esecutori di bytecodeJava può essere eseguito:

•come standalone program da interpreti java (o compilatori JIT, o Java Chips)

•come “applet”:da browsers Web:da applicativi ad hoc:

•come “add-on module”:da server Webda application server (Enterprise Java Beans)

5Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Java - Introduction

Applications are builtin the frame of the

OPERATING SYSTEMWhich in turn is built over a

particularHARDWARE

6Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Java - Introduction

Java defines aHW-OS neutral

SOFTWARELAYER

on top of which its code runs

JVMJVMApplicationsApplications

Java ApplicationsJava Applications

7Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

The Software Layer is calledJava Virtual Machine

It is a (smart) interpreter of anassembly-like language called

ByteCode

The Java Virtual Machine

8Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Java - Introduction

In principlethe JVM

could be aSW component

ff the OS

9Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Java - Introduction

In principlethe JVMcould be

embedded inthe

Hardware!

10Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

“the first universal software platform”

Consists of:The languageThe Virtual Machine(Many) class libraries and API

Java: the platform for “Internet Computing”Hardware independent • Scalable • Open

Easy!

You don’t care!

That’s the

difficult p

art!

11Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

The Java Platform

Java APIs

Java Programming

Language

Java Virtual Machine

Java Commerce™

JavaBeans

Java Security™

Java Management

Java Media

Java Server™

Java Enterprise

12Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Storia di Java Inizio anni 90: Java nasce come “Oak”

target: intelligent consumer electronics. Successivamente, nuovo target: set top box 1994: linguaggio per la “Web” (client side) 1996: la prospettiva é “network computing”

Oggi:Successi Device-independent GUIWeb on the server side (Servlets, JSP, EJB, XML…)

Prospettive intelligent consumer electronics + smartcards

Java

Oak

13Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Applicazioni

Definizione:Programmi stand-alone scritti in linguaggio Java.

Possono essere eseguiti da una Java Virtual Machine: Fisica: un processore il cui assembler e’ il bytecode Virtuale: un interprete o Just In Time Compiler Java.

14Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Prestazioni…

Inferiori al C++…

Tempo di sviluppo:Inferiore al C++ ...

15Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Per cosa è usato Java?

Molte cose, ma soprattutto:

- Web programming (server side)-Costruzione di interfacce grafiche-Software su piccoli dispositivi (telefonini)

16Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Hello World (application)Lo schema MINIMO di ogni applicazione é:

class HelloWorld {/* Hello World, my first Java application */public static void main (String args[]) {

System.out.println("Hello World!");// qui va il resto del programma principale

}}

17Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Hello World (application)Lo schema CONSIGLIATO di ogni applicazione é:class Applicazione{/* Hello World, my first Java application - second version*/

public static void main (String args[]) { Applicazione p= new Applicazione();

}Applicazione() {

System.out.println("Hello World!");// qui va il resto del programma principale

}}

18Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Uso di JDKCompilazione:$javac HelloWorld.java

produce HelloWorld.class(in realtà: un file class per ogni classe contenuta nelsorgente)

Esecuzione…$java HelloWorld

(la classe indicata deve contenere il main)

Obbligatoriospecificare l’estensione!

Obbligatorioomettere

l’estensione!

19Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Basic tools

http://www.java.sun.com/j2se/

JavaTM 2 Platform, Standard Edition (J2SETM)The essential Java 2 SDK, tools, runtimes, and APIs fordevelopers writing, deploying, and running applets andapplications in the Java programming language.

20Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Advanced development tool

http://www.borland.com/products/downloads/download_jbuilder.html

Personal edition is free

21Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Advanced development tool

OracleJDeveloper

free

http://www.oracle.com/technology/products/jdev/index.html

Oracle JDeveloper 10 g (10.1.3)

22Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Advanced development tool

http://www.eclipse.org/free

Eclipse Project

jdtjava development tools

subproject

23Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Un buon libro…

Gratis in forma elettronica:Thinking in Java

Bruce Eckel

In Italiano:Thinking in Java

Bruce EckelEd. Apogeo(in libreria)

http://www.mindview.net/Books

24Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

“The” Tutorials and exampleshttp://java.sun.com/docs/books/tutorial/?frontpage-spotlight

25Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

More Tutorials and examples

http://www.mokabyte.it/

26Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

FacilitàJava è basato sul C, come il C++.

•Java TOGLIE al C alcune caratteristiche difficili e pericolose(puntatori).

•Java AGGIUNGE al C le caratteristiche di un linguaggio object-oriented (classi, ereditarietà, messaggi).

•Java INTRODUCE una gerarchia di classi predefinite:AWT, IO, Lang(tipi, Math, Thread), Exeptions, Net,Utils(Vector, Dictionary, Date...)

27Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

RobustezzaLa maggior parte degli errori sono legati alla gestione della

memoria tramite i PUNTATORI:•puntatori che puntano a locazioni illecite (non allocate)

•puntatori che puntano a locazioni lecite ma sbagliate•indirizzi di vettori sbagliati

•memoria allocata e non più rilasciata (memory leaks)

Soluzione di Java:•ABOLIZIONE DEI PUNTATORI

•GARBAGE COLLECTION

28Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Differenze tra Java e C++

?(Java == ((C++)- -)++)

29Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Forma di un programmaIn Java tutto e’ una “classe”.

Lo scheletro minimo di un programma e’:

import <= Include “intelligente”(senza bisogno di #ifdef)NON c’è precompilatore!

import ...;class myProgram {public static void main (String args[]) { ...

}}

30Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

NomiI programmi Java includono nomi per identificare

alcune entità di programmazione(packages, classes, interfaces, methods, variables,

statement)

Nomi validi sono composti da un numero illimitato dilettere e numeri UNICODE, iniziare con una lettera.

I nomi non possone essere Java keywords.

31Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

UnicodeJava characters, strings, and identifiers are composed of 16-bit Unicode

characters. This makes Java programs relatively easy to internationalize fornon-English-speaking users.

Most platforms cannot display all 38,885 currently defined Unicodecharacters

The Unicode character set is compatible with ASCII and the first 256characters (0x0000 to 0x00FF) are identical to the ISO8859-1 (Latin-1)

characters 0x00 to 0xFF.

Unicode \u escape sequences are processed before the other escapecharacters

32Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

KeywordsLe keywords usate attualmente sono

abstract boolean break byte case catch char classcontinue default do double else extends final finally float

for generic if implements import instanceof int interfacelong native new null package private protected public

return short static super switch synchronized this throwthrows transient try void volatile while

Oltre a queste, alcune keywords sono riservateper usi futuri:

by value cast const future generic goto inner operatorouter rest var

33Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Commenti3 forme di commento:

/* C style *//* Questo tipo di commentopuò proseguire su pi linee *//* NOTA: ATTENZIONE AI /*COMMENTI*/ NIDIFICATI! */

// C++ style// Una intera riga commentataa=a+3; // Commento su una linea di codice

/**documentation *//**Stile di commento usato da JAVADOCper la generazione automatica didocumentazione */

34Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Tipi di dato primitiviType Contains Default Size Min/Max Valueboolean true or false false 1 bit N.A. / N.A.char Unicode char \u0000 16 bits \u0000 / \uFFFFByte signed integer 0 8 bits -128 / 127short signed integer 0 16 bits -32768 / 32767int signed integer 0 32 bits -2147483648 / 2147483647

long signed integer 0 64 bits -9223372036854775808 /9223372036854775807

float IEEE 754 f.p. 0.0 32 bits +/-3.40282347E+38 /+/-1.40239846E-45

double IEEE 754 f.p. 0.0 64 bits +/-1.79769313486231570E+308 /+/-4.94065645841246544E-324

35Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Literals (costanti)interi (sempre int, long se serve)

0777 ottale 0xFF esadecimale 77L long

reali10.4 1.04E01 double 10.4F 1.04E01F float

booleantrue false

caratteretutte le escape sequences del C sono riconosciute (\n \t \’ \” \\ …)

Unicode: \u0022 has exactly the same meaning to the compiler as "

stringhe“questa e’ una stringa”

36Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

ArraysE’ possibile definire arrays di tutti i tipi di dati (elementari oclassi). In fase di DEFINIZIONE non e’ necessario specificarela dimensione del vettore.Solo al momento della ALLOCAZIONE viene richiesto lospazio desiderato.

String[ ] strings; // this variable can refer to any String arraystrings = new String[10]; // one that contains 10 Stringsstrings = new String[20]; // or one that contains 20.

float f[ ][ ] = new float[5][3]; //array bidimensionale

char s[]={'+','-','*','/','=','C'}; // array inizializzato in creazione

37Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Class String

38Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Class String

39Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Class String

40Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Class String

41Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Class String

42Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

StringPer trasformare il contenuto di una stringa in un intero:

int Integer.parseInt(String s)

Per trasformare il contenuto di una stringa in un float:

float Float.parseFloat(String s)

43Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Parametri di ingresso/* sum and average command lines */class SumAverage { public static void main (String args[]) { int sum = 0; float avg = 0; for (int i = 0; i < args.length; i++) { sum += Integer.parseInt(args[i]); } System.out.println("Sum is: " + sum); System.out.println("Average is: "

+ (float)sum / args.length); }}

I parametri delmain sono inclusi inun vettore di String

44Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

OperatoriGruppo Funzione OperatoriArithmetic comparazione = =, !=, <, <=, >, >=

unitari +, -algebrici +, -, *, /, %postfissi ++, --

Bit shift <<, >>, >>>bitwise comparison ~, &, |, ^

Boolean relationali = =, !=logici !, &, |, ^, &&, ||

String concatenazione +

45Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

OperatoriSince Java does not allow you to manipulatepointers directly, it does not support thereference and dereference operators *, ->, and&, nor the sizeof operator.

Java also adds some new operators:The + operator applied to String valuesconcatenates them. If only one operand of + isa String, the other one is converted to a string.

46Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

packageUna collezione di classi correlate

package myclasses;class A {...};class B {...};

import myclasses.A;

import myclasses.*;

47Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Annidamento di packagepackage myclasses;class A {...};

package myclasses;class B {...};

package myclasses.veryUsefulClasses;class C {...};

import myclasses.*; // NON importa C!

Definizione suggerita di un nome univoco per i packages:È basata sul nome internet (es.: it.unitn.science.mypackage)

48Fa

c.Sc

ienz

e –

Uni

vers

ità d

i Tre

nto

Programmazione 2 - Marco Ronchetti

Annidamento di packageI packages si riflettono in una struttura di directories

myclasses

A.class B.class veryUsefulClasses

C.class