Variabili e Parametri
|
|
|
- Margherita Spina
- 8 anni fa
- Visualizzazioni
Transcript
1 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() 1
2 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 2
3 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 3
4 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; 4
5 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. 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 5
6 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; 6
7 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 7
8 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. 8
9 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 9
10 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 10
11 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) 11
12 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); 12
13 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 13
14 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, 14
15 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 15
16 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 16
17 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 17
18 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 18
19 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; 19
Livelli di astrazione
Realizzare Classi Astrazione Perdita di dettaglio Utile nella descrizione, progettazione, implementazione e utilizzo di sistemi complessi Dettagli trascurabili vengono incapsulati in sottosistemi più semplici
Capitolo 3. Realizzare classi
Capitolo 3 Realizzare classi Obbiettivi del capitolo Acquisire familiarità con il procedimento di realizzazione di classi Essere in grado di realizzare semplici metodi Capire a cosa servono e come si usano
Definizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
Programmazione Java Struttura di una classe, Costruttore, Riferimento this
Programmazione Java Struttura di una classe, Costruttore, Riferimento this [email protected] http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento
14 - Metodi e Costruttori
14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
Progettare le Classi
Progettare le Classi C. Horstmann Fondamenti di programmazione e Java 2 3^ edizione Apogeo trad. Nicola Fanizzi corso di Programmazione, CdS: Informatica TPS Dip. di Informatica, Università degli studi
6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it
Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 4 Cristian Del Fabbro Prossima lezione Mercoledì 25 novembre ore 8:30-11:00 Classe Una classe descrive degli oggetti tramite: Proprietà/variabili/campi (dati/caratteristiche,
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo
Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il
Programmazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi [email protected] Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
sayhello public private protected return public class Greeter { public String sayhello() { String message = Hello, World! ; return message; } }
sayhello public class Greeter { public String sayhello() { String message = Hello, World! ; return message; publicprivate protected return void return; Greeter main main public class GreeterTest { public
DataSet. ... public BankAccount getmaximum() { return x; }... private BankAccount maximum;... } DataSet
DataSet DataSetadd DataSet BankAccount public class DataSetBankAccount { public void add(bankaccount x) { sum = sum + x.getbalance(); if (count == 0 maximum.getbalance() < x.getbalance()) maximum = x;
Proprietà delle Classi e degli Oggetti in Java
Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di
18 - Classi parzialmente definite: Classi Astratte e Interfacce
18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
GESTIONE DEGLI ERRORI
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori
Rectangle BankAccount Purse
Rectangle BankAccount Purse StringTokenizer RandomNumberGenerator GestoreNuoviConti Math main CalcolaBustaPaga PogrammaPerIlPagamento Purse public class Purse { public Purse() {...} public void addnickels(int
Esercitazione n 2. Obiettivi
Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe Uguaglianza tra oggetti Utilizzo di classi come componenti
Esempio: il conto bancario
Ereditarietà Prof. Francesco Scarcello D.E.I.S., Università della Calabria Corso di Informatica 2 Esempio: il conto bancario public class BankAccount { public BankAccount() { balance = 0; public BankAccount(double
Capitolo 3. Realizzare classi. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione
Capitolo 3 Realizzare classi Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione Obiettivi del capitolo Acquisire familiarità con il procedimento di realizzazione di classi Essere
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
Lezione 9 programmazione in Java Classi come contenitori
Lezione 9 programmazione in Java Classi come contenitori Nicola Drago [email protected] Dipartimento di Informatica Università di Verona Anteprima Gestione della Memoria Dati dinamici e statici Il passaggio
A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas
Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),
Programmazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
Metodi statici. Dichiarazione e chiamata di metodi statici
Metodi statici Dichiarazione e chiamata di metodi statici Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un
Esempio 2: Subtyping
Esempio 2: Subtyping 22 Subclassing e subtyping Fino ad ora abbiamo trattato l ereditarietà come strumento che consente il riuso flessibile di classi già esistenti mediante l aggiunta o la ridefinizione
Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)
Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di
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
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 String Una stringa Java rappresenta uno specifico valore e come
Modulo 2: Strutture fondamentali della programmazione Java
Modulo 2: Strutture fondamentali della programmazione Java Argomenti Trattati: Un semplice programma Java: Presentazione di un primo Esempio; Introduzione alla struttura; Compilazione ed esecuzione. Argomenti
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
Laboratorio di Programmazione 1 [Java]
Laboratorio di Programmazione 1 [Java] Prova di esame - 26 Gennaio 2011 Tempo massimo: 50 minuti Si implementino in Java le classi Tavolo e Pizzeria. La classe Tavolo ha i seguenti attributi: nome (una
Uguaglianza e copia di oggetti
Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La
Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali
Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile
Parola chiave extends
Il Linguaggio Java Ereditarietà Ereditarietà L'ereditarietà permette di creare nuove classi sulla base di classi esistenti In particolare, permette di riusare il codice (metodi e campi); aggiungere nuovi
Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.
Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo. public abstract class FiguraPiana2{ private double base; public FiguraPiana2(double
Progettazione di classi
Progettazione di classi Scegliere una classe Una classe rappresenta un singolo concetto Esempi: Una classe puo` rappresentare un concetto matematico Point Rectangle Ellipse Una classe puo` rappresentare
Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
La Gestione della Memoria. Carla Binucci e Walter Didimo
La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina
19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012
Programmazione a oggetti e JAVA Prof. B.Buttarazzi A.A. 2011/2012 Sommario Variabili statiche Ereditarietà multipla Le interfacce Binding Esercizi Esercizio ContoCorrente Creare una classe ContoCorrente
Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
Uso di metodi statici. Walter Didimo
Uso di metodi statici Walter Didimo Metodi di istanza Fino ad ora abbiamo imparato a creare oggetti e ad invocare metodi su tali oggetti i metodi venivano eseguiti dagli oggetti un metodo invocato su un
Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array
Classi e array Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Si vuole definire una classe Polinomio per la rappresentazione di polinomi a
IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
Classi ed Oggetti in JAVA
Classi ed Oggetti in JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 [email protected] www.dii.unisi.it/~rigutini/
RETI DI CALCOLATORI Linguaggio Java: Eccezioni
Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Corso di Programmazione ad Oggetti
Corso di Programmazione ad Oggetti Costruttori di copia, funzioni di accesso e variabili static aa 2008/2009 Claudio De Stefano Claudio De Stefano - Corso di Programmazione ad Oggetti - aa 2008/2009 1
Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;
Un esempio di definizione di classe con array di oggetti Sia data la classe StudUniv per gli studenti universitari (definita in una lezione precedente). Scrivere una nuova classe Corso, dove ciascun corso
Programmazione Java: Variabili membro, Metodi La parola chiave final
Programmazione Java: Variabili membro, Metodi La parola chiave final [email protected] http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave
Progettazione di classi
Progettazione di classi Scegliere una classe Una classe rappresenta un singolo concetto Nome della classe = nome che esprime il concetto Una classe può rappresentare un concetto matematico Point Rectangle
Esempio: L EURO-CONVERTITORE (1) Scopo
Esempio: L EURO-CONVERTITORE (1) Scopo Realizzare un sistema software per la conversione di euro in lire. In particolare, si vuole, definire un euro-covertitore e, dati due oggetti di tipo euro convertitore
9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea
