Skip to content

ANTIOCHMISSIONASIA.INFO

Condividi i file con i tuoi amici. Blog italiano per studenti in cerca di archivi.

DA ISI IL FORMATO PLAIN TEXT SCARICA


    Come importare i dati da Web of Science sul Sito docente Dalla successiva finestra “Send to file” selezionate, a fianco di “File format”, la voce “Plain text”. Tornate alla pagina “Pubblicazioni” del Sito docente e cliccate su “ISI – Web of. Download "Importare da Sito Docente MIUR, PubMed, Web of Knolwdge (ISI), ecc. selezionare il file da importare, il formato (BibTeX, per il sito docente MIUR ); 6 Esempio di come importare da Web of Knowledge (ISI) a) Accedere a Web of pagina ed esportare i risultati selezionando dalla tendina Save to Plain Text . ISI Web of Science e Scopus Ezio Tarantino Area InfoSapienza (2) al salvataggio (in formato testo) dell'elenco delle proprie pubblicazioni Tornare alla su SAVE FILE, dopo aver selezionato, dal menu a tendina, l'opzione “Plain text ”. SCARICARE DA ISI IL FORMATO PLAIN TEXT - E' possibile importare 20 pubblicazioni alla volta a. File Extensions Libreria di estensione dei. DA ISI IL FORMATO PLAIN TEXT SCARICA - Vedi tutte le risorse ReviverSoft. Esportare dati da Excel Per esportare i fogli di Excel occorre.

    Nome: da isi il formato plain text
    Formato:Fichier D’archive
    Sistemi operativi: MacOS. iOS. Windows XP/7/10. Android.
    Licenza:Solo per uso personale
    Dimensione del file:64.82 Megabytes

    DA ISI IL FORMATO PLAIN TEXT SCARICA

    Vedi tutte le risorse ReviverSoft. Esportare dati da Excel Per esportare i fogli di Excel occorre salvarli in altri formati. Guida all uso di.

    La prima barra è la barra del titolo, formsto troviamo indicato. Creazione di percorsi su Colline Veronesi Creazione di percorsi su Tect Veronesi Per inserire i dati nel portale Colline Veronesi accedere all indirizzo: To make this website work, we log user data and share it with processors. Battery Optimizer Battery Optimizer supporto. ZOTERO, un programma gratuito Ricerche, citazioni e bibliografie con Zotero Zotero è un estensione di Firefox che consente di raccogliere e gestire risorse bibliografiche e accademiche.

    Di seguito le Dettagli. Privacy Reviver Protezione completa della Privacy.

    Di conseguenza, se ad esempio, il costruttore Sto arrivando! Discorso software. Diffidate di chi vi dice che i costruttori usano rFactor, o Assetto Corsa, o iRacing. I costruttori, usano di solito rFactor PRO. Come mai? Cosa usano?

    Si e no. Andiamo con ordine. Cominciamo da rFactor PRO. Questo software è ormai seguito e realizzato da una società indipendente dagli ISI, creatori di rF originale. Di solito mathlab e simulink.

    Questi sono programmi ingegneristici di alta fedeltà e grande complessità, che vengono usati dagli ingegneri per creare un modello matematico che simula diversi elementi di un veicolo. Essendo questi dei software standard usati dalla stragrande maggioranza dei centri di sviluppo e progettazione delle case, permettono di implementare diversi sistemi in modo completamente separato ed autonomo. Sono sicuro che alcuni di voi si chiedono perché non rilasciamo un file.

    Semplicemente ci sono problemi di multiplayer, parità di sensazioni e tempi sul giro fra utenti etc etc… si apre proprio la scatola di pandora. Nota importante.

    Solo i costruttori di auto stradali o da gara hanno accesso a rF PRO, e qualche altra piccola realtà professionale, molto spinta. Risposta semplice: Ni. Almeno non sempre. Quando dico valori verificabili, non intendo semplici forze G, la velocità o altro, ma dati ben più complicati da ottenere e tradotti subito in un formatto che gli ingegneri possono usare in tutti i loro calcoli.

    Noi ottimizziamo il codice in modo da poter inserire e provare più valori possibili, non da poter tirare fuori risultati dettagliati, o giri di dati complessi. Faccio un esempio semplice da capire. Il risultato è estremamente vicino alla realtà come verificato anche dal confronto di telemetrie reali e virtuali. Gli ingegneri devono ignorare questi valori. Noi facciamo il tutto con righe di codice.

    Loro fanno più o meno lo stesso risultato non sto esagerando ma con righe di codice. Il loro vantaggio è che poi possono prendere quelle righe di codice, inserirle in una ECU, posizionarla nella macchina vera e… funziona! Ci sono anche casi contrari. Spesso i dati per le gomme, arrivano direttamente dal costruttore michelin, pirelli, bridgestone, etc , come curve realizzate da equazioni che riprendono i dati registrati da prove vere nel modo più vicino possibile.

    Tuttavia, essendo curve da equazioni matematiche, a certi valori estremi, possono seguire andature non realistiche.

    Questo poco interessa agli ingegneri, perché spesso loro devono ottenere risultati in un range ben specifico di utilizzo, e quello che succede prima o dopo quel range, non importa.

    Si le loro motion platform sembrano e lo sono spettacolari… ma hanno più un uso pubblicitario e di immagine, che un uso pratico. Innanzitutto anche le migliori in assoluto, non riescono a simulare le forze G di una auto vera.

    Possono dare un alto valore G di picco, ma poi sustained, cioè sostenuto, non possono superare 1G, per forza di cose. Oggi, una crossover con gomme normalissime, supera 1G in fase di frenata, figuriamoci le auto da gara… Inoltre, come spiegavo sopra, i simulatori professionali servono per verificare soluzioni ingegneristiche.

    Serve un pilota che riesca a effettuare tanti giri nel modo più preciso possibile. Una guida meno precisa, causata dai movimenti di una motion platform, è controproducente per il loro lavoro, e spesso, molto spesso, dopo il girato dei video pubblicitari, il motion platform viene spento e il pilota continua a girare senza forze esterne di disturbo.

    Sicuramente a qualcuno la mia risposta sembrerà poco modesta. A livello ingegneristico un simulatore professionale è ben più preciso di un gioco. A livello di verifica di soluzioni sul setup o nuovi componenti, il simulatore professionale vince ancora. A livello di guida pura… ce la giochiamo… e su qualche situazione estrema, vinciamo pure. Infine ricordatevi anche il famoso detto fra ingegneri. Cosa è l'HTTP 2. Richiesta HTTP 2. Risposta HTTP 3.

    Esercizi su HTTP. Preparazione dell'ambiente. Cosa è l'HTTP. Nota -v : esegue il comando aumentando l'output prodotto. Richiesta HTTP. Risposta HTTP. Nella parte in basso della pagina trovi invece indicati i programmi in grado di aprire quel file sul computer con Windows, Mac e Linux. Una volta scelto il software da usare, ti basterà fare clic sul suo nome per collegarti al relativo sito Internet ufficiale ed effettuarne immediatamente il download.

    I servizi online per aprire file sconosciuti che ti ho già segnalato non ti hanno entusiasmato in maniera particolare o comunque sia non ti sono stati particolarmente utili? Si tratta di un altro sito Web utilissimo per identificare i programmi per aprire file sconosciuti.

    Non ti resta che cercare e scaricare da Internet, magari servendoti di Google , il programma indicato per aprire il file fino ad allora sconosciuto. È gratis, funziona su Windows e non necessita di installazione. Il sor- gente della nostra prima sfida sarà volutamente scritto in forma molto semplice, proprio per aver modo di ca- pire le tecniche di analisi. Il programma si avvia solo se la stringa immessa è "ioprogrammo".

    Politica dei cookie

    E' la cavia usata per provare il reverse engineering in questo articolo. Su Internet esistono una marea di siti dedicati al reverse engineering, dove ap- passionati e studiosi di ogni parte del mondo confrontano tecniche e scambiano informazioni.

    Molti di questi siti met- tono a disposizione dei principianti una sezione di CRACKME di diversa difficoltà, scritti proprio per essere forzati da re- verse engineer che vo- gliono misurare la pro- pria abilità. EXE di soli 32 KB che sarà l'oggetto dei nostri studi e che verrà forzato. Dimenticando il sorgente ap- pena visto e ogni informazione su CRACKME01, ci po- niamo di fronte all'eseguibile come se fosse una scato- la chiusa, totalmente sconosciuta.

    Si procede quindi con un'ana- lisi più approfondita, realizzata mediante il disassem- blatore BDASM ricordiamo che questo programma ri- chiede la libreria MFC L'analisi rivela subito Fig. Non ci vuole certo un mago del reverse engineering per capire che molto probabilmente questa stringa è proprio la licenza ne- cessaria per l'esecuzione; una ulteriore conferma viene fuori anche dall'analisi fatta col decompilatore REC.

    REC è una utility a linea di comando da lanciare se- guita dal nome del file eseguibile da decompilare. Il risultato del confronto viene memorizza- to nella variabile VfffffffO che è quella che pilota l'inte- ro ciclo di while che realizza il controllo della licenza.

    In questo primo semplice caso non è stato necessario ricorrere al debugger, ma è bastato analizzare i sorgen- ti decompilati del programma per capire come forzar- lo; nella vita reale il reverse engineer deve fronteggia- re protezioni ben più dure di queste e inoltre il listato prodotto da decompilatori e disassemblatori è spesso complicato da interpretare a causa della miriade di istruzioni e dalla presenza dell'interfaccia grafica.

    Una cosa del genere è l'antitesi della sicurezza! La procedura più sicura sarebbe quella di memorizzare nel file la chiave hash della password ed effettuare il confronto solo fra chiavi hash, ma non pretendiamo certo di implemen- tare l'algoritmo MD5 per questo semplice esempio, quindi ricorreremo ad un trucco più banale.

    Come si vede dalla Fig. In questo caso il reverse en- gineer è costretto a ricorrere all'analisi col debugger: useremo per l'occasione OllyDbg.

    Proseguendo lo step over col comando F8, si incon- trerà la chiamata a printf CAEE B che visua- lizza una stringa su console e quindi si entrerà, all'off- S I C set F, nella routine cruciale del programma.

    EXE da quest'altro attacco col debugger, si poteva pensare di comprimerlo con un packer ad esempio UPX , che lo rende immune dalla decompilazione e che inoltre non consente la modifica diretta, tramite hex editor, dei by- tes al suo interno sono avvolti dal packer.

    EXE originale. Dando un'occhiata alla finestra Functions notiamo che l'eseguibile importa alcune funzioni dalla libreria USER Quando si immette un serial number errato, il pro- gramma mostra una finestra di dialogo "Try again", ricorrendo sicuramente alla API MessageBoxA.

    Facendo scattare nuovamente la finestra "Try Again" , questa volta finiremo nel de- bugger, che intercetta la chiamata alla API. Conviene senz'altro mettere qui un altro breakpoint BPX e far ripetere il controllo del serial num- ber al CRACKME; questa volta il debugger intervie- ne prima che venga mostrata la finestra "Try Again", portandoci nel cuore della routine che genera il se- riale: ricorrendo al disassemblatore possiamo analiz- zare il codice presente all'offset Questa volta cercheremo di essere più "garbati", giocando ad indovinare l'algoritmo di ge- nerazione del serial number.

    L'algoritmo di calcolo determina il keygen. Nella vita reale i cracker incontrano pro- tezioni di gran lunga più sofisticate di quelle viste in questo articolo; tutta- via bisogna sempre ri- cordare che ogni prote- zione, anche la più com- plicata, rimane sempre una creazione della mente umana e pertanto è imperfetta e non im- mune da errori.

    VCL ha la ca- ratteristica di essere pensato e scritto su Win32 prima Winl6 con Delphi 1 , per cui, quando Borland ha deci- so il supporto ha Linux, ha scritto CLX che si po- neva proprio l'obiettivo di essere multipiattafor- ma. Con l'uscita di Delphi 7, Borland ha distribuito una versione sperimentale del compilatore Delphi per la piattaforma.

    Importare da Sito Docente MIUR, PubMed, Web of Knolwdge (ISI), ecc. - PDF

    Si tratta solo di una versione Preview, ma già denota i caratteri rivoluzionari di questa che non è solo l'ennesima versione del compilatore, ma un vero e proprio cambiamento di rotta. Ad osservare la storia dell'evoluzione di Delphi ci si rende conto che il prodotto non è mai dav- vero cambiato, a dimostrazione di un ottimo progetto iniziale che non ha richiesto aggiustamenti si- gnificativi, ma anche, a mio avviso, di un minor impe- gno da parte del produttore.

    Certo è uscito Kylix, e Delphi, per la prima volta, si è aperto ad una piattafor- ma che non era Windows. Non si poteva parlare di una novità epocale da un punto di vista tecnico, an- che se vi era il principio di un sistema multi-piattafor- ma. Ma quello era un pe- riodo difficile per l'economia di Borland che non pote- va permettersi grossi investimenti, in più c'erano pro- blemi tecnici di non facile soluzione, essenzialmente derivanti dalla natura simbiotica e quasi imprescindi- bile del linguaggio Java dalla piattaforma Java: il po- tente strumento di Sun non era stato pensato per poter disaccoppiare i due elementi e questo rendeva molto complicato il lavoro di Hejlsberg.

    NET, come Java, è costituito essenzialmente da una macchina virtuale che gira al di sopra del sistema ope- rativo attualmente solo Windows, ma potenzialmente si tratta di un modello abbastanza portabile.

    Questa macchina virtuale offre quindi un ambiente di runtime delle applicazioni che esegue non direttamente codice macchina, ma un codice assembly specifico della mac- china virtuale.

    Questo codice assembly MSIL Microsoft Intermediate Language è un linguaggio compilato che si pone a livello intermedio tra un sorgente di un compi- latore ad alto livello e il codice macchina di un proces- sore moderno. Presenta inoltre una serie di caratteristi- che di semplicità e quasi di "povertà", quali il fatto di non usare registri, ma di essere completamente "stack oriented", di non effettuare ottimizzazioni esasperate.

    La macchina virtuale non esegue direttamente questo codice binario intermedio, ma questo viene sottoposto ad una fase di compilazione al volo Jitting che lo tra- sforma in codice macchina ottimizzato per la macchina su cui sta girando. Un elemento fondamentale è l'am- pio framework a disposizione di ogni applicazione. NET: migliaia di classi che risolvono la gran parte del- le problematiche applicative.

    Gli sviluppatori Delphi sono già abituati alla sterminata VCL, ma il framework. NET rappresenta un passo in avanti in fatto di razio- nalizzazione e modernità nella scelta dei pattern di programmazione.

    Tutti questi elementi hanno consen- tito uno dei più grossi vantaggi di. NET su tutti i riva- li, diretti o indiretti: l'indipendenza dal linguaggio. Mi- crosoft ha fornito già da subito diversi linguaggi, ma soprattutto ha fornito delle linee guida per produrre nuovi linguaggi che generino codice IL e che sfruttino il type system e il framework di. Questo è suffi- ciente perché, una volta prodotta una libreria in un qualsiasi linguaggio con queste caratteristiche, questa sia utilizzabile in binario da tutti gli altri linguaggi.

    Finalmente i program- matori Delphi potranno attingere allo sterminato baci- no di produttori di librerie e di componenti di terze parti per prodotti Microsoft con la possibilità di usarli in modo nativo. Dunque Delphi. NET: rivoluzione della specie : Attributo.

    NET Un attributo per. NET è un concetto un po' particolare che probabilmente avrete incontrato in numerosi articoli su. NET: si trat- ta, in breve, di una informazione dichiarati- va che indica al compi- latore, al runtime e qualsiasi altra entità compreso il codice che userà la classe come interagire con la classe stessa.

    Subtract Birthday. Subtract referenceDate. Create 'Ciro', Datetime. WriteLine myObj, Birthday. ToStringQ ; Console. WriteLine myObj,GetAge. ToString ; Console. ReadQ; end. Le novità, in questo brevissimo programma, spiccano numerose. A partire proprio dalla keyword Program.

    Essa contiene un nome di programma strutturato con un punto ". NET ogni unità di co- dice è contenuta in una sezione detta Namespace. Se nel programma fossero presenti delle Unit, ognuna di esse costituireb- be un Namespace che si posizionerebbe gerarchica- mente sotto il Namespace definito da Program.

    Questo si ripercuote naturalmente anche nelle Uses che posso- no richiamare unit con struttura gerarchica, infatti la nostra applicazione usa le unit System e System.

    Collec- tion anche se in questo caso è corretto definirli Name- space e non Unit. Ma non è tanto questo l'aspetto inte- ressante da sottolineare, quanto il fatto che queste due unit non fanno parte della libreria Borland, ma sono proprio parte del framework.

    NET, quindi stiamo sem- plicemente usando il framework da Delphi! Non vi sarà sfuggito che la prima unit è System, ma non si trat- ta della cara vecchia System di RTL, ma del namespace System di. NET e più precisamente del core di. E la cara vecchia System che fine ha fat- to?

    Semplice: non esiste quasi più perché con Delphi. NET non serve: o meglio, per ragioni di compatibilità, Borland ha definito il namespace Borland.

    Sy- stem, che fa solo da collante di compatibilità verso il co- dice e le classi Delphi tradizionali e quindi non per de- finire la base del framework come avviene con le ver- sioni Win32 e Linux di Delphi. Una per tutte: le classi Delphi. NET discendono tutte da System.

    Object di. NET, come è necessario che sia per tutte le classi. Infatti anche la nostra clas- se MyClass che ha perso la T per ragioni di aderenza alla convenzione. NET , non discendendo esplicita- mente da nessuna classe, discende da System. Un'altra "stranezza" di definizione della classe My- Class è il costrutto [Serializable].

    E semplicemente la convenzione sintattica per definire attributi di una clas- se o di un metodo: il nome tra quadre rappresenta in- fatti l'attributo da associare alla classe. Nello specifico l'attributo Serializable dona alla nostra classe la capacità di essere serializzata in uno stream, su file o in qual- siasi altra forma.

    Il resto della classe non presenta no- vità, ma ritroviamo le caratteristiche di OOP avanzata tipica di Delphi: un costruttore parametrizzato, un overload sul metodo GetAge, una property pubblica ed un protetta. La seconda classe definita nell'applicazio- ne è MyColl, essa discende dalla classe System. Collec- tions. Hashtable del framework. NET e rappresenta una tipica collection alla Visual Basic, ma con algoritmi ha- sh. In essa sono stati ridefiniti alcuni metodi Ada in particolare per ottenere una collezione tipizzata di og- getti MyClass.

    Questa è una caratteristica molto poten- te che mancava nella VCL: le collection. Ma soffermiamoci adesso sul metodo: function MyClass.

    Per cui Datetime sembrerebbe essere un oggetto, una classe contenente il metodo statico Now che restituisce un Da- tetime. Come se non bastasse, Datatime possiede anche un metodo, questa volta di istanza, che è Subtract che accetta come parametro un altro Datetime.

    Esso resti- tuisce un tipo System. Timespan, cioè un offset di tempo. Il Timespan è evidentemente a sua volta un oggetto per- ché espone la proprietà TotalDays che esprime l'offset di tempo sottoforma di numero di giorni che viene di- viso per e restituito come valore di ritorno del me- todo. E scoprireste caratteristiche simili su String, su Doublé e su tutti gli altri tipi scalari del Pascal.

    Cosa si- gnifica? Semplice: in. NET anche i tipi scalari sono og- getti che discendono da System. Inoltre, essendo oggetti, sono dotati di metodi statici e di istanza che permettono di gestire le caratteristiche di base del tipo.

    Ma l'aspetto più interessante è che tutti i tipi sono definiti dal framework, costituisco- no cioè il CTS, per cui devono essere usati da tutti i lin- guaggi, magari adoperando alias sul nome del tipo co- me dimostra la tabella a fondo pagina. NET Preview: dccil. Exe che, mandato in ese- cuzione, si comporterà come una normale Console Ap- plication. Proviamo quindi da mettere il naso nel bina- rio disassemblandolo. Con Visual Studio.

    In Fig. Possiamo no- tare la nostra classe MyClass con la relativa definizione di metodi e proprietà, compreso il costruttore parame- trizzato. Ades- so procediamo con un piccolo esperimento: riscrivia- mo la nostra applicazione in un altro linguaggio di. NET Tipo Delphi. Byte Byte byte Byte byte char System. Intl6 Smalllnt short Short short short System.

    UTntló Word ushort - - unsigned short System. Int32 Integer int Integer int int oppure long System. UInt64 UInt64 ulong - - unsigned int64 System. Single Single float Single float float System. Boolean Boolean bool Boolean bool bool System. Add Ciro , myubj ; Console. WriteLine myObj. Come avrete potuto osservare il codice è molto simile e, soprattutto, vengono invocati gli stessi metodi dei ti- pi del CTS, in particolare sulla classe Datetime.

    Non stupirà osservare quindi il dissassemblato dell'assem- bly prodotto da C in Fig. NET e questo dimostra che tutti gli as- sembly. NET sono uguali e si perde ogni riferimento al linguaggio che li ha generati! A questo punto, non vi la- scerete impressionare nemmeno dalla Fig.

    Ci sono alcune piccolissime differenza, soprattutto buone per quei giochi da setti- mana enigmista basati sul colpo d'occhio, ma nulla che lasci intendere al fatto che siano stati compilati a parti- re da un sorgente C piuttosto che Delphi. NET Fig. FirstNamespace; Dunque eliminiamo tutto il codice della sezione mairi, che non ha più senso in una libreria ed effettuamo la compilazione. Otterremo l'assembly Esempio.

    A questo punto scriviamo una sem- plice Console App in C che sfrutta la nostra nuova li- breria Delphi. NET è sufficiente creare una nuova Con- sole App e aggiungere un riferimento alla nostra Dll ri- pescandola con un semplice browsing del filesystem.

    Add "ciro", myObj ; Console. First- Namespace che altro non è che il namespace pubblicato dalla nostra libreria Delphi. A questo punto si procede direttamente all'istanziazione e all'uso di MyClass e di MyColl senza avere nessuna cognizione del fatto che sia stata sviluppata in Delphi.

    NET si tratta semplice- mente di un assembly. NET richiamato da un altro as- sembly. NET sarà un compilatore. NET di prima classe e lo dimostra già la versione Preview seppur ancora li- mitata e in fase di progettazione. NET è.

    NET che sarà uno strato soprastante. NET sarà una scelta di campo, ma probabilmente sarà una scelta senza rimpianti: sarà il passato che si fonde col presente quasi come se fos- sero opera di una stessa mano.

    DA ISI IL FORMATO PLAIN TEXT SCARICA

    Primi passi con JFreeChart Grafica In quest'articolo utilizzeremo, la libreria JFreeChart, per realizzare un'applicazione che visualizza una serie di grafici utili all'analisi di un portafoglio di investimenti finanziari. Nelle applicazioni odierne, una corretta ed esaustiva visualizzazione di dati per via grafica è importante tanto quanto il loro collezionamento.

    Mostrare, ad esempio, i dati relati- vi al fatturato di un'azienda in un grafico ha il van- taggio di una maggiore facilità di analisi e di giudi- zio per chi li osserva. Per lo sviluppatore, la creazione di grafici di qualità all'interno delle proprie applicazioni non rappre- senta un'operazione facile e veloce, a meno che non utilizzi una libreria già pronta.

    JFreeChart è appunto una libreria di classi Java che consente la visualizza- zione di grafici all'interno sia di applicazioni stand- alone basate su Swing che di applicazioni Web. Tra- mite le API della libreria, è possibile, facilmente e ra- pidamente, realizzare grafici professionali all'inter- no di applicazioni Java. L'applicazione consentirà di mostrare gli investimenti effettuati da un cliente, suddividendoli in base alle componenti azionario, obbligazionario e liquidità, permetterà inoltre di analizzare il rendimento ottenuto nel corso degli an- ni passati.

    Nelle figure sono mostrati i grafici gene- rati dall'applicazione che andremo a realizzare. La libreria mette a disposizione i file sorgenti e tutto l'occorrente per compilarli e per produrre la relativa documentazione in Java doc.

    E' presente un'applica- zione dimostrativa con relativo codice, ovviamente che consiglio di osservare per scoprire molte delle po- tenzialità della libreria. E' presente inoltre un breve documento in PDF jfreechart Mediante le API di JFreeChart possiamo generare diverse tipologie di gra- fici: lineari, a torta, a barre, time series, a step, Gantt, ecc..

    E' possibile inoltre combinare diversi grafici al- l'interno di un'unica area organizzandoli verticalmen- te od orizzontalmente. Tale licen- za si applica a particolari componenti software, tipi- camente librerie. La General Public License ribadisce la libertà di poter utilizzare e modificare il codice senza nessun costo, a patto di ridistribuirlo nel- la sua forma originale esattamente come lo si è ricevuto e completo delle eventuali modifiche appor- tate.

    La LGPL, fondamen- talmente, si differenzia da questo tipo di licenza in quanto le applicazioni svi- luppate, utilizzanti tale componente o libreria, non ereditano la caratteristica di free software come in- vece avverrebbe nel caso della GPL. Uno dei vantaggi di tale pat- tern è che permette di te- nere sotto controllo le classi degli oggetti creati ed il punto in cui avviene la fase di inizializzazione di tali oggetti e delle loro relazioni. In tal modo, il codice cliente vede solo un gruppo di oggetti pronti ad essere utilizza- ti, senza curarsi delle im- plementazioni e della lo- ro inizializzazione.

    Gli oggetti creati nel momento in cui visualizziamo il grafico sono molte- plici, ma alcuni di essi sono quelli più importanti. In particolare gli oggetti della classe Plot, che possiamo indicare come l'area in cui è mostrato il grafico.

    Si tratta di una classe astratta che si occupa di disegna- re gli assi ed i dati e che definisce solo dei metodi ge- nerali; in quanto ogni tipologia di grafico usa una di- versa classe concreta ad esempio, nel caso dei grafici a torta, la classe concreta è il PiePlot.

    Ora concentria- moci sulla gestione dei dati, cioè le informazioni che vengono mostrate nei grafici. JFreeChart definisce del- le interfacce delle quali la principale è il Dataset che permettono di astrarre le implementazioni delle strutture in cui vengono memorizzati i dati. In tal mo- do, si disaccoppia il codice relativo all'aggiornamen- to del grafico classe Plot da quello di gestione delle informazioni Dataset.

    Il DatasetChangeListener è un'interfaccia che identifica un'entità interessata ad essere notificata a fronte di una modifica nei dati un esempio è appunto la classe Plot. Il Dataset si occupa invece di registrare, mediante i metodi addChangehi- stener e removeChangehistener, tali entità DatasetChan- geListener.

    Il Dataset è soltanto l'interfaccia più gene- rale. In realtà, ogni tipologia di grafico lavora con una o più interfacce dati derivanti da questa ed imple- mentate da appropriate classi. Ad esempio, l'interfac- cia KeyedDataset permette di organizzare i dati in cop- pie chiave-valore. I grafici a torta utilizzano, tra le al- tre, un'interfaccia derivante da questa, detta PieData- set. Entreremo in maggiore dettaglio man mano che svilupperemo la nostra applicazione.

    Per ora, concen- triamoci sui principali componenti del grafico evi- denziati in figura. I componenti descritti e tutti gli altri che abbia- mo tralasciato per semplicità necessitano una sincro- nizzazione sia in fase di inizializzazione che in quella di aggiornamento.

    Per l'utente non sarebbe facile ge- stirli direttamente, in quanto dovrebbe rispettare la corretta sequenza delle diverse fasi di inzializzazio- ne.

    La libreria ci viene in aiuto fornendoci la classe JFreeChart che contiene i riferimenti e gestisce tutti gli oggetti che vediamo nei nostri grafici: la legenda, il plot, il dataset, ecc. Ogni istanza rappresenta un gra- fico di un certo tipo e con certi dati. Si tratta di una classe factory ve- di relativo box che mette a disposizione dei metodi statici, i quali creano l'oggetto JFreeChart adatto, in base al tipo di grafico che desideriamo.

    Sono tali me- todi che si occupano dell'effettiva inizializzazione di tutte le componenti. Infine, spendiamo alcune parole sull'integrazione con le Swing. A tal fine, la libreria mette a disposizione una classe derivante da JPanel, denominata ChartPanel, che agisce da contenitore di tutte le componenti che si occupano del disegno del grafico. Il pannello invocherà il metodo draw di que- sti ultimi passando l'oggetto Graphics2D ogni volta che necessita di ridisegnarsi.

    E' presente anche una classe ChartFrame, derivante da JFrame, che crea auto- maticamente al suo interno un pannello ChartPanel con il grafico desiderato. Come primo pas- so, costruiamo il grafico a torta che mostra la compo- sizione del portafoglio del cliente. Come esempio, utiliz- ziamo i valori riportati in tabella. Le API ci forniscono un'implementazione di default con la classe DefaultPieDataset che utilizzeremo per gestire i nostri dati. Una volta organizzati i dati, possiamo concentrarci sul grafico andando a creare l'oggetto JFreeChart mediante la factory.

    Il primo argomento, pas- sato al metodo, rappresenta il titolo del grafico men- tre il secondo è il riferimento all'oggetto Dataset creato. Gli ultimi tre argomenti sono dei boolean che servono ad attivare alcune caratteristiche opzionali del grafico, rispettivamente: la legenda, il tooltip e l'utilizzo del generatore di URL per le mappe di im- magini. A questo punto, non ci rimane altro che in- tegrare l'oggetto JFreeChart in un'applicazione Swing.

    Per semplicità utilizziamo la classe ChartFra- Il create and display a trame In figura possiamo osservare il risultato. Con pochi piccoli aggiustamenti, per esempio confi- gurando alcuni parametri dell'oggetto PiePlot, pos- siamo cambiare sensibilmente l'aspetto del grafico.