Lezione 1 - Relazioni tra classi

Размер: px
Начинать показ со страницы:

Download "Lezione 1 - Relazioni tra classi"

Транскрипт

1 Lezione 1 - Relazioni tra classi Corso Programmazione Linguaggi di programmazione Relazioni tra oggetti Marco Anisetti [email protected] web: Università degli Studi di Milano Dipartimento di informatica

2 Relazioni tra classi Concetti o classi diverse possono essere tra loro collegati: Il motore è parte di un'automobile Una persona è figlia di due genitori Un veicolo è guidato da un autista Si possono rappresentano tali legami attraverso linee che connettono le classi Queste linee non sono messaggi tra oggetti ma relazioni tra oggetti

3 Ruoli e molteplicità Ogni classe svolge un ruolo specifico in una relazione Lo si esprime dando un nome alle estremità della linea Ogni ruolo può essere associato ad una cardinalità 0..1: zero o uno N: un numero specifico ( 1, 2, ) *: qualunque numero (oppure 0..*) 1..*: uno o più oggetti

4 Relazioni multiple Possono esistere più relazioni che uniscono tra loro delle classi Possono esserci relazioni in retroazione

5 Associazione e relazione La relazione di associazione è una relazione di uso Diciamo che una classe A utilizza una classe B se un oggetto della classe A è in grado di inviare dei messaggi ad un oggetto di classe B oppure se un oggetto di classe A può creare, ricevere o restituire oggetti di classe B.

6 Appartenenza Oggetti complessi sono composti da parti più semplici che sono esse stesse degli oggetti Le funzionalità dell'oggetto composto sono il risultato della composizione delle funzionalità dei singoli elementi Un'automobile contiene un motore, il cambio, quattro ruote Il ciclo di vita dell'oggetto composto può coincidere o meno con quello dei componenti: Nel primo caso si parla di composizione (stretta) Nel secondo, di aggregazione (lasca)

7 Aggregazione Le singole parti possono esistere indipendentemente dall'oggetto composto Una singola parte può essere aggregata a più oggetti composti Si indica con una linea e un rombo bianco

8 Composizione Le parti cessano di esistere quando l'oggetto composto cessa di esistere La costruzione/distruzione dell'oggetto composto comporta la costruzione/distruzione dei componenti Un'entità può far parte di un solo composto Si indica con una linea e un rombo nero

9 Esempio

10 Associazione Aggregazione Composizione

11 Conclusioni Abbiamo visto come possono essere messe in relazione delle classi Esiste una relazione interessante che non abbiamo ancora introdotto Specializzazione: si basa sul concetto di ereditarietà Un oggetto di classe A deriva da un oggetto di classe B se A è in grado di compiere tutte le azioni che l'oggetto B è in grado di compiere Esempio: masterizzatore - lettore CD

12 Lezione 2 - Ereditarietà Corso Programmazione Linguaggi di programmazione Relazioni tra oggetti Marco Anisetti [email protected] web: Università degli Studi di Milano Dipartimento di informatica

13 Gerarchie concettuali(1) Alcune classi modellano concetti generali che comprendono insiemi di concetti più specifici Le caratteristiche (stato e comportamento) dei concetti più generici sono condivise dai concetti più specifici

14 Gerarchie concettuali(2) La relazione è più specifico di (specializzazione) riveste un ruolo particolare nei linguaggi ad oggetti: Ereditarietà La classe più specifica eredita attributi, metodi, aggregazioni e altre relazioni da quella più generica A questi, si affiancano attributi, metodi, aggregazioni e relazioni propri della sotto-classe stessa La sotto-classe può ridefinire il comportamento legato ai metodi ereditati per renderli specifici Polimorfismo: si ridefinisce un metodo mantenendone intatta la definizione (numero e tipo dei parametri, tipo ritornato)

