Fondamenti di informatica Oggetti e Java Luca Cabibbo Leggibilità Capitolo 7 dicembre 2003 1 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Leggibilità La leggibilità è una qualità del codice sorgente del software facilità della comprensione nella lettura influenza la modificabilità 2 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Stile e convenzioni di codifica Una convenzione di codifica è una indicazione di carattere stilistico da adottare nella scrittura dei programmi ad esempio, far precedere la definizione di una classe da un commento che descrive lo scopo della classe Un insieme di convenzioni di codifica è una guida stilistica completa per la scrittura dei programmi si osservi la distinzione tra linguaggio di programmazione convenzioni di codifica Un buon insieme di convenzioni di codifica aumenta la leggibilità delle classi disciplina e semplifica il lavoro del programmatore favorisce la leggibilità di programmi scritti da persone diverse 3 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Un brutto stile di programmazione /* Applicazione che visualizza una frase sullo schermo. */ class ScrittoreSulloSchermo { public static void main(String[] args) { System.out.println("ciao a tutti"); System. out.println("questo testo introduce"); System.out.println( "i fondamenti dell'informatica");}} 4 è un programma corretto è difficile da comprendere Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Elementi stilistici della programmazione Alcuni importanti elementi di stile sono commenti scelta dei nomi indentazione ordine delle dichiarazioni e delle istruzioni repertorio di istruzioni adottato 5 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Commenti Un commento è una frase che documenta una porzione di codice, illustrandone lo scopo oppure il significato /* Applicazione che visualizza una frase sullo schermo. */ class ScrittoreSulloSchermo { public static void main(String[] args) { System.out.println("ciao a tutti"); System.out.println("questo testo introduce"); System.out.println("i fondamenti dell'informatica"); } } 6 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Tipologie di commenti Commenti documentazione descrivono che cosa si sta facendo Commenti implementazione descrivono come si sta facendo una cosa Commenti asserzione descrivono proprietà valide durante l’esecuzione del codice 7 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Tipologie di commenti /** commento documentazione * Applicazione che calcola e visualizza * la radice quadrata di 144. */ class RadiceQuadrata { public static void main(String[] args) { double radice; // la radice quadrata da calcolare /* calcola la radice quadrata di 144 */ radice = Math.sqrt(144); /* ora radice vale 12 */ commenti System.out.println(radice); implementazione } } commento asserzione 8 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Formato dei commenti Formati per i commenti formato tradizionale formato di linea formato documentazione formato /** documentazione * Applicazione che calcola e visualizza * la radice quadrata di 144. */ formato di linea class RadiceQuadrata { public static void main(String[] args) { double radice; // la radice quadrata da calcolare /* calcola la radice quadrata di 144 */ radice = Math.sqrt(144); /* ora radice vale 12 */ formato tradizionale System.out.println(radice); } } 9 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Scopo dei commenti I commenti hanno lo scopo di fornire una panoramica sul codice descrivere informazioni rilevanti per la comprensione del codice descrivere porzioni di codice altrimenti oscure descrivere proprietà che si assumono verificate durante l’esecuzione del codice I commenti non devono fornire informazioni immediatamente comprensibili dal codice stesso 10 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Che cosa commentare Una classe applicazione preceduta da un commento documentazione che descrive che cosa fa l’applicazione Un metodo preceduto da un commento documentazione che descrive che cosa fa il metodo Un metodo contiene anche i seguenti commenti commenti implementazione che descrivono l’algoritmo implementato dal metodo un commento implementazione per ciascuna variabile eventuali commenti asserzione 11 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Scelta dei nomi I nomi delle classi, dei metodi e delle variabili sono identificatori ad esempio, pippo, grunt, abracadabra, pi555, ScRiTtOrEsUlLoScHeRmO È bene scegliere nomi che siano significativi e autodocumentanti i nomi delle classi e delle variabili sono sostantivi ScrittoreSulloSchermo, radice, somma, contatoreNumeriPositivi i nomi dei metodi sono “frasi verbali” ad esempio, stampa, calcolaSomma si noti l’uso delle maiuscole e delle minuscole 12 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Indentazione Indentare vuol dire evidenziare la relazione di contenimento tra diverse porzioni del codice mediante un opportuno incolonnamento Esempio di programma non indentato /* Applicazione che visualizza una frase sullo schermo. */ class ScrittoreSulloSchermo { public static void main(String[] args) { System.out.println("ciao a tutti"); System.out.println("questo testo introduce"); System.out.println("i fondamenti dell'informatica"); } } 13 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Indentazione e contenimento L’indentazione evidenzia la relazione di contenimento tra le diverse porzioni del codice /* Applicazione che visualizza una frase sullo schermo. */ class ScrittoreSulloSchermo { public static void main(String[] args) { System.out.println("ciao a tutti"); System.out.println("questo testo introduce"); System.out.println("i fondamenti dell'informatica"); } } 14 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Regole per l’indentazione Un elemento contenuto va scritto con un rientro (una spaziatura) maggiore dell’elemento che lo contiene le principali relazioni di contenimento metodi (costruttori o variabili) entro una classe variabili e istruzioni entro un metodo istruzioni entro un’altra istruzione incrementi di spaziatura di 4 spazi elementi allo stesso livello gerarchico devono essere allineati (a sinistra) allo stesso modo, ovvero, con lo stesso rientro 15 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Parentesi graffe /* Applicazione che calcola e visualizza * la radice quadrata di 144. */ class RadiceQuadrata { public static void main(String[] args) { double radice; radice = Math.sqrt(144); System.out.println(radice); } } 16 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Istruzioni su più righe Le linee di codice non devono superare le dimensioni orizzontali della finestra in cui viene editato e visualizzato la larghezza di una finestra di editing è di solito di 72 caratteri perimetro = Misuratore.distanza(x1, y1, x2, y2) + Misuratore.distanza(x1, y1, x3, y3) + Misuratore.distanza(x2, y2, x3, y3); 17 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Ordine delle istruzioni e delle dichiarazioni In un metodo, le diverse tipologie di istruzioni e dichiarazioni possono apparire in ordine qualsiasi con alcuni vincoli semantici Convenzioni di codifica ciascuna linea di codice contiene una sola istruzione semplice o dichiarazione le dichiarazioni di variabili locali sono raggruppate all’inizio di ciascun metodo 18 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl Repertorio di istruzioni Java fornisce un insieme di istruzioni molto ampio l’uso dell’intero repertorio di istruzioni di Java può essere controproducente in pratica Java viene presentato solo in modo parziale (decaffeinato) programmazione strutturata 19 Leggibilità Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies srl