Java RMI: Esempio Completo di un Applicazione Distribuita

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Java RMI: Esempio Completo di un Applicazione Distribuita"

Transcript

1 Java RMI: Esempio Completo di un Applicazione Distribuita Il Problema Produttore/Consumatore in Ambiente Distribuito* *a cura del Prof. L. Nigro, Università della Calabria

2 Java RMI (Remote Method Invocation) Introduce uno strato di trasporto basato su TCP, per la chiamata e trasmissione di dati (opportunamente espressi in un formato di rete; Java usa la serializzazione come tecnica di marshalling) ) ad un oggetto remoto Un oggetto remoto è rappresentato presso il client da uno stub (proxy), che implementa la stessa interfaccia dell oggetto remoto.. Lo stub riceve la richiesta di invocazione di un metodo, prepara un blocco di informazioni (messaggio)) e lo spedisce alla macchina server dove risiede l oggetto remoto (oggetto effettivo), utilizzando i servizi di TCP Presso il server è presente lo skeleton che si interfaccia con la rete, converte le informazioni ricevute dallo stub, chiama il metodo effettivo sull oggetto remoto e, alla fine, costruisce un messaggio col risultato che è inviato allo stub e quindi al client Lo schema complessivo mira a rendere indistinguibile la chiamata di un metodo su un oggetto locale da quella relativa ad un oggetto remoto (semantica sincrona o bloccante) RMI richiede la mobilità del codice di classi Java e utilizza un meccanismo di garbage collection distribuita degli oggetti remoti basata su reference-count count IS_7 - L. Nigro 51

3 Architettura IS_7 - L. Nigro 52

