2/11/2004Laboratorio di Programmazione - Luca Tesei1 Progettazione Fase di progettazione di unapplicazione Fase di implementazione.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Analisi e progettazione
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità B1 Le basi della programmazione a oggetti.
Unified Modeling Language
Oggetti Java.
Costruttori e Distruttori
Recupero debito quarto anno Primo incontro
Informatica Recupero debito quarto anno Terzo incontro.
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
If a cascata, switch, operatori logici
Linguaggi Regolari e Linguaggi Liberi
12/11/2004Laboratorio di Programmazione - Luca Tesei1 Caratteri – Input da Console Il tipo char Input dallo standard input.
26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.
3/12/2004Laboratorio di Programmazione - Luca Tesei1 Sequenze di lunghezza variabile ArrayList Operazioni Ricerche.
5/11/2004Laboratorio di Programmazione - Luca Tesei1 Esercizi Su Progettazione e Implementazione di classi.
Linguaggi di programmazione
29/10/2004Laboratorio di Programmazione - Luca Tesei1 Metodi e variabili istanza Definizione e chiamata di metodi Uso delle variabili istanza Documentazione.
9/11/2004Laboratorio di Programmazione - Luca Tesei1 Tipi numerici di base - Costanti Interi e decimali Definizione di costanti.
22/10/2004Programmazione e Laboratorio di Programmazione – Luca Tesei1 Laboratorio – Primo Impatto Scrivere un semplice programma I primi concetti.
Programmazione e Laboratorio di Programmazione – Luca Tesei1 La Programmazione Cosè la programmazione? Concetti preliminari.
29/11/2004Laboratorio di Programmazione - Luca Tesei1 Ancora sulla progettazione/Pacchetti Concetti di coesione/accoppiamento/coerenza Uso dei package.
26/11/2004Laboratorio di Programmazione - Luca Tesei1 Input/Output Redirecting, scomposizione dellinput, uso di file.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
29 febbraio 2008 Progettare tipi di dato astratti.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
Gestione dei dati e della conoscenza (agenti intelligenti) M.T. PAZIENZA a.a
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
Basi di dati 2002 EER Vogliamo aumentare lespressività degli Entity Model EER: Entity Model Esteso.
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
L’ingegneria del software
Lo sviluppo del progetto informatico
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
11/11/2004Laboratorio di Programmazione - Luca Tesei1 Operazioni numeriche - Input Espressioni, funzioni matematiche, classi involucro, Acquisizione di.
1Ingegneria Del Software L-A Progetto realizzato da: Luca Iannario, Enrico Baioni, Sara Sabioni. A.A. 2008/2009.
Corso JAVA Lezione n° 11 Istituto Statale di Istruzione Superiore “F. Enriques”
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
I nomi in Java F. Bombi 18 novembre novembre 2003.
15/11/2004Laboratorio di Programmazione - Luca Tesei1 Costrutto condizionale Scelte, blocchi.
Una "vera" classe.. ..un esempio pratico: la calcolatrice
Programmazione ad oggetti
Diagramma delle Classi
10 azioni per lo scheduling su Grid Uno scheduler per Grid deve selezionare le risorse in un ambiente dove non ha il controllo diretto delle risorse locali,
La ricorsione.
30/11/2004Laboratorio di Programmazione - Luca Tesei1 Interfacce e Polimorfismo.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
Problemi, algoritmi e programmazione
Eprogram informatica V anno.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Dal problema al programma – ciclo di sviluppo del software La scrittura del programma è solo una delle fasi del processo di sviluppo di un'applicazione.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Laboratorio di Ingegneria del Software Laboratorio di Ingegneria del Software Primo Incontro Titolare Prof. Pierluigi Sanpietro.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

2/11/2004Laboratorio di Programmazione - Luca Tesei1 Progettazione Fase di progettazione di unapplicazione Fase di implementazione

2/11/2004Laboratorio di Programmazione - Luca Tesei2 Prima di andare avanti Abbiamo appreso i concetti fondamentali di classe/oggetto/metodo Sappiamo scrivere semplici applicazioni Conosciamo i meccanismi di base di funzionamento del linguaggio Java Dora in poi approfondiremo la programmazione intesa in senso classico, ma prima di andare avanti: –Focalizziamo lattenzione sul processo di progettazione

2/11/2004Laboratorio di Programmazione - Luca Tesei3 Progettazione di unapplicazione Finora abbiamo visto semplici applicazioni in cui erano definite, al più, una classe vera e una classe test e che usavano un certo numero di classi definite In generale unapplicazione è composta da più classi che cooperano per realizzare ciò per cui lapplicazione è stata scritta Ma come si decide quali classi definire?

2/11/2004Laboratorio di Programmazione - Luca Tesei4 La programmazione a oggetti Lapproccio della programmazione a oggetti antepone alla programmazione vera e propria una importante fase di modellazione Allinizio si osserva il dominio del discorso (termini tecnici, tipi di documenti, figure professionali, agenti/persone coinvolte,...) dellapplicazione che si intende realizzare e lambiente in cui essa andrà ad operare (azienda, ufficio del magazzino, banca, biblioteca,...)

2/11/2004Laboratorio di Programmazione - Luca Tesei5 Progettazione Lo studio del dominio dellapplicazione ha lo scopo di dare al progettista i mezzi e le conoscenze per scrivere un modello accurato del dominio in questione Nellapproccio attuale si hanno diversi strumenti per modellare diversi aspetti di un dominio di applicazione (statico, funzionale, dinamico,...) Esistono linguaggi e formalismi creati appositamente per esprimere questi modelli

2/11/2004Laboratorio di Programmazione - Luca Tesei6 Ingegneria del software Lingegneria del software è la branca dellinformatica che si occupa di definire metodologie, modelli e tecniche atte alla realizzazione di un buon software Nel corso di ingegneria del software verranno approfonditi gli aspetti cruciali della modellazione e verranno studiati formalismi adeguati (es: UML Unified Modeling Language,...)

2/11/2004Laboratorio di Programmazione - Luca Tesei7 Per ora In questo corso introduttivo alla programmazione basterà accennare ad alcuni aspetti fondamentali Il concetto di classe è uno di questi Abbiamo introdotto intuitivamente il concetto di classe Nella modellazione di un dominio di applicazione le classi sono usate per modellare insiemi di entità

2/11/2004Laboratorio di Programmazione - Luca Tesei8 Entità Una entità nel dominio dellapplicazione rappresenta un oggetto, in senso lato, che può avere diversi attributi, essere in relazione con altre entità e compiere/essere_oggetto_di alcune operazioni A seconda del tipo di applicazione unentità può essere molto concreta, oppure molto astratta: tutto dipende da ciò che si vuole modellare Esempi: automobili, conti bancari, persone, studenti, fatture, libri, schedari, finestre, pulsanti, riunioni, appuntamenti, componenti di un elettrodomestico, funzioni matematiche, matrici, fiori,

2/11/2004Laboratorio di Programmazione - Luca Tesei9 Entità Le entità individuate nel dominio di applicazione nella fase di progettazione diventano gli oggetti di una certa classe nellimplementazione dellapplicazione in un linguaggio orientato agli oggetti La definizione di una classe corrisponde alla formalizzazione delle caratteristiche comuni a certe entità che si sono individuate Gli attributi di queste entità diventano le variabili istanza degli oggetti della classe (ogni entità ha un certo insieme di attributi i cui valori la caratterizzano)

2/11/2004Laboratorio di Programmazione - Luca Tesei10 Operazioni Ogni entità, oltre a un insieme di attributi, può avere la capacità di compiere alcune operazioni o di effettuare dei calcoli e restituire dei risultati Queste caratteristiche sono modellate attraverso i metodi delle classi In questo tipo di modelli ogni tipo di operazione deve essere associata ad un certo tipo di entità, o a un insieme di entità

2/11/2004Laboratorio di Programmazione - Luca Tesei11 Relazioni Le entità sono in genere in relazione le une con le altre Entità dello stesso tipo hanno in genere relazioni dello stesso tipo con altre entità Queste relazione vengono tradotte, nel modello, in relazioni fra classi Esempio: relazioni isa (è un) fra sottoclassi e superclassi (ereditarietà) per avere a disposizione diverse astrazioni delle stesse entità Esempio: relazioni use (usa) fra classi che cooperano per realizzare una certa operazione che coinvolge diverse entità

2/11/2004Laboratorio di Programmazione - Luca Tesei12 Il progetto Usiamo i concetti di classe, oggetto, metodo, variabile istanza che abbiamo visto per definire un modello del dominio dellapplicazione che vogliamo scrivere La prima fase, quella di progettazione, si deve occupare di: –Individuare le classi di entità che servono –Definire linsieme di attributi da tenere in considerazione per le entità di ogni classe –Definire le operazioni associate alle entità o alle classi

