Esempio: il conto bancario



Documenti analoghi
Parola chiave extends

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

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

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

Livelli di astrazione

Programmazione a Oggetti Lezione 10. Ereditarieta

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

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

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

Modulo 4: Ereditarietà, interfacce e clonazione

Polimorfismo dynamic dispatch

Esercizi della lezione 5 di Java

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

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

Esercitazioni aggiuntive Martedì Laboratorio L-12

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 Outline

13. Chain of Responsibility

Java: Compilatore e Interprete

Main System Monitor Keyboard

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe È qualcosa che abbiamo già visto varie volte

Metodologie di progetto Estensione di classi Implementazione di interfacce Composizione

Classi ed Oggetti in JAVA

Gestione delle Eccezioni

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

Programmazione ad oggetti

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Programmazione Java: Variabili membro, Metodi La parola chiave final

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Java Virtual Machine

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Algoritmi per suddividere il testo in righe in un editor di testo

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Programmazione ad Oggetti: JAVA. Esercitazione

Oggetti Lezione 3. aspetti generali e definizione di classi I

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

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Concetto di Funzione e Procedura METODI in Java

INTRODUZIONE INTRODUZIONE JAVA JAVA

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Il Linguaggio Java. Le interfacce

Ereditarietà e classi astratte

Algoritmi di Ricerca. Esempi di programmi Java

Introduzione a Classi e Oggetti

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

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

Controllo degli accessi

Questi lucidi provengono dal Capitolo 7 del libro. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercitazione n 4. Obiettivi

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

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

Esempi di esercizi d esame

Corso di Programmazione ad Oggetti

Telematica II 17. Esercitazione/Laboratorio 6

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

GESTIONE DEI PROCESSI

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Realizzazione di una classe con un associazione

Corso di Informatica

SAPIENZA Università di Roma, Facoltà di Ingegneria

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

Progettazione : Design Pattern Creazionali

Programmazione generica

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:

Uguaglianza e copia di oggetti

Un esercizio d esame. Flavio De Paoli

Realizzazione di Phone Plan. Soluzione - SimpleTime. Realizzazione e testing! Soluzione - SimpleTime. Soluzione - SimpleTime

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Java threads (2) Programmazione Concorrente

Transcript:

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 initialbalance) { balance = initialbalance; public void deposit(double amount) { balance = balance + amount; public void withdraw(double amount) { balance = balance - amount; public double getbalance(){return balance; public void transfer(bankaccount other, double amount) { withdraw(amount); other.deposit(amount); private double balance; 1

Estendere il codice Supponiamo di voler implementare altri tipi di conto bancario. Per esempio, consideriamo un conto bancario che dia interessi ad un certo tasso fisso interestrate. Dobbiamo riscrivere tutto il codice? Possiamo sfruttare il codice esistente estendendolo opportunamente? La classe SavingsAccount public class SavingsAccount extends BankAccount { public SavingsAccount(double rate) { interestrate = rate; public void addinterest() { double interest = getbalance() * interestrate / 100; deposit(interest); private double interestrate; 2

Oggetti della sottoclasse SavingsAccount SavingsAccount s = new SavingsAccount(10); s.deposit(1000); 3

Quando si estende una classe... Si ereditano tutti i metodi e gli elementi di dati della superclasse Si possono definire nuovi metodi Si possono definire nuovi elementi di dati Si possono ridefinire metodi per specializzarne le funzionalità Le regole del gioco Una classe può estendere al più una classe può essere estesa da un numero arbitrario di classi Visibilità una sottoclasse può accedere ad elementi di dati ed a metodi che siano public o protected nella sua superclasse 4

Riferimenti ed assegnamento SavingsAccount collegefund = new SavingsAccount(10); BankAccount anaccount = collegefund; Object anobject = anaccount; SavingsAccount myfund = anaccount; SavingsAccount yourfund = new BankAccount(); Una variabile di una classe C può essere usata per riferirsi agli oggetti di una qualunque sottoclasse di C Altri conti bancari Vogliamo un nuovo tipo di libretto di risparmio che preveda interessi più alti, ma vincoli il cliente a non prelevare denaro prima di un certo tempo. Eventuali prelievi anticipati vengono penalizzati. Inoltre vogliamo un conto corrente che garantisca un certo numero di operazioni gratuite. Le operazioni che eccedono tale soglia sono soggette ad un costo. 5

public class TimeDepositAccount extends SavingsAccount { public TimeDepositAccount(double rate, int maturity) { super(rate); periodstomaturity = maturity; public void addinterest() { periodstomaturity--; super.addinterest(); public void withdraw(double amount) { if (periodstomaturity > 0) super.withdraw(early_withdrawal_penalty); super.withdraw(amount); private int periodstomaturity; super si usa per accedere a dati e funzioni della superclasse private static double EARLY_WITHDRAWAL_PENALTY = 20; public class CheckingAccount extends BankAccount { public CheckingAccount(int initialbalance) { super(initialbalance); transactioncount = 0; public void deposit(double amount) { transactioncount++; super.deposit(amount); public void withdraw(double amount) { transactioncount++; super.withdraw(amount); public void deductfees() { if (transactioncount > FREE_TRANSACTIONS) { double fees = TRANSACTION_FEE * (transactioncount - FREE_TRANSACTIONS); super.withdraw(fees); transactioncount = 0; private int transactioncount; private static final int FREE_TRANSACTIONS = 3; private static final double TRANSACTION_FEE = 2.0; 6

La gerarchia dei conti correnti La gerarchia dei rettili antichi 7

Gerarchia di componenti per la grafica Polimorfismo Consideriamo la funzione transfer: public void transfer(bankaccount other, double amount) { withdraw(amount); other.deposit(amount); Ogni classe nella gerarchia eredita transfer Con quest unica funzione possiamo effettuare un trasferimento verso qualunque tipo di conto corrente 8

BankAccount collegefund = new BankAccount (10000); CheckingAccount harryschecking = ; collegefund.transfer (harryschecking, 1000); Nota che other è di tipo BankAccount Programma AccountTest.java public class AccountTest { public static void endofmonth(savingsaccount savings) { savings.addinterest(); public static void endofmonth(checkingaccount checking) { checking.deductfees(); public static void printbalance(string name, BankAccount account) { System.out.println( Il saldo del conto + name + è di $ + account.getbalance()); 9

Programma AccountTest.java (continua) public static void main(string[] args) { SavingsAccount momssavings = new SavingsAccount(0.5); TimeDepositAccount collegefund=new TimeDepositAccount(1,3); CheckingAccount harryschecking = new CheckingAccount(0); momssavings.deposit(10000); collegefund.deposit(10000); momssavings.transfer(harryschecking, 2000); collegefund.transfer(harryschecking, 980); harryschecking.withdraw(500); harryschecking.withdraw(80); endofmonth(momssavings); endofmonth(collegefund); endofmonth(harryschecking); printbalance( Risparmi della mamma", momssavings); printbalance( Fondo per il college", collegefund); printbalance( Conto di Harry", harryschecking); // Fine della funzione main // Fine della classe AccountTest La superclasse universale La classe Object costituisce la superclasse di ciascuna classe Java 10

La classe Object Alcune importanti funzioni definite in Object (e quindi ereditate da ogni classe): public String tostring(); public boolean equals (Object ob); protected Object clone(); Clonazione di oggetti BankAccount clonedaccount = anaccount.clone(); 11

Il metodo Object.clone() Crea una copia superficiale Non può essere effettivamente invocato a meno che non si implementi l interfaccia Cloneable 12