Modulo a modulo A



Scaricare 2.66 Mb.
22.05.2018
Dimensione del file2.66 Mb.



Modulo A

  • Modulo A

  • Modulo B

    • Tecniche di progetto
      • Docente: Prof. Alessandro Roncato


Introduzione: tipi di dato, oggetti, classi e metodi

  • Introduzione: tipi di dato, oggetti, classi e metodi

  • Progetto e implementazione di classi

    • meccanismi di encapsulation
  • Interfacce ed ereditarietà

    • polimorfismo
  • Programmazione parametrica

    • strutture dati e classi collezione
  • Programmazione ad eventi



Design patterns

  • Design patterns

  • Casi di studio di progettazione

  • Esemi di implementazione



Java Concepts. Cay Horstmann. Wiley & Sons

  • Java Concepts. Cay Horstmann. Wiley & Sons

    • Disponibile anche in Italiano: Concetti di Informatica e Fondamenti di Java APOGEO
  • Applying UML and patterns. Craig Larman. Pearson Education.



Disponibili on line

    • Disponibili on line
    • http://www.dsi.unive.it/~po
    • Utili per prendere appunti a lezione
    • NON sono un libro di testo
    • NON sono sufficienti per preparare l’esame


Esame scritto (50%)

  • Esame scritto (50%)

    • Copre l’intero programma (mod A + mod B)
  • Progetto (30%)

    • Individuale, in Java
    • Dalla specifica funzionale all’implementazione
  • Esercitazioni a casa (20%)

    • Individuali


Informazioni e news sulla pagina web

  • Informazioni e news sulla pagina web

  • http://www.dsi.unive.it/~po

















Una chiamata di metodo

  • Una chiamata di metodo



Compilazione

  • Compilazione

    • javac HelloWorld.java
  • Se ha successo crea il file

    • HelloWorld.class
  • Esecuzione

    • java HelloWorld.class
  • Output

    • Hello World!


Una macchina astratta:

  • Una macchina astratta:

    • esegue codice intermedio (bytecode)
    • specifica (istruzioni, registri, heap,…) indipendente dall’architettura sottostante
  • Indipendente dal sistema operativo ‏

  • Presente nei browser più diffusi

  • Implementazioni specifiche per smart card, palmari, cellulari (KVM) …



CLASS LOADER

  • CLASS LOADER

  • carica in memoria tutte le classi necessarie al programma (anche quelle delle librerie usate)‏

  • BYTECODE VERIFIER

  • Controlla l’integrità degli accessi in memoria, verifica l’aderenza alla specifica della JVM, …

  • SECURITY MANAGER

  • verifica la sicurezza delle classi caricate a run time, controlla gli accessi ai file, …





Ogni valore nel linguaggio ha un tipo

  • Ogni valore nel linguaggio ha un tipo

  • Ogni variabile deve essere dichiarata ed associata ad un tipo:

  • Il tipo determina quali sono le operazioni legali sui valori (e le variabili)

  • Variabili di un tipo possono solo assumere valori di quel tipo



Il compilatore controlla che il programma rispetti strettamente tutte le regole

  • Il compilatore controlla che il programma rispetti strettamente tutte le regole

    • controlla l’uso dei cast
  • I programmi che superano i controlli del compilatore non causano errori nelle operazioni sui dati



OGGETTI

  • OGGETTI

  • Le strutture dati complesse di un programma

    • in C: structs, unions e arrays
    • In Java: oggetti (arrays inclusi)
  • Generalizzazione delle struct di C

    • campi: struttura dell’ggetto
    • metodi: operazioni sui campi
  • CLASSI

    • Descrivono la struttura dei campi
    • Definiscono l’implementazione dei metodi
    • Sono i tipi degli oggetti


Ogni oggetto appartiene ad una classe.

  • Ogni oggetto appartiene ad una classe.

  • un oggetto di classe PrintStream





Classe definita nella libreria java.awt

  • Classe definita nella libreria java.awt

  • Descrive la struttura di un rettangolo posizionato sul piano cartesiano



