• Non ci sono risultati.

Fondamenti di Informatica (Elettronici)

N/A
N/A
Protected

Academic year: 2022

Condividi "Fondamenti di Informatica (Elettronici)"

Copied!
47
0
0

Testo completo

(1)

Fondamenti di Informatica (Elettronici)

Da THINK JULIA – Capitolo 4 (Parte b)

18 ottobre 2021

(2)

Caso di studio: Design dell’interfaccia (parte b)

1

1 Refactoring

2 Piano di sviluppo

3 Docstring

4 Debug

5 Glossario

6 Esercizi

1Tratto dahttps://benlauwens.github.io/ThinkJulia.jl/latest/book.html, disponibile sotto Licenza ‘Creative Commons Attribution-NonCommercial 3.0 Unported‘.

(3)

Refactoring

Section 1

Refactoring

(4)

Refactoring

Refactoring

(5)

Refactoring

Refactoring del nostro modulo geometrico

Quando hoscritto “circle”, sono stato in grado diriutilizzare “polygon”perché un poligono a molti latiè unabuona approssimazionedi uncerchio.

Ma “arc”non è così cooperativo; non possiamo usare “polygon” o “circle” per disegnare un arco.

Un’alternativa èiniziare con una copiadi polygon etrasformarlain arc. Il risultato potrebbe essere simile a questo:

function arc(t, r, angle)

arc_len = 2 * pi * r * angle / 360 n = trunc(arc_len / 3) + 1

step_len = arc_len / n step_angle = angle / n for i in 1:n

forward(t, step_len)

(6)

Refactoring

Una funzione più generale: “polyline”

La seconda metà di questa funzioneè simile a “polygon”, ma non possiamoriutilizzare “polygon” senzacambiare l’interfaccia.

Potremmo generalizzare polygonper prendere un angle come terzo argomento, ma poi polygon non sarebbe più unnome appropriato!

Chiamiamoinvece la funzione più generale “polyline”:

function polyline(t, n, len, angle) for i in 1:n

forward(t, len) turn(t, -angle) end

end

(7)

Refactoring

Riscrivi polygon e arc per usare polyline

Ora possiamoriscrivere polygon e arc perusare polyline:

function polygon(t, n, len) angle = 360 / n

polyline(t, n, len, angle) end

function arc(t, r, angle)

arc_len = 2 * pi * r * angle / 360 n = trunc(arc_len / 3) + 1

step_len = arc_len / n step_angle = angle / n

polyline(t, n, step_len, step_angle)

(8)

Refactoring

Riscrivi circle per usare arc

Infine, possiamo riscrivere circle perusare arc:

function circle(t, r) arc(t, r, 360) end

(9)

Refactoring

Alcune conclusioni

Questo processo, ovvero la riorganizzazione di un programmaper migliorare le interfacce e facilitare il riutilizzodel codice, è chiamato refactoring.

In questo caso, abbiamo notato che c’era un codice similein arc e polygon, quindi lo abbiamo“scomposto” in polyline.

Se avessimo pianificato in anticipo, avremmo potuto scrivere prima la polilinea edevitare il refactoring, ma spesso non ne sai abbastanza all’inizio di un progetto perprogettare tutte le interfacce.

Una volta che inizi a programmare,comprendi meglio il problema.

A volte il refactoringè unsegno chehai imparato qualcosa.

(10)

Piano di sviluppo

Section 2

Piano di sviluppo

(11)

Piano di sviluppo

Piano di sviluppo

(12)

Piano di sviluppo

Incapsulamento e generalizzazione

Unpiano di sviluppoè unprocessoperscrivere programmi. Il processo che abbiamo utilizzato in questo caso di studio è“incapsulamento e generalizzazione”.

I passaggi di questo processo sono:

1 Iniziascrivendo unpiccolo programmasenzadefinizioni di funzione.

2 Una volta che ilprogramma funziona,identificare un pezzo coerentedi esso, incapsulare il pezzo in una funzione e dargli unnome.

3 Generalizzare la funzioneaggiungendoparametriappropriati.

4 Ripetere i passaggi 1–3finché non si dispone di unaserie di funzionioperative. Copia e incollail codice funzionante perevitare di ridigitare(e rieseguire il debug).

5 Cercare opportunitàpermigliorare il refactoring del programma. Ad esempio, se hai uncodice similein più punti,considera di scomporloin unafunzione adeguatamentegenerale.

(13)

Piano di sviluppo

Incapsulamento e generalizzazione

