Progetto Java Programmazione 3

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Progetto Java Programmazione 3"

Transcript

1 Progetto Java Programmazione 3 Gioco On-Line: HeadKnock Scopo di tale progetto è di creare un gioco on-line che quindi permetta a più processi Client di interagire tra loro mediante un processo Server. Il linguaggio di programmazione scelto è: Java (versione 1.6). Studente: Colato Roberto

2 Indice Introduzione Pag. 01 Descrizione del progetto Pag. 03 Descrizione e schemi dell architettura Pag. 05 Descrizione e schemi del protocollo Pag. 07 Dettagli implementativi de client Pag. 08 Dettagli implementativi de server Pag. 09 Manuale Utente Pag. 10 Sorgenti o AppLock.java Pag. 11 o Audio.java Pag. 14 o BackgroundPanel.java Pag. 17 o Block.java Pag. 18 o ClientConfig.java Pag. 21 o Database.java Pag. 22 o Encrypter.java Pag. 25 o Game.java Pag. 26 o Instructions.java Pag. 32 o List.java Pag. 38 o Loading.java Pag. 41 o Lobby.java Pag. 42 o Login.java Pag. 49 o Matrix.java Pag. 56 o Menu.java Pag. 58 o MyTimer.java Pag. 65 o Planner.java Pag. 67 o Server.java Pag. 69 o ServerConfig.java Pag. 70 o ServerThread.java Pag. 71 o Table.java Pag. 78 o TopBar.java Pag. 81 o User.java Pag. 84 o UserSettings.java Pag. 86 Link Utili Pag. 87 2

3 Descrizione del progetto Headknock è un gioco di logica che consiste nel totalizzare il maggior punteggio entro il tempo limite, andando a completare degli schemi logici, obbiettivo principale è quello di permettere agli utenti di sfidarsi on-line, tuttavia nell applicazione sono presenti altre specifiche, come ad esempio una modalità di gioco off-line che permetterà all utente di migliorare le proprie abilità e di prendere confidenza con il gioco prima di cimentarsi in sfide on-line e di migliorare il proprio record personale, o semplicemente giocare una partita senza necessità di connettersi al server. Inoltre è presente un sistema che permette la creazione di account su cui si basa anche una classifica online consultabile direttamente dall applicazione previa autenticazione sul server con il proprio account anch esso creabile direttamente dall applicazione client. Il Server è progettato in modo tale da accettare le richieste di connessione dei Clients che saranno poi gestite singolarmente da Servet-Threads appositamente generati. Inoltre l applicazione lato Server si interfaccia con un Database MySQL in cui salve e legge informazioni utili che rispettivamente riceve ed invia ai client medianti gli specifici Server-Threads. Il Client interagisce con il Server-Thread assegnatogli mediante appositi comandi grafici, inoltre sono disponibili modalità di gioco e comandi che non necessitano di connessione al server e dunque possono essere eseguite dall utente senza essere necessariamente connessi al Server. Inoltre, sia l applicazione Client, che quella Server, sono progettate per gestire opportunamente errori ed eccezioni che potrebbero insorgere durante la connessione in modo da evitare stalli, crash e situazioni impreviste (ad esempio la disconnessione improvvisa di un client in un qualunque momento). Di seguito alcune schermate d esempio dell applicazione. 3

4 4

5 Descrizione e schemi dell architettura L'architettura del progetto prevede le seguenti fasi. Inizialmente il Client si connette al server principale. Il Server Principale (S) accetta la connessione su un nuovo socket diverso da quello di ascolto, fatto ciò crea un nuovo Thread (ST) a cui passerà il socket. Il Client, è ora pronto ad interagire con gli atri Client tramite il proprio Server Thread (ST). Di seguito due schemi che rendono meglio l idea dell architettura del progetto: 5

6 6

7 Descrizione e schemi del protocollo L'intero progetto è sviluppato utilizzando connessioni TCP poiché, si ritiene indispensabile che i dati siano trasmessi su un canale di comunicazione stabile e affidabile. Volendo dare uno schema al progetto possiamo prevede le seguenti fasi di schematizzazione: 7

8 Dettagli implementativi del Applicazione Client L applicazione Client è scritta in modo tale da permettere all utente di giocare sia in modalità off-line che in modalità on-line, inoltre nell applicazione è presente una guida che spiega i comandi e le logiche di gioco. La modalità off-line permette all utente giocare in locale e migliorare il proprio record personale. La modalità on-line necessita di una connessione al server, qualora questa non sia disponibile un messaggio ne darà notifica all utente. Una volta stabilita la connessione con il server verrà chiesto all utente di effettuare il login con il proprio account o in alternativa di crearne uno, inoltre è presente nella schermata di login un checkbox che se spuntato ricorderà username e password inserite per gli accessi successivi. Dopo che l utente si è autentificato sul server, verrà visualizzata una schermata di lobby da cui sarà possibile lanciare e giocare sfide, nonché consultare la classifica globale basata su un valore rango che varia a seconda dell abilità di gioco dell utente nelle partite online e al numero di partite giocate. Cliccando sull apposito tasto sfida nella schermata di lobby, l utente entra in modalità sfida, tale modalità resterà attiva finche non sarà creata una nuova sfida da giocare per l utente. Nelle creazione di una nuova sfida il server, previa consulto del database, associa 2 utenti (sfidanti) scelti casualmente tra quelli che hanno la modalità sfida attiva (anche gli utenti off-line possono avere la modalità sfida attiva). Per limitare il potenziale traffico inutile che alcuni utenti potrebbero intenzionalmente causare sul server lanciando una grossa quantità di sfide che poi non saranno giocate, il sistema implementa un meccanismo tale che non permette di entrare in modalità sfida finchè c è almeno una sfida in attesa di essere giocata. Schema UML Client: 8

9 Dettagli implementativi del Applicazione Server Il Server accetta le connessioni dai client che poi passa a specifici Server-Threads che gestiscono le richieste dei client ad essi connessi in un rapporto 1 a 1. L applicazione Server implementa dei meccanismi che permetto all utente di registrarsi con username univoci, autenticarsi, generare nuove sfide di gioco, nonché fornisce quando necessario i dati, che correttamente interpretati dall applicazione client, permettono l esecuzione di importanti funzioni relative alla modalità di gioco on-line, nonché la visualizzazione della schermata di lobby e della classifica. Il server gestisce opportunamente un DataBase MySQL per memorizzare informazioni relative agli utenti e alle sfide che quest ultimi intraprendono nella modalità di gioco on-line, inoltre le informazioni memorizzare permetto di stilare una classifica dei giocatori. Schema UML DataBase: Schema UML Server: 9

