Programmazione ad oggetti



Похожие документы
Programmazione AA

Oggetti Lezione 3. aspetti generali e definizione di classi I

Java: Compilatore e Interprete

Introduzione a Classi e Oggetti

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

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

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

Programmazione in Java Parte I: Fondamenti

Struttura di un programma Java

Programmare in Java. Olga Scotti

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:

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

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

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

Primi programmi in Java. Lezione IV

Appunti di Informatica 1

Concetto di Funzione e Procedura METODI in Java

Scrivere un programma in Java

Esercitazione n 4. Obiettivi

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

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

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

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

Java Virtual Machine

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

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

Java? Sì, grazie. Scopo del corso

Programmazione a Oggetti Lezione 10. Ereditarieta

Le variabili. Olga Scotti

Funzioni in C. Violetta Lonati

2 - Introduzione al linguaggio Java

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

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

GESTIONE DEI PROCESSI

Programmazione ad oggetti

I metodi statici -1. Variabili statiche Vogliamo assegnare a ciascuncontoun numeroidentificativo diverso. I metodi statici -2

Variabili e tipi di dato

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

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

Introduzione alla programmazione in C

Object Oriented Programming

Strumenti per la programmazione

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

Fasi di creazione di un programma

Approccio stratificato

Le command line di Java

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

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

Eclipse. Avviare un progetto e compilare un semplice programma

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

Telematica II 17. Esercitazione/Laboratorio 6

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Protezione. Protezione. Protezione. Obiettivi della protezione

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Allocazione dinamica della memoria - riepilogo

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

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

Programmazione ad Oggetti. Java Parte I

Progettazione : Design Pattern Creazionali

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

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

Corso di Informatica

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

LINGUAGGI DI PROGRAMMAZIONE

Tale attività non è descritta in questa dispensa

Parola chiave extends

Database. Si ringrazia Marco Bertini per le slides

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

Classi ed Oggetti in JAVA

Programmi e Oggetti Software

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

costruttori e distruttori

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

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

Ambienti di Sviluppo

Linguaggio C. Fondamenti. Struttura di un programma.

Corso di Informatica

RMI Remote Method Invocation

Il Software. Il software del PC. Il BIOS

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

Informatica. Prof. A. Longheu. Introduzione a Java

I file di dati. Unità didattica D1 1

Fondamenti di programmazione in Java. Lezione III

Inizializzazione, Assegnamento e Distruzione di Classi

Esercizi della lezione 5 di Java

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011.

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Introduzione al Linguaggio C

