Concetti di Object Orientation

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

“Niente di Nuovo” Mercatino dell’Usato
Traduzione ed Interpretazione
Progettazione dei Sistemi Interattivi (A.A. 2004/05) - Lezione 2 1 Progettazione e Sviluppo di Software ad Oggetti 4 OBJECT-ORIENTED ANALYSIS Processo.
Unified Modeling Language
Recupero debito quarto anno Primo incontro
Linguaggi di Programmazione e compilatori
Linguaggi di programmazione
Programmazione II Docente: Francesca Levi
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Metodologie di Programmazione = decomposizione basata su astrazioni
1 Metodologie di Programmazione. 2 Contenuto generale §tecniche per la programmazione orientata ad oggetti (in piccolo) §esemplificate utilizzando il.
Principi di Programmazione Object-Oriented
Principi di Programmazione Object-Oriented
Basi di Dati prof. A. Longheu
4 – Progettazione – Introduzione e Modello E-R
©Carlo Tasso 1999 Object Oriented Programming Slide 1 OO Analysis Vs. OO Design OOA – Object Oriented Analysis. –Specifica COSA, IN QUALE CONTESTO il sistema.
8. Progettazione del Software
Analisi dettagliata e design B. Pernici M.G. Fugini AA
Analisi dettagliata e design B. Pernici. Sommario Analisi dettagliata –Separazione interfaccia, controllo, entita Design –Logical view –Progettazione.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
L.Lista Design P atterns Luca Lista. L.Lista Design Patterns Elementi di software OO riutilizzabile Piccoli insiemi di classi che collaborano implementando.
La Riflessione computazione Elisa Ferrando. Cos è la Riflessione La Riflessione Sistema riflessivo Sistema computazionale.
Primi esempi di interfacce grafiche con Android
Docente: Gabriele Lombardi
© CEFRIEL Ricettario dei principali pattern GoF Docente: Gabriele Lombardi
© CEFRIEL Alcune API di base nel JDK J2SE Docente: Gabriele Lombardi
© CEFRIEL Java: il linguaggio Docente: Gabriele Lombardi
© CEFRIEL Concorrenza (cenni) Docente: Gabriele Lombardi
Progettazione di una base di dati
A.Natali DL Maggio1999 Oggetti Concetti fondamentali.
Introduzione alla modellazione di sistemi interattivi
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Introduzione alla programmazione Object Oriented
ANALYSIS & DESIGN I DESIGN PATTERNS GoF 1. I Design Patterns GoF …un momento importante durante il corso del design!
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 cin>>c8 s.r.l A.A Generalità Uno dei concetti largamente adottati negli ultimi anni dai professionisti del software in fase di sviluppo.
Esercizi Design pattern
Corso di Visual Basic 6.0 OBBIETTIVI
I DATABASE.
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
Diagramma delle Classi
Analisi dettagliata e design
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
L.Lista, V. Innocente Design P atterns Luca Lista, Vincenzo Innocente.
Corso di Laurea in Informatica
UML: Introduzione Corso IS I /03 Gianna Reggio Versione 0.0.
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 4 - Progettazione del software Ernesto Damiani Università degli Studi.
1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.
1 Metodologie di Programmazione §tecniche per la programmazione orientata ad oggetti §esemplificate utilizzando il linguaggio Java §testo di riferimento.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
1 Metodologie di Programmazione §tecniche per la programmazione orientata ad oggetti §esemplificate utilizzando il linguaggio Java §testo di riferimento.
La Programmazione ad Oggetti
Le basi di dati.
UML Unified Modelling Language Linguaggio per la modellazione unificato.
Unità di apprendimento 6
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Due slides sui Design Patterns Luciano Pandola INFN-LNGS Corso INFN su C++, ROOT e Geant4.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Concetti di Object Orientation Docente: Gabriele Lombardi lombardi@dsi.unimi.it © 2010 - CEFRIEL

