Modulo Object Oriented Programming (Linguaggio Java) Il Modulo si riferisce ad una classe IV Autore:Nadia Patelmo Prerequisiti - - Conoscenze di programmazione imperativa già acquisite nella classe III nel corso di programmazione in C o altro linguaggio imperativo; Conoscenza elementare di HTML (non indispensabile); Autore:Nadia Patelmo Obiettivi - - Comprendere la “filosofia” della programmazione OO e le differenze rispetto alla programmazione procedurale; Capire l’uso del java per la creazione di semplici applicativi web (opzionale); 4° anno: 15 settimane Autore:Nadia Patelmo Modalità - - Si preferirà partire prima da esempi di creazione di oggetti e metodi in java piuttosto che dalla teoria proprio a causa della natura della programmazione ad oggetti che tende a ricostruire la realtà tramite gli oggetti; Si partirà dalla modellazione di oggetti molto semplici (magari di uso comune) evolvendo verso oggetti via via più complessi e astratti man mano che si applicano le peculiarità del java; Strumenti - Appunti 4° anno: 15 settimane Autore:Nadia Patelmo Modalità - - Si preferirà partire prima da esempi di creazione di oggetti e metodi in java piuttosto che dalla teoria proprio a causa della natura della programmazione ad oggetti che tende a ricostruire la realtà tramite gli oggetti; Si partirà dalla modellazione di oggetti molto semplici (magari di uso comune) evolvendo verso oggetti via via più complessi e astratti man mano che si applicano le peculiarità del java; Strumenti - Appunti 4° anno: 15 settimane Autore:Nadia Patelmo Modulo linguaggio Java 4° anno: 15 settimane UD1: Introduzione al linguaggio Java Storia di Java. Il World Wide Web. Brevi cenni su HtML. Introduzione. Esempi Java(Laboratorio). UD2: Costrutti principali in java Tipi di dati; Operatori e costrutti (rivisitati in Java); Librerie a package in java ed esempi (java.lang e java.math); Esercitazioni pratiche in laboratorio; Autore:Nadia Patelmo Modulo linguaggio Java 4° anno: 15 settimane UD3: Le classi in java Dichiarazione di una classe. Metodi e attributi. Passaggio dei parametri. Metodo costruttore. Creazione e uso degli oggetti. UD4: I metodi Passaggio dei parametri per riferimento; Utilizzo del this; Public e private e static; Overload dei metodi; Esempi pratici in laboratorio Autore:Nadia Patelmo Modulo linguaggio Java 4° anno: 15 settimane UD5: Interfaccia utente grafica(GUI) Principi generali di progettazione I componenti GUI Il modello di gestione degli eventi I layout manager Esempi pratici di laboratorio UD6: Le applet Concetto di applet; La prima applet; Richiami di HTML per l’uso delle applet; I metodi init, start, run, stop, destroy e paint; Esempi di applet. Autore:Nadia Patelmo Modulo linguaggio Java 4° anno: 15 settimane UD7: Java e web (modulo extra) Cenni al modello client-server; Modello di un’applicazione web; Cenni sui database; Le java servlet; Esempi di applicazione (laboratorio). Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java Storia di Java Java venne concepito presso Sun Microsystem nel 1981. Fatto piuttosto sorprendente è che la spinta originale verso la creazione di Java non proviene da internet bensì la necessità di un linguaggio indipendente dalla piattaforma. Circa nel periodo in cui vennero elaborati il dettagli di Java, emerse il World Wide Web. Grazie al Worl Wide Web, Java venne spinto in prima linea. Java deve gran parte del suo stile al C e al C++ e grazie a queste sue caratteristiche potrebbe essere pensato come la versione Internet del C++, ma in realtà le differenze sono sia pratiche che filosofiche . Java e C++ sono due linguaggi non compatibili. Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java Il World Wide Web Il World Wide Web è nato nel 1989 al CERN(centro europeo per la ricerca sulla fisica nucleare). Il Web consiste in un’enorme collezione di documenti sparsi per il mondo chiamati pagine. Ogni pagina può contenere puntatori(link) ad altre pagine correlate. La nozione di pagine che puntano ad altre pagine viene detta ipertesto. Le stringhe di testo che sono puntatori ad altre pagine sono dette iperpuntatori. Quando le pagine di ipertesto sono mischiate con altre di diversa natura, il risultato è detto ipermediale. Il protocollo di trasferimento del Web è HTTP(Hypertex Transfer Protocol). Ogni stringa corrispondente ad una pagina è costituita di tre parti:il nome del protocollo(http), il nome della macchina su cui si trova la pagina e il nome del file che contiene la pagina. Ad ogni pagina è assegnato un URL(Uniform Resource Locator) che ha la funzione di nome di pagina univoco per tutto il mondo. Gli URL hanno tre parti: il protocollo, il nome DNS della macchina sulla quale si trova la pagina, e un nome locale che indica in maniera unica la pagina specificata. Ad esempio l’URL: http://www.unict.it/welcome.html Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java Brevi cenni su HTML HTML(Hypertex Markup Language) Html è un linguaggio che usa annotazioni(markup) per descrivere il modo in cui i documenti vanno formattati. I linguaggi con markup quindi contengono dei comandi espliciti per la formattazione. Ad esempio <B>significa iniziare in modalità grassetto </B> Una pagina Web include un’intestazione e un corpo racchiusi tra i tag(comandi di formattazione) <HTML></HTML> anche se molti browser non si curano della mancanza. L’intestazione è racchiusa tra i tag <HEAD></HEAD> e il corpo tra i tag <BODY> </BODY>. Molti tag Html hanno il formato <QUALCOSA> </QUALCOSA> che indica la fine del tag I tag possono essere sia in minuscolo che in maiuscolo. Alcuni tag hanno dei parametri <IMG SRC=”Ciao” ALT=”Ciao”> Autore:Nadia Patelmo Gli iperpuntatori utilizzano il tag <A> e </A>. Se selezioniamo, l’iperpuntatore conduce a una nuova pagina. In questo punto si può anche inserire un’immagine<IMG>. Come esempio, consideriamo il seguente frammento di HTML: <A HREF=http://www.unict.it> Università di Catania </A> oppure <A HREF=http://www.unict.it> <IMG SRC=”logo.gif” ALT=”unict”> </A> I forms(moduli) contengono scatole o bottoni che permettono all’utente di inserire informazioni o di fare delle scelte e quindi rimandare le informazioni al proprietario della pagina. A questo scopo è usato il tag <INPUT>. Le form sono racchiuse tra i tag <FORM> </FORM> Una pagina Web può puntare ad un piccolo programma Java detto anche applet. Quando il browser lo raggiunge, l’applet viene caricato sulla macchina utente e qui eseguito in modo sicuro. Cioè è strutturalmente impossibile per un applet leggere o scrivere qualsiasi file che non sia autorizzato ad accedere. Gli applet consentono alle pagine Web di diventare interattive. Vengono eseguite sul client rendendo possibile l’aggiunta di animazione e suono senza dovere eseguire dei programmi di aiuto. Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java 1. Introduzione I linguaggi di programmazione si suddividono in due categorie: Interpretati. Per essere eseguiti necessitano di un interprete appropriato. Compilati. Il compilatore produce un codice direttamente eseguibile dal s.o. I linguaggi compilati, come il C, sono notoriamente più veloci. Un applicazione scritta in C (standard ANSI), può essere facilmente ricompilata in modo da essere eseguita su un s.o. diverso da quello originale. Questa caratteristica rende il C un linguaggio portabile. Nella pratica di tutti i giorni lo scenario è ben diverso. Un applicazione comune, fa uso di caratteristiche specifiche del s.o. su cui gira, e sfrutta in dosi massicce le componenti grafiche. Un applicazione cosiffatta, anche se scritta in c, non può considerarsi portabile. Il linguaggio Java è una via di mezzo tra un linguaggio interpretato ed uno compilato. Per le sue caratteristiche viene considerato un linguaggi realmente portabile, senza necessità di ricompilazione. L'output di un compilatore Java non è un codice eseguibile, bensì un bytecode, ovvero un insieme altamente ottimizzato di istruzioni concepite per essere eseguite da una macchina virtuale (Java Virtual Machine) che funge da interprete del bytecode. Esiste una JVM diversa per ogni attuale s.o. La scelta di creare Java come linguaggio interpretato ha favorito due aspetti fondamentali: La portabilità. Capacità di un programma di funzionare su diversi ambienti. La sicurezza. L’esecuzione del programma Java avviene sotto il controllo della JVM La differenza tra un interprete basic ed uno Java è notevole: il primo interpreta un file testo, il secondo interpreta un file “precompilato” contenente bytecode. Per questa ragione la velocità di esecuzione di Java non è così penalizzante Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java Java può essere usato per creare vari tipi di programmi, i più usati sono: Applicazioni stand-alone: equivale ad applicazioni create in C/C++. Applet: Applicazione concepita per essere trasmessa su internet ed eseguita dal browser. Un applet viene scaricata automaticamente come componente di una pagina web. Servlet: Applicazione concepita per essere eseguita su un server, invocata e parametrizzata dal client. Queste applicazioni necessitano di webserver speciali. Di seguito si possono riassumere le principali qualità di un’applicazione scritta in Java: Qualità di java: Semplice Sicuro Portabile OOP Solido (Buona gestione degli errori anche a run-time) Multithreaded Indipendente dall’architettura Interpretato con prestazioni elevate Distribuito (gestione TCP/IP) Dinamico. 2. Fondamenti della programmazione OOP. OOP (Object Oriented Programming) è una metodologia di programmazione che aiuta ad organizzare programmi complessi mediante l’impiego dei concetti di: Ereditarietà, Incapsulazione e Polimorfismo. Esistono, oltre a quelli precedentemente citati, altri concetti essenziali per la comprensione delle metodologie OOP. Analizziamoli tutti: Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java La classe E’ un entità astratta che descrive un insieme infinito di elementi che hanno caratteristiche identiche. Le componenti di una classe vengono denominati Membri e si dividono in: Variabili di istanza (dati) Metodi (funzioni) Gerarchia Utilizzare le classificazioni gerarchiche è indispensabile per suddividere un sistema complesso in tanti piccoli sistemi più semplici da costruire (Divide et impera). Oggetto Un oggetto è un istanza concreta di una classe. La classe e l’oggetto sono due cose diverse. Tutti gli oggetti appartenenti ad una stessa classe non sono uguali tra loro, difatti occupano zone di memoria differenti. Interfaccia E’ un astrazione che descrive cosa fanno i membri pubblici di una classe. Ad un utilizzatore non serve conoscere le funzionalità di tutti i membri di una classe, ma solo quelli a lui utili. L’interfaccia stabilisce quali richieste possono essere inoltrate ad un determinato oggetto. Ad esempio, per fare una telefonata da un GSM, basta conoscere il numero da chiamare e qual è il tasto di composizione. Tutto il resto può risultare superfluo. Questo è un concetto astratto e non ha nulla a che vedere con la parola chiave interface analizzata nei capitoli successivi. Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java L’incapsulazione Capacità di un oggetto di contenere sia i dati sia le funzioni per manipolarli. Racchiudere programmi e dati in componenti ben definiti (prima dati e codice erano slegati) consente di proteggere i dati da interferenze esterne, consentendone l’accesso solo tramite speciali funzioni. Il potere del codice incapsulato risiede nel fatto che tutti sanno come accedervi e di conseguenza possono utilizzarlo a prescindere dai dettagli della sua implementazione. La base dell’incapsulazione è la classe. Ereditarietà E’ il processo tramite il quale una classe acquisisce (eredita) le proprietà di un'altra classe. Si chiamerà superclasse la classe da cui si ereditano le caratteristiche e sottoclasse quella che le riceve. Lo scopo principale dell’ereditarietà è quello di estendere le capacità di una classe aggiungendone di nuove, oppure ridefinire (overriding) quelle esistenti. Se un metodo non viene trovato nell’ oggetto in cui viene chiamato, viene ricercato in tutta la catena di ereditarietà arrivando fino alla classe radice, se necessario. Se si modifica una superclasse, queste modifiche si rifletteranno su tutte le sottoclassi. Polimorfismo E’ la caratteristi tramite la quale è possibile ottenere comportamenti diversificati (polimorfici) da parte di un oggetto, a seconda dei casi. La stessa interfaccia può essere utilizzata per un insieme generico di operazioni. In una frase si può descrivere il polimorfismo come: unica interfaccia, metodi multipli. L’uso del metodo desiderato viene determinato in base alla natura dei dati su cui si opera. Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java Primo Esempio Class Example{ //Your program begins with call to main(). Public static void main(String args[]){ System.out.println(“This is a simple Java program”) } } Secondo Esempio Class Example2{ Public static void main(String args[]){ Int num; num=100; System.out.println(“This is num: “ + num); Num = num * 2; System.out.print(“The value of num * 2 is “); System.out.println(num); } } Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java Regole per la scrittura di un programma Java: 1. Java fa distinzione tra maiuscole e minuscole, anche nei nomi dei files. 2. I files sorgenti di java devono avere l’estensione .java. 3. Qualsiasi programma Java deve risiedere all’interno di una classe. 4. La definizione della classe e la sua implementazione devono risiedere sullo stesso file. 5. Tutte le applicazioni Java di tipo stand-alone cominciano chiamando il metodo main. 6. Se è presente un metodo main, il file si deve chiamare con lo stesso nome della classe che contiene il main. 7. Il metodo main deve essere dichiarato public, in quanto deve essere visibile all’esterno della classe in cui è dichiarato, static, perché deve essere chiamato senza instanziare un oggetto di quella classe (questo perché primo è una classe ma non un oggetto). void in quanto non ha valori di ritorno. 8. Il metodo main deve avere come parametro String args[]. 9. Ogni file sorgente può contenere al massimo una classe pubblica, che deve avere lo stesso nome del file. 10. La classe è un tipo di dati mentre un oggetto è un istanza di quel tipo. 11. l’oggetto viene creato dinamicamente a tempo di esecuzione. 12. Definire una classe è quasi come creare un nuovo tipo di dati. 13. Tutti gli oggetti vengono passati per riferimento, mentre tutti le variabili per valore. 14. Creare un riferimento ad una classe senza associare ad esso un oggetto può generare errore, se si tenta di usare il riferimento non collegato. 15. La classe può essere dichiarata in qualunque parte del file, non ha importanza se prima o dopo i main. 16. Java dopo la compilazione genera tanti file .class quante sono le classi presenti nel file sorgente. Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java Compilare il programma Per compilare il programma primo, eseguite il compilatore javac, specificando Il nome del file sorgente sulla riga di comando, come illustrato qui di seguito C:\>Javac Example.java. Il compilatore javac crea un file chimamato Example.class contenente la version bytecode del programma. Come già discusso, il bytecode è una rappresentazione intermedia del programma. Di conseguenza l’output di javac non è un codice che possa essere eseguito direttamente.Per esguire davvero dovremo usare l’interprete di Java, chiamato Java. C:\>java Example E’ una buona idea attribuire ai file soregente java lo stesso nome della classe Perché quando il codice sorgente di Java viene compilato, ogni singola classe viene inserita nel proprio file di output con lo stesso nome della classe. Autore:Nadia Patelmo Unità didattica 1: Introduzione al linguaggio Java FINE Autore:Nadia Patelmo