Introduzione ad Eclipse ing. Mario L. Bernardi Eclipse: Origini e Storia Eclipse è un IDE open source sviluppata inizialmente da IBM.Successivamente il progetto fu reso open source e ceduto ad un consorzio che include tra le varie aziende: IBM,Borland,Merant,QNX Software,Rational, Red Hat,SuSE,TogetherSoft, Oracle,HP,Sybase. La sola IBM ha investito in Eclipse circa 40 milioni di $ prima di renderlo open source. IBM continua lo sviluppo di Eclipse tramite una società sussidiaria chiamata OTI (Object Technologies International) Eclipse è stata un successo fin dalla relase 1.0 : perchè? E' l'evoluzione di una IDE della IBM sviluppata da OTI nel 1996 in smalltalk: Visual Age for Java ( VA4J ) Applicava a Java molte idee innovative che fermentavano intorno a SmallTalk. Due esempi: ●Non esisteva il concetto di file ●Versioning a livello dei metodi Sostanzialmente Eclipse è l'implementazione in java di VA4J Introduzione ad Eclipse 3 Organizzazione Eclipse è gestito dal consorzio mediante il “Board of Stewards”: - c'è un rappresentante per ogni azienda membro del consorzio - la commissione determina gli obiettivi del progetto sulla base di due principi generali: - supportare e favorire una comunità open-source vitale e dinamica - creare opportunità commerciali per i membri del consorzio Dal punto di vista operazionale il consorzio definisce i “Project Management Committee” (PMC) che gestiscono i vari progetti che compongono Eclipse. Sostanzialmente i progetti fondamentali sono: - La piattaforma eclipse ( Eclipse Platform ) - Il toolkit di sviluppo java ( Java Development ToolKit,JDT) [ Eric Gamma] ToolKit - Il toolkit di sviluppo C/C++ ( C++ Development ToolKit , CDT ) - L'ambiente di sviluppo di plug-ins ( Plugin Development Environment,PDE ) Environment Introduzione ad Eclipse 4 Organizzazione (2) Eclipse viene fornito con diversi modalità di packaging: - Eclipse SDK che contiene platform,JDT e PDT, docs,binari e sorgenti - Eclipse Platform Run-time che contiene solo i binari del platform - Eclipse Platform SDK che contiene binari e sorgenti del platform - Componenti singoli E' importante osservare che JDT,CDT e PDT sono sostanzialmente aggiunte al platform. Il cuore di Eclipse è la Eclipse Platform il cui scopo è fornire solo i servizi necessari per integrare gli strumenti software di più alto livello che vengono implementati ad un livello superiore come plug-ins. L'aspetto più interessante del progetto di eclipse è proprio questo: Eccetto i servizi forniti da un piccolo kernel a run-time, ogni altra caratteristica di Eclipse è fornita da un insieme di plugin comunicanti. Introduzione ad Eclipse Architettura Sostanzialmente l'architettura di eclipse è mostrata in 1.1: 5 Introduzione ad Eclipse 6 Platform Runtime Lo scopo fondamentale del runtime è di rilevare tutti i plug-ins che sono disponibili nella cartella dei plug-in. Ogni plug-in possiede un manifesto scritto in XML che esplicita la lista delle connessioni che il plugin richiede. Dunque: - La lista dei punti di estensione che il plugin mette a disposizione di altri plugins. - La lista dei punti di estensione che egli richiede dalla platform e da altri plugins. Un aspetto cruciale dell'architettura a plugin è quello prestazionale dato che i plugin possono divenire un numero elevatissimo: Eclipse utilizza una politica di load on demand dei plugin. Questo minimizza la quantità di memoria utilizzata ed il tempo di startup nel quale diventa necessario solo rilevare (ma non istanziare ) tutti i plugin. Introduzione ad Eclipse The Workspace Lo scopo fondamentale del workspace è la gestione delle risorse di utente che sono organizzate in uno o più progetti di massimo livello gerarchico. Ogni progetto è associato ad una cartella della “cartella di workspace” workspace di eclipse Il workspace mantiene anche una history di basso livello per le risorse. Questo significa che è possibile disfare anche cambiamenti vecchi di giorni (in dipendenza di come viene configurata l'history). 7 Introduzione ad Eclipse The WorkBench 8 Introduzione ad Eclipse 9 The WorkBench Editors Perspectives Views Introduzione ad Eclipse 10 Team Support & Help Eclipse, per centrare i suoi goal di alto livello, deve garantire ai teams di lavorare insieme in maniera flessibile e avanzata. Per questo è stato implementato un supporto per i tool di versioning molto esteso. L'ambiente integra un client CVS e vi sono plugins per la maggior parte dei tools di versioning utilizzati (SVN,VSS). Per quanto riguarda l'help, il platform fornisce un componente di help che rappresenta un “Extensible Documentation System”: - i progettisti di plug-ins possono definire la loro documentazione in HTML; - imporre politiche di navigazione; - utilizzare XML; - inserire nei punti di estensione di altri plug-in conenuto aggiuntivo nell'albero degli argomenti della documentazione ad essi relativa. Introduzione ad Eclipse Neutralità rispetto al linguaggio Un aspetto caratterizzante di eclipse è la neutralità rispetto al linguaggio: - Linguaggio di programmazione - JDT - CDT - COBOL - C# e altri linguaggi .NET sono in sviluppo. - Internazionalizzazione 11 Introduzione ad Eclipse 12 Ottenere eclipse http://www.eclipse.org Nel sito sono disponibili diversi tipi di package (dette “build”): - release – Una release ufficiale di eclipse profondamente testata. - stable build – Una release intermedia che è stata testata e si dimostra relativamente stabile. - integration build – Una release in cui i singoli componenti sono testati ma non sono ancora stati fatti test di integrazione. - nightly build – Release che sono realizzate in automatico ogni notte dal codice sorgente più recente che c'è e non hanno test di affidabilità. Introduzione ad Eclipse 13 JDT - Creare un progetto Java I tipi di progetto che è possibile creare dipendono dai plug-in installati. In un'installazione standard di eclipse che comprende JDT/CDT/PDT avremo: Selezionando “Java Project” Introduzione ad Eclipse 14 JDT - Creare una classe Java All'atto della creazione di una classe è possibile specificare tutte le caratteristiche che la riguardano: - Nome - Package - Superclasse - Interfacce - Eventuale entry point Introduzione ad Eclipse 15 JDT - Creare una classe Java (2) Eclipse durante la creazione della classe fornisce una serie di consigli per creare una classe che rispetti le direttive suggerite dalle specifiche SUN. Oltre ovviamente ad evidenziare errori: Introduzione ad Eclipse 16 JDT – Code completion Gli editor di eclipse possiedono ottime capacità di code-completion. In ogni situazione è possibile invocare la code-completion mediante i tasti CTRL-spazio: E' possibile ottenere una guida anche durante la compilazione degli argomenti(di cui Eclipse conosce i tipi di ogni overload) selezionando uno dei metodi dell'elenco. La code-completion in Eclipse è inoltre del tutto configurabile con mediante semplici template. Introduzione ad Eclipse 17 JDT – Eseguire programmi java Un aspetto di grande flessibilità di Eclipse sono le politiche di esecuzione dei programmi. La gestione delle esecuzioni avviene tramite i: Profili di esecuzione ( Run “configurations”): “configurations” Introduzione ad Eclipse 18 JDT – Debugging di programmi java La stessa flessibilità per i profili di esecuzione è stata replicata per le esigenze di debugging. La gestione del debug avviene tramite i: Profili di debugging ( Debug“configurations”): Debug“configurations” con un pannello simile a quello visto precedentemente. Il debug è però associato ad una prospettiva che introduce tutte le viste necessarie per analizzare lo stato del programma durante la sua esecuzione. Ovviamente la prospettiva è personalizzabile per cui è possibile introdurre le viste che più si ritengono interessanti. Introduzione ad Eclipse 19 JDT – Debugging di programmi java (2) Il debugger di Eclipse possiede le seguenti viste fondamentali: Mostra il progetto, i suoi threads e il punto(classe/metodo) di debug corrente. Mostra un elenco dei vari breakpoints che sono stati definiti. Mostra l'elenco delle variabili visibili nello scope corrente. Il visualizzatore è intelligente ed è capace di visualizzare array/hash-tables in maniera sintetica. In futuro verranno sviluppati nuovi modi intuitivi di visualizzare i tipi. Introduzione ad Eclipse Eclipse opzioni e preferenze Coding style e javadoc In Eclipse vi sono sofisticate opzioni per selezionare lo stile di codifica sotto vari aspetti: - Code formatter Cambia come il codice viene formattato ed indentato in maniera automatica. - Code templates Cambia come vengono generati commenti javadoc e strutture di codice predefinite in maniera automatica. - Organizzazione degli Import Cambia le politiche di gestione automatica degli import 20 Introduzione ad Eclipse 21 Eclipse opzioni e preferenze (2) Template per codice java/javadoc E' possibile modificare tutta una serie di templates predefinite. E' anche possibile creare nuove template e importare/esportare mediante un formato XML le template già esistenti per supportare un livello di interoperabilità maggiore tra team diversi. Introduzione ad Eclipse 22 Eclipse opzioni e preferenze (3) Template per la code-generation Generazione di commenti javadoc Generazione di codice La sezione code-templates ci fornisce il modo per: -Editare le modalità di creazione automatica di commenti javadoc -Editare le modalità di creazione automatica di generazione di codice -Import/Export delle template Introduzione ad Eclipse Eclipse opzioni e preferenze (4) Classpaths e variabili di classpath Le opzioni per la selezione di librerie esterne è molto flessibile. E' possibile: - aggiungere JARs esterni - aggiungere JARs interni 23 Introduzione ad Eclipse 24 Aiuti nella generazione di codice Eclipse fornisce un insieme di opzioni per creare codice in maniera automatica: Introduzione ad Eclipse Refactoring Rinominare una classe 25 Introduzione ad Eclipse Refactoring (2) Rinominare un metodo 26 Introduzione ad Eclipse Refactoring (3) Cambiare la signature di un metodo E' possibile cambiare la signature di un metodo (e tutti i riferimenti a quel metodo) attraverso un solo pannello che permette di specificare il valore di default dei parametri aggiunti. 27 Introduzione ad Eclipse 28 Refactoring (4) Estrarre un'interfaccia E' possibile estrarre da una classe un'interfaccia specificando quali metodi della classe devono essere inclusi in essa. E' anche possbile selezionare i modificatori di accesso. Inoltre Eclipse di propone di cambiare i riferimenti alla classe in riferimenti all'interfaccia ove possibile. Introduzione ad Eclipse Refactoring (5) Altre opzioni interessanti ? Inlining di variabili Incapsulare un field Generalizzare un tipo Pull-Up / Push-Down 29