38
UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Ingegneria dell’Informazione ENGINEERING G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti COMPUTER Tecniche di Programmazione in Java Giovanni Rimassa DII - Università di Parma

Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

  • Upload
    lamkiet

  • View
    222

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Tecniche diProgrammazione in Java

Giovanni RimassaDII - Università di Parma

Page 2: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Il linguaggio Java

• Descrizione del Linguaggio Java– Caratteristiche Generali.– OOP in Java.– Programmazione Concorrente.

Page 3: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Il linguaggio Java

• Tratti più avanzati di Java– Serialization.– Reflection.– RMI.

Page 4: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Il linguaggio Java• Tra le altre, Java ha tre caratteristiche:

– E` un linguaggio concorrente.– E` un linguaggio bytecoded.– Ha una vastissima libreria standard.

• Queste influenzano la programmazione:– In Java, usare i thread è una scelta naturale.– Serialization e Reflection nel linguaggio.– Java si propone come una piattaforma.

Page 5: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

C++ e Java

• Quando Java è nato, venne presentato come“un C++ più facile e sicuro”.

• Un programmatore C++ trova in Java unasintassi familiare.

? C++ e Java sono, in realtà molto diversi.– Alcuni problemi in C++ spariscono in Java.– Alcuni idiomi C++ sono sbagliati in Java.

Page 6: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

C++ vs. Java

• All’inizio, il principale passatempo dellanascente comunità Java era il C++ bashing.– Per fare proselitismo.– Per affermare l’identità del linguaggio nascente.

• Oggi, Java è molto maturato (così come isuoi utenti).– La comunità Java ha proprie tecniche ed idiomi.– Java è anche insegnato come primo linguaggio.

Page 7: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

C++ vs. Java

• Java sbaglia cose che il C++ ha fatto giuste10 anni prima (contenitori type unsafe).