20. Appunti sulle liste (gestione in linguaggio C#) 16/04/2015 Arraylist

Strutturazione logica dei dati: i file

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

JAIL: Javacard Abstract Interpretation-based Lifeguard

Progettaz. e sviluppo Data Base

Test di unità con JUnit4

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Gestione del workflow

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Транскрипт:

DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò

Informazioni generali Docente: Samuel Rota Bulò @email: srotabul@dais.unive.it Homepage: http://www.dais.unive.it/~srotabul/ ooprogramming2012.html Ricevimento: da concordare previa email Durata: 30 ore Lezioni: mercoledì 18:15-19:45 sabato 08:45 10:15 Esame: scritto + laboratorio + progetto

Libro di testo

Il linguaggio JAVA

Un po' di storia 1991: nasce alla Sun Microsystems con il nome green per utilizzarlo in elettrodomestici. 1994: l'ideatore di green si rende conto che il nuovo linguaggio poteva avere grosse potenzialità per applicazioni client/server. 1995: nasce ufficialmente Java 1996: v1.0 1997: v1.1, classi innestate 1998: v1.2, swing e collections 2000: v1.3, miglioramento delle prestazioni 2002: v1.4, asserzioni, XML 2004: v5.0, classi generiche, estensione ciclo for, autoincapsulamento, enumerazioni 2006: v6.0, miglioramento della libreria 2010: v7.0, piccole modifiche al linguaggio e miglioramento libreria

Caratteristiche di Java Alto livello: assenza di puntatori e gestione esplicita della memoria Imperativo: sequenza di istruzioni che modificano la memoria Ad oggetti: ogni cosa in Java è un oggetto (salvo piccole eccezioni) Portabile: bytecode eseguibile su Java Virtual Machine (JVM) Fortemente tipato: controllo forte dei tipi da parte del compilatore Sicuro: progettato per eseguire codice remotamente in modo sicuro Vivo: in continua evoluzione

La piattaforma Java

Dal sorgente all'esecuzione Macchina Hardware X Sorgente programma JAVA Compilatore JAVA Bytecode programma JAVA Macchina Virtuale JAVA Bytecode librerie JAVA Esecuzione programma Macchina Hardware Y

Java Virtual Machine (JVM) Macchina astratta: Esegue codice intermedio (bytecode) Specifica indipendente dall'architettura sottostante Indipendente del sistema operativo Esistono diverse implementazioni Componenti: Class loader: carica in memoria le classi necessarie al programma Bytecode verifier: controlla l'integrità degli accessi in memoria e l'aderenza alla specifica della JVM,... Security manager: verifica la sicurezza delle classi caricate a runtime, controlla gli accessi ai file,... Class Loader Bytecode verifier JVM Interpreter Security manager

Hello world! HelloWorld.java: public class HelloWorld { } public static void main(string[] args){ //stampa in console un messaggio System.out.println( Hello, World! ); } Compilazione: javac HelloWorld questo genera il bytecode HelloWorld.class Esecuzione su JVM: java HelloWorld Output: Hello, World!

Tipi e variabili Ogni valore nel linguaggio ha un tipo Il tipo identifica un insieme di valori e quali operazioni sono legali sugli stessi. Una variabile è una porzione di memoria del calcolatore caratterizzata da un tipo, un nome e un valore contenuto. Una variabile di tipo X può assumere solo valori di tipo X. Una variabile viene dichiarata con: nometipo nomevariabile; nometipo nomevariabile = valore; Esempi: String greetings = Hello, World! ; PrintStream printer = System.out; int width = 20;

L'operatore di assegnamento Abbiamo visto che possiamo assegnare valori alle variabili in fase di dichiarazione Mediante l'operatore = possiamo assegnare un nuovo valore ad una variabile nomevariabile = valore; Una variabile non può essere utilizzata se non viene prima assegnato un valore Il valore può essere il risultato di un espressione. Es: int width = 10; int height; height = 3; width = height + 10; // width=13 height = height + 1; // height=4

Oggetti e classi Una classe è la descrizione di una struttura dati complessa caratterizzata principalmente da: campi: variabili che conterranno i dati metodi: operazioni che agiscono sui dati Un oggetto è un'istanza di una certa classe, in cui i campi assumono valori ed è manipolabile attraverso l'invocazione dei metodi descritti nella classe. La classe rappresenta il tipo di un oggetto. In Java ogni cosa è un oggetto (salvo piccole eccezioni).

Esempio di oggetti Oggetti appartenenti alla stessa classe condividono gli stessi nomi e gli stessi tipi per i propri campi e lo stesso codice dei metodi. Oggetti distinti, anche se appartenenti alla stessa classe, occupano celle di memoria distinte per memorizzare i valori dei propri campi. Ogni oggetto ha una copia privata dei suoi campi. String data= Hello length(...) touppercase(...) String data= Pippo length(...) touppercase(...)

Nota sugli identificatori I nomi di variabili, metodi, classi devono seguire determinate regole per non incorrere in errori di compilazione: possono essere composti di lettere, cifre, $, _, ma non possono iniziare con una cifra non si possono usare simboli come?, % o spazi non si possono usare parole riservate del linguaggio come public, class, int, Esistono poi delle convenzioni sugli identificatori: le variabili e metodi iniziano con una lettera minuscola se vogliamo usare parole multiple per un identificatore le separiamo usando le lettere iniziali maiuscole. Es: lunghezzaparola le classi iniziano con una lettera maiuscola

Utilizzo di oggetti Consideriamo la classe Rectangle presente nella libreria java.awt di Java. La classe Rectangle descrive i campi necessari per modellare un rettangolo (x,y,altezza,larghezza) e i metodi per manipolarlo. Un oggetto di tipo Rectangle rappresenta una specifica istanza di rettangolo (es: x=5, y=10, larghezza=20, altezza=30) (x,y) Rectangle x=5 y=10 width=20 height=30 height... width

Costruttori Il costruttore è un metodo speciale che consente di allocare ed inizializzare un nuovo oggetto. il nome del costruttore coincide con il nome della classe può avere o meno dei parametri associati che servono a determinare l'inizializzazione dell'oggetto I costruttori vengono descritti all'interno delle classi. Un costruttore viene invocato con new e ritorna un riferimento all'oggetto costruito. new NomeClasse(parametri) Esempio: Rectangle box = new Rectangle(5,10,20,30);

Costruttori Una classe può fornire più di un costruttore In questo modo abbiamo diverse modalità con cui possiamo costruire un oggetto sulla base delle parametrizzazioni del costruttore Esempio: Rectangle box = new Rectangle(5,10,20,30); Rectangle box2 = new Rectangle(); Il costruttore Rectangle() inizializza i campi dell'oggetto a 0.

Metodi I metodi descrivono le operazioni che possono essere usate per manipolare gli oggetti L'implementazione e la firma dei metodi è descritta nella classe Il metodo agisce esclusivamente sui campi dell'oggetto che lo invoca oggetto.metodo(parametri) Un metodo può avere dei parametri o meno Un metodo può ritornare o meno un valore Es.: il metodo length di String ritorna lunghezza della stringa su cui viene invocato String greetings = Hello, world! ; String greetings2 = Ciao ; int n1 = greetings.length(); // n1=13 int n2 = greetings2.length(); // n2=4

Metodi I metodi possono accedere ai campi dell'oggetto in lettura o scrittura a seconda dell'operazione che vogliamo svolgere. I metodi che ritornano il valore di un campo per convenzione hanno un nome del tipo getnomecampo. Es: getx(), gety(). I metodi che modificano direttamente il valore di un campo per convenziona hanno un nome del tipo setnomecampo. Es: setx(10), sety(30). Metodi che modificano il valore di uno o più campi di un oggetto si dicono con side effects o mutators. Rectangle box = new Rectangle(); box.setwidth(10); box.setheight(20); box.translate(5,10); // x=x+5, y=y+10 System.out.println(box.getX()); //stampa 5

Variabili di tipo oggetto e primitive Le variabili di tipo oggetto, se inizializzate, memorizzano la posizione di un oggetto in memoria (riferimento all'oggetto) o null (riferimento nullo). Tutti gli oggetti vengono memorizzati nello heap. Il costrutto new, usato per creare un oggetto, ritorna un riferimento al nuovo oggetto creato. Diverse variabili di tipo oggetto possono condividere un riferimento ad uno stesso oggetto. In Java non abbiamo esclusivamente oggetti, ma lavoriamo anche con valori di tipo primitivo (numeri interi, virgola mobile, booleani, caratteri). In questo caso la variabile contiene un valore del loro tipo.

Variabili di tipo oggetto e primitive Rectangle box1 = new Rectangle (0,0,10,10); Rectangle box2 = box1; Rectangle box3 = null; box1.setx(2); System.out.println(box2.getX()); //stampa 2 e non 0 int width = 10; int height = width; height = 2; System.out.println(width); //stampa 10 box3.sety(0); //errore a run time box1= box2= box3= width= height= null 10 10 Rectangle x=0 y=0 width=10 height=10...

Main Un programma è composto da più classi La classe applicazione è quella che ha il metodo statico main, da cui parte la computazione. Per eseguire il programma bisogna invocare la virtual machine passando una classe applicazione (es: java HelloWorld) I parametri del main identificano i paramatri passati all'applicazione in fase di esecuzione public class HelloWorld { } public static void main(string[] args){ //stampa in console un messaggio System.out.println( Hello, World! ); }

Classi di libreria Il codice Java viene organizzato in librerie (packages) Un package può essere una directory un speciale archivio jar Importiamo una classe specificando i nomi del package e della classe import java.awt.rectangle; Le classi del package java.lang sono importante in automatico. Ne fanno parte per esempio String e System. I package seguono un'organizzazione gerarchica. Possiamo avere sotto-package di altri package (es: java.awt.event) Possiamo importare tutte le classi di un package (ma non verranno inclusi in automatico i sotto-package) import java.awt.*; import java.awt.event.*;

Documentazione Java Le librerie Java sono ben documentate. La documentazione on-line (javadoc) include una descrizione dei package e delle relative classi (campi, metodi e costruttori con accesso non privato) http://docs.oracle.com/javase/7/docs/api/

Documentazione Java

Documentazione Java

Documentazione Java

Documentazione Java