10/05/2005 Programmazione Orientata agli Oggetti in Linguaggio Java Introduzione Piattaforme di Riferimento versione 1.4 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca – Università della Basilicata – [email protected] Piattaforme >> Sommario Sommario m Linguaggi di Riferimento m La Piattaforma Java m La Piattaforma .NET m Caratteristiche del Linguaggio Java m Caratteristiche del Linguaggio C# m Utilizzo degli Strumenti G. Mecca - Programmazione Orientata agli Oggetti 2 1 10/05/2005 Piattaforme >> Linguaggi di Riferimento Linguaggi di Riferimento m In questo corso ðtecniche e metodi della programmazione a oggetti m Linguaggio principale ðJava m Linguaggio secondario ðC# della piattaforma Microsof.NET 3 G. Mecca - Programmazione Orientata agli Oggetti Piattaforme >> Linguaggi di Riferimento Linguaggi di Riferimento m Domanda: ATTENZIONE alle ragioni di questa scelta (>>) Perché questi due linguaggi ? ðin effetti ne esistono molti altri ðSmalltalk (tradizionale) ðDelphi ðPython (recente) m Risposta ðrappresentano le piattaforme di riferimento attuali per lo sviluppo software ðuna serie di caratteristiche distintive comuni G. Mecca - Programmazione Orientata agli Oggetti 4 2 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m Complessa piattaforma software ðcentrata attorno al linguaggio Java ðideata dalla Sun (http://www.java.sun.com) e tuttora di “proprietà” della Sun ðsviluppata attraverso lo Java Community Process (JCP, http://www.jcp.org) m Essenzialmente ðun complesso di specifiche e di componenti software G. Mecca - Programmazione Orientata agli Oggetti 5 Piattaforme >> La Piattaforma Java La Piattaforma Java m Un po’ di storia ðnasce da un progetto della Sun (progetto Green) con scopi totalmente diversi ðinizialmente si chiamava Oak ðJava 1.0 – rilasciato nel 1995 dalla Sun ðJava 1.1 – rilasciato nel 1997 m Java 2 ðdalla v. 1.2 del 1998, riscrittura significativa G. Mecca - Programmazione Orientata agli Oggetti 6 3 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m Le versioni di Java2 ðv. 1.2, la prima ðv. 1.3, sostanzialmente equivalente alla 1.2 ðv. 1.4, introduce alcune limitate funzionalità nuove incompatibili con il passato ðv. 1.5, ulteriore riscrittura significativa, con molte funzionalità nuove ed incompatibili G. Mecca - Programmazione Orientata agli Oggetti 7 Piattaforme >> La Piattaforma Java La Piattaforma Java m Java 2 v. 1.5 = Java 2 5.0 ðè stato alla fine chiamato Java 2 v. 5.0 per sottolineare le novità rispetto alla versione precedente m Il problema di Java 2 5.0 ðil codice compilato è incompatibile con le vecchie macchine virtuali ðle funzionalità vanno utilizzate in modo controllato G. Mecca - Programmazione Orientata agli Oggetti 8 4 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m Attualmente ðla piattaforma è organizzata in tre livelli m J2SE – Java 2 Standard Edition ðper lo sviluppo di applicazioni desktop m J2EE – Java 2 Enterprise Edition ðper lo sviluppo di applicazioni lato server m J2ME – Java 2 Micro Edition ðper lo sviluppo di applicazioni mobili G. Mecca - Programmazione Orientata agli Oggetti 9 Piattaforme >> La Piattaforma Java La Piattaforma Java m Ognuno dei livelli si compone di ðuna serie di specifiche (documenti) ðuna serie di strumenti (es: compilatore, debugger ecc.) ðuna serie di librerie o API (Application Program Interfaces) ðschematizzando (eccessivamente) è possibile dire che i livelli più complessi includono i più semplici G. Mecca - Programmazione Orientata agli Oggetti 10 5 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java fonte: www.java.sun.com G. Mecca - Programmazione Orientata agli Oggetti 11 Piattaforme >> La Piattaforma Java La Piattaforma Java m Principali caratteristiche della piattaforma ðI. scalabile e di ampia applicabilità ðII. fornisce un’ampia libreria di classi ðIII. indipendente dalla piattaforma hardware e realmente “portabile” G. Mecca - Programmazione Orientata agli Oggetti 12 6 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m I. Scalabilità e applicabilità ðconsente di sviluppare applicazioni di vario genere ðsia di piccole e medie dimensioni ðsia di grandi dimensioni e altissimo carico ðsia in contesti applicativi tradizionali (sistemi informativi) sia in contesti meno tradizionali ðcon attenzione agli aspetti di sicurezza e prestazioni G. Mecca - Programmazione Orientata agli Oggetti 13 Piattaforme >> La Piattaforma Java La Piattaforma Java m Le varie classi di applicazioni ðapplicazioni “desktop” tradizionali ðapplicazioni client-server a due livelli ðapplicazioni Web a tre livelli, anche con componenti distribuiti e ad alto traffico ðapplicazioni per dispositivi mobili ðapplicazioni orientate ai servizi (Web Services) G. Mecca - Programmazione Orientata agli Oggetti 14 7 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m II. Ampia libreria di classi ðlibrerie per qualsiasi esigenza di calcolo ðAPI (“Application Program Interface”): collezione di librerie di classi disponibili per l’uso ðattualmente più di 3000 classi, 32000 metodi e circa 130 package ðcollezioni (liste, pile ...), prog. grafica (finestre, bottoni, menu...), prog. Web... 15 G. Mecca - Programmazione Orientata agli Oggetti Piattaforme >> La Piattaforma Java La Piattaforma Java G. Mecca - Programmazione Orientata agli Oggetti fonte: www.java.sun.com 16 8 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java fonte: www.java.sun.com 17 G. Mecca - Programmazione Orientata agli Oggetti Piattaforme >> La Piattaforma Java La Piattaforma Java Versione di J2SE Numero di Classi delle Numero di Metodi delle API Standard API Standard 1.0 212 2125 1.1 504 5478 1.2 1781 20935 1.3 2130 23901 1.4 2991 32138 1.5 (5.0) 3279 ?????? G. Mecca - Programmazione Orientata agli Oggetti 18 9 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m III. Indipendenza dalla piattaforma ðcaratteristica essenziale di Java m Le origini ðle “applet” Java ðidea: scaricare codice dalla rete ed eseguirlo attraverso il browser ðrequisito essenziale: il codice doveva essere eseguibile indipendentemente dall’hardware e dal sistema operativo G. Mecca - Programmazione Orientata agli Oggetti 19 Piattaforme >> La Piattaforma Java La Piattaforma Java m Attenzione ðin C++ (e in tutti i linguaggi tradizionali): ðuna volta compilato, il codice oggetto e poi l’eseguibile contengono codice macchina specifico del (a) processore (b) sistema operativo utilizzato ðper eseguire il codice su altre piattaforme hardware bisogna ricompilarlo (sperando che tutte le librerie usate e le funzionalità siano compatibili) G. Mecca - Programmazione Orientata agli Oggetti 20 10 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m Il compilatore di Java ðproduce codice oggetto in un linguaggio intermedio per una “macchina virtuale” m JVM – Java Virtual Machine ðmacchina composta da componenti virtuali (processore virtuale, registri virtuali, ecc.) ðil tutto simulato attraverso un’applicazione software (java.exe) G. Mecca - Programmazione Orientata agli Oggetti 21 Piattaforme >> La Piattaforma Java La Piattaforma Java m Bytecode ðcodice oggetto della macchina virtuale (istruzioni eseguibili dalla macchina virtuale) ðlinguaggio intermedio m Funzionamento ðil codice sorgente viene compilato in bytecode ðil bytecode viene eseguito dall’emulatore della m.v. (java.exe) simulando il funzionamento della macchina virtuale sulla macchina fisica G. Mecca - Programmazione Orientata agli Oggetti 22 11 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java bytecode delle librerie 01001001 11001011 00110011 compilatore javac 01001001 11001011 00110011 JVM java bytecode Prova.class codice sorgente Prova.java 110 111 010 001 101 101 ATTENZIONE al processo di compilazione ed esecuzione macchina fisica codice eseguibile G. Mecca - Programmazione Orientata agli Oggetti 23 Piattaforme >> La Piattaforma Java La Piattaforma Java m Esecuzione da parte della JVM ðla macchina virtuale potrebbe eseguire lo bytecode interpretandolo m Interpretazione del codice ðmodo alternativo alla compilazione ðprocesso per cui il codice di un’applicazione viene tradotto da un interprete in codice eseguibile dal processore ðdurante l’esecuzione G. Mecca - Programmazione Orientata agli Oggetti 24 12 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m In effetti, però ðl’interpretazione è a volte inefficiente (la stessa istruzione viene tradotta tutte le volte che viene eseguita) m Tipicamente ðper ragioni di prestazioni il bytecode viene precedentemente compilato “al volo” dalla macchina virtuale in codice macchina per la macchina fisica G. Mecca - Programmazione Orientata agli Oggetti 25 Piattaforme >> La Piattaforma Java La Piattaforma Java m JIT Compiler (Just in Time Compiler) ðcomponente della macchina virtuale che analizza pezzi di bytecode alla prima esecuzione ðe li compila “al volo” in codice oggetto per la macchina fisica ðsuccessivamente viene eseguito direttamente il codice compilato G. Mecca - Programmazione Orientata agli Oggetti 26 13 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m In questo modo ðil codice può essere compilato una volta ed eseguito da molte macchine diverse ðbasta che ciascuna delle macchine disponga di una implementazione della JVM e delle librerie necessarie m JRE – Java Runtime Environment ðJVM e API di J2SE ð“compile once, run anywhere” 27 G. Mecca - Programmazione Orientata agli Oggetti Piattaforme >> La Piattaforma Java Introduzione G. Mecca - Programmazione Orientata agli Oggetti fonte: www.java.sun.com 28 14 10/05/2005 Piattaforme >> La Piattaforma Java La Piattaforma Java m Prima ATTENZIONE all’importanza di Java nell’evoluzione dell informatica di Java: le piattaforme principali ðC/C++, Visual Basic, PHP, Delphi m Differenze sostanziali rispetto a Java ðsono relativamente specializzate (nessuna ha lo stesso ambito di applicabilità di Java) ðle librerie predefinite sono relativamente povere ðil codice compilato non è portabile da una piattaforma all’altra G. Mecca - Programmazione Orientata agli Oggetti 29 Piattaforme >> La Piattaforma .NET La Piattaforma .NET m Piattaforma di riferimento della Microsoft ðper molti versi, una risposta alla larghissima diffusione di Java m Storia della piattaforma .NET ðnel 2000 la versione 1.0 ðnel 2004 la versione 1.1 ðattualmente: versione 2.0 beta G. Mecca - Programmazione Orientata agli Oggetti 30 15 10/05/2005 Piattaforme >> La Piattaforma .NET La Piattaforma .NET m Principali caratteristiche ðI. scalabile e di ampia applicabilità ðII. fornisce un’ampia libreria di classi ðIII. multilinguaggio G. Mecca - Programmazione Orientata agli Oggetti 31 Piattaforme >> La Piattaforma .NET La Piattaforma .NET m I. Scalabilità e applicabilità ðesattamente come la piattaforma Java ðdalle applicazioni di fascia alta ai palmari ðmaggiore enfasi su standard recenti ðXML e Web services m II. Ampia libreria di classi ðesattamente come la piattaforma Java G. Mecca - Programmazione Orientata agli Oggetti 32 16 10/05/2005 Piattaforme >> La Piattaforma .NET fonte: Microsoft .NET Academic Resource Kit Introduzione System.Web Services Description Discovery Protocols UI HtmlControls Caching Configuration Security SessionState System.Windows.Forms Form Button MessageBox ListControl WebControls System.Drawing Drawing2D Imaging System.Data OLEDB Design SQL SQLTypes Collections Configuration Diagnostics Globalization IO Net Reflection Resources Printing Text System.Xml XSLT XPath Serialization System Security ServiceProcess Text Threading Runtime InteropServices Remoting Serialization G. Mecca - Programmazione Orientata agli Oggetti 33 Piattaforme >> La Piattaforma .NET La Piattaforma .NET m III. Multilinguaggio ðpensata per consentire l’interoperabilità di codice scritto con linguaggi diversi mI linguaggi di .NET ðripensamento di linguaggi tradizionali Microsoft: Visual Basic.NET, C++.NET, J# ðun linguaggio completamente nuovo: C# ðtutti i linguaggi condividono la stessa libreria G. Mecca - Programmazione Orientata agli Oggetti 34 17 10/05/2005 Piattaforme >> La Piattaforma .NET La Piattaforma .NET m Come consentire l’interoperabilità ? ðidea: architettura software basata su una macchina virtuale ðed un linguaggio intermedio in cui viene compilato il codice sorgente di ciascun linguaggio m Nota ðè la stessa architettura di Java ma pensata per uno scopo diverso G. Mecca - Programmazione Orientata agli Oggetti 35 Piattaforme >> La Piattaforma .NET La Piattaforma .NET m CLR – Common Languare Runtime ðmacchina virtuale .NET ðdotata di un compilatore JIT per Windows m MSIL – Microsoft Intermediate Language ðlinguaggio intermedio di .NET ðlinguaggio in cui viene compilato il codice di tutti i linguaggi della famiglia .NET ðsotto forma di assembly (>>) G. Mecca - Programmazione Orientata agli Oggetti 36 18 10/05/2005 Piattaforme >> La Piattaforma .NET fonte: Microsoft .NET Academic Resource Kit Introduzione Source code MSIL VB.NET C# C++ Compiler Compiler Compiler Assembly Assembly Assembly Common Language Runtime JIT Compiler Native code Managed Code CLR Services Managed CLR Code Managed Code Unmanaged Code Operating System Services G. Mecca - Programmazione Orientata agli Oggetti 37 Piattaforme >> La Piattaforma .NET La Piattaforma .NET m Attenzione ðla compilazione, come nel caso di Java, genera codice intermedio (IL) ðnel caso di .NET, questo codice viene definito assembly, e può avere varie estensioni, tra cui .exe ða differenza di Java, per eseguire l’assembly non è necessario invocare esplicitamente la macchina virtuale (il sistema operativo la esegue automaticamente) G. Mecca - Programmazione Orientata agli Oggetti 38 19 10/05/2005 Piattaforme >> La Piattaforma .NET La Piattaforma .NET m Per eseguire codice .NET ðuna macchina Windows deve avere installato il .NET Framework m .NET Framework ðCLR ðAPI di .NET ðanalogo di JRE 39 G. Mecca - Programmazione Orientata agli Oggetti Piattaforme >> La Piattaforma .NET La Piattaforma .NET m Di ATTENZIONE alla differenze tra le piattaforme conseguenza ðalcune fortissime analogie con la piattaforma Java ðin particolare l’architettura basata sulla macchina virtuale m La differenza principale ðun linguaggio su molte piattaforme ðtanti linguaggi su una piattaforma (di fatto) G. Mecca - Programmazione Orientata agli Oggetti 40 20 10/05/2005 Piattaforme >> La Piattaforma .NET La Piattaforma .NET m Il progetto Mono ðtentativo di sviluppare un’implementazione open source della macchina virtuale .NET e del compilatore di C# ðsponsorizzato dalla Xymian ðhttp://www.go-mono.org ðattualmente una implementazione parziale del framework versione 1.1 G. Mecca - Programmazione Orientata agli Oggetti 41 Piattaforme >> Caratteristiche del Linguaggio Java Caratteristiche del Linguaggio Java m Principali caratteristiche del linguaggio ðI. completamente orientato agli oggetti ðII. sintassi basata sul C/C++ ðIII. semplice e robusto ðIV. collegamento dinamico ðV. caratteristiche avanzate (multi-thread, riflessione, ...) G. Mecca - Programmazione Orientata agli Oggetti 42 21 10/05/2005 Piattaforme >> Caratteristiche del Linguaggio Java Caratteristiche del Linguaggio Java m I. Completamente orientato agli oggetti ðnon è consentita programmazione ibrida ðtutta la programmazione è basata su classi e oggetti m II. Sintassi basata sul C/C++ ðsimilarità nei costrutti del linguaggio ðes: espressioni, if, cicli ecc. G. Mecca - Programmazione Orientata agli Oggetti 43 Piattaforme >> Caratteristiche del Linguaggio Java Caratteristiche del Linguaggio Java m III. Semplice e robusto ðdrastica semplificazione rispetto al C++ ðgestione automatica della memoria (“garbage collection”) ðfortemente tipato ðgestione rafforzata delle eccezioni ðereditarietà singola (>>) G. Mecca - Programmazione Orientata agli Oggetti 44 22 10/05/2005 Piattaforme >> Caratteristiche del Linguaggio Java Caratteristiche del Linguaggio Java m IV. Collegamento dinamico ðle librerie non devono essere collegate staticamente al codice ðil collegamento avviene dinamicamente (appena viene richiesto l’uso della libreria) ðgrosso vantaggio: consente di collegare versioni aggiornate delle librerie senza dover ricollegare il codice m V. Altre caratteristiche avanzate G. Mecca - Programmazione Orientata agli Oggetti 45 Piattaforme >> Caratteristiche dei Linguaggio C# Caratteristiche del Linguaggio C# m Principali caratteristiche di Java e C# ðI. completamente orientato agli oggetti ðII. sintassi basata sul C/C++ ðIII. semplice e robusto (ATTENZIONE) ðIV. collegamento dinamico ðV. caratteristiche avanzate (multi-thread, riflessione, ...) G. Mecca - Programmazione Orientata agli Oggetti 46 23 10/05/2005 Piattaforme >> Caratteristiche dei Linguaggio C# Caratteristiche del Linguaggio C# m Semplice e robusto ðC# eredita molte delle scelte fatte per Java ðgestione automatica della memoria, tipizzazione, ereditarietà singola, eccezioni... m Ma ðè meno restrittivo nell’imporre queste scelte al programmatore ðes: gestione della memoria, eccezioni ðquesta è una delle principali differenze G. Mecca - Programmazione Orientata agli Oggetti 47 Piattaforme >> Utilizzo degli Strumenti Utilizzo degli Strumenti m Per sviluppare in Java ðè necessario installare il J2SE Development Kit (JDK) ðscaricabile liberamente da http://www.java.sun.com con la relativa documentazione (zip con file html) ðattenzione alle dimensioni ðjdk-1_5_0-windows.exe >> circa 52 Mega ðjdk-1_5_0-doc.zip >> circa 44 Mega G. Mecca - Programmazione Orientata agli Oggetti 48 24 10/05/2005 Piattaforme >> Utilizzo degli Strumenti Utilizzo degli Strumenti m Post-Configurazione ðcreare una nuova variabile di ambiente JAVA_HOME e assegnargli il valore della cartella in cui è installato l’SDK ðPannello di Controllo >> Sistema >> Avanzate >> Variabili di Ambiente ðes: JAVA_HOME=C:\Programmi\Java\jdk1.5.0_01 ðaggiornare la variabile PATH aggiungendo il valore %JAVA_HOME%\bin G. Mecca - Programmazione Orientata agli Oggetti 49 Piattaforme >> Utilizzo degli Strumenti Utilizzo degli Strumenti m Gli strumenti principali ðil compilatore: javac.exe ðla macchina virtuale: java.exe mI passo ðcompilare il sorgente (.java) con javac ðeseguire il bytecode (.class) con java G. Mecca - Programmazione Orientata agli Oggetti 50 25 10/05/2005 Piattaforme >> Utilizzo degli Strumenti Un Semplice Programma Java /* Questo e' il primo programma Java file: Prima.java */ package prima; public class Prima { } public static void main(String[] args) { // stampa una scritta sullo schermo System.out.println("Prima prova"); } >> G. Mecca - Programmazione Orientata agli Oggetti 51 Piattaforme >> Utilizzo degli Strumenti G. Mecca - Programmazione Orientata agli Oggetti 52 26 10/05/2005 Piattaforme >> Utilizzo degli Strumenti Utilizzo degli Strumenti m Per sviluppare in C# ðè necessario installare il .NET Redistributable Package e il .NET Framework SDK v. 1.1 ðscaricabili liberamente dal sito http://www.gotdotnet.com ðattenzione alle dimensioni ðdotnetfx.exe >> ca. 23 Mega ðNETSDKSetup1.1.exe >> circa 112 Mega G. Mecca - Programmazione Orientata agli Oggetti 53 Piattaforme >> Utilizzo degli Strumenti Utilizzo degli Strumenti m Post-Configurazione ðcambiare il PATH aggiungendo il valore C:\Windows\Microsoft.NET\Framework\v1.1.4322\ ðATTENZIONE: il nome effettivo della cartella può cambiare con la versione dell’SDK m Lo strumento principale ðil compilatore csc.exe ðla macchina virtuale viene eseguita automaticamente G. Mecca - Programmazione Orientata agli Oggetti 54 27 10/05/2005 Piattaforme >> Utilizzo degli Strumenti Un Semplice Programma C# /* Questo e' il primo programma in C# file: primo.cs */ namespace primo { public class Prima { public static void Main(string[] args) { // stampa una scritta sullo schermo System.Console.WriteLine("Prima Prova"); } } } G. Mecca - Programmazione Orientata agli Oggetti >> 55 Piattaforme >> Utilizzo degli Strumenti G. Mecca - Programmazione Orientata agli Oggetti 56 28 10/05/2005 Piattaforme >> Sommario Riassumendo m Linguaggi di Riferimento m La Piattaforma Java m La Piattaforma .NET m Caratteristiche del Linguaggio Java m Caratteristiche del Linguaggio C# m Utilizzo degli Strumenti G. Mecca - Programmazione Orientata agli Oggetti 57 Termini della Licenza Termini della Licenza m This work is licensed under the Creative Commons AttributionShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. G. Mecca - Programmazione Orientata agli Oggetti 58 29