The present original document was produced by CEFRIEL and the Teacher for the benefit and internal use of this course, and nobody else may claim any right or paternity on it. No right to use the document for any purpose other than the Intended purpose and no right to distribute, disclose, release, furnish or disseminate it or a part of it in any way or form to anyone without the prior express written consent of CEFRIEL and the Teacher. © copyright Cefriel and the Teacher-Milan-Italy-23/06/2008. All rights reserved in accordance with rule of law and international agreements. © 2010 - CEFRIEL

Sommario Paradigmi di programmazione Modelli concettuali SLIDE CONTENUTO Paradigmi di programmazione Precedenti all’OOP e loro limiti, OOP, successivi. Modelli concettuali Domain Driven Design, Separation of Concerns. Modellare la realtà Oggetti e classi, incapsulamento, UML. Riutilizzo del codice Relazioni tra oggetti, pattern GRASP. Modularizzazione Una gerarchia di astrazioni differenti. Metaprogrammazione Quando, come, perché. Esempi Analizziamo un caso reale. © 2010 - CEFRIEL

Paradigmi di programmazione Spaghetti programming: destrutturato, imperativo, (quasi) mai buono; assembly, basic Procedurale: strutturato, imperativo, basato sul “come” e non sul “cosa”, funzione come unità minima; C, Pascal Funzionale: strutturato, dichiarativo (circa), basato sul “cosa” e non sul “come” (circa), orientato alla formalizzazione matematica (mantenendo legami con il procedurale); lisp, scheme Symbolic programming: strutturato, dichiarativo, orientato alla sostituzione di simboli tramite l’applicazione di regole; Mathematica Logical programming: strutturato, dichiarativo, orientato alla manipolazione di sequenti logici con cui effettuare dimostrazione automatica di teoremi (logici di primo e second’ordine); Prolog, Golog Stream programming: strutturato, procedurale (spesso visuale), orientato alla definizione di stream di elaborazione; HP VEE, LabView Object Oriented Programming: strutturato, misto dichiarativo/procedurale, oggetti e classi come concetti chiave; Java, C++ Object Based Programming: strutturato, procedurale, tutto è un oggetto, istanziazione tramite clonazione (prototyping); Python, SmallTalk …e molti altri! © 2010 - CEFRIEL

Paradigmi di programmazione Spaghetti programming: Procedurale: Object Oriented Programming: © 2010 - CEFRIEL

Paradigmi di programmazione OOP vs DDD: Object Oriented Programming: paradigma di programmazione   definisce gli strumenti sintattico/semantici con cui descrivere formalmente la soluzione al problema posto (programma). NON si tratta di una metodologia   NON definisce come affrontare il problema;  NON definisce come identificarne il modello concettuale. Domain Driven Design: metodologia di identificazione del modello   definisce gli strumenti concettuali con cui identificare e descrivere il modello astratto per il problema nel suo dominio; NON si tratta di un paradigma   NON definisce gli strumenti di formalizzazione (linguaggio);  NON definisce quale paradigma utilizzare (indipendente da esso). © 2010 - CEFRIEL

Identificare ciò che appartiene al dominio: Modelli concettuali Identificare ciò che appartiene al dominio: valori: immodificabili, senza identità, senza storia; es.: numeri, stringhe, equazioni (?), … entità: modificabili, con identità, con storia; es.: utenti, carrelli, prenotazioni (?), … servizi: non rappresentano “qualcosa”, ma offrono funzionalità coese, rispecchianti funzionalità del SW; es.: pagamenti, registrazione utenti, … … ma non troppo! un dominio non va rappresentato per quello che è … … ma per quello che rappresenta per l’utente. © 2010 - CEFRIEL

per lo più gli esperti di dominio: noi … Modelli concettuali Definire il modello: Chi lo conosce? per lo più gli esperti di dominio: ma inconsapevolmente, vanno aiutati.. mentre ci aiutano. noi … … a priori no, le conoscenze di base sono fuorvianti. Chi sa(prebbe) rappresentarlo? noi (in teoria): tramite strumenti teorici ed esperienza pratica. gli esperti di dominio … … in genere no.. ma “tentano” comunque di suggerircelo. Parola chiave: collaborazione!!! © 2010 - CEFRIEL

