+ All Categories
Home > Documents > Java 2013

Java 2013

Date post: 17-Oct-2015
Category:
Upload: giuseppe-guida
View: 35 times
Download: 0 times
Share this document with a friend
Description:
dispense su java

of 89

Transcript
  • 1

    Elementi di Programmazione in Java

  • 2

    Riferimenti

    Bruce Eckel, Thinking in Java, Apogeo

    http://mindview.net/Books/TIJ4

    Deitel & Deitel (Fondamenti e Avanzate)

    Dispense del corso

  • Motivazioni

    Il linguaggio Java, pi di C++, il linguaggio OO ad alta diffusione sul quale pi facile vedere

    rispecchiati i principi di modellazione e progettazione

    di UML

    In particolare, la maggior parte dei Design Patterns risolvono problemi formulati per il linguaggio Java

    Il linguaggio Java tra i pi utilizzati in questi anni

    Lesecutore Java di libero utilizzo

    Un notevole quantitativo di strumenti a supporto dello sviluppo di software in Java di libero utilizzo

    (spesso anche open source)

    3

  • Alcuni contesti di utilizzo di Java

    Desktop applications

    Sistemi Distribuiti

    Mobile

    Embedded

    4

  • Che Cos Java

    un linguaggio (e relativo ambiente di programmazione) definito dalla Sun Microsystems

    per permettere lo sviluppo di applicazioni sicure, performanti e robuste su piattaforme multiple, in reti

    eterogenee e distribuite (Internet).

    7

  • Java: Semplice e O.O.

    Sintassi simile a C e C++ (facile da imparare)

    Elimina i costrutti pi "pericolosi" di C e C++

    aritmetica dei puntatori

    (de)allocazione esplicita della memoria

    strutture (struct)

    definizione di tipi (typedef)

    preprocessore (#define)

    Aggiunge garbage collection automatica

    Conserva la tecnologia OO di base di C++

    Rivisita C++ in alcuni aspetti (++ -- ==)

    8

  • Java un linguaggio per il quale necessaria sia una compilazione che una interpretazione.

    Il codice sorgente Java viene compilato producendo un codice di tipo intermedio per una Java Virtual Machine, detto bytecode.

    Il bytecode viene interpretato dalla Java Virtual Machine

    Java Compilato e Interpretato

    codice sorgente

    byte code compilatore interprete

    9

  • Il byte-code indipendente dallarchitettura hardware

    (ANDF: Architecture Neutral Distribution Format)

    Implementazioni della Java Virtual Machine per tantissime macchine e sistemi operativi sono realizzate e distribuite liberamente da Sun-

    Oracle

    Tramite la Java Virtual Machine si realizza unastrazione di una macchina virtuale allinterno della macchina reale, in grado di interpretare ed eseguire codice bytecode

    Il bytecode pu essere eseguito su

    qualsiasi sistema provvisto della

    propria JVM.

    La Java Virtual Machine (JVM)

    10

  • Portabilit: C++ vs Java

    In Java il compilatore e il bytecode sono unici, e non dipendono dalla macchina (n dal sistema operativo)

    11

  • Caratteristiche di Java Semplice da imparare

    Per Java sono disponibili:

    potenti librerie free e open source,

    strumenti di sviluppo adeguati.

    Indipendente dallarchitettura e portabile

    Nasce per poter essere eseguito in ambiente Web

    Avendo a disposizione una JVM, pu essere eseguito su qualsiasi sistema

    Dinamico

    Grazie allinterpretazione, tutte le classi sono caricate in memoria solo quando servono

    Orientato allo sviluppo di software distribuito

    Si presta nativamente ad una possibile esecuzione in ambiente distribuito, nel quale le classi si vengano a trovare su diverse macchine fisiche

    Il primo importante utilizzo di Java fu costituito dalle Applet

    Lambiente run-time incorpora funzioni di rete (sia di basso livello: TCP/IP, che di alto livello: HTTP, )

    La rete facilmente accessibile (come i file locali) 12

  • Caratteristiche di Java

    Sicuro

    Vari meccanismi di sicurezza per la protezione del codice e dei dati da intrusioni di altri processi in esecuzione

    Ci che importante non da dove provenga il bytecode, ma cosa effettivamente fa.

    il bytecode viene verificato prima dellinterpretazione (theorem prover), in modo da essere certi di alcune sue caratteristiche

    assicura che i bytecode non perdano puntatori, violano restrizioni di accesso, o accedano ad oggetti usando un tipo incorretto di informazione.

    Se il Verifier scopre un problema con un class file, lancia uneccezione, il caricamento cessa, ed il class file non sar mai eseguito.

    Il processo di verifica, insieme alle funzionalit di sicurezza entro il linguaggio e controlli a runtime, aiutano a stabilire un insieme basilare

    di garanzie di sicurezza.

    gli indirizzamenti alla memoria nel bytecode sono risolti sotto il controllo dellinterprete

    13

  • Caratteristiche di Java

    Sicuro

    Vari meccanismi di sicurezza per la protezione del codice e dei dati da intrusioni di altri processi in esecuzione

    Ci che importante non da dove provenga il bytecode, ma cosa effettivamente fa.

    il bytecode viene verificato prima dellinterpretazione (theorem prover), in modo da essere certi di alcune sue caratteristiche

    assicura che i bytecode non perdano puntatori, violano restrizioni di accesso, o accedano ad oggetti usando un tipo incorretto di informazione.

    Se il Verifier scopre un problema con un class file, lancia uneccezione, il caricamento cessa, ed il class file non sar mai eseguito.

    Il processo di verifica, insieme alle funzionalit di sicurezza entro il linguaggio e controlli a runtime, aiutano a stabilire un insieme basilare

    di garanzie di sicurezza.

    gli indirizzamenti alla memoria nel bytecode sono risolti sotto il controllo dellinterprete

    14

  • Caratteristiche di Java

    Prestazioni

    La verifica del bytecode permette di saltare molti controlli a run-time: linterprete pertanto efficiente

    Per maggiore efficienza, possibilit di compilazione on-the-fly del bytecode in codice macchina

    Esistenza di potenti librerie standard

    La sua natura free ha reso possibile lo sviluppo, la diffusione e la standardizzazione della maggior parte delle sue librerie principali

    Ad esempio, le librerie AWT e Swing per linterfaccia utente

    Multithreaded

    E nativamente possibile scrivere programmi concorrenti (multithread) per la JVM

    15

  • COMPILAZIONE ON-THE-FLY

    16

  • Installazione di Java

    17

    Tutte le istruzioni necessarie si trovano su

    http://www.oracle.com/technetwork/java/javase/downloads/

    index.html

    JDK (Java Development Kit) contiene la macchina virtuale, tutte le librerie, la documentazione e tutto ci

    che pu essere utile per lo sviluppo di applicazioni

    Java

    JRE (Java Runtime Environment) contiene il minimo di strumenti necessari per poter eseguire un

    programma Java

    Per quanto esistano strumenti autoinstallanti, sufficiente copiare tutto il materiale scaricato in una cartella ed

    eventualmente configurare opportunamente le variabili di

    ambiente.

  • Ambienti di sviluppo

    Non necessario alcuno strumento particolare non contenuto nella JDK per poter eseguire un programma Java I nostri primi esempi mostreranno come sia possibile compilare ed

    eseguire un qualsiasi programma Java facendo solo uso di istruzioni a linea di comando, in ogni sistema operativo

    Numerosi ambienti di sviluppo (IDE) sono disponibili per i programmatori Java. In particolare: NetBeans, JDeveloper: gratuiti, direttamente sviluppato da Sun-

    Oracle.

    Eclipse, gratuito, acquisito da qualche anno da IBM.

    Tutti gli ambienti sono ulteriormente arricchiti da moltissime estensioni (plug-in) sviluppate da terze parti e, generalmente, gratuite Utilizzeremo diverse estensioni per risolvere problemi di

    modellazione, analisi, testing.

    18

  • Lambiente Java

    19

    Organizzazione dei Programmi Java

  • Standard di Organizzazione dei

    Programmi in Java

    Ogni classe implementata nel proprio file sorgente (source file).

    Includere una classe per file:

    Il nome del file Java uguale al nome della classe.

    Le applicazioni Java devono includere una classe (quindi un file) con un metodo main:

    public static void main(String args[])

    20

  • Struttura di un semplice programma Java:

    Hello, World

    public class Hello{

    public static void main(String args[])

    {

    System.out.println("Hello, World!");

    }

    }

    Tutto deve trovarsi in una classe.

    Il codice sorgente salvato in un file Hello.java.

    La classe Hello sembra non ereditare da nessunaltra (in realt eredit come default da Object)

    21

  • Compilazione ed Esecuzione di Hello,

    World

    C:\Users\Master\eserciziIS1-2012\java\hello>javac Hello.java

    C:\Users\Master\eserciziIS1-2012\java\hello>dir

    Il volume nell'unit C non ha etichetta.

    Numero di serie del volume: CABC-C76B

    Directory di C:\Users\Master\eserciziIS1-2012\java\hello

    11/03/2012 10:28 .

    11/03/2012 10:28 ..

    11/03/2012 10:28 417 Hello.class

    11/03/2012 10:20 108 Hello.java

    2 File 525 byte

    2 Directory 103.298.981.888 byte disponibili

    C:\Users\Master\eserciziIS1-2012\java\hello>java Hello

    Hello, World!

    22

    Compilazione

    Esecuzione

  • Strumenti fondamentali offerti dalla JDK

    Javac.exe il compilatore: trasforma file sorgenti .java in bytecode .class

    Java.exe lesecutore (macchina virtuale) esegue una classe specificata a partire dal metodo specificato

    Il metodo non era stato specificato poich ce nera uno solo possibile (static)

    Hello si riferisce alla classe Hello contenuta in Hello.class, NON a Hello.java

    Capiremo meglio in seguito e nelle prossime lezioni, con esempi, i concetti di Metodo e Static.

    Il percorso di javac.exe e java.exe pu essere indicato nella variabile dambiente PATH

    Set path=%path%;JAVA_HOME\bin

    23

  • Commenti in Java

    Java supporta 2 stili di commenti.

    // Line Comments

    /* Block Comments */

    24

    Tipi primitivi in Java

    Tipi scalari:

    byte, boolean, char, short, int, long, float, double.

    variable_name;

    int x;

    Nuovi tipi non possono essere creati in Java. C bisogno di creare una classe Java.

    In Java gli arrays sono supportati come classi

    int[] i = new int[9]

    dimensione di un array i.length

  • Classi Java che gestiscono tipi scalari

    Da notare che esistono anche delle classi di libreria che sono in grado di wrappare alcuni tipi scalari, con

    ulteriori metodi e parametri

    Ad esempio la classe Integer

    http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html

    The Integer class wraps a value of the primitive type int in an object.

    An object of type Integer contains a single field whose type is int.

    The class provides several methods for converting an int to a String and a String to an int, as well as other constants and

    methods useful when dealing with an int

    25

  • Variabili 1/2

    Una variabile deve essere dichiarata,

    in Java una dichiarazione di variabile composta da tre parti: modificatore, tipo e identificatore

    I modificatori sono opzionali, e sono sostanzialmente stabiliscono laccesso alle variabili. Essi sono:

    modificatori di accesso: public, private e protected.

    static, synchronized e final.

    Lordine con cui vengono messi non importante, anche se bene usare sempre la stessa convenzione, per la

    leggibilit del codice.

    26

  • Variabili 2/2

    Gli identificatori possono essere uno o pi di uno, separati da virgole, e sono i nomi che avranno le variabili.

    Esempi:

    int X;

    int X, Y, Z;

    double W = 3.12;

    Le variabili devono essere dichiarati allinterno delle classi, le dichiarazioni fatte allesterno sono errate.

    Gli oggetti sono variabili in Java e possono essere allocati dinamicamente tramite la parola chiave new

    ClassA a = new ClassA();

    27

  • Variabili Final 1/3

    Le variabili possono essere contrassegnate come costanti (parola chiave final).

    Le variabili possono essere inizializzate a tempo di creazione.

    Le variabili definite final devono essere inizializzate a

    tempo di creazione.

    Dichiarare una variabile final vuol dire rendere impossibile la reinizializzazione dopo che la variabile stata

    inizializzata con un valore esplicito.

    28

  • Variabili Final 2/3

    Una volta assegnato un valore iniziale ad una variabile di un tipo primitivo, ad essa non pu essere pi assegnato

    alcun valore.

    Produce un errore di compilazione:

    29

  • Per quanto riguarda invece le variabili reference, la parola chiave final indica che la variabile, dopo essere inizializzata, non pu

    essere riassegnata ad un oggetto diverso.

    Lo stato delloggetto per potr ancora essere modificato

    In questo esempio, loggetto a cui si riferisce la variabile t pu essere modificato, ma quando si tenta di cambiare loggetto a cui si riferisce t, si ottiene un errore di compilazione:

    30

    Variabili Final 3/3

  • Esempi di dichiarazioni di variabili

    int n = 1;

    char ch = A;

    String s = Hello;

    Long L = new Long(100000);

    boolean done = false;

    final double pi = 3.14159265358979323846;

    Employee joe = new Employee();

    char [] a = new char[3];

    Vector v = new Vector();

    31

  • Distruzione degli oggetti (garbage collector)

    Gli oggetti vengono liberati assegnando loro il valore null, oppure ci avviene dinamicamente quando sono fuori scope (Garbage collector).

    a=null;

    In Java non necessario implementare distruttori.

    Esiste un meccanismo interno della JVM, chiamato garbage collector che ripulisce la memoria eliminando tutti gli oggetti per i quali non esistano pi riferimenti attivi.

    Il garbage collector libera il programmatore dall'eseguire manualmente l'allocazione/deallocazione di memoria.

    Sono state ridotte o eliminate in tal modo alcune categorie di bug.

    Per le variabili scalari vale la distruzione automatica al termine del loro scope.

    32

  • Java Strongly Typed

    Java un linguaggio strongly typed.

    I tipi scalari NON sono tutti compatibili tra loro.

    Lo strong typing riduce molti errori comuni di programmazione.

    Le assegnazioni devono essere fatte tra tipi di dati compatibili.

    Ci sono cast impliciti tra molti tipi di dati.

    possibile definire casting espliciti tra tipi di dati

    33

    Byte Short

    Char

    int long float double

    Se c un percorso (basta seguire il verso delle frecce) nel grafo viene fatto un casting implicito, ovvero

    possibile evitare di scrivere il cast, lo inserire il

    compilatore automaticamente.

  • Puntatori e Riferimenti

    In Java NON esiste il concetto di puntatore, esiste invece il concetto di Riferimento.

    non c bisogno di un simbolo (come &) per specificare un riferimento.

    Loperatore new restituisce il riferimento allistanza di un oggetto,

    allocato dinamicamente:

    Contatore c= new Contatore();

    La semplice dichiarazione di un oggetto causa soltanto listanziazione (statica) del riferimento, non delloggetto

    Contatore c2;

    Un assegnazione come c2=c Corrisponde solo alla realizzazione di un alias: c2 un altro riferimento allo stesso oggetto istanziato con listruzione new

    Un riferimento pu essere inizializzato a null per non farlo puntare a nessun oggetto: c2=null;

    34

  • Espressioni

    Java supporta diversi modi per la costruzione di espressioni (con ordine di precedenza):

    ++, --, +, -, *,/, %

    35

    Assegnazioni Le assegnazioni possono essere semplici

    x = y

    Oppure con I seguenti operatori:

    *=, /=, %=, +=, -=, &=, |=, ^=

    Unassegnazione tra variabili scalari provoca una copia

    int a=10; int b; b=a;

    int i = 5;

    i += 10; // i = 15

    i %= 12; // i = 3

  • Logica Condizionale

    La logica condizionale in Java viene eseguita con lo statement if

    A differenza di C++ unespressione logica non valuta lo 0 (FALSE) o un non-0 (TRUE), valuta o false o true.

    true e false sono valori assunti da variabili di tipo

    boolean.

    Altri statement condizionali sono: && (And), || (Or), ! (Not), , ==, !=, =, etc.

    Java supporta anche costrutti Switch case default

    36

  • Operatori di confronto

    Tra variabili scalari:

    int a=10; int b=10;

    (a==b) true

    Tra oggetti

    String a = pippo; String b pippo;

    a.equals(b) true

    a==b false

    a==b il confronto tra i riferimenti (puntatori) agli oggetti: essendo a e b due oggetti diversi, a==b false

    37

  • Looping Constructs

    Java supporta tre looping constructs

    while, do while, for.

    Esempi:

    for (int i = 0; i < 10; i++)

    {

    System.out.println(i);

    }

    --------------------------------------------------------------------

    int i = 0;

    while(i < 10)

    {

    System.out.println(i++); //prints i before

    } //applying i++

    --------------------------------------------------------------------

    int i = 0;

    do

    {

    System.out.println(i++);

    } while(i < 10) 38

  • Le Classi in Java

    In Java ogni cosa una classe:

    Le classi che scriviamo;

    Le classi fornite da Java stesso;

    Le classi fornite da terzi;

    Estensioni Java.

    Tutte le classi in Java derivano dalla medesima classe di root detta Object.

    Lo capiremo meglio quando tratteremo lereditariet.

    Gli oggetti di una classe vengono creati tramite la keyword new.

    La keyword new restituisce un riferimento ad un oggetto che

    rappresenta unistanza della classe.

    Tutte le istanze delle classi sono allocate nellheap del Garbage Collector. 39

  • Metodi I metodi:

    sono come le funzioni;

    sono definite allinterno della definizione di una classe;

    sono visibili a tutti gli altri metodi definiti allinterno della classe; Esempio:

    class Arithmetic

    {

    public int add(int i, int j){

    return i + j;

    }

    public int sub(int i, int j){

    return i - j;

    }

    }

    Arithmetic a = new Arithmetic();

    System.out.println(a.add(1,2));

    System.out.println(a.sub(5,3)); 40

  • Anatomia di un Metodo

    Identificatore di visibilit Public: il metodo accessibile ovunque e a tutti. Private: il metodo accessibile solo dagli altri metodi della stessa classe. Protected: Il metodo accessibile unicamente dalle sottoclassi o classi

    derivate, in qualsiasi package queste si trovino

    Deafult: Il modificatore di default viene assegnato automaticamente dal compilatore solo quando nella scrittura del sorgente si omettono gli altri modificatori. Di default indica che il metodo di accesso pubblico ma solo ed esclusivamente al package della classe dove inserito.

    Tipo di ritorno Specifica il tipo di dato che il metodo deve restituire. Utilizzo della keyword return. Utilizzo di void se il metodo non restituisce nessun tipo di dato.

    Nome del metodo Lista degli argomenti

    Lista dei parametri, ogni parametro identificato dal proprio tipo

    Semantica Java

    Importante: gli oggetti sono passati per riferimento, tutte le altre variabili come valore. Allo stesso modo se il metodo restituisce un dato questo viene ritornato per valore, in caso di oggetto viene restituito il riferimento. 41

  • Variabili di una Classe (attributi) 1

    In Java, possiamo dichiarare variabili che sono globali al relativo oggetto.

    Le variabili vengono in genere definite allinizio della classe.

    Possono essere definite come Public, Private, Protected, Default.

    class Add

    {

    public int i; // class variable

    public int j; // class variable

    public int add(){

    return i + j;

    }

    }

    Add a = new Add();

    a.i=4;

    a.j=6;

    System.out.println(a.add());

    42

  • Variabili di una Classe (attributi) 2

    Le variabili di una classe sono definite per ogni istanza di una classe. Per questo motivo ogni oggetto ha la propria

    copia della variabile.

    Le variabili di una classe possono essere inizializzate. Altrimenti sono settate a 0 o a null.

    Le variabili locali (interne ai metodi) devono essere inizializzate prima di essere utilizzate.

    Si pu usare la keyword static per far s che un elemento

    sia comune a tutte le istanze della classe.

    43

  • Esempio

    class Incrementor

    {

    private static int i = 0;

    public void incrCount(){

    i++;

    }

    public int getCount() {

    return i;

    }

    }

    Incrementor f1, f2;

    f1 = new Incrementor();

    f2 = new Incrementor();

    f1.incrCount();

    System.out.println(f1.getC

    ount());

    f2.incrCount();

    System.out.println(f1.getC

    ount());

    44

    1. Qual loutput ? 2. Qual loutput se non avessi utilizzato static?

  • Costanti

    In C++ le costanti sono definite utilizzando const o #define.

    In Java un poco pi complicato: public final = ;

    Esempi: public final static double PI = 3.14;

    public final static int NumStudenti = 60;

    Le costanti non possono essere modificate.

    45

  • Il costruttore

    Ogni classe pu avere uno o pi costruttori.

    un metodo (non pu essere invocato e non ritorna nulla).

    Viene chiamato automaticamente quando si richiede di istanziare loggetto tramite new.

    definito con lo stesso nome della classe a cui appartiene.

    Viene utilizzato per inizializzare le variabili di una classe.

    46

  • I/O

    Java supporta un ampio set di librerie di I/O. Network, File, Screen (Terminal, Windows,

    Xterm),Screen Layout, Printer.

    In Java esiste il concetto di Stream Di caratteri;

    Di bytes;

    Uno stream un canale di comunicazione tra un programma (Java) e una sorgente (destinazione) da cui importare (verso cui esportare) dati.

    Linformazione viene letta (scritta) serialmente, con modalit FIFO

    47 Input Output

  • Esempio scrittura su terminale

    Per scrivere uno stream su terminale si utilizza: System.out.println();

    System.out.print();

    Si pu utilizzare il + per concatenare le

    stringhe: int i, j;

    i = 1;

    j = 7;

    System.out.println(i = + i + j = + j);

    48

  • Esempio con due Classi

    49

    Le stringhe in java sono degli oggetti della

    classe String. Come tutti gli oggetti si creano con

    l'operatore new.

    cognome=new String(inputCognome);

    Esiste anche una variante sintetica per la

    creazione di un oggetto String, che quella

    utilizzata.

  • Compilazione ed Esecuzione a riga di comando

    C:\Users\Master\eserciziIS1-2012\java\esempio1>dir

    ...

    12/03/2012 10:10 .

    12/03/2012 10:10 ..

    12/03/2012 10:10 487 Agenda.java

    12/03/2012 10:01 272 Contatto.java

    2 File 759 byte

    2 Directory 102.892.392.448 byte disponibili

    C:\Users\Master\eserciziIS1-2012\java\esempio1>javac Agenda.java

    C:\Users\Master\eserciziIS1-2012\java\esempio1>dir

    ...

    12/03/2012 10:15 .

    12/03/2012 10:15 ..

    12/03/2012 10:15 931 Agenda.class

    12/03/2012 10:10 487 Agenda.java

    12/03/2012 10:15 451 Contatto.class

    12/03/2012 10:01 272 Contatto.java

    4 File 2.141 byte

    2 Directory 102.892.384.256 byte disponibili

    C:\Users\Master\eserciziIS1-2012\java\esempio1>java Agenda

    I contatti presenti in agenda sono:

    Rossi 25

    Verdi 34

    Bianchi 20 50

  • Package 1/2

    Un package Java un meccanismo per organizzare classi Java all'interno di sottogruppi ordinati.

    Un package un insieme lasco (loose collection) di classi.

    I packages sono simili alle librerie.

    I programmatori spesso usano i package per riunire classi logicamente correlate o che forniscono servizi simili.

    I packages possono essere dichiarati utilizzando la keyword package allinterno di un file .java.

    Per utilizzare un package si utilizza la keyword import.

    Possono essere memorizzati in file compressi chiamati file JAR, permettendo la trasmissione di pi classi in una sola volta.

    Eclipse offre features per la gestione automatica dei Packages.

    51

  • Package 2/2

    Una applicazione spesso composta di molte classi (eventualmente correlate)

    Un package un gruppo di classi che costituiscono una unit concettuale

    Un package pu comprendere parecchie classi definite in file separati (file .java e .class)

    Una dichiarazione di package ha la forma:

    package < nomepackage> ;

    se presente, deve essere allinizio del file .java

    52

    Classe1.java

    Classe2.java

  • Package e File System

    Esiste una corrispondenza biunivoca fra il nome del package e la posizione nel file system delle classi del package.

    Un package di nome esempioIS1 richiede che tutte le sue classi si trovino in una cartella (directory) di nome esempioIS1

    Per compilare una classe Classe1 che fa parte di un package esempioIS1 occorre:

    porsi nella cartella superiore a esempioIS1 e invocare il

    compilatore con il percorso completo della classe:

    javac esempioIS1/Classe1.java

    Per eseguire una classe Classe2 che fa parte di un package esempioIS1 occorre:

    porsi nella cartella superiore a esempioIS1 invocare linterprete

    con il nome assoluto della classe:

    java esempioIS1/Classe2.java

    53

  • Package di default

    Se una classe non dichiara di appartenere ad alcun package, automaticamente assegnata al package di

    default

    Per convenzione, questo package fa riferimento alla cartella (directory) corrente:

    lapproccio utilizzato nel primo esempi.

    Si possono compilare ed eseguire i file nella cartella in cui si trovano, senza premettere percorsi o nomi assoluti.

    54

  • Sub Packages

    I Packages in Java sono organizzati gerarchicamente.

    I Sub-packages possono essere creati come segue: package mioPackage.Math

    package mioPackage.secondoPackage.terzoPackage

    Vengono create le due cartelle Math e secondoPackage nella cartella mioPackage.

    Viene creata una cartella terzoPackage nella cartella mioPackage/secondoPackage.

    55

  • Convenzione sui nomi dei Packages (by Wikipedia)

    I Package sono di solito definiti usando una struttura gerarchica, indicando i livelli di gerarchia con dei punti. Anche se i package pi in basso nella gerarchia sono spesso chiamati sotto-package di altri package, non c' nessuna relazione semantica.

    Il documento Java Language Specification stabilisce le convenzioni da adottare nei nomi dei package, cos da evitare di pubblicarne due con lo stesso nome. Le convenzioni descrivono come creare nomi unici, in modo da assicurare che package di uso generale e di larga distribuzione non abbiano nomi che possano generare ambiguit.

    In generale, un nome comincia con il dominio di primo livello dell'organizzazione che lo produce, seguito dal dominio e da altri eventuali sottodomini, elencati in ordine inverso. L'organizzazione pu infine scegliere un nome specifico per quel particolare package. Inoltre, sempre per convenzione, i nomi dei package dovrebbero contenere solo lettere minuscole.

    Ad esempio, se un'organizzazione canadese chiamata MySoft crea un package che si occupa di frazioni, chiamare il package ca.mysoft.fractions lo distingue da un altro package simile creato da un'altra compagnia. Infatti se una compagnia americana omonima crea un package sulle frazioni, ma lo chiama com.mysoft.fractions, le classi nei due package saranno tutte definite in namespace separati ed unici.

    Altre convenzioni per evitare le ambiguit e regole per dare nomi ai package quando in dominio Internet non pu essere direttamente usato nel nome sono descritte nella sezione 7.7 della Java Language Specification.

    56

  • Accesso ai packages

    Per accedere alle classi di un package si pu:

    Utilizzare il percorso completo

    ClasseA cA = new mioPackage.ClasseA();

    possibile utilizzare una scorciatoia per importare classi o packages.

    La sintassi per importare classi o packages :

    import package1[.package2][].classname;

    Esempi:

    import mioPackage.ClasseA;

    import mioPackage.secondoPackage;

    Tutte le classi/packages possono essere importate da un livello pi alto utilizzando la sintassi:

    import mioPackage.*;

    57

  • Esempi

    58

    Soluzione 1

    Soluzione 2

  • Visibilit di Package

    Oltre a pubblico e privato, in Java esiste un altro tipo di visibilit: la visibilit package.

    l'impostazione predefinita per classi e metodi, non esiste quindi una parola chiave per indicarla.

    Le variabili e i metodi sono accessibili solo per le altre classi dello stesso package in qualunque file siano

    definite.

    Altre classi, definite in altri package, non possono accedere a variabili e metodi di questo package qualificati

    a visibilit package, esattamente come se fossero privati.

    59

  • Java Foundation Packages

    Java fornisce un gran numero di classi raggruppate in packages diversi in base alle loro funzionalit offerte.

    I sei packages di base (foundation packages) offerti da Java sono: java.lang

    Contiene le classi per i tipi primitivi, le stringhe, le funzioni matematiche, i threads e le eccezioni.

    java.util Contiene classi come vettori, hash tables, date, etc.

    java.io Contiene classi per la gestione degli stream di I/O.

    java.awt Contiene classi per implementare le GUI

    java.net Contiene le classi per il networking

    java.applet Contiene le classi per creare e implementare le applets

    Il nucleo centrale dal linguaggio Java definito nel package java.lang che importato automaticamente: la frase import java.lang.* sottintesa.

    La jdk fornisce pi di 50 packages. 60

  • La Keyword static

    Applicato ad un attributo di una classe, indica che

    ne esister ununica istanza, comune e

    accessibile a tutti gli oggetti di quella classe (gi

    lo abbiamo visto).

    Applicato ad un metodo di una classe, indica che

    tale metodo potr essere richiamato anche senza

    bisogno di istanziare un oggetto per quella

    classe.

    Ad esempio la classe Math contiene metodi

    matematici di uso generale

    double lato = Math.sqrt(area); 61

  • Static utilizzato gi ma senza saperlo

    Il metodo main visto in precedenza static, quindi

    pu essere chiamato direttamente anche dalla linea

    di comando senza istanziare un oggetto della classe

    che lo contiene.

    Println un metodo static della classe

    Sytem.out di tipo PrintStream (di java.io).

    Per questo motivo possiamo invocare

    System.out.println(); senza istanziare un oggetto

    System.out.

    62

  • Esempio

    Il metodo StampaAVideoStatic() pu essere

    richiamato anche senza instanziare un oggetto della ClasseB;

    Per richiamare il metodo StampaAVideoNoStatic()

    bisogna necessariamente instanziare un oggetto della ClasseB;

    63

  • Eccezioni in breve Uneccezione (exception) un oggetto che descrive una

    situazione anomala o di errore.

    Leccezioni vengono lanciate (thrown) da una parte di un programma e possono essere raccolte e gestite (handled) da altre parti del programma.

    La gestione delle eccezioni permette a uno sviluppatore di suddividere un programma nel normale flusso di esecuzione e in quello di eccezione.

    Java ha un insieme predefinito di eccezioni ed errori che possono accadere durante lesecuzione di un programma:

    ArithmeticException

    ArrayIndexOutOfBoundsException

    FileNotFoundException

    InstantiationException

    Etc 64

  • Eccezioni non gestite

    Se uneccezione non gestita da un programma, questo terminer, in maniera non corretta, restituendo un messaggio.

    65

  • Gestione delle eccezioni Le istruzioni try catch

    Si tenta di eseguire il codice e se si intercetta uneccezione si cerca di porre rimedio.

    try {

    statement-list1

    } catch (exception-class1 variable1){

    statement-list2

    } catch (exception-class2 variable2) {

    statement-list3

    } catch .

    Listruzione try identifica un blocco distruzioni in cui pu verificarsi uneccezione.

    Se uneccezione si solleva nello statement-list1, il controllo trasferito al catch handler appropriato (con la stessa exception class sollevata).

  • Gestire le eccezioni

    Se occorre processare leccezione quando essa accade, la linea di codice che lancer leccezione deve essere eseguita in un blocco try.

    Un blocco try seguito da 1 o pi clausole catch, che contengono il codice per gestire leccezione.

    Ogni clausola catch associata ad un tipo deccezione e viene chiamata exception handler

    Quando si solleva uneccezione, la computazione prosegue fino alla prima clausola catch che corrisponde al tipo deccezione sollevata.

    Dopo lesecuzione degli statements nella clausola catch, il controllo viene trasferito agli statements che si trovano dopo lintero blocco trycatch.

  • La clausola catch Un blocco try seguito da una o pi clausole catch, che

    specificano quali eccezioni vengono gestite

    Ogni clausola catch corrisponde a un tipo di eccezione sollevata

    Quando si verifica uneccezione, la computazione continua con la prima clausola che corrisponde alleccezione sollevata.

    Allinterno di un catch si pu in genere:

    Stampare un messaggio dettagliato derrore

    Eseguire del codice alternativo: flusso di esecuzione di eccezione

    Chiudere il programma

    System.exit(error_code);

    Ritentare

    Eclipse suggerisce e riconosce le exception-class da dover

    inserire nel codice, costruendo in maniere automatica i blocchi try catch.

  • Esempio di gestione delleccezione

    69

  • La clausola finally

    Unistruzione try pu essere seguita da una clausola finally opzionale

    Le istruzioni della clausola finally vengono sempre eseguite:

    Se non viene sollevata nessuna eccezione, vengono eseguite dopo che si concluso il blocco try

    Se si verifica uneccezione, vengono eseguite dopo le istruzioni della clausola catch appropriata

    try {

    statement-list1

    } catch (exception-class1 variable1){

    statement-list2

    } catch (exception-class2 variable2) {

    statement-list2

    } catch

    } finally {

    statement-list3

    }

  • Propagazione delle Eccezioni

    Normalmente se un metodo main richiama il metodo_1 che richiama il metodo_2 che richiama il metodo_3, il controllo passa dal main al metodo_1 al metodo_2 al metodo_3 e quando questo si conclude ritorna al metodo_2 che a conclusione lo passa al metodo_1 e quindi al main

    Se leccezione non viene intercettata e gestita dove si verifica, pu ancora essere trattata a un livello pi alto.

    Le eccezioni si propagano attraverso la gerarchia delle chiamate di metodi finch non vengono intercettate e gestite.

  • Esempio Propagazione delle Eccezioni

    72

  • Input Stream da terminale Per inserire del testo dalla tastiera in Java non cos

    semplice.

    Il seguente snippet di codice mostra come inserire una String da tastiera.

    73

    Import dei packages

    gestione delleccezione suggerito in maniera automatica da IDE.

  • E se volessimo inserire altri tipi di valori ?

    Ci possono tornare utili le classi per i tipi primitivi.

    74

  • Array e Matrici

    Gli array in Java si dichiarano con la seguente sintassi: int c[]= new int[12];

    Object d[];

    d= new Object [100];

    Il numero degli elementi non viene mai dichiarato in fase di dichiarazione (a sinistra) ma solo in fase di definizione (a destra)

    Sono passati per riferimento public static void main (String args[])

    Si pu accedere ad un elemento con la [] c[3]= 4;

    Alcuni metodi sono inoltre disponibili c.length

    In maniera perfettamente analoga si possono definire e utilizzare le matrici: int m [] []= new int [10] [10];

    m[3][5] = 42;

  • Stringhe

    In Java le Stringhe NON sono definite come Array di char ma come oggetti della classe String.

    Esempi di uso: String s = new String(Hello);

    String s = Hello;

    String s2 = s1;

    Copia solo il riferimento!

    String s2=new String(s1);

    Copia tutto loggetto

    s2 == s1

    Vero se si tratta dello STESSO oggetto!

    s2.equals(s1)

    Vero se si tratta di due stringhe con lo stesso valore

    http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html

  • Il Collection Framework

    Il Collection Framework offerto da Java un'architettura unificata per la rappresentazione e la manipolazione di collezioni di oggetti.

    Permette la manipolazione di tali collezioni in maniera indipendente dai dettagli della loro rappresentazione.

    Riduce lo sforzo di programmazione, aumentando le prestazioni.

    Permette l'interoperabilit tra le API indipendenti, riducendo lo sforzo nella progettazione e nellimparare nuove API,

    Promuove il riutilizzo del software.

    Il framework si basa su interfacce.

    Comprende implementazioni di tali interfacce, e algoritmi di manipolazione.

    77

  • Definizioni

    Collection: un gruppo (insieme) di oggetti, definiti elementi (elements)

    Set: una unordered collection senza duplicati ammessi.

    SortedSet: una ordered collection senza duplicati ammessi.

    List: una ordered collection, con duplicati ammessi.

    Map: una collection che mappa chiavi (keys) a valori (values)

    SortedMap: una collection ordinata con chiavi ordinate.

    Si noti che esistono due distinte gerarchie di Collection.

    78

  • Implementazioni della Collection

    La Collection una interfaccia

    Ogni tipologia di Collection ha una o pi implementazioni.

    Si possono creare nuovi tipi di Collections

    Alcune classi che implementano la Collection di Java sono:

    79

  • Utilizzare la Collection import java.util.*;

    oppure

    import java.util.Collection;

    Esempio di ArrayList:

    import java.util.ArrayList;

    private static ArrayList eventsList = new

    ArrayList();

    Esiste una classe, java.util.Collections; che fornisce un numero di algoritmi da poter utilizzare con le collections, come ad esempio:

    sort, binarySearch, copy, shuffle,

    reverse, max, min, ... 80

  • Le interfacce di Collection

    81

    Collection la radice della gerarchia delle collection.

    Rappresenta gruppi di oggetti (elementi) che possono essere duplicati oppure no. Alcune possono essere ordinate altre no.

    Esistono implementazioni concrete di sottointerfacce quali List e Set.

    List rappresenta il concetto di lista ordinata (o sequenza):

    gruppo di elementi posti in un qualche ordine;

    implementazioni: ArrayList, Vector e LinkedList

    Set rappresenta il concetto di insieme: gruppo di elementi

    che non contiene duplicati (non contiene e1 e e2 se

    e1.equals(e2).

    Implementazioni: HashSet.

  • ArrayList vs LinkedList

    ArrayList: ottimizzato laccesso casuale (basato su

    array), non ottimizzati linserimento e leliminazione allinterno della lista (grosso modo equivalente a Vector)

    LinkedList: ottimizzato laccesso sequenziale,

    linserimento e leliminazione, indicato per implementare pile(LIFO) e code (FIFO), infatti contiene i metodi: addFirst(), addLast(), getFirst(), getLast(),

    removeFirst(), removeLast().

    82

  • ArrayList

    Abbiamo detto che gli Array non possono cambiare la propria dimensione: il numero di elementi contenuti viene

    stabilito al momento della creazione e rimane immutato.

    Per superare questa limitazione Java mette a disposizione la classe ArrayList, contenuta nel package java.util

    che permette di rappresentare sequenze di oggetti di

    lunghezza variabile.

    Le istanze di ArrayList possono contenere solo istanze della classe Object.

    Ciascun oggetto in unistanza di ArrayList viene

    identificato da un numero intero, detto indice, che ne

    indica la posizione.

    L'accesso ad una posizione inesistente provoca un errore (viene lanciata un'eccezione).

    83

  • Costruttori

    La classe ArrayList definisce due costruttori:

    ArrayList(): crea un vettore vuoto in cui la capacita'

    iniziale non specificata (costruttore di default). ArrayList al = new ArrayList();

    ArrayList alS = new ArrayList();

    ArrayList aall = new

    ArrayList();

    ArrayList(int initialCapacity): crea un vettore

    con la capacit iniziale indicata. ArrayList al = new ArrayList(100);

    ArrayList alS = new ArrayList(100);

    84

  • Metodi

    I metodi definiti dalla classe consentono tra l'altro di:

    Leggere o scrivere un elemento in una certa posizione (operazioni analoghe a quelle sugli

    array).

    Aggiungere uno o pi elementi, in varie posizioni della lista.

    Eliminare uno o pi elementi, in varie posizioni della lista.

    Cercare un oggetto contenuto nella lista.

    Trasformare lArrayList in un array.

    85

  • Elenco di metodi -1

    86

    Restituisce il numero di elementi contenuti nella Lista:

    int size()

    Restituisce l'elemento di indice index:

    Object get(int index)

    Sostituisce obj all'oggetto di posizione index:

    Object set(int index, Object obj)

    Inserisce obj nella posizione index e sposta tutti gli elementi, da index in poi, di una posizione:

    void add (int index, Object obj)

    Aggiunge obj dopo l'ultimo elemento (restituisce true):

    boolean add (Object obj)

  • Elenco di metodi -2

    87

    Rimuove l'oggetto presente nella posizione index e sposta all'indietro di una posizione tutti gli elementi successivi a

    quello rimosso:

    void remove(int index)

    Rimuove l'oggetto obj se presente restituendo true, oppure restituisce false:

    boolean remove(Object obj)

    Restituisce la prima posizione dell'oggetto 'elem' nel vettore, -1 se non esiste:

    int indexOf(Object elem)

    Restituisce una stringa "[el1, el2, eln]:

    String toString()

  • Esempio 1/3

    88

  • Esempio 2/3

    89

  • Esempio 3/3

    90

  • JDeveloper

    JDeveloper un IDE (Integrated Development Environment).

    Pu essere scaricato al seguente indirizzo: http://www.oracle.com/technetwork/developer-

    tools/jdev/downloads/index.html

    La home page dello strumento: http://www.oracle.com/technetwork/developer-

    tools/jdev/overview/index.html

    91


Recommended