Unpiano di sviluppoè unprocessoperscrivere programmi. Il processo che abbiamo utilizzato in questo caso di studio è“incapsulamento e generalizzazione”.

I passaggi di questo processo sono:

1 Iniziascrivendo unpiccolo programmasenzadefinizioni di funzione.

2 Una volta che ilprogramma funziona,identificare un pezzo coerentedi esso, incapsulare il pezzo in una funzione e dargli unnome.

3 Generalizzare la funzioneaggiungendoparametriappropriati.

4 Ripetere i passaggi 1–3finché non si dispone di unaserie di funzionioperative. Copia e incollail codice funzionante perevitare di ridigitare(e rieseguire il debug).

5 Cercare opportunitàpermigliorare il refactoring del programma. Ad esempio, se hai uncodice similein più punti,considera di scomporloin unafunzione adeguatamentegenerale.

(14)

Piano di sviluppo

Incapsulamento e generalizzazione

Unpiano di sviluppoè unprocessoperscrivere programmi. Il processo che abbiamo utilizzato in questo caso di studio è“incapsulamento e generalizzazione”.

I passaggi di questo processo sono:

1 Iniziascrivendo unpiccolo programmasenzadefinizioni di funzione.

2 Una volta che ilprogramma funziona,identificare un pezzo coerentedi esso, incapsulare il pezzo in una funzione e dargli unnome.

3 Generalizzare la funzioneaggiungendoparametriappropriati.

4 Ripetere i passaggi 1–3finché non si dispone di unaserie di funzionioperative. Copia e incollail codice funzionante perevitare di ridigitare(e rieseguire il debug).

5 Cercare opportunitàpermigliorare il refactoring del programma. Ad esempio, se hai uncodice similein più punti,considera di scomporloin unafunzione adeguatamentegenerale.

(15)

Piano di sviluppo

Incapsulamento e generalizzazione

Unpiano di sviluppoè unprocessoperscrivere programmi. Il processo che abbiamo utilizzato in questo caso di studio è“incapsulamento e generalizzazione”.

I passaggi di questo processo sono:

1 Iniziascrivendo unpiccolo programmasenzadefinizioni di funzione.

2 Una volta che ilprogramma funziona,identificare un pezzo coerentedi esso, incapsulare il pezzo in una funzione e dargli unnome.

3 Generalizzare la funzioneaggiungendoparametriappropriati.

4 Ripetere i passaggi 1–3finché non si dispone di unaserie di funzionioperative.

Copia e incollail codice funzionante perevitare di ridigitare(e rieseguire il debug).

5 Cercare opportunitàpermigliorare il refactoring del programma. Ad esempio, se hai uncodice similein più punti,considera di scomporloin unafunzione adeguatamentegenerale.

(16)

Piano di sviluppo

Incapsulamento e generalizzazione

Unpiano di sviluppoè unprocessoperscrivere programmi. Il processo che abbiamo utilizzato in questo caso di studio è“incapsulamento e generalizzazione”.

I passaggi di questo processo sono:

1 Iniziascrivendo unpiccolo programmasenzadefinizioni di funzione.

2 Una volta che ilprogramma funziona,identificare un pezzo coerentedi esso, incapsulare il pezzo in una funzione e dargli unnome.

3 Generalizzare la funzioneaggiungendoparametriappropriati.

4 Ripetere i passaggi 1–3finché non si dispone di unaserie di funzionioperative.

Copia e incollail codice funzionante perevitare di ridigitare(e rieseguire il debug).

5 Cercare opportunitàpermigliorare il refactoringdel programma. Ad esempio, se hai uncodice similein più punti,considera di scomporloin unafunzione adeguatamentegenerale.

(17)

Piano di sviluppo

Metodo di progettazione del software

Progettazione tramite refactoring

Questo processo ha alcuni inconvenienti, vedremo alternative più avanti, ma può essere utile senon saiin anticipo come dividere il programma in funzioni.

Questo approccio ticonsente di progettarementreprocedi.

(18)

Docstring

Section 3

Docstring

(19)

Docstring

Docstring

(20)

Docstring

Esempio di stringa di documentazione (docstring)

Una docstring è una stringa prima di una funzionechespiega l’interfaccia (“doc” è breve per “documentation”). Esempio:

"""

polyline(t, n, len, angle)

Draws n line segments with the given length and angle (in degrees) between them. t is a turtle.

"""

function polyline(t, n, len, angle) for i in 1:n

forward(t, len) turn(t, -angle) end

end

(21)

Docstring

Accesso alla documentazione

È possibileaccedere alla documentazionein REPLo in unnotebookdigitando ? seguito dalnomedi unafunzioneomacro, e premendo ENTER:

help?> polyline search:

polyline(t, n, len, angle)

Draws n line segments with the given length and angle (in degrees) between them. t is a Turtle.

Le docstring sono spessostringhe tra virgolette, note anche comestringhe su più righe perché levirgolette tripleconsentono alla stringa dioccupare più di una riga.

Una docstring contiene leinformazioni essenzialidi cui qualcuno avrebbe bisognoper usarequestafunzione.

(22)

Docstring

Consigli

SUGGERIMENTI

Scrivere questo tipo didocumentazione è una parte importantedel design dell’interfaccia.

Un’interfacciaben progettatadovrebbe essere semplice da spiegare; se hai difficoltà a spiegareuna delle tue funzioni, forse l’interfaccia potrebbe essere migliorata.

(23)

Docstring

Consigli

SUGGERIMENTI

Scrivere questo tipo didocumentazione è una parte importantedel design dell’interfaccia.

Un’interfacciaben progettatadovrebbe essere semplice da spiegare;

se hai difficoltà a spiegareuna delle tue funzioni, forse l’interfaccia potrebbe essere migliorata.

(24)

Docstring

Consigli

SUGGERIMENTI

Scrivere questo tipo didocumentazione è una parte importantedel design dell’interfaccia.

Un’interfacciaben progettatadovrebbe essere semplice da spiegare;

se hai difficoltà a spiegareuna delle tue funzioni, forse l’interfaccia potrebbe essere migliorata.

(25)

Debug

Section 4

Debug

(26)

Debug

Debug

(27)

Debug

Un’interfaccia è un contratto tra una funzione e un chiamante

Il chiamante accetta di fornire* alcuni parametrie lafunzione accettadi fare uncerto lavoro.

Per esempio:

polyline(t, n, len, angle)

polyline richiede quattro argomenti: t deve essere unatartaruga; “n”

deve essere un numero intero; “len” dovrebbe essere un numero positivo; e

“angle” deve essere unnumero, che si intende in gradi.

(28)

Debug

Presupposti e postcondizioni

Questirequisitisono chiamatiprecondizioniperchédovrebbero essere veriprima che lafunzione inizil’esecuzione.

Al contrario, lecondizioni alla finedellafunzionesono postcondizioni.

Lepostcondizioniincludonol’effetto voluto della funzione(come disegnare segmenti di linea) e qualsiasi effetto collaterale(comespostare la tartarugao apportare altremodifiche).

Lecondizioni preliminarisonoresponsabilità del chiamante.

Se il chiamanteviola una precondizione (adeguatamentedocumentata!) e la funzione nonfunziona correttamente, il bugè nelchiamante,nonnellafunzione. Se le precondizioni sono soddisfattee lepostcondizioni non lo sono, ilbugènella funzione. Se le tue pre- e postcondizioni sono chiare, possono aiutarti con il debug.

(29)

Debug

Presupposti e postcondizioni

Questirequisitisono chiamatiprecondizioniperchédovrebbero essere veriprima che lafunzione inizil’esecuzione.

Al contrario, lecondizioni alla finedellafunzionesono postcondizioni.

Lepostcondizioniincludonol’effetto voluto della funzione(come disegnare segmenti di linea) e qualsiasi effetto collaterale(comespostare la tartarugao apportare altremodifiche).

Lecondizioni preliminarisonoresponsabilità del chiamante.

Se il chiamanteviola una precondizione (adeguatamentedocumentata!) e la funzione nonfunziona correttamente, il bugè nelchiamante,nonnellafunzione.

Se leprecondizioni sono soddisfattee lepostcondizioni non lo sono, ilbugènella

(30)

Glossario

Section 5

Glossario

(31)

Glossario

Glossario

(32)

Glossario

Glossario I

modulo Un file che contiene unaraccolta di funzioni correlate e altre definizioni.

pacchetto Unalibreria esternacon funzionalità aggiuntive.

utilizzando l’istruzione Un’istruzione che legge un file di modulo e crea un oggetto modulo.

ciclo continuo Una parte di un programmache può essere eseguita ripetutamente.

incapsulamento Il processo di trasformazione di una sequenza di istruzioni in unadefinizione di funzione.

generalizzazione Il processo di sostituzionedi qualcosa diinutilmente specifico(come un numero) con qualcosa di adeguatamente generale(come una variabileo unparametro).

interfaccia Unadescrizionedi come utilizzareuna funzione, incluso il nomee le descrizioni degliargomenti e del valore restituito.

(33)

Glossario

Glossario I

modulo Un file che contiene unaraccolta di funzioni correlate e altre definizioni.

pacchetto Unalibreria esternacon funzionalità aggiuntive.

utilizzando l’istruzione Un’istruzione che legge un file di modulo e crea un oggetto modulo.

ciclo continuo Una parte di un programmache può essere eseguita ripetutamente.

incapsulamento Il processo di trasformazione di una sequenza di istruzioni in unadefinizione di funzione.

generalizzazione Il processo di sostituzionedi qualcosa diinutilmente specifico(come un numero) con qualcosa di adeguatamente generale(come una variabileo unparametro).

interfaccia Unadescrizionedi come utilizzareuna funzione, incluso il nomee le descrizioni degliargomenti e del valore restituito.

(34)

Glossario

Glossario I

modulo Un file che contiene unaraccolta di funzioni correlate e altre definizioni.

pacchetto Unalibreria esternacon funzionalità aggiuntive.

utilizzando l’istruzione Un’istruzione che legge un file di modulo e crea un oggetto modulo.

ciclo continuo Una parte di un programmache può essere eseguita ripetutamente.

incapsulamento Il processo di trasformazione di una sequenza di istruzioni in unadefinizione di funzione.

generalizzazione Il processo di sostituzionedi qualcosa diinutilmente specifico(come un numero) con qualcosa di adeguatamente generale(come una variabileo unparametro).

interfaccia Unadescrizionedi come utilizzareuna funzione, incluso il nomee le descrizioni degliargomenti e del valore restituito.

(35)

Glossario

Glossario I

modulo Un file che contiene unaraccolta di funzioni correlate e altre definizioni.

pacchetto Unalibreria esternacon funzionalità aggiuntive.

utilizzando l’istruzione Un’istruzione che legge un file di modulo e crea un oggetto modulo.

ciclo continuo Una parte di un programmache può essere eseguita ripetutamente.

incapsulamento Il processo di trasformazione di una sequenza di istruzioni in unadefinizione di funzione.

generalizzazione Il processo di sostituzionedi qualcosa diinutilmente specifico(come un numero) con qualcosa di adeguatamente generale(come una variabileo unparametro).

interfaccia Unadescrizionedi come utilizzareuna funzione, incluso il nomee le descrizioni degliargomenti e del valore restituito.

(36)

Glossario

Glossario I

modulo Un file che contiene unaraccolta di funzioni correlate e altre definizioni.

pacchetto Unalibreria esternacon funzionalità aggiuntive.

utilizzando l’istruzione Un’istruzione che legge un file di modulo e crea un oggetto modulo.

ciclo continuo Una parte di un programmache può essere eseguita ripetutamente.

incapsulamento Il processo di trasformazione di una sequenza di istruzioni in unadefinizione di funzione.

generalizzazione Il processo di sostituzionedi qualcosa diinutilmente specifico(come un numero) con qualcosa di adeguatamente generale(come una variabileo unparametro).

interfaccia Unadescrizionedi come utilizzareuna funzione, incluso il nomee le descrizioni degliargomenti e del valore restituito.

(37)

Glossario

Glossario I

modulo Un file che contiene unaraccolta di funzioni correlate e altre definizioni.

pacchetto Unalibreria esternacon funzionalità aggiuntive.

utilizzando l’istruzione Un’istruzione che legge un file di modulo e crea un oggetto modulo.

ciclo continuo Una parte di un programmache può essere eseguita ripetutamente.

incapsulamento Il processo di trasformazione di una sequenza di istruzioni in unadefinizione di funzione.

generalizzazione Il processo di sostituzionedi qualcosa diinutilmente specifico(come un numero) con qualcosa di adeguatamente generale(come una variabileo unparametro).

interfaccia Unadescrizionedi come utilizzareuna funzione, incluso il nomee le descrizioni degliargomenti e del valore restituito.

(38)

Glossario

Glossario I

modulo Un file che contiene unaraccolta di funzioni correlate e altre definizioni.

pacchetto Unalibreria esternacon funzionalità aggiuntive.

utilizzando l’istruzione Un’istruzione che legge un file di modulo e crea un oggetto modulo.

ciclo continuo Una parte di un programmache può essere eseguita ripetutamente.

incapsulamento Il processo di trasformazione di una sequenza di istruzioni in unadefinizione di funzione.

generalizzazione Il processo di sostituzionedi qualcosa diinutilmente specifico(come un numero) con qualcosa di adeguatamente generale(come una variabileo unparametro).

interfaccia Unadescrizionedi come utilizzareuna funzione, incluso il nomee le descrizioni degliargomenti e delvalore restituito.

(39)

Glossario

Glossario II

I

refactoring Il processo dimodifica di un programma funzionante per migliorare le interfaccedelle funzioni ealtre qualità del codice.

piano di sviluppo Un processoper scrivere programmi.

docstring Unastringache viene visualizzata nella parte superiore della definizionedi unafunzione per documentare l’interfacciadella funzione.

precondizione Requisitoche deve essere soddisfatto dal chiamanteprima dell’avviodi una funzione.

postcondizione Requisitoche deve essere soddisfatto dalla funzioneprima che termini.

(40)

Glossario

Glossario II

I

refactoring Il processo dimodifica di un programma funzionante per migliorare le interfaccedelle funzioni ealtre qualità del codice.

piano di sviluppo Unprocessoper scrivere programmi.

docstring Unastringache viene visualizzata nella parte superiore della definizionedi unafunzione per documentare l’interfacciadella funzione.

precondizione Requisitoche deve essere soddisfatto dal chiamanteprima dell’avviodi una funzione.

postcondizione Requisitoche deve essere soddisfatto dalla funzioneprima che termini.

(41)

Glossario

Glossario II

I

refactoring Il processo dimodifica di un programma funzionante per migliorare le interfaccedelle funzioni ealtre qualità del codice.

piano di sviluppo Unprocessoper scrivere programmi.

docstring Unastringache viene visualizzata nella parte superiore della definizionedi unafunzione per documentare l’interfacciadella funzione.

precondizione Requisitoche deve essere soddisfatto dal chiamanteprima dell’avviodi una funzione.

postcondizione Requisitoche deve essere soddisfatto dalla funzioneprima che termini.

(42)

Glossario

Glossario II

I

refactoring Il processo dimodifica di un programma funzionante per migliorare le interfaccedelle funzioni ealtre qualità del codice.

piano di sviluppo Unprocessoper scrivere programmi.

docstring Unastringache viene visualizzata nella parte superiore della definizionedi unafunzione per documentare l’interfacciadella funzione.

precondizione Requisitoche deve essere soddisfatto dal chiamanteprima dell’avviodi una funzione.

postcondizione Requisitoche deve essere soddisfatto dalla funzioneprima che termini.

(43)

Glossario

Glossario II

I

refactoring Il processo dimodifica di un programma funzionante per migliorare le interfaccedelle funzioni ealtre qualità del codice.

piano di sviluppo Unprocessoper scrivere programmi.

docstring Unastringache viene visualizzata nella parte superiore della definizionedi unafunzione per documentare l’interfacciadella funzione.

precondizione Requisitoche deve essere soddisfatto dal chiamanteprima dell’avviodi una funzione.

postcondizione Requisitoche deve essere soddisfatto dalla funzioneprima

(44)

Esercizi

Section 6

Esercizi

(45)

Esercizi

Esercizi

(46)

Esercizi

aaaa

(47)

Esercizi

aaaa

Riferimenti

Documenti correlati

Poi c’è la sfera “sopra” la motivazione: questa è la sfera della gratuità e dell’apertura personale a questa “x”, in termini tradizionali anche il “di- vino” (lo si

Suona paradossale, ma proprio in relazione al diritto penale, sfera che normalmente si ritiene più impermeabile alla rivoluzione digi- tale, lo slogan della predittività

Negli Stati Uniti dodici Stati prevedono per molte categorie di condannati l’esclusione dal godimento dei diritti politici (fra essi la Florida e l’Alabama, dove, come conseguenza

In qualità di importanti investitori pubblici, il cosiddetto “Fondo Verde per il Clima” (Green Climate Fund - GCF), l'Unione Europea (UE), i paesi europei

Aumentare le conoscenze degli Studenti sulle tematiche della Donazione Sensibilizzare alla Donazione come valore etico e impegno sociale Prendere coscienza del valore del

Il progetto mira a comunicare informazioni medico-scientifiche relative al valore delle donazioni anatomiche (sangue, organi e midollo osseo), corredate dalle

COMO. L'ungherese Indiko Rejto ha vinto la decima edizione del - fioretto d'argento Eseria », pre- cedendo nel ginone finale le ita- liane Bruna ,Colombetti ed An- tonella Ragno e

[r]