FloorButton - pressed : Boolean = false + resetbutton( ) : void + pressbutton( ) : void
|
|
- Prospero Claudio Carli
- 5 anni fa
- Visualizzazioni
Transcript
1 0. (Caso di studio facoltativo) Pensare a oggetti: incorporare l ereditarietà nel simulatore di ascensore Rivisitiamo ora il nostro progetto di simulatore di ascensore per vedere come può beneficiare dell ereditarietà. Per applicare l ereditarietà, abbiamo bisogno di scoprire le cose in comune tra le classi del simulatore. Iniziamo esaminando le somiglianze tra le classi FloorButton e ElevatorButton. La figura 0.24 mostra gli attributi e le funzionalità di ciascuna classe. Entrambe le classi hanno lo stesso attributo (pressed) e funzionalità (pressbutton e resetbutton). Saremmo tentati di usare l ereditarietà in questa situazione, cioè estrarre le cose in comune tra le classi FloorButton e ElevatorButton, metterle in una superclasse comune Button, e poi derivare le classi FloorButton e ElevatorButton dalla classe Button. Però, se gli oggetti FloorButton e ElevatorButton hanno un comportamento identico, usare l ereditarietà non è giustificato. In realtà, non possiamo neppure giustificare l uso di classi diverse per questi oggetti! L oggetto FloorButton segnala all oggetto Elevator di muoversi al piano richiesto. L oggetto ElevatorButton segnala all oggetto Elevator di muoversi al piano opposto. Come mostrato nel diagramma di attività della figura 5.29, il FloorButton e l ElevatorButton segnalano all oggetto Elevator di muoversi verso un piano. L oggetto Elevator si muove in risposta a un segnale di FloorButton solo se l Elevator si trova sul piano opposto della richiesta ed è fermo. L Elevator si muove in risposta a un segnale da ElevatorButton solo se è fermo. In ogni caso, né FloorButton, né ElevatorButton ordinano a Elevator di muoversi verso l altro piano. Piuttosto, l Elevator risponde al segnale di un bottone in dipendenza dal suo stato corrente. Ogni bottone ha un solo comportamento, cioè segnalare a Elevator di muoversi. Gli oggetti FloorButton e ElevatorButton sono realmente solo oggetti separati della stessa classe; possiamo allora combinare le classi FloorButton e ElevatorButton nella classe Button ed eliminarle dal nostro caso di studio. Ingegneria del software 0.3 Se parecchi oggetti hanno gli stessi attributi ed esibiscono il medesimo comportamento, sono probabilmente oggetti della stessa classe. Prima di usare l ereditarietà nel vostro programma, assicuratevi che ogni classe abbia attributi distinti e/o esibisca comportamenti distinti. Ora cominciamo a cercare delle classi che esibiscano comportamenti simili (ma non identici). Nella sezione 4.4, abbiamo incontrato il problema di rappresentare la posizione di Person: in quale piano è posizionata una persona quando viaggia nell ascensore? Usando l ereditarietà, ora possiamo modellare una soluzione. Sia Elevator che Floor sono posizioni in cui Person si trova nel simulatore. In altre parole, Elevator e Floor sono tipi di posizioni, ma un Elevator certamente non è un Floor. FloorButton ElevatorButton Figura 0.24 Attributi e funzionalità delle classi FloorButton e ElevatorButton
2 2 CAPITOLO 0 Modifichiamo le classi Elevator e Floor in modo che ereditino da una nuova superclasse chiamata Location. Il linguaggio UML specifica una relazione chiamata generalizzazione che modella l ereditarietà. La figura 0.25 è il diagramma di classe che modella la generalizzazione della superclasse Location e delle sottoclassi Elevator e Floor. Le frecce con la punta vuota indicano che le classi Elevator e Floor ereditano dalla classe Location. La classe Location contiene l attributo private locationname, che contiene un valore stringa tra firstfloor, secondfloor e elevator. Includiamo il metodo setlocationname in modo che ogni sottoclasse possa impostare il valore appropriato. Notate che il metodo setlocationname ha un modificatore di accesso che non abbiamo ancora visto, il segno di cancelletto (#), che indica che il metodo è protected, in modo che solo le sottoclassi Elevator e Floor possano usare questo metodo per impostare locationname. Inoltre, includiamo il metodo public getlocationname, in modo che ogni oggetto possa ottenere il valore di locationname. Cerchiamo altre similarità tra le classi Elevator e Floor. Secondo il diagramma di classe della figura 6.20, entrambe le classi condividono l attributo intero capacity (che vale ). Ora, la classe Location contiene l attributo private capacity, che rappresenta il massimo numero di oggetti Person che possono occupare quella posizione. Nella nostra simulazione, il valore di questo attributo non cambierà durante l esecuzione, e dunque la classe Location dichiara questo attributo come costante usando il termine {frozen} vicino all attributo capacity. La classe Location contiene anche il metodo public getcapacity, che ritorna il valore di capacity, mentre un metodo setcapacity non è necessario, perché il valore di questo attributo non può essere cambiato. Le sottoclassi Elevator e Floor ereditano dunque l attributo capacity e il metodo getcapacity. Location - locationname : String - capacity : Integer = {frozen} # setlocationname( String ) : void + getlocationname( ) : String + getcapacity( ) : Integer Elevator - moving : Boolean = false - summoned : Boolean = false - currentfloor : Integer - destinationfloor : Integer - traveltime : Integer = 5 + ride( ) : void + requestelevator( ) : void + enterelevator( ) : void + exitelevator( ) : void + departelevator( ) : void Floor Figura 0.25 Diagramma di classe che modella la generalizzazione della superclasse Location e delle sottoclassi Elevator e Floor
3 LA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI: POLIMORFISMO 3 Continuiamo a cercare altre similarità. Secondo la figura 3.9, la classe Elevator contiene dei riferimenti al suo bottone e alla sua porta. La classe Floor contiene dei riferimenti al suo bottone e alla sua porta attraverso l associazione di Floor con la classe ElevatorShaft. La classe ElevatorModel aggrega le classi Floor e ElevatorShaft e può passare un riferimento di tipo ElevatorShaft al costruttore della classe Floor. Usando questa associazione, la classe Floor può riferire gli oggetti Button e Door di ElevatorShaft. Quindi, nella nostra simulazione, la classe Location conterrà i metodi public getbutton e getdoor che ritornano rispettivamente dei riferimenti a oggetti Button e Door. La classe Floor sovrascrive questi metodi per ritornare i riferimenti a oggetti Button e Door di quel piano, mentre la classe Elevator sovrascrive questi metodi per ritornare i riferimenti a oggetti Button e Door dell ascensore. Dichiariamo la classe Location come astratta in modo che le sottoclassi Button e Door siano obbligate a implementare i metodi getbutton e getdoor. Il linguaggio UML raccomanda di indicare i nomi delle classi astratte (e dei metodi astratti) in italico, come abbiamo fatto nella figura I metodi getbutton e getdoor non sono invece indicati in italico nelle sottoclassi Elevator e Floor, in quanto in questo caso sono metodi concreti con un implementazione distinta. Notate che le classi Elevator e Floor indicano le funzionalità getbutton e getdoor nel loro terzo scomparto, perché ognuna delle classi ha un implementazione diversa del metodo sovrascritto. In questa simulazione, usare l ereditarietà sembra appropriato per progettare Elevator e Floor. Ogni classe rappresenta una Location che un oggetto Person può occupare, ma la classe Elevator contiene degli attributi e dei comportamenti aggiuntivi che la distinguono dalla classe Floor. Introduciamo un associazione tra la classe Person e la classe Location, che rappresenta il fatto che la persona si trovi sul primo piano, o sul secondo piano, o sull ascensore. Ora rivolgiamo la nostra attenzione alle classi e FloorDoor. Ancora una volta, vediamo se è il caso di usare l ereditarietà con queste classi. La figura 0.26 mostra che gli attributi e le funzionalità di tali classi sono identici: entrambe le classi possiedono l attributo open e le funzionalità opendoor e closedoor. Comunque, in base alla specifica del problema, sappiamo che e FloorDoor hanno comportamenti diversi. Quando si apre, deve aprire FloorDoor per assicurarsi che le porte si aprano insieme. La classe FloorDoor ha gli attributi e le funzionalità di base richieste per tutte le porte, quindi rinominiamo la classe FloorDoor nella classe Door, che rappresenta una generalizzazione delle porte nel nostro caso di studio. La classe rappresenta un caso speciale della più generale classe Door: un oggetto, quando si apre, ha il compito di aprire un altro oggetto Door. Quindi, stabiliamo una relazione di generalizzazione tra la classe e la classe Door. La classe sovrascrive i metodi opendoor e closedoor in modo da implementare il comportamento specifico (figura 0.27). FloorDoor Figura 0.26 Attributi e funzionalità delle classi e FloorDoor
4 4 CAPITOLO 0 Door Figura 0.27 Generalizzazione della superclasse Door e della sottoclasse La figura 0.28 è un diagramma di classe aggiornato del nostro modello che riflette questi cambiamenti, incorpora l ereditarietà, elimina le classi FloorButton, ElevatorButton e FloorDoor e introduce le classi Button, Door e Location. Rimuoviamo le associazioni tra Person e Elevator e tra Person e Floor dal diagramma delle classi, perché il riferimento a Location di Person può essere sia un riferimento a Floor che un riferimento a Elevator. Un oggetto Person imposta il suo riferimento di tipo Location a Elevator quando entra nell ascensore, e a Floor quando cammina su quel piano. Infine, assegniamo alla classe Elevator due riferimenti di tipo Location, che rappresentano il piano corrente dell Elevator e il piano di destinazione (avevamo precedentemente usato degli interi per rappresentare tali informazioni). Permettiamo a un oggetto Person che occupa una posizione di interagire con diversi oggetti (accessibili dall oggetto Location su cui si trova) nel simulatore. Per esempio, un Light 2 Turns on/off ElevatorShaft Resets Floor 2 2 Door Signals arrival Button Presses Person 0..* Opens/Closes Opens Closes Elevator Signals to move Resets Occupies Rings Bell Location - locationname : String 2 - capacity : Integer = {frozen} # setlocationname( String ) : void + getlocationname( ) : String + getcapacity( ) : Integer Figura 0.28 Diagramma di classe del nostro simulatore (con l ereditarietà)
5 LA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI: POLIMORFISMO 5 oggetto Person può premere un oggetto Button dalla sua posizione specifica. Un oggetto Person può occupare solo un oggetto Location per volta, quindi dovrebbe poter interagire solo con gli oggetti noti a quell oggetto Location. Usando il suo riferimento a Location, un oggetto Person non può eseguire un azione illegale, come premere il bottone del primo piano mentre viaggia sull ascensore. Questa restrizione vale anche nel mondo reale. Abbiamo presentato gli attributi e le funzionalità con i modificatori di accesso nella figura 8.9. Ora, presentiamo un diagramma di classe modificato che incorpora l ereditarietà nella figura Questo diagramma abbreviato non mostra le relazioni di ereditarietà, ma invece mostra gli attributi e i metodi dopo che abbiamo applicato l ereditarietà al nostro sistema. Questo diagramma non include gli attributi mostrati dalle aggregazioni nella figura 0.28 per le classi ElevatorShaft e Elevator. Come abbiamo fatto nella figura 4.8, abbiamo scelto di risparmiare spazio nella figura 0.29 non mostrando questi attributi aggiuntivi; comunque, li includeremo nell implementazione Java finale. Ingegneria del software 0.4 Un diagramma di classe completo mostra tutte le associazioni tra le classi e tutti gli attributi e funzionalità di ogni classe. Quando il numero di attributi, metodi e associazioni è notevole (come nelle figure 0.28 e 0.29), è pratica comune dividere queste informazioni in due diagrammi: uno focalizzato sulle associazioni, l altro focalizzato sugli attributi e sui metodi. Creare due diagrammi di classe in questo modo favorisce la leggibilità. La classe Person ora contiene un riferimento location a un oggetto Location, che indica se la persona si trova su un piano o sull ascensore. Implementazione: forward engineering (con l ereditarietà) Nella sezione 8.7, abbiamo usato UML per esprimere le classi Java per la nostra simulazione. Continuiamo la nostra implementazione usando l ereditarietà, prendendo la classe Elevator come esempio.. Se una classe B è una generalizzazione della classe A, allora la classe A estende la classe B nella dichiarazione di classe. Per esempio, la superclasse astratta Location è una generalizzazione della classe Elevator; quindi, la dichiarazione di classe dovrebbe essere public class Elevator extends Location { // costruttore public Elevator() {} } 2. Se la classe B è una classe astratta e la classe A è una sottoclasse della classe B, allora la classe A deve implementare i metodi astratti della classe B (se la classe A deve essere una classe concreta). Per esempio, la classe Location contiene i metodi astratti getbutton e getdoor; quindi, la classe Elevator deve implementare questi metodi. La figura 0.30 mostra il codice Java della classe Elevator dalle figure 0.28 e Notate che il metodo get- Button (righe 26-29) ritorna un riferimento all oggetto Button di Elevator, e il metodo getdoor (righe 23-25) ritorna un riferimento all oggetto Door di Elevator: l oggetto Elevator ha delle associazioni con entrambi gli oggetti, come indicato dal diagramma di classe della figura La classe Elevator eredita i campi capacity e locationname, e i metodi non astratti getcapacity, setlocationname e getlocationname dalla
6 6 CAPITOLO 0 Location - locationname : String - capacity : Integer = {frozen} # setlocationname( String ) : void + getlocationname( ) : String + getcapacity( ) : Integer Light - lighton : Boolean = false + turnonlight( ) : void + turnofflight( ) : void ElevatorShaft Person - ID : Integer - moving : Boolean = true - location : Location + dooropened( ) : void Elevator - moving : Boolean = false - summoned : Boolean = false - currentfloor : Location - destinationfloor : Location - traveltime : Integer = 5 + ride( ) : void + requestelevator( ) : void + enterelevator( ) : void + exitelevator( ) : void + departelevator( ) : void + ringbell( ) : void Floor Bell Button Door Figura 0.29 Diagramma di classe con attributi e funzionalità (con l ereditarietà) superclasse Location, quindi non abbiamo bisogno di dichiararli. La figura 0.29 specifica gli attributi summoned, moving, currentfloor, destinationfloor e traveltime e le funzionalità ride, requestelevator, enterelevator, exitelevator e departelevator per la classe Elevator. Le righe 6-0 della figura 0.30 dichiarano i campi per questi attributi, e le righe 9-23 dichiarano i metodi per queste funzionalità. I riferimenti elevatorbutton, elevatorfloor e bell (righe -3) sono campi specificati dalle aggregazioni di Elevator della figura // Elevator.java 2 // Generato usando il diagramma di classe 0.28 e public class Elevator extends Location { 4 5 // attributi Figura 0.30 La classe Elevator generata dalle figure 0.28 e 0.29 (continua)
7 LA PROGRAMMAZIONE ORIENTATA AGLI OGGETTI: POLIMORFISMO 7 6 private boolean moving; 7 private boolean summoned; 8 private Location currentfloor; 9 private Location destinationfloor; 0 private int traveltime = 5; private Button elevatorbutton; 2 private Door elevatordoor; 3 private Bell bell; 4 5 // costruttore 6 public Elevator () {} 7 8 // funzionalita 9 public void ride() {} 20 public void requestelevator() {} 2 public void enterelevator() {} 22 public void exitelevator() {} 23 public void departelevator() {} // metodo che sovrascrive getbutton 26 public Button getbutton() 27 { 28 return elevatorbutton; 29 } 30 3 // metodo che sovrascrive getdoor 32 public Door getdoor() 33 { 34 return elevatordoor; 35 } 36 } Figura 0.30 La classe Elevator generata dalle figure 0.28 e 0.29 Collaudo e messa a punto 0. Usare degli strumenti di modellazione UML per generare il codice automaticamente aiuta a ridurre la quantità di errori che i programmatori introducono di solito quando scrivono il codice manualmente. Ingegneria del software 0.5 Parecchi strumenti di modellazione UML convertono i modelli UML in Java. Questi strumenti possono velocizzare considerevolmente il processo di implementazione. Abbiamo fornito una buona base di partenza per implementare dei progetti UML in Java. Nella sezione.9, ritorneremo alle interazioni, e ci concentreremo su come gli oggetti generano e gesticono i messaggi passati nelle collaborazioni, e useremo ancora il forward engineering per generare altro codice Java dai diagrammi di classe.
Thread, classi attive e sequenze di modellazione IL MULTITHREADING 1
IL MULTITHREADING 5. (Caso di studio facoltativo) Pensare a oggetti: il multithreading Gli oggetti del mondo reale svolgono le loro funzioni indipendentemente uno dall altro e in modo concorrente. Come
L applicazione di MVC alla simulazione di ascensore I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1
I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1 3.13 (Caso di studio facoltativo) Pensare a oggetti: Modello-Vista-Controllore I design pattern descrivono strategie efficaci per costruire sistemi
Gerarchia di classi Java 1
Specializzare un modello Gerarchia di classi Java Corso di laurea in Una classe modella un pezzo di realtà Una macchina, una moneta, un impiegato Spesso è necessario specializzare la versione originale
Gerarchia di classi Java 1
Specializzare un modello Gerarchia di classi Java Corso di laurea in Una classe modella un pezzo di realtà Una macchina, una moneta, un impiegato Spesso è necessario specializzare la versione originale
Identificare le classi in un sistema
3.7 (Caso di studio facoltativo) Pensare a oggetti: identificare le classi nella specifica del problema Cominciamo ad affrontare la progettazione del simulatore di ascensore introdotto nel capitolo. Iniziamo
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 in Java (I modulo) Lezione 20: Ereditarietà
Programmazione in Java (I modulo) Lezione 20: Ereditarietà Ereditarietà (Inheritance) Il programmatore definisce una classe generale In seguito definisce una classe più specifica Aggiungo soltanto nuovi
A. Ferrari Object Oriented Design
Object Oriented Design UML class diagram cos è UML o è un linguaggio di progettazione, da non confondere con i linguaggi di programmazione (Python, C, C++, Java, ) o fornisce una serie di diagrammi per
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
Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:
Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata
ereditarietà e polimorfismo
ereditarietà e polimorfismo Java ereditarietà o l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza o la nuova classe viene definita esprimendo solamente le differenze
Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
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
Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio
Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica Introduzione Ereditarietà in Sintesi È uno dei concetti chiave della programmazione orientata agli
Laboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java.
Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java. Di solito se abbiamo la struttura di una classe con gli attributi e i metodi possiamo istanziare
Introduzione alla programmazione orientata agli oggetti (prima parte) Rel 1.0
Introduzione alla programmazione orientata agli oggetti (prima parte) Rel 10 a cura del prof Francesco Tappi Il paradigma orientato agli oggetti implica lo sviluppo di unità di programmazione attive, chiamate
Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object
Programmazione orientata agli oggetti La classe, metodi e classi final, this 1 La classe Negli esempi fatti nella prima parte del corso abbiamo definito alcune classi, per esempio Counter e Orologio, senza
Programmazione ad oggetti
Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.
Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili
Riuso di classi Spesso si ha bisogno di classi simili Si vuole cioè riusare classi esistenti per implementare attributi e metodi leggermente diversi Non è pratico copiare la classe originaria e modificarne
UML UNIFIED MODELING LANGUAGE
UML UNIFIED MODELING LANGUAGE Cos è UML E un linguaggio di progettazione, da non confondere con i linguaggi di programmazione (C, C++, Java, ) Fornisce una serie di diagrammi per rappresentare ogni tipo
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
Dichiarazione di una classe. Dichiarazione ereditarietà
Introduzione Il Java è un linguaggio di programmazione orientato agli oggetti (OOL), perché permette di realizzare in un programma tutti i concetti alla base dell OOP quali: l astrazione dei dati, mediante
PRINCIPI DELLA OOP. Ereditarietà e polimorfismo
PRINCIPI DELLA OOP Ereditarietà e polimorfismo Ereditarietà e specializzazione Una delle caratteristiche distintive del paradigma di programmazione orientato agli oggetti è l'ereditarietà L'ereditarietà
SYLLABUS TRIENNIO. prof. Mauro Malatesta. Approvata dal Dipartimento di il. Approvata dal Consiglio di classe il...
Anno scolastico: 2014 2015 Classe: 4 Sez.: G Disciplina: INFORMATICA Articolazione: Informatica Docente: prof. Mauro Malatesta (firma) Approvata dal Dipartimento di il Approvata dal Consiglio di classe
Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1
Incapsulamento Paradigmi della PO Ereditarietà Polimorfismo Software per TLC - AA 2008/2009 1 Incapsulamento Una classe contiene dati e metodi Filosofia Ai dati si accede solo attraverso i metodi I metodi
Fondamenti di Informatica
Relazioni tra classi Fondamenti di Informatica 27. Standard UML 2. parte Generalizzazione: (ereditarietà) relazione in cui una classe (sottoclasse) eredita gli attributi e le operazioni di una superclasse:
Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {
Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi
Diagrammi di classe e sistemi orientati agli oggetti
Appendice D Diagrammi di classe e sistemi orientati agli oggetti ANDREA GINI Un effetto della strategia di incapsulamento è quello di spingere il programmatore a esprimere il comportamento di un sistema
Oggetti e classi. Cos è un oggetto
Oggetti e classi Cos è un oggetto Basta guardarsi intorno per scoprire che il mondo reale è costituito da oggetti: libri, biciclette, giocattoli, ma anche ragazzi, bambini, fiori, gatti, cani, fiumi, montagne,
A. Ferrari Object Oriented Design
Object Oriented Design UML class diagram cos è UML o è un linguaggio di progettazione, da non confondere con i linguaggi di programmazione (Python, C, C++, Java, ) o fornisce una serie di diagrammi per
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
public class Counter2 extends Counter { public void dec() { val--; }
public class Main public class Counter2 extends Counter public void dec() val--; public class Counter public Counter() System.out.println("Counter : costruttore di default!"); val = 1; System.out.println("Counter
La classe java.lang.object
La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita
Oggetti. La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto.
Classi e oggetti Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto. OOP Vantaggi facilità di lettura e di comprensione
Progettazione Object-Oriented
Progettazione Object-Oriented Generalità, Relazione fra OOA e OOD Concetti di base: Classi e Oggetti, Relazioni fra oggetti, Ereditarietà e Polimorfismo La specifica del Progetto: notazione UML Una metodologia
JAVA GENERICS. Angelo Di Iorio Università di Bologna
JAVA GENERICS Angelo Di Iorio Università di Bologna Tipi parametrici In diversi casi è utile definire classi che operano su tipi di dato diverso e implementano un comportamento comune e indipendente dal
Esercizi di autovalutazione Risposte agli esercizi di autovalutazione Esercizi... 64
Sommario PREFAZIONE... IX Il nostro approccio didattico... ix Software incluso con questo libro... xii Una panoramica del libro... xiii Ringraziamenti... xv Gli autori... xvii Deitel & Associates, Inc....
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo
Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo 1 Esempio 1: Costruttori ed ereditarietà Costruttori ed ereditarietà 2 Introduzione Java prevede due automatismi legati
INFORMATICA OOP Relazioni tra classi Roberta Gerboni
2015 - Roberta Gerboni Relazione di associazione E possibile legare varie classi presenti in un progetto con una relazione di associazione. Una associazione individua una connessione logica tra classi
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()
Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals() Ereditarietà (Inheritance) RIASSUMIAMO DALLA SCORSA
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 04 Introduzione ai Tipi astratti di dato A. Miola Febbraio 2007 http://www.dia.uniroma3.it/~java/fondinf2/ Introduzione ADT 1
Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce
Programmazione orientata agli oggetti Classi astratte e interfacce 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma solo dichiarati Questi metodi
OLTRE LE CLASSI OLTRE LE CLASSI
OLTRE LE CLASSI Nella sua parte non statica, una classe fornisce la definizione di un ADT parte visibile esternamente (public) implementazione dati privati, protetti, o visibili nel package metodi privati,
Concetti principali Ereditarietà e (overriding) di metodi. Ereditarietà e costruttori Livelli di accesso protected e package La classe Object
Ereditarietà Concetti principali Ereditarietà e (overriding) di metodi Dynamic dispatch e polimorfismo Ereditarietà e costruttori Livelli di accesso protected e package La classe Object metodi tostring,
Informatica Ereditarietà Java. Ereditarietà
Ereditarietà L'ereditarietà consente allo sviluppatore di riutilizzare il codice già scritto creando sottoclassi a partire da classi già definite. La sottoclasse eredita tutti gli attributi e tutti i metodi
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
Programmazione orientata agli oggetti Classi astratte e interfacce. Classi astratte - Interfacce
Programmazione orientata agli oggetti Classi astratte e interfacce 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma solo dichiarati Questi metodi
Corso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA4 B2 Object 1 Prerequisiti Programmazione elementare ad oggetti Ereditarietà Concetto di conversione di tipo (casting) 2 1 Introduzione Lo scopo di questa Unità è quello
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
Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Paradigma OO Oggetti e Classi Metodi Parametri Variabili di istanza Costruttori Esercizi Paradigma Object-Oriented Il paradigma OO
Paradigma a oggetti. Programmazione orientata agli oggetti. Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30
Paradigma a oggetti Programmazione orientata agli oggetti Programmazione orientata agli oggetti Paradigma a oggetti 1 / 30 Programmazione ad oggetti. Si estendono i tipi di dati astratti che permettono:
Programmazione ad oggetti. Paradigma a oggetti. Esempio. Esempio L estensione del tipo di dato comporta la ridefinizione del codice
Programmazione ad oggetti. Paradigma a oggetti Programmazione orientata agli oggetti Si estendono i tipi di dati astratti che permettono: information hiding e incapsulamento nascondo la rappresentazione
Programmazione orientata agli oggetti Classi astratte e interfacce
Programmazione orientata agli oggetti Classi astratte e interfacce Fondamenti di Informatica L-B 1 Classi astratte Java ci consente di definire classi in cui uno o più metodi non sono implementati, ma
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi Programmazione orientata a oggetti 1 Programmazione OO Concetti base: dati istruzioni Dati: variabili tipi Istruzioni: istruzioni base strutture di controllo
Esercitazione n 2. Obiettivi
Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe/array Uguaglianza tra oggetti Utilizzo di classi come componenti
IL TEMA DELLA RIUSABILITÀ
IL TEMA DELLA RIUSABILITÀ Si vuole riusare tutto ciò che può essere riusato (componenti, codice, astrazioni) Non è utile né opportuno modificare codice già funzionante e corretto il cui sviluppo ha richiesto
Ereditarietà: concetti di base
: concetti di base L ereditarietà è uno dei concetti base della programmazione ad oggetti Concetto di base: l ereditarietà permette di usare una classe precedentemente definita per la definizione di una
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
Classi astratte Interfacce
Classi astratte Interfacce Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni 1 Ereditarietà Abbiamo visto come L ereditarietà permette di costruire nuove classi utilizzando
OOP Ereditarietà A. FERRARI
OOP Ereditarietà A. FERRARI ereditarietà l ereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza la nuova classe viene definita esprimendo solamente le differenze che
Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo
Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy
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
Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Paradigma O.O. Oggetti e Classi Ereditarietà Paradigma Object-Oriented Il paradigma O.O. si ispira all ambiente che ci circonda,
Alcuni diagrammi. OCL (Object Constraint Language)
UML e Java UML Alcune discipline ingegneristiche dispongono di validi mezzi di rappresentazione (schemi, diagrammi di prestazioni e consumi,...) Il software non dispone ancora di tecniche efficaci per
Corso di Informatica
Corso di Informatica Modulo T1 B1 Il concetto di classe 1 Prerequisiti Programmazione elementare Conoscenza dell uso delle funzioni Utilizzo della UML 2 1 Introduzione Gli oggetti reali sono una infinità
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/
17 - Classi parzialmente definite: Classi Astratte e Interfacce
17 - 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/
Inizializzare oggetti
Inizializzare oggetti Uso della Classe Software per TLC - AA 2008/2009 1 Costruttori e polimorfismo Uso della Classe Un codice migliore Software per TLC - AA 2008/2009 2 Costruttori ed Ereditarietà Output:
OLTRE LE CLASSI OLTRE LE CLASSI OLTRE LE CLASSI OLTRE LE CLASSI. Alcune domande. Nella sua parte non statica, una classe
Nella sua parte non statica, una classe fornisce la definizione di un ADT parte visibile esternamente (public) implementazione dati privati, protetti, o visibili nel package metodi privati, protetti, o
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
Principi di Progettazione del Software a.a
Principi di Progettazione del Software a.a. 2017-2018 Fondamenti di Java Ing. Obiettivi della lezione Introduzione alla programmazione Object Oriented Ereditarietà Polimorfismo Interfacce Eccezioni 2 1
Ereditarietà (ultima)
Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction...
Ereditarietà (ultima)
Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction
semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente
Liste doppie Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica semplice: doppia: Gli
Programmazione M.A. Alberti. Comunicazione digitale AA 2009/ Classi in Java 1. Le classi in Java. Oggetti. Classi. Classi. Visibilità dei dati
Oggetti Le classi in Java Corso di laurea in Un oggetto è definito dal suo stato - descrive le sue caratteristiche comportamento - quello che può fare Ad esempio: il modello di una moneta Una moneta può
SOMMARIO DIAGRAMMI DELLE CLASSI E DEGLI OGGETTI INGEGNERIA DEL SOFTWARE. Introduzione. Proprietà e Operazioni. Proprietà e Operazioni
SOMMARIO Introduzione Proprietà e Operazioni DIAGRAMMI DELLE CLASSI E DEGLI OGGETTI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica,
Esempio: Costruttori ed ereditarietà
Esempio: 1 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il costruttore di default (quello senza parametri) Se in un costruttore
Richiami su oggetti e OOP
Richiami su oggetti e OOP Un oggetto (object) è una entità caratterizzata da una struttura dati alla quale si associa l insieme delle operazioni che è possibile compiere su di essa. Un oggetto può essere
Ereditarietà e Polimorfismo
Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le
Interfacce. Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato
Interfacce 1 Interfacce Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato costituito dall intestazione senza il corpo della definizione
Ingegneria del Software
Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)
Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I) Ing. Gianluca Caminiti Sommario ( OOP ) Programmazione Object-Oriented Incapsulamento, Ereditarietà, Polimorfismo Richiami
unità di compilazione
Il linguaggio Java Il controllo degli accessi alle classi ed ai membri di una classe Controllo degli accessi Accesso alle classi Accesso alle classi package miopackage; public class A { B b = new B();
Laboratorio di Progettazione di Sistemi Software UML per Design Patterns e Refactoring
TITLE Laboratorio di Progettazione di Sistemi Software UML per Design Patterns e Refactoring Valentina Presutti (A-L) Riccardo Solmi (M-Z) 1 Indice degli argomenti Introduzione alla notazione UML I diagrammi
Programmazione orientata agli oggetti Ereditarietà
Programmazione orientata agli oggetti 1 Dalla programmazione basata su oggetti all OOP La programmazione basata su oggetti (object-based) poggia su due concetti fondamentali: Astrazione: separazione fra
Programmazione ad Oggetti
Programmazione ad Oggetti Analisi e Progettazione OO Origini Le metodologie ad oggetti nascono negli anni 70 ma si affermano solo negli anni 80 grazie alla nascita dei linguaggi di programmazione ad oggetti
Sul pattern Strategy
Sul pattern Strategy 1 Introduzione Si vuole costruire un sistema per la simulazione di uno studio professionale. Il sistema deve consentire di rappresentare differenti tipi di professionisti, che possono
Oggetto software. stati o proprietà (variabili) comportamenti o metodi (funzioni)
Le classi Oggetto software stati o proprietà (variabili) comportamenti o metodi (funzioni) Bicicletta cambia rapporto 24 kmh rallenta accelera 90 ped/min quinto rapporto istanze e membri di classe Nel
Prova d Esame Compito A
Prova d Esame 19.07.2005 Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private int counter;
ALGORITMI E STRUTTURE DATI
Esercitazioni del corso di: ALGORITMI E STRUTTURE DATI Tutor: Francesca Piersigilli email: francesca.piersigilli@unicam.it Strutture dati elementari Tecniche di organizzazione dei dati: scelta della struttura
Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.
Obiettivi Unità B2 Gli oggetti: concetti avanzati Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione Ereditarietà L ereditarietà permette
Classi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura
Classi astratte Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura Rettangolo getarea() Quadrato getarea() getarea() Cerchio
Capitolo 6. Linguaggi di Programmazione. Mauro Giacomini Pearson Addison-Wesley. All rights reserved
Capitolo 6 Linguaggi di Programmazione Mauro Giacomini 2007 Pearson Addison-Wesley. All rights reserved Capitolo 6: Linguaggi di programmazione 6.1 Prospettiva storica 6.2 Concetti della programmazione