2/11/2004Laboratorio di Programmazione - Luca Tesei13 Il modello Quello che deve scaturire dalla progettazione è linterfaccia pubblica delle classi che comporranno lapplicazione Le classi di identità sono le classi Gli attributi sono le variabili istanza Le operazioni sono i metodi da chiamare sugli oggetti o sulle classi (metodi statici che eseguono operazioni associate a tutta una classe più che a un singolo oggetto della classe)

2/11/2004Laboratorio di Programmazione - Luca Tesei14 Implementazione Una volta individuata questa struttura dellapplicazione non resta che iniziare la fase di implementazione: –Scrittura dei metodi –Definizione di classi private e/o uso di classi delle API necessarie allimplementazione –Gestione degli errori –... Ma non si risolve sempre tutto con una sola passata!!!

2/11/2004Laboratorio di Programmazione - Luca Tesei15 Dallimplementazione alla progettazione Spesso, soprattutto per applicazioni di dimensione medio-grande, in fase di implementazione si possono scoprire errori di progettazione: entità non considerate, operazioni mal distribuite, attributi troppo scarni o troppo abbondanti,... In questo caso si deve ritornare indietro a modificare il modello e poi si ritorna ad implementare Questo può accadere più volte se la modellazione non è stata svolta in maniera accurata Accade naturalmente quando si vuole ampliare/modificare lapplicazione

2/11/2004Laboratorio di Programmazione - Luca Tesei16 Esempio Supponiamo che il nostro dominio del discorso sia quello delle automobili Possiamo immaginare diverse applicazioni in questo dominio: –Gestione del parco auto di un concessionario –Archivio della motorizzazione –Programma di supporto ai meccanici per la riparazione –Archivio di unassociazione di appassionati di auto depoca –Documentazione e previsione dei consumi di carburante delle macchine di una comunità

2/11/2004Laboratorio di Programmazione - Luca Tesei17 Quali entità? È facile rendersi conto che ognuna di queste applicazioni convolge diverse entità, alcune in comune con le altre, altre caratteristiche di ognuna Lentità automobile, comunque, dovrà essere individuata sicuramente in ognuna di esse Tuttavia ogni applicazione necessita di considerare attributi di diversa natura, a diversi livelli di dettaglio

2/11/2004Laboratorio di Programmazione - Luca Tesei18 Attributi Larchivio della motorizzazione focalizza lattenzione solo su alcune delle caratteristiche possibili di unautomobile Il programma di assistenza per i meccanici avrà bisogno di una dettagliatissima descrizione tecnica di ogni automobile Il concessionario gestisce anche la storia di auto usate, i prezzi, le ordinazioni....

2/11/2004Laboratorio di Programmazione - Luca Tesei19 Altre entità Oltre alle automobili le diverse applicazioni coinvolgono altre entità caratteristiche del loro contesto Lassociazione gestirà ritrovi, soci, rassegne stampa,... Il programma di supporto per meccanici probabilmente avrà bisogno di apparecchiature, pezzi di ricambio, fasi di smontaggio,

2/11/2004Laboratorio di Programmazione - Luca Tesei20 Esercizio Immaginare altre possibili applicazioni Quali entità si potrebbero individuare? Con quali attributi? Che tipo di operazioni sono caratteristiche di ogni applicazione? Come possono essere associate alle varie entità? Servono delle entità tramite? In che relazione sono le varie entità?

2/11/2004Laboratorio di Programmazione - Luca Tesei21 Esempio: gestione dei consumi Supponiamo di voler scrivere unapplicazione che gestisce i consumi di alcune automobili Dividiamo il lavoro in diverse fasi dalla progettazione allimplementazione Per prima cosa dobbiamo individuare le entità che ci servono e definire quindi le classi

2/11/2004Laboratorio di Programmazione - Luca Tesei22 Fase 1: definizione delle classi Sicuramente avremo una classe Car che rappresenta le automobili Per ognuna, visto lintento dellapplicazione, ci serviranno pochi dati: giusto quelli per identificarla univocamente e sapere a chi appartiene Vista la semplicità dellapplicazione sembrerebbe che non ci sia bisogno di considerare altre classi In ogni caso possiamo sempre aggiungerne

2/11/2004Laboratorio di Programmazione - Luca Tesei23 Fase 1: definizione delle classi Abbiamo visto gli attributi, vediamo le operazioni Per ogni auto vorremmo essere in grado di eseguire le seguenti operazioni: –Aggiungere del carburante –Percorrere una certa distanza –Conoscere quanto carburante è rimasto nel serbatoio

