• Non ci sono risultati.

Come dicevamo prima però, nonostante crediamo che sia stato fatto un grande

N/A
N/A
Protected

Academic year: 2021

Condividi "Come dicevamo prima però, nonostante crediamo che sia stato fatto un grande "

Copied!
19
0
0

Testo completo

(1)

Conclusioni

In questo lavoro di tesi abbiamo analizzato i requisiti fondamentali per lo sviluppo di una metafora grafica per il sistema KDDML. Abbiamo fornito inoltre una serie di spunti su cui riflettere per la realizzazione della Gui prestando particolare attenzione sia all’usabilità che all’efficacia del processo di composizione della query.

L’implementazione fornita per tale interfaccia realizza le funzionalità descritte nei capitoli 4-5 ma in ogni caso restano una serie di problematiche aperte che potranno eventualmente essere affrontate in futuro con una espansione del sistema grafico.

In definitiva possiamo affermare che attraverso l’introduzione della GUI e più in generale di una metafora grafica per la rappresentazione di query KDD, l’interazione con il sistema KDDML è sicuramente migliorata. Infatti tramite un’interfaccia “abbastanza” user-friendly, ora è possibile formulare query sfruttando le potenzialità espressive di una “visualizzazione a grafo”, caricare e/o salvare query e sotto-query senza perdita di informazioni, validare uno schema e ridurre sensibilmente la possibilità di introdurre degli errori nel processo di costruzione delle query. Precisiamo che tutte le funzionalità offerte sono “impermeabili” rispetto al numero ed al tipo di operatori presenti nel sistema KDDML. Vale a dire che nel caso in cui il sistema KDDML fosse ampliato, l’interfaccia grafica non risentirebbe di tale cambiamento poichè tutte le informzioni relative al tipo ad al numero di operatori, parametri ed algoritmi, vengono recuperati dinamicamente dai livelli Interpreter, Operators e Repository di KDDML (per le modalità di espansione del sistema vedi [TESI_1]).

Come dicevamo prima però, nonostante crediamo che sia stato fatto un grande

(2)

che prima di avere una GUI era necessario scrivere le query in forma testuale senza alcun aiuto dal sistema), crediamo che il sistema grafico possa essere ancora migliorato di molto in alcuni punti e pensiamo che sarebbero necessarie ulteriori modifiche per renderlo maggiormente efficiente.

Consideriamo ad esempio la possibilità di marcare con breakpoint i nodi del grafo. Un simile funzionalità rappresenta sicuramente un ulteriore aiuto per chi interagisce con il sistema. Ad oggi l’implementazione attuale fornisce soltanto la possibilità di marcare un solo nodo del grafo (query) con un breakpoint. Ciò significa che è possibile effettuare l’esecuzione parziale solamente di una sotto query per volta. Sarebbe interessante fornire all’utente la possibilità di interagire con la GUI sfruttando la possibilità di marcare la query con breakpoint successivi in maniera tale da visualizzare i risutati ottenuti ad ogni passo. Naturalmente, come evidenziato nei capitoli precedenti, questo tipo di soluzione ha senso solo se stiamo parlando di dataset abbastanza piccoli. In caso contrario infatti l’esecuzione parziale di una query prenderebbe così tanto tempo che la possibilità di visualizzazione di risultati parziali non sarebbe in anlcun modo rilevante.

Un ulteriore miglioramento si può ottenere cercando di guidare l’utente anche nella correzione degli errori. Infatti, ad oggi, il sistema grafico non fa altro che segnalare all’utente la tipologia e la posizione degli errori all’interno dello schema. Sarebbe molto utile fornire a chi interagisce con la GUI un modo per riportare automaticamente il focus all’operatore che ha generato l’errore al passo di validazione. Crediamo che questa modifica possa essere effettuata senza compromettere l’attuale strutturazione del sistema grafico. In maniera molto sintetica, e facendo riferimento ai package descritti nel capitolo precedente, basterebbe aggiungere un dialog box nel package DialogBox che contiene una lista degli errori ed i riferimenti all’operatore che li ha generati.