4 Osservazioni Le prime versioni di Java effettivamente generavano stub e skeleton di un oggetto remoto Java 1.4 si limita a generare solo la componente stub Le ultime versioni (Java 5.0 o superiore) ) non generano più esplicitamente stub e skeleton dal momento che il linguaggio ne fornisce direttamente il supporto (basato sulla reflection e i proxy dinamici) indipendentemente dal particolare oggetto remoto implementato Ottenere un applicazione distribuita funzionante basata su Java RMI può essere non agevole dal momento che occorre padroneggiare tutta una serie di dettagli.. In quanto segue si mostrerà l uso di RMI attraverso lo sviluppo concreto di esempio non banale, rappresentativo della situazione generale I concetti base sono: progetto interfacce remote (da( collocare identicamente lato server e lato client) implementazioni delle interfacce lato server (UnicastRemoteObject( UnicastRemoteObject) pubblicazione di uno o più oggetti remoti su rmiregstry implementazioni delle applicazioni client con, es., lookup di oggetto remoti su rmiregistry predisposizione di un web server per il download di classi a runtime. IS_7 - L. Nigro 53

5 Produttore/consumatore/buffer limitato in ambiente distribuito Si tratta di un problema classico di programmazione concorrente Un certo numero di processi produttori e consumatori comunicano tra loro scambiandosi messaggi di un tipo generico, attraverso la mediazione di un buffer limitato (mailbox) Il buffer va realizzato in veste thread-safe mediante una scelta opportuna del meccanismo di controllo della concorrenza Il buffer costituisce un oggetto remoto condiviso tra i produttori e consumatori dispersi su varie macchine (dunque il problema coinvolge il vero parallelismo) Come meccanismi di controllo della concorrenza si considerano: semafori, lock/condition, monitor nativo di Java Si desidera che i risvegli dei processi avvengano in ordine FIFO Il buffer rappresenta il server, i processi produttori/consumatori i client IS_7 - L. Nigro 54

6 Impostazione del progetto Il progetto viene sviluppato su singola macchina ma è pensato esplicitamente per il distribuito. Tutto ciò si riflette,, ad esempio, nel controllo degli accessi alle classi che in una JVM è mediato dal classpath Sviluppare secondo RMI significa comprendere esattamente che il sistema software deve poter girare indipendentemente da ogni agevolazione di classpath Concretamente, è utile suddividere il lavoro in tre progetti associati rispettivamente al lato server, al lato client, agli aspetti comuni (common). Tali progetti possono essere sviluppati in ambiente Eclipse (dopo( aver scaricato dalla rete ed installato il plug-in di Java RMI) o direttamente utilizzando gli strumenti Java (il( metodo preferito di seguito) Siano bb_server, bb_client e bb_common le tre directory (es( es. di c:\) dei progetti. Siccome le varie componenti dell applicazione distribuita gireranno su macchine (e JVM) diverse, l utilizzo del packaging deve avvenire rigorosamente in modo congruente nei vari sotto progetti Si sottolinea ancora che le classi interne a bb_server o bb_client o bb_common non devono basarsi sul classpath per ottenere l accesso a classi degli altri progetti.. A tale proposito, si ammette che sulla macchina di sviluppo locale il classpath non contenga gli entry point di bb_server, bb_client e bb_common IS_7 - L. Nigro 55

7 Le interfacce Il punto di partenza è la definizione di opportune interfacce lato server Siccome le specifiche richiedono di poter lavorare su bounded buffer basati su diversi metodi di concorrenza, si è deciso di introdurre un factory che ottiene, a partire da informazioni di configurazione,, la dimensione del buffer e la specifica del tipo di controllo della concorrenza L oggetto factory è di fatto il primo oggetto remoto da realizzare. Altri oggetti remoti sono poi i vari tipi di buffer Le interfacce BoundeBuffer e BoundedBufferFactory rappresentano aspetti comuni dell intero progetto. Esse vengono sviluppate in bb_common e poi replicate identicamente (rispettando la struttura a package) in bb_server e bb_client Tanto BoundedBuffer quanto BoundedBufferFactory estendono l interfaccia Remote e i loro metodi devono dichiarare che possono sollevare l eccezione RemoteException (di tipo checked) Ogni (sotto) progetto ha package del tipo is.sottodirectory, il che significa che una corrispondente gerarchia di directory va realizzata in bb_common,, o bb_server etc. Ad esempio, siccome si desidera il package is.boundedbuffer per le interfacce BoundedBuffer e BoundedBufferFactory,, in bb_common si crea la directory is e al suo interno boundedbuffer etc. IS_7 - L. Nigro 56

8 Le interfacce di is.boundedbuffer package is.boundedbuffer; import java.rmi.*; public interface BoundedBuffer extends Remote{ public void put( Message m ) throws RemoteException; public Message get() throws RemoteException; //BoundedBuffer package is.boundedbuffer; import java.rmi.*; public interface BoundedBufferFactory extends Remote{ public BoundedBuffer getbuffer() throws RemoteException; //BoundedBufferFactory IS_7 - L. Nigro 57

9 Le interfacce di is.boundedbuffer In realtà, il package is.boundedbuffer dichiara anche l interfaccia Message che descrive la tipologia generica dei messaggi scambiati Message non è un interfaccia remota,, ma estende Serializable. Metodi esistono per fissare/ottenere il dato di un messaggio,, e per fissare/ottenere il tempo di permanenza del messaggio nel buffer package is.boundedbuffer; import java.io.*; public interface Message extends Serializable{ public void setdata( Object dato ); public Object getdata(); public long getbuffertime(); public void setbuffertime( long time ); //Message IS_7 - L. Nigro 58

10 Problemi di compilazione Dopo aver creato e compilato in bb_common le classi di is.boundedbuffer, si copia la gerarchia di directory is/boundedbuffer all interno di bb_server e bb_client Attenzione: l impostazione del lavoro richiede che per compilare correttamente es.. le interfacce di is.boundedbuffer, ci si debba collocare col prompt di sistema (uso di javac a riga di comando) ) in bb_common. Da dentro Eclipse, ovviamente,, le cose risulterebbero semplificate dallo strumento Utile è un file batch (es( es. jc.bat) posto in bb_common, col seguente contenuto: javac is/boundedbuffer boundedbuffer/*.java IS_7 - L. Nigro 59

11 Implementazioni lato server In bb_server si crea la sottodirectory di is es. denominata boundedbuffer_server, che si affianca alla sottodirectory boundedbuffer copiata da bb_common In boundedbuffer_server si programma l oggetto BoundedBufferFactoryImpl implementazione di BoundedBufferFactory ed erede di UnicastRemoteObject.. In questo modo l oggetto remoto (factory) si esporta ad RMI. L esportazione significa che RMI si fa poi carico di sentire richieste di connessioni dall esterno esterno, su una certa porta, dirette all oggetto remoto Nella stessa directory si implementano le classi bounded buffer concrete IS_7 - L. Nigro 60

12 BoundedBufferFactoryImpl Scopo di questa classe è consultare un file di properties (buffer.properties( buffer.properties) ) ed ottenere da questo le informazioni sulla buffer size ed il tipo di controllo della concorrenza. Esempio di contenuto di buffer.properties: BufferSize=5 ConcurrencyMethod=Semaphore Gli altri metodi di concorrenza sono indicati dai valori Lock e Native di ConcurrentMethod Se viene sollevata qualche eccezione (es. il file di properties non viene trovato) ) la classe ipotizza il controllo di concorrenza Native con una buffer size di default di 5 slot IS_7 - L. Nigro 61

13 BoundedBufferFactoryImpl package is.boundedbuffer_server; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import java.util.properties; import java.io.*; public class BoundedBufferFactoryImpl extends UnicastRemoteObject implements BoundedBufferFactory{ private BoundedBuffer bb=null; public BoundedBufferFactoryImpl() throws RemoteException{ public BoundedBuffer getbuffer() throws RemoteException{ if( bb!=null ) return bb; Properties p=new Properties(); int n=5;//dimensione di default IS_7 - L. Nigro 62

14 BoundedBufferFactoryImpl try{ FileInputStream in= new FileInputStream("c:\\bb_server\\is\\boundedbuffer_server\\buffer.properties"); p.load( in ); String size=p.getproperty("buffersize"); n=integer.parseint(size); System.out.println("buffer size="+n); String conctype=p.getproperty("concurrencymethod"); if( conctype.equalsignorecase("semaphore") ){ System.out.println("Semaphore"); bb=new BoundedBufferSemaphoreImpl(n); else if( conctype.equalsignorecase("lock") ){ System.out.println("Lock/Condition"); bb=new BoundedBufferLockImpl(n); else{//monitor nativo di default System.out.println("Java Native Monitor"); bb=new BoundedBufferSynchronizedImpl(n); catch( IOException e ){ e.printstacktrace(); System.out.println("Java Native Monitor"); bb=new BoundedBufferSynchronizedImpl(n); return bb; //getbuffer //BoundedBufferFactoryImpl IS_7 - L. Nigro 63

15 Le classi degli oggetti remoti bounded buffer Per facilitare lo sviluppo si è deciso di realizzare preliminarmente la classe BoundedBufferImpl che implementa BoundedBuffer ma senza alcun controllo della concorrenza L uso di questa classe da parte di più thread è unsafe Le classi eredi aggiungono il controllo della concorrenza,, ma si disinteressano della gestione del buffer IS_7 - L. Nigro 64

16 BoundedBufferImpl package is.boundedbuffer_server; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; public class BoundedBufferImpl extends UnicastRemoteObject implements BoundedBuffer{//bounded buffer non sincronizzato private Message[] buffer; private int n, in, out, count; public BoundedBufferImpl( int n ) throws RemoteException{ if( n<=0 ) throw new RemoteException ("La dimensione del buffer deve essere positiva!"); this.n=n; buffer=new Message[n]; in=0; out=0; count=0; //costruttore IS_7 - L. Nigro 65

17 BoundedBufferImpl public void put( Message x ) throws RemoteException{ buffer[in]=x; in=(in+1)%n; count++; System.out.println("Buffering "+x+"..."); x.setbuffertime( System.currentTimeMillis() ); //put public Message get() throws RemoteException{ Message x=buffer[out]; out=(out+1)%n; count--; x.setbuffertime( System.currentTimeMillis()-x.getBufferTime() ); System.out.println("Unbuffering "+x+"..."); return x; //get protected boolean empty(){ return count==0; protected boolean full(){ return count==n; //BoundedBufferImpl IS_7 - L. Nigro 66

18 BoundedBufferSemaphoreImpl package is.boundedbuffer_server; import java.util.concurrent.*; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; public class BoundedBufferSemaphoreImpl extends BoundedBufferImpl{ private Semaphore mutex=new Semaphore(1,true); private Semaphore empty, full; public BoundedBufferSemaphoreImpl( int n ) throws RemoteException{ super(n); empty=new Semaphore(n,true); full=new Semaphore(0,true); public void put( Message x ) throws RemoteException{ empty.acquireuninterruptibly(); mutex.acquireuninterruptibly(); super.put(x); mutex.release(); full.release(); //put public Message get() throws RemoteException{ full.acquireuninterruptibly(); mutex.acquireuninterruptibly(); Message x=super.get(); mutex.release(); empty.release(); return x; //get //BoundedBufferSemaphoreImpl IS_7 - L. Nigro 67

19 BoundedBufferLockImpl package is.boundedbuffer_server; import java.util.concurrent.locks.*; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import java.util.*; public class BoundedBufferLockImpl extends BoundedBufferImpl{ private Lock lock=new ReentrantLock(); private Condition empty=lock.newcondition(); private Condition full=lock.newcondition(); private List<Thread> listaproduttori=new ArrayList<Thread>(); private List<Thread> listaconsumatori=new ArrayList<Thread>(); private boolean produttoredevedormire(){ if( super.full() listaproduttori.get(0)!=thread.currentthread() ) return true; return false; //produttoredevedormire private boolean consumatoredevedormire(){ if( super.empty() listaconsumatori.get(0)!=thread.currentthread() ) return true; return false; //consumatoredevedormire public BoundedBufferLockImpl( int n ) throws RemoteException{ super(n); //costruttore IS_7 - L. Nigro 68

20 BoundedBufferLockImpl public void put( Message x ) throws RemoteException{ lock.lock(); try{ listaproduttori.add( Thread.currentThread() ); while( produttoredevedormire() ){ full.awaituninterruptibly(); listaproduttori.remove(0); super.put(x); empty.signalall(); finally{ lock.unlock(); //put public Message get() throws RemoteException{ Message x; lock.lock(); try{ listaconsumatori.add( Thread.currentThread() ); while( consumatoredevedormire() ){ empty.awaituninterruptibly(); listaconsumatori.remove(0); x=super.get(); full.signalall(); finally{ lock.unlock(); return x; //get //BoundedBufferLockImpl IS_7 - L. Nigro 69

21 BoundedBufferSynchronizedImpl package is.boundedbuffer_server; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import java.util.*; public class BoundedBufferSynchronizedImpl extends BoundedBufferImpl{ private List<Thread> listaproduttori=new ArrayList<Thread>(); private List<Thread> listaconsumatori=new ArrayList<Thread>(); private boolean produttoredevedormire(){ if( super.full() listaproduttori.get(0)!=thread.currentthread() ) return true; return false; //produttoredevedormire private boolean consumatoredevedormire(){ if( super.empty() listaconsumatori.get(0)!=thread.currentthread() ) return true; return false; //consumatoredevedormire public BoundedBufferSynchronizedImpl( int n ) throws RemoteException{ super(n); //costruttore IS_7 - L. Nigro 70

22 BoundedBufferSynchronizedImpl public synchronized void put( Message x ) throws RemoteException{ listaproduttori.add( Thread.currentThread() ); while( produttoredevedormire() ){ try{ wait(); catch( InterruptedException e ){ listaproduttori.remove(0); super.put(x); notifyall(); //put public synchronized Message get() throws RemoteException{ listaconsumatori.add( Thread.currentThread() ); while( this.consumatoredevedormire() ){ try{ wait(); catch( InterruptedException e ){ listaconsumatori.remove(0); Message x=super.get(); notifyall(); return x; //get //BoundedBufferSynchronizedImpl IS_7 - L. Nigro 71

23 Implementazione del server package is.boundedbuffer_server; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import javax.naming.*; public class BoundedBufferServer{ public static void main( String[] args ){ System.setProperty("java.security.policy", "c:\\bb_server\\is\\boundedbuffer_server\\server.policy"); System.setSecurityManager( new RMISecurityManager() ); try{ System.out.println("Costruzione factory..."); BoundedBufferFactory bbf=new BoundedBufferFactoryImpl(); System.out.println("Pubblicazione factory..."); Context naming=new InitialContext(); naming.rebind("rmi:boundedbufferfactory",bbf); System.out.println("In attesa di clienti..."); catch( Exception e ){ e.printstacktrace(); //main //BoundedBufferServer IS_7 - L. Nigro 72

24 Commenti Un programma server possiede il main ed il suo scopo è creare e pubblicare uno o più oggetti remoti di cui i client potranno scaricare lo stub su richiesta La pubblicazione sfrutta il servizio rmiregistry fornito da Java, che memorizza coppie <nome,riferimento> di oggetti remoti L utilizzo del servizio rmiregistry avviene mediante la classe Context di cui si crea un oggetto naming. Il metodo rebind inserisce una nuova coppia ed eventualmente aggiorna l oggetto se il nome è già presente.. I nomi sono del tipo rmi:nome_oggetto È importante assicurare nomi unici globali per gli oggetti remoti Nell esempio esempio,, solo l oggetto factory è creato e pubblicato sotto il nome rmi:boundedbufferfactory.. Un oggetto bounded buffer non viene pubblicato ma egualmente potrà essere ottenuto da un client invocando getbuffer() sul factory, che cosi restituisce lo stub del bounded buffer. Tutto ciò, tra l altro, assicura che i vari client ottengano e cooperino utilizzando uno stesso oggetto remoto bounded buffer IS_7 - L. Nigro 73

25 Commenti La compilazione di BoundedBufferServer implicitamente genera lo stub associato (in realtà Java 5.0 o superiore non lo genera più) Utilizzando una versione di Java sino alla 1.4, lo stub andrebbe creato esplicitamente col compilatore rmic come segue: >rmic is.boundedbuffer_server.boundedbufferserver invocato da dentro bb_server e specificando esplicitamente il package. Si otterrebbe il file BoundedBufferServer_Stub.class rmiregistry, una volta contattato, fornisce ad un client lo stub di un oggetto remoto pubblicato.. A questo scopo lo stub dovrebbe essere disponibile come una risorsa comune (si veda più avanti) ) cui rmiregistry può attingere on-demand IS_7 - L. Nigro 74

26 Implementazioni lato client Si presentano due processi client: uno con funzioni di produttore di messaggi,, un altro come consumatore.. Le relative classi (provviste del main) sono parte delle sotto directory boundedbuffer_producer e boundedbuffer_consumer di is di bb_client Il produttore ottiene un messaggio alla volta da tastiera e lo scrive sul buffer remoto Il consumatore, ogni qualvolta l utente digita Invio, chiede un messaggio al buffer e lo consuma, nel senso che ne mostra il contenuto su video unitamente al tempo di stazionamento del messaggio nel buffer Ma come è fatto un messaggio? È responsabilità del producer definire la tipologia dei messaggi scambiati In concreto, nella sotto directory boundedbuffer_producer si introduce la classe PCMessage che al momento risulta sconosciuta tanto al server (bounded buffer) quanto ai client consumer. La classe PCMessage verrà ottenuta dinamicamente dal server e dai consumatori sfruttando la mobilità del codice (si veda più avanti) presente in RMI IS_7 - L. Nigro 75

27 Classe PCMessage package is.boundedbuffer_producer; import java.io.*; import is.boundedbuffer.*; public class PCMessage implements Message, Serializable{ private long waittime; String content; public PCMessage( String s ){ content=s; public void setdata( Object s ){ content=(string)s; public Object getdata(){ return content; public void setbuffertime( long time ){ waittime=time; public long getbuffertime(){ return waittime; public String tostring(){ return content; //tostring //PCMessage IS_7 - L. Nigro 76

28 ProducerClient package is.boundedbuffer_producer; import is.boundedbuffer.*; import java.rmi.*; import java.rmi.server.*; import javax.naming.*; import java.util.*; public class ProducerClient{ public static void main( String[] args ){ System.setProperty("java.security.policy", "c:\\bb_client\\is\\boundedbuffer_producer\\client.policy"); System.setSecurityManager( new RMISecurityManager() ); String url="rmi://localhost/"; //prefisso url della macchina remota del server BoundedBufferFactory factory=null; BoundedBuffer bb=null; try{ Context naming=new InitialContext(); factory=(boundedbufferfactory)naming.lookup(url+"boundedbufferfactory"); bb=factory.getbuffer(); catch( Exception e ){ e.printstacktrace(); Scanner sc=new Scanner( System.in ); for(;;){ System.out.print("msg> "); String msg=sc.nextline(); try{ bb.put( new PCMessage(msg) ); catch( RemoteException e ){ e.printstacktrace(); //ProducerClient IS_7 - L. Nigro 77

29 ConsumerClient package is.boundedbuffer_consumer; import is.boundedbuffer.*; import java.util.scanner; import java.rmi.*; import java.rmi.server.*; import javax.naming.*; public class ConsumerClient{ public static void main( String[] args ){ System.setProperty("java.security.policy", "c:\\bb_client\\is\\boundedbuffer_consumer\\client.policy"); System.setSecurityManager( new RMISecurityManager() ); String url="rmi://localhost/"; BoundedBufferFactory factory=null; BoundedBuffer bb=null; try{ Context naming=new InitialContext(); factory=(boundedbufferfactory)naming.lookup( url+"boundedbufferfactory ); bb=factory.getbuffer(); catch( Exception e ){ e.printstacktrace(); Scanner sc=new Scanner( System.in ); String answer=null; Message msg=null; IS_7 - L. Nigro 78

30 ConsumerClient for(;;){ System.out.print("Press Invio to receive "); answer=sc.nextline(); try{ msg=(message)bb.get(); System.out.println("received msg "+msg+ " with buffer time="+msg.getbuffertime()+" ms"); catch( RemoteException e ){ e.printstacktrace(); //ConsumerClient IS_7 - L. Nigro 79

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 14 - Thread in Java 1 Cos è un

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

Dettagli

R.Focardi Laboratorio di Ingegneria del Software 6. 1

R.Focardi Laboratorio di Ingegneria del Software 6. 1 Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream

Dettagli

1 EJB e Portal Component Object http://desvino.altervista.org

1 EJB e Portal Component Object http://desvino.altervista.org 1 EJB e Portal Component Object http://desvino.altervista.org In questo tutorial studiamo come sfruttare la tecnologia EJB, Enterprise JavaBean, all interno del SAP Netweaver Portal. In breve, EJB è un

Dettagli

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java Riassunto Rassegna API - 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 17 3 maggio 2015! Programmazione

Dettagli

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

Dettagli

Finestra.java. static String nomicolonne[] = {"ind.","cognome","nome","telefono","e-mail"}; //nomi delle colonne della tabella

Finestra.java. static String nomicolonne[] = {ind.,cognome,nome,telefono,e-mail}; //nomi delle colonne della tabella import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowevent; import java.awt.event.windowlistener; import java.io.*; import java.util.*;

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Programmazione Java: Variabili membro, Metodi La parola chiave final

Programmazione Java: Variabili membro, Metodi La parola chiave final Programmazione Java: Variabili membro, Metodi La parola chiave final romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave

Dettagli

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione Sede di Latina Corso di Laurea in Ingegneria dell Informazione Consorzio Nettuno La fase di realizzazione si occupa

Dettagli

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity CORSO DI ALGORITMI E PROGRAMMAZIONE JDBC Java DataBase Connectivity Anno Accademico 2002-2003 Accesso remoto al DB Istruzioni SQL Rete DataBase Utente Host client Server di DataBase Host server Accesso

Dettagli

BPEL: Business Process Execution Language

BPEL: Business Process Execution Language Ingegneria dei processi aziendali BPEL: Business Process Execution Language Ghilardi Dario 753708 Manenti Andrea 755454 Docente: Prof. Ernesto Damiani BPEL - definizione Business Process Execution Language

Dettagli

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

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Sistemi Operativi Sincronizzazione tra Processi

Sistemi Operativi Sincronizzazione tra Processi Sistemi Operativi Processi Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Crediti per queste slides al Prof. Tullio Vardanega 1 Processi indipendenti possono avanzare concorrentemente senza alcun vincolo

Dettagli

Il linguaggio Java. Concetti base. I packages

Il linguaggio Java. Concetti base. I packages Il linguaggio Java I packages Concetti base Un package è una collezione di classi ed interfacce correlate che fornisce uno spazio dei nomi ed un controllo sugli accessi Un package facilita il reperimento

Dettagli

Classi ed Oggetti in JAVA

Classi ed Oggetti in JAVA Classi ed Oggetti in JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 rigutini@dii.unisi.it www.dii.unisi.it/~rigutini/

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Un oggetto per la lettura dalla tastiera

Un oggetto per la lettura dalla tastiera Fondamenti di informatica Oggetti e Java ottobre 2012 1 Un oggetto per la lettura dalla tastiera Le API di Java hanno un oggetto System.in che rappresenta la tastiera del calcolatore, ma che non è semplice

Dettagli

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese Inter Process Communication Laboratorio Software 2008-2009 C. Brandolese Introduzione Più processi o thread Concorrono alla relaizzazione di una funzione applicativa Devono poter realizzare Sincronizzazione

Dettagli

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it UML: Class Diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania Class Diagram Forniscono una vista strutturale

Dettagli

esercizi Esercizi / problemi

esercizi Esercizi / problemi Sistemi informativi applicati (reti di calcolatori): esercizi 1 Esercizi / problemi 1. Creare un applicazione che calcoli la media aritmetica dei seguenti valori interi: 35, 117, 23 e ne visualizzi il

Dettagli

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java] Desideriamo realizzare una applicazione web che ci consenta di calcolare il fattoriale di un numero. L'esercizio in sé non particolarmente difficile, tuttavia esso ci consentirà di affrontare il problema

Dettagli

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo.

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo. In una rete di ampie dimensioni, ciascuna sottorete (es. LAN, WAN) è connessa ad altre sottoreti tramite router. Internet è un insieme di reti connesse tra loro. Essenzialmente, in una rete alcune macchine

Dettagli

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client Versione 25.4.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un

Dettagli

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

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public:

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public: 1 Pila.h versione 6 struct Pila { private: int size; int defaultgrowthsize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialsize) ; Pila(); ~Pila() ; void copy(pila * to)

Dettagli

Struttura di un programma Java. Package. Uso dei package

Struttura di un programma Java. Package. Uso dei package Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Struttura di un programma

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Dichiarazioni di import: Introduzione

Dichiarazioni di import: Introduzione Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 10 Import di classi e di metodi statici Dichiarazioni di import:

Dettagli

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni Funzioni Le funzioni Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un risultato, come avviene anche per una funzione matematica

Dettagli

Le funzionalità di un DBMS

Le funzionalità di un DBMS Le funzionalità di un DBMS Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: DBMS.pdf Sistemi Informativi L-A DBMS: principali funzionalità Le

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

Introduzione alle applicazioni di rete

Introduzione alle applicazioni di rete Introduzione alle applicazioni di rete Definizioni base Modelli client-server e peer-to-peer Socket API Scelta del tipo di servizio Indirizzamento dei processi Identificazione di un servizio Concorrenza

Dettagli

Visibilità dei Membri di una Classe

Visibilità dei Membri di una Classe Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce

Dettagli

Descrizioni VHDL Behavioral

Descrizioni VHDL Behavioral 1 Descrizioni VHDL Behavioral In questo capitolo vedremo come la struttura di un sistema digitale è descritto in VHDL utilizzando descrizioni di tipo comportamentale. Outline: process wait statements,

Dettagli

Elementi di semantica denotazionale ed operazionale

Elementi di semantica denotazionale ed operazionale Elementi di semantica denotazionale ed operazionale 1 Contenuti! sintassi astratta e domini sintattici " un frammento di linguaggio imperativo! semantica denotazionale " domini semantici: valori e stato

Dettagli

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java Fondamenti di Informatica Dichiarazione, creazione e gestione di array in Java Array in Java - creazione La creazione fa una inizializzazione implicita: num = new int[10]; con valore 0 per int e double,

Dettagli

Semplici Algoritmi di Ordinamento

Semplici Algoritmi di Ordinamento Fondamenti di Informatica Semplici Algoritmi di Ordinamento Fondamenti di Informatica - D. Talia - UNICAL 1 Ordinamento di una sequenza di elementi Esistono molti algoritmi di ordinamento. Tutti ricevono

Dettagli

MIB PER IL CONTROLLO DELLO STATO DI UN SERVER FTP

MIB PER IL CONTROLLO DELLO STATO DI UN SERVER FTP Università degli Studi di Pisa Facoltà di Scienze Matematiche,Fisiche e Naturali Corso di Laurea in Informatica Michela Chiucini MIB PER IL CONTROLLO DELLO STATO DI UN SERVER

Dettagli

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi TIPI DI DATO Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti,

Dettagli

12.5 UDP (User Datagram Protocol)

12.5 UDP (User Datagram Protocol) CAPITOLO 12. SUITE DI PROTOCOLLI TCP/IP 88 12.5 UDP (User Datagram Protocol) L UDP (User Datagram Protocol) é uno dei due protocolli del livello di trasporto. Come l IP, é un protocollo inaffidabile, che

Dettagli

Ambienti di sviluppo integrato

Ambienti di sviluppo integrato Ambienti di sviluppo integrato Un ambiente di sviluppo integrato (IDE - Integrated Development Environment) è un ambiente software che assiste i programmatori nello sviluppo di programmi Esso è normalmente

Dettagli

Inizializzazione degli Host. BOOTP e DHCP

Inizializzazione degli Host. BOOTP e DHCP BOOTP e DHCP a.a. 2002/03 Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/~auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica 1 Inizializzazione degli Host Un

Dettagli

Il Concetto di Processo

Il Concetto di Processo Processi e Thread Il Concetto di Processo Il processo è un programma in esecuzione. È l unità di esecuzione all interno del S.O. Solitamente, l esecuzione di un processo è sequenziale (le istruzioni vengono

Dettagli

BlackBerry Java SDK. Integration Guide Version: 7.0. Guida allo sviluppo

BlackBerry Java SDK. Integration Guide Version: 7.0. Guida allo sviluppo BlackBerry Java SDK Integration Guide Version: 7.0 Guida allo sviluppo SWD-1638866-1215040530-0 Contents 1 Integrazione con le applicazioni BlackBerry Device Software... 6 Richiamo di un'applicazione BlackBerry

Dettagli

Middleware Laboratory. Dai sistemi concorrenti ai sistemi distribuiti

Middleware Laboratory. Dai sistemi concorrenti ai sistemi distribuiti Dai sistemi concorrenti ai sistemi distribuiti Problemi nei sistemi concorrenti e distribuiti I sistemi concorrenti e distribuiti hanno in comune l ovvio problema di coordinare le varie attività dei differenti

Dettagli

Le Reti Informatiche

Le Reti Informatiche Le Reti Informatiche modulo 10 Prof. Salvatore Rosta www.byteman.it s.rosta@byteman.it 1 Nomenclatura: 1 La rappresentazione di uno schema richiede una serie di abbreviazioni per i vari componenti. Seguiremo

Dettagli

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata Supponiamo sempre di avere un ponte stretto che permette il passaggio delle auto solo in un verso per volta,

Dettagli

Inter-Process Communication

Inter-Process Communication Inter-Process Communication C. Baroglio a.a. 2002-2003 1 Introduzione In Unix i processi possono essere sincronizzati utilizzando strutture dati speciali, appartenti al pacchetto IPC (inter-process communication).

Dettagli

Codici sorgenti di esempio per l'invio di email da pagine WEB per gli spazi hosting ospitati presso ITESYS SRL.

Codici sorgenti di esempio per l'invio di email da pagine WEB per gli spazi hosting ospitati presso ITESYS SRL. Data: 8 Ottobre 2013 Release: 1.0-15 Feb 2013 - Release: 2.0 - Aggiunta procedura per inviare email da Windows con php Release: 2.1-20 Mar 2013 Release: 2.2-8 Ottobre 2013 - Aggiunta procedura per inviare

Dettagli

Interazione, sincronizzazione e comunicazione tra processi

Interazione, sincronizzazione e comunicazione tra processi Interazione, sincronizzazione e comunicazione tra processi Classificazione Processi interagenti processi interagenti/indipendenti due processi sono indipendenti se l esecuzione di ognuno non è in alcun

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

Elementi di UML (7): Diagrammi dei componenti e di deployment

Elementi di UML (7): Diagrammi dei componenti e di deployment Elementi di UML (7): Diagrammi dei componenti e di deployment Università degli Studi di Bologna Facoltà di Scienze MM. FF. NN. Corso di Laurea in Scienze di Internet Anno Accademico 2004-2005 Laboratorio

Dettagli

AUL22: FactoryTalk View SE Scoprite i vantaggi chiave di una soluzione SCADA integrata

AUL22: FactoryTalk View SE Scoprite i vantaggi chiave di una soluzione SCADA integrata AUL22: FactoryTalk View SE Scoprite i vantaggi chiave di una soluzione SCADA integrata Giampiero Carboni Davide Travaglia David Board Rev 5058-CO900C Interfaccia operatore a livello di sito FactoryTalk

Dettagli

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute DNS: Domain Name System I name DNS Persone: identificatori: CF, nome, Numero di Passaporto Host e router Internet: Indirizzo IP ( bit) - usato per instradare i pacchetti nome, per es., massimotto.diiie.unisa.it

Dettagli

NetMonitor. Micro guida all uso per la versione 1.2.0 di NetMonitor

NetMonitor. Micro guida all uso per la versione 1.2.0 di NetMonitor NetMonitor Micro guida all uso per la versione 1.2.0 di NetMonitor Cos è NetMonitor? NetMonitor è un piccolo software per il monitoraggio dei dispositivi in rete. Permette di avere una panoramica sui dispositivi

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/03/07 Nota Questi lucidi sono tratti

Dettagli

MODELLO AD OGGETTI PER LE BASI DI DATI E ANALISI DI PRODOTTI COMMERCIALI. Luca Carnini. Tesina presentata per la discussione del diploma di laurea in

MODELLO AD OGGETTI PER LE BASI DI DATI E ANALISI DI PRODOTTI COMMERCIALI. Luca Carnini. Tesina presentata per la discussione del diploma di laurea in MODELLO AD OGGETTI PER LE BASI DI DATI E ANALISI DI PRODOTTI COMMERCIALI di Luca Carnini Tesina presentata per la discussione del diploma di laurea in Ingegneria informatica Politecnico di Milano sede

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Introduzione alla programmazione ad oggetti a.a. 2008/2009 Claudio De Stefano 1 La programmazione modulare Un programma può essere visto come un insieme di moduli che

Dettagli

Serduino - SERRA CON ARDUINO

Serduino - SERRA CON ARDUINO Serduino - SERRA CON ARDUINO 1 Componenti Facchini Riccardo (responsabile parte hardware) Guglielmetti Andrea (responsabile parte software) Laurenti Lorenzo (progettazione hardware) Rigolli Andrea (reparto

Dettagli

Integrazione di servizi: Enterprise Service Bus (ESB) e Business Process Execution Language (BPEL)

Integrazione di servizi: Enterprise Service Bus (ESB) e Business Process Execution Language (BPEL) Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Integrazione di servizi: Enterprise Service Bus (ESB) e Business Process Execution Language (BPEL) Corso di Sistemi Distribuiti Stefano

Dettagli

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate. Comandi filtro: sed Il nome del comando sed sta per Stream EDitor e la sua funzione è quella di permettere di editare il testo passato da un comando ad un altro in una pipeline. Ciò è molto utile perché

Dettagli

Reti di Telecomunicazione Lezione 7

Reti di Telecomunicazione Lezione 7 Reti di Telecomunicazione Lezione 7 Marco Benini Corso di Laurea in Informatica marco.benini@uninsubria.it Il protocollo Programma della lezione file transfer protocol descrizione architetturale descrizione

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Cos è un JavaBean. Java. Componenti software

Cos è un JavaBean. Java. Componenti software Java java beans e programmazione visuale G. Prencipe prencipe@di.unipi.it Cos è un JavaBean Un JavaBean (o semplicemente Bean) è un componente software riusabile Analogia con i componenti elettronici I

Dettagli

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it INTRODUZIONE, LINGUAGGIO, HANDS ON Giuseppe Cirillo g.cirillo@unina.it Il linguaggio C 1972-Dennis Ritchie 1978-Definizione 1990-ANSI C 1966 Martin Richars (MIT) Semplificando CPL usato per sviluppare

Dettagli

Ricerca sequenziale di un elemento in un vettore

Ricerca sequenziale di un elemento in un vettore Ricerca sequenziale di un elemento in un vettore La ricerca sequenziale o lineare è utilizzata per ricercare i dati in un vettore NON ordinato. L algoritmo di ricerca sequenziale utilizza quan non ha alcuna

Dettagli

Scuola Specializzazione Istruzione Superiore. Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti

Scuola Specializzazione Istruzione Superiore. Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti Scuola Specializzazione Istruzione Superiore Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti Michele Batocchi ITC Vittorio Emanuele II Perugia A.S. 2007/2008 Introduzione

Dettagli

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ Classi ed oggetti. Classi derivate, ereditarietà e polimorfismo. Template Capitoli 12, 13, 14 Luis Joyannes Aguilar. Fondamenti di Programmazione in C++. Algoritmi,

Dettagli

APPLICAZIONI SU PIU FILE

APPLICAZIONI SU PIU FILE APPLICAZIONI SU PIU FILE Serve poter sviluppare applicazioni su piú file: - alcune funzioni e alcune definizioni di dati in un file - altre funzioni e dati in file diversi Perché?? 1. Se il programma è

Dettagli

P a s q u a l e t t i V e r o n i c a

P a s q u a l e t t i V e r o n i c a PHP: OOP Pasqualetti Veronica Oggetti Possiamo pensare ad un oggetto come ad un tipo di dato più complesso e personalizzato, non esistente fra i tipi tradizionali di PHP, ma creato da noi. 2 Gli oggetti

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Introduzione ai Device Drivers in Linux. E.Mumolo, DEEI mumolo@units.it

Introduzione ai Device Drivers in Linux. E.Mumolo, DEEI mumolo@units.it Introduzione ai Device Drivers in Linux E.Mumolo, DEEI mumolo@units.it 1 Device Drivers Moduli software che gestiscono le periferiche attraverso il file system Tutte le periferiche sono viste come file

Dettagli

Sottoprogrammi: astrazione procedurale

Sottoprogrammi: astrazione procedurale Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31 Le Liste Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Le Liste 1 / 31 Cos è una Lista Una lista è una collezione di elementi omogenei che: potrebbero

Dettagli

Gestione dinamica di una pila

Gestione dinamica di una pila Gestione dinamica di una pila Una pila o stack è una lista lineare a lunghezza variabile in cui inserimenti (push) ed estrazioni (pop) vengono effettuate ad un solo estremo, detto testa (top) della pila.

Dettagli

Riferimenti ed Oggetti

Riferimenti ed Oggetti Riferimenti e oggetti Riferimenti ed Oggetti In non si possono definire variabili di tipo oggetto ma solo di tipo riferimento a oggetto. I riferimenti sono assimilabili ai tipi base. Allocazione statica

Dettagli

MIPS Instruction Set 2

MIPS Instruction Set 2 Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general

Dettagli

corso di Sistemi Distribuiti 4. IPC (Inter Process Communication) (parte 1): le forme ed i modelli della comunicazione tra processi

corso di Sistemi Distribuiti 4. IPC (Inter Process Communication) (parte 1): le forme ed i modelli della comunicazione tra processi CdL MAGISTRALE in INFORMATICA A.A. 2014-2015 corso di Sistemi Distribuiti 4. IPC (Inter Process Communication) (parte 1): le forme ed i modelli della comunicazione tra processi Prof. S.Pizzutilo Elementi

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

UML Component and Deployment diagram

UML Component and Deployment diagram UML Component and Deployment diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania I diagrammi UML Classificazione

Dettagli

Lezione n 1! Introduzione"

Lezione n 1! Introduzione Lezione n 1! Introduzione" Corso sui linguaggi del web" Fondamentali del web" Fondamentali di una gestione FTP" Nomenclatura di base del linguaggio del web" Come funziona la rete internet?" Connessione"

Dettagli

Controllare un nastro trasportatore fischertechnik con Arduino

Controllare un nastro trasportatore fischertechnik con Arduino TITOLO ESPERIENZA: Controllare un nastro trasportatore fischertechnik con Arduino PRODOTTI UTILIZZATI: OBIETTIVO: AUTORE: RINGRAZIAMENTI: Interfacciare e controllare un modello di nastro trasportatore

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C.:luxx:. PREMESSE In questa guida non verranno trattati i costrutti di flusso, le funzioni, o comunque le caratteristiche del linguaggio, che si danno come presupposte.

Dettagli

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table Universita' di Ferrara Dipartimento di Matematica e Informatica Algoritmi e Strutture Dati Rappresentazione concreta di insiemi e Hash table Copyright 2006-2015 by Claudio Salati. Lez. 9a 1 Rappresentazione

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Le Reti di Calcolatori (parte 2) Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

Generalizzazione di funzioni e di classi. Macro come funzioni generiche Alessio Bechini - Corso di - Generalizzazione di funzioni e di classi Il meccanismo di template Macro come funzioni generiche long longmax(long x, long y) { Possibile soluzione int intmax(int x, int y)

Dettagli

Le Stringhe. Un introduzione operativa. Luigi Palopoli

Le Stringhe. Un introduzione operativa. Luigi Palopoli Le Stringhe p.1/19 Le Stringhe Un introduzione operativa Luigi Palopoli ReTiS Lab - Scuola Superiore S. Anna Viale Rinaldo Piaggio 34 Pontedera - Pisa Tel. 050-883444 Email: palopoli@sssup.it URL: http://feanor.sssup.it/

Dettagli

Manuale d uso Apache OpenMeetings (Manuale Utente + Manuale Amministratore)

Manuale d uso Apache OpenMeetings (Manuale Utente + Manuale Amministratore) Manuale d uso Apache OpenMeetings (Manuale Utente + Manuale Amministratore) Autore: Matteo Veroni Email: matver87@gmail.com Sito web: matteoveroni@altervista.org Fonti consultate: http://openmeetings.apache.org/

Dettagli

Ricorsione. Corso di Fondamenti di Informatica

Ricorsione. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Ricorsione Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e

Dettagli

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

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

La ricorsione. Politecnico di Milano Sede di Cremona

La ricorsione. Politecnico di Milano Sede di Cremona La ricorsione Politecnico di Milano Sede di Cremona Gianpaolo Cugola Dipartimento di Elettronica e Informazione cugola@elet.polimi.it http://www.elet.polimi.it/~cugola Definizioni ricorsive Sono comuni

Dettagli

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio IDE = Integrated Development Environment Gerardo Pelosi 01 Ottobre 2014 Pagina 1 di 8 Dev-C++ - Installazione Potete

Dettagli

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Lezione 1 Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Definizione di utente e di programmatore L utente è qualsiasi persona che usa il computer anche se non è in grado di programmarlo

Dettagli