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