programmazione ii - lezione 4groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-04.pdf · lezione 4...
TRANSCRIPT
Programmazione IILezione 4
Daniele Sgandurra
29/10/2010
1/39 Programmazione II Lezione 4 29/10/2010
Sommario
1 Esercizi
2 Panoramica della Programmazione Ad OggettiParadigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
3 Esercitazione: Installare il Java Development KitJava Development Kit
2/39 Programmazione II Lezione 4 29/10/2010
Esercizi
Parte I
Esercizi
3/39 Programmazione II Lezione 4 29/10/2010
Esercizi
Esercizio 1
Si consideri la seguente grammatica:
G = ({E , T , A, I}, {a, b, +, ∗,−, (, )}, R, E), dove R e l’insieme delle
produzioni:
E → T | T + E | T - E;T → A | E * T;A → I | -A | ( E );I → a | b | Ia | Ib;
Si mostri, tramite un esempio, che G e ambigua.
4/39 Programmazione II Lezione 4 29/10/2010
Esercizi
Esercizio 2
Scrivere la grammatica per generare il linguaggio delle parentesi bilanciate.Quindi, mostrare la derivazione (destra) per la stringa ()((()())).
5/39 Programmazione II Lezione 4 29/10/2010
Esercizi
Esercizio 3
Nelle grammatiche regolari (chiamate anche lineari) nel lato destro di ogniproduzione compare al piu un solo non-terminale; sono dette lineari destre se ilnon-terminale compare a destra del terminale.
N → tM;N → t;
Utilizzando una grammatica lineare destra generare il linguaggio:
{anbcdm | n ≥ 0, m ≥ 0}
6/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Parte II
Panoramica della Programmazione Ad Oggetti
7/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Paradigmi di Programmazione
Programmazione non strutturata.
Programmazione procedurale.
Programmazione modulare.
Programmazione ad oggetti.
8/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Programmazione Non Strutturata
Il programma e costituito da un unico blocco di codice detto “main” dentro ilquale vengono manipolati i dati in maniera totalmente sequenziale.
9/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Programmazione Procedurale
Il concetto base e quello di raggruppare i pezzi di programma ripetuti inporzioni di codice (le procedure) utilizzabili e richiamabili ogni volta che se nepresenti l’esigenza. Il programma e costituito da un unico file.
10/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Programmazione Modulare
Le procedure aventi un dominio comune (ad esempio, procedure che eseguonooperazioni matematiche) vengono raggruppate in moduli separati. Ilprogramma e costituito da piu file.
11/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Programmazione Orientata agli Oggetti
Object Oriented Programming (OOP): esistono un insieme di oggetti cheinteragiscono scambiandosi messaggi, ognuno dei quali mantiene il propriostato e dati.
12/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Motivazioni
Migliorare la qualita del software.
I programmi di grandi dimensioni vengono scomposti in moduli (oggetti).
Ne trae beneficio la fase di manutenzione.
Riutilizzo del codice.
13/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Oggetti
Cos’e un oggetto?
Es. (vita reale): un’automobile, un computer, un telefono, etc.
Un oggetto puo essere definito elencando sia le sue caratteristiche sia isuoi comportamenti, cioe le funzioni che mette a disposizione.
Elencando le caratteristiche e i comportamenti, diamo una definizionegenerica.
Un oggetto pero e un’entita particolare, con le sue caratteristichespecifiche.
14/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Esempio
Ad un preciso oggetto assegniamo un nome: ad esempio, un oggetto dellaclasse automobile e chiamato auto1.
L’oggetto auto1 puo essere descritto:
Velocita = 160.Colore = grigio.Numero di porte = 5.Marca = Toyota.
Un altro oggetto auto2 puo avere le seguenti caratteristiche:
Velocita = 140.Colore = nero.Numero di porte = 3.Marca = Fiat
Gli oggetti sono diversi a seconda del valore assunto dalle lorocaratteristiche, ma condividono la stessa struttura.
15/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Terminologia
Le caratteristiche di un oggetto sono chiamate attributi, i comportamentisono chiamati metodi.
I metodi sono le operazioni che un oggetto e in grado di compiere.
Un oggetto = attributi + metodi.
16/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Classi
Possono esistere piu oggetti che hanno gli stessi attributi, anche convalori diversi, e che dispongono degli stessi metodi. Si dice che questioggetti appartengono alla stessa classe.
Una classe specifica gli attributi, senza indicarne il valore, e i metodi chedevono avere gli oggetti che appartengono alla classe.
La classe permette di creare vari oggetti aventi gli stessi attributi e glistessi metodi. Gli oggetti creati a partire da una classe vengono chiamatiistanze della classe.
Due istanze della stessa classe sono distinguibili solo per il valore dei loroattributi, mentre il loro comportamento (metodo) rimane lo stesso.
17/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Struttura di una Classe
18/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Esempio
19/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Interazione Tra Oggetti
Un programma ad oggetti e composto da tanti oggetti che comunicano einteragiscono tra loro.
L’interazione tra gli oggetti avviene con un meccanismo chiamatoscambio di messaggi.
Un oggetto, inviando un messaggio ad un altro oggetto, puo richiederel’esecuzione di un metodo.
Un oggetto puo interagire con un altro oggetto per diversi motivi: permodificarne lo stato, per richiedere un’informazione o per attivare uncomportamento.
20/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Messaggio
Un messaggio e costituito da 3 parti:
1 un destinatario, cioe l’oggetto verso il quale il messaggio e indirizzato;
2 il metodo che si vuole attivare, che deve essere uno dei metodi messi adisposizione dall’oggetto destinatario;
3 l’insieme dei parametri che vengono passati all’oggetto quando si richiedel’attivazione del metodo.
21/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Esempio
Supponiamo di aver definito una classe automobile e una classe autista:
un oggetto autista1 (istanza della classe autista) per inviareall’oggetto auto1 (istanza della classe automobile) il messaggio cherichiede di aumentare la velocita scrive il messaggioauto1.accelera(60).
22/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Incapsulamento
Con il termine incapsulamento si indica la proprieta degli oggetti diincorporare al loro interno sia gli attributi che i metodi, cioe lecaratteristiche e i comportamenti dell’oggetto.
Tutto cio che si riferisce ad un certo oggetto e racchiuso all’interno
dell’oggetto stesso:
gli attributi e i metodi sono incapsulati nell’oggetto.
23/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Interfaccia
Un oggetto puo essere utilizzato inviando ad esso i messaggi. L’insiemedei messaggi, che consentono l’interazione con gli oggetti, rappresenta lasua interfaccia.
L’interfaccia e costituita dall’elenco dei metodi identificati dal loro nome.Per ogni metodo sono specificati anche il numero e il tipo dei parametri eil tipo di ritorno del metodo.
Chi utilizza l’oggetto ha bisogno di conoscere solo la sua interfaccia: qualimetodi possono essere invocati, quali sono i parametri da passare e quali itipi di ritorno.
24/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Accesso Agli Attributi
Anche gli attributi sono nascosti nell’oggetto.
Per poter leggere o modificare il valore di un attributo, e preferibileutilizzare un metodo che esegue l’operazione richiesta.
Ad esempio, per conoscere il valore della velocita dell’oggetto auto1
possiamo usare il seguente messaggio: auto1.leggiVel().
Questo garantisce l’information hiding, ma comporta che per ogniattributo dell’oggetto siano definiti il metodo per leggere e il metodo permodificare il proprio valore.
Alcuni linguaggi consentono di manipolare direttamente gli attributi:
es, auto1.vel;questa modalita di accesso agli attributi viola la regoladell’information hiding: infatti, gli attributi non restano piu nascostiall’interno dell’oggetto;“vantaggio” di poter manipolare gli attributi senza usare i messaggi.
25/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Ereditarieta
L’ereditarieta e lo strumento che permette di costruire nuove classiutilizzando quelle gia sviluppate.
Quando una classe e creata attraverso il meccanismo di ereditarieta apartire da un’altra classe, essa riceve in eredita tutti gli attributi e imetodi della classe generatrice.
La classe che e stata derivata da un’altra tramite il meccanismodell’ereditarieta prende il nome di sottoclasse. La classe generatrice diuna sottoclasse si chiama sopraclasse.
Queste relazioni tra le classi individuano una gerarchia che nasce da un
processo di specializzazione:
le classi che si trovano in cima alla gerarchia sono le piu generali eman mano che si scende si trovano classi piu specializzate.
26/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Esempio
27/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Ereditarieta
La sottoclasse eredita dalla sopraclasse tutti gli attributi e tutti i metodicon la possibilita di aggiungere nuove proprieta.
La nuova classe si differenzia dalla sopraclasse:
per estensione, quando la sottoclasse aggiunge nuovi attributi emetodi che si sommano a quelli ereditati;per ridefinizione, quando la sottoclasse ridefinisce i metodi ereditati,viene cioe data un’implementazione diversa di un metodo
28/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Tipi di Ereditarieta
Esistono due tipi di ereditarieta:
singola;
multipla.
29/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Ereditarieta Singola
Una sottoclasse deriva da un’unica sopraclasse.
30/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Ereditarieta Multipla
Una classe deriva da due (o piu) sopraclassi.
31/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Polimorfismo
Uno stesso oggetto puo avere piu tipi.
Polimorfismo ad hoc (overloading).
Polimorfismo universale:
parametrico;di sottotipo (inclusione).
32/39 Programmazione II Lezione 4 29/10/2010
Panoramica della Programmazione Ad Oggetti
Paradigmi di ProgrammazioneOggetti e ClassiIncapsulamentoEreditarietaPolimorfismo
Esempio (Overloading)
Tutti i veicoli a motore possiedono il metodo accelera:
le sottoclassi automobile e moto ereditano il metodo accelera, e loridefiniscano per adeguarlo alle loro esigenze:
nell’automobile si manifestera con la pressione del pedale;nella moto e implementato con il movimento della manopola.
queste due diverse implementazioni mettono in evidenza l’aspettopolimorfico del metodo accelera.
Durante l’esecuzione del programma, un’istanza della classe veicoli amotore puo rappresentare sia un’automobile che una moto.
Non e possibile sapere, staticamente, se si tratta di un’automobile o diuna moto.
Il collegamento dinamico garantisce che, richiamando il metodo, tra tuttele implementazioni sia scelta quella corretta che corrisponde all’oggettointeressato.
33/39 Programmazione II Lezione 4 29/10/2010
Esercitazione: Installare il Java Development Kit
Parte III
Esercitazione: Installare il Java Development Kit
34/39 Programmazione II Lezione 4 29/10/2010
Esercitazione: Installare il Java Development Kit Java Development Kit
Installare il Java Development Kit
In http://www.oracle.com/technetwork/java/javase/downloads/index.html selezionare “Download JDK”.
35/39 Programmazione II Lezione 4 29/10/2010
Esercitazione: Installare il Java Development Kit Java Development Kit
Installare il Java Development Kit
Selezionare il sistema operativo e proseguire.
36/39 Programmazione II Lezione 4 29/10/2010
Esercitazione: Installare il Java Development Kit Java Development Kit
Installare il Java Development Kit
Scaricare l’eseguibile.
37/39 Programmazione II Lezione 4 29/10/2010
Esercitazione: Installare il Java Development Kit Java Development Kit
Installare il Java Development Kit
Installarlo:
$ chmod +x jdk-6u22-linux-i586.bin
$ sudo ./jdk-6u22-linux-i586.bin
Aggiungere al path la directory contenente i binari; ad es. aggiungere in~/.bashrc:
export PATH=/usr/lib/jvm/java-6-sun-1.6.0.22/bin:$PATH
Per vedere se l’installazione e andata a buon fine, controllare la versione:
$ java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Server VM (build 17.1-b03, mixed mode)
38/39 Programmazione II Lezione 4 29/10/2010
Esercitazione: Installare il Java Development Kit Java Development Kit
Scrivere, Compilare, Eseguire il Primo Programma da Shell
Creare e aprire un file Hello.java con un editor di testo, ad es.:
$ emacs Hello.java
Scrivere il seguente programma:
1 p u b l i c c l a s s Hello
2 {3 p u b l i c s t a t i c v o i d main ( String [ ] args )4 {5 System . out . println ( ” H e l l o World ! ” ) ;6 }7 }
Compilare il programma:
$ javac Hello.java
Eseguire il programma:
$ java Hello
Hello World!39/39 Programmazione II Lezione 4 29/10/2010