15 Polimorfismo Nella programmazione ad oggetti si chiama polimorfismo per inclusione Una espressione il cui tipo sia descritto da una classe A può assumere valori di un qualunque tipo descritto da una classe B sottoclasse di A Potente ma anche potenzialmente dannoso In alcuni casi, si vuole impedire esplicitamente l'utilizzo della tecnica del polimorfismo Esempio: per motivi di sicurezza o per garantire il mantenimento di una data proprietà del sistema Si possono usare dei modificatori di visibilità per farlo In altri casi si vuole obbligare l'utilizzo del polimorfismo Si introducono metodi (astratti) privi di implementazione Una classe che contiene metodi astratti Deve essere, a sua volta astratta Non può essere istanziata direttamente Occorre definire una sottoclasse che fornisca l'implementazione dei metodi mancanti

16 Classi astratte e interfacce A seconda del linguaggio di programmazione una classe astratta può contenere metodi non astratti Per il beneficio delle proprie sottoclassi Se si vogliono definire metodi astratti senza vincolare la gerarchia di ereditarietà si utilizzano le interfacce Insiemi di metodi astratti e costanti Pubblici per definizione Una classe può implementare un'interfaccia Fornendo il codice relativo a tutti i metodi dichiarati nell'interfaccia

17 Interfacce e tipi L'interfaccia approssima bene il concetto di tipo di dato astratto Un oggetto approssima bene il concetto di struttura dati Analogamente alle classi, ogni interfaccia definisce un tipo Un oggetto che implementa una data interfaccia ha come tipo anche il tipo dell'interfaccia Un oggetto può implementare molte interfacce Di conseguenza può avere molti tipi

18 Riusare il software A volte si incontrano classi con funzionalità simili Concetti semanticamente simili Una mountain bike assomiglia ad una bicicletta tradizionale È possibile creare classi disgiunte replicando le porzione di stato/comportamento condivise L'approccio Taglia&Incolla, però, non è una strategia vincente Difficoltà di manutenzione correttiva e perfettiva Meglio specializzare codice funzionante Sostituendo il minimo necessario

19 Ereditarietà Meccanismo per definire una nuova classe (classe derivata) come specializzazione di un'altra (classe base) La classe base modella un concetto generico La classe derivata modella un concetto più specifico La classe derivata: Dispone di tutte le funzionalità (attributi e metodi) di quella base Può aggiungere funzionalità proprie Può ridefinirne il funzionamento di metodi esistenti (polimorfismo) Ereditarietà come processo di specializzazione o fattorizzazione Il concetto generale viene fattorizzato in classi che in seguito vengono specializzate attraverso sottoclassi che contengono concetti più specifici

20 Esempio

21 Principio di sostituibilità di Liskov Sottoinsieme non significa generalmente sottoclasse Sottoclasse = sottotipo B sottotipo di A sse per ogni programma che usa oggetti di classe A, posso usare al loro posto oggetti di classe B senza modificare comportamento logico Una sottoclasse non può restringere il comportamento delle classi genitrici

22 Ereditarietà di interfaccia e di realizzazione Nell'ereditarietà convivono due concetti: Ereditarietà di interfaccia o subtyping Meccanismo di compatibilità fra tipi Consente il polimorfismo per inclusione Una sottoclasse è un sottotipo compatibile all'indietro con tutti i sottotipi definiti lungo la sua catena ereditaria Ereditarietà di realizzazione o subclassing Meccanismo di riuso del codice. La sottoclasse riusa i metodi delle classi genitrici

23 Astrazione nella progettazione delle classi Il processo di analisi e progettazione del software di solito procede per raffinamenti successivi Spesso capita che le similitudini tra classi non siano colte inizialmente In una fase successiva, si coglie l esigenza/opportunità di introdurre un concetto più generico da cui derivare classi specifiche Processo di astrazione Si introduce la superclasse che astrae il concetto comune condiviso dalle diverse sottoclassi Le sottoclassi vengono spogliate delle funzionalità comuni che migrano nella superclasse

24 Esempio

25 Tipi ed ereditarietà Ogni classe definisce un tipo: Un oggetto, istanza di una sotto-classe, è formalmente compatibile con il tipo della classe base Il contrario non è vero Esempio: Un'automobile è un veicolo, un veicolo non è necessariamente un'automobile La compatibilità diviene effettiva se i metodi ridefiniti nella sotto-classe rispettano la semantica della superclasse L'ereditarietà gode delle proprietà transitiva Un tandem è un veicolo (poiché è una bicicletta, che a sua volta è un veicolo)