Modelli concettuali Problemi: comprensione tra collaboratori diversi: definire un linguaggio comune (degli esperti): definizione di un “ubiquitous language”. massimizzare la comunicazione (tra opposti): ottimo tramite le dinamiche dominanti di Nash. tempi sempre molto (troppo) stretti: “Serve per ieri!”; trade-off sempre d’obbligo; processo fortemente iterativo; l’ottimo si ottiene per approssimazioni successive. falso problema: tentare di ottenere prematuramente un prodotto finito porta ad un enorme dispendio di tempo ed energie per il suo mantenimento. complessità ingovernabile: intrinseco nell’uomo: possiamo comprendere al massimo 5-8 concetti assieme; gerarchie di astrazioni a granularità differente: es.: composizione di valori e/o entità = aggregati. © 2010 - CEFRIEL

Modellare la realtà Basi teoriche dell’OOP: modellazione della realtà come: classificazione degli oggetti che ne fanno parte; identificazione delle istanze; descrizione della loro “struttura”; descrizione delle loro “capacità”. interazione tramite: messaggi scambiati tra oggetti; concetto di “richiesta/risposta” (al posto del concetto di “chiamata a funzione”). identificazione e specificazione di: relazioni tra le classi di oggetti; contratto di comunicazione (pre., inv. e post.). separazione concettuale tra: interfacce come “punti di accesso/comunicazione”; implementazione delle operazioni. © 2010 - CEFRIEL

Descrizione di una classe di oggetti: Modellare la realtà Descrizione di una classe di oggetti: nome della classe stessa  nel linguaggio di dominio; caratteristiche che identificano le istanze  attributi; capacità comunicative e attive  metodi. Incapsulamento: nascondere la struttura interna: mostrare il comportamento (cosa) e non il funzionamento (come). Polimorfismo: la relazione “è un” nella gerarchia dei tipi; principio di sostituibilità di Liskov. Nome Attributi Metodi © 2010 - CEFRIEL

Modellare la realtà: l’UML Diagramma delle classi: rappresenta la struttura statica del modello: cosa contiene.. con quali relazioni. Colorazione??? © 2010 - CEFRIEL

Modellare la realtà: l’UML Diagramma di sequenza: rappresenta l’evoluzione di un caso d’uso: chi chiama cosa e quando. © 2010 - CEFRIEL

Modellare la realtà: l’UML Diagramma dei casi d’uso: Quali attori interagiscono con il sistema, e come? Quali casi di utilizzo e quali eccezioni interessano? Diagramma dei package: Quali pacchetti esistono e con quali responsabilità? Diagramma di deploy: Il sistema fisico da quali nodi/componenti è formato? Quali sono le relazioni tra componenti SW e HW? Diagramma degli stati: Quali sono le specifiche degli automi a stati finiti? Diagrammi di attività: Quali sono le componenti concorrenti? Qual è l’evoluzione dei thread/processi nel sistema? © 2010 - CEFRIEL

Riutilizzo del codice Metodi: Classi coese: Associazioni: utilizzandoli come procedure (mattoncini riutilizzabili); Classi coese: offrono funzionalità generali e riutilizzabili; Associazioni: permettono di utilizzare funzionalità “esterne”; Ereditarietà: ottenimento “a gratis” ti funzionalità già esistenti; Astrazione: tramite interfacce e polimorfismo; permettono di astrarre maggiormente; Moduli, framework e meta-programmazione: aventi lo scopo di semplificare lo sviluppo di sistemi complessi; Annotazioni: programmazione dichiarativa “immersa” in un paradigma OO. © 2010 - CEFRIEL

