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