26 Vantaggi ereditarietà Evitare la duplicazione di codice Permettere il riuso di funzionalità Semplificare la costruzione di nuove classi Facilitare la manutenzione Garantire la consistenza delle interfacce

27 Lezione 3 - Polimorfismo Corso Programmazione Linguaggi di programmazione Relazioni tra oggetti Marco Anisetti [email protected] web: Università degli Studi di Milano Dipartimento di informatica

28 Monomorfismo Linguaggi di programmazione tradizionali Funzioni con argomenti di un solo tipo int max(int a, int b) { if(a > b) return a; else return b; } double max2(double a, double b) { if(a > b) return a; else return b; }

29 Signature e prototipo La signature è costituita da: I nome del metodo I lista degli argomenti con il relativo tipo Il prototipo costituito da: I tipo del valore restituito dal metodo I nome del metodo I lista degli argomenti con il relativo tipo prototipo = tipo restituito + signature

30 Classificazione Cardelli-Wegner

31 Overloading(1) Ad hoc sono i primi che si son resi disponibili e che poi si son evoluti in quelli universali La stessa funzione o gli stessi operatori Possono essere applicati a tipi diversi Overloading del metodo in OOP metodi con lo stesso nome ma firma diversa (vale anche per funzioni in generale) Overloading degli operatori (posso anche a livello di programmazione ridefinire gli operatori primitivi) double x, y, z; int i, j, k; z = x + y; k = i + j;

32 Overloading(2) La funzione ADD sotto sembra funzionare per vari tipi guardando la sua invocazione In realtà sono due entità distinte dal punto di vista del compilatore In linguaggi in cui i tipi sono definiti dinamicamente la situazione è complessa perchè non può essere decisa a compile time function Add( x, y : Integer ) : Integer begin Add := x + y end function Add( s, t : String ) : String begin Add := Concat( s, t ) end

33 Coercion Gli argomenti di una funzione o di un operatore vengono trasformati implicitamente nel tipo applicabile Non esiste overloading double pot(double, double); double x, y; int n; y = pot(x, n);

34 Parametrico(1) Funzioni e operatori parametrizzati secondo il tipo a cui possono essere applicati Tipico della programmazione generica Permette a funzioni o a tipi di essere scritti genericamente permettendo di gestire i valori indiscriminatamente senza dipendenza dal loro tipo E' un modo per rendere più espressivo un linguaggio mantenendo il controllo statico Funzione polimorfica se può essere valutata o applicata a valori di tipo differente

35 Parametrico(2) Tipo di dato polimorfico se è un tipo generico (esempio una lista di elementi di tipo arbitrario) In OOP si ottiene spesso usando i tipi generics o template template <typename T> T max(t a, T b) { if(a > b) return a; else return b; }

36 Per inclusione Un metodo può essere applicato a tutti gli oggetti inclusi nella classe che lo ammette nella sua interfaccia Si chiama anche Subtyping o polimorfismo dinamico Tipico della programmazione ad oggetti (ereditarietà) Permette ad una metodo di essere scritto in modo da ricevere in ingresso un oggetto di un certo tipo T ma anche di funzionare correttamente se viene passato un sottotipo S di T (principio di Liskov) S<:T

37 Overriding E' una caratterisitca del linguaggio che permette a una sottoclasse di ridefinire una implementazione di un metodo di una sua superclasse Il metodo in overriding deve garantire la stessa signature

38 Lezione 4 - Ereditarietà multipla Corso Programmazione Linguaggi di programmazione Relazioni tra oggetti Marco Anisetti [email protected] web: Università degli Studi di Milano Dipartimento di informatica

39 Classi astratte e interfacce Riprendiamo concetti già visti in precedenza Se si vogliono definire metodi astratti senza vincolare la gerarchia di ereditarietà si utilizzano le interfacce L'interfaccia definisce la forma di una classe attraverso: Insiemi di metodi astratti e costanti (pubblici per definizione) Una classe può implementare un'interfaccia (fornendone il codice) Un'interfaccia definisce un protocollo fra classi Analogamente alle classi, ogni interfaccia definisce un tipo

40 Ereditarietà multipla(1) Quando si eredita da una sola classe si parla di ereditarietà singola Possibilità di ereditare caratteristiche da più classi (ereditarietà multipla) Es: gatto eredita da mammifero e potrebbe ereditare anche da PersonaggioTV Ci sono numerosi vantaggi ma esistono anche svantaggi Problema del diamante Non supportano completamente da tutti i linguaggi

41 Ereditarietà multipla(2) A questo punto si hanno a disposizione degli oggetti con le funzionalità di più padri Benchè questo metodo sia concettualmente semplice, la sua realizzazione pratica presenta delle difficoltà del tipo: Ambiguità sui nomi. Quando le superclassi hanno metodi e/o variabili con lo stesso nome, l'uso di tale nome nella sottoclasse è ambiguo perché non si sa a quale elemento associarlo Esecuzione dei metodi. Il come ed in quale sequenza vengono eseguiti i metodi delle superclassi influenza il comportamento complessivo del programma

42 Ereditarietà multipla nei linguaggi Java e.net: Una classe può ereditare le interfacce da più di una classe base - cioè esporre all'esterno gli stessi metodi delle interfacce delle classi base - ma può ereditare i dati ed i metodi effettivi da una sola classe base. Ruby Ruby, di per sé, non permette l'ereditarietà multipla: ogni classe non può avere più di una superclasse. È possibile però aggirare questo problema, attraverso l'utilizzo dei moduli e il meccanismo del mixin

43 Ereditarietà multipla nei linguaggi Python Python supporta una forma di ereditarietà multipla Viene chiamato un metodo attraverso la regola prima-in-profondità, da-sinistra-a-destra. Perciò, se un attributo non viene trovato nella classe derivata, viene cercato nella prima classe base, poi (ricorsivamente) nelle classi base di quest'ultima e solo se non vi è stato trovato, viene ricercato nella seconda classe base della classe derivata, e così via

44 Ereditarietà multipla nei linguaggi C++ Ereditarietà multipla pura Devo però stare attento a cosa mi riferisco perchè potrei avere più metodi in override. In C++ esiste anche il concetto di metodo virtuale per supportare il polimorfismo class Classe1 { public: void Foo(); }; class Classe2 { public: void Foo(); /*... */ }; class Derivata : Classe1, Classe2 { // Non ridefinisce Foo() };

45 Ereditarietà negli oggetti: visibilità I concetti di ereditarietà permettono di inserire altri modificatori della visibilità di metodi ed attributi In alcuni casi i significati dipendono dal linguaggio Alcuni attributi/metodi che devono essere visibili sono all'interno di una catena di ereditarietà possono essere definiti come Protetti L'ereditarietà permette la visibilità di metodi e attributi delle superclassi o delle classi base che non siano definiti Privati

46 Ereditarietà multipla: vantaggi Due ordini di vantaggi: Fusione di interfacce provenienti da fonti diverse Riuso di codice proveniente da fonti diverse Ereditarietà di interfaccia: Correttezza può essere verificata staticamente Ereditarietà di realizzazione: Problematica: es. stesso metodo realizzato in due classi genitrici distinte

47 Lezione 5 - Rappresentazione e relazioni tra oggetti Corso Programmazione Linguaggi di programmazione Relazioni tra oggetti Marco Anisetti [email protected] web: Università degli Studi di Milano Dipartimento di informatica

48 Il mondo reale è costituito da oggetti Rappresentare gli oggetti Così i programmi scritti con il paradigma ad oggetti sono composti da blocchi di memoria nel calcolatore dove sono rappresentati gli oggetti Data una classe, possono esistere molte istanze Ogni istanza è distinguibile dalle altre Si rappresentano le classi attraverso i diagrammi delle classi Si rappresentano gli oggetti attraverso i diagrammi delle istanze Per ogni oggetto, indicano: Il nome (arbitrario ma univoco) La classe di appartenenza I collegamenti cui partecipano (che devono soddisfare i vincoli sulla molteplicità)

49 Diagramma delle classi Si rappresentano le classi come abbiamo visto indicando membri ed attributi Si indicano le relazioni tra le classi Si indica la molteplicità delle relazioni Si indicano molte altre cose che vedrete in dettaglio in corsi specializzati

50 Diagramma delle istanze

51 Interazione Un oggetto reagisce a richieste del mondo esterno Eseguendo il codice associato al metodo richiesto (messaggio) La richiesta può comportare l'interazione con altri oggetti La composizione di un numero su un telefono, richiede alla centrale telefonica di instaurare un collegamento con il destinatario Si può interagire solo con chi si conosce Gli oggetti interagenti devono essere connessi da una qualche relazione (evidenziata nei diagrammi di classi o istanze) Si rappresenta questo insieme di interazioni tramite i diagrammi di sequenza Mostrano quali interazioni avvengono tra oggetti e la relativa sequenza temporale

52 Esempio Pensare alla sequenza di passi per far interagire 3 oggetti: telefono chiamante, centrale telefonica e telefono chiamato Definire gli oggetti con attributi, metodi e relazioni (diagramma classi) Descrivere i messaggi che vengono scambiati e la loro temporizzazione (diagramma sequenze)

53 Diagramma delle Sequenze

54 Conclusioni Gli strumenti di rappresentazione delle classi e degli oggetti sono utili per la progettazione Permettono di avere una idea molto chiara di cosa sviluppare Permettono la generazione parzialmente automatica delle classi Definiscono un metamodello implementabile

55 Lezione 6 - Approfondimenti su Classi relazioni e ereditarietà in RAPTOR Corso Programmazione Linguaggi di programmazione Relazioni tra oggetti Marco Anisetti [email protected] web: Università degli Studi di Milano Dipartimento di informatica

56 Associazioni(1) Relazioni tra oggetti: Associazioni, sottotipi(ereditarietà) Ereditarietà ridefinisce grazie a overriding e polimorfismo (a volte obbligato dalla definizione astratta ereditata) Associazioni si concretizzano diversamente Se esiste un collegamento tra due oggetti allora deve esistere una associazione tra le loro classi Il collegamento nel diagramma degli oggetti è l'instanziazione di una associazione nel diagramma delle classi

57 Associazioni(2) Relazione tra associazione e attributi di classi Esempio: associazione tra abitazione e indirizzo, può voler dire che la classe abitazione ha un attributo di classe indirizzo In altri casi è meno chiaro dove posizionare un attributo Esempio: Persona e Società sono due oggetti legati dall'associazione stipendio ovvero una persona prende uno stipendio da una società Lo stipendio è un campo di quale classe? Una classe che definisce l'associazione, la classe posizione lavorativa Si chiamano classi associazione

58 Aggregazione e Composizione Speciali forme di aggregazione L' aggregato è dato da parti che possono esistere indipendentemente Il composto è responsabile di tutte le sue parti, quindi è responsabile della loro creazione e distruzione Come si implementano nel concreto? vediamo degli esempi in Raptor

59 Costruzione di un oggetto Abbiamo visto che esiste una istruzione che crea l'oggetto data la classe Le operazioni che questa istruzione compie sono legate ad un metodo specifico della classe che si chiama costruttore Il costruttore è definito come gli altri metodi ma ha come nome lo stesso della classe (solitamente) Possono esistere più costruttori con parametri differenti a seconda di come si vuole inizializzare un oggetto Può esistere anche un distruttore che libera la memoria usata dall'oggetto

60 Si tratta di definizioni astratte di metodi e costanti Interfacce Servono per esporre messaggi standardizzati (specifiche di una funzionalità) implementabili da classi differenti non in relazione di ereditarietà Serve spesso per realizzare ereditarietà multipla senza ereditare i corpi di metodi Definire le interfacce significa definire i contratti, non si creano interdipendenze tra le entità Esempio: Interfaccia Confrontabile definisce un metodo per confrontare due entità. Le classi che implementano l'interfaccia Confrontabile possono essere tra loro comparati. Esempio: Interfaccia Attivazione definisce due metodi attiva e disattiva che possono essere implementati ad esempio dalla classe Sensore o Allarme

61 Ereditarietà Ereditarietà è una relazione di sottotipo che permette il riuso di codice Per sapere esattamente a cosa riferirsi in una catena di ereditarietà non si ha un nome (non sempre) ma si usa un riferimento Il riferimento è il puntatore this In alcuni casi ha senso riferirsi direttamente alla classe genitrice usando il riferimento super

62 RAPTOR ad oggetti Raptor permette di progettare classi e metterle in relazione tra loro Gli oggetti creati possono poi essere utilizzati nei flow chart Abbiamo visto alcuni approfondimenti sui concetti dell'unità didattica

Ereditarietà e Polimorfismo

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

Подробнее

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) 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

Подробнее

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

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),

Подробнее

La classe java.lang.object

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

Подробнее

Esempio 2: Subtyping

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

Подробнее

Object-Oriented Programming

Object-Oriented Programming Object-Oriented Programming Una metodologia di programmazione che consente di modellare la realtà in modo più naturale e vicino all uomo Concetti fondamentali Oggetto Incapsulazione Messaggio Classe Ereditarietà

Подробнее

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1. OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro [email protected] Programmazione,

Подробнее

Ingegneria del Software

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

Подробнее

Programmazione ad Oggetti

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

Подробнее

Programmazione ad oggetti

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.

Подробнее

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo Ereditarietà & Polimorfismo Ereditarietà Meccanismo per definire una nuova classe (classe derivata) come specializzazione di un altra (classe base) La classe base modella un concetto generico La classe

Подробнее

18 - Classi parzialmente definite: Classi Astratte e Interfacce

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/

Подробнее

Introduzione alla programmazione Object Oriented. Luca Lista

Introduzione alla programmazione Object Oriented. Luca Lista Introduzione alla programmazione Object Oriented Luca Lista Concetti base del software OO Classi e oggetti Incapsulamento Relazione di ereditarietà Polimorfismo Cos è un Oggetto? Definizione da vocabolario:

Подробнее

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

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

Подробнее

Il modello Entità/Relazioni (ER)

Il modello Entità/Relazioni (ER) Il modello Entità/Relazioni (ER) Basi di dati 1 Il modello Entità/Relazioni (ER) Angelo Montanari Dipartimento di Matematica e Informatica Università di Udine Il modello Entità/Relazioni (ER) Basi di dati

Подробнее

Programmazione orientata agli oggetti Classi astratte e interfacce

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

Подробнее

SOMMARIO DIAGRAMMI DELLE CLASSI E DEGLI OGGETTI INGEGNERIA DEL SOFTWARE. Introduzione. Proprietà e Operazioni. Proprietà e Operazioni

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,

Подробнее

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Подробнее

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Подробнее

Definizione di classi. Walter Didimo

Definizione di classi. Walter Didimo Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti

Подробнее

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

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

Подробнее

Programmazione Orientata agli Oggetti

Programmazione Orientata agli Oggetti Programmazione Orientata agli Oggetti Lezione 13 La programmazione ad oggetti si basa su due principi fondamentali ereditarietà polimorfismo Queste due proprietà consentono di definire nuovi tipi di dato

Подробнее

Gerarchia di Generalizzazione. Esempio. Rappresentazione grafica. Cap. 4 - Modello E/R avanzato: Gerarchie di Generalizzazione/ specializzazione

Gerarchia di Generalizzazione. Esempio. Rappresentazione grafica. Cap. 4 - Modello E/R avanzato: Gerarchie di Generalizzazione/ specializzazione Gerarchia di Generalizzazione 22 Cap. 4 - Modello E/R avanzato: Gerarchie di Generalizzazione/ specializzazione Concetti Definizioni Esempi Mette in relazione (legami logici) una o più entità, E 2,...,

Подробнее

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

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Подробнее

Proprietà delle Classi e degli Oggetti in Java

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

Подробнее

Programmazione con Java

Programmazione con Java Programmazione con Java Astrazioni e UML Astrazioni Nella vita reale siamo abituati a osservare e descrivere oggetti a vari livelli di dettaglio Dai da mangiare a Fido Porta a passeggio il cane Di quale

Подробнее

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi:

