Variabili e Parametri. Scope, Lifetime Inizializzazione

Documenti analoghi
Variabili e Parametri

Progetto di classi: Metodi Costruttori Documentazione e commenti Variabili di istanza (campi)

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

Oggetti. Oggetti e classi. Utilizzo di classi. Classe

Livelli di astrazione

Capitolo 3. Realizzare classi

Capitolo 2. Utilizzare oggetti

Definizione di classi. Walter Didimo

Introduzione alla Programmazione in Java attraverso un esempio commentato

Programmazione ad oggetti

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

14 - Metodi e Costruttori

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

Progettazione di classi

Progettare le Classi

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

Java: Definire Classi e Creare Oggetti

Esempio: Costruttori ed ereditarietà

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

public class Counter2 extends Counter { public void dec() { val--; }

Programmazione a oggetti

Ereditarietà (ultima)

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

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

Concetto di Funzione e Procedura METODI in Java

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; } }

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

Proprietà delle Classi e degli Oggetti in Java

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Esempio: il conto bancario

Proprietà delle Classi e degli Oggetti in Java

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

GESTIONE DEGLI ERRORI

Subtype Polymorphism. Conversioni di tipo. Conversioni di tipo. Subtyping. Conversioni di tipo. Interfacce e subtype polimorfismo

Esercitazione n 2. Obiettivi

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

Rectangle BankAccount Purse

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

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

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

Java Classi wrapper e classi di servizio. Classi di servizio

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Lezione 9 programmazione in Java Classi come contenitori

Metodi statici. Dichiarazione e chiamata di metodi statici

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

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Programmazione con Java

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

Laboratorio di Programmazione Anno Accademico

Esempio 2: Subtyping

Java Gli array. Array

Introduzione Programmazione Java

Ingredienti sintattici di Java

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Modulo 2: Strutture fondamentali della programmazione Java

Laboratorio di Programmazione 1 [Java]

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

Strategie di programmazione

Uguaglianza e copia di oggetti

Parola chiave extends

I metodi statici non hanno il parametro implicito

Java Le stringhe. Stringhe

Modificatori di visibilità

Classi. Creazione di oggetti personalizzati

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

SavingsAccount. BankAccount

Le classi. Costruttori

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

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

La Gestione della Memoria. Carla Binucci e Walter Didimo

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

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Progettazione di classi

Uso di metodi statici. Walter Didimo

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

Introduzione all uso degli oggetti in Java (parte II) Walter Didimo

Esempio: L EURO-CONVERTITORE (1) Scopo

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

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

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

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

1 Il Paradigma ad Oggetti

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Programmazione Java Variabili membro, Metodi La parola chiave final

Classi ed Oggetti in JAVA

Programmazione Orientata agli Oggetti in Linguaggio Java

Il Linguaggio Java. Classe. Classi ed oggetti

Corso di Programmazione ad Oggetti

Il Linguaggio Java. Le interfacce

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

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

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

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Transcript:

Variabili e Parametri Scope, Lifetime Inizializzazione

Categorie di Variabili Variabili di istanza / campi saldo in BankAccount Variabili locali newsaldo nel metodo deposita() Parametri importo per il metodo deposita()

Categorie di Variabili Variabili di istanza / campi appartengono ad uno (ed un solo oggetto) Lifetime = lifetime degli oggetti a cui appartengono Inizializzati a valori di default Variabili locali ed parametri appartengono ai metodi in cui sono dichiarati Lifetime = esecuzione dei metodi che le dichiarano Parametri inizializzati agli argomenti Variabili locali inizializzate esplicitamente

Lifetime delle variabili Consideriamo l invocazione harryschecking.deposita(500); ricordando public void deposita(double amount) double newbalance = balance + amount; balance= newbalance; Continua

Lifetime delle variabili harryschecking.deposita(500); public void deposita(double amount) double newbalance= balance + amount; balance= newbalance; Continua

Lifetime delle variabili harryschecking.deposita(500); public void deposita(double amount) double newbalance = balance + amount; balance = newbalance; Continua

Lifetime delle variabili public void deposita(double amount) double newbalance= balance + amount; balance = newbalance;

Lifetime delle variabili public void deposita(double amount) double newbalance= balance + amount; balance = newbalance;

Domanda Quali sono le variabili di istanza e le variabili locali create durante l esecuzione della applicazione BankAccountTester? 01: /** 02: Una classe test per la classe BankAccount. 03: */ 04: public class BankAccountTester 05: 06: /** 07: Testa 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.deposita(2000); 14: harryschecking.preleva(500); 15: System.out.println(harrysChecking.saldo()); 16: 17:

Risposta Tre variabili locali harryschecking newsaldo nel metodo deposita newsaldo nel metodo preleva Una variabile di istanza, saldo all interno di harryschecking

Parametri impliciti ed espliciti Ogni metodo ha un parametro implicito, che rappresenta l oggetto su cui il metodo viene invocato Il parametro implicito è denotato da this I nomi dei campi nel corpo di un metodo sono riferiti a this

this public void preleva(double importo) double newsaldo = saldo - importo; saldo = newsaldo; saldo è il campo dell oggetto su cui il esplicitiamo metodo viene invocato usando this public void preleva(double importo) double newsaldo = this.saldo - importo; this.saldo = newsaldo;

this Quando invochiamo un metodo su un oggetto, questo viene legato a this. public void preleva(double importo) double newsaldo = this.saldo - importo; this.saldo = newsaldo; momssavings.deposita(500)esegue il codice seguente double newsaldo = momssavings.saldo - importo; momssavings.saldo = newsaldo;

this

Domande Quale è il tipo del parametro implicito nel metodo preleva() della classe BankAccount? Nel metodo preleva(), avrebbe senso utilizzare this.importo al posto di importo? Quali sono i parametri impliciti ed espliciti del metodo main() della classe BankAccountApp?

Risposte BankAccount. Non è legale: this ha tipo BankAccount e BankAccount non ha un campo importo. Nessun parametro implicito in quanto il metodo è statico. Un parametro esplicito: args.

Domanda Quali sono gli aspetti comuni tra metodi e funzioni? Quali le differenze?

Risposta I metodi e le funzioni si basano sugli stessi meccanismi di chiamata/ritorno e di passaggio di parametri Differiscono in modo essenziale per il fatto che: un metodo è sempre associato ad un oggetto invocato con un messaggio a quell oggetto una funzione è definita in modo indipendente da un oggetto invocata passando un valore come argomento

Passaggio di parametri Call by value: Copia il valore di ciascun argomento nel corrispondente parametro formale. Non permette di modificare gli argomenti Call by reference: Associa il riferimento di ciascun argomento al corrispondente parametro formale Permette di modificare gli argomenti In Java: call by value Ma passando riferimenti by value otteniamo l effetto desiderato Continua

Call by value Modifiche dirette dei parametri non hanno effetti sugli argomenti public class BankAccount public void transfer(double importo, BankAccount otheraccount) saldo = saldo - importo; double newsaldo = otheraccount.saldo + importo; otheraccount = new BankAccount(newsaldo); // ATTENZIONE

Esempio harryschecking.transfer(500, savingsaccount);

Call by value Un metodo può comunque modificare lo stato degli argomenti di tipo riferimento (anche se non può modificare direttamente gli argomenti)

Domanda Come modifichereste il codice del metodo transfer per ottenere l effetto desiderato? Continua

Risposta Due possibili soluzioni public void transfer(double importo, BankAccount other) saldo = saldo - importo; other.saldo = other.saldo + importo; o meglio ancora public void transfer(double importo, BankAccount other) this.preleva(importo); other.deposita(importo);

Scope delle variabili SCOPE DI UNA VARIABILE: la regione che va dalla sua dichiarazione alla fine del blocco in cui la dichiarazione è inclusa Al solito, ma esistono diversi tipi di variabili e diversi tipi di blocchi: Variabili locali: blocco = metodo Campi: blocco dipende dai diritti di accesso definiti nella dichiarazione Continua

Scope delle variabili locali Variabili con scope diverso sono diverse indipendentemente dal nome: public class RectangleTester public static double area(rectangle rect) double r = rect.getwidth() * rect.getheight(); return r; public static void main(string[] args) Rectangle r = new Rectangle(5, 10, 20, 30); double a = area(r); System.out.println(r); Continua

Scope delle variabili locali ATTENZIONE: lo scope di una locale non può contenere la dichiarazione di una variabile con lo stesso nome Rectangle r = new Rectangle(5, 10, 20, 30); if (x >= 0) double r = Math.sqrt(x); // ERRORE... strano ma vero!

Scope dei campi Dipende dalla loro dichiarazione di accesso. Campi private: accessibili da qualunque punto della classe (in particolare in tutti i metodi della classe) Campi public: accessibili da tutti i metodi della classe e da metodi di altre classi regole valgono uniformemente tutti gli elementi della classe: campi, metodi,

Scope e diritti di accesso public class A private int privata; public int pubblica; private int privm () return privata; public int pubm () return privm()+ pubblica; public int binm (A other) return privata + other.privata; public class Test public void accessi() A a1 = new A(); a1.privata = 3; a1.pubblica = 6; a1.privm(); a1.pubm (); A a2 = new A(); a2.binm(a1);

Scope e diritti di accesso public class A private int privata; public int pubblica; private int privm () return privata; public int pubm () return privata + pubblica; public int binm (A other) return privata + other.privata; public class Test public void accessi() A a1 = new A(); a1.privata = 3; // KO a1.pubblica = 6;// OK a1.privm(); // KO a1.pubm (); // OK A a2 = new A(); a2.binm(a1); // OK

Scope e diritti di accesso All interno di un metodo non è necessario qualificare i campi o metodi dell oggetto corrente Membri non qualificati sono riferiti a this public class BankAccount public void transfer(double importo, BankAccount other) preleva(importo); // this.preleva(importo); other.deposita(importo);...

Scope sovrapposti Una variabile locale, o un parametro, possono mascherare un campo con lo stesso nome public class Coin... public double getexchangevalue(double exchangerate) double value; // Variabile locale... return value; private String name; private double value; // Campo con lo stesso nome Continua

Scope sovrapposti I campi mascherati da locali sono ancora accessibili mediante accessi qualificati da this value = this.value * exchangerate;

Costruttori regole sintattiche: il nome del costruttore deve essere quello della classe non ha un tipo di ritorno puo essere dotato di qualsiasi modificatore di accesso ogni classe ha almeno il default constructor senza parametri. Il default constructor ha lo stesso livello di accessibilita della classe per cui e definito

Costruttori annidati Quando si hanno piu costruttori, questi possono anche chiamarsi in modo "annidato", usando this(...) public class BankAccount private int accountnumber; private double saldo; public BankAccount(double saldo) this.saldo = saldo; public BankAccount() this(0); deve necessariamente essere il primo statement del costrutture

Costruttori e Inizializzazioni Per garantire l inizializzazione dei campi di un oggetto possiamo usare anche inizializzazioni esplicite: Assegnando dei valori ai campi dati direttamente al momento della loro dichiarazione Scrivendo dei blocchi di inizializzazione: blocchi di codice definiti dentro la classe ma fuori da metodi e costruttori I blocchi di inizializzazione sono utili per definire una parte di codice comune a tutti i costruttori

Costruttori e Inizializzazioni public class Init // inizializzazioni esplicite: 1 private int id; private int x = 65; private String name; private Rectangle d = new Rectangle(); private static int nextid = 1; // blocco di inizializzazione: 2 id = nextid; nextid = nextid +1; // costruttori: 3 Init(String n) name=n; Init(String n, Rectangle d) name=n;this.d=d;