Capitolo 2. Utilizzare oggetti

Documenti analoghi
Questi lucidi provengono dal capitolo 2 di:

Capitolo 3. Realizzare classi

Capitolo 3. Realizzare classi. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Oggetti. Oggetti e classi. Utilizzo di classi. Classe

Livelli di astrazione

Realizzare classi. Cosa abbiamo fatto finora. Realizzare classi. Realizzare classi. Realizzare classi. Realizzare classi

sayhello public private protected return public class Greeter { public String sayhello() { String message = Hello, World! ; return message; } }

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Variabili e Parametri. Scope, Lifetime Inizializzazione

Variabili e Parametri

Metodi e variabili istanza

Capitolo 2. Utilizzare oggetti

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 07. Oggetti e Java. Marzo Programmazione Java 1

Introduzione Programmazione Java

14 - Metodi e Costruttori

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.

Programmazione Java Avanzata Programmazione Object- Oriented in Java

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

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

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

Capitolo 4. Tipi di dati fondamentali. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Definizione di metodi

Esempio: il conto bancario

Capitolo 1. Introduzione. Cay S. Horstmann Concetti di informatica e fondamenti di Java

Introduzione alla Programmazione in Java attraverso un esempio commentato

Introduzione a classi e oggetti

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Definizione di classi. Walter Didimo

Java: Definire Classi e Creare Oggetti

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Modulo 2: Strutture fondamentali della programmazione Java

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

I costruttori. Il costruttore standard. Esempio di valori di default. Alterare il costruttore standard

Definizione di metodi

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Proprietà delle Classi e degli Oggetti in Java

Programmazione a oggetti

OCA JAVA 8 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Programmazione ad oggetti

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro

Concetto di Funzione e Procedura METODI in Java

Le basi del linguaggio Java

Java. Java: compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Classi ed Oggetti in JAVA

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Programmazione AA

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Linguaggi di Programmazione II Matricole con le due ultime cifre dispari

Esercitazione n 2. Obiettivi

Programmazione ad oggetti

La Gestione della Memoria. Carla Binucci e Walter Didimo

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Il linguaggio Java è un linguaggio di programmazione ad alto livello

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Programmazione ad oggetti

Uguaglianza e copia di oggetti

Corso sul linguaggio Java

Programmazione orientata agli oggetti. Ivan Lanese

Definizione di metodi in Java

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Informatica I. Ingegneria Medica. Prof. Diego Salamon

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Il tipo di dati stringa. Stringhe. Il tipo di dati stringa. Il tipo di dati stringa. Estrazione di sottostringhe

Uso degli oggetti. Un programma Java. è un insieme di oggetti, ognuno istanza di una classe, che si inviano messaggi

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Parola chiave extends

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Programmi e Oggetti Software

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

Laboratorio di programmazione

DataSet. ... public BankAccount getmaximum() { return x; }... private BankAccount maximum;... } DataSet

Programmi e Oggetti Software

Programmazione con Java

Capitolo 2. Protocolli e contratti. c 2005 Pearson Education Italia Capitolo 2-1 / 82

Corso di Informatica

1 Fondamenti di Informatica Gruppo 2 - a.a. 2017/ Fondamenti di Informatica Gruppo 2 - a.a. 2017/2018

Le decisioni. Istruzione if. if (amount <= balance) balance = balance - amount; Sintassi: if (condizione) istruzione

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 16 Tipi riferimento e stringhe. Carla Limongelli.

Fondamenti di Informatica T-1

Le basi del linguaggio Java

Impariamo a programmare in. Lezione 6

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Programmazione è gestione di eventi

Il tipo di dati char (capitolo 4)

Principi di OOP con JAVA

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Java Le stringhe. Stringhe

Oggetti Composti (1) Oggetti Composti (2)

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Classi 15/12/2010. Astrazione, astrazione astrazione. Astrazione, astrazione astrazione. Astrazione, astrazione astrazione

Introduzione agli oggetti

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti

Transcript:

Capitolo 2 Utilizzare oggetti Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Oggetti e classi Gli oggetti sono entità di un programma che si possono manipolare invocando metodi. Tali oggetti appartengono a diverse classi. Per esempio l oggetto System.out appartiene alla classe PrintStream. Figura 3: Rappresentazione dell'oggetto System.out

Metodi Metodo: sequenza di istruzioni che accede ai dati di un oggetto Gli oggetti possono essere manipolati invocando metodi Classe: insieme di oggetti con lo stesso comportamento Una classe specifica i metodi che possono essere applicati ai suoi oggetti String greeting = "Hello"; greeting.println() // Error greeting.length() // OK L interfaccia pubblica di una classe specifica cosa si può fare con i suoi oggetti mentre l implementazione nascosta descrive come si svolgono tali azioni.

Rappresentazione di due oggetti di tipo String Figura 4 Rappresentazione di due oggetti di tipo String

Metodi String length: conta il numero di caratteri presenti in una stringa. String greeting = "Hello, World!"; int n = greeting.length(); // assegna a n il numero 13 Continua

Metodi String touppercase: crea un nuovo oggetto di tipo String che contiene gli stessi caratteri dell oggetto originale, con le lettere minuscole convertite in maiuscole. String river = "Mississippi"; String bigriver = river.touppercase(); // assegna a bigriver l oggetto "MISSISSIPPI" Continua

Metodi String Quando applicate un metodo a un oggetto, dovete essere certi che il metodo sia definito nella classe corrispondente. System.out.length(); // Questa invocazione di metodo è errata

Parametri impliciti ed espliciti Parametro (parametro esplicito): dati in ingresso a un metodo. Non tutti i metodi necessitano di parametri. System.out.println(greeting) greeting.length() // non ha parametri espliciti Parametro implicito: l'oggetto di cui si invoca un metodo System.out.println(greeting) Continua

Parametri impliciti ed espliciti Figura 5 Passaggio di parametro al metodo println

Valori restituiti Il valore restituito da un metodo è il risultato che il metodo ha calcolato perché questo venga utilizzato nel codice che ha invocato il metodo int n = greeting.length(); // restituisce il valore // memorizzato in n Continua

Valori restituiti Figura 6 Invocazione del metodo length su un oggetto di tipo String

Utlizzo dei valori restituiti Il valore restituito da un metodo può anche essere utilizzato direttamente come parametro di un altro metodo System.out.println(greeting.length()); Non tutti i metodi restituiscono valori. Per esempio: println Continua

Utilizzo dei valori restituiti Figura 7 Il valore restituito da un metodo utilizzato come parametro di un altro metodo

Una invocazione più complessa Il metodo replace esegue metodi di ricerca e sostituzione river.replace("issipp", "our") // costruisce una nuova stringa ("Missouri") Come si vede nella Figura 8, questa invocazione di metodo ha un parametro implicito: la stringa Mississippi due parametri espliciti: le stringhe issipp e our " un valore restituito: la stringa Missouri i Missouri" Continua

Una invocazione più complessa Figura 8 Invocazione del metodo replace

Definizioni di metodo Quando in una classe si definisce un metodo, vengono specificati i tipi dei parametri espliciti e del valore restituito. Il tipo del parametro implicito è la classe in cui è definito il metodo: ciò non viene menzionato nella definizione del metodo, e proprio per questo si parla di parametro implicito. Continua

Definizioni di metodo Esempio: la classe String definisce public int length() // restituisce un valore di tipo int // non ha parametri espliciti public String replace(string target, String replacement) // restituisce un valore di tipo String; // due parametri espliciti di tipo String Continua...

Definizioni di metodo Se il metodo non restituisce un valore, il tipo di valore restituito viene dichiarato come void void public void println(string output) // nella classe PrintStream Il nome di un metodo è sovraccarico se una classe definisce più metodi con lo stesso nome (ma con parametri di tipi diversi). public void println(string output) public void println(int output)

Variabili oggetto Figure 17 Una variabile oggetto contenente un riferimento a un oggetto

Variabili oggetto dddd Figura 18 Due variabili oggetto che fanno riferimento al medesimo oggetto

Copiatura di riferimenti a oggetti Figura 21 Copiatura di riferimenti a oggetti

Capitolo 3 Realizzare classi Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Scatole nere I concetti vengono identificati durante il processo di astrazione. Astrazione: processo di eliminazione delle caratteristiche inessenziali, finché non rimanga soltanto l essenza del concetto. Nella programmazione orientata agli oggetti ( objectoriented ) le scatole nere con cui vengono costruiti i programmi vengono chiamate oggetti.

Livelli di astrazione: un esempio dalla vita reale Figura 1 Livelli di astrazione nella progettazione di automobili

Livelli di astrazione: un esempio concreto I guidatori non hanno bisogno di capire come funzionano le scatole nere L interazione di una scatola nera con il mondo esterno è ben definita: I guidatori interagiscono con l auto usando pedali, pulsanti,ecc. I meccanici controllano che i moduli di controllo elettronico mandino il giusto segnale d accensione alle candele Per i produttori di moduli di controllo elettronico i transistori e i condensatori sono scatole nere magicamente costruite da un produttore di componenti elettronici L incapsulamento porta all efficienza: Un meccanico si occupa solo di moduli per il controllo elettronico senza preoccuparsi di sensori e transistori I guidatori si preoccupano solo di interagire con l auto (mettere carburante nel serbatoio) e non dei moduli di controllo elettronico

