Programmazione AA 2012 2013



Documenti analoghi
Programmazione ad oggetti

Java: Compilatore e Interprete

Introduzione a Classi e Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Oggetti Lezione 3. aspetti generali e definizione di classi I

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Programmazione in Java Parte I: Fondamenti

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Programmazione ad Oggetti. Java Parte I

Struttura di un programma Java

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Telematica II 17. Esercitazione/Laboratorio 6

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Esercitazione n 4. Obiettivi

Java Virtual Machine

Il linguaggio Java. Concetti base. I packages

GESTIONE DEI PROCESSI

Funzioni in C. Violetta Lonati

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Concetto di Funzione e Procedura METODI in Java

Tale attività non è descritta in questa dispensa

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Strumenti per la programmazione

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Programmazione a Oggetti Lezione 10. Ereditarieta

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Programmazione Java: Variabili membro, Metodi La parola chiave final

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Primi programmi in Java. Lezione IV

Progettazione : Design Pattern Creazionali

Appunti di Informatica 1

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Java? Sì, grazie. Scopo del corso

Programmazione A.A Programmazione Orientata agli Oggetti: Lavorare con gli oggetti ( Lezione XXVII)

Programmazione Java. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 3. Alfonso Miola Settembre 2007

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Traduzione ed esecuzione di programmi. Dispensa 08

Java: Compilazione e Traduzione. Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA. C: Editing, compilazione, esecuzione

Algoritmi di Ricerca. Esempi di programmi Java

Programmare in Java. Olga Scotti

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

INTRODUZIONE INTRODUZIONE JAVA JAVA

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Eclipse. Avviare un progetto e compilare un semplice programma

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Corso di Informatica

Inizializzazione, Assegnamento e Distruzione di Classi

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

costruttori e distruttori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

2 - Introduzione al linguaggio Java

Allocazione dinamica della memoria - riepilogo

RMI Remote Method Invocation

Programmi e Oggetti Software

La struttura dati ad albero binario

Le command line di Java

Prova di Laboratorio di Programmazione

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD

Programmazione in Java e gestione della grafica (I modulo) Lezione 1: Presentazione corso

Soluzione dell esercizio del 2 Febbraio 2004

UML Diagrammi delle classi. UML Diagramma classi 1

dall argomento argomento della malloc()

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Informatica. Prof. A. Longheu. Introduzione a Java

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Livelli di astrazione

Parola chiave extends

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Scrivere un programma in Java

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Scope e visibilità per classi

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

FONDAMENTI di INFORMATICA L. Mezzalira

Approccio stratificato

4. Un ambiente di sviluppo per Java

10 - Programmare con gli Array

Elementi di semantica operazionale

esercizi Esercizi / problemi

Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 Outline

Protezione. Protezione. Protezione. Obiettivi della protezione

Progettaz. e sviluppo Data Base

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Transcript:

Programmazione ad Oggetti AA 2012 2013

Contenuti del corso Modulo A Tecniche di programmazione Docente: Prof. Michele Bugliesi Modulo B Tecniche di progetto Docente: Prof. Alessandro Roncato

Contenuti del corso Modulo A 1. Introduzione: tipi di dato, oggetti, classi e metodi 2. Progetto e implementazione di classi meccanismi di encapsulation 3. Interfacce ed ereditarietà polimorfismo 4. Programmazione parametrica strutture dati e classi collezione 5. Programmazione ad eventi

Contenuti del corso Modulo B 1. Design patterns 2. Casi di studio di progettazione 3. Esempi di implementazione

Libri di testo 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. Disponibile anche in Italiano

Slides del corso 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

Valutazione: A. Tre prove intermedie per ciascun modulo in aula e/o in laboratorio ALTERNATIVAMENTE A. Prova scritta al termine del corso Due parti, una per modulo B. Discussione orale

Il corso on-line Informazioni e news sulla pagina web http://www.dsi.unive.it/~po

