Principi OOP A.Natali Aprile 19991 Principi di oop Dai costrutti alle metodologie.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Java base V: La gestione delle Eccezioni
© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Costruttori e Distruttori
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Introduzione al linguaggio Java
Derivazione tra classi
Overriding.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Eccezioni.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Java base IV: Java e la programmazione O.O.
Java concetti A.Natali Marzo Java Dai concetti ai costrutti.
A.Natali DL Maggio1999 Oggetti Concetti fondamentali.
Componenti A.Natali Marzo Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori. Lapproccio classico consiste nellinse- rire controlli.
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice.
Programmazione in Java (8)
Java Contardi Carlo A.S. 2008/09.
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Applet ed HTML Fondamenti di Informatica Corso D.
© M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti A.A Package.
I nomi in Java F. Bombi 18 novembre novembre 2003.
P. atzeni et al., from PROGETTO PRISMA – AREA VASTA EMILIA NORD.
P. atzeni et al., from PROGETTO PRISMA – AREA VASTA EMILIA NORD.
Astrazione procedurale ed eccezioni
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Programmazione ad oggetti
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Eccezioni Metodi parziali Eccezioni: Usi e Metodi parziali Eccezioni: rimuovere i requires Eccezioni: rimuovere i requires Eccezioni: definizione, sollevamento,
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione sull’ ordinamento 20 maggio 2003
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
28/12/2001package 1 Package Pacchetti e interfacce.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Transcript della presentazione:

Principi OOP A.Natali Aprile Principi di oop Dai costrutti alle metodologie

Principi OOP A.Natali Aprile Costrutti Java u Dati primitivi e strutture di controllo: – identiche a quelle del linguaggio C u Interfacce –come specifiche contrattuali u Classi –come moduli /come specifiche della struttura e del comportamento di oggetti u Packages –come contenitori

Principi OOP A.Natali Aprile Architettura di riferimento u Sistemi software intesi come collezioni di componenti (oggetti) –in uno stesso spazio di indirizzamento o distribuiti in rete –associati a domini di protezione –supportati da sistemi operativi multitasking e a finestre

Principi OOP A.Natali Aprile API Packages u Elenco JDK 1.2.1JDK 1.2.1

Principi OOP A.Natali Aprile Java packages java.langjava.lang Package that contains essential Java classes, including numerics, strings, objects, compiler, runtime, security, and threads. This is the only package that is automatically imported into every Java program. java.iojava.io Package that provides classes to manage input and output streams to read data from and write data to files, strings, and other sources.

Principi OOP A.Natali Aprile Java packages java.utiljava.util Package that contains miscellaneous utility classes, including generic data structures, bit sets, time, date, string manipulation, random number generation, system properties, notification, and enumeration of data structures. java.netjava.net Package that provides classes for network support, including URLs, TCP sockets, UDP sockets, IP addresses, and a binary-to-text converter.

Principi OOP A.Natali Aprile Java packages java.awtjava.awt Package that provides an integrated set of classes to manage user interface components such as windows, dialog boxes, buttons, checkboxes, lists, menus, scrollbars, and text fields. (AWT = Abstract Window Toolkit) java.awt.imagejava.awt.image Package that provides classes for managing image data, including color models, cropping, color filtering, setting pixel values, and grabbing snapshots.

Principi OOP A.Natali Aprile Java packages java.appletjava.applet Package that enables the creation of applets through the Applet class. It also provides several interfaces that connect an applet to its document and to resources for playing audio.

Principi OOP A.Natali Aprile Il ruolo del costrutto class u Permette protezione e information hiding u Usabile come modulo o come specifiche della struttura e del comportamento di oggetti u Consente di definire e realizzare tipi di dato (astratto)

Principi OOP A.Natali Aprile class: concetto o meccanismo? u Il costrutto class mescola vari piani: –specifica come si costruisce –specifica cosa si vede –specifica come e fatto –specifica come funziona

Principi OOP A.Natali Aprile Class: esempio u CAccount c1; c1 e una variabile di tipo CAccount, la classe che specifica –come si costruisce loggetto denotato da c1, –come e fatto loggetto denotato da c1 –quali sono le operazioni eseguibili sulloggetto denotato da c1

Principi OOP A.Natali Aprile Specifica UML CAccount # amount: Real + debit( v : Real ) + credit( v : Real ) + public - private # protected

Principi OOP A.Natali Aprile class CAccount public class CAccount { //Variabili istanza (variabili di stato) double amount = 0; //Costruttore CAccount( double v ){ amount = v; } //Metodi public void debit( double v ){ amount -= v; } public void credit( double v ){ amount += v; } }

Principi OOP A.Natali Aprile Oggetti e variabili CAccount c1; c1 e una variabile (di stile imperativo) che: u in C++: contiene la rappresentazione di una istanza della classe CAccount in Java: contiene un riferimento null ; Caccount c1=new Caccount(10);

Principi OOP A.Natali Aprile Classi e tipi u Molti linguaggi oo fanno coincidere il concetto di classe con quello di tipo. u Il concetto di classe non coincide pero con quello di tipo. u La classe e la realizzazione di un tipo di dato (astratto) u Il concetto di tipo e meglio catturato dal costrutto interface

Principi OOP A.Natali Aprile Classe e Interfaccia u Java introduce il costrutto interface che consente di definire una collezione di prototipi di operazioni ciascuna delle quali dovra' essere realizzata come metodo di una qualche classe. u Il costrutto interface complementa ed estende il costrutto class. u Il nome di una interfaccia puo' essere usato per denotare un tipo.

Principi OOP A.Natali Aprile ContoCorrente: interfaccia public interface IAccount{ public void debit( double v ); //prelievo public void credit( double v ); //deposito public String toString(); //lettura }

Principi OOP A.Natali Aprile La classe come realizzazione dellinterfaccia public class CAccount implements IAccount{... } IAccount c1 = new CAccount( 10 ); CAccount c2 = new CAccount( 20 ); c1 = c2;//SI c2 = c1;//NO IAccount c3 = c2; //SI

Principi OOP A.Natali Aprile Contratti tra cliente e servitore u Linterfaccia esplicita una parte del contratto tra cliente e servitore –Le specifiche sintattiche non bastano u La classe garantisce la consistenza degli oggetti –Occorre esprimere e gestire casi di non conformita (eccezioni)

Principi OOP A.Natali Aprile Invarianti ed eccezioni u Il valore del conto corrente deve essere sempre superiore a un valore limite prefissato u L'operazione debit non restituisce alcun valore in uscita, e quindi non e' in grado di segnalare una eventuale anomalia al cliente

Principi OOP A.Natali Aprile Eccezioni u L'insorgere durante una computazione di eventi anomali, quali violazioni di asserzioni, errori, esaurimento della memoria, etc. induce normalmente un aborto del programma. u Il concetto di eccezione e i correlati meccanismi di exception handling consentono di continuare l'esecuzione e di gestire l'evento anomalo.

Principi OOP A.Natali Aprile Il modello Resumption u Il controllo delle eccezioni segue un modello simile alla ricezione di un interrupt. –Il flusso normale di controllo e' sospeso per eseguire l'intervento di gestione dell'evento e poi riprende il normale flusso di controllo e' definitivamente interrotto e trasferito a un exception handler

Principi OOP A.Natali Aprile Il modello Termination u Al manifestarsi di una eccezione, il normale flusso di controllo e' definitivamente interrotto e trasferito a un exception handler

Principi OOP A.Natali Aprile Gestione delle eccezioni in Java u Java (come C++) supporta una semantica di terminazione u il sistema effettua automaticamente lo stack unwinding –dealloca i record di attivazione delle operazioni attive fino al cliente (in C++ chiama i distruttori degli oggetti in vita sullo stack)

Principi OOP A.Natali Aprile Eccezioni: specifica e generazione public void op(... ) throws ExceptionXX{ … throw new ExceptionXX(); }

Principi OOP A.Natali Aprile Eccezioni come oggetti u le eccezioni sono intese come oggetti, istanza di una opportuna gerarchia di exception classes. u La gestione della eccezione segue la metafora lancia un oggetto, e cattura un tipo

Principi OOP A.Natali Aprile Eccezioni: gestione u Un cliente puo' invocare una operazione prevedendo che il servitore possa rispondere sollevando una eccezione: try { ; } catch( ) { }

Principi OOP A.Natali Aprile Eccezioni: metodologia u Non bisogna usare le eccezioni come un meccanismo di controllo convenzionale. u Seguendo la metafora "lancia un oggetto, e cattura un tipo" conviene che gli argomenti di catch appartengano a classi di eccezioni appositamente definite.

Principi OOP A.Natali Aprile Leccezione EOverDrawn public class EOverDrawn extends Exception{};

Principi OOP A.Natali Aprile Una nuova specifica public interface IAccount{ public void debit( double v ) throws EOverDrawn; //prelievo con eccezione public void credit( double v ); //deposito public String toString(); //lettura } IAccount c1 = new CAccount( 10 ); try{ c1.debit( 500 ); }catch( Exception e ){ … }

Principi OOP A.Natali Aprile Una nuova realizzazione public class CAccount implements IAccount{ //VARIABILE DI CLASSE static double debitLimit = -10; //Variabili istanza (variabili di stato) double amount = 0; //Costruttore CAccount( double v ){ amount = v; } //Metodi public void credit( double v ){ amount += v; }

Principi OOP A.Natali Aprile Variabili di classe Sono qualificate static u Sono condivise tra tutte le istanze di una classe u Possono essere inizializzate a compile time u Sono accessibili dalle normali operazioni

Principi OOP A.Natali Aprile Prelievo con eccezione //Metodi public void debit( double v ) throws EOverDrawn;{ double t = amount - v; if( v > debitLimit )amount = t; else throw new EOverDrawn(); }//debit

Principi OOP A.Natali Aprile Consistenza ed asserzioni Invariant == (amount > debLimit) public void debit( double v ) throws EOverDrawn;{ require: true; double t = amount - v; if( v > debitLimit ) amount = t; else throw new EOverDrawn(); ensure: (amount==oldAmount-v) && invariant }//debit

Principi OOP A.Natali Aprile Rappresentazione esterna //Metodi public String toString(){ return ("conto="+ amount + " EURO\n"); }//toString }//CAccount

Principi OOP A.Natali Aprile Un main program //file testCAccount.java public class testCAccount{ static void prelievo( IAccount c1 ){ try{c1.debit( 500 ); }catch( Exception e ){ System.exit(); } }// prelievo public static void main( String[] args ){ IAccount c1 = new CAccount( 10 ); CAccount c2 = new CAccount( 20 ); IAccount c3 = c2; c1.credit( 20 ); prelievo(c1, 300); }//main }// testCAccount

Principi OOP A.Natali Aprile Metodi static u Possono essere invocati senza istanziare alcun oggetto –le class sono usabili come singoli oggetti (moduli) u Non possono accedere a variabili istanza u Possono invocare solo altri metodi static

Principi OOP A.Natali Aprile Compilazione ed esecuzione javac EOverDrawn.java javac IAccount.java javac CAccount.java javac testAccount.java java testAccount

Principi OOP A.Natali Aprile Principi supportati u Protezione dellinformazione e minimi privilegi di accesso u Separazione tra specifica e implementazione u Barriere di astrazione e indipendenza dalla rappresentazione u Modello client-server e contratti duso u Componenti come enti che preservano invarianti

Principi OOP A.Natali Aprile La progettazione per il cambiamento Il ruolo dellereditarieta

Principi OOP A.Natali Aprile Progettazione incrementale u Lereditarieta tra classi apre la via alla specifica incrementale del software u il modello ad oggetti (anche se non completamente specificato) e orientato alla progettazione per il cambiamentomodello ad oggetti –i concetti su cui si basa sono usabili in modo seamless come building blocks in tutte le fasi dello sviluppo del software

Principi OOP A.Natali Aprile Ereditarieta –Nasce come una relazione tra classi in cui una classe condivide la struttura e/o il funzionamento definito in un'altra classe (ereditarieta' singola) o in varie altre classi (ereditarieta' multipla). –Scaturisce dall'esigenza di introdurre un meccanismo per condividere (parti di) una descrizione, cioe' per riusare codice gia' funzionante.

Principi OOP A.Natali Aprile La progettazione per il cambiamento u Supporta l'intera sequenza che va dai requisiti (o dalla loro modifica) al sistema funzionate u Supporta lo sviluppo iterativo di un sistema lungo il tutto il suo tempo di vita u Concepisce ciascuna iterazione come una modifica a un sistema esistente

Principi OOP A.Natali Aprile Ereditarieta in Java u Tra interfacce: come meccanismo incrementale di specifica di contratti u Tra classi: come meccanismo di riuso di (specifiche di) implementazioni

Principi OOP A.Natali Aprile Una nuova specifica u Il conto corrente deve contenere una lista dei movimenti effettuati u Invariante: –La lista dei movimenti deve corrispondere alla sequenza di richieste

Principi OOP A.Natali Aprile Specifica incrementale (IConto) public interface IConto extends IAccount{ public String log(); //lista movimenti }//IConto

Principi OOP A.Natali Aprile Ereditarieta: concetto o meccanismo? u Ereditarieta is-a –Se B eredita da A, ogni istanza di B ha le stesse proprieta delle istanze di A u Ereditarieta is-like –Se B eredita da A, ogni istanza di B ha in se la struttura e il codice delle istanze di A

Principi OOP A.Natali Aprile Ereditarieta tra classi u Una classe derivata eredita –tutti i campi dati (tranne private) –i metodi public e protected u Una classe derivata non eredita –costruttori –(in C++) distruttore, costruttore di copia, assegnamento

Principi OOP A.Natali Aprile Ereditarieta: concetto o meccanismo? u L'interpretazione di una classe come un tipo di dato (astratto) induce a vedere lereditarieta' come un meccanismo per definire sottotipi. Si parla in questo caso di ereditarieta' strict. u L'ereditarieta' tra classi intese come tipi puo' essere interpretata come un meccanismo per introdurre polimorfismo

Principi OOP A.Natali Aprile In Java ogni cosa e un object class java.lang.ObjectObject class java.lang.reflect.ArrayArray class java.lang.ClassLoaderClassLoader class java.awt.Color (implements java.io.Serializable)ColorSerializable class java.awt.ComponentComponent (implements java.awt.image.ImageObserver,ImageObserver java.awt.MenuContainer, java.io.Serializable)MenuContainerSerializable …. CD

Principi OOP A.Natali Aprile Polimorfismo u In linguaggi polimorfici un valore o una variabile puo' denotare istanze di molti diversi tipi ( classi ) ammesso che questi siano collegati tra loro da relazioni tipo-sottotipo ( classe-sottoclasse ). dataType min(dataType v1, dataType v2)

Principi OOP A.Natali Aprile Vincoli imposti dalle relazioni sui tipi u Un sottotipo T1 di un tipo T introduce vincoli addizionali alla specifica di T –A T1 corrisponde un sottoinsieme piu' limitato di oggetti rispetto all'insieme di oggetti definito da T –Una variabile di tipo T puo' denotare un oggetto di tipo T1 ma non viceversa –Infatti e' vero che ogni oggetto di tipo T1 e' anche di tipo T, ma non e' vero il contrario

Principi OOP A.Natali Aprile La regola di conformita u Ogni oggetto di tipo T1, sottotipo di T, puo essere usato in tutti i contesti in cui e' ammissibile un oggetto del tipo T.

Principi OOP A.Natali Aprile Ereditarieta e subtyping u La specifica di un sottotipo deve continuare a soddisfare ai vincoli del tipo-genitore. –come garantire la regola di conformita' ? –cosa significa raffinare il contratto rappresentato dall'interfaccia e dal funzionamento di una classe?

Principi OOP A.Natali Aprile IComplex IReal X Y

Principi OOP A.Natali Aprile IParola P A B parolaLimitata parolaNonLimitata IParola p1 = new A(..); p1.charAt( 3 ); P p2=new B(…); p2.charAt(…); P p2=new P(…); p2.charAt(…);

Principi OOP A.Natali Aprile IParola P A B parolaLimitata parolaNonLimitata public char head(){ return charAt( 1 ); } IParola p1 = new A(..); char x = p1.head( );

Principi OOP A.Natali Aprile Realizzazione incrementale (CConto) public class CConto extends CAccount implements IConto{IConto // eredita struttura e operazioni di CAccountCAccount // accede alle variabili di CAccount // specializza le vecchie operazioni // realizza le nuove operazioni di IConto IConto

Principi OOP A.Natali Aprile Realizzazione incrementale // specializza le vecchie operazioni public void credit( double v ){ logObj.addElement(credit + v ); amount += v; //MEGLIO DI NO!! }//credit u L'ereditarieta' puo' compromettere il principio dell'incapsulamento dell'informazione se una classe derivata ha accesso ai dati di una classe genitore

Principi OOP A.Natali Aprile Qualificatori di accesso u public u private u protected nessuno: per Java vi e una visibilita a livello di package

Principi OOP A.Natali Aprile Realizzazione incrementale // specializza le vecchie operazioni public void credit( double v ){ logObj.add(credit + v ); super.credit( v ); }//credit Si riusa loperazione precedente

Principi OOP A.Natali Aprile Realizzazione incrementale public void debit( double v ) throws EOverDrawn{EOverDrawn //rispeciifca completa per inserire anche il log delle eccezioni double newamount = amount - v; if ( newamount >= getLimit() ) {//per maggior riuso amount = newamount; logObj.addElement( new Movimento("prelievo: "+ getTime(), v) ); }else { logObj.addElement( new Movimento("prelievo rifiutato: "+ getTime(), v) ); throw new EOverDrawn();EOverDrawn } }//debit

Principi OOP A.Natali Aprile Realizzazione incrementale // realizza le nuove operazioni di IConto IConto Vector logObj = new Vector(10,5); public String log(){ String s =; for(int i = 0; i < logObj.size(); i++ ) s=s+logObj.elementAt(i).toString()+"\n"; }//log }//CConto

Principi OOP A.Natali Aprile Una operazione polimorfica static void prelievo( IAccount c1, double v){IAccount try{c1.debit( v ); }catch( Exception e ){ System.out.println("ERROR: " + e ); System.exit(-1); } }//prelievo E possibile trasferire come valori a c1 oggetti di classe CAccountCAccount o di una qualsiasi sua sottoclasse (CConto)CConto

Principi OOP A.Natali Aprile Java vs. C++ static void prelievo( CAccount c1,...) u In C++ questa operazione non e polimorfica: –il trasferimento degli argomenti implica la copia degli oggetti –il meccanismo di binding e di tipo eager, mentre il polimorfismo richiede un meccanismo di late binding

Principi OOP A.Natali Aprile Il problema della costruzione u La costruzione di un oggetto procede in due fasi: –costruzione della parte ereditata dalla classe base (e ricorsivamente dalle superclassi) –costruzione della parte specifica

Principi OOP A.Natali Aprile Il problema della costruzione u La costruzione della parte ereditata puo essere indotta –esplicitamente con super( … ) –implicitamente (il sistema chiama il costruttore a zero argomenti della classe base) u Java NON disattiva (come fa il C++) il meccanismo del late binding entro i costruttori

Principi OOP A.Natali Aprile Tecnica errata di costruzione public CConto( double v ){ super( v ); System.out.println("costruito il CConto: " + this ); } u Produce un errore a tempo di esecuzione –il costruttore della classe base invoca la versione specializzata di credit che accede a una variabile logObj non ancora esistente

Principi OOP A.Natali Aprile Costruzione public CConto( double v ){ amount = 0; credit( v );//late binding System.out.println("costruito il CConto: " + this ); }

Principi OOP A.Natali Aprile Un nuovo test public static void main( String[] args ){ CConto c0 = new CConto( 20 ); IConto c1 = c0; c1.credit( 20 ); prelievo( c1, 10 ); prelievo( c1, 3000 ); System.out.println("movimenti del conto c1: \n" + c1.log() ); }//main

Principi OOP A.Natali Aprile Risultati costruttore di default di CAccount: conto=0.0 EURO costruito il CConto: conto=20.0 EURO ERROR: account.EOverDrawn movimenti del conto c1: deposito: 132/19:1:12 di 20.0 EURO prelievo: 132/19:1:12 di 10.0 EURO prelievo rifiutato: 132/19:1:12 di EURO

Principi OOP A.Natali Aprile Tecniche di progetto oo Dai meccanismi ai sistemi

Principi OOP A.Natali Aprile Tecniche elementari di progetto u Operazioni aperte u Operazioni primitive (dipendenti dalla rappresentazione) e non u Classi astratte u Wrapping

Principi OOP A.Natali Aprile Operazioni aperte A + m1( v : Real ) + m2( v : Real ) B m1 chiama m2 il funzionamento di m1 dipende dalloggetto che la sta eseguendo

Principi OOP A.Natali Aprile m2 m1 m2 Barriera di astrazione

Principi OOP A.Natali Aprile null:-> list cons : element, list -> list a, [ 1, 2 ] -> [a,1,2] head: list -> element head([a,1,2]) -> a tail: list -> list tail ([a,1,2]) -> [1,2] isEmpty list -> boolean Liste: primitive

Principi OOP A.Natali Aprile Delete: element el, list l1 -> list if( isEmpty(l1) ) return l1; if( equal( head(l1), el ) return delete( el, tail(l1) ); return cons(head(l1), delete( el, tail(l1) ); Eliminazione di un elemento

Principi OOP A.Natali Aprile Operazioni non primitive list insOrd(list l1, listData x){ if ( l1.empty() ) return nl.addFirst( x ); else if ( x.less( l1.head() ) return l1.addFirst(x); else return insOrd( l1.tail(),x).addFirst(x); }//insOrd

Principi OOP A.Natali Aprile Classi astratte u Introdotte come specifiche (operazionali) u Non possono essere istanziate u Devono essere specializzate da sottoclassi u Possono includere operazioni non primitive

Principi OOP A.Natali Aprile Wrapping u Tecnica usata per organizzare in Java il sottosistema di I/O sottosistema di I/O