Livelli di astrazione: progettazione del software Figura 2 Livelli di astrazione nella progettazione del software

Livelli di astrazione: progettazione del software Ai primordi dell informatica, i programmi per computer erano in grado di manipolare tipi di dati primitivi, come i numeri e i caratteri. Con programmi sempre più complessi, ci si trovò a dover manipolare quantità sempre più ingenti di questi dati di tipo primitivo, finché i programmatori non riuscirono più a gestirli. Soluzione: incapsularono le elaborazioni più frequenti, generando scatole nere software da poter utilizzare senza occuparsi di ciò che avviene all interno, Continua

Livelli di astrazione: progettazione del software Fu usato il processo di astrazione per inventare tipi di dati a un livello superiore rispetto a numeri e caratteri. Nella programmazione orientata agli oggetti gli oggetti sono scatole nere. Incapsulamento: la struttura interna di un oggetto è nascosta al programmatore, che ne conosce però il comportamento. Nella progettazione del software si utilizza il processo di astrazione per definire il comportamento di oggetti non ancora esistenti e, dopo averne definito il comportamento, possono essere realizzati (o implementati )

Progettare l interfaccia pubblica di una classe Progettare la classe BankAccount Procedimento di astrazione: operazioni irrinunciabili per un conto bancario versare denaro prelevare denaro conoscere il saldo attuale

Progettare l interfaccia pubblica di una classe: i metodi Metodi della classe BankAccount: deposit withdraw getbalance Vogliamo che i metodi possano funzionare nel modo seguente: harryschecking.deposit(2000); harryschecking.withdraw(500); System.out.println(harrysChecking.getBalance());

Progettare l interfaccia pubblica di una classe: definizione di metodo Ogni definizione di metodo contiene uno specificatore di accesso (solitamente public) il tipo di dati restituito (come void or double) il nome del metodo (come deposit) un elenco dei parametri del metodo, racchiusi fra parentesi (come double amount) il corpo del metodo: enunciati racchiusi fra parentesi graffe { } Esempi: public void deposit(double amount) {... } public void withdraw(double amount) {... } public double getbalance() {... }

Sintassi 3.1: Definizione di metodo specificatorediaccesso tiporestituito nomemetodo(tipoparametro nomeparametro,...) { corpo del metodo } Esempio: public void deposit(double amount) {... } Serve a: Definire il comportamento di un metodo.

