Paradigma a oggetti. Oggetti nel mondo reale. Oggetto Software. Oggetto Software. Classe Ogni oggetto appartiene ad una determinata

Documenti analoghi
Gerarchia di classi Java 1

Gerarchia di classi Java 1

Programmazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati

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

Informatica Ereditarietà Java. Ereditarietà

Progettazione Object-Oriented

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

Laboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java.

Proprietà delle Classi e degli Oggetti in Java

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Classi astratte Interfacce

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Proprietà delle Classi e degli Oggetti in Java

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

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

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

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

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Gerarchia di classi Java 1

Oggetti. La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto.

Dichiarazione di una classe. Dichiarazione ereditarietà

Alcune info sulle prossime lezioni

Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili

Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30

Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice

Programmazione ad oggetti

Programmazione Orientata agli Oggetti in Linguaggio Java

Ereditarietà: concetti di base

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

ereditarietà e polimorfismo

Corso di Informatica

La classe java.lang.object

Richiami su oggetti e OOP

Esempi in Java di program.ne O-O

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

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

Programmazione a oggetti

Ereditarietà e Polimorfismo

Ingegneria del Software

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

Principi di Progettazione del Software a.a

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

Concetti principali Ereditarietà e (overriding) di metodi. Ereditarietà e costruttori Livelli di accesso protected e package La classe Object

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Object-Oriented Programming

Programmazione orientata agli oggetti Ereditarietà

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Ereditarietà (ultima)

Ereditarietà (ultima)

Java Classi wrapper e classi di servizio. Classi di servizio

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

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

Fondamenti di Informatica

Oggetti e classi. Cos è un oggetto

Sommario. I Uso degli oggetti 39

PRINCIPI DELLA OOP. Ereditarietà e polimorfismo

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

INFORMATICA OOP Relazioni tra classi Roberta Gerboni

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

Programmazione orientata agli oggetti Ereditarietà

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Programmazione orientata agli oggetti Ereditarietà

Programmazione orientata agli oggetti Ereditarietà

Laboratorio di programmazione

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

Modello procedurale versus modello O-O

Ereditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Progettazione del Software Anno Accademico 2007/08

Programmazione orientata agli oggetti

Oggetti e dati primitivi 1

Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce

Java: Definire Classi e Creare Oggetti

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

Ereditarietà. Una classe, detta superclasse, può essere specializzata definendo una sottoclasse che ne contenga casi particolari.

Corso di Linguaggi di Programmazione

Introduzione alla programmazione orientata agli oggetti (prima parte) Rel 1.0

Il paradigma Object Oriented. Iolanda Salinari

Esempio 2: Subtyping

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2)

Classi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura

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

Informatica 3. Informatica 3. LEZIONE 8: Fondamenti di programmazione orientata agli oggetti (2) Lezione 8 - Modulo 1

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Lezione 15 programmazione in Java. Nicola Drago Dipartimento di Informatica Università di Verona

Ereditarietà. Unità 9. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Programmazione orientata agli oggetti Subtyping e polimorfismo. Subtyping-polimorfismo

Programmazione Orientata agli Oggetti

Transcript:

Paradigma a oggetti Il concetto di modulo o di componente prende una forma piu precisa L idea di base e quella di incapsulare dati in costrutti che contengono anche le procedure per manipolare tali dati Introdotto per migliorare l efficienza del processo di produzione e mantenimento del software Oggetti nel mondo reale Quotidianamente interagiamo con oggetti conoscendone le funzioni, ma non il funzionamento interno Gli oggetti sono scatole nere dotate di interfaccia che limita l accesso ai meccanismi interni Gli oggetti hanno uno stato e un comportamento Oggetto Software E una astrazione o un modello della realtà che limita il numero dei dettagli rappresentati all essenziale per il contesto considerato E una entita caratterizzata da una struttura dati alla quale si associa l insieme delle operazioni che e possibile eseguire su di essa Un oggetto puo essere concreto (es. un file) oppure concettuale (es. una politica di scheduling) Oggetto Software Anche un oggetto software ha uno stato, descritto e rappresentato da una o più variabili, ed un comportamento definito dai metodi (servizi) Un oggetto è costituito dall insieme delle variabili e dei metodi Un programma Object Oriented OGGETTO A OGGETTO B OGGETTO C OGGETTO D OGGETTO E Classe Ogni oggetto appartiene ad una determinata classe La classe è uno schema (tipo di dato astratto) che da luogo ad oggetti strutturalmente identici (variabili di quel tipo) La classe include almeno una descrizione dell oggetto e un mezzo per creare un oggetto La classe costituisce il prototipo Gli oggetti creati usando una stessa classe si dicono istanze di quella classe 1

Una classe contiene la dichiarazione dei dati e dei metodi int x, y; char ch; Classe Dichiarazioni di dati stato Dichiarazioni di metodi comportamento La classe moneta in Java public class Moneta { //----------------------------------------------------- // un oggetto di questo tipo rappresenta l oggetto // reale MONETA //---------------------------------------------------- final int TESTA = 1; final int CROCE = 0; private int faccia; public Moneta(){... //costruttore public void lancia() {... public int dammifaccia(){... public String tostring(int lancio) {... I membri delle classi Le classi contengono 2 tipi di membri Le variabili o i campi o gli attributi, che rappresentano le variabili di stato della classe I metodi, che rappresentano le operazioni (servizi) sotto forma di istruzioni Segnature La segnatura di un metodo è costituita dal Nome del metodo Ordine e tipo degli argomenti Tipo del valore di ritorno Il tipo di un oggetto è rappresentato dalla classe di appartenenza Scrivere metodi La dichiarazione di un metodo specifica il codice che verrà eseguito quando il metodo viene invocato Flusso di controllo nei metodi Il metodo invocato può essere anche della stessa classe: in questo caso serve solo il nome del metodo Quando un metodo viene invocato il flusso di controllo passa al metodo e il codice relativo viene eseguito Quindi, il flusso ritorna al punto da cui è partita la chiamata e continua da lì L esecuzione di un metodo può causare il ritorno di un valore computazione miometodo(); miometodo 2

Flusso di controllo nei metodi Il metodo chiamato può essere parte di altra classe, in questo caso occorre il nome dell oggetto istanza della classe main obj.fai aiuta c1 obj; obj.fai(); aiuta(); obj : c1 Interazione tra oggetti Gli oggetti interagiscono tra loro (mediante invocazioni di metodi) per realizzare funzioni più complesse Spesso i metodi necessitano di informazioni per poter essere eseguiti: i parametri Tre elementi per l invocazione: L oggetto che fornisce il servizio Il metodo da eseguire per espletare il servizio richiesto I parametri, se necessari al metodo Interazione tra oggetti Gli oggetti che interagiscono possono essere vicini : locali della stessa classe oppure distanti : remoti di classi differenti La classe Moneta: attributi Definiamo una classe Moneta e i seguenti dati: faccia, una variabile int che rappresenta la faccia corrente TESTA e CROCE, costanti di tipo int che rappresentano i due possibili stati della faccia La classe Moneta: servizi Il comportamento della classe è definito dai seguenti possibili metodi: Il costruttore Moneta, per costruire un oggetto Un metodo lancia, per lanciare la moneta Un metodo dammifaccia, per riportare la faccia corrente Un metodo tostring, per riportare una frase di descrizione per la stampa La classe Moneta in Java public class Moneta { //----------------------------------------------------- // un oggetto di questo tipo rappresenta l oggetto // reale MONETA //---------------------------------------------------- final int TESTA = 1; final int CROCE = 0; private int faccia; public Moneta(){... //costruttore public void lancia() {... public int dammifaccia(){... public String tostring(int lancio) {... 3

Utilizzo di classi Un programma, che istanzia oggetti di una certa classe, non necessariamente invoca tutti i metodi di quella classe Esempi: ContaLanci.java Il programma ContaLanci non usa il metodo tostring! public class ContaLanci { //---------------------------------------------------------- // lancia una moneta diverse volte e conta il numero di testa // o croce che ottiene. //------------------------------------------------------------- public static void main (String[] args){ final int NUM_LANCI = 10; int testa_c = 0, croce_c = 0; Moneta miamoneta; // dichiarazione della variabile miamoneta = new Moneta (); // istanzia un oggetto Moneta for (int cont=1; cont <= NUM_LANCI; cont++){ miamoneta.lancia(); if ( miamoneta.dammifaccia() == miamoneta.testa) testa_c++; else croce_c++; System.out.println ("Il numero dei lanci: " + NUM_LANCI); System.out.println ("Numero di teste: " + testa); System.out.println ("Numero di croci: " + croce); Creare oggetti Gli oggetti vengono quindi creati mediante un metodo di istanziazione, detto costruttore Il costruttore, per default, alloca memoria all oggetto istanziato Codice aggiuntivo puo essere inserito nel (metodo) costruttore, ad esempio per inizializzare lo stato dell oggetto La classe è un entita statica (una definizione), l oggetto è un entità dinamica (in esecuzione) Diagramma : slide 12 Concetti base del paradigma OO Concetti base del paradigma OO Incapsulamento Gli elementi di definizione di una classe sono raccolti in un unico punto, e di questa si rendono visibili all esterno solo le interfacce Information hiding La struttura dati propria di un oggetto e distinta dalla struttura dati accessibile dall esterno Ereditarietà Le classi possono essere organizzate in maniera gerarchica, e una classe eredita caratteristiche dai livelli superiori Astrazione Il meccanismo con cui si specificano le caratteristiche peculiari di un oggetto che lo differenziano da altri 4

Incapsulamento Un oggetto può essere visto da due punti di vista: interno - la struttura dati o gli algoritmi usati dai suoi metodi esterno - l interfaccia per l interazione tra gli oggetti Quindi dal punto di vista esterno, un oggetto è un entità incapsulata, che fornisce un insieme di servizi Consente modularità Information hiding Mediante l interfaccia un oggetto nasconde dettagli al resto del sistema Consente flessibilità Una buona programmazione ad oggetti non deve permettere ad un oggetto di modificare direttamente lo stato di un altro oggetto Diagramma : slide 14 Diagramma : slide 15 e come risultato Le variabili di un oggetto, che ne rappresentano lo stato, sono nascoste all interno dell oggetto, accessibili solo mediante i metodi e come risultato L utente, o il client, di un oggetto può richiedere i suoi servizi, ma non deve conoscere come questi sono implementati I meccanismi di funzionamento interno sono tenuti nascosti al client, che può solo invocare i metodi che ne costituiscono l interfaccia Idealmente i metodi proteggono le variabili Client Metodi Dati 5

Ereditarietà Le classi possono avere una struttura gerarchica ed ereditano caratteristiche e funzionalità Il poter definire una struttura gerarchica tra le classi costituisce una fondamentale tecnica dell approccio object-oriented facilita il disegno del software promuove il riuso (derivare nuove classi da classi già definite) introduce polimorfismo tramite ereditarietà La classe da cui si eredita viene detta classe antenato o superclasse o anche classe base La classe derivata viene detta classe figlio o sottoclasse Diagramma : slide 7 Definire sottoclassi In Java, per stabilire una relazione di sottoclasse, si usa la parola riservata extends class Automobile extends Veicolo { // contenuto della classe class Book{ protected int pages = 1500; //---------------------------------------------------------------- // Stampa un messaggio che riguarda il numero // di pagine del libro. //---------------------------------------------------------------- public void pagemessage (){ System.out.println ("Numero di pagine: " + pages); class Dictionary extends Book{ private int definitions = 52500; //----------------------------------------------------------------- // Stampa una frase usando dati locali (definitions) e dati // ereditati dalla superclasse (pages). //----------------------------------------------------------------- public void definitionmessage (){ System.out.println ("Numero parole definite: " + definitions); System.out.println ("Numero definizioni per pagina: " + definitions/pages); class Words{ //--------------------------------------------------------- // Istanzia un oggetto di una classe derivata //--------------------------------------------------------- public static void main (String[] args){ Dictionary webster = new Dictionary (); webster.pagemessage(); webster.definitionmessage(); Regole di ereditarieta La sottoclasse eredita i membri (variabili e metodi) dalla sua superclasse e da tutti gli antenati La sottoclasse può usare i membri della superclasse come sono, o può oscurare le variabili o ridefinire i metodi La sottoclasse eredita quindi tutti i membri della superclasse a meno di variabili nascoste metodi sovrascritti (polimorfismo) costruttori, che non sono membri di una classe e perciò non vengono ereditati dalle sottoclassi Diagramma : slide 9 Le sottoclassi non ereditano quindi un membro della superclasse se la sottoclasse lo dichiara con lo stesso nome Per le variabili, la variabile della sottoclasse oscura quella della superclasse Per i metodi, il metodo della sottoclasse ridefinisce o sovrascrive quello della superclasse 6

Regole di ereditarieta in Java I modificatori di visibilità determinano quali membri della classe vengono o non vengono ereditati Si ereditano le variabili e i metodi dichiarati con visibilità public, ma non quelli con visibilità private Ma le variabili public violano la nostra cura a incapsulare i dati Quando si vuole stabilire una relazione di ereditarietà possiamo usare un terzo modificatore di visibilità: protected class Book{ protected int pages = 1500; //---------------------------------------------------------------- // Stampa un messaggio che riguarda il numero // di pagine del libro. //---------------------------------------------------------------- public void pagemessage (){ System.out.println ("Numero di pagine: " + pages); class Dictionary extends Book{ private int definitions = 52500; //----------------------------------------------------------------- // Stampa una frase usando dati locali (definitions) e dati // ereditati dalla superclasse (pages). //----------------------------------------------------------------- public void definitionmessage (){ System.out.println ("Numero parole definite: " + definitions); System.out.println ("Numero definizioni per pagina: " + definitions/pages); class Words{ //--------------------------------------------------------- // Istanzia un oggetto di una classe derivata //--------------------------------------------------------- public static void main (String[] args){ Dictionary webster = new Dictionary (); webster.pagemessage(); webster.definitionmessage(); Generiamo una gerarchia Una sottoclasse può essere a sua volta superclasse, così si forma una gerarchia di classi poligono Generiamo una gerarchia Due discendenti della stessa superclasse si dicono fratelli Un buon disegno di relazioni tra classi mette tutte le caratteristiche comuni il più alto possibile in gerarchia concavo convesso Un membro ereditato viene passato verso il basso nella linea di discendenza quadrato triangolo stella La gerarchia spesso deve essere estesa e modificata per soddisfare esigenze che cambiano Non esiste LA gerarchia appropriata a tutte le situazioni Book Author Edition Publication date ISBN Published item Title Publisher Year Issue Magazine Library item Catalogue number Acquisition date Cost Type Status Number of copies Acquire () Catalogue () Dispose () Issue () Return () Film Director Date of release Distributor Recorded item Title Medium Computer program Version Platform Library class hierarchy Title attribute does not appear in the super-class (domain experience!!!) Reader Affiliation Library user Name Address Phone Registration # Register () De-register () Staff Department Department phone Borrower Items on loan Max. loans User class hierarchy Student Major subject Home address 7

Astrazione L astrazione permette di nascondere o ignorare dettagli non essenziali Un oggetto è un astrazione in quanto : non ci preoccupiamo dei suoi dettagli interni per usarlo non sappiamo come lavora il metodo quando lo invochiamo Una estremizzazione del concetto : Classi astratte Una classe astratta è un segnaposto nella gerarchia delle classi che rappresenta un concetto generico Una classe astratta non può essere istanziata Si usa il modificatore abstract nell intestazione della classe per dichiararla tale Una classe astratta deve contenere almeno un metodo astratto Una estremizzazione del concetto : Classi astratte Altre relazioni tra classi Una classe discendente di una classe astratta deve sovrascrivere i metodi astratti della superclasse da cui discende o sarà considerata anch essa astratta Aggregation L uso di classi astratte è una questione di scelta di progetto : Aiuta a stabilire gli elementi comuni che dovranno avere le sottoclassi di una classe che rappresenta un concetto astratto Association Around the aggregation and an example Study pack Aggregation allows classes to be composed of other classes Assignment Credits OHP slides Slides Course title Number Year Instructor Text Lecture notes Videotape Tape ids. Exercises #Problems Description Solutions Text Diagrams 8

Around the association Diagramma : slide 21 Association allows classes to use other classes Class Diagram example Diagramma : slide 16 Diagrammi : slides 25,27 9