Java TM L ambiente di programmazione

Java TM Alto livello No puntatori, no gestione esplicita della memoria (free/malloc) Espressivo Facilmente estendibile con nuovi tipi di dato, ricca collezione di tipi nelle librerie Portabile: bytecode eseguibile su JVM Robusto controllo dei tipi forte, analisi di sicurezza

Java TM nato per la rete

Versioni di Java TM Versione Anno Novità 1.0 1996 Prima versione 1.1 1997 Classi interne 1.2 1998 Swing e Collections 1.3 2000 Nuovo compilatore 1.4 2002 Asserzioni 1.5 2005 Generics, auto-boxing, for loops 1.6 2006 Aggiornamento delle Librerie 1.7 2011 Aggiornamenti Linguaggio, Librerie, VM

La piattaforma Java TM

Compilazione ed Esecuzione Sorgente Bytecode A.java A.class

Una vecchia conoscenza... 1: public class HelloWorld 2: { 3: public static void main(string[] args) 4: { 5: // Scrivi in output un saluto 6: 7: System.out.println("Hello, World!"); 8: } 9: }

Il cuore del programma Una chiamata di metodo

Compilazione ed esecuzione Compilazione javac HelloWorld.java Se ha successo crea il file HelloWorld.class Esecuzione java HelloWorld.class Output Hello World!

JVM Java Virtual Machine 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, Dalvik)

Java Virtual Machine JVM Class Loader Bytecode Verifier Security Manager Interpreter 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,

JAVA IL LINGUAGGIO

Tipi e variabili Ogni valore nel linguaggio ha un tipo Ogni variabile deve essere dichiarata ed associata ad un tipo: String greeting = "Hello, World!"; PrintStream printer = System.out; int luckynumber = 13; Il tipo determina quali sono le operazioni legali sui valori (e le variabili) Variabili di un tipo possono solo assumere valori di quel tipo

Controllo dei tipi forte 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 e classi 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

Oggetti e classi Ogni oggetto appartiene ad una classe. un oggetto di classe PrintStream

Due oggetti di tipo String Ogni oggetto ha una copia privata dei suoi campi campo campo Tutti gli oggetti di una classe condividono lo stesso codice dei metodi

Oggetti di classe Rectangle Classe definita nella libreria java.awt Descrive la struttura di un rettangolo posizionato sul piano cartesiano (x,y) = posizione origine: angolo in alto a sinistra campi privati dell oggetto

Costruttori new Rectangle(5, 10, 20, 30) 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 Rectangle box = new Rectangle(5, 10, 20, 30);

Costruttori Una classe può fornire più di un costruttore Overloading Diverse modalità di creazione di oggetti Rectangle box1 = new Rectangle(5, 10, 20, 30) Rectangle box2 = new Rectangle() // costruisce un rettangolo con origine (0,0) // larghezza 0, e altezza zero 0

Sintassi: new new ClassName(parameters) Esempi: new Rectangle(5, 10, 20, 30) new Rectangle() Costruisce un nuovo oggetto, inizializza lo stato con i parametri, e restituisce un riferimento all oggetto costruito.

Metodi 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 oggetto.metodo(argomenti) Continua

Metodi della classe PrintStream

Metodi della classe String touppercase: crea un altro oggetto di tipo String che contiene i caratteri della stringa originaria, ma convertiti in maiuscolo Oggetto Metodo String fiume = "Mississippi"; String fiumeinuppercase = fiume.touppercase(); // fiumeinuppercase = "MISSISSIPPI" Continua

Metodi della classe String length(): conta il numero di caratteri della stringa Oggetto Metodo String greeting = new String("Hello, World! ); int n = greeting.length(); // n = 13 (new String( pippo )).touppercase() Oggetto Metodo

Controllo di tipi forte 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 System.out.length(); // ERRORE DI TIPO (COMPILE-TIME)

Controllo di tipi forte 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 Rectangle box = new Rectangle(5,10,20,20). System.out.println(box.width); // ERRORE DI TIPO

Metodi della classe Rectangle getwidth(): restituisce il valore che corrisponde alla base del rettangolo Rectangle box = new Rectangle(5,10,20,20). System.out.println(box.width); // ERRORE DI TIPO System.out.println(box.getWidth()); // OK Continua

Metodi della classe Rectangle Translate(): modifica l oggetto su cui viene invocato, traslando di x a destra, e di y verso il basso box.translate(x, y); Mutators: metodi con side effects per modificare i valori dei campi Continua

Metodi e side-effects box.translate(15, 25);

Domande 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? String fiume = "Mississippi"; fiume.println(); Perché o perché no?

Risposte new String( Arcobaleno ).length() System.out.println( Hello World.toUpperCase()); Non è legale: la variabile fiume ha tipo String e la classe String non definisce il metodo println()

Oggetti e riferimenti Un riferimento è una astrazione del puntatore ad un oggetto La creazione di un oggetto con new restituice un riferimento al nuovo oggetto Rectangle box = new Rectangle(); Diverse variabili di tipo oggetto possono condividere lo stesso riferimento Rectangle box = new Rectangle(5, 10, 20, 30); Rectangle box2 = box; Continua

Assegnamento 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 L assegnamento su variabili di tipo primitivo ha un effetto diverso dall assegnamento su variabili di tipo oggetto

Variabili di tipo primitivo Contengono valori del loro tipo

Variabili di tipo oggetto Contengono riferimenti ad oggetti, non oggetti

Assegnamento su tipi primitivi int luckynumber = 13; int luckynumber2 = luckynumber; luckynumber2 = 12; Due variabili, due valori distinti

Assegnamento su tipi oggetto Rectangle box = new Rectangle(5, 10, 20, 30); Rectangle box2 = box; box2.translate(15, 25); Due variabili, stesso riferimento Continua

Programmi e classi applicazione 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

File RectangleApp.java 01: import java.awt.rectangle; 02: 03: public class RectangleApp 04: { 05: public static void main(string[] args) 06: { 07: Rectangle box = new Rectangle(5, 10, 20, 30); 08: 09: // Sposta il rettangolo 10: box.translate(15, 25); 11: 12: // Stampa nuove info 13: System.out.println( Origine dopo la traslazione: ); 14: System.out.println(box.getX()); 15: System.out.println(box.getY()); 16: } 17: }

Classi di libreria 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 import java.awt.rectangle; Le classi del package java.lang (ad esempio String e System)sono importate automaticamente

Classi di libreria import packagename.classname; Esempio: import java.awt.rectangle; // importa la classe Rectangle import packagename.*; Esempio: import java.util.*; // importa tutte le classi del package Import in Java ~ #include in C

Librerie Documentazione API: Application Programming Interface Include la descrizione delle classi e dei relativi metodi della (fornitissima!) libreria Java http://docs.oracle.com/javase/7/docs/api/

Documentazione sulle API

La API della classe Rectangle

Javadoc Method Summary

Documentazione del metodo translate

Domande Quali sono gli errori nei seguenti frammenti di codice? Double w = Rectangle().getWidth(); Rectangle r; r.translate(5,10);

Risposte Manca new r non è inizializzato

Esempio: 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

Banco 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)

Giocatore Costruttore Giocatore(String nome) crea un giocatore, con il nome indicato ed una sola scheda Metodi: void controllanumero(int x) controlla se il numero è contenuto nella sua scheda; se si lo marca

Giocatore 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

Tombola La classe applicazione che realizza il gioco:

Tombola public class Tombola { public static void main(string[] args) { // COMPLETARE SEGUENDO LA SPECIFICA CHE SEGUE // crea un banco ed un giocatore // esegue un ciclo in cui ad ogni iterazione il 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 stampa i numeri della // scheda del giocatore

NOTE 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 / Encapsulation 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