Il costrutto new invoca il costruttore, per allocare nuovo oggetto di tipo Rectangle

  • Il costrutto new invoca il costruttore, per allocare nuovo oggetto di tipo Rectangle

    • Il nome del costruttore coincide con il nome della classe
    • Usa i parametri (5, 10, 20, e 30) per inizializzare i dati dell’oggetto
  • Restituisce un riferimento all’oggetto



Una classe può fornire più di un costruttore

  • Una classe può fornire più di un costruttore

  • Overloading

  • Diverse modalità di creazione di oggetti



  • Costruisce un nuovo oggetto, inizializza lo stato con i parametri, e restituisce un riferimento all’oggetto costruito.



Realizzano le operazioni supportate dagli oggetti

  • Realizzano le operazioni supportate dagli oggetti

  • Definiti dalla classe

    • Classe definisce l’implementazione
    • Descrive la firma visibile all’esterno
  • Invocazione

    • Deve indicare l’oggetto “target”




toUpperCase: crea un altro oggetto di tipo String che contiene i caratteri della stringa originaria, ma convertiti in maiuscolo

  • toUpperCase: crea un altro oggetto di tipo String che contiene i caratteri della stringa originaria, ma convertiti in maiuscolo



length(): conta il numero di caratteri della stringa

  • length(): conta il numero di caratteri della stringa



Quale è la sequenza di istruzioni per calcolare la lunghezza della stringa “Arcobaleno”?

  • Quale è la sequenza di istruzioni per calcolare la lunghezza della stringa “Arcobaleno”?

  • Quale è la sequenza di istruzioni per stampare la versione uppercase della stringa "Hello, World!"?

  • È legale la seguente sequenza di istruzioni?

  • Perché o perché no?



  • Non è legale: la variabile fiume ha tipo String e la classe String non definisce il metodo println()



La classe di un oggetto definisce quali metodi si possono invocare sugli oggetti della classe

  • La classe di un oggetto definisce quali metodi si possono invocare sugli oggetti della classe

  • Il compilatore controlla che le invocazioni rispettino la dichiarazione della classe



La classe di un oggetto definisce quali metodi si possono invocare sugli oggetti della classe

  • La classe di un oggetto definisce quali metodi si possono invocare sugli oggetti della classe

  • I metodi di un oggetto sono l’unico modo per agire sui campi dell’oggetto



getWidth(): restituisce il valore che corrisponde alla base del rettangolo

  • getWidth(): restituisce il valore che corrisponde alla base del rettangolo



Translate(): modifica l’oggetto su cui viene invocato, traslando di x a destra, e di y verso il basso

  • Translate(): modifica l’oggetto su cui viene invocato, traslando di x a destra, e di y verso il basso

  • Mutators: metodi con side effects per modificare i valori dei campi





Un riferimento è una astrazione del puntatore ad un oggetto

  • Un riferimento è una astrazione del puntatore ad un oggetto

  • La creazione di un oggetto con new restituice un riferimento al nuovo oggetto

  • Diverse variabili di tipo oggetto possono condividere lo stesso riferimento



Il comportamento dell’operazione di assegnamento varia a seconda del tipo della variabile (e quindi del valore) coinvolto.

  • Il comportamento dell’operazione di assegnamento varia a seconda del tipo della variabile (e quindi del valore) coinvolto.

  • L’assegnamento su variabili di tipo primitivo ha un effetto diverso dall’assegnamento su variabili di tipo oggetto











Un programma è costituito da più classi

  • Un programma è costituito da più classi

  • Classe applicazione: contiene il main

    • al più una classe applicazione in un programma
  • Il main avvia la computazione

    • costruisce uno o più oggetti delle del programma
    • Invoca i metodi su tali oggetti
    • Stampa i risultati




Sempre includere le classi di libreria utilizzate dall’applicazione

  • Sempre includere le classi di libreria utilizzate dall’applicazione

    • classi delle librerie raggruppate in packages
    • Importiamo le classi specificando i nomi di package e di classe
    • Le classi del package java.lang (ad esempio String e System)sono importate automaticamente




API: Application Programming Interface

  • API: Application Programming Interface

  • Include la descrizione delle classi e dei relativi metodi della (fornitissima!) libreria Java

  • http://java.sun.com/j2se/1.5/docs/api/index.html

  • http://java.sun.com/j2se/1.6/docs/api/index.html











Quali sono gli errori nei seguenti frammenti di codice?

  • Quali sono gli errori nei seguenti frammenti di codice?

    • Rectangle r = (5,10,15,20)
    • Double w = Rectangle().getwidth();
    • Rectangle r; r.translate(5,10);


    • Manca il costruttore
    • Manca new
    • r non è inizializzato


Vogliamo progettare una applicazione che realizza il gioco della tombola

  • Vogliamo progettare una applicazione che realizza il gioco della tombola

  • Versione semplificata: un banco, un giocatore, ogni giocatore una scheda

  • Ci vengono già fornite le classi necessarie

    • Banco
    • Giocatore


Costruttore:

  • Costruttore:

    • Banco()
    • crea una nuova istanza della classe
  • Metodi:

    • int estraiNumero()
    • restituisce un numero nell’intervallo [1..90]
    • (ad ogni chiamata genera un numero diverso)


Costruttore

  • Costruttore

    • Giocatore(String nome)
    • crea un giocatore, con il nome indicato ed una sola scheda
  • Metodi:



Metodi:

  • Metodi:

    • boolean tombola()
    • restituisce true quando tutti i numeri della sua scheda sono “marcati”
    • Integer[] verifica()
    • restituisce un array che contiene i numeri della sua scheda
    • Integer è un tipo reference isomorfo al tipo int


La classe applicazione che realizza il gioco:

  • La classe applicazione che realizza il gioco:

    • crea un banco ed un giocatore
    • esegue un ciclo in cui ad ogni iterazione in banco estrae un numero, il giocatore lo controlla e controlla se ha completato la sua scheda
    • il ciclo termina non appena il giocatore completa la sua scheda
    • All’uscita dal ciclo stampa i numeri della scheda del giocatore




Nessuna informazione data sulla struttura interna degli oggetti in gioco

  • Nessuna informazione data sulla struttura interna degli oggetti in gioco

  • Conosciamo i metodi che essi forniscono

    • notare bene: conosciamo la specifica dei metodi, non come sono implementati
  • E’ tutto quello che serve per programmare l’applicazione

  • La chiave del concetto di encapsulation



Oggetti

  • Oggetti

    • esportano la specifica dei propri metodi
      • interfaccia pubblica che definisce l’interazione
      • tra oggetti e codice “cliente”
    • mascherano la propria struttura interna (i campi) e l’implementazione dei metodi
  • Codice cliente

    • indipendente dall’implementazione degli oggetti


Create una versione della tombola in cui possono giocare più giocatori

  • Create una versione della tombola in cui possono giocare più giocatori

    • Il gioco termina non appena uno dei giocatori completa la sua scheda


Argomenti = dati in input per i metodi

  • Argomenti = dati in input per i metodi

  • Non tutti i metodi hanno argomenti

  • Tutti i metodi hanno un argomento implicito: l’oggetto su cui il metodo viene invocato





Introduzione alle applicazione grafiche

  • Introduzione alle applicazione grafiche

    • contesto grafici
    • forme geometriche elementari
    • colori
    • “input dialogs” per ottenere input dall’utente
  • Frames e applets



La classe JFrame

  • La classe JFrame

  • import javax.swing.*;







Come dobbiamo modificare EmptyFrameViewer per ottenere un frame quadrato con titolo "Hello, World!"?

  • Come dobbiamo modificare EmptyFrameViewer per ottenere un frame quadrato con titolo "Hello, World!"?

  • Come scriviamo un programma che lancia due frames?



Modifca EmptyFrameViewer come segue:

  • Modifca EmptyFrameViewer come segue:

  • Costruisci due oggetti JFrame definendone la dimensione e poi invoca setVisible(true) su ciascuno



JComponent

  • JComponent

    • La classe che definisce contenitori generici, al cui interno includiamo forme geometriche
  • Possiamo definire nuovi JComponent



paintComponent

  • paintComponent

    • metodo che produce il disegno
    • invocato (automaticamente) tutte le volte che il componente per il quale è definito viene ridisegnato


paintComponent(Graphics g)

  • paintComponent(Graphics g)

    • g contesto grafico
    • Graphics classe che permette di manipolare lo stato del contesto grafico


Graphics2D estende Graphics con metodi per il rendering in due dimensioni

  • Graphics2D estende Graphics con metodi per il rendering in due dimensioni

  • Ad esempio:

  • package java.awt







ShapeViewer

  • ShapeViewer

    • classe che lancia una finestra all’interno della quale vengono raffigurate Ie componenti
    • L’applicazione è costruita interamente all’interno del metodo main della classe
    • Disegna due rettangoli




Costruisci il frame

    • Costruisci il frame
    • Costruisci un oggetto della classe component
    • Aggiunti il component al frame La chiamata è leggermente più complicata per versioni di Java precedenti alla 5:
    • Rendi visibile il frame






Che succede se sostituiamo la chiamata g2.draw(box)con g.draw(box) ?

  • Che succede se sostituiamo la chiamata g2.draw(box)con g.draw(box) ?



Il compilatore segnala un errore

  • Il compilatore segnala un errore

  • g : Graphics non ha un metodo draw



Applets sono applicazioni eseguite all’interno di un browser

  • Applets sono applicazioni eseguite all’interno di un browser

  • L’implementazione di una Applet utilizza il pattern seguente:



Struttura molto simile a quella di un JComponent, con due differenze:

  • Struttura molto simile a quella di un JComponent, con due differenze:

    • Estende JApplet, invece di JComponent
    • codice del disegno incluso nel metodo paint, invece che nel metodo paintComponent






Esecuzione

  • Esecuzione

    • creare un file HTML ed inserire il codice che lancia l’applet mediante la tag applet
    • Un file HTML può contenere diverse applets, ciascuno delle quali introdotta da una corrispondente tag (di tipo applet)
  • Una applet può essere lanciata mediante l’appletviewer, o all’interno di un browser







Rectangle, Ellipse2D.Double, Line2D.Double (package java.awt.geom)

  • Rectangle, Ellipse2D.Double, Line2D.Double (package java.awt.geom)

  • Alcune classi, e.g. Line2D.Double, sono interne. Per il momento ignoriamo, ma notiamo la dichiarazione import

  • Per ottenere una forma dobbiamo costruirla e disegnarla





Due modi per disegnare una linea: oppure,

  • Due modi per disegnare una linea: oppure,





Quale è la sequenza di istruzioni per disegnare un cerchio con centro (100, 100) e raggio 25?

  • Quale è la sequenza di istruzioni per disegnare un cerchio con centro (100, 100) e raggio 25?

  • Quale è una usequenza di istruzioni per disegnare la lettera "V" all’origine (0,0) componendo due segmenti di linea?

  • Quale è la sequenza di istruzioni per disegnare la stringa costituita dalla lettera "V" ?





Colori standard Color.BLUE, Color.RED, …

  • Colori standard Color.BLUE, Color.RED, …

  • Nuovi colori: formato rgb settando i valori delle componenti red, green, blue tra 0.0F e 1.0F

  • setColor setta il colore del Graphic Contexts

  • Usa il colore con i metodi draw e fill



Quale è la sequenza di istruzioni per disegnare un quadrato giallo su uno sfondo rosso?

  • Quale è la sequenza di istruzioni per disegnare un quadrato giallo su uno sfondo rosso?



Disegna un quadrato giallo all’interno di un quadrato rosso:

  • Disegna un quadrato giallo all’interno di un quadrato rosso:





Condividi con i tuoi amici:


©astratto.info 2019
invia messaggio

    Pagina principale