• Java rimedia a grossolani difetti del C++(import Map vs. #include <map>).

• Java aggiunge diverse feature di nonimmediato utilizzo, ma che diventano moltoutili in applicazioni complesse.

Page 8: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

OOP in Java

• Java è strettamente mono-paradigma.– In Java si può programmare solo secondo

l’approccio orientato ad oggetti.– L’unico meccanismo di estensibilità è quello

del polimorfismo per inclusione.

• Java, naturalmente, ha sue peculiarità.– Garbage Collection per gestire la memoria.– Ereditarietà singola, ma subtyping multiplo.

Page 9: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Object Life Cycle in Java

• In Java tutti gli oggetti sono allocati sulloheap con new.– Di default, semantica di riferimento.– Passaggio di parametri solo per riferimento.– Shallow copy con il metodo clone().– Deep copy a carico del programmatore.

Page 10: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Object Life Cycle in Java

• Java ha il Garbage Collector, quindi non siavranno mai memory leak dovuti a mancatadeallocazione.– Perciò, Java non ha distruttori da chiamare

quando un oggetto non è più referenziato.– C’è un metodo finalize(), chiamato

quando il GC libera la memoria di un oggetto.– Ma il GC può anche non partire mai !!!

Page 11: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Object Life Cycle in Java

• “Resource allocation is initialization” è unidioma centrale in C++, ma con Java nonfunziona.– Indispensabile per codice exception-safe in

C++, ma Java sistema le cose con finally.

• Il GC evita i memory leak, ma le altrerisorse (file, connessioni, handle vari) ?– Occorre un metodo destroy() esplicito.

Page 12: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Ereditarietà in Java

• Java ha due parole chiave per l’ereditarietà,che ne esprimono due aspetti.

• La keyword extends:– Sia subtyping che inheritance.– Supporta solo la derivazione singola.

• La keyword implements:– Solo subtyping (niente implementazione).– Supporta la derivazione multipla.

Page 13: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Ereditarietà in Java• In Java, si usa la keyword interface per

indicare una classe senza dati e con tutti imetodi pubblici ed astratti.

• La relazione extends lega o due classi odue interfacce.

• La relazione implements lega una classead una interfaccia (la classe implemental’interfaccia).

Page 14: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Sintassi per l’ereditarietà in Java

Shape

Circle Triangle Square

Estensione singola public abstract class Shape { // …}

class Square extends Shape { // …}

Page 15: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Sintassi per l’ereditarietà in Java

public interface Shape { // …}

class Square implements Shape{

// …}

«interface»Shape

Circle Triangle Square

Implementazione singola

Page 16: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Sintassi per l’ereditarietà in Java

public abstract class Shape { // ...}

public interface Persistent { // ...}

class Square extends Shape implements Persistent { // ...}

Derivazione multipla

Shape

Circle Triangle Square

«interface»Persistent

Page 17: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Inner Class in Java

• Una Inner Class è semplicemente unaclasse definita all’interno di un’altra.– In C++ si chiamano nested classes.– Può essere un meccanismo di information

hiding.

• Tuttavia, le Inner Class di Java sono di più:– La relazione fra classi ne induce una tra oggetti.– Quelle anonime sono usate come code block.

Page 18: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Inner Class in Java

• Ogni oggetto di una inner class mantiene unriferimento ad un oggetto della sua classeesterna.

• All’atto della creazione, i casi sono due:– Se this è della classe esterna, viene usato

implicitamente.– Altrimenti, il programmatore deve fornirne uno.

Page 19: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Inner Class in Java• In un oggetto di classeInner, l’oggettoesterno è chiamatoOuter.this.

• In createInner(),viene usato this.

• Altrimenti, si usa lasintassi o.new.

public class Outer { public class Inner { public Outer getOuter() { return Outer.this; } } // End of Inner public createInner() { return new Inner(); }} // End of Outer

Outer o = new Outer();Outer.Inner i1 = o.createInner()Outer.Inner 12 = o.new Inner();

Page 20: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Inner Class in Java• Dichiarando una inner class come static,

si elimina il riferimento all’oggetto esterno.• L’uso più interessante delle inner class si ha

con le Anonymous Inner Classes.– Alta information hiding.– Comodità di programmazione.– Flessibilità tramite reificazione.

Page 21: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Inner Class in Java• Nei linguaggi OO,

quando un concetto èmodellato come unaclasse, si manipola piùflessibilmente.

• La tecnica chiamatareificazione trasformale relazioni in classi.– Quando fermarsi ?

src:Host dest:Hostsends messages

src:Host dest:Host

puts messages

link:Channel

gets messages

src:Host dest:Host

puts messages

link:Channel

gets messages

srcEnd:EndPoint destEnd:EndPoint

Page 22: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Inner Class in Java

• In Java, applicare la reificazione costringe acreare piccole classi, tipicamente usate unasola volta.– I gestori di eventi nelle GUI.– La rappresentazione di comandi ad un server.

• Da un design OO, risulta spesso utileintrodurre un’interfaccia o una classe baseastratta comune.

Page 23: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Inner Class in Java• Unendo un design che

usa un’interfacciaastratta all’uso di innerclass:– Estendibilità a runtime

con il polimorfismo.– Forte information

hiding con inner classprivata.

public interface Channel { // ...}

public class ChannelProvider() { private class SocketChannel

implements Channel { // ... }

public Channel getChannel() { return new SocketChannel(); } }} // End of CommManager

Page 24: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Inner Class in Java• Se c’è un unico punto

in cui si usa la classeSocketChannel,non serve darle unnome.– Con una inner class

anonima si definisceuna sottoclasse diChannel all’atto dellacreazione dell’oggetto.

public interface Channel { // ...}

public class ChannelProvider() {

public Channel getChannel() { return new Channel(){ // In-line implementation }; } }} // End of CommManager

Page 25: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java

• Java è il primo linguaggio ad oggetti di usocomune che abbia un supporto nativo per laconcorrenza.

• Java è multithreaded, dotato di monitor siaa livello di oggetto che di classe.– Classi Thread e ThreadGroup.– Keyword synchronized.– Metodi wait() e notify() di Object.

Page 26: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java• La classe Thread rappresenta un flusso di

esecuzione concorrente.– Un oggetto Java di classe Thread ha dentro un

thread del Sistema Operativo sottostante.– Il metodo Thread.start() attiva il thread

interno.– La funzione main del thread interno è il metodoThread.run().

Page 27: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java

• Un oggetto con dentro un thread si chiamaOggetto Attivo.

• Ci sono due modi per realizzare un oggettoattivo in Java.– Estendere la classe Thread e ridefinire il

metodo run().– Implementare l’interfaccia Runnable, che

dichiara il metodo run().

Page 28: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java

• Si vuole fare una classe Agent, che deve essereun oggetto attivo.– A sinistra, la soluzione con extends Thread.– A destra, la soluzione con implements Runnable.

+ void run()

Thread

+ void run()

Agent

11

1

1

+ void run()

«interface»Runnable

+ void run()

Agent

Thread

+ void run()

myThread

Page 29: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java

• Due design a confronto:– Dal punto di vista modellistico, un agente

contiene un thread, ma non non è un thread.– L’ereditarietà è una relazione forgiata a compile

time; la delegation è più flessibile.– L’interfaccia Runnable disaccoppia Agent eThread.

? Meglio usare implements Runnable.

Page 30: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java

• Dove ci sono thread, ci devono esseremeccanismi di sincronizzazione.– In una visione process oriented, vi sono entità

attive (thread) che competono per l’accesso aentità passive (risorse).

– In Java, una risorsa è sempre incapsulata da unoggetto.

? In Java, ci si sincronizza su oggetti.

Page 31: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java• In Java, ogni oggetto di classe Object (e

quindi di qualunque altra classe) ha unmutex.– La parola chiave synchronized introduce

un blocco eseguito con il possesso del mutexassociato all’oggetto Java specificato.

• La classe Object non è astratta, e spessosi usano le sue istanze come lock.

Page 32: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java• Spesso, un oggetto

Java agisce esso stessosia come risorsa checome mutex.– Il costruttosynchronized(this)è molto comune.

– Si può semplificaredichiarando un metodocome synchronized.

class X { public void f() { // Do something synchronized(lock) { // lock held during this block } // lock released

}

public synchronized void g() { // synchronized(this) { // ‘this’ lock held in method // } }

}

Page 33: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java

• La mutua esclusione, da sola, non èsufficiente.

• In Java, ogni oggetto non ha un semplicemutex, ma un monitor completo.

• Un monitor consente di mettersi in attesaall’interno della sezione di mutuaesclusione, dando accesso ad altri thread.

Page 34: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java• La classe Object espone i tre metodi:

– public final void wait() throws InterruptedException– public final void notify()– public final void notifyAll()

• wait() libera il mutex e blocca il thread.• notify() risveglia un thread bloccato.• notifyAll() risveglia tutti i thread

bloccati.– Tutti e tre richiedono il possesso del mutex.

Page 35: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Concorrenza in Java

• Contatore up/down.– inc() aspetta quando è al massimo e

notifica quando si lascia il minimo.– dec() aspetta quando è al minimo e

notifica quando si lascia il massimo.

? State-based synchronization.

class BoundedCounter { private long count = MIN; public synchronized void inc() { while(count == MAX) try { wait(); } catch(IE ie){ } if(count++ == MIN) notifyAll(); }

public synchronized void dec() { while(count == MIN) try { wait(); } catch(IE ie){ } if(count-- == MAX) notifyAll(); }}

Min Middle Max

dec() from Maxdec() to Min

inc() from Min inc() to Max

Page 36: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Tratti Avanzati di Java

• Java è un linguaggio bytecoded.– Il compilatore javac genera del codice

macchina per un processore che non esiste.– L’interprete java esegue le istruzioni,

convertendole in codice della CPU reale.

• Il formato binario del bytecode Java (file.class) è organizzato a tabelle ed è moltoricco di meta-informazioni.

Page 37: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Java per Sistemi Distribuiti

• Creare sistemi distribuiti è difficile.– Spazi di indirizzamento separati.– Forte concorrenza.

• Alcune caratteristiche di Java sono assaiutili per fare sistemi distribuiti flessibili.– Serialization.– Reflection.– RMI.

Page 38: Tecniche di Programmazione in Java - ce.unipr.it · Ereditarietà in Java • In Java, si usa la keyword interface per indicare una classe senza dati e con tutti i metodi pubblici

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Ingegneria dell’Informazione ENGINEERING

G. Rimassa - Progettazione e Programmazione Orientata agli Oggetti

COMPUTER

Serialization in Java

? In un sistema OO, lo sviluppatore definiscemolti tipi e ne collega le istanze conriferimenti.

? I meccanismi di IPC dei sistemi operativioperano su tipi di dati grezzi.