Esercitazioni di Teoria dei Sistemi Anno Accademico 2007-2008 Prof. Alessandro Raymondi 1 Introduzione all’OOP (I) Linguaggio più vicino all’uomo che al calcolatore Più simile alla realtà che ci circonda OOP come rappresentazione della conoscenza Il problema va analizzato ‘a oggetti’ 2 Introduzione all’OOP (II) Programmazione tradizionale Programma = {riga; riga} Procedure e funzioni Programmazione ad oggetti Programma Metodi Tipi di dati (Int, Char, String…) Costanti Classi Variabili Variabili Oggetti 3 Gli oggetti (I) Dal punto di vista operativo: Cioè una scatola nera che contiene funzionalità, scritte tramite un linguaggio. Contiene una serie di procedure e funzioni che gli competono. 4 Gli oggetti (II) Per poter comunicare con l’oggetto, gli invio un messaggio: messaggio oggetto ricevente 5 Gli oggetti (III) Quando un oggetto riceve un messaggio, l’oggetto dà il via all’esecuzione di un programma, procedura o funzione: 2 6 Gli oggetti (IV) Dal punto di vista strutturale: Oggetto attributo1 attributo2 attributo3 Attributi pubblici: accessibili dall’esterno Attributi privati: accessibili solo dall’interno della classe Attributi protetti: accessibili solo dalla classe e dalle sue sottoclassi 7 Gli oggetti (V) Mettiamo insieme i due punti di vista: Oggetto attributo1 attributo2 attributo3 funzione1() funzione2() funzione3() 8 La dinamica degli oggetti Quando ad un oggetto mando un messaggio viene eseguito un metodo Oggetto attributo1 attributo2 attributo3 funzione1() funzione2() funzione3() Public function1() … End; 9 Il polimorfismo E’ la capacità che hanno oggetti di natura diversa di rispondere in maniera appropriata allo stesso messaggio Es. il metodo print (o write) Stesso messaggio, il metodo è diverso 10 Dall’oggetto alla classe La classe è l’insieme di tutti gli oggetti che hanno la stessa struttura e lo stesso comportamento 2 Integer 34531 11 La gerarchia delle classi Object Array Magnitude Windows Number Float Fraction Integer 12 Ereditarietà e sovrascrizione Ogni classe eredita dalle classi da cui discende tutte le proprietà: attributi e metodi I vantaggi: codice più ordinato, scritto nella classe adatta, risparmio nella scrittura Si può comunque sovrascrivere un metodo ereditato 13 Esempi di classi (I) Frazione numeratore denominatore * + / print() … 14 Esempi di classi (II) Matrice m n celle * + / trasposta() 15 Esempi di classi: ereditarietà (III) Matrice m n celle MatriceQuadrata * + / trasposta() determinante() inversa() … MatriceTriangolare determinante() Se per le matrici triangolari conosco un metodo migliore lo reimplemento 16 Esempi di classi (IV) Biro colore punta stato foglio posizione livello accenditi() spegniti() vai() 17 Analisi degli oggetti: astrazione Dai requisiti alle classi Modalità top/down Dal punto di vista statico: individuare le entità individuare le relazioni individuare gli attributi delle singole classi Dal punto di vista dinamico: individuare le funzionalità Disegno dell’architettura Sviluppo 18 Gestione degli studenti: le entità Studente Esame Corso Facoltà Archivio 19 Gestione degli studenti: le relazioni Facoltà Corso Studente Esame Archivio 20 Gestione degli studenti: alcune classi Facoltà codice descrizione sede corsi Corso Esame codice descrizione docente esercitatore crediti anno corso data_esame esito 21 Gestione degli studenti: la classe studente Studente numero_matricola nome cognome dati_anagrafici facoltà data_iscrizione esami_sostenuti Dati_anagrafici indirizzo località cap provincia stato data_di_nascita stato_civile … 22 Dal punto di vista dinamico Studente numero_matricola … esami_sostenuti iscrizione() sostieneEsame() media() archivia() stampaLibretto() crediti() 23 La logica di sviluppo: a tre livelli I strato - la GUI, cioè l’interfaccia grafica II strato - la logica: le entità che rappresentano la mia problematica III strato – la persistenza, cioè classi che si occupano di ‘archiviare’ gli oggetti che si creano nel mio sistema Sono strati indipendenti: uno comunica solo con quello sottostante. Possono essere sviluppati con tecnologie differenti 24 La gestione di un caseificio Parte gestionale: - gestire l’acquisto del latte dai conferenti e dai fornitori non diretti - controllare l’esubero delle quote - far analizzare il latte in entrata - calcolare la qualità - emettere le fatture per i conferenti 25 La gestione di un caseificio La produzione: - prelevare il latte dal silos - ricetta per produrre il formaggio - produzione con la tracciabilità - fasi esterne: stagionatura - vendita a clienti - fatture clienti 26 La gestione di un caseificio: le entità Latte Conferente Quota Qualità Fornitori Analisi Movimento Fattura 27 La gestione di un caseificio: concetto di prodotto Articolo Latte um__raccolta coefficiente codice descrizione tipo costo prezzo Prodotto ricetta tempo_stagionatura 28 La gestione di un caseificio: concetto di listino Listino codice descrizione tipo_AV prodotto prezzo e poi ogni conferente “ha” un listino ogni cliente “ha” un listino 29 La gestione di un caseificio: concetto di conferente e altri fornitori latte Fornitore Conferente quota numeroCapi codice descrizione datiAnagrafici partitaIVA listino dataInizioAttività dataCessazione FornitoreNonDiretto nazione 30 La gestione di un caseificio: concetto di analisi e di movimento del latte Analisi data conferente laboratorio grasso proteine carica_batterica cellule_somatiche Movimento data conferente prodotto quantità um 31 La gestione di un caseificio: concetto di qualità del latte A seconda dei valori di analisi in un certo periodo il latte può dare origine ad un premio qualità (negativo indica una penale): Qualità periodo conferente media_Grasso media_Proteine media_CaricaBatterica media_CelluleSomatiche premio 32 La gestione di un caseificio: concetto di fattura per il conferente Fattura anno numero data periodo conferente titolo note righe Riga_Fattura riga prodotto quantità um prezzo 33 La gestione di un caseificio: la fatturazione Dato un conferente ed un periodo di calcolo si scorrono i movimenti del periodo indicato si creano tante righe quanti sono i listini nel periodo (ad es. una riga per il latte normale ed una per il latte non idoneo) se nell’anno il totale raccolto supera la quota assegnata, penale per superamento quota se nel periodo ho una qualità, aggiungo in fattura la riga con premio/penale 34 La gestione di un caseificio: la dinamica per la fatturazione del latte Conferente Fattura Riga_Fattura consegnaLatte() esegueAnalisi() acquistaQuota() cessaAttività() Qualità calcola() *calcolaLatte() *calcolaEsubero() *calcolaQualità stampa() importo() numeroRighe() stampa() importo() calcolo() stampa() * sono metodi privati 35 La gestione di un caseificio: le entità per la produzione Latte Prodotto Ricetta Produzione Magazzino Stagionatura Vendita Cliente Fattura in rosso sono indicati i processi 36 La gestione di un caseificio: il concetto di cliente Cliente codice descrizione datiAnagrafici partitaIVA listino Soggetto quindi Fornitore dataInizioAttività dataCessazione codice descrizione datiAnagrafici partitaIVA listino Cliente agente indirizzo_Spedizione 37 La gestione di un caseificio: altre entità Ricetta codice descrizione componenti fasi derivati Magazzino Silos um tipoLatte svuota() codice descrizione stabilimento lotti capacità temperatura carica() scarica() giacenza() prodotti() costo() 38 La gestione di un caseificio: i processi Processo Produzione ricetta quantità silos lotto prelevaLatte() prelevaComponenti() versaDerivati() data_ora_inizio data_ora_fine responsabile stato documento esegui() interrompi() Stagionatura terzista magazzino prodotto quantità lotto Rientro stagionatura lottoTerzista costo 39 La gestione di un caseificio: la dinamica per la produzione Produzione ricetta quantità silos lotto prelevaLatte() prelevaComponenti() versaDerivati() Il processo di produzione muove tutte le entità: nella ricetta trovo i prodotti da movimentare dal magazzino silos prelevo il prodotto latte dai magazzini prodotti prelevo i componenti nei magazzini prodotti verso i derivati in questo momento nasce il lotto 40 La gestione di un caseificio: la vendita Processo Vendita cliente prodotto lotto quantità data_ora_inizio data_ora_fine responsabile stato documento esegui() interrompi() 41 La gestione di un caseificio: la rintracciabilità Devo essere in grado di risalire dal prodotto che invio al cliente al latte che ho usato parto dal prodotto / lotto nella vendita (fattura) cerco tutti il documento di produzione in cui è presente il prodotto / lotto in questione dal processo risalgo alla data/ora di inizio cerco i carichi latte con data e ora inferiore a questa ora di inizio nel carico è indicato il conferente che mi ha dato il latte eventualmente avariato 42