© 2008 WS (WebScience srl) – All rights reserved WS Tech workshop Software Construction.

Slides:



Advertisements
Presentazioni simili
Primary Italian Saying How You Are.
Advertisements

Sfogliandomi… Viaggio tra me e me alla scoperta dellaltro… A travel between me and myself discovering the other…
Imperfetto IWBAT say what I used to do or was doing in the past.
Gli espressioni del tempo
Interfacce Java.
A. Oppio, S. Mattia, A. Pandolfi, M. Ghellere ERES Conference 2010 Università Commerciale Luigi Bocconi Milan, june 2010 A Multidimensional and Participatory.
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Una telefonata d’affari.
Each student will be able to ask an adult or stranger: What do you like to do? and What dont you like to …?
Interrogativi Asking and answering questions in italiano.
prompt> java SumAverage
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
TIPOLOGIA DELLE VARIABILI SPERIMENTALI: Variabili nominali Variabili quantali Variabili semi-quantitative Variabili quantitative.
LInnovazione di Prodotto. Lo sviluppo di nuovi prodotti e nuovi servizi: una vecchia sfida per le imprese innovative. [emilio bellini]
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 3 - Functions Outline 3.1Introduction 3.2Program Components in C++ 3.3Math Library Functions 3.4Functions.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
HERES OUR SCHOOL.. 32 years ago this huge palace was built and it was just the beginning; It is becoming larger and larger as a lot of students choose.
National Project – on going results Potenza 7/10 November 06 IT-G2-SIC-066 – Social Enterprise and Local Development.
“Su alcuni problemi nella Teoria dei Linguaggi Formali”
Players: 3 to 10, or teams. Aim of the game: find a name, starting with a specific letter, for each category. You need: internet connection laptop.
SOS, HELP; WE ARE BEING ASSASSINATED S.O.S., AIUTO; CI STANNO UCCIDENDO
Ischia, giugno 2006Riunione Annuale GE 2006 Exploiting the Body Effect to Improve Analog CMOS Circuit Performances *P. Monsurrò, **S. Pennisi, *G.
Firenze – Festival della Creatività 2009 Comm.it s.r.l. – Ing. Davide Rogai, Ph.D. – Software >> eyelander tracking semplice con il tuo cellulare.
You will see a very spectacular picture ? Vuoi vedere una roccia spettacolare ?
CANZONI, POESIE, FILASTROCCHE
Project Review Novembrer 17th, Project Review Agenda: Project goals User stories – use cases – scenarios Project plan summary Status as of November.
Giovedì 17 Aprile 2008 Heroes {Community} Launch Giovedì 17 Aprile 2008.
Architettura software La scelta architetturale: MVA (Model – View – Adapter/Control) The view is completely decoupled from the model such that view and.
Water is life - Water, our lives
If all the Thomas DVDs are this
Istruzione, Tirocinio e Lavoro
BY: ERIC B. Italian Fashion Project. Italian And American clothing brands are different in many ways In this presentation, I am going to explore the similarities.
ABBA: THANK YOU FOR THE MUSIC
Collection & Generics in Java
PLURALI - with NOUNS PAY ATTENTION TO THE ENDING OF THE NOUN! “O” ---> “I” ex) il quaderno -> i quaderni “A” ---> “E” ex) la matita -> le matite “E” --->
The Beatles. Love, love, Love. Love, Love, Love. Love, Love, Love. There's nothing you can do that can't be done. Nothing you can sing that can't be sung.
Teorie e tecniche della Comunicazione di massa Lezione 7 – 14 maggio 2014.
1 Il rapporto con lo spazio esterno The relationship with outdoor spaces Storken – Trollhattan 24/05/2009 – 06/06/2009 Erica Catelli educatrice Nido d’Infanzia.
IL GIUDIZIO FINALE THE LAST JUDGMENT Quando il Figlio dell’uomo verrà nella sua Gloria con tutti i suoi angeli, si siederà sul trono della sua gloria.
Passato Prossimo. What is it?  Passato Prossimo is a past tense and it is equivalent to our:  “ed” as in she studied  Or “has” + “ed” as in she has.
Italian 1 -- Capitolo 2 -- Strutture
The food Pyramid The breakfast. Food pyramid gives us instructions on how to eat well and stay healthy!!!
Buon giorno Io sono Professoressa Kachmar. Buon giorno Io sono Professoressa Kachmar.
Leonardo da Vinci.
IL CONGIUNTIVO.
PINK FLOYD DOGS You gotta be crazy, you gotta have a real need. You gotta sleep on your toes. And when you're on the street. You gotta be able to pick.
Love, Love, Love. Love, Love, Love. Love, Love, Love. There's nothing you can do that can't be done. Nothing you can sing that can't be sung. Nothing.
( Art. 14 ) 1. Ogni bambino ha diritto all’istruzione senza distinzioni razziali. 1. Every child has the right to be brought up without.
ALL YOU NEED IS LOVE Love, Love, Love. There's nothing you can do that can't be done. Nothing you can sing that can't be sung. Nothing you can say but.
Mobilità tra i Paesi del Programma KA103 A.A. 2014/2015 (KA103) Mobility Tool+ e il Rapporto Finale Claudia Peritore Roma luglio 2015.
L A R OUTINE D EL M ATTINO Ellie B.. Io mi sono svegliata alle cinque del mattino.
Passato prossimo dei verbi riflessivi con Essere
E’ DIO It s God I Quando senti il desiderio di usare una cortesia a qualcuno che ami When you feel the urge to compliment someone.
AffermativeNegativeInterrogative Subject + had + participeSubject + had not (hadn’t) + participe Had or hadn’t + subject + participe.
Buon giorno, ragazzi oggi è il quattro aprile duemilasedici.
PARTS OF THE BODY LE PARTI DEL CORPO. TODAY WE WILL LEARN: Impariamo: How to introduce yourself Parts of the body (Parti del corpo) To talk about how.
A Tiny Voice Inside Una piccola Voce interiore By Carole Smith Gaetano Lastilla.
What time does the plane leave? At 12:45 1.
Do You Want To Pass Actual Exam in 1 st Attempt?.
WRITING – EXERCISE TYPES
La mia giornata By the end of this unit you will be able to:
SOS, HELP; WE ARE BEING ASSASSINATED
Ingegneria del Software 2
Imparare i pronomi e il verbo essere
HELLOS AND GOODBYES.
SOS, HELP; WE ARE BEING ASSASSINATED
SOS, HELP; WE ARE BEING ASSASSINATED
SOS, HELP; WE ARE BEING ASSASSINATED
Accesso al corpus it. / ing. parola cercata sintagmi preposizioni.
REALIZZARE UN’ANIMAZIONE: Il conto alla rovescia
Transcript della presentazione:

© 2008 WS (WebScience srl) – All rights reserved WS Tech workshop Software Construction

© 2008 WS (WebScience srl) – All rights reserved Indice WS © | 2 La costruzione del software Il design nella costruzione Classi che funzionano Routine di qualità Programmazione difensiva La potenza delle variabili Usare i condizionali Controllare i loop Ottimizzare con giudizio

© 2008 WS (WebScience srl) – All rights reserved Cosa è la costruzione del software WS © | 3

© 2008 WS (WebScience srl) – All rights reserved Cosa è la costruzione del software WS © | 4 Definizione problema e dominio Definizione architettura Analisi e specifica requisiti Design Test di unità Test funzionali Test di integrazione Integrazione Manutenzione Scrittura codice Debugging Refactoring

© 2008 WS (WebScience srl) – All rights reserved Cosa è la costruzione del software WS © | 5 Definizione problema e dominio Definizione architettura Analisi e specifica requisiti Design Test di unità Test funzionali Test di integrazione Integrazione Manutenzione Scrittura codice Debugging Refactoring

© 2008 WS (WebScience srl) – All rights reserved Perchè è importante Include gran parte dello sviluppo del progetto Permette di aumentare di molto la produttività Il codice è l'unica fonte certa di documentazione E' l'unica attività che verrà svolta sicuramente WS © | 6