2/11/2004Laboratorio di Programmazione - Luca Tesei24 Fase 2: Assegnamo i nomi ai metodi Definiamo i nomi ai metodi e facciamo degli esempi di applicazione ad un certo oggetto: Car myFiat = new Car(...); /* non sappiamo ancora che tipo di costruttori abbiamo */ myFiat.addGas(20); myFiat.drive(100); myFiat.getGas(); myFiat.getDescription();

2/11/2004Laboratorio di Programmazione - Luca Tesei25 Fase 3: interfaccia pubblica Scriviamo la documentazione per linterfaccia pubblica: /** Unautomobile può percorrere una certa distanza e consumare carburante */ public class Car { /** Aggiunge carburante al amount la quantità in litri */ public void addGas(double amount) { }

2/11/2004Laboratorio di Programmazione - Luca Tesei26 Fase 3: interfaccia pubblica /** Percorre una distanza consumando distance distanza in km */ public void drive(double distance) {} /** Ispeziona la quantità di carburante rimasta nel serbatoio

2/11/2004Laboratorio di Programmazione - Luca Tesei27 Fase 3: interfaccia la quantità rimasta in litri */ public double getGas() { } /** Dà una descrizione una stringa di descrizione */ public String getDescription() {} }

2/11/2004Laboratorio di Programmazione - Luca Tesei28 Fase 4: variabili istanza Chiediamoci quali variabili istanza possono servire affinché ogni oggetto della classe Car possa autonomamente (cioè con il suo stato e con i parametri dei metodi) eseguire tutti i metodi che possono essere chiamati su di lui Innanzitutto, per la descrizione, inseriamo i dati minimi necessari allidentificazione della macchina e del proprietario Inoltre dobbiamo sicuramente tener traccia del carburante presente nel serbatoio

2/11/2004Laboratorio di Programmazione - Luca Tesei29 Fase 4: variabili istanza private String owner; private String registrationNum; private double gas; Ma non basta! Infatti con queste informazioni non riusciamo a prevedere, dopo una certa distanza percorsa, quanto carburante sarà stato consumato Abbiamo bisogno di inserire nello stato linformazione decisiva: i km percorsi per litro

2/11/2004Laboratorio di Programmazione - Luca Tesei30 Fase 4: variabili istanza private double efficiency; Questo numero ci permette di decrementare della giusta quantità il carburante presente nel serbatoio dopo una certa distanza percorsa Carburante consumato = distanza percorsa / efficiency

2/11/2004Laboratorio di Programmazione - Luca Tesei31 Fase 5: identificare i costruttori A volte basta quello di default che mette tutte le variabili istanza ai valori di default Ma in molti casi è bene definire costruttori specifici In questo caso è necessario inizializzare ogni oggetto con i valori per il nome del proprietario, la targa e i km per litro Per il carburante possiamo considerare zero come plausibile valore iniziale visto che il carburante può essere inserito con il metodo apposito Tuttavia possiamo definire un altro costruttore che specifichi anche una quantità di carburante iniziale

2/11/2004Laboratorio di Programmazione - Luca Tesei32 Fase 5: identificare i costruttori /** Costruisce unautomobile con dati descrittivi e efficienza assegnati. Carburante iniziale = anOwner nome del aRegistrationNum numero di anEfficiency km percorsi con un litro di carburante */ public Car(String anOwner, String aRegistrationNum, double anEfficiency) { }

2/11/2004Laboratorio di Programmazione - Luca Tesei33 Fase 5: identificare i costruttori /** Costruisce unautomobile con dati descrittivi, efficienza e carburante iniziale anOwner nome del aRegistrationNum numero di anEfficiency km percorsi con un litro di initialGas litri di carburante iniziale */ public Car(String anOwner, String aRegistrationNum, double anEfficiency, double initialGas) { }

2/11/2004Laboratorio di Programmazione - Luca Tesei34 Fase 6: realizzare i metodi Farlo per esercizio. Cominciare dai più semplici. Se ci si accorge che ci sono problemi si può tornare in una delle fasi precedenti (soprattutto quelle iniziali) e cercare di risolverli Compilare tutto e correggere tutti gli errori di compilazione

2/11/2004Laboratorio di Programmazione - Luca Tesei35 Fase 7: collaudare la classe Scrivere una classe test oppure Caricare la classe su Bluej ed eseguire i test Es: Car paperCar = new Car(Paperino, 313, 20); paperCar.addGas(20); paperCar.drive(100); Double gasLeft = paperCar.getGas(); System.out.println(Rimasti + gasLeft + litri);