Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Principi di Progettazione del Software a.a. 2017-2018 Fondamenti di Java (pt. 1) ing. Roberto Vergallo Contatti ■ Ing. Roberto Vergallo ■ Laboratorio GSA Lab – http://gsalab.unisalento.it ■ Mail – roberto.vergallo@unisalento.it ■ Ricevimento – Mandare mail Fondamenti di java 2 Roberto Vergallo 1
Contatti ■ Twitter – https://twitter.com/RVergallo ■ Telegram Channel (PPS UniSalento) – https://t.me/joinchat/AAAAAEMzTjUVN6EcP6qBag Fondamenti di java 3 Roberto Vergallo Chi sono ■ Ph.D. in Ingegneria dell’Informazione @ UniSalento – Tesi su Internet of Things (IoT) ■ 10 anni di esperienza presso GSA-Lab ■ Esperienza all’estero presso UCLA (Los Angeles, USA) – Modalità innovative di ricarica di Electric Vehicles (EV) ■ Attualmente assegnista di ricerca sulle tematiche IoT ed Education ■ Socio fondatore start-up Vidyasoft s.r.l. (www.vidyasoft.it) – IoT e mobile apps nel settore FinTech ■ Altre cose… Fondamenti di java 4 Roberto Vergallo 2
Obiettivi della lezione ■ Introduzione alla programmazione Object Oriented – Paradigma Procedurale – Paradigma Object Oriented – Classi e Oggetti ■ Introduzione al Linguaggio Java – Caratteristiche Principali di Java – Java Development Kit (JDK) ■ Introduzione alla Sintassi di Java – Variabili, Operatori, Regole sintattiche di Java, ecc. Fondamenti di java 5 Roberto Vergallo Testi per esercitazione consigliati ■ Cay S. Horstmann “Concetti di Informatica e Fondamenti di Java” Quinta Edizione, Apogeo Fondamenti di java 6 Roberto Vergallo 3
Risorse ■ Pagina del prof. Mainetti (area materiale didattico): – http://www.ingegneria.unisalento.it/scheda_personale/- /people/luca.mainetti/materiale Fondamenti di java 7 Roberto Vergallo Risorse e strumenti ■ Tutorial Java – http://docs.oracle.com/javase/tutorial/?frontpage-spotlight – http://www.roseindia.net/java/ ■ Java 2 Platform Standard Edition – http://www.oracle.com/technetwork/java/javase/downloads/index.ht ml – Versioni 7.0 oppure 8.0 ■ IntelliJ IDEA – https://www.jetbrains.com/idea/download/ ■ Alternativa: Eclipse IDE for Java Developers – http://www.eclipse.org/downloads/ Fondamenti di java 8 Roberto Vergallo 4
http://docs.oracle.com/javase/7/docs/api/ Fondamenti di java 9 Roberto Vergallo Evoluzione del modello di programmazione ■ Un tempo i programmi erano scritti in assembler in cui ogni dato era globale e le funzioni andavano disegnate a basso livello. ■ Poi ci fu l’avvento dei linguaggi procedurali come il C che si basano sul modello detto “paradigma procedurale” riassumibile in due parole: “Divide et Impera”. – Un problema complesso viene suddiviso in problemi più semplici in modo che sia facilmente risolvibili mediante programmi procedurali. – L’attenzione del programmatore è accentrata sul problema – Le procedure sono blocchi di codice riutilizzabile che possiedono un proprio insieme di dati e realizzano specifiche funzioni. – All’interno di un’applicazione è necessario che i dati vengano condivisi tra loro. Questo meccanismo si risolve mediante l’uso di variabili globali, passaggio di parametri e ritorno di valori. – Le applicazioni basate su modelli procedurali sono difficili da aggiornare e controllare con meccanismi di debug. Fondamenti di java 10 Roberto Vergallo 5
Evoluzione del modello di programmazione (cont.) Linguaggio C Java Macchina Pascal C++ Assembler Fortran … Approccio Paradigma Paradigma Tempo a basso livello Procedurale Object Oriented Fondamenti di java 11 Roberto Vergallo Nascita di Java ■ Java viene sviluppato nei laboratori della Sun Microsystem a partire dal 1990 ■ Il suo scopo iniziale era quello di equipaggiare apparecchiature elettroniche come televisori o altre apparecchiature analoghe ■ Uno dei presupposti di progetto era quello di creare un linguaggio indipendente dal processore ■ Il linguaggio avrebbe dovuto essere usato per gestire le reti e le comunicazioni ■ Doveva essere un linguaggio ad oggetti ■ L'apprendimento del linguaggio doveva essere semplice per chi fosse già pratico di C++ Fondamenti di java 12 Roberto Vergallo 6
Nascita di Java ■ 1990 - Specificato da James Gosling con un gruppo (detto Green Team) di ricercatori della Sun Microsystem ■ 1991 - Usato per progetti in ambito consumer electronic con il nome Oak (da un albero visto dalla finestra di Gosling). ■ 1992 - Presentazione del primo prototipo di dispositivo simile ad un calcolatore con sola interfaccia grafica intuitiva (uso dell'animazione Duke). ■ 1993 - Usato per sviluppare sistemi di TV interattiva ■ 1995 - Cambio di nome in Java (non è un acronimo) Fondamenti di java 13 Roberto Vergallo Il linguaggio Java ■ Semplice ■ Sicuro ■ Indipendente dalla piattaforma – "write once, run anywhere" ■ Libreria molto ricca – packages ■ Pensato per Internet – applet Fondamenti di java 14 Roberto Vergallo 7
Linguaggi e traduzione ■ I programmi sono scritti in un Linguaggio di Programmazione Linguaggio macchina Linguaggio simbolico Traduzione Fondamenti di java 15 Roberto Vergallo Linguaggi compilati e interpretati Il compilatore produce un eseguibile in codice macchina. L’esecuzione sarà linguaggio molto veloce ma lo stesso eseguibile compilato non può essere usato su piattaforme diverse. Il codice é indipendente dalla linguaggio piattaforma, ma deve essere eseguito attraverso un interprete che in genere interpretato è molto poco efficiente. Fondamenti di java 16 Roberto Vergallo 8
Creare un programma in C x Windows Codice sorgente cc #include ... Compilatore Binario main(int argc, char **argv) { (windows) Binario (windows) ... initialize(argv[0]); run(argv[1], argv[2]); Programma Linker eseguibile if (!errno) printf(”Done.\n”); (windows) else (windows) exit(errno); } Librerie Librerie Librerie ■ Tipicamente: – si creano uno o più moduli (file) di codice sorgente; – si utilizzano librerie standard e/o librerie specifiche; – il compilatore traduce il codice sorgente in un formato binario; – il linker combina il prodotto della compilazione con le librerie. Fondamenti di java 17 Roberto Vergallo Creare un programma in C x Linux Codice sorgente cc #include ... Compilatore Binario main(int argc, char **argv) { (Linux) Binario (Linux) ... initialize(argv[0]); run(argv[1], argv[2]); Programma Linker eseguibile if (!errno) printf(”Done.\n”); (Linux) else (Linux) exit(errno); } Librerie Librerie Librerie ■ Tipicamente: – si creano uno o più moduli (file) di codice sorgente; – si utilizzano librerie standard e/o librerie specifiche; – il compilatore traduce il codice sorgente in un formato binario; – il linker combina il prodotto della compilazione con le librerie. Fondamenti di java 18 Roberto Vergallo 9
Traduzione Java ■ Sfrutta sia la compilazione che l’interpretazione ■ Java Byte Code – Il linguaggio macchina di una macchina virtuale – Java Virtual Machine – NON leggibile dall’uomo – Conservato in class files Fondamenti di java 19 Roberto Vergallo Traduzione Java Codice sorgente java public class esempio2 { Compilatore Bytecode Binario public static void main(String[] args) { System.out.println(“Seco Programma ndo Programma Java”); Interprete in System.out.println(“Fond esecuzione amenti di informatica”); … } Librerie Librerie } Librerie – non si produce un programma eseguibile indipendente; – il codice sorgente viene tradotto in bytecodes; – il collegamento tra ‘pezzi’ di programma viene fatto ‘al volo’; – le operazioni effettive vengono eseguite dall’interprete. Fondamenti di java 20 Roberto Vergallo 10
Traduzione Java Fondamenti di java 21 Roberto Vergallo Java Virtual Machine ■ Un programma Java NON può essere eseguito senza Java Virtual Machine – Interpreta il codice Java Byte Code – Oggi si utilizza la compilazione just-in-time – E’ a sua volta in esecuzione sul calcolatore Fondamenti di java 22 Roberto Vergallo 11
Primo programma class Welcome1 { // linea 1 public static void main (String args[]) { // linea 2 System.out.println (“Welcome to Java Programming"); // linea 3 } // linea 4 } // linea 5 Un programma è composto da un insieme di dichiarazioni di classi. Nel nostro esempio abbiamo la classe Welcome1 la cui dichiarazione inizia a linea 1 e termina a linea 5. Una classe non può contenere direttamente delle istruzioni ma può contenere la dichiarazione di metodi che a loro volta contengono le istruzioni. La nostra classe contiene la dichiarazione di un solo metodo che inizia a linea 2. Un metodo è identificato da un nome, nel nostro caso main, e racchiude tutte le istruzioni e dichiarazioni tra una parentesi graffa aperta e una chiusa, dunque il nostro metodo termina a linea 4. Il Java è case sensitive: Welcome1 welcome1 Fondamenti di java 23 Roberto Vergallo Primo programma class Welcome1 { // linea 1 public static void main (String args[]) { // linea 2 System.out.println ("Welcome to Java Programming"); // linea 3 } // linea 4 } Un metodo può essere attivato solo dall’interno di un altro metodo. Al momento dell’attivazione è possibile fornire al metodo invocato dei parametri racchiusi tra parentesi tonde e separati da virgole e ricevere da questo un valore di ritorno. La linea 3 contiene l’unica istruzione eseguibile di tutto il programma e consiste nell’invocazione del metodo println, contenuto in una classe fornita con il linguaggio, che visualizza il parametro passato tra parentesi tonde seguito da un carattere di ritorno a capo. Commenti: // su singola linea /* e */ su più linee /** e */ commento di documentazione per l’utility JAVADOC Ogni istruzione DEVE terminare con il punto e virgola (;) Fondamenti di java 24 Roberto Vergallo 12
Primo programma ■ Il programma deve essere contenuto in un file il cui nome deve corrispondere al nome della classe seguito dal postfisso .java e deve essere compilato. Supponendo di disporre dell’ambiente di sviluppo JDK, la compilazione si ottiene con il comando javac seguito dal nome della classe con estensione. javac Welcome1.java ■ Il compilatore produce un file il cui nome corrisponde a quello della classe seguito dal postfisso .class. ■ Per eseguire il nostro programma Welcome1.class è necessario richiamare l’interprete, che nell’ambiente JDK è java, seguito dal nome del file senza estensione. java Welcome1 Fondamenti di java 25 Roberto Vergallo Il modello astratto di Java: rappresentazione ad oggetti Fondamenti di java 26 Roberto Vergallo 13
Dominio del problema e dominio della soluzione ■ I linguaggi imperativi definiscono un “dominio della soluzione” che “astrae” la macchina sottostante – Es. 1. read i 2. print i 3. goto 1 ■ Il programmatore deve creare un mapping fra “dominio del problema” e “dominio della soluzione” – Tale mapping è spesso innaturale e di difficile comprensione Fondamenti di java 27 Roberto Vergallo Paradigma Object Oriented ■ Per risolvere i problemi presentati dall’approccio procedurale, i programmatori hanno fatto sempre più uso di tecniche mirate a proteggere dati globali o funzioni nascondendone il codice. ■ Il paradigma Object Oriented accentra l’attenzione verso i dati. – L’applicazione viene suddivisa in un insieme di oggetti in grado di interagire tra di loro e codificati in modo tale che la macchina sia in grado di comprenderli. – Un linguaggio OO semplifica il meccanismo di creazione degli oggetti. – Il paradigma OO si basa sulla tecnica di incapsulare e raggruppare parti di un programma Fondamenti di java 28 Roberto Vergallo 14
Cos’è un Oggetto? ■ Definizione da vocabolario: “Un oggetto è un’entità che si possa immaginare dotata di determinate caratteristiche e funzionalità”. ■ Il confinamento di informazioni e funzionalità in oggetti permette livelli maggiori di astrazione e semplifica la gestione di sistemi complessi. Fondamenti di java 29 Roberto Vergallo Gli oggetti come modello naturale ■ Gli oggetti nel software possono rappresentare entità del mondo reale – Il primo uso di linguaggi a oggetti è stato fatto per effettuare simulazioni Interazioni tra diversi componenti = scambio di messaggi Fondamenti di java 30 Roberto Vergallo 15
Linguaggi orientati agli oggetti ■ Forniscono astrazioni che consentono di rappresentare direttamente nel dominio della soluzione gli elementi del dominio del problema – Oggetti – Classi – Messaggi • Il programmatore inizia analizzando tutti i singoli aspetti concettuali che compongono un programma. Questi concetti sono chiamati oggetti con nomi legati a ciò che rappresentano. • Gli oggetti sono costituiti da attributi (dati) e funzionalità (metodi). • L’analisi dovrà includere le modalità di interazione tra gli oggetti e proprio grazie a queste interazioni sarà possibile riunire gli oggetti per formare un’applicazione. • A differenza di procedure e funzioni, gli oggetti sono auto-documentanti e il funzionamento interno delle funzionalità di un oggetto è completamente nascosto al programmatore. Fondamenti di java 31 Roberto Vergallo Classi di oggetti ■ Pensiamo ad un libro come appartenente ad una classe di oggetti aventi caratteristiche comuni: numeri di pagine, testo inserito in ogni pagina, note inserite a fondo pagina (attributi). ■ Le azioni che tipicamente si compiono quando si utilizza un libro sono: voltare pagina, leggere il testo, guardare le figure, ecc.( metodi). ■ È interessante notare che si utilizza il termine libro per generalizzare un concetto relativo a qualcosa che contiene pagine da sfogliare, da leggere o da strappare ossia ci si riferisce ad un insieme di oggetti con attributi comuni, ma comunque composto da entità aventi ognuna caratteristiche proprie che rendono ognuna differente rispetto all’altra. ■ La classe è una categoria di oggetti che fornisce la descrizione generale del concetto di libro. ■ L’oggetto è una istanza della classe ( ogni nuovo libro) avente caratteristiche proprie. Fondamenti di java 32 Roberto Vergallo 16
Un modello a oggetti ■ L’idea informale: rappresentare le entità della programmazione come aggregazioni di variabili e metodi Esempio: ContoCorrente comportamento saldoAttuale deposita codice ritira titolare struttura saldo interesse fido variabili modificaFido modificaInteresse metodi Fondamenti di java 33 Roberto Vergallo Rappresentazione di un oggetto Attributo Attributo Attributo Fondamenti di java 34 Roberto Vergallo 17
Messaggi ■ Gli oggetti sono gli elementi attivi di un programma – Come fanno gli oggetti a compiere le azioni desiderate ? ■ Gli oggetti sono attivati dalla ricezioni di un messaggio ■ Una classe determina i messaggi a cui un oggetto può rispondere – metodi ■ I messaggi sono inviati da altri oggetti Fondamenti di java 35 Roberto Vergallo Scambio di messaggi ■ Il flusso dell’esecuzione viene visto come un flusso di messaggi Esempio: Oggetto A Ciclista ricevente.nomeMetodo(parametri) bici.cambiaRapporto(2) bici Oggetto B Bicicletta messaggio ■ Componenti di un messaggio: – un riferimento al ricevente; – il nome del metodo; – i parametri. Fondamenti di java 36 Roberto Vergallo 18
Classi ■ Descrivere gli oggetti uno ad uno è poco vantaggioso. Infatti: – ogni oggetto richiederebbe una descrizione specifica; – la grande varietà ostacolerebbe la comunicazione. ■ Al contrario, una classe è uno schema generale per la creazione di oggetti simili: – la struttura degli oggetti è descritta come schema; – il comportamento degli oggetti è definito in modo effettivo. comportamento struttura dichiarazione delle variabili metodi effettivi Fondamenti di java 37 Roberto Vergallo Classi e istanze: ContoCorrente class ContoCorrente { String codice; ContoCorrente String titolare; float saldo; ritira ... void deposita(float somma) { codice istanza di saldo += somma; N58AB titolare } Gino saldo 1.350 void preleva(float somma) { deposita saldo -= somma; istanza di } } c1.deposita(31) istanza di AA54Z Pino 7.823 N58AB Lino 2.500 c2.preleva(275) Operatore c3.deposita(50) Fondamenti di java 38 Roberto Vergallo 19
Tipo delle variabili ■ In Java ogni variabile deve avere un tipo dichiarato ■ In prima approssimazione, vi sono due categorie di tipi: – tipi primitivi: int, float, byte short, long, double, char, boolean); – riferimenti ad oggetti (i.e. Object o sottoclasse). class Ciclista { “Tom Sawyer” valore int mediaKmAlGiorno; Bicicletta bici; riferimento ... 70 void allenamento() { riferimento int rapporto; Bicicletta ... bici.cambiaRapporto(rapporto); } } Fondamenti di java 39 Roberto Vergallo Come si scrive un metodo ■ In prima approssimazione, un metodo Java è molto simile ad una funzione C: – dichiarazione formale: nome del metodo, tipo di valore ritornato, nome e tipo dei parametri formali; – gli operatori sono quelli del C (e.g. +, *, =, +=, ==, !=, ...); – le istruzioni di controllo sono quelle del C (i.e., if, else, switch, for, while, do); – l’istruzione di ritorno è return. class Aritmetica { long fattoriale(long arg) { if (arg == 0) { return 1L; } else { long temp; temp = arg * this.fattoriale(arg - 1); return temp; } } } Fondamenti di java 40 Roberto Vergallo 20
Bootstrap dell’esecuzione ■ La macchina virtuale Java esegue come prima cosa il metodo main della classe di bootstrap java Copia DaUnFile.txt AUnAltroFile.txt class Copia { ... static void main(String[] args) { if (args.length < 2) { System.out.println( Copia.class ”Uso: Copia ” System.exit(0); } else { copia(args[0], args[1]); } CLASSPATH Copia.class Macchina ... virtuale } Fondamenti di java 41 Roberto Vergallo Elementi fondamentali dell’ambiente Java Il programma viene creato dall’editor e salvato su disco Fase 1 Editor Disco Fase 2 Compilatore Disco Il compilatore (javac) crea i bytecode e li memorizza su disco Memoria primaria Fase 3 Caricatore Il caricatore delle classi mette i bytecode in memoria Disco Memoria primaria Analizzatore L’analizzatore di bytecode conferma che tutti i bytecode Fase 4 bytecode siano validi e rispettino le regole di Java Memoria primaria Fase 5 Interprete L’interprete legge i bytecode e li traduce in un linguaggio che il computer è in grado di comprendere. Fondamenti di java 42 Roberto Vergallo 21
Elementi fondamentali dell’ambiente Java (cont.) ■ Requisiti per programmare in ambiente Java (JDK): – PC con processore Pentium 2 266MHz o superiore e 128 Mb di RAM. – 245 Mb di spazio libero sull’hd. – Java Development Kit (JDK). (http://www.oracle.com/it/technologies/java/index.html) • Java Runtime Environment (JRE) (\jre) – Permette di eseguire applicazioni scritte in Java e consiste della Java Virtual Machine (JVM), classi Java comprese le Java API e alcuni files di supporto ma non contiene strumenti di sviluppo come compilatori e debugger. • Development Tools (\bin). • Demo Applets and Applications (\demo). • Source Code (\include). • Additional libraries (\lib). Fondamenti di java 43 Roberto Vergallo 22
Puoi anche leggere