© 2008 WS (WebScience srl) – All rights reserved Perchè è importante Good code is its own best documentation. As you're about to add a comment, ask yourself, "How can I improve the code so that this comment isn't needed?" ~ Steve McConnell WS © | 7 int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\ o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}

© 2008 WS (WebScience srl) – All rights reserved Perchè è importante Any fool can write code that a computer can understand. Good programmers write code that humans can understand ~ Martin Fowler WS © | 8.model tiny.code org 100h mov dx,al mov ah,9 int 21h xor ah,ah int 16h mov bl,al mov dl,al mov ah,02h int 21h

© 2008 WS (WebScience srl) – All rights reserved Perchè è importante WS © | 9 Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live ~ Martin Golding

© 2008 WS (WebScience srl) – All rights reserved Il design nella costruzione del software WS © | 10

© 2008 WS (WebScience srl) – All rights reserved Gestire la complessità WS © | 11 Entia non sunt multiplicanda praeter necessitatem ~ William of Ockham

© 2008 WS (WebScience srl) – All rights reserved Gestire la complessità WS © | 12 Minimizzare la complessità accidentale Minimizzare la quantità di complessità essenziale

© 2008 WS (WebScience srl) – All rights reserved Astrazioni consistenti WS © | 13

© 2008 WS (WebScience srl) – All rights reserved Incapsulare i dettagli WS © | 14

© 2008 WS (WebScience srl) – All rights reserved Ereditare le proprietà WS © | 15

© 2008 WS (WebScience srl) – All rights reserved Nascondere i segreti WS © | 16

© 2008 WS (WebScience srl) – All rights reserved Anticipare i cambiamenti WS © | 17

© 2008 WS (WebScience srl) – All rights reserved Accoppiamento debole WS © | 18

© 2008 WS (WebScience srl) – All rights reserved Design pattern WS © | 19

© 2008 WS (WebScience srl) – All rights reserved Classi che funzionano WS © | 20

© 2008 WS (WebScience srl) – All rights reserved Mantenere una buona astrazione WS © | 21 public interface ArchivioDipendenti { void aggiungiDipendente(Dipendente dipendente); void rimuoviDipendente(Dipendente dipendente); Dipendente primoElemento(); Dipendente prossimoElemento(); ReportDipendenti creaReport(); void inizializzaDatiStipendi(); long calcolaStipendio(Dipendente dipendente); }

© 2008 WS (WebScience srl) – All rights reserved Mantenere una buona astrazione Unica astrazione derivata dal dominio Un solo livello di astrazione Le informazioni scollegate restano all'esterno L'interfaccia è più programmatica che semantica WS © | 22