Progettare l interfaccia pubblica di una classe: definizione di costruttore I costruttori contengono istruzioni per inizializzare gli oggetti. Il nome di un costruttore è sempre uguale al nome della classe. public BankAccount() { // corpo, che verrà riempito più tardi } Continua

Progettare l interfaccia pubblica di una classe: definizione di costruttore Il corpo del costruttore è una sequenza di enunciati che viene eseguita quando viene costruito un nuovo oggetto. Gli enunciati presenti nel corpo del costruttore imposteranno i valori dei dati interni dell oggetto che è in fase di costruzione. Tutti i costruttori di una classe hanno lo stesso nome, che è il nome della classe. Il compilatore è in grado di distinguere i costruttori, perché richiedono parametri diversi.

Sintassi 3.2: Definizione di costruttore specificatorediaccesso nomeclasse(tipoparametro nomeparametro,...) { corpo del costruttore } Esempio: public BankAccount(double initialamount) {... } Serve a: Definire il comportamento di un costruttore

Interfaccia pubblica I costruttori e i metodi pubblici di una classe costituiscono la sua interfaccia pubblica: public class BankAccount { // Costruttori public BankAccount() { // corpo, che verrà riempito più avanti } public BankAccount(double initialbalance) { // corpo, che verrà riempito più avanti } // Metodi public void deposit(double amount) Continua

BInterfaccia pubblica } { } // corpo, che verrà riempito più avanti public void withdraw(double amount) { // corpo, che verrà riempito più avanti } public double getbalance() { // corpo, che verrà riempito più avanti } // campi privati, definiti più avanti

Sintassi 3.3: Definizione di classe specificatorediaccesso class nomeclasse { costruttori metodi campi } Esempio: public class BankAccount { public BankAccount(double initialbalance) {... } public void deposit(double amount) {... }... } Serve a: Definire una classe, la sua interfacia pubblica e i suoi dettagli realizzativi.

Commentare l'interfaccia pubblica /** Preleva denaro dal conto bancario. @param amount l'importo da prelevare */ public void withdraw(double amount) { // realizzazione (completata in seguito) } /** Ispeziona il saldo attuale del conto corrente. @return il saldo attuale */ public double getbalance() { // realizzazione (completata in seguito) }

Riassunto dei metodi generato da javadoc Figura 3 Un riassunto dei metodi generato da javadoc

Campi di esemplare Un oggetto memorizza i propri dati all interno di campi (o variabili) di esemplare (o di istanza) Campo è un termine tecnico che identifica una posizione all interno di un blocco di memoria Un esemplare (o istanza) di una classe è un oggetto creato da quella classe. La dichiarazione della classe specifica i suoi campi di esemplare: public class BankAccount {... private double balance; }

Campi di esemplare La dichiarazione di un campo di esemplare è così composta: Uno specificatore d accesso (solitamente private) Il tipo del campo di esemplare (come double) Il nome del campo di esemplare (come balance) Ciascun oggetto di una classe ha il proprio insieme di campi di esemplare. I campi di esemplare sono generalmente dichiarati con lo specificatore di accesso private

Campi di esemplare Figura 5 Campi di esemplare

Sintassi 3.4: Dichiarazione di campo di esemplare specificatorediaccesso class NomeClasse {... specificatorediaccesso tipovariabile nomevariabile;... } Esempio: public class BankAccount {... private double balance;... } Serve a: Definire un campo che sia presente in ciascun oggetto di una classe.

Accedere ai campi di esemplare I campi di esemplare sono generalmente dichiarati con lo specificatore di accesso private: a essi si può accedere soltanto da metodi della medesima classe e da nessun altro metodo. Se i campi di esemplare vengono dichiarati privati, ogni accesso ai dati deve avvenire tramite metodi pubblici. L incapsulamento prevede l occultamento dei dati degli oggetti, fornendo metodi per accedervi. Continua

Accedere ai campi di esemplare Ad esempio, alla variabile balance si può accedere dal metodo deposit della classe BankAccount, ma non dal metodo main di un altra classe. public class BankRobber { public static void main(string[] args) { BankAccount momssavings = new BankAccount(1000);... momssavings.balance = -1000; // ERRORE } }

Realizzare i costruttori Un costruttore assegna un valore iniziale ai campi di esemplare di un oggetto. public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Esempio di invocazione di un costruttore BankAccount harryschecking = new BankAccount(1000); Creazione di un nuovo oggetto di tipo BankAccount. Invocazione del secondo costruttore (perché è stato fornito un parametro di costruzione). Assegnazione del valore 1000 alla variabile parametro initialbalance. Assegnazione del valore di initialbalance al campo di esemplare balance dell oggetto appena creato. Restituzione, come valore dell espressione new, di un riferimento a un oggetto, che è la posizione in memoria dell oggetto appena creato. Memorizzazione del riferimento all oggetto nella variabile harryschecking.

Esempio di una invocazione di metodo harryschecking.deposit(500); Assegnazione del valore 500 alla variabile parametro amount. Lettura del campo balance dell oggetto che si trova nella posizione memorizzata nella variabile harryschecking. Addizione tra il valore di amount e il valore di balance, memorizzando il risultato nella variabile newbalance. Memorizzazione del valore di newbalance nel campo di esemplare balance, sovrascrivendo il vecchio valore.

File BankAccount.java 01: /** 02: Un conto bancario ha un saldo che può essere modificato 03: da depositi e prelievi. 04: */ 05: public class BankAccount 06: { 07: /** 08: Costruisce un conto bancario con saldo uguale a zero. 09: */ 10: public BankAccount() 11: { 12: balance = 0; 13: } 14: 15: /** 16: Costruisce un conto bancario con un saldo assegnato. 17: @param initialbalance il saldo iniziale 18: */ Continua

File BankAccount.java 19: public BankAccount(double initialbalance) 20: { 21: balance = initialbalance; 22: } 23: 24: /** 25: Versa denaro nel conto bancario. 26: @param amount l'importo da versare 27: */ 28: public void deposit(double amount) 29: { 30: double newbalance = balance + amount; 31: balance = newbalance; 32: } 33: 34: /** 35: Preleva denaro dal conto bancario. 36: @param amount l'importo da versare Continua

File BankAccount.java 37: */ 38: public void withdraw(double amount) 39: { 40: double newbalance = balance - amount; 41: balance = newbalance; 42: } 43: 44: /** 45: Ispeziona il valore del saldo attuale del conto bancario. 46: @return il saldo attuale 47: */ 48: public double getbalance() 49: { 50: return balance; 51: } 52: 53: private double balance; 54: }

File BankAccountTester.java 01: /** 02: Classe di collaudo per la classe BankAccount. 03: */ 04: public class BankAccountTester 05: { 06: /** 07: Collauda i metodi della classe BankAccount. 08: @param args non utilizzato 09: */ 10: public static void main(string[] args) 11: { 12: BankAccount harryschecking = new BankAccount(); 13: harryschecking.deposit(2000); 14: harryschecking.withdraw(500); 15: System.out.println(harrysChecking.getBalance()); 16: } 17: }

Capitolo 8 Progettazione di classi Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione