Leggibilità - Dipartimento di Informatica e Automazione
Transcript
Leggibilità - Dipartimento di Informatica e Automazione
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 11 Leggibilità Aprile 2010 Leggibilita’ 1 Prerequisiti Semplici programmi Java Sintassi del linguaggio Leggibilita’ 2 Contenuti Stile e convenzioni di codifica Commenti Scelta dei nomi Indentazione Ordine delle istruzioni e delle dichiarazioni Repertorio di istruzioni Leggibilita’ 3 Obiettivi (competenze da acquisire) Al termine dell’unità didattica lo studente sarà in grado di Scrivere programmi leggibili Leggibilita’ 4 Leggibilità La leggibilità è una qualità del codice sorgente del software • facilità della comprensione nella lettura – organizzazione del codice – chiarezza nella descrizione delle componenti realizzate e nella loro implementazione • influenza la modificabilità – ben più importante Questo capitolo introduce alcune convenzioni stilistiche per semplificare e disciplinare la scrittura dei programmi Leggibilita’ 5 Stile e convenzioni di codifica Una convenzione di codifica è una indicazione di carattere stilistico da adottare nella scrittura dei programmi • 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 • orienta il programmatore in tutte le scelte stilistiche Si osservi la distinzione tra • linguaggio di programmazione – ciò che è permesso scrivere nei programmi • convenzioni di codifica – scelta di uno stile di scrittura dei programmi tra gli stili possibili Leggibilita’ 6 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");}} • è un programma corretto • è difficile da comprendere Leggibilita’ 7 Scopo delle convenzioni di codifica Un buon insieme di convenzioni di codifica • aumenta la leggibilità delle classi – ne facilita l’identificazione delle componenti – ne aumenta la comprensibilità • disciplina e semplifica il lavoro del programmatore – è comunque necessario fare delle scelte, in alcuni casi anche banali – un insieme di convenzioni di codifica fornisce indicazioni per affrontare in modo coerente tutte le scelte da effettuare – favorisce la scrittura di programmi leggibili – semplifica la manutenzione dei programmi • favorisce la leggibilità di programmi scritti da persone diverse Leggibilita’ 8 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 Leggibilita’ 9 Commenti Un commento è una frase che documenta una porzione di codice, illustrandone lo scopo oppure il significato • il compilatore ignora i commenti • i commenti, se usati bene, sono molto utili /* 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"); } } Leggibilita’ 10 Tipologie di commenti Commenti documentazione • descrivono che cosa si sta facendo – che cosa rappresenta un oggetto di questa classe? qual è il problema risolto da questo metodo? • descrivono le specifiche del codice, in modo indipendente dall’implementazione Commenti implementazione • descrivono come si sta facendo una cosa – quale algoritmo implementa questo metodo? a che cosa serve questa variabile? a che cosa servono queste istruzioni? • commentano una particolare implementazione Commenti asserzione • descrivono proprietà valide durante l’esecuzione del codice • in genere documentano proprietà che caratterizzano la correttezza dell’algoritmo adottato Leggibilita’ 11 Tipologie di commenti /** * Applicazione che calcola e visualizza commento * la radice quadrata di 144. documentazione */ 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 Leggibilita’ 12 Formato dei commenti Tre formati per i commenti • formato tradizionale — delimitato da /* e */ • formato di linea — da // alla fine della linea • formato documentazione — delimitato da /** e */ /** formato * Applicazione che calcola e visualizza documentazione * 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); } } Leggibilita’ 13 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 D’altra parte, i commenti non devono fornire informazioni immediatamente comprensibili dal codice stesso Leggibilita’ 14 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 – che problema risolve il metodo? Un metodo contiene anche i seguenti commenti • commenti implementazione che descrivono l’algoritmo implementato dal metodo – ciascun commento precede una o più istruzioni • un commento implementazione per ciascuna variabile – a che serve questa variabile nell’algoritmo? • eventuali commenti asserzione – a valle delle istruzioni che garantiscono il verificarsi di quella proprietà Leggibilita’ 15 Scelta dei nomi I nomi delle classi, dei metodi e delle variabili sono identificatori composti da una sequenza non vuota di caratteri e cifre, iniziante con un carattere • ad esempio, pippo, grunt, abracadabra, pi555, ScRiTtOrEsUlLoScHeRmO Ai fini della documentazione del codice è utile però scegliere e utilizzare solo nomi che siano significativi e autodocumentanti • i nomi delle classi e delle variabili sono sostantivi – eventualmente con aggettivi – ScrittoreSulloSchermo, radice, somma, contatoreNumeriPositivi • i nomi dei metodi sono ―frasi verbali‖ – ad esempio, stampa, calcolaSomma • forma lessicale – uso delle maiuscole e delle minuscole Leggibilita’ 16 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"); } } perché è poco leggibile? Leggibilita’ 17 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'info.."); } } Leggibilita’ 18 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 • ad esempio, tutte le variabili locali di un metodo o le istruzioni di una sequenza di istruzioni • i commenti (tranne quelli di linea) vengono scritti con lo stesso rientro dell’elemento commentato Leggibilita’ 19 Parentesi graffe Un blocco è una porzione di codice delimitata da parentesi graffe • un blocco comprende anche le graffe che lo delimitano • viene usata una indentazione particolare /* 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); } } Leggibilita’ 20 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 • linee più lunghe vanno spezzate – usando rientri scelti sulla base di criteri di perimetro = Misuratore.distanza(x1, y1, x2, y2) + Misuratore.distanza(x1, y1, x3, y3) + Misuratore.distanza(x2, y2, x3, y3); Leggibilita’ 21 Ordine delle istruzioni e delle dichiarazioni In un metodo, le diverse tipologie di istruzioni e dichiarazioni possono apparire in ordine qualsiasi • con il solo vincolo che ciascuna variabile può essere usata solo dopo essere stata dichiarata • anche l’ordine degli elementi di una classe è spesso irrilevante Convenzioni di codifica • ciascuna linea di codice contiene una sola istruzione semplice o dichiarazione – istruzioni semplici o dichiarazioni lunghe vanno spezzate • le dichiarazioni di variabili locali sono raggruppate all’inizio di ciascun metodo – ciascuna dichiarazione è relativa a una singola variabile – la dichiarazione di ciascuna variabile è corredata da un commento che descrive lo scopo della variabile Leggibilita’ 22 Repertorio di istruzioni Java fornisce un insieme di istruzioni molto ampio • la sintassi di Java deriva dalla sintassi del linguaggio C, in cui è possibile esprimere istruzioni complesse in modo sintetico L’uso dell’intero repertorio di istruzioni di Java può essere controproducente – soprattutto in un corso introduttivo alla programmazione • istruzioni con una semantica complessa • istruzioni che riducono la leggibilità – perché il loro uso invalida alcune utili proprietà • in pratica – Java viene presentato solo in modo parziale (decaffeinato) – viene adottato lo spirito della programmazione strutturata Leggibilita’ 23 Riepilogo della dispensa Per disciplinare la scrittura dei programmi e’ necessario Indentare in codice in modo che siano messe in evidenza le diverse parti del programma e le istruzioni Commentare opportunamente il codice spiegando • Il ruolo delle variabili • Il significato delle istruzioni utilizzate Usare nomi significativi per le variabili Leggibilita’ 24 Conoscenze acquisite Cosa vuol dire indentare un programma Quali tipi di commenti sono disponibili in Java Quali sono i blocchi principali in cui e’ organizzato un programma Leggibilita’ 25 Competenze acquisite Saper scrivere proogrammi leggibili utilizzando opportunamente L’indentazione I commenti I nomi dell variabili Leggibilita’ 26 Rifermimenti al libro di testo Capitolo 7 Leggibilita’ 27