Quindi non è necessario toccare in alcun modo la parte del sistema che effettua

la funzionalità di validazione ma soltanto inserire un meccanismo guida nella

correzione degli erorri.

(3)

Ultima osservazione per ciò che riguarda un possibile sviluppo futuro riguarda

la possibilità di inserire in parallelo alla formulazione della query visuale, una

query testuale. Sarebbe uno strumento abbastanza potente per gli utenti più

esperti che vogliono formulare una parte di una query complessa scrivendo “a

mano” il comportamento dello schema. Questo però non è così immediato come

sembrerebbe. Infatti sarebbe necessario riflettere tutte le modifiche effettuate

sulla query dall’editor testuale in forma grafica e viceversa. Consideriamo

questo passaggio abbastanza delicato e, se ci saranno ulteriori sviluppi, chi si

occuperà di tale espansione dovrà fare attenzione all’integrazione di un tale

strumento di input di testo.

(4)

Ringraziamenti

Il mio primo pensiero va ai miei genitori che mi hanno accudito, confortato e sostenuto durante tutta la carriera universitaria. Grazie mamma e papà per tutto quello che non mi viene in mente perchè troppo scontato.

Grazie a Marry che con i suoi sorrisi e con i suoi abbracci mi ha dato e mi da nuove energie per superare i momenti difficili.

Grazie a Maria Teresa ed Ilario per la calma che mi trasmettono ogni volta che torno a casa.

Ringrazio i miei nonni Teresa e Romeo che mi sono vicini con la preghiera dal Cielo. Grazie ai miei nonni Alfonso e “Angelina” che mi accompagnano costantemente in tutto ciò che faccio con tanta preoccupazione quanto amore.

Un ultimo pensiero va agli amici che hanno accompagnato con allegria e

simpatia le “nottate pisane” durante questi anni.

(5)

Appendice

In questa appendice viene mostrato un breve tutorial utile per l’utilizzo dell’interfaccia grafica e del sistema KDDML.

KDDML User Interface

Introduzione

L’interfaccia grafica realizzata per KDDML si pone come un vero e proprio front-end tra il sistema che permette una programmazione del processo di scoperta dei dati e l’utente.

Naturalmente lo scopo dell’interfaccia grafica è quello di agevolare l’interazione tra sistema e utilizzatore del sistema. Per questo motivo, è stata realizzata un’infrastruttura che cerca di guidare, sia da un punto di vista grafico che logico, la stesura di uno schema che rappresenti l’estrazione di conoscenza da dati grezzi.

L’interfaccia quindi, sotto questo punto di vista, allarga il raggio d’azione del sistema KDDML ad un maggior numero di utenti, mettendo da parte quella conoscenza specifica del linguaggio di markup KDDML che prima dello sviluppo della GUI era necessario per la sottomissione di query all’interprete del sistema.

Nelle sezioni successive si cercherà di fornire una breve ma esaustiva guida per

l’utilizzo del front-end grafico per chiarire in che modo avviene l’interazione

con la GUI di KDDML.

(6)

Struttura della GUI

Quando si avvia l’interfaccia del sistema si apre una finestra come quella mostrata in figura 1. Come si nota dalla figura, il frame principale è suddiviso in più parti ognuna con una propria funzionalità. Chiaramente al primo avvio si parte da un progetto vuoto e quindi è necessario iniziare a comporre una query KDD legando insieme i vari elementi grafici messi a disposizione del sistema.

Con riferimento alla figura 1, cerchiamo di capire meglio la struttura dell’interfaccia:

(1) il pannello indicato con il numero “1” contiene una lista di operatori che sono rappresentati da un’icona, che in qualche modo sintetizza le funzionalità dell’operatore, ed un testo che è il nome dell’operatore nel linguaggio KDDML.