© 2008 WS (WebScience srl) – All rights reserved Mantenere un buon incapsulamento WS © | 23 public class Dipendente { protected String nome; protected String cognome; protected Date nascita; public Dipendente(String nome, String cognome, ListaDate date) { init();... nascita = listaDate.getDettaglio(nome,cognome).getData(); } public void init() {... }

© 2008 WS (WebScience srl) – All rights reserved Mantenere un buon incapsulamento WS © | 24 Livello di accesso minimo L'interfaccia non espone dettagli implementativi Nessuna assunzione sull'utilizzo dell'interfaccia Riduzione della collaborazione con altre classi al minimo

© 2008 WS (WebScience srl) – All rights reserved Preferire la composizione all'ereditarietà WS © | 25 public class CountingHashSet extends HashSet { private int addCount; public boolean add(E e) { addCount++; return super.add(e); } public boolean addAll(Collection c) { addCount+=c.size(); return super.addAll(c); } public int getAddCount() { return addCount; }

© 2008 WS (WebScience srl) – All rights reserved Preferire la composizione all'ereditarietà WS © | 26 La forma principale di associazione è has-a Al massimo 7 membri Ereditarietà solo per associazioni is-a naturali Progettare per l'ereditarietà oppure proibirla Preferire il polimorfismo al controllo del tipo

© 2008 WS (WebScience srl) – All rights reserved Routine di qualità WS © | 27

© 2008 WS (WebScience srl) – All rights reserved Coesione funzionale WS © | 28 public void calc(DatoTab tab, Color col, int col1, int col2, String dbAdr, String st) { int i; for (i = 0;i<100;i++) { tab.getSomma().cont[i] = ++i; } modDB(tab, dbAdr); if (col1 == 1 || col2 == 1) { setColor(col); } else { setColor(Color.RED); st = n/a; }

© 2008 WS (WebScience srl) – All rights reserved Coesione funzionale WS © | 29 Esegue un singolo compito Le istruzioni contenute sono tutte collegate Il nome esprime tutto e solo ciò che la routine fa Naming convention consistente

© 2008 WS (WebScience srl) – All rights reserved Usare al meglio i parametri WS © | 30 public long getTotale(int inCol, int colSum1, int colSum3, int colSum2, int colSum4, int colMol, int ColAdd, int colExp) { inCol = colMol * colSum4 + colSum2; if (inCol == 10) { inCol = 1; } else { inCol = colSum3^colExp; } return inCol; }

© 2008 WS (WebScience srl) – All rights reserved Usare al meglio i parametri WS © | 31 Ordine chiaro e consistente Nessun effetto collaterale Non sfruttare i parametri come variabili di lavoro locali Al massimo 5 parametri La granularità dei parametri rispetta il livello di astrazione

© 2008 WS (WebScience srl) – All rights reserved Programmazione difensiva WS © | 32

© 2008 WS (WebScience srl) – All rights reserved Validazione e asserzioni WS © | 33 public class Calcolatore { public calcola(Operatore operatore, int op1, int op2) { assert (++op1>=0 && ++op2>=0); switch (operatore) { case molt: moltiplica(op1, op2); case div: dividi(op1, op2); } private int dividi(int numeratore, int denominatore) { return numeratore/denominatore; }... }

© 2008 WS (WebScience srl) – All rights reserved Validazione e asserzioni WS © | 34 Validazione di tutti i dati in ingresso Asserzioni per le condizioni impossibili Asserzioni per precondizioni e postcondizioni Un'asserzione non esegue codice e non gestisce errori

© 2008 WS (WebScience srl) – All rights reserved Gestire le eccezioni WS © | 35 public class Dipendente { private String codiceFiscale; private String nome; public Dipendente(String codiceFiscale) throws SQLExecption nome = leggiDipendenteDB(codiceFiscale); } public void setNome(String nome){ try{ scriviDipendenteDB(codiceFiscale, nome); } catch (SQLException sqlException){ //Non si verifica mai }... }

© 2008 WS (WebScience srl) – All rights reserved Gestire le eccezioni WS © | 36 Solo per situazioni davvero eccezionali Consistenti con il livello di astrazione Non ignorarle mai Approccio standard

© 2008 WS (WebScience srl) – All rights reserved La potenza delle variabili WS © | 37

© 2008 WS (WebScience srl) – All rights reserved Come e dove WS © | 38 private int somma; public void conta() { somma = 10; int totale; int parziale; boolean fatto;... // codice che usa parziale... // codice che usa totale... // codice che usa fatto }

© 2008 WS (WebScience srl) – All rights reserved Come e dove WS © | 39 Immutabile tutto quello che può esserlo Una variabile per uno singolo scopo Inizializzare le variabili d'istanza nel costruttore Dichiarare le variabili locali vicino al primo utilizzo

© 2008 WS (WebScience srl) – All rights reserved Minimizzare lo scope WS © | 40 private void conta() { 1 totale = 0; 2 parziale = 0; 3 fatto = false; totale = parziale; if (parziale <= totale) {... } 60 while (!fatto) {... }

© 2008 WS (WebScience srl) – All rights reserved Minimizzare lo scope WS © | 41 Limitare lo span Ridurre il tempo di vita Partire dallo scope più restrittivo Raggruppare le istruzioni correlate

© 2008 WS (WebScience srl) – All rights reserved Il potere del nome WS © | 42 public class Dipendente { private String fn; private Date b_d; private boolean stringParsed;... public void stampaDipendente() { if (b_d != null && stringParsed) { Printer.print(this); }... }

© 2008 WS (WebScience srl) – All rights reserved Il potere del nome WS © | 43 Naming convention Descrizione accurata e completa Lunghezza necessaria (media tra 10 e 16 caratteri) Nome relativo al problema non alla soluzione

© 2008 WS (WebScience srl) – All rights reserved Usare i condizionali WS © | 44

© 2008 WS (WebScience srl) – All rights reserved Istruzioni if-then-else WS © | 45 if (stato < 0) ; else { stato = leggiStato(); if (stato == 0) System.out.println(Stato %s,valido); else { stato = calcolaStato(); if (stato != 1) System.out.println(Stato %s,errore); else System.out.println(Stato %s,non errore); System.out.println(Stato %s,calcolato); }

© 2008 WS (WebScience srl) – All rights reserved Istruzioni if-then-else WS © | 46 Il percorso nominale è il primo Nessun ramo vuoto Verificare la necessità dell'else Annidamento massimo di 3 livelli Parentesi, sempre

© 2008 WS (WebScience srl) – All rights reserved Catene if-elseif e istruzioni case WS © | 47 if (input.equals(#) || || input.equals(=)) { tipo = SPECIALE; } else if (input.equals(,) || input.equals(;) || input.equals(.)) { tipo = PUNTEGGIATURA; } else if (input.equals(+) || input.equals(-) || input.equals(*) || input.equals(/)) { tipo = OPERATORE; } else if ((input.compareTo(a)>0 && input.compareTo(z) 0 && input.compareTo(Z)<0) { tipo = LETTERA; }

© 2008 WS (WebScience srl) – All rights reserved Catene if-elseif e istruzioni case WS © | 48 Casi ordinati per frequenza Azioni semplici per ogni caso Guard condition e funzioni booleane

© 2008 WS (WebScience srl) – All rights reserved Controllare i loop WS © | 49

© 2008 WS (WebScience srl) – All rights reserved Scegliere quale loop WS © | 50 Numero cicli non noto while Numero cicli noto for Iterazione su collezioni each/foreach

© 2008 WS (WebScience srl) – All rights reserved Entrare ed uscire da un loop WS © | 51 int i = 0; int stato = -1;... // codice che usa i... for (i = 0; i < 100; i++) {... if (stato >= 0) { i = 100; }... } stato = i;

© 2008 WS (WebScience srl) – All rights reserved Entrare in un loop WS © | 52 Il punto di ingresso è unico Inizializzazione prima del loop Parentesi, sempre

© 2008 WS (WebScience srl) – All rights reserved All'interno di un loop WS © | 53 Un loop svolge un singolo compito Aggiornare i contatori in un punto solo Non usare loop vuoti Annidamento massimo di 3 livelli

© 2008 WS (WebScience srl) – All rights reserved Uscire da un loop WS © | 54 Deve terminare Non forzare l'uscita modificando il contatore Non utilizzare il contatore per altri scopi break e continue ma con cautela

© 2008 WS (WebScience srl) – All rights reserved Ottimizzare con giudizio WS © | 55

© 2008 WS (WebScience srl) – All rights reserved Ottimizzare con giudizio WS © | 56 We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. ~ Donald E. Knuth We follow two rules in the matter of optimization: Rule 1. Don't do it. Rule 2 (for experts only). Don't do it yet - that is, not until you have a perfecly clear and unoptimized solution. ~ M.A. Jackson

© 2008 WS (WebScience srl) – All rights reserved Ottimizzare con giudizio WS © | 57 Scrivere codice di qualità piuttosto che codice veloce Ottimizzare solo dopo aver riscontrato problemi di performance Misurare prima e dopo ogni passo di ottimizzazione

© 2008 WS (WebScience srl) – All rights reserved Domande WS © | 58

© 2008 WS (WebScience srl) – All rights reserved Riferimenti WS © | 59 Code Complete 2 nd Edition Steve McConnell Refactoring Martin Fowler Effective Java 2 nd Edition Joshua Bloch

© 2008 WS (WebScience srl) – All rights reserved Valutazione WS © | 60