Componenti in.net, Dependency Injection e Software testabile. Giovanni Lagorio lagorio@disi.unige.it
|
|
- Giorgio Mazza
- 8 anni fa
- Visualizzazioni
Transcript
1 Componenti in.net, Dependency Injection e Software testabile Giovanni Lagorio lagorio@disi.unige.it
2 Licenza Questi lucidi sono rilasciati sotto la licenza Creative Commons Attribuzione-Non commerciale-non opere derivate 3.0 Unported. Per leggere una copia della licenza visita il sito web o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. In due parole, possono essere liberamente usati, copiati e distribuiti purché: 1. Venga citata la fonte originale 2. Non vengano usati in ambito commerciale 3. Non vengano modificati in nessun modo
3 Partiamo da un esempio: Sender public class Sender { } public bool Send (string to, string body) { if (to == null) throw new ArgumentNullException("to"); if (body == null) throw new ArgumentNullException("body"); //... return false; } Questa classe e le sue classi/struct ausiliarie sono un buon esempio di componente (una volta impacchettate in una DLL)
4 Bulk Sender public class Bulk Sender { private readonly Sender _ sender; private readonly string _footer; public Bulk Sender(string footer) { this._ sender = new Sender(); this._footer = footer; } } public void Send (List<string> addresses, string body) { if (addresses == null) throw new ArgumentNullException("addresses"); if (body == null) throw new ArgumentNullException("body"); foreach (var a in addresses) { if (!this._ sender.send (a, body + this._footer)) throw new Exception("Cannot send "); } }
5 Dipendenze Di cosa abbiamo bisogno per distribuire Bulk Sender? Se Sender... non funziona/non ancora implementata? dipende da un DB? dall esistenza di una particolare cartella nel filesystem? Se il cliente volesse usare un altra componente per spedire le singole ? Come possiamo testarla? Se siamo offline? Se non vogliamo spammare durante il testing?
6 Classi come tipo Usare il nome di una classe come tipo crea un legame (troppo) forte Non si può: distribuire/riusare (facilmente) una classe se dipende da un altra sostituire un implementazione con un altra Come risolvere questi problemi? Lo sapete Usiamo le interfacce, ma certo! ma come si creano gli oggetti? Usiamo delle factory Sì, ma è molto meno ovvio di quello che sembra (la versione classica, costruttore privato, campo statico TheInstance NON va bene)
7 Non vogliamo/possiamo usare new Ovviamente, solo per quanto riguarda le classi che implementano le astrazioni/interfacce che ci interessano Va benissimo istanziare le collection, le classi di sistema e quelle appartenenti alla stessa componente Vari approcci Factory (tipicamente un Singleton, statico) Service Locator Dependency Injection
8 Situazione iniziale Bulk istanzia ES Assembly (DLL o EXE) Una componente è un unità indipendete di: produzione distribuzione/acquisizione In.NET questo vuol dire: componente=assembly
9 Un assembly, chiaramente, non basta usa/ dipende da IES implementa Bulk ES ES Possiamo astrarre introducento l interfaccia IES Nota: Bulk non ha bisogno di creare degli ES, ma gliene serve uno (rimuoveremo dopo questa semplificazione, che per Bulk è assolutamente ragionevole ma in altri scenari potrebbe non esserlo)
10 Ci siamo quasi usa/ dipende da IES implementa Bulk c d a ES x ES y z
11 Ma se Bulk dovesse creare degli IES? usa/dipende da IES IES Factory implementa Bulk ES istanzia ESF ES istanzia ES F Dimentichiamoci le altre classettine per semplicità
12 e consideriamo solo le dipendenze fra assembly IES IES Factory Bulk ES ESF ES ES F
13 Un esempio: il Testing Assert Unit Test SUT
14 Stub e Mock Assert Stub Unit Test SUT Mock Ok Se il costruttore istanzia gli oggetti o gli oggetti sono dei Singleton (statici)...come posso sostituirci degli stub/mock?
15 Cose ovvie Per testare un metodo (d istanza) la classe che lo contiene va istanziata Se il costruttore fa troppo può diventare difficile o troppo lento (connessione di rete, DB...) La presenza di inizializzatori/campi statici peggiora le cose Globali alla VM, non all applicazione Ogni unit-test deve, logicamente, istanziare una (porzione) di nuova app Devono fare/contenere cose diverse durante il testing L ordine di esecuzione diventa importante I test non possono essere lanciati in parallelo!
16 Classi (facilmente) testabili La responsabilità di creare degli oggetti va separata! Nei costruttori, invece di istanziare gli oggetti che servono, si richiedono tali oggetti Disinteressandosi sul come vengono istanziati si richiedono solo gli oggetti che servono direttamente (quelli che vengono copiati nei campi) Idealmente, il corpo di un costruttore dovrebbe essere una sequenza di assegnazioni Ricevere x e poi fare this.f = x.qualcosa... è molto sospetto
17 Principio di minima conoscenza (anche: Legge di Demetra) Supponete di dover pagare una birra. Al barista date: i soldi oppure il portafoglio, in modo che si prenda i soldi?
18 Equivalente in codice public void Purchase(Customer c) { Money m = c.getwallet().getmoney(); this.recordsale(, m); } Nel testing: Money m = new Money(5); Wallet w = new Wallet(m); Customer c = new Customer(w); Goods g = g.purchase(c); //...assert...
19 Classe Factory (singleton alla GoF ) E già qualcosa, Minimizza i cambiamenti (una sola new, invece di tante sparse qua e là) ma non risolve: Le classi dipendono dalla Factory invece che dalle implementazioni, ma lei dipende da loro... per transitività siamo al punto di partenza E statica (se non lo fosse, chi la istanzierebbe e come? Si sposterebbe solo il problema...) il singleton non static va benissimo ne parliamo dopo
20 Service Locator (Factory non statica?) Scarica la responsabilità di istanziare gli oggetti su un oggetto, il Service Locator (o Registry, Context, Manager, Environment,...), che si passa alle classi che devono istanziare interfacce Le vere dipendenze sono nascoste dal fatto che ogni classe dipende dal Service Locator Possibile, ma difficile il testing: cosa ridefinisco/modifico nel Service Locator per creare gli stub? Ogni classe dipende dal Service Locator, che sa istanziare tutte le classi, quindi ogni classe dipende da tutte le altre...
21 Dependency Injection Esistono vari tipi di DI, consideriamo la constructor injection (è quella da usare di default ) che inietta tramite i costruttori Altre sono la method, property, field,... L idea è estremamente semplice: i costruttori richiedono gli oggetti che servono direttamente, invece di crearli
22 Nel nostro esempio: public Bulk Sender(string footer) { this._ sender = new Sender(); this._footer = footer; } public Bulk Sender(I Sender sender, string footer) { } this._ sender = sender; this._footer = footer;
23 Il testing diventa facile! [TestFixture] public class TestBulk Sender { [Test] public void TestSendMail SenderSucceeds() { var bulk = new Bulk Sender(mock_ok, "bla bla"); bulk.send (new List<string> { "a@a.com", "b@b.com" }, "hi!"); } } [Test] [ExpectedException(typeof(Exception))] public void TestSendMail SenderFails() { var bulk = new Bulk Sender(stub_fails, "bla bla"); bulk.send (new List<string> { "a@a.com", "b@b.com" }, "hi!"); }
24 Nei test è ragionevole Notate che: Usare new: non c è nulla di male nel fatto che il codice di test dipenda da ciò che sta testando Testare classi non pubbliche (i dettagli di come vedere cose internal li vedremo quando parleremo di Unit Testing) Per TAP i test saranno gli stessi per tutte le diverse implementazioni, quindi dovrete istanziare interfacce (come spiegheremo nel seguito) Il fatto che il codice sia più facilmente testabile è solo uno dei vantaggi della DI, non l unico motivo di usarla
25 Dubbi (classici) Ma se ho 10 campi il costruttore deve richiedere 10 oggetti? Non sono troppi? Salvo eccezioni, sì deve richiedere 10 parametri Eccezioni: le classi valore (o le collection), ovvero le foglie del grafo degli oggetti, si possono istanziare senza problemi (poiché non hanno dipendenze a loro volta) Se i parametri sono troppi, è probabile che la classe abbia troppe responsabilità, ma ce le aveva già prima di usare la DI! La DI rende esplicite le dipendenze, non le diminuisce e non le aumenta Quindi, se una classe di basso livello ha bisogno, diciamo, di un logger, lo devo passare lungo tutta la catena? NO! Tipico fraintendimento... vediamo un esempio
26 Tradizionalmente...
27 Con la DI...
28 In codice... (versione tradizionale con singleton) DB.Init("..."); // inizializza il singleton Logger.Init(); // idem, l'ordine e` importante! var bulk = new Bulk Sender(); // apparentemente indipendente da sopra // ma se il Logger non e` stato inizializzato // Sender (istanziato da Bulk Sender) // si schianta
29 Con la DI... var db = new DB(...); var logger = new Logger(db); var sender = new Sender(logger); var bulk = new Bulk Sender( Sender, ""); // sbagliando l'ordine, la compilazione // fallisce! :-)
30 DI container Siccome le dipendenze sono esplicite, la composizione degli oggetti a volte si può automatizzare E quello che fanno i container DI Si programmano associando implementazioni a interfacce: Via codice, max flessibilità e controllo statico sui tipi, ma la riconfigurazione richiede ricompilazione Via file di configurazione (tipicamente XML) E poi loro gestiscono la creazione e lo scope (singleton, factory o container)
31 Configurazione Autofac (via codice) var builder = new ContainerBuilder(); builder.register< sender>().as<i sender>(); builder.register<bulk sender>(); // sto barando un pochino (assumo che l'unico // argomento sia l'i sender) IContainer container = builder.build(); var bulk = container.resolve<bulk sender>(); bulk.send (new List<string>() {"a@a.com"}, "");
32 Senza barare... ( ma usando le che dobbiamo ancora vedere a lezione) var builder = new ContainerBuilder(); builder.register< sender>().as<i sender>(); builder.register(c => new Bulk Sender( c.resolve<i sender>(), "ciao" ) );
33 Scope degli oggetti Singleton (è il default): viene creato un solo oggetto Si abilita con SingletonScoped() sul builder Factory: a ogni richiesta viene creato un nuovo oggetto Container: viene creato un oggetto per container I container possono essere innestati, viene gestita la distruzione deterministica via IDisposable Contextual: simile a container, viene creato un oggetto per contesto
34 Configurazione via XML builder.registermodule(new ConfigurationSettingsReader("autofac", "pippo.xml")); <?xml version="1.0" encoding="utf-8"?> <configuration> <configsections> <section name="autofac" type="autofac.configuration.sectionhandler, Autofac"/> </configsections> <autofac> <components> <component type=" er. sender, er" service=" erinterfaces.i sender, erInterfaces" /> <component type=" er.bulk sender, er" scope="factory"> <parameters> <parameter name="footer" value="ciao" /> </parameters> </component> </components> </autofac> </configuration>
35 Altro dubbio classico Ma si devono per forza creare tutti gli oggetti all inizio? Subito dopo la prima chiamata a Resolve? No! All inizio vengono creati solo gli oggetti necessari a far partire il sistema Se una classe ha bisogno di creare istanze (di intefacce) riceverà nel costruttore un oggetto Factory (di tipo interfaccia) per crearle NON si passa il container in giro (altrimenti sarebbe un Service Locator) Vediamo un esempio...
36 Esempio di (non static) Factory public class C { private readonly IPointFactory _pointfactory; private readonly ILineFactory _linefactory; public C(IPointFactory pointfactory, ILineFactory linefactory) { this._pointfactory = pointfactory; this._linefactory = linefactory; } public void DoSomething(/*... */) { //... ILine newline = CreateLine(/*... */); //... } private ILine CreateLine(int x0, int y0, int x1, int y1) { IPoint p0 = this._pointfactory.create(x0, y0); IPoint p1 = this._pointfactory.create(x1, y1); return this._linefactory.create(p0, p1); } }
37 Terminologia Va di moda parlare di: Inversion of Control e Dependency Injection e non mancano: le implementazioni di IoC/DI container Autofac, Castle of Windsor, Guice, NanoContainer, Ninject, PicoContainer, Spring, Spring.NET, Unity, Winter4net la confusione: IoC e DI sono la stessa cosa?
38 IoC e DI In questi contesti, sì; sono la stessa cosa (IoC container = DI container), ma IoC è un concetto più generale Ogni framework usa IoC (quando associate un azione a un pulsante in una GUI lo state usando) DI, pur apparentemente fuorviante, è il nome più corretto sebbene Autofac si autodefinisca a fresh approach to IoC (uff!)
39 Approfondimenti/crediti The clean code talks... (ce ne sono diversi) by Miško Hevery Inversion of Control Containers and the Dependency Injection pattern by Martin Fowler
Progettazione : Design Pattern Creazionali
Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Design Pattern: Storia Parte b versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
DettagliMac Application Manager 1.3 (SOLO PER TIGER)
Mac Application Manager 1.3 (SOLO PER TIGER) MacApplicationManager ha lo scopo di raccogliere in maniera centralizzata le informazioni piu salienti dei nostri Mac in rete e di associare a ciascun Mac i
DettagliCapitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti
Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta
DettagliCorso di Informatica
Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down
DettagliGuida all uso di Java Diagrammi ER
Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con
DettagliUso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012
Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono
DettagliUnit Testing. Giovanni Lagorio lagorio@disi.unige.it
Unit Testing Giovanni Lagorio lagorio@disi.unige.it Licenza Questi lucidi sono rilasciati sotto la licenza Creative Commons Attribuzione-Non commerciale-non opere derivate 3.0 Unported. Per leggere una
DettagliFunzioni in C. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni
DettagliRegistratori di Cassa
modulo Registratori di Cassa Interfacciamento con Registratore di Cassa RCH Nucleo@light GDO BREVE GUIDA ( su logiche di funzionamento e modalità d uso ) www.impresa24.ilsole24ore.com 1 Sommario Introduzione...
DettagliModulo 4: Ereditarietà, interfacce e clonazione
Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo
DettagliInizializzazione, Assegnamento e Distruzione di Classi
Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della
DettagliIl web server Apache Lezione n. 3. Introduzione
Procurarsi ed installare il web server Apache Introduzione In questa lezione cominciamo a fare un po di pratica facendo una serie di operazioni preliminari, necessarie per iniziare a lavorare. In particolar
DettagliEsercizi su. Funzioni
Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità
DettagliMANUALE PARCELLA FACILE PLUS INDICE
MANUALE PARCELLA FACILE PLUS INDICE Gestione Archivi 2 Configurazioni iniziali 3 Anagrafiche 4 Creazione prestazioni e distinta base 7 Documenti 9 Agenda lavori 12 Statistiche 13 GESTIONE ARCHIVI Nella
DettagliSoftware per Helpdesk
Software per Helpdesk Padova - maggio 2010 Antonio Dalvit - www.antoniodalvit.com Cosa è un helpdesk? Un help desk è un servizio che fornisce informazioni e assistenza ad utenti che hanno problemi nella
DettagliINSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)
INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014) Se la Suite risulta già stata installata e quindi sono già presenti le configurazioni di seguito indicate, si prega di andare direttamente alla fine
DettagliIL MIO PRIMO SITO: NEWS
Pagina 1 IL MIO PRIMO SITO: NEWS Sommario IL MIO PRIMO SITO: NEWS...1 Introduzione...2 I Contenitori...2 Creo un Contenitore...3 I Tracciati...4 Creo le Notizie...6 Inserisco il Testo...6 Inserisco un
Dettagli12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
DettagliMonoDay 2010 FSGateway Ing. Torello Querci
MonoDay 2010 FSGateway Ing. Torello Querci Resp. Architetture SW - Negens S.r.l. querci@negens.com 29 Aprile 2010, Salerno Agenda Introduzione FUSE e mono-fuse Come funziona Cosa supporta Esempi d'uso
DettagliModulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress
Copyright Andrea Giavara wppratico.com Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress 1. Il pannello amministrativo 2. I dati importanti 3. Creare il database - Cpanel - Plesk
DettagliCreare un sito Multilingua con Joomla 1.6
Creare un sito Multilingua con Joomla 1.6 Istruzioni Vai a: navigazione, ricerca Testo originale: http://docs.joomla.org/language_switcher_tutorial_for_joomla_1.6 Questa guida è valida sia per Joomla 1.6
DettagliFPf per Windows 3.1. Guida all uso
FPf per Windows 3.1 Guida all uso 3 Configurazione di una rete locale Versione 1.0 del 18/05/2004 Guida 03 ver 02.doc Pagina 1 Scenario di riferimento In figura è mostrata una possibile soluzione di rete
DettagliOggetti Lezione 3. aspetti generali e definizione di classi I
Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione
DettagliCOSTER. Import/Export su SWC701. SwcImportExport
SwcImportExport 1 Con SWC701 è possibile esportare ed importare degli impianti dal vostro database in modo da tenere aggiornati più Pc non in rete o non facente capo allo stesso DataBase. Il caso più comune
DettagliDomande e Risposte ALLEGATI CLIENTI E FORNITORI. DATALOG Soluzioni Integrate
KING Domande e Risposte ALLEGATI CLIENTI E FORNITORI DATALOG Soluzioni Integrate - 2 - Domande e Risposte Allegati Clienti e Fornitori Sommario Premessa.... 3 Introduzione... 4 Elenco delle domande...
Dettagliprogecad NLM Guida all uso Rel. 10.2
progecad NLM Guida all uso Rel. 10.2 Indice Indice... 2 Introduzione... 3 Come Iniziare... 3 Installare progecad NLM Server... 3 Registrare progecad NLM Server... 3 Aggiungere e attivare le licenze...
DettagliOffice Web Components in programmi C# da http://escher07.altervista.org
Office Web Components in programmi C# da http://escher07.altervista.org Generalità L obiettivo è realizzare un programma C# che utilizzando il componente Web Pivot permetta di ottenere un risultato come
DettagliIl calendario di Windows Vista
Il calendario di Windows Vista Una delle novità introdotte in Windows Vista è il Calendario di Windows, un programma utilissimo per la gestione degli appuntamenti, delle ricorrenze e delle attività lavorative
DettagliArchitettura 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
DettagliIL MODELLO CICLICO BATTLEPLAN
www.previsioniborsa.net 3 Lezione METODO CICLICO IL MODELLO CICLICO BATTLEPLAN Questo modello ciclico teorico (vedi figura sotto) ci serve per pianificare la nostra operativita e prevedere quando il mercato
DettagliProgrammazione a Oggetti Modulo B
Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione
DettagliSoftware di interfacciamento sistemi gestionali Manuale di installazione, configurazione ed utilizzo
01595 Software di interfacciamento sistemi gestionali Manuale di installazione, configurazione ed utilizzo INDICE DESCRIZIONE DEL SOFTWARE DI INTERFACCIAMENTO CON I SISTEMI GESTIONALI (ART. 01595) 2 Le
DettagliSiti 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
DettagliGuida Rapida all uso del License Manager di ROCKEY4Smart (V. 1.0.10.724)
Guida Rapida all uso del License Manager di ROCKEY4Smart (V. 1.0.10.724) Procedo con un esempio: voglio proteggere una applicazione (nell esempio Blocco Note di Windows: notepad.exe) per distribuirla con
DettagliIl sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.
SH.MedicalStudio Presentazione SH.MedicalStudio è un software per la gestione degli studi medici. Consente di gestire un archivio Pazienti, con tutti i documenti necessari ad avere un quadro clinico completo
DettagliGPL 3 e Creative Commons Le licenze per la vostra libertà. Di Martino Martyn Colucci
GPL 3 e Creative Commons Le licenze per la vostra libertà Di Martino Martyn Colucci Che cos'è una licenza? Quando acquistate un prodotto, questa viene accompagnata da una licenza. Una licenza è un accordo
DettagliSoluzione dell esercizio del 2 Febbraio 2004
Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo
Dettaglirisulta (x) = 1 se x < 0.
Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente
DettagliAlgoritmi e strutture dati. Codici di Huffman
Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per
DettagliInvio SMS. DM Board ICS Invio SMS
Invio SMS In questo programma proveremo ad inviare un SMS ad ogni pressione di uno dei 2 tasti della DM Board ICS. Per prima cosa creiamo un nuovo progetto premendo sul pulsante (Create new project): dove
DettagliObject Oriented Software Design
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Object Oriented Software Design Corso di Tecniche di Programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria
DettagliProgrammazione a Oggetti Lezione 10. Ereditarieta
Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare
DettagliElementi di Psicometria con Laboratorio di SPSS 1
Elementi di Psicometria con Laboratorio di SPSS 1 12-Il t-test per campioni appaiati vers. 1.2 (7 novembre 2014) Germano Rossi 1 germano.rossi@unimib.it 1 Dipartimento di Psicologia, Università di Milano-Bicocca
DettagliDESIGN PATTERNS Parte 6. State Proxy
DESIGN PATTERNS Parte 6 State Proxy STATE Il Design Pattern State nasce dall'esigenza di poter gestire gli stati di una classe senza dover usare dei costrutti come gli Enum e quindi delle switch. Prendiamo
DettagliCOMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO. 2015 e PARAMETRI2015
COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO. 2015 e PARAMETRI2015 Vicenza, 3 giugno 2015 Gentile cliente, si ricorda che a partire dall aggiornamento PROFIS 2011.1 è stato automatizzato
DettagliManuale servizio Webmail. Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8
Manuale servizio Webmail Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8 Introduzione alle Webmail Una Webmail è un sistema molto comodo per consultare la
DettagliAllocazione dinamica della memoria - riepilogo
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della
DettagliE-mail: infobusiness@zucchetti.it. Gestione Filtri. InfoBusiness 2.8 Gestione Filtri Pag. 1/ 11
Gestione Filtri InfoBusiness 2.8 Gestione Filtri Pag. 1/ 11 INDICE Indice...2 1. GESTIONE DEI FILTRI...3 1.1. Filtri fissi...3 1.2. Filtro parametrico...5 1.3. Funzione di ricerca...6 2. CONTESTI IN CUI
DettagliTest di unità con JUnit4
Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso
DettagliGENERAZIONE PREVENTIVI
GENERAZIONE PREVENTIVI Per la creazione di un nuovo preventivo si fa sempre riferimento ad un Tipo Preventivo, identificato da una certa Sigla. Nell esempio seguente vediamo come il preventivo abbia impostata
DettagliManuale Utente Albo Pretorio GA
Manuale Utente Albo Pretorio GA IDENTIFICATIVO DOCUMENTO MU_ALBOPRETORIO-GA_1.4 Versione 1.4 Data edizione 04.04.2013 1 TABELLA DELLE VERSIONI Versione Data Paragrafo Descrizione delle modifiche apportate
DettagliUniversità per Stranieri di Siena Livello A1
Unità 20 Come scegliere il gestore telefonico CHIAVI In questa unità imparerai: a capire testi che danno informazioni sulla scelta del gestore telefonico parole relative alla scelta del gestore telefonico
DettagliGuida Migrazione Posta Elettronica @uilpa.it. Operazioni da effettuare entro il 15 gennaio 2012
Guida Migrazione Posta Elettronica @uilpa.it Operazioni da effettuare entro il 15 gennaio 2012 CONTENUTI PREMESSA ACCESSO AL PROPRIO ACCOUNT SCHERMATA INIZIALE (Desktop) SALVATAGGIO CONTATTI (2) GESTIONE
DettagliGli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori
Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine
DettagliLA GESTIONE DELLE VISITE CLIENTI VIA WEB
LA GESTIONE DELLE VISITE CLIENTI VIA WEB L applicazione realizzata ha lo scopo di consentire agli agenti l inserimento via web dei dati relativi alle visite effettuate alla clientela. I requisiti informatici
DettagliPROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1
PROGRAMMA GESTIONE TURNI MANUALE UTENTE INDICE 1 PREMESSA 3 2 COMANDI COMUNI 3 3 SEDI 3 4 FESTIVITÀ 4 5 PERIODI TURNI 4 6 COD. TURNI 6 7 TURNI SPORTIVI 9 8 COD. EQUIPAGGI 9 9 DISPONIBILITÀ 10 10 INDISPONIBILITÀ
DettagliSe invece si usa come Client non serve l interfaccia e si possono usare anche le applicazioni per Smartphone.
ECHOLINK ( Italink ) Echolink è un sistema Voip riservato ai radioamatori che interfaccia la radio con Internet, per fare un nodo servono: il Software, l interfaccia da collegare al PC, e una linea telefonica
DettagliCreare una nuova spedizione personalizzata.
Gestione spedizioni La piattaforma ecommerce compry.it offre una gestione estremamente potente dei costi di spedizione da applicare al cliente che effettua acquisti. Il sistema, oltre al classico calcolo
DettagliSoftware standard Alpi Label Ver. 2.2.0.0
Pag. 1 di 16 Manuale utente Software standard Alpi Label Ver. 2.2.0.0 Pag. 2 di 16 1 SOMMARIO Sommario 1 Sommario... 2 2 Specifiche Tecniche... 3 3 Maschera Principale... 4 4 Funzioni menù... 7 Pag. 3
DettagliGoogle Apps for Education F.A.Q. a cura di Luigi Parisi Servizio Marconi T.S.I. - USR Emilia-Romagna. aggiornata al 18 maggio 2015.
Google Apps for Education F.A.Q. a cura di Luigi Parisi Servizio Marconi T.S.I. - USR Emilia-Romagna aggiornata al 18 maggio 2015 Premessa Questa guida è un documento aperto in costante aggiornamento.
DettagliProgetto di simulazione molecolare per il corso di Complementi di algoritmi A.A. 2005-06
Progetto di simulazione molecolare per il corso di Complementi di algoritmi A.A. 2005-06 13 febbraio 2006 1 Descrizione Il progetto si compone delle seguenti fasi: 1. caricamento di soluzioni in formato
DettagliFile, Modifica, Visualizza, Strumenti, Messaggio
Guida installare account in Outlook Express Introduzione Questa guida riguarda di sicuro uno dei programmi maggiormente usati oggi: il client di posta elettronica. Tutti, ormai, siamo abituati a ricevere
DettagliL amministratore di dominio
L amministratore di dominio Netbuilder consente ai suoi clienti di gestire autonomamente le caselle del proprio dominio nel rispetto dei vincoli contrattuali. Ciò è reso possibile dall esistenza di un
DettagliIL BUDGET 04 LE SPESE DI REPARTO & GENERALI
IL BUDGET 04 LE SPESE DI REPARTO & GENERALI Eccoci ad un altra puntata del percorso di costruzione di un budget annuale: i visitatori del nostro sito www.controllogestionestrategico.it possono vedere alcuni
DettagliTale attività non è descritta in questa dispensa
Fondamenti di informatica Oggetti e Java ottobre 2014 1 Nota preliminare L installazione e l uso di Eclipse richiede di aver preliminarmente installato Java SE SDK Tale attività non è descritta in questa
DettagliI Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo
I Thread 1 Consideriamo due processi che devono lavorare sugli stessi dati. Come possono fare, se ogni processo ha la propria area dati (ossia, gli spazi di indirizzamento dei due processi sono separati)?
DettagliIl sistema monetario
Il sistema monetario Premessa: in un sistema economico senza moneta il commercio richiede la doppia coincidenza dei desideri. L esistenza del denaro rende più facili gli scambi. Moneta: insieme di tutti
DettagliL Open Source un mondo che forse dovresti conoscere? Viaggio alla scoperta dell open source e le sue caratteristiche.
L Open Source un mondo che forse dovresti conoscere? Viaggio alla scoperta dell open source e le sue caratteristiche. Le licenze Cosa è la licenza? licenza o contratto d'uso è il contratto con il quale
Dettagli13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliLa VPN con il FRITZ!Box Parte II. La VPN con il FRITZ!Box Parte II
La VPN con il FRITZ!Box Parte II 1 Introduzione In questa mini-guida mostreremo com è possibile creare un collegamento su Internet tramite VPN(Virtual Private Network) tra il FRITZ!Box di casa o dell ufficio
DettagliLE MEDIE MOBILI CENTRATE
www.previsioniborsa.net 2 lezione METODO CICLICO LE MEDIE MOBILI CENTRATE Siamo rimasti a come risolvere il precedente problema del ritardo sulle medie mobili Quindi cosa dobbiamo fare? Dobbiamo semplicemente
DettagliProcedura di installazione di Xubuntu 8.10 su un PC
Procedura di installazione di Xubuntu 8.10 su un PC Bonacina Alberto Prima di tutto si deve inserire il Live CD nel computer, riavviare il computer e fare in modo che nelle preferenze del boot ci sia impostata
Dettagli13. Campi vettoriali
13. Campi vettoriali 1 Il campo di velocità di un fluido Il concetto di campo in fisica non è limitato ai fenomeni elettrici. In generale il valore di una grandezza fisica assegnato per ogni punto dello
DettagliMODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it
MODELLO CLIENT/SERVER Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it POSSIBILI STRUTTURE DEL SISTEMA INFORMATIVO La struttura di un sistema informativo
DettagliE' sempre valido il comando che si usa anche con Outlook Express e con Windows Mail: shift più control più V.
Microsoft Outlook 2007. Di Nunziante Esposito. `*************` Decima ed ultima parte: Varie. `***********` Dopo aver impostato al meglio le opzioni ed il layout di questo browser, e dopo le indicazioni
DettagliGuida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta
Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta. Configurazione Account di posta dell Università di Ferrara con il Eudora email Eudora email può
DettagliI TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.
I TUTORI Indice Del Manuale 1 - Introduzione al Manuale Operativo 2 - Area Tutore o Area Studente? 3 - Come creare tutti insieme i Tutori per ogni alunno? 3.1 - Come creare il secondo tutore per ogni alunno?
DettagliVINCERE AL BLACKJACK
VINCERE AL BLACKJACK Il BlackJack è un gioco di abilità e fortuna in cui il banco non può nulla, deve seguire incondizionatamente le regole del gioco. Il giocatore è invece posto continuamente di fronte
DettagliNote su quicksort per ASD 2010-11 (DRAFT)
Note su quicksort per ASD 010-11 (DRAFT) Nicola Rebagliati 7 dicembre 010 1 Quicksort L algoritmo di quicksort è uno degli algoritmi più veloci in pratica per il riordinamento basato su confronti. L idea
DettagliSistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate
MODULO BASE Quanto segue deve essere rispettato se si vuole che le immagini presentate nei vari moduli corrispondano, con buona probabilità, a quanto apparirà nello schermo del proprio computer nel momento
DettagliVisual basic base Lezione 01. L'ambiente di sviluppo
L'ambiente di sviluppo L'ambiente di sviluppo Visual basic è un linguaggio di programmazione Microsoft. In questo corso prenderemo in considerazione, l'ultima versione. net di questo linguaggio. Microsoft
DettagliPOSTA ELETTRONICA Per ricevere ed inviare posta occorrono:
Outlook parte 1 POSTA ELETTRONICA La posta elettronica è un innovazione utilissima offerta da Internet. E possibile infatti al costo di una telefonata urbana (cioè del collegamento telefonico al nostro
DettagliTipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
DettagliFIRESHOP.NET. Gestione del taglia e colore. www.firesoft.it
FIRESHOP.NET Gestione del taglia e colore www.firesoft.it Sommario SOMMARIO Introduzione... 3 Configurazione iniziale... 5 Gestione delle varianti... 6 Raggruppamento delle varianti... 8 Gestire le varianti
DettagliInformatica per la comunicazione" - lezione 13 -
Informatica per la comunicazione" - lezione 13 - Funzionamento di una password" 1: l utente tramite il suo browser richiede l accesso a una pagina del server; 2: il server richiede il nome utente e la
DettagliGUIDA UTENTE MONEY TRANSFER MANAGER
GUIDA UTENTE MONEY TRANSFER MANAGER (vers. 1.0.2) GUIDA UTENTE MONEY TRANSFER MANAGER (vers. 1.0.2)... 1 Installazione... 2 Prima esecuzione... 5 Login... 7 Funzionalità... 8 Anagrafica... 9 Registrazione
DettagliManuale d'uso. Manuale d'uso... 1. Primo utilizzo... 2. Generale... 2. Gestione conti... 3. Indici di fatturazione... 3. Aliquote...
Manuale d'uso Sommario Manuale d'uso... 1 Primo utilizzo... 2 Generale... 2 Gestione conti... 3 Indici di fatturazione... 3 Aliquote... 4 Categorie di prodotti... 5 Prodotti... 5 Clienti... 6 Fornitori...
DettagliAmministrazione gruppi (Comunità)
Amministrazione gruppi (Comunità) Guida breve per il docente che amministra il gruppo Premessa Di regola i gruppi sono creati all interno della Scuola. Nel caso in cui vi fosse la necessità di aprire un
DettagliCorso Eclipse. Prerequisiti. 1 Introduzione
Corso Eclipse 1 Introduzione 1 Prerequisiti Uso elementare del pc Esecuzione ricerche su Internet Esecuzione download Conoscenza elementare della programmazione 2 1 Cos è Eclipse Eclipse è un IDE (Integrated
DettagliVlan Relazione di Sistemi e Reti Cenni teorici
Cosa sono le Vlan? Vlan Relazione di Sistemi e Reti Cenni teorici Le Vlan sono un tipo di rete particolare che permettono di creare tante reti logiche a partire da una singola rete fisica. Questo significa
DettagliEsercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che:
Teoria dei Giochi, Trento, 2004/05 c Fioravante Patrone 1 Teoria dei Giochi Corso di laurea specialistica: Decisioni economiche, impresa e responsabilità sociale, A.A. 2004/05 Soluzioni degli esercizi
DettagliFASCI DI RETTE. scrivere la retta in forma esplicita: 2y = 3x + 4 y = 3 2 x 2. scrivere l equazione del fascio di rette:
FASCI DI RETTE DEFINIZIONE: Si chiama fascio di rette parallele o fascio improprio [erroneamente data la somiglianza effettiva con un fascio!] un insieme di rette che hanno tutte lo stesso coefficiente
DettagliRegione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da
ARPA Fonte Dati Regione Toscana Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.0 Data emissione 06/08/13 Stato DRAFT 1 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 2 Sommario
DettagliJoomla! 2.5:Utenti e permessi - Il wiki di Joomla.it
Pagina 1 di 6 Joomla! 2.5:Utenti e permessi Da Il wiki di Joomla.it. Traduzione (http://cocoate.com/it/j25it/utenti) dal libro Joomla! 2.5 - Beginner's Guide (http://cocoate.com/j25/users-permissions)
Dettagliwww.filoweb.it STAMPA UNIONE DI WORD
STAMPA UNIONE DI WORD Molte volte abbiamo bisogno di stampare più volte lo stesso documento cambiando solo alcuni dati. Potremmo farlo manualmente e perdere un sacco di tempo, oppure possiamo ricorrere
DettagliExcel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it
Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo
DettagliCome si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino.
www.playnet.it agg. Documento 1/03/2007 REGOLE DEL CLIENT Le regole del client sono un sistema di smistamento dei messaggi (arrivati) fra le varie cartelle di posta presenti sul server. Possono essere
DettagliUn modello matematico di investimento ottimale
Un modello matematico di investimento ottimale Tiziano Vargiolu 1 1 Università degli Studi di Padova Liceo Scientifico Benedetti Venezia, giovedì 30 marzo 2011 Outline 1 Investimento per un singolo agente
Dettagli