10 Manuale utente Client I applicazione Client è composta dalle seguenti classi: AppLock.java = Impedisce avvio multiplo dell applicazione sullo stesso dispositivo. Audio.java = Gestisce le componenti audio. BackgroundPanel.java = Consente la creazioni di pannelli con immagine come sfondo grafico. Block.java = Elemento base del campo di gioco. ClientConfig.java = Parametri di configurazione dell applicazione client. Encrypter.java = Consente di criptare stringhe. Game.java = Avvia e gestisce una partita di gioco sia on-line che off-line. Instructions.java = Contiene la guida con le istruzioni ed i comandi di gioco List.java = Usata per visualizzare la classifica di gioco in modalità on-line. Loading.java = Rappresenta una Pagina di caricamento (Prettamente Grafica) Lobby.java = Pannello con informazioni e comandi utili per la modalità on-line. Login.java = Schermata che permette all utente di registrarsi e o autenticarsi. Matrix.java = Oggetto composto da blocco utilizzato per creare il campo gi gioco. Menu.java = Interfaccia grafica con comandi iniziali dell applicazione client. MyTimer.java = Rappresentazione di un Timer, sia graficamente che funzionalmente. Planner.java = Crea lo schema grafico risolutivo per la specifica matrice di gioco. Table.java = Usata per ottenere una visualizzazione schematica delle informazioni. TopBar.java = Barra grafica con comandi di gestione Audio dell applicazione. User.java = Usata per facilitare la comunicazione tra client e server. UserSettings.java = Contiene le preferenze dell utente (Audio on/off, username, ecc). Server I applicazione Server è composta dalle seguenti classi: Database.java Encrypter.java Server.java ServerConfig.java ServerThread.java User.java = Classe che facilità l utilizzo del DataBase grazie a diversi metodi. = Consente di criptare stringhe. = Avvia l applicazione server, che si mette in attesa di nuove connessioni. = Parametri di configurazione dell applicazione server. = Gestisce la connessione con un client, servendone le richieste. = Usata per facilitare la comunicazione tra client e server. L applicazione è stata scritta utilizzando JDK 1.6, inoltre utilizza diverse risorse grafiche e multimediali, al fine di rendere più avvincente l esperienza di gioco. Di seguito i sorgenti che compongono l applicazione in ordine alfabetico, tuttavia è possibile fare rifermento all indice per una più rapida ricerca. 10