SQL e linguaggi di programmazione. Cursori. Cursori. L interazione con l ambiente SQL può avvenire in 3 modi: SQL e linguaggi di programmazione L interazione con l ambiente SQL può avvenire in 3 modi: in modo interattivo col server attraverso interfacce o linguaggi ad hoc legati a particolari DBMS attraverso i

Подробнее

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

Programmazione a Oggetti Lezione 7. Il linguaggio Java: aspetti generali Programmazione a Oggetti Lezione 7 Il linguaggio Java: aspetti generali Sommario Obiettivi di JAVA Portabilità: produrre codice eseguibile su più piattaforme (JVM) Affidabilità: Evitare il più possibile

Подробнее

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

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Подробнее

Programmazione a oggetti

Programmazione a oggetti Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi [email protected] Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software

Подробнее

Alcuni diagrammi. OCL (Object Constraint Language)

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

Подробнее

Introduzione alla programmazione

Introduzione alla programmazione Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste

Подробнее

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Подробнее

Modularizzazione del software

Modularizzazione del software Modularizzazione del software Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica

Подробнее

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe

Подробнее

Laboratorio di programmazione

Laboratorio di programmazione Laboratorio di programmazione Lezione VIII Tatiana Zolo [email protected] 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono

Подробнее

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Подробнее

Unità A2. Progettazione concettuale. Obiettivi. Astrazione. Astrazione per aggregazione

Unità A2. Progettazione concettuale. Obiettivi. Astrazione. Astrazione per aggregazione Obiettivi Unità A2 Progettazione concettuale Imparare ad astrarre i dati per definire entità. Saper distinguere tra astrazione per classificazione, per aggregazione e per generalizzazione. Saper distinguere

Подробнее

Fondamenti di Informatica T-1. Classi e metodi astratti

Fondamenti di Informatica T-1. Classi e metodi astratti Classi e metodi astratti 2 Classi astratte L'ereditarietà è utile per rappresentare tassonomie e gerarchie di entità reali. Non sempre però tutti i livelli della gerarchia rappresentano entità concrete.

Подробнее

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Подробнее

Uguaglianza e copia di oggetti

Uguaglianza e copia di oggetti Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La

Подробнее

OOP in Python L O R E N Z O D I S I L V E S T R O

OOP in Python L O R E N Z O D I S I L V E S T R O L O R E N Z O D I S I L V E S T R O w w w. d m i. u n i c t. i t / ~ d i s i l v e s t r o d i s i l v e s t r o @ d m i. u n i c t. i t Imperativo Paradigmi di programmazione 2 i programmi sono sequenze

Подробнее

Modulo 2: Strutture fondamentali della programmazione Java

Modulo 2: Strutture fondamentali della programmazione Java Modulo 2: Strutture fondamentali della programmazione Java Argomenti Trattati: Un semplice programma Java: Presentazione di un primo Esempio; Introduzione alla struttura; Compilazione ed esecuzione. Argomenti

Подробнее

14 - Metodi e Costruttori

14 - Metodi e Costruttori 14 - Metodi e Costruttori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Подробнее

Esempi in Java di program.ne O-O

Esempi in Java di program.ne O-O Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico

Подробнее

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

Подробнее

La programmazione ad oggetti (OOP)

La programmazione ad oggetti (OOP) Oggetti e Classi (CAP 10) Alberto Garfagnini, Marco Mazzocco Università degli studi di Padova 30 Novembre 2011 La programmazione ad oggetti (OOP) È un approccio concettuale alla programmazione (indipendente

Подробнее

La programmazione ad oggetti: chiamate di metodi. Overloading. This

La programmazione ad oggetti: chiamate di metodi. Overloading. This ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMA SVOLTO A.S. 2015/2016 Classe IV C Informatica Proff. Fabio Ciao / Simone Calugi Libro di testo: Cloud B P.

Подробнее

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++ Informatica 3 Informatica 3 LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1) Modulo 1: Introduzione: oggetti e classi Modulo 2: Link e associazioni Modulo 3: Aggregazione Lezione 7 -

Подробнее

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso Obiettivi Di seguito vengono riportate una serie di domande che possono essere poste durante la prova formale del corso. Le seguenti domande non sono da ritenersi esaustive ma esemplificative. 1. Architettura

Подробнее