Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento

Pagina creata da Alessandro Mariani
 
CONTINUA A LEGGERE
Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
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
Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
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
Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
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
Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
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
Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
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
Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
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
Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
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
Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
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