Questo pannello in seguito verrà chiamato OperatorsPanel.

\

(2) Status bar. Come ogni status bar, quella indicata con il numero “2”

riflette ogni azione che il sistema grafico sta intraprendendo. Quando viene avviata l’applicazione, come nel caso di figura 1, la status bar invita l’utente ad iniziare la composizione della query grafica.

Naturalmente a seconda dell’azione intrapresa dall’utente il messaggio di stato cambierà.

(3) Quello indicato dal numero ”3” è il canvas (o pannello) principale in

cui viene rappresentata la query grafica. È a partire dalle

manipolazioni sugli elementi presenti in questo pannello che si

fornisce uno schema per le query KDD.

(7)

figura 1: aspetto della GUI quando viene avviata

(4) Il pannello “4” è una toolbar. Sulla toolbar dell’interfaccia di

KDDML sono presenti le principali funzionalità fornite dal sistema

grafico. Se prendiamo come riferimento la figura 1 notiamo che tutti

i pulsanti della toolbar sono disabilitati poiché non è presente alcun

elemento grafico. Quando l’utente inserisce il primo operatore

vengono abilitati i pulsanti compatibili con le operazioni da

effettuare. Si noti che l’unica possibilità offerta all’utente a partire da

un progetto vuoto, è quella di caricare una query precedentemente

salvata.

(8)

(5) Nel pannello contrassegnato con il numero “5” sono rappresentate tutte le fasi del processo di KDD. Man mano che si procede con la composizione della query vengono mostrate solamente le fasi accessibili a partire da quella corrente, infatti come si può notare, a partire dalla configurazione iniziale con nessun operatore inserito nello schema, è possibile accedere solamente agli operatori chiamati di Data-Source. Chiariremo in seguito il meccanismo di selezione della fase di un operatore. Per maggiore chiarezza chiameremo questa parte dell’interfaccai grafica PhasePanel.

Inserimento di un operatore

L’inserimento di un operatore per comporre una query è sicuramente la funzionalità principale dell’interfaccia grafica.

Diciamo subito che esistono due modalità differenti di inserimento di un operatore KDDML. Se si vuole inserire un operatore che provvede al caricamento di un dataset, basta semplicemente selezionare con il mouse l’operatore nel pannello OperatorsPanel e con un doppio click del mouse automaticamente l’elemento grafico viene aggiunto nel grafo della query.

Precisiamo che quando si inserisce un operatore di data source questo è un nodo completamente scollegato nel grafo della query. Solo al passo successivo è possibile collegarlo ad un nodo con esso compatibile 1 .

Quando si desidera inserire un operatore che appartiene ad una fase del processo KDD differente da quella di “Data-Source” è necessario effettuare un procedimento differente.

In questo caso infatti l’utente deve:

1) selezionare l’elemento grafico a cui desidera collegare l’operatore;

1

Vedi capitoli 5-6. Rif. Studio e Realizzazione di un linguaggio per KDD.

(9)

2) scegliere la fase del processo di KDD dal PhasePanel;

3) selezionare dalla lista degli operatori del pannello OperatorsPanel l’elemento grafico che si desidera inserire;

4) inserirlo sul canvas.

Chiariamo ora come possono essere effettuati i passi 1-4. Per ciò che riguarda il punto (1) diciamo che la selezione di un operatore può essere effettuata in due modi differenti: o con un semplice click del mouse sull’icona dell’operatore o con input da tastiera. Quando un operatore viene selezionato il contorno dell’elemento grafico viene evidenziato con il colore arancione.

Per ciò che riguarda il punto (2) diciamo che, dopo aver selezionato un operatore, automaticamente il sistema provvede a disabilitare (abilitare) i pulsanti del pannello PhasePanel a seconda che la fase del processo KDD associata con l’operatore selezionato sia compatibile o meno con le altre fasi.