minimizzare il numero di dipendenze; Riutilizzo del codice Pattern GRASP: Low copuling (basso accoppiamento): minimizzare il numero di dipendenze; High coesion (alta coesione): Massimizzare la specificità delle features. Regole auree: identificare le sotto-problematiche separate; costruire moduli per risolverle … … in maniera separata dal resto; separare le “capacità” dall’implementazione; NON esagerare con l’astrazione: si finisce per non raggiungere l’obiettivo. © 2010 - CEFRIEL

Modularizzazione Pattern GoF: Creational: singleton, factory method, abstract factory, builder, prototype; Structural: adapter, composite, decorator, facade, … Behavioral: chain of responsibility, command, iterator, observer, state, strategy, template method … Altri pattern: Enterprise (e J2EE); Parallel Programming; Real-time e sfaty-systems programming; … specifici dell’ambito di interesse (dominio). © 2010 - CEFRIEL

Modularizzazione Sistema (distribuito?): Applicazione/Modulo: una o più applicazioni cooperanti. Applicazione/Modulo: SW capace di svolgere azioni di interesse. Framework: strumento generale di descrizione di un dominio; permette di affrontare in maniera più semplice un problema. Pacchetti: insieme di meccanismi cooperanti per la risoluzione di un sotto-problema o di un aspetto del problema affrontato. Meccanismi: classi che interagiscono per affrontare un caso d’uso (?). Aggregati/Servizi: descrivono valori/entità o funzionalità composte. Valori/entità: descrivono “qualcosa” manipolato dal sistema SW. Attributi e metodi: descrivono le caratteristiche del “qualcosa” a cui appartengono. © 2010 - CEFRIEL

Meta-programmazione Scopo: Strumenti: Esempi: costruire nuovi strumenti di programmazione; non (sempre) può modificare la sintassi; deve semplificare sia lo sviluppo che la comprensibilità del SW prodotto. Strumenti: macro e template (a compile-time); Reflection (se disponibile); Linguaggi autodescrittivi (con operatori e altro); Astrazioni (per descrivere concetti e non sintassi). Esempi: stream programming; symbolic manipulation (esempio LINQ?). © 2010 - CEFRIEL

Considerare in particolar modo: Esempio pratico Progettiamo un sistema di gestione di una linea ferroviaria  orari + annunci al pubblico. Considerare in particolar modo: la gestione della persistenza su DB; l’interazione col sistema da parte degli operatori: creazione e battezzo treni; tracking materiale rotabile; imprevisti (motrici rotte, ritardi, incidenti); storico dell’accaduto e logging. BUON LAOVORO (a me compreso!) per una soluzione parziale (da completare per esercizio) si veda Code\00_OOConcepts\Ferrovie. © 2010 - CEFRIEL

Da qui? Il Domain Driven Design (DDD): “Domain Driven Design”, Evans è propedeutico per una buona comprensione; fornisce basi solide per la progettazione; suggerisce una metodologia iterativa di sviluppo; da leggere: “Domain Driven Design”, Evans Design Pattern: permettono di affrontare correttamente le problematiche classiche di progettazione; ne esistono moltissimi specializzati (vedasi EE); “Design Patterns, Elements of Reusable Object-Oriented Software”, Gamma, Helm, Johnson, Vissides © 2010 - CEFRIEL

Addendum di OOP Esempio: invio di una mail. programmazione procedurale: funzioni vengono richiamate per svolgere compiti coesi; insiemi di funzioni formano moduli di libreria (stesso scopo). OOP: le classi fanno le veci degli insiemi di funzioni (moduli); gli oggetti sono dati più le funzionalità di manipolazione; gli oggetti rappresentano entità attive, non più passive. mittente ______ _____ crea_connessione chiudi_connessione invia_dati © 2010 - CEFRIEL

Esempio precedente in esecuzione Oggetti Mittente spedisciMail new Conessione inviaDati Record di attivazione tempo chiudi Messaggi stack © 2010 - CEFRIEL