11 AppLock.java package myhawk.games; import java.io.file; import java.io.fileoutputstream; import java.nio.channels.filechannel; import java.nio.channels.filelock; import java.util.logging.level; import java.util.logging.logger; /*Classe con logica Singleton che genere un file lock usato per limitare l'esecuzione del blocco di codice che ne fa uso. *in tal modo non sarà possibile avviare contemporaneamente più blocchi di codice alla volta su uno stesso computer*/ public class AppLock { private static AppLock instance; //istanza di AppLock private File lock_file = null; //File di lock private FileLock lock = null; //lock private FileChannel lock_channel = null; //canale di lock private FileOutputStream lock_stream = null; //Stream di lock /*Costruttore PRIVATO che istanzia un nuovo oggetto AppLock*/ private AppLock() { /*Costruttore PRIVATO che istanzia un nuovo oggetto AppLock basato su una specifica key data in ingresso*/ private AppLock(String key) throws Exception { String tmp_dir = System.getProperty("java.io.tmpdir"); //ottiene path cartella temp del sistema if (!tmp_dir.endswith(system.getproperty("file.separator"))) { tmp_dir += System.getProperty("file.separator"); try { //Genero una stringa md5 che sarà usata come nome del file di lock Encrypter md = new Encrypter(ClientConfig.ENCRYPTION_MODE); String hash_text = md.encrypt(""); lock_file = new File(tmp_dir + hash_text + ".app_lock"); //creo il file di lock catch (Exception ex) { System.out.println("AppLock.AppLock() file fail"); // Se la creazione del file di lock md5 non è andata a buon fine provo a creare un file di lock a partire dalla key if (lock_file == null) { lock_file = new File(tmp_dir + key + ".app_lock"); lock_stream = new FileOutputStream(lock_file); String f_content = "Java AppLock Object\r\nLocked by key: " + key + "\r\n"; lock_stream.write(f_content.getbytes()); lock_channel = lock_stream.getchannel(); //avvio il lock sul canale lock = lock_channel.trylock(); 11

12 if (lock == null) { //se non è stato possibile creare il file di lock lancio l'eccezione throw new Exception("Can't create Lock"); /*Modulo PRIVATO che rilascia il lock in modo da permettere l'esecuzione di nuove applicazioni che lo richiedono */ private void release() throws Throwable { if (lock.isvalid()) { lock.release(); if (lock_stream!= null) { lock_stream.close(); if (lock_channel.isopen()) { lock_channel.close(); if (lock_file.exists()) { //Modulo sempre eseguito alla fine del codice per di rilasciare il lock protected void finalize() throws Throwable { this.release(); super.finalize(); /* Metodo che imposta l'appication lock, può essere chiamato 1 volta per applicazione, tutte le chiamate successive vengono ignorate*/ public static boolean setlock(string key) { if (instance!= null) { return true; try { instance = new AppLock(key); catch (Exception ex) { instance = null; Logger.getLogger(AppLock.class.getName()).log(Level.SEVERE, "Fail to set AppLoc", ex); return false; //Thread eseguito prima dello Shut Down della JVM Runtime.getRuntime().addShutdownHook(new Thread() public void run() { AppLock.releaseLock(); ); return true; 12

13 /*Modulo che rilascia il lock che non potrà più essere utilizzato in questa applicazione grazie alla logica Singleton*/ public static void releaselock() { try { if (instance == null) { throw new NoSuchFieldException("INSTATCE IS NULL"); instance.release(); catch (Throwable ex) { Logger.getLogger(AppLock.class.getName()).log(Level.SEVERE, "Fail to release", ex); 13

14 Audio.java package myhawk.games; import java.io.*; import java.net.url; import javax.sound.sampled.audiosystem; import javax.sound.sampled.clip; import javax.sound.sampled.lineevent; import javax.sound.sampled.linelistener; import javax.sound.sampled.lineunavailableexception; import javax.sound.sampled.unsupportedaudiofileexception; /*Classe che con una logica Singleton genere un oggetto capace di gestire l'audio in altri oggetti*/ public class Audio{ private Clip clip = null, clipbg = null; //Oggetto clip dedicato agli effetti sonori e oggetto clip dedicato alla musica di sottofondo private static Audio instance = null; //Usato per creare l'istanza necessaria alla logica Singleton private UserSettings user_settings = null; //Contiene le preferenze dell'utente (audio si/no) private URL url = null, urlbg = null; //conterrà il path dei file audio che saranno avviati grazie agli oggetti clip private boolean sound_status = false, music_status = false; //status effetti sonori e background music private int bg_music_index = 0; //indice della musica di sottofondo corrente private String[] bg_music = new String[] {"/audio/bg.wav","/audio/game.wav"; //musiche di sottofondo disponibili private Audio(){ //Costruttore PRIVATO che carica l'istanza dell'oggetto UserSettings da cui ricava le preferenze utente user_settings = UserSettings.getInstance(); sound_status = user_settings.issound(); music_status = user_settings.ismusic(); public static Audio getinstance(){ //Singleton, restituisce l'istanza dell'oggetto Audio e se non esiste ne crea uno if(instance == null){ instance = new Audio(); return instance; public void startsound(string path){ //Modulo che avvia un file audio ripetuto un unica volta instance.url = instance.getclass().getresource(path); try { instance.clip = AudioSystem.getClip(); catch (LineUnavailableException e) { e.printstacktrace(); try { instance.clip.open(audiosystem.getaudioinputstream(url)); catch (LineUnavailableException e) { e.printstacktrace(); 14

15 catch (UnsupportedAudioFileException e) { e.printstacktrace(); catch (IOException e) { e.printstacktrace(); instance.clip.addlinelistener(new LineListener(){ public void update(lineevent event) { if (event.gettype() == LineEvent.Type.STOP) { event.getline().close(); ); instance.clip.start(); //Listner che chiude il clip audio appena quest'ultimo termina public synchronized void startbgmusic(){ //Modulo che avvia un file audio ripetuto fino e alla ricezione di esplicita richiesta di stop instance.urlbg = instance.getclass().getresource(bg_music[bg_music_index]); try { instance.clipbg = AudioSystem.getClip(); catch (LineUnavailableException e) { e.printstacktrace(); try { instance.clipbg.open(audiosystem.getaudioinputstream(instance.urlbg)); catch (LineUnavailableException e) { e.printstacktrace(); catch (UnsupportedAudioFileException e) { e.printstacktrace(); catch (IOException e) { e.printstacktrace(); instance.clipbg.loop(-1); public void stopbgmusic(){ //modulo che stoppa e chiude il clipbg (background music) if(instance.clipbg.isrunning()){ instance.clipbg.stop(); instance.clipbg.close(); public void stopsound(){ //modulo che stoppa e chiude il clip (sound effects) if(instance.clip.isrunning()){ instance.clip.stop(); instance.clip.close(); 15

16 public boolean ismusicenabled() { return music_status; //ritona lo stato della musica di sottofondo public synchronized void setmusicstatus(boolean music_status) { //imposta lo stato della musica di sottofondo this.music_status = music_status; user_settings.setmusic(music_status); public boolean issoundenabled() { //ritorna lo stato degli effetti sonori return sound_status; public synchronized void setsoundstatus(boolean sound_status) { //imposta lo stato degli effetti sonori this.sound_status = sound_status; user_settings.setsound(sound_status); public void setbgmusicindex(int bg_music_index) { this.bg_music_index = bg_music_index; //imposta l'indice della BgMusic da selezionare 16

17 BackgroundPanel.java package myhawk.games; import java.awt.graphics; import java.awt.image; import javax.swing.jpanel; /*Classe che crea Oggetti ti tipo JPanel con metodo paint sovrascritto *in modo da permettere l'inserimento di immagini di background al pannello*/ public class BackgroundPanel extends JPanel { private static final long serialversionuid = L; private Image image; public BackgroundPanel(Image image){ this.image = //metodo che permette di disegnare uno sfondo al pannello che si ridimensiona con esso protected void paintcomponent(graphics g){ super.paintcomponent(g); //invoca metodo paintcomponent della classe JPanel if (image!= null) g.drawimage(image, 0,0,this.getWidth(),this.getHeight(),this); 17

18 Block.java package myhawk.games; import java.awt.color; import java.awt.cursor; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import javax.swing.borderfactory; import javax.swing.imageicon; import javax.swing.jbutton; /*Classe Blocco che rappresenta l'elemento base del campo di gioco*/ public class Block implements MouseListener{ private JButton block; private Boolean status; private Audio audio = Audio.getInstance(); //elemento grafico del blocco che permette l'interazione dell'utente //status del blocco //oggetto Audio che gestisce l'audio del gioco public Block () { //Costruttore block = new JButton(new ImageIcon(getClass().getResource("/img/emptyblock.png"))); block.setname("empty BLOCK"); //Assegno il nome EMPTY BLOCK che sarà poi utile per la gestione del medesimo block.addmouselistener(this); //Uso di MouseListener per poter gestire sia il click destro che il sinistro del mouse block.setcontentareafilled(false); block.setcursor(cursor.getpredefinedcursor(cursor.hand_cursor)); block.setborder(borderfactory.creatematteborder(1, 1, 1, 1, Color.black)); /*Modulo che cambia lo stato, il nome e l'aspetto del blocco in base alle circostanze e al nome assegnato al bottone*/ public void changebuttonstatus(int e){ if(block.getname().equals("empty BLOCK")){ if(e==mouseevent.button1){ //click tasto sinistro mouse block.seticon(new ImageIcon(getClass().getResource("/img/fullblock_focused.png"))); block.setname("full BLOCK"); status = true; else if(e==mouseevent.button3){ //click tasto destro mouse block.seticon(new ImageIcon(getClass().getResource("/img/nofullblock_focused.png"))); block.setname("nofull BLOCK"); status = false; else{ block.seticon(new ImageIcon(getClass().getResource("/img/emptyblock_focused.png"))); block.setname("empty BLOCK"); status = null; 18

19 public void setsolved(){ //Modulo che imposta l'emento block come elemento risolto cambiando nome del bottone e grafica if(block.getname().equals("full BLOCK")){ block.seticon(new ImageIcon(getClass().getResource("/img/solvedfullblock.png"))); else if(block.getname().equals("nofull BLOCK")){ block.seticon(new ImageIcon(getClass().getResource("/img/solvednofullblock.png"))); block.setname("solved BLOCK"); public void resetstatus(){ //reset stato del blocco alle condizioni originali block.seticon(new ImageIcon(getClass().getResource("/img/emptyblock.png"))); block.setname("empty BLOCK"); status = null; public void setstatus(boolean status){ this.status=status; //permette di cambiare lo status del blocco public Boolean getstatus(){ return status; public JButton getbutton(){ return block; //restituisce lo stato del blocco //restituisce l'elemento di tipo JButton del public void mouseclicked(mouseevent arg0) //Modulo che cambia la grafica del Block al passaggio del mouse public void mouseentered(mouseevent e) { if(!block.getname().equals("solved BLOCK")){ if(block.getname().equals("empty BLOCK")){ block.seticon(new ImageIcon(getClass().getResource("/img/emptyblock_focused.png"))); else if(block.getname().equals("full BLOCK")){ block.seticon(new ImageIcon(getClass().getResource("/img/fullblock_focused.png"))); else if(block.getname().equals("nofull BLOCK")){ block.seticon(new ImageIcon(getClass().getResource("/img/nofullblock_focused.png"))); 19

20 @Override //Modulo che cambia la grafica del Block al passaggio del mouse public void mouseexited(mouseevent arg0) { if(!block.getname().equals("solved BLOCK")){ if(block.getname().equals("empty BLOCK")){ block.seticon(new ImageIcon(getClass().getResource("/img/emptyblock.png"))); else if(block.getname().equals("full BLOCK")){ block.seticon(new ImageIcon(getClass().getResource("/img/fullblock.png"))); else if(block.getname().equals("nofull BLOCK")){ block.seticon(new //mouse listener che invoca il modulo che cambia lo status del bottone qualora non fosse già risolto public void mousepressed(mouseevent e) { if(!block.getname().equals("solved BLOCK")){ this.changebuttonstatus(e.getbutton()); if(audio.issoundenabled()){ audio.startsound("/audio/block_change.wav"); else if(audio.issoundenabled()){ public void mousereleased(mouseevent arg0) { 20

21 ClientConfig.java package myhawk.games; /*Classe che contiene variabili che saranno usate globalmente negli oggetti che costituiscono l'applicazione Client*/ public class ClientConfig { public static final String SERVER_ADRESS = "xxx.xxx.xxx.xxx"; public static final int SERVER_PORT = xxxx; public static final int GAME_TIME = xxx; public static final int MARTIX_ROWS = x; public static final int MATRIX_COLUMNS = x; public static final String ENCRYPTION_MODE = "xxx"; public static final int LOGIN_ATTEMPS = x; //Indirizzo del server //Porta su cui il Server ha una ServerSocket aperta in ascolto //Durata in secondi di una partita //Numero di righe di cui è composta la matrice di gioco //Numero di colonne di cui è composta la matrice di gioco //Algoritmo di Crittografia scelto nel Client //Tentativi di Login a disposizione dell'utente 21

22 Database.java package myhawk.games; import java.sql.*; import java.util.arraylist; /*Classe usata per gestione del DB. Gestisce la connessione col Database e Fornisce i metodi per l'esecuzione delle query*/ public class Database { private String nomedb; // Nome del Database a cui connettersi private String nomeutente; // Nome utente utilizzato per la connessione al Database private String pwdutente; // Password usata per la connessione al Database private String errore; // Raccoglie informazioni riguardo l'ultima eccezione sollevata private Connection db; // La connessione col Database private boolean connesso; // Flag che indica se la connessione è attiva o meno public Database(String nomedb) { this(nomedb, "", ""); public Database(String nomedb, String nomeutente, String pwdutente) { this.nomedb = nomedb; this.nomeutente = nomeutente; this.pwdutente = pwdutente; connesso = false; errore = ""; public boolean connetti() { // Apre la connessione con il Database connesso = false; try { // Carico il driver JDBC per la connessione con il database MySQL Class.forName("com.mysql.jdbc.Driver"); if (!nomedb.equals("")) { // Controllo che il nome del Database non sia null if (nomeutente.equals("")) { // Controllo se il nome utente va usato o meno per la connessione // La connessione non richiede nome utente e password db = DriverManager.getConnection(jdbc:"+ ServerConfig.DATABASE_MS +"://"+ ServerConfig.DATABASE_HOST +"/" + nomedb); else{ if (pwdutente.equals("")) { // La connessione richiede nome utente, controllo se necessita anche della password // La connessione non necessita di password db = DriverManager.getConnection("jdbc:"+ ServerConfig.DATABASE_MS +"://"+ ServerConfig.DATABASE_HOST +"/" + nomedb + "?user=" + nomeutente); else{ // La connessione necessita della password db = DriverManager.getConnection("jdbc:"+ ServerConfig.DATABASE_MS +"://"+ ServerConfig.DATABASE_HOST + "/" + nomedb + "?user=" + nomeutente + "&password=" + pwdutente); connesso = true; // La connessione è avvenuta con successo 22

23 else{ System.out.println("Manca il nome del database!!"); System.out.println("Scrivere il nome del database da utilizzare all'interno del file \"config.xml\""); System.exit(0); catch (Exception e) { errore = e.getmessage(); e.printstacktrace(); if (!connesso) { System.out.println("Errore durante la connessione."); System.out.println( this.geterrore() ); System.exit(0); return connesso; /*Esegue una query di selezione dati sul Database * query: una stringa che rappresenta un'istruzione SQL di tipo SELECT da eseguire * colonne: il numero di colonne di cui sarà composta la tupla del risultato * ritorna un ArrayList contenente tutte le tuple del "rawtypes", "unchecked" ) public synchronized ArrayList eseguiquery(string query) { ArrayList v = null; String [] record; int colonne = 0; try { Statement stmt = db.createstatement(); // Creo lo Statement per l'esecuzione della query ResultSet rs = stmt.executequery(query); v = new ArrayList(); ResultSetMetaData rsmd = rs.getmetadata(); // Ottengo il ResultSet dell'esecuzione della query colonne = rsmd.getcolumncount(); while(rs.next()) { // Creo il vettore risultato scorrendo tutto il ResultSet record = new String[colonne]; for (int i=0; i<colonne; i++) record[i] = rs.getstring(i+1); v.add( (String[]) record.clone() ); rs.close(); // Chiudo il ResultSet stmt.close(); // Chiudo lo Statement catch (Exception e) { e.printstacktrace(); errore = e.getmessage(); try { if(db.isclosed()){ System.exit(1); //quando crasha il DB 23

24 catch (SQLException e1) { e1.printstacktrace(); return v; /*Esegue una query di aggiornamento sul Database * query: una stringa che rappresenta un'istuzione SQL di tipo UPDATE da eseguire * ritorna TRUE se l'esecuzione è andata a buon fine, FALSE se c'è stata public synchronized boolean eseguiaggiornamento(string query) { int numero = 0; boolean risultato = false; try { Statement stmt = db.createstatement(); numero = stmt.executeupdate(query); risultato = true; stmt.close(); catch (Exception e) { e.printstacktrace(); errore = e.getmessage(); risultato = false; try { if(db.isclosed()){ System.exit(1); catch (SQLException e1) { e1.printstacktrace(); return risultato; //quando crasha il DB // Chiude la connessione con il Database public void disconnetti() { try { db.close(); connesso = false; catch (Exception e) { e.printstacktrace(); public boolean isconnesso() { return connesso; // Ritorna TRUE se la connessione con il Database è attiva public String geterrore() { return errore; // Ritorna il messaggio d'errore dell'ultima eccezione sollevata 24

25 Encrypter.java package myhawk.games; import java.math.biginteger; import java.security.messagedigest; import java.security.nosuchalgorithmexception; /*Classe usata per creare oggetti Encrypter capaci di criptare stringhe in vari formati crittografici*/ public class Encrypter{ private MessageDigest mdenc = null; //oggetto di tipo MessageDigest utilizzato per predisporre l'algoritmo di crypt //costruttore che prende in ingresso la stringa contenente il nome dell'algoritmo crittografico che si vuole utilizzare public Encrypter(String algorithm){ try { mdenc = MessageDigest.getInstance(algorithm); //assegno a mdenc l'algoritmo scelto catch (NoSuchAlgorithmException e) { e.printstacktrace(); //modulo che restituisce crittografata la stringa che riceve in ingresso, //criptandola in base all'algoritmo con cui è stato inizializzato mdenc public String encrypt(string word){ mdenc.update(word.getbytes(), 0, word.length()); return new BigInteger(1, mdenc.digest()).tostring(16); // Encrypted Word String 25

26 Game.java package myhawk.games; import java.awt.dimension; import java.awt.gridbaglayout; import java.awt.gridlayout; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import javax.swing.borderfactory; import javax.swing.boxlayout; import javax.swing.imageicon; import javax.swing.jbutton; import javax.swing.jlabel; import javax.swing.jpanel; /*Classe che utilizza tutti gli oggetti utili per generare e gestire una partita*/ public class Game extends JPanel implements MouseListener{ private static final long serialversionuid = L; private Matrix user_matrix, solution_matrix; private Planner planner; private int n, m, solved_rows=0, solved_columns=0, user_score=0, level=1, key; private MyTimer gametimer; private JPanel game_panel; private Audio audio = Audio.getInstance(); private boolean game_over = false; private Loading loading; //matrice dell'utente e matrice con la soluzione //piano di risoluzione della matrice utente //Timer che scandisce il tempo di gioco //Pannello di gioco //Audio usato per gestire l'audio dell'oggetto Game //boolean usato per determinare la fine della partita //Oggetto Loading usato per mostrare pagina di caricamento public Game(int n, int m){ //Creo ed Avvio Loading, per mostrate una pagina di caricamento in attesa che Game sia pronto loading = new Loading("Loading...",new ImageIcon(getClass().getResource("/img/ajax-loader.gif"))); loading.run(this); this.n=n; this.m=m; this.setlayout(new GridBagLayout()); this.setopaque(false); this.paint(); 26

27 private void paint(){ //Modulo invocato dal Costruttore di Game per Disegnare ed Inizializzare i vari elementi che lo compongono int i=0, j=0; game_panel = new JPanel(); game_panel.setlayout(new BoxLayout(game_Panel,BoxLayout.Y_AXIS)); game_panel.setopaque(false); //pannello che conterra elementi campo di gioco BackgroundPanel playground = new BackgroundPanel(new ImageIcon(getClass().getResource("/img/bggame.jpg")).getImage()); playground.setlayout(new GridLayout(n+1,m+1)); playground.setpreferredsize(new Dimension((m+1)*70,(n+1)*70)); playground.setborder(borderfactory.createemptyborder(5, 5, 5, 5)); user_matrix = new Matrix(n,m); solution_matrix = new Matrix(n,m); planner = new Planner(solution_Matrix.getRowsCount(),solution_Matrix.getColumnsCount()); //Sequanza di cicli For che costruiscono il campo da gioco su cui si svolgerà la partita playground.add(new JLabel(new ImageIcon(getClass().getResource("/img/space.png")))); //blocco vacante per allineamento grafico for(i=0; i<n; i++){ for(j=0; j<m; j++){ user_matrix.getelement(i, j).getbutton().addmouselistener(this); for(i=0;i<m;i++){ playground.add(planner.getplan()[i+n]); for(i=0; i<n; i++){ playground.add(planner.getplan()[i]); for(j=0; j<m; j++){ playground.add(user_matrix.getelement(i,j).getbutton()); gametimer = new MyTimer(); //Creo un istanza di oggetto MyTimer usata per gestire il tempo in Game game_panel.add(gametimer); //inserisco il Timer grafico al Pannello di gioco game_panel.add(playground); //inserisco il campo di gioco grafico al Pannello di gioco 27

JDBC versione base. Le classi/interfacce principali di JDBC

JDBC versione base. Le classi/interfacce principali di JDBC JDBC versione base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte uno dei pregi è la completa indipendenza del codice

Dettagli

Introduzione JDBC interfaccia java.sql driver caricare i driver

Introduzione JDBC interfaccia java.sql driver caricare i driver J D B C DISPENSE Introduzione JDBC (Java Database Connectivity) è un interfaccia completamente Java utilizzata per eseguire istruzioni SQL sui database. L'API JDBC si trova nel pacchetto java.sql; contiene

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

Non si deve fare ALCUN riferimento alla parte specifica di JDBC.

Non si deve fare ALCUN riferimento alla parte specifica di JDBC. Un applicazione per la quale sia fondamentale l indipendenza dal Database può essere scritta in Java usando le specifiche. (Package java.sql) Non devono essere usate chiamate specifiche del database: Si

Dettagli

Alessandro De Luca. Lezione, 13 maggio 2015

Alessandro De Luca. Lezione, 13 maggio 2015 Basi Basi di di dati dati ee sistemi sistemi informativi informativi II mod.laboratorio mod.laboratorio Alessandro De Luca Università degli Studi di Napoli Federico II Lezione, Introduzione a Java Swing

Dettagli

Laboratorio di reti II: Gestione di database lato server

Laboratorio di reti II: Gestione di database lato server Laboratorio di reti II: Gestione di database lato server Stefano Brocchi brocchi@dsi.unifi.it 23 marzo, 2009 Stefano Brocchi Laboratorio di reti II: Database 23 marzo, 2009 1 / 32 Uso di database lato

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

JDBC. Dispense per il corso di Ingegneria del Web

JDBC. Dispense per il corso di Ingegneria del Web JDBC Dispense per il corso di Ingegneria del Web Revisione 05/11 Giuseppe Della Penna (giuseppe.dellapenna@di.univaq.it) Dipartimento di Informatica Università degli studi dell'aquila Java Database Connectivity:

Dettagli

JDBC di base. Le classi/interfacce principali di JDBC

JDBC di base. Le classi/interfacce principali di JDBC JDBC di base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte completa indipendenza del codice dal tipo di database o di

Dettagli

JDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC

JDBC: Introduzione. Java Database Connectivity (JDBC): parte 1. Schema dei legami tra le classi principali. Principali classi/interfacce di JDBC JDBC: Introduzione Java Database Connectivity (JDBC): parte 1 Gianluca Moro DEIS - Università di Bologna gmoro@deis.unibo.it Java Database Connectivity è il package Java per l accesso a database relazionali

Dettagli

Esercitazione su JDBC

Esercitazione su JDBC Esercitazione su JDBC Basi di Dati L Ingegneria dei Processi Gestionali (Ilaria Bartolini - Roberto Cabras) come usare SQL (1) Le istruzioni SQL possono essere eseguite interattivamente Ese JDBC 2 come

Dettagli

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE La Gestione degli Eventi Ogni oggetto grafico è predisposto ad essere sollecitato in qualche modo dall utente (per esempio un pulsante può essere premuto).

Dettagli

Gestione di eventi ed interfacce utente grafiche

Gestione di eventi ed interfacce utente grafiche Gestione di eventi ed interfacce utente grafiche Eventi Ogni volta che l utente esegue un azione un clic del mouse la pressione di un tasto sulla tastiera la modifica di una finestra la selezione di un

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Autore: Prof. Agostino Sorbara ITIS M. M. Milano Polistena (RC) In questa lezione introduciamo alcuni strumenti che Java rende disponibili per la creazione di interfacce utente a manipolazione diretta, dette anche WYSISYG (what you see is what you get), con un elevato

Dettagli

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata. Chat Si ha un server in ascolto sulla porta 4444 Quando un client richiede la connessione, il server risponde con: Connessione accettata. Nome: Il client deve rispondere con lo user name A questo punto

Dettagli

Eventi di azione. // con interfaccia per eventi di azione

Eventi di azione. // con interfaccia per eventi di azione Eventi di azione (Interfaces ActionListener, Classes ActionEvent) Sono generati quando si premono bottoni, si selezionano voci di menù, si preme invio mentre si scrive in un campo di testo. In awt sono

Dettagli

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008 Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008 Avvertenze: e severamente vietato consultare libri e appunti; chiunque verrà trovato in possesso di

Dettagli

20 - Input/Output su File

20 - Input/Output su File 20 - Input/Output su File Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE

UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE IDROID 86 LAB pagg 12-13 23-04-2007 14:57 Pagina 12 I-D01 LAB UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE PROGRAMMAZIONE Alcuni comportamenti predefiniti attivabili su I-Droid01 sono facilmente riproducibili

Dettagli

L interfaccia grafica con Java

L interfaccia grafica con Java L interfaccia grafica con Java 1/24 L interfaccia utente serve per la comunicazione tra utente e programma Distinguiamo le interfacce tra quelle a caratteri e quelle grafiche Le GUI (Graphical user interface)

Dettagli

Basi di Dati Esercitazione JDBC. Giugno 2007

Basi di Dati Esercitazione JDBC. Giugno 2007 Basi di Dati Esercitazione JDBC Giugno 2007 Esercizi Considerando il seguente schema: Fornitori (CodiceFornitore, Nome, Indirizzo, Citta) Prodotti (CodiceProdotto, Tipo, Marca, Modello) Catalogo (CodiceFornitore,

Dettagli

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa.

Quando si sa chiaramente come si deve comportare l applicazione si può analizzare una possibile soluzione applicativa. Introduzione alla tecnologia JMX 1 Viene analizzata l architettura sottostante le Java Managment Extensions (JMX) mostrandone un utilizzo applicativo e analizzando altri possibili scenari d uso di Ivan

Dettagli

PROVA FINALE Ingegneria del software

PROVA FINALE Ingegneria del software PROVA FINALE Ingegneria del software Ing. Jody Marca jody.marca@polimi.it Laboratorio N 4 Cos è JDBC 2 JDBC significa Java Database Connectivity Standard definito da Sun MicroSystems per connettere programmi

Dettagli

PROGETTO - Ingegneria del Software. Università degli Studi di Milano Polo di Crema. Corso di laurea in Scienze Matematiche, Fisiche e Naturali

PROGETTO - Ingegneria del Software. Università degli Studi di Milano Polo di Crema. Corso di laurea in Scienze Matematiche, Fisiche e Naturali Università degli Studi di Milano Polo di Crema Corso di laurea in Scienze Matematiche, Fisiche e Naturali INFORMATICA Corso di Ingegneria del Software progetto IL SISTEMA CALENDAR Presentato al dott. Paolo

Dettagli

Sviluppo di Interfacce Grafiche in Java

Sviluppo di Interfacce Grafiche in Java Sviluppo di Interfacce Grafiche in Java Massimiliano de Leoni (con la supervisione del docente Massimo Mecella) Università di Roma La Sapienza - Sede di Latina Corso di Progettazione del Software A.A.

Dettagli

JDBC. A. Bechini 2004. Accesso a DataD con Java

JDBC. A. Bechini 2004. Accesso a DataD con Java JDBC Accesso a DataD atabase ase con Java Utilizzo di DB da applicazioni esterne Un DB contiene e gestisce dati, importanti per varie operazioni supportate da applicazioni software Come può un applicazione

Dettagli

Introduzione. 8- Programmazione di una base di dati attraverso JDBC ESEMPIO

Introduzione. 8- Programmazione di una base di dati attraverso JDBC ESEMPIO 8- Programmazione di una base di dati attraverso JDBC Introduzione ai differenti approcci - JDBC: Architettura e Programmazione Introduzione Nella pratica gli utenti finali accedono al contenuto di una

Dettagli

Raffaella Brighi, a.a. 2005/06. Eventi e listener. Corso di Laboratorio II. A.A. 2005-06

Raffaella Brighi, a.a. 2005/06. Eventi e listener. Corso di Laboratorio II. A.A. 2005-06 Raffaella Brighi, a.a. 2005/06 Eventi e listener Corso di Laboratorio II. A.A. 2005-06 Eventi e listener Un evento è un oggetto che rappresenta il verificarsi di un azione dell utente o del sistema(es

Dettagli

Caricamento della classe driver. Apertura della connessione. DriverManager.getConnection() Creazione di uno statement

Caricamento della classe driver. Apertura della connessione. DriverManager.getConnection() Creazione di uno statement JDBC Programmazione in Ambienti Distribuiti V 1.4 Marco Torchiano 2006 Uso di JDBC Caricamento della classe driver Class.forName() Apertura della connessione DriverManager.getConnection() Creazione di

Dettagli

Interazioni col mondo: eventi

Interazioni col mondo: eventi Interazioni col mondo: eventi Le interazioni di una GUI con il mondo esterno sono segnalate tramite eventi: click del mouse, inserimento di testo, selezione/attivazione... Gli eventi che memorizzano queste

Dettagli

interfacce ed eventi intercettare il mouse ed altri eventi

interfacce ed eventi intercettare il mouse ed altri eventi interfacce ed eventi intercettare il mouse ed altri eventi interfacce: premessa il termine "interfaccia" occorre in Java con due significati, collegati ma distinti 1. interface, parola chiave di Java e

Dettagli

Esercitazione sui Design Pattern

Esercitazione sui Design Pattern Esercitazione sui Design Pattern Pattern Creazionali Singleton Permette la creazione di una sola istanza della classe all interno dell applicazione Fornisce un metodo con cui ottenere l istanza Il costruttore

Dettagli

MySQL Server e Netbeans

MySQL Server e Netbeans Progettazione Applicazioni Web 09 MySQL Server e Netbeans Sommario INSTALLAZIONE DI MYSQL INSTALLAZIONE SU UN PC DI CUI SI HANNO I DIRITTI DI AMMINISTRATORE. INSTALLAZIONE SUI COMPUTER DALL AULA 5T. AVVIO

Dettagli

Manuale Progetto Placement

Manuale Progetto Placement Manuale Progetto Placement V. 5 del 20/06/2013 FUNZIONI PRINCIPALI: Fornire uno strumento per la gestione centralizzata di stage, alternanze e placement. Costruire un database contenente i curriculum degli

Dettagli

Scope e visibilità per classi

Scope e visibilità per classi Scope e visibilità per classi Packages Classi interne nelle loro diverse forme Interne / statiche / locali Utilizzo congiunto con interfacce Implementazione di iteratori Gestione di eventi Packages Package:

Dettagli

Activation In sintesi: è inutile avere attivi degli oggetti se non vengono utilizzati

Activation In sintesi: è inutile avere attivi degli oggetti se non vengono utilizzati Activation In generale i Sistemi ad oggetti distribuiti sono progettati per lavorare con oggetti persistenti. Dato che questi sistemi saranno composti da migliaia (forse milioni) di tali oggetti, sarebbe

Dettagli

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

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server Versione 30.5.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/: applicazioni 1 La logica dei socket Abbiamo visto che un applicazione client si connette

Dettagli

Laboratorio di Sistemi Autenticazione utente mediante MySQL Jsp [Java]

Laboratorio di Sistemi Autenticazione utente mediante MySQL Jsp [Java] Per la comprensione del presente articolo, occorre aver assimilato i concetti esposti nell'articolo Prototipo autenticazione utente (file autenticazione_2.pdf). (Tratto da Wikipedia, l'enciclopedia libera)

Dettagli

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria

Dettagli

Gestione degli eventi in Java

Gestione degli eventi in Java Gestione degli eventi in Java package java.awt.event.* Il modello degli eventi I componenti dell awt generano eventi in seguito alle azioni dell utente movimento del mouse click pressione di un tasto etc.

Dettagli

Thread e Concorrenza in Java Swing

Thread e Concorrenza in Java Swing Thread e Concorrenza in Java Swing Esercitazioni di Progettazione del Software A.A. 2013 2014 Alessandro Russo Sapienza Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Dettagli

WGDESIGNER Manuale Utente

WGDESIGNER Manuale Utente WGDESIGNER Manuale Utente Pagina 1 SOMMARIO 1 Introduzione... 3 1.1 Requisiti hardware e software... 3 2 Configurazione... 3 3 Installazione... 4 3.1 Da Webgate Setup Manager... 4 3.2 Da pacchetto autoestraente...

Dettagli

L interfaccia grafica in Java

L interfaccia grafica in Java L interfaccia grafica in Java Java possiede due package per la creazione di interfacce grafiche java.awt javax.swing AWT (Abstract Widget Toolkit) presente già in Java 1.0, migliorato in Java 1.1. Invariato

Dettagli

LPR 2005/ 2006 Lezione n.9. Elementi di grafica per lo svolgimento del progetto Double Buffering Caricamento delle immagini Gestione degli eventi

LPR 2005/ 2006 Lezione n.9. Elementi di grafica per lo svolgimento del progetto Double Buffering Caricamento delle immagini Gestione degli eventi LPR 2005/ 2006 Lezione n.9 Elementi di grafica per lo svolgimento del progetto Double Buffering Caricamento delle immagini Gestione degli eventi JAVA 2D PROGRAMMING Schermo : Matrice rettangolare composta

Dettagli

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2)

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2) Gestione di errori e situazioni eccezionali Gestione delle eccezioni Una procedura (utente o di libreria) deve poter segnalare l impossibilità di produrre un risultato significativo o la propria terminazione

Dettagli

COGNOME.NOME. Matricola

COGNOME.NOME. Matricola Esame di PROGRAMMAZIONE ORIENTATA AGLI OGGETTI Appello del 4.9.2013 COGNOME.NOME. Matricola Tre classi, denominate Anemone, Fiordaliso e Viola devono assicurare la visualizzazione di un fiore stilizzato

Dettagli

Web Inserimento Rapporti Manuale amministratore versione 3.2.0

Web Inserimento Rapporti Manuale amministratore versione 3.2.0 Web Inserimento Rapporti Manuale amministratore versione 3.2.0 Premessa Indice 1. Premessa... 4 1.1. Descrizione del documento... 4 1.1.1. Scopo... 4 1.1.2. Destinatari... 4 1.2. Convenzioni utilizzate

Dettagli

Guida all Utilizzo del Posto Operatore su PC

Guida all Utilizzo del Posto Operatore su PC Guida all Utilizzo del Posto Operatore su PC 1 Introduzione Indice Accesso all applicazione 3 Installazione di Vodafone Applicazione Centralino 3 Utilizzo dell Applicazione Centralino con accessi ad internet

Dettagli

Prova d Esame 07.04.2006 Compito A

Prova d Esame 07.04.2006 Compito A DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "Ciao"; protected int n; public General() { n = 1; public

Dettagli

Corso di Peer to Peer

Corso di Peer to Peer Università degli Studi di Pisa Laurea Specialistica in Tecnologie Informatiche Corso di Peer to Peer a.a 2005/2006 Progetto finale Simone Pieraccioni Matr. 232481 1 LiteMsn 1.0 Il progetto per il corso

Dettagli

Marco Faella Il paradigma Model-View-Controller. Il pattern Strategy.

Marco Faella Il paradigma Model-View-Controller. Il pattern Strategy. Marco Faella Il paradigma Model-View-Controller. Il pattern Strategy. 10 Lezione n. Parole chiave: Java Corso di Laurea: Informatica Insegnamento: Linguaggi di Programmazione II Email Docente: faella.didattica@gmail.com

Dettagli

appunti delle lezioni Architetture client/server: applicazioni server

appunti delle lezioni Architetture client/server: applicazioni server Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture /: applicazioni 1 La logica dei Abbiamo visto che un applicazione si connette e comunica con un applicazione mediante

Dettagli

DBMS ed Applicazioni Motivazioni

DBMS ed Applicazioni Motivazioni DBMS ed Applicazioni Motivazioni Sin ora abbiamo visto SQL come linguaggio per interrogare DBMS da interfaccia interattiva Nella pratica, un efficace sfruttamento delle potenzialità dei DBMS deriva dalla

Dettagli

L applicazione di MVC alla simulazione di ascensore I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1

L applicazione di MVC alla simulazione di ascensore I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1 I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1 3.13 (Caso di studio facoltativo) Pensare a oggetti: Modello-Vista-Controllore I design pattern descrivono strategie efficaci per costruire sistemi

Dettagli

Java: la libreria delle classi

Java: la libreria delle classi Java: la libreria delle classi Applet anatomia di un applet cenni di html La libreria JDBC per l accesso ai database il package java.sql 213 Applet Un applet è una applicazione Java che ha una forma particolare

Dettagli

Si precisa in ogni caso che questa guida rapida non esime dalla lettura del Manuale utente presente nell ambiente del Servizio Telematico Doganale.

Si precisa in ogni caso che questa guida rapida non esime dalla lettura del Manuale utente presente nell ambiente del Servizio Telematico Doganale. GUIDA RAPIDA versione 25 febbraio 2010 SERVIIZIIO TELEMATIICO DOGANALE Avvertenze: Questa guida vuole costituire un piccolo aiuto per gli operatori che hanno già presentato richiesta di adesione al servizio

Dettagli

GUIDA ALL USO DELL AREA RISERVATA

GUIDA ALL USO DELL AREA RISERVATA GUA ALL USO DELL AREA RISERVATA Sommario PREMESSA... 2 1 Come accedere all Area Riservata... 3 2 del Pannello di gestione del sito web... 4 3 delle sezioni... 7 3.1 - Gestione Sito... 7 3.1.1 - AreaRiservata...

Dettagli

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 30 maggio 2014 Introduzione Un programma diviso in sezioni distinte Un approccio alla

Dettagli

Università di Firenze Gestione Presenze Interfaccia grafica

Università di Firenze Gestione Presenze Interfaccia grafica Università di Firenze Gestione Presenze Interfaccia grafica Pagina 1 di 29 Versione Emissione Approvazione Modifiche Apportate Autore Data Autore Data 1 Maggini 01/03/06 - - Prima emissione. Pagina 2 di

Dettagli

Prova d Esame 07.04.2006 Compito B

Prova d Esame 07.04.2006 Compito B DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "ciao"; protected int n; public General() { n = 3; public

Dettagli

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS) 1 SQL Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS) a.a. 2014/2015 http://www.di.uniba.it/~lisi/courses/basi-dati/bd2014-15.htm Dott.ssa Francesca A. Lisi dott.ssa Francesca A.

Dettagli

Scheda 15 Accedere ai DataBase con JDBC

Scheda 15 Accedere ai DataBase con JDBC Scheda 15 Accedere ai DataBase con JDBC G IOVANNI PULITI Panoramica: che cosa è JDBC La API JDBC, introdotta per la prima volta con il JDK 1.0, è una API che permette di accedere a database relazionali

Dettagli

GUIDA UTENTE INTERNET CAFE MANAGER (Vers. 5.2.0)

GUIDA UTENTE INTERNET CAFE MANAGER (Vers. 5.2.0) GUIDA UTENTE INTERNET CAFE MANAGER (Vers. 5.2.0) GUIDA UTENTE INTERNET CAFE MANAGER (Vers. 5.2.0)...1 Installazione e configurazione...2 Installazione ICM Server...3 Primo avvio e configurazione di ICM

Dettagli

Ereditarietà e classi astratte

Ereditarietà e classi astratte Ereditarietà e classi astratte 6 Temi del capitolo 1. Il concetto di ereditarietà 2. Programmazione grafica con ereditarietà 3. Classi astratte 4. Il pattern TEMPLATE METHOD 5. Interfacce protected 6.

Dettagli

Sviluppo Applicazioni Mobile Lezione 12 JDBC. Dr. Paolo Casoto, Ph.D - 2012

Sviluppo Applicazioni Mobile Lezione 12 JDBC. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 12 JDBC + Cosa vediamo nella lezione di oggi Oggi analizzeremo insieme una specifica tecnologia Java per l accesso e la manipolazione di basi di dati relazionali

Dettagli

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup Progetto Automi e Linguaggi Parser svliluppato con JLex e cup Sviluppato da Santoro Carlo Maurizio Matricola:0108/528 Sviluppo terminato il: 18/06/06 TRACCIA DEL PROGETTO Si costruisca, utilizzando la

Dettagli

Parte II: Reti di calcolatori Lezione 10

Parte II: Reti di calcolatori Lezione 10 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Parte II: Reti di calcolatori Lezione 10 Giovedì 3-04-2014 1 Reti per la distribuzione

Dettagli

Software centralizzazione per DVR

Software centralizzazione per DVR Software centralizzazione per DVR Manuale installazione ed uso 2 INTRODUZIONE Il PSS (Pro Surveillance System) è un software per PC utilizzato per gestire DVR e/o telecamere serie VKD. Tramite esso è possibile

Dettagli

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY

PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Giampiero Allamprese 0000260193 PROGETTO DI UN MIDDLEWARE PER L ACCESSO REMOTO A UN REPOSITORY Reti di Calcolatori LS prof. Antonio Corradi A.A. 2007/2008 ABSTRACT L obiettivo di questo progetto è la realizzazione

Dettagli

Threads e Concorrenza in Java Swing

Threads e Concorrenza in Java Swing SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Corso di Laurea in Ingegneria Informatica ed Automatica Corso di Laurea in Ingegneria dei Sistemi Informatici

Dettagli

Guida all Utilizzo dell Applicazione Centralino

Guida all Utilizzo dell Applicazione Centralino Guida all Utilizzo dell Applicazione Centralino 1 Introduzione Indice Accesso all applicazione 3 Installazione di Vodafone Applicazione Centralino 3 Utilizzo dell Applicazione Centralino con accessi ad

Dettagli

Applicazioni distribuite

Applicazioni distribuite Applicazioni distribuite Maurizio Cozzetto 1 agosto 2009 Un pò di teoria Ricordiamo che un'applicazione distribuita è un'applicazione composta da più programmi (almeno 2) posti in esecuzione su macchine

Dettagli

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Indice generale. Il BACK-END...3 COME CONFIGURARE JOOMLA...4 Sito...4 Locale...5 Contenuti...5

Indice generale. Il BACK-END...3 COME CONFIGURARE JOOMLA...4 Sito...4 Locale...5 Contenuti...5 Guida a Joomla Indice generale Il BACK-END...3 COME CONFIGURARE JOOMLA...4 Sito...4 Locale...5 Contenuti...5 Il BACK-END La gestione di un sito Joomla ha luogo attraverso il pannello di amministrazione

Dettagli

BIMPublisher Manuale Tecnico

BIMPublisher Manuale Tecnico Manuale Tecnico Sommario 1 Cos è BIMPublisher...3 2 BIM Services Console...4 3 Installazione e prima configurazione...5 3.1 Configurazione...5 3.2 File di amministrazione...7 3.3 Database...7 3.4 Altre

Dettagli

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 2 (svolta) Socket Java con connessione Luca Foschini Anno accademico 2009/2010 Esercitazione 2 1 Architettura

Dettagli

Architettura Client-Server

Architettura Client-Server Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server

Dettagli

19. Introduzione al multi-threading

19. Introduzione al multi-threading 19. Introduzione al multi-threading Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II I thread I thread, o processi

Dettagli

Istruzioni per la configurazione e l utilizzo del proprio dispositivo con. sistema Wi-Fi Guglielmo

Istruzioni per la configurazione e l utilizzo del proprio dispositivo con. sistema Wi-Fi Guglielmo Istruzioni per la configurazione e l utilizzo del proprio dispositivo con TM sistema Wi-Fi Guglielmo Guglielmo si occupa della realizzazione di Hot Spot pubblici per la connettività Wi-Fi in ambito pubblico

Dettagli

Parte II: Reti di calcolatori Lezione 12

Parte II: Reti di calcolatori Lezione 12 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Parte II: Reti di calcolatori Lezione 12 Giovedì 16-04-2015 1 Confronto architetture C/S e

Dettagli

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012 Laboratorio Progettazione Web PHP e MySQL - Lezione 9 Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012 Architettura di una applicazione Web Browser Web HTTP Server Web PHP Dati View Control

Dettagli

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_09010 - Stefano Millozzi

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_09010 - Stefano Millozzi Connessioni di rete Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi 1 Socket orientato alla connessione o non orientato alla connessione 2 Socket in astratto 3 Socket modalità

Dettagli

Compilazione rapporto di Audit in remoto

Compilazione rapporto di Audit in remoto Compilazione rapporto di Audit in remoto Installazione e manuale utente CSI S.p.A. V.le Lombardia 20-20021 Bollate (MI) Tel. 02.383301 Fax 02.3503940 E-mail: info@csi-spa.com Rev. 1.1 23/07/09 Indice Indice...

Dettagli

Introduzione al package grafico Swing

Introduzione al package grafico Swing Introduzione al package grafico Swing Architettura di javax.swing Java supporta direttamente nella propria architettura il concetto di applicazione grafica, tramite il package javax.swing, in cui i componenti

Dettagli

Introduzione... 2. Un software per l automazione di procedure statistiche su dati Pet... 2. Il Pre-Processing... 7. La fase di statistica...

Introduzione... 2. Un software per l automazione di procedure statistiche su dati Pet... 2. Il Pre-Processing... 7. La fase di statistica... Indice Introduzione... 2 Un software per l automazione di procedure statistiche su dati Pet... 2 Il Pre-Processing... 7 La fase di statistica... 12 Algoritmo di classificazione... 13 L interfaccia... 15

Dettagli

www.informarsi.net MODULO 6 ECDL - EIPASS STRUMENTI DI PRESENTAZIONE - PRESENTATIONS Microsoft PowerPoint http://www.informarsi.net/ecdl/powerpoint/

www.informarsi.net MODULO 6 ECDL - EIPASS STRUMENTI DI PRESENTAZIONE - PRESENTATIONS Microsoft PowerPoint http://www.informarsi.net/ecdl/powerpoint/ MODULO 6 ECDL - EIPASS STRUMENTI DI PRESENTAZIONE - PRESENTATIONS Microsoft PowerPoint http:///ecdl/powerpoint/ INTERFACCIA UTENTE TIPICA DI UN SOFTWARE DI PRESENTAZIONE APERTURA E SALVATAGGIO DI UNA PRESENTAZIONE

Dettagli

Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Compute engine generici in RMI

Compute engine generici in RMI Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del

Dettagli

Software Requirements Specification

Software Requirements Specification SJS Sicilian Java Solutions Software Requirements Specification Data di inizio redazione: 16/11/2008 Data di fine redazione: 19/11/2008 Versione: 1.0 Redattore: Pennisi Carmelo Approvatori: Di Giorgio

Dettagli

JDBC: Java e database.

JDBC: Java e database. JDBC: Java e database. Introduzione all architettura e esempi di utilizzo 1.0 INTRODUZIONE ALL ARCHITETTURA JDBC è (anche se non ufficialmente riconosciuto da Sun) l acronimo per Java DataBase Connectivity.

Dettagli

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

Dettagli

Classi astratte. Master in Web Technology e Security luglio - settembre 2000. Interfacce

Classi astratte. Master in Web Technology e Security luglio - settembre 2000. Interfacce Master in Web Technology e Security luglio - settembre 2000 JAVA Alberto Martelli Parte III Programmazione grafica Classi astratte Vogliamo implementare un algoritmo di ordinamento di un array che sia

Dettagli

Manuale Utente PEC e Client di Posta tradizionale

Manuale Utente PEC e Client di Posta tradizionale 1. Manuale di configurazione per l utilizzo della Casella di Posta Certificata PEC tramite il client di posta tradizionale. Per poter accedere alla propria casella mail di Posta Elettronica Certificata

Dettagli

Protocollo di trasmissione Trova il Tuo Farmaco. Indice. Versione documento: 1.4 Data: 29/06/2011

Protocollo di trasmissione Trova il Tuo Farmaco. Indice. Versione documento: 1.4 Data: 29/06/2011 Protocollo di trasmissione Trova il Tuo Farmaco Versione documento: 1.4 Data: 29/06/2011 Indice Protocollo di trasmissione Trova il Tuo Farmaco...1 Requisiti...2 Finalità...2 Software...2 Documentazione...2

Dettagli

La connessione php-mysql con MySQLi

La connessione php-mysql con MySQLi La connessione php-mysql con MySQLi Premessa Lo scenario che si intende alla base di questo capitolo è di disporre di un ambiente phpmysql rappresentato nel seguente schema: L'applicazione php viene eseguita

Dettagli

> Gestione Invalidi Civili <

> Gestione Invalidi Civili < > Gestione Invalidi Civili < GUIDA RAPIDA ALL'UTILIZZO DEL PRODOTTO (rev. 1.3) INSTALLAZIONE, ATTIVAZIONE E CONFIGURAZIONE INIZIALE ESECUZIONE DEL SOFTWARE INSERIMENTO ANAGRAFICA RICERCA ANAGRAFICA INSERIMENTO

Dettagli

R.T.S. Engineering s.n.c. MANUALE D USO. Valido per:

R.T.S. Engineering s.n.c. MANUALE D USO. Valido per: MANUALE D USO Valido per: Stampante fiscale 3I FTP-FAST e per tutti i modelli 3I dotati di protocollo XonXoff, tramite RS-232, USB o Rete Ethernet COMPATIBILE WINDOWS VISTA / 7 / 8 (1): Protocollo XonXoff

Dettagli

Si precisa in ogni caso che questa guida rapida non esime dalla lettura del manuale utente presente nell ambiente del Servizio Telematico Doganale.

Si precisa in ogni caso che questa guida rapida non esime dalla lettura del manuale utente presente nell ambiente del Servizio Telematico Doganale. GUIDA RAPIDA versione 11 marzo 2008 SEERVIIZZIIO TTEELLEEMATTIICO M DOGANALLEE G Avvertenze: Questa guida vuole costituire un piccolo aiuto per gli operatori che hanno già presentato richiesta di adesione

Dettagli

SOFTWARE DI GESTIONE PSS

SOFTWARE DI GESTIONE PSS Rev. 1.0 SOFTWARE DI GESTIONE PSS Prima di utilizzare questo dispositivo, si prega di leggere attentamente questo manuale e di conservarlo per future consultazioni. Via Don Arrigoni, 5 24020 Rovetta S.

Dettagli