Questo permette in un certo senso, di organizzare molto meglio il processo interattivo/iterativo del KDD e inserire gli operatori KDDML in maniera guidata. Proprio per questo motivo il collegamento tra l’operatore selezionato dall’utente e quello inserito con il passo (4) avviene in maniera automatica.

Consideriamo ora il passaggio (3). Quando viene selezionata la fase desiderata

dal pannello PhasePanel automaticamente viene aggiornata la lista degli

elementi che si possono inserire nella parte della GUI denominata

OperatorsPanel, In questo modo infatti vengono mostrati solo ed

esclusivamente gli operatori KDDML compatibili con l’elemento selezionato in

quell’istante. Chiariremo in seguito cosa vuol dire “mostrare all’utente gli

operatori compatibili”. Per procedere quindi con la selezione e successivo

inserimento di un operatore sul canvas (4), basta cliccare due volte con il

(10)

pulsante sinistro del mouse sull’operatore scelto e l’operatore verrà inserito nel work-flow.

Rimozione di un operatore dal canvas

Quando si desidera rimuovere un elemento dal work-flow si può scegliere di procedere in due maniere differenti. Si può ad esempio selezionare il nodo del grafo con il mouse con un semplice click del pulsante sinistro sull’icona del nodo stesso e poi premendo il tasto “Delete” da tastiera si procede con l’eliminazione dall’area di lavoro. In modo equivalente, se si clicca con il pulsante destro del mouse sull’icona dell’operatore KDDML che si desidera eliminare, automaticamente l’elemento viene selezionato e si apre una finestra di Popup come quella di figura 2. Dalla lista di azioni che si possono intraprendere a partire dalla finestra di popup è selezionabile il campo “remove operator” attraverso il quale si ottiene l’eliminazione dell’elemento.

figura 2 : finestra di popup

Facciamo notare che, quando si elimina un elemento dallo schema

rappresentato dal grafo, automaticamente tutti gli archi entranti e gli archi

uscenti collegati con il nodo eliminato vengono a loro volta rimossi dal grafo.

(11)

Sicuramente l’eliminazione incondizionata di nodi del grafo può rendere il grafo inconsistente, nel senso che i nodi presenti sul canvas non formano una query valida per l’interprete KDDML.

Per chiarire quanto detto fino ad ora consigliamo di leggere il contenuto delle sezioni successive.

Inserimento di collegamenti o archi

Come abbiamo accennato nelle sezioni precedenti, non esiste un modo esplicito per collegare con un arco due nodi del grafo ma è il sistema grafico a guidare l’utente nell’inserimento dei collegamenti tra due o più nodi.

Supponiamo che l’evoluzione della query che intendiamo rappresentare sia quella di figura 3. Ipotizziamo ora che l’utente desideri collegare all’operatore chiamato weather un operatore che appartiene alla fase di Data Mining ad esempio un RDA_MINER (che estrae le regole associative dal dataset in input).

figura 3 : collegamento di due operatori

In questo caso il collegamento avviene come descritto nella sezione precedente,

ma se consideriamo la possibilità di avere una configurazione della query come

quella rappresentata in figura 4, capiamo bene che un collegamento automatico

(12)

figura 4 : query parziale

In questo caso però è possibile comunque collegare i due elementi grafici facilmente. Il procedimento da seguire in questo caso è:

1) selezionare l’operatore che si desidera collegare;

2) cliccare sulla lampadina in alto a destra (se presente);

3) selezionare un elemento nella lista che compare sullo schermo;

4) confermare il collegamento.

Dopo il passo (4) la situazione e quella di figura 5.

figura 5 : collegamento degli operatori weather e RDA_MINER

Precisiamo che la segnalazione di un possibile collegamento tra nodi del grafo

già presenti viene segnalato esplicitamente dal sistema visualizzando nel lato

(13)

superiore dell’icona una lampadina (vedi figura 5). In questo caso infatti l’analisi effettuata dal sistema grafico permette di individuare tra tutti i nodi presenti nel work-flow quelli che sono compatibili con il nodo selezionato. In questo caso, quando si clicca con il tasto sinistro del mouse sull’icona della lampadina appare una dialog-box in cui è presente una lista di operatori compatibili con l’elemento selezionato e tra cui quindi è possibile inserire un arco. A questo punto quindi, all’utente non resta che selezionare, tra gli elementi presenti nella lista, il nodo a cui collegare l’operatore correntemente selezionato e confermare la scelta effettuata.

Come previsto dal sistema grafico, automaticamente verrà inserito un collegamento tra i nodi scelti.

Un modo analogo per il collegamento dei nodi del grafo consiste nel selezionare uno dei nodi disponibili nel pannello PhasePanel selezionando la lista di operatori denominati come others (vedi figura 1).

In questa lista infatti vengono raccolti dal sistema due tipi di operatori KDDML:

1) tutti quelli che necessitano di più di un “segnale” di input;

2) tutti gli operatori che sono completamente scollegati dal grafo che rappresenta la query.

Se l’utente sceglie di collegare con questa modalità gli operatori presenti deve semplicemente:

1) selezionare il primo operatore;

2) visualizzare la lista di operatori che sono stati inseriti nel pannello

“others ” cliccando nel pannello PhasePanel sul pulsante Others in alto a destra;

3) selezionare uno degli elementi visualizzati nel pannello

(14)

4) fare doppio click con il tasto sinistro del mouse sull’operatore scelto.

L’effetto di questo procedimento è del tutto analogo a quello descritto in precedenza.

Vogliamo precisare che anche in questo caso, come nel caso dell’inserimento di un operatore, la presenza o meno di un elemento nelle liste degli operatori da collegare è dettata dalla compatibilità tra gli operatori. Brevemente ricordiamo che due operatori KDDML “A” e “B” sono compatibili (cioè è possibile collegarli) se il tipo di output di A è uguale ad uno dei tipi di input di B.

Per maggiori chiarimenti su questo aspetto rimandiamo al riferimento [1].

Dobbiamo fare una ulteriore precisazione. Per capire meglio lo schema che si sta costruendo, è possibile conoscere in ogni momento il tipo di output di un operatore presente nel grafo senza bisogno di controllare la documentazione di KDDML. Infatti su ogni arco del grafo è presente una sfera di colore grigio, e se si clicca con il pulsante sinistro del mouse su di essa viene visualizzato per qualche secondo un popup in cui è mostrato il tipo di output dell’operatore.

Indicatori di validità di una query

Quando si costruisce una query è sicuramente utile sapere se lo schema che si sta costruendo è o meno valido per l’esecuzione. In questo senso il sistema grafico viene incontro all’utente in molti modi.

Diciamo subito che non si corre il pericolo di mandare in esecuzione query non valide poiché l’esecuzione dell’interprete KDDML viene interrotta se il validatore riscontra degli errori. Da un punto di vista grafico ci si può accorgere facilmente della correttezza o meno di un elemento grafico inserito.

Infatti, quando si inserisce un operatore sul grafo, per default, esso viene

evidenziato con un contorno rosso che sta ad indicare che l’operatore non è in

alcun modo pronto per l’esecuzione.

(15)

Tale marcatura è effettuata dal sistema in due occasioni: o quando l’utente non ha inserito ancora gli attributi per quel determinato operatore oppure quando l’elemento segnalato con un contorno rosso necessita di uno o più segnali di input oltre a quelli già presenti.

Oltre a questo tipo di errori possono essere segnalati dal validatore del sistema grafico altri tipi di inesattezze nell’inserimento degli attributi. Infatti, nella toolbar, è presente un pulsante (validate) che se azionato provvede a validare l’intero schema KDD costruito fino a quel momento rilevando ulteriori (eventuali) errori nella composizione della query.

In questo caso viene aperto un frame in cui sono visualizzati tutti gli errori riscontrati nello schema KDD organizzati per operatore. L’utente quindi se desidera eseguire la query dovrà correggere passo per passo tutti gli errori presenti in questa lista.

Quando un operatore non presenta alcun tipo di inesattezza, né dal punto di vista dei parametri inseriti, né dal punto di vista del numero di input ad esso collegato, esso viene marcato come “pronto per essere eseguito” evidenziando il contorno della relativa icona con un quadrato di colore verde.

Esecuzione di una query

Quando si desidera eseguire una query basta:

1) cliccare con il tasto sinistro del mouse sul pulsante “esegui” ;

2) scegliere la query da mandare in esecuzione e confermare la scelta.

Precisiamo che quando si sceglie di eseguire una query, viene visualizzato un

dialog-box come quello mostrato in figura 6, diviso in due parti: nel pannello

indicato con il numero (1) vi è un combo-box attraverso il quale si può

(16)

numero (2) mostra la lista degli operatori presenti nella query selezionata attraverso il combo-box.

All’utente quindi non resta che confermare la propria scelta ed attendere la visualizzazione dei risultati nel browser di sistema.

figura 6 : dialog box esecuzione di una query

Si noti che il numero di query presenti nello schema KDD è pari al numero di nodi del grafo che non hanno alcun arco uscente.

Salvataggio e caricamento di uno schema

Se si desidera salvare lo schema KDD composto fino a quel momento, basta

cliccare con il pulsante sinistro del mouse nella toolbar sul simbolo . In

questo caso verrà visualizzato un dialog-box molto simile a quello di figura 6,

in cui è necessario scegliere la query da salvare. Quando si fornisce la conferma

(17)

per il salvataggio, il sistema mostra in un frame separato il “classico”

FileChooser attraverso il quale è possibile scegliere il nome ed il path del file in cui salvare la query selezionata. Dopo aver confermato il salvataggio, tutte le informazioni degli operatori dello schema e i relativi attributi vengono memorizzati in un file xml. In maniera analoga si può scegliere di effettuare un salvataggio direttamente dalla barra dei menù : File → Save. In questo caso il procedimento per effettuare il salvataggio è del tutto analogo a quello descritto in precedenza.

Se si desidera caricare uno schema precedentemente salvato, si può cliccare con il tasto sinistro del mouse direttamente sul pulsante presente nella toolbar. In questo caso viene aperto un FileChooser tramite il quale è possibile selezionare il file che contiene lo schema KDD salvato in precedenza.

Facciamo notare che quando si tenta di caricare uno schema, vengono visualizzati nel FileChooser anche dei semplici file xml che è possibile selezionare. In questo caso il sistema grafico comunica all’utente che il formato del file non è corretto e permetterà di scegliere un file compatibile con la GUI di KDDML.

In maniera del tutto analoga, si può scegliere di caricare un file direttamente dalla barra dei menù: : File → Open. Anche in questo caso il comportamento del sistema non cambia.

Inserimento di un breakpoint

Se si vuole effettuare una esecuzione parziale della query, è possibile utilizzare la funzionalità offerta dall’interfaccia grafica di marcare un determinato nodo come “breakpoint”. Ciò vuol dire che anche se viene visualizzata sul canvas l’intera query solo una parte di essa verrà realmente mandata in esecuzione.

Per marcare un nodo come “breakpoint” basta:

1) selezionare con il mouse l’operatore che si desidera marcare;

(18)

2) fare click con il pulsante sinistro del mouse sul pulsante nella toolbar. In questo modo su tutti gli archi uscenti del nodo selezionato apparirà una sfera di colore rosso.

Se poi si desidera eseguire una query parziale basta fare click sul pulsante nella toolbar. In questo modo apparirà una finestra di conferma dell’esecuzione per eseguire la query parziale.

Se si desidera rimuovere il simbolo che segnala che il nodo è stato marcato come breakpoint, basta fare click sul pulsante localizzato nella toolbar. In questo modo tutti i breack point del nodo selezionato verranno automaticamente eliminati.

Visualizzare la query KDDML in formato testo

Man mano che si prosegue con la costruzione di una query grafica, è sicuramente importante capire come viene strutturata una query KDDML.

Questa funzionalità può essere utile soprattutto agli utenti che in qualche modo hanno una qualche conoscenza del linguaggio di markup KDDML.

Per visualizzare il codice relativo alla query grafica basta cliccare con il pulsante sinistro del mouse sul bottone .

A questo punto appare una finestra simile a quella di figura 6, in cui è possibile selezionare la query che si desidera visualizzare. Dopo aver selezionato la query desiderata e aver dato conferma il sistema fa visualizzare un frame in cui viene visualizzato il codice KDDML per la query selezionata.

Manipolazione dello schema grafico

Quando si inserisce un operatore grafico, esistono alcuni vincoli che non

permettono all’utente di posizionare a proprio piacimento l’elemento sul

(19)

canvas. Questa operazione avviene attraverso un semplice drag&drop. Basta cliccare con il pulsante sinistro del mouse sull’elemento desiderato e mantenendo il pulsante premuto, trascinare sul cavas l’operatore. L’utente, infatti, ha piena libertà nel posizionare un operatore solo quando quest’ultimo appartiene alla fase di Data-Source.

Ciò accade poiché gli operatori che appartengono alla suddetta fase, non

prevedono alcun input. Questo permette all’utente di decidere la posizione per

iniziare una nuova query. Quando gli operatori sono connessi tra loro tramite

archi, esistono alcuni vincoli oltre i quali non è possibile spostare gli elementi

grafici. Se si sposta l’elemento in orizzontale vengono impostati due vincoli,

rispettivamente a destra e a sinistra dell’elemento selezionato, in modo da non

poter sovrapporre gli elementi adiacenti. Se si tenta invece di spostare

l’operatore in verticale e si sovrappone un elemento ad un altro, le icone

vengono evidenziate con un contorno rosso e sull’icona appare il simbolo

che segnala l’impossibilità di collocare l’elemento in quella posizione. Se si

tenta di sovrapporlo, quando il pulsante sinistro del mouse viene rilasciato, il

sistema grafico colloca automaticamente l’elemento nella posizione precedente.

Riferimenti

Documenti correlati

qualunque componente grafica su cui l'utente possa svolgere delle azioni (ad esempio un bottone o una lista di scelte in un menu) Il programmatore decide come gli eventi generati

Con questa freccia possiamo fare delle cose al computer direttamente dallo schermo.. Per ascoltare la musica e i suoni sul computer abbiamo bisogno delle

Nella zona nord- orientale viene costruito un nuovo edificio corrispondente alla nuova Casa della Salute “Campo di Marte”, che funzionerà come una succursale dell’Ospedale

Nuestra explicación para este hecho es la siguiente: en primer lugar, la interpretación inclusiva de since y de desde, que corresponde a la variedad aspectual

Quando invece con la parola “bagno” viene utilizzata per intendere la stanza da bagno, essa viene tradotta in inglese “BATH-ROOM”. Anche in inglese si preferisce,

Il modello numerico di tale bruciatore ha comunque mostrato delle differenze rispetto ai dati sperimentali, soprattutto nelle zone di miscelamento tra i getti di combustibile/coflow e

viene calcolata la riflettanza al sensore ( ρ ) e salvata nella BR in formato ENVI-standard. L’utente non “entra in contatto” diretto con i modelli di trasferimento ma imposta nel

In questo progetto Java è stato utilizzato con tutte le sue ultime caratteristiche più avanzate, tra le quali i generics e le annotations, per l’implementazione