Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Slides:



Advertisements
Presentazioni simili
Il paradigma Object Oriented
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unit à B2 Gli oggetti: concetti avanzati.
Unified Modeling Language
Recupero debito quarto anno Secondo incontro
Informatica Recupero debito quarto anno Terzo incontro.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
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.
Verification of object-oriented programs with invariants by M. Barnett, R. DeLine, M. Fähndrich, K.R.M. Leino, W. Schulte Bordignon Claudio Zampieron Elisa.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Derivazione tra classi
Overriding.
Soluzione Esercizio - Classe Vettore
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.
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
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.
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.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
Principi OOP A.Natali Aprile Principi di oop Dai costrutti alle metodologie.
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.
Introduzione alla modellazione di sistemi interattivi
Programmazione in Java (8)
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
Introduzione alla programmazione Object Oriented
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
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
Esercitazione Ereditarietà Polimorfismo. Entita’ Geometrica PuntoCerchioPoligono TriangoloQuadrilatero Rettangolo Quadrato.
Polimorfismo Significato Significato Varie famiglie Varie famiglie Polimorfismo in java Polimorfismo in java Polimorfismo di Sottotipo: Apparato in Java.
Programmazione ad oggetti
30/11/2004Laboratorio di Programmazione - Luca Tesei1 Interfacce e Polimorfismo.
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.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
1 Astrazione sul controllo: gli iteratori. 2 Gli iteratori 4 perché vogliamo iterarare “in modo astratto” 4 iteratori e generatori in Java –specifica.
1 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
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.
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.
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
LIP: 18 Aprile 2008 Interfacce. Rappresentazione Lista val next vuota Lista vuota: any true Lista non vuota: any true 154 false 24 false.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
28/12/2001package 1 Package Pacchetti e interfacce.
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:

Componenti A.Natali Marzo 19991

2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono definiti nella loro classe comune (di cui sono istanze). –I termini istance ed object sono intercambiabili

Componenti A.Natali Marzo Classi u Una classe descrive la struttura interna e il funzionamento di un oggetto. u Gli oggetti di una stessa classe hanno la stessa rappresentazione interna, le stesse operazioni e lo stesso funzionamento. name Attributes Operations

Componenti A.Natali Marzo 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)

Componenti A.Natali Marzo 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

Componenti A.Natali Marzo 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

Componenti A.Natali Marzo Classi in UML CAccount # amount: Real + debit( v : Real ) + credit( v : Real ) + public - private # protected

Componenti A.Natali Marzo 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; } }

Componenti A.Natali Marzo 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);

Componenti A.Natali Marzo 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

Componenti A.Natali Marzo 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.

Componenti A.Natali Marzo ContoCorrente: interfaccia public interface IAccount{ public void debit( double v ); //prelievo public void credit( double v ); //deposito }

Componenti A.Natali Marzo 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

Componenti A.Natali Marzo 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)

Componenti A.Natali Marzo Invarianti ed eccezioni u Il valore del conto corrente deve essere sempre superiore a un valore limite prefissato (per una certa categoria di clienti) u L'operazione debit non restituisce alcun valore in uscita, e quindi non e' in grado di segnalare una eventuale anomalia al cliente

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

Componenti A.Natali Marzo 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; }

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

Componenti A.Natali Marzo 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

Componenti A.Natali Marzo La classe nella progettazione u Apre la via alla specifica incrementale del software secondo i principi-base del modello ad oggetti (un modello non ancora completamente specificato)

Componenti A.Natali Marzo Modello ad oggetti u I concetti su cui si basa: –classi –oggetti –e sulle loro relazioni sono usabili in modo seamless come building blocks in tutte le fasi dello sviluppo del software: u E orientato alla progettazione per il cambiamento

Componenti A.Natali Marzo 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

Componenti A.Natali Marzo 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

Componenti A.Natali Marzo Ereditarieta u 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). u Scaturisce dall'esigenza di introdurre un meccanismo per condividere (parti di) una descrizione, cioe' per riusare codice gia' funzionante.

Componenti A.Natali Marzo Specifica incrementale public interface IACCOUNT extends IAccount{ public String toString(); //rapprresent. esterna public String log(); //lista movimenti }//IACCOUNT

Componenti A.Natali Marzo 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

Componenti A.Natali Marzo 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)

Componenti A.Natali Marzo Vincoli imposti dalle relazioni sui tipi u Un sottotipo T1 di un tipo T introduce vincoli addizionali alla specifica di T, cui 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

Componenti A.Natali Marzo 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.

Componenti A.Natali Marzo 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?

Componenti A.Natali Marzo Realizzazione incrementale public class CACCOUNT extends CAccount implements IACCOUNT{ // eredita struttura e operazioni di CAccount // accede alle variabili private di CAccount // specializza le vecchie operazioni // realizza le nuove operazioni di IACCOUNT

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

Componenti A.Natali Marzo Qualificatori di accesso u public u private u protected nessuno: in Java vi e una visibilita a livello di package

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

Componenti A.Natali Marzo Realizzazione incrementale // realizza le nuove operazioni di IACCOUNT Vector logObj = new Vector(10,5); public String toString(){ return + amount; } public String log(){ return logObj; }//log }//CACCOUNT

Componenti A.Natali Marzo Una operazione polimorfica void credit100( CAccount a1 ){ a1.credit( 100 ); }//credit100; IAccount c1 = new CAccount( 10 ); IACCOUNT c2 = new CACCOUNT( 20 ); credit100( c1 ); credit100( c2 ); System.out.println( c2.log() );

Componenti A.Natali Marzo Java vs. C++ u In C++ loperazione precedente 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

Componenti A.Natali Marzo Progetto orientato al cambiamento u Operazioni aperte u Operazioni primitive (dipendenti dalla rappresentazione) e non u Classi astratte

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

Componenti A.Natali Marzo Operazioni non primitive list insOrd( list l1, listData x){ if ( l1.isEmpty() ) return nl.addFirst( x ); else if ( x.less( l1.head() ) ) return l1.addFirst(x); else return insOrd( l1.tail(),x ).addFirst(x); }//insOrd

Componenti A.Natali Marzo Classe astratta u Consente di fattorizzare uninterfaccia comune a un insieme di sottotipi (sottoclassi) u Definisce il codice delle operazioni non primitive, lasciando alle sottoclassi la specifica del codice delle primitive (metodi abstract) u Può definire variabili