SlideShare a Scribd company logo
Programmazione modulare
              g




Linguaggi dinamici – A.A. 2009/2010
                                      1
Introduzione
T   Modularità: suddivisione del programma in più
    unità funzionali (moduli) distinte
T   Tutti i linguaggi di programmazione forniscono
    un qualche supporto per rendere modulari i
    programmi
T   I linguaggi dinamici sono fortemente orientati
      li        i di   i i     f t     t   i t ti
    verso la modularità
      T   Quasi tutto è un oggetto (variabili, codice)
      T   È semplice suddividere una funzionalità per
          classi e per gruppi di classi (pacchetti)
      T   Librerie estese di moduli già pronti
                                     g p
Linguaggi dinamici – A.A. 2009/2010
                                                         2
Vantaggi della modularità
T   Organizzazione
      T   Raggruppamento delle funzioni seguendo una
                                funzioni,
          organizzazione ben precisa
T   Limitata d li
    Li it t duplicazione del codice
                    i    d l di
      T   Ciascun modulo implementa una funzionalità
          ben
          b specifica
                  ifi
T   Riuso del software
      T   Se scritto bene (si legga: se astrae dalla logica
          del singolo programma), un modulo può essere
          riutilizzato in programmi molto diversi fra loro


Linguaggi dinamici – A.A. 2009/2010
                                                              3
Scope
T   Lo scope di un oggetto (variabile, funzione) è
    la parte di programma in cui l oggetto è
                                 l'oggetto
    direttamente accessibile
T   Variabili con stesso nome possono riferirsi a
    contenuti diversi in scope diversi
      T   Classico esempio: variabile locale che
          Cl   i          i     i bil l   l h
          sovrascrive temporaneamente una variabile
          globale avente lo stesso nome




Linguaggi dinamici – A.A. 2009/2010
                                                      4
Scope




Linguaggi dinamici – A.A. 2009/2010
                                              5
Scope
T   Quando il compilatore (o l'interprete)
    individuano il nome di una variabile, provano
                                  variabile
    ad associare ad essa il valore che le compete,
    usa do e ego e di
    usando le regole d scope
T   Si esamina innanzitutto l'ambiente locale
    (tipicamente,
    (tipicamente il blocco di codice in cui la
    variabile è definita)
T   Se non si trova una definizione, si applicano le
                          definizione
    regole di scope
      T   Scope statico
          S      t ti
      T   Scope dinamico

Linguaggi dinamici – A.A. 2009/2010
                                                       6
Scope statico
T   In un linguaggio basato su scope statico:
      T   lo scope di una variabile è il blocco di codice in
          cui essa è definita
      T   una variabile non l
                   i bil     locale viene cercata all'interno
                                 l i            t ll'i t
          del blocco di codice in cui la procedura stessa è
          definita
T   La ricerca avviene tipicamente a tempo di
    compilazione, usando le regole del compilatore
          il i          d l      l d l      il t
      T   Lo scope statico viene anche chiamato scope
          lessicale per questo motivo
          l   i l           t     ti
      T   Esempio: C, Perl (dichiarazione my)

Linguaggi dinamici – A.A. 2009/2010
                                                                7
Scope dinamico
T   In un linguaggio basato su scope dinamico
      T   lo scope di una variabile non è necessariamente
          solo il blocco di codice in cui essa è definita
      T   una variabile non locale viene cercata nei vari
                   i bil     l   l i            t    i    i
          stack frame
T   La i
    L ricerca avviene tipicamente a tempo di
                 i    ti i     t    t
    esecuzione
      T   Esempio: Perl (dichiarazione local)




Linguaggi dinamici – A.A. 2009/2010
                                                              8
Namespace
T   Il namespace è l'insieme delle variabili e delle
    funzioni visibili immediatamente dal punto del
    programma in cui ci si trova
T   Più variabili e funzioni si vedono, più aumenta
                                  vedono
    il rischio di collisioni fra i loro nomi
      T   Si creano spiacevoli effetti collaterali
                      i      li ff tti ll t     li
      T   Diminuisce l'incapsulamento
T   Occorre un meccanismo per limitare tali effetti
    collaterali



Linguaggi dinamici – A.A. 2009/2010
                                                       9
Modulo software
T   Un modulo software è un file contenente la
    definizione di molteplici
      T   Variabili
      T   Funzioni
          F    i i
      T   Classi (con relativi metodi e attributi)
T   Idealmente, ciascun modulo contiene
    l'implementazione di un aspetto del software
      T   Scheletro principale
      T   Funzionalità di gestione
      T   I/O
      T   GUI
Linguaggi dinamici – A.A. 2009/2010
                                                     10
Package
T   Un package è un insieme di moduli software
T   A tutti i moduli del package è associato lo
    stesso namespace
T   Package diversi hanno namespace diversi e
    separati
T   Le variabili e le funzioni contenute in due
    namespace diversi non si vedono




Linguaggi dinamici – A.A. 2009/2010
                                                  11
Un esempio di package
                                            Il file ha il nome
File: ModExample.pm                         del      pacchetto
package ModExample;                         p
                                            più l'estensione
use strict;
                                         Nome del package
sub randGreeting {
  b    dG    i                          File: demo.pl
      my (@greets) =                    #!/usr/bin/perl
             q (
             qw(Hello Howdy WUZZUP);
                          y       );
      return $greets[rand($#greets)];   use strict;
}                                       use ModExample;
sub hello {
      print randGreeting() .            ModExample::hello();
             “from ModExample!n”;
              from ModExample!n ;
}                                       Invocazione del
1;                                      metodo all'interno
                                        del namespace
Linguaggi dinamici – A.A. 2009/2010     ModExample
                                                                 12
Naming degli oggetti
T   Per accedere ad una variabile o funzione di un
    namespace da un altro namespace occorre
                            namespace,
    fare una delle seguenti due cose:
      T   Costruire il nome completo dell oggetto che si
                                         dell'oggetto
          vuole referenziare, inteso come l'unione del
          namespace e dell'oggetto stesso all interno del
                         dell oggetto           all'interno
          namespace (ModExample::hello())
      T   Esportare la funzione all interno del namespace
                                 all'interno
          che la definisce; d'ora in poi la funzione si può
          chiamare con il suo nome (hello())
                                       (      ())



Linguaggi dinamici – A.A. 2009/2010
                                                              13
Best practice di design
T   Progettare innanzitutto l'API dei vari moduli
T   Scegliere cosa esportare agli altri
    moduli/package (sempre il minimo possibile)
T   Mai rendere esplicito l'uso di variabili nell'API
      T   Usare sempre metodi get()/set()
T   Refactoring
      T   Si copia ed incolla il codice da fonti esterne e/o si
          scrive codice
      T   Il codice duplicato lo si fa diventare una subroutine
                      p
      T   Le subroutine duplicate le si fanno diventare moduli
          o package
             p     g

Linguaggi dinamici – A.A. 2009/2010
                                                                  14
Sviluppo per componenti
                  pp p       p




Linguaggi dinamici – A.A. 2009/2010
                                       15
Introduzione
T   La totalità dei linguaggi dinamici moderni
    mette a disposizione un deposito (repository)
    di moduli e pacchetti per le operazioni più
    d spa ate
    disparate
T   Similitudine con la libreria del C per il
    linguaggio C
T   Nel caso dei linguaggi dinamici, l'insieme delle
    funzionalità esterne offerte è molto più grande
      T   Circa 1000 funzioni nella glibc
      T   Circa 20000 moduli negli archivi del Perl
      T   Parafrasando Church e Turing: se riuscite a
          pensarlo, esiste come modulo!
Linguaggi dinamici – A.A. 2009/2010
                                                        16
Alcuni esempi di repository
T   Perl: http://www.cpan.org
T   Python: http://pypi python org/pypi/
             http://pypi.python.org/pypi/
T   Ruby: http://rubyforge.org/
T   Questi repository (come gli altri, in generale)
    presentano le seguenti funzionalità:
      T   Motore di ricerca (interfaccia Web)
      T   Download di una versione recente del modulo
      T   Documentazione del modulo
      T   Elenco delle dipendenze del modulo


Linguaggi dinamici – A.A. 2009/2010
                                                        17
Uso dei moduli
T   Il pacchetto software del linguaggio mette a
    disposizione meccanismi per:
      T   scaricare l'archivio sorgente di un modulo dal
          repository
      T   compilare (se necessario) un modulo a partire
          dal suo archivio sorgente
      T   verificare la funzionalità del modulo, tramite
          degli unit test
      T   installare il modulo in una locazione ben precisa
          del file system (da dove potrà essere caricato,
                                                  caricato
          qualora fosse importato)

Linguaggi dinamici – A.A. 2009/2010
                                                              18
Best practice di programmazione
T   Non si reinventa la ruota inutilmente!
T   Si resiste alla tentazione di riscrivere da zero
    (e di testare!) tonnellate di codice
T   Passi da seguire
      T   Si suddivide il progetto in moduli software
      T   Si cerca di individuare alcuni moduli nel
          repository
      T   Si installano i moduli del repository
      T   Si scrive quello che resta (se si è bravi e/o
          fortunati, solo lo scheletro!)


Linguaggi dinamici – A.A. 2009/2010
                                                          19
Best practice di programmazione
T   Vantaggi offerti
      T   I moduli sono solitamente self contained
                                      self-contained,
          pertanto non ci si ripete inutilmente (principi
          DRY,
          DRY SPOT)
           T DRY (Don't Repeat Yourself): Every piece of

             knowledge must have a single unambiguous,
                                      single, unambiguous
             authoritative representation within a system
           T SinglePointOfTruth (SPOT)




Linguaggi dinamici – A.A. 2009/2010
                                                            20
Best practice di programmazione
T   Vantaggi offerti
      T   I moduli sono già testati esaustivamente (dai
          programmatori e dagli altri utenti), pertanto la
          probabilità di immettere errori nel software si
          confina al software scritto da noi
      T   I moduli sono scritti da persone spesso molto
          più competenti di noi, pertanto la qualità del
          software aumenta




Linguaggi dinamici – A.A. 2009/2010
                                                             21

More Related Content

PDF
Pe t1 perl-intro
PDF
Pe t3 perl-moduli
PDF
Py t3 python-oggetti
PDF
Py t2 python-moduli
PDF
Py a2 python-documentazione
PDF
Py t1 python-intro
PDF
Py a3 python-metaprogramming
PDF
Py a4 python-file
Pe t1 perl-intro
Pe t3 perl-moduli
Py t3 python-oggetti
Py t2 python-moduli
Py a2 python-documentazione
Py t1 python-intro
Py a3 python-metaprogramming
Py a4 python-file

What's hot (20)

PDF
Pe t2 perl-caratteristiche
PDF
T6 codice
PDF
T4 tipizzazione
PDF
Pe t4 perl-oggetti
PDF
Py a6 python-database
PDF
06 - Programmazione: Scope Variabili
PDF
MS_corso base iOS iPhone_partI
PDF
01 - Programmazione: Dai Problemi ai Programmi
PDF
T8 supporti
PDF
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
PDF
Pe a3 perl-metaprogramming
PPTX
Python@Unina - Theory
PPTX
2011.02.19 Introducing F#
PPTX
Caratteristiche del linguaggio c
KEY
Corso Iphone in 48h
PPTX
Scala: come recuperare la programmazione funzionale e perché
PDF
Introduzione a libavfilter
PDF
03 - Programmazione: Istruzioni C++
PDF
T3 esempio runtime
PDF
2006 Py01 intro
Pe t2 perl-caratteristiche
T6 codice
T4 tipizzazione
Pe t4 perl-oggetti
Py a6 python-database
06 - Programmazione: Scope Variabili
MS_corso base iOS iPhone_partI
01 - Programmazione: Dai Problemi ai Programmi
T8 supporti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
Pe a3 perl-metaprogramming
Python@Unina - Theory
2011.02.19 Introducing F#
Caratteristiche del linguaggio c
Corso Iphone in 48h
Scala: come recuperare la programmazione funzionale e perché
Introduzione a libavfilter
03 - Programmazione: Istruzioni C++
T3 esempio runtime
2006 Py01 intro
Ad

Viewers also liked (9)

PPT
UE week 2
PDF
T1 introduzione
PDF
Pe a1 perl-unit_testing
PDF
T5 memoria
PDF
T2 architettura
PPT
Corso Python Django
PDF
Pe a2 perl-documentazione
PDF
Py a1 python-unit_testing
PDF
9 - Architetture Software - SOA Cloud
UE week 2
T1 introduzione
Pe a1 perl-unit_testing
T5 memoria
T2 architettura
Corso Python Django
Pe a2 perl-documentazione
Py a1 python-unit_testing
9 - Architetture Software - SOA Cloud
Ad

Similar to T7 librerie (17)

PPT
Inferno Limbo Italian
PDF
C# Language Evolution
PDF
Vb.net
PDF
introduzione a symfony 2
PPS
Open xml
PPT
7 Sottoprogrammi
PDF
09 - Programmazione: Ingegneria del Codice
PPT
05 1 intro-struttura
PPT
PDF
Template
PDF
Clean programming 2020-01-25 @ Modena Tech Summit
PPTX
Programmazione funzionale: un primo approccio attraverso F#
PPTX
La notazione in informatica - esempi e concetti
PDF
Esercitazione 1 (27 febbraio 2012)
PDF
X-NERVal e Component NER
PDF
Lezione01
PDF
Lezione01
Inferno Limbo Italian
C# Language Evolution
Vb.net
introduzione a symfony 2
Open xml
7 Sottoprogrammi
09 - Programmazione: Ingegneria del Codice
05 1 intro-struttura
Template
Clean programming 2020-01-25 @ Modena Tech Summit
Programmazione funzionale: un primo approccio attraverso F#
La notazione in informatica - esempi e concetti
Esercitazione 1 (27 febbraio 2012)
X-NERVal e Component NER
Lezione01
Lezione01

More from Majong DevJfu (20)

PDF
8 - Architetture Software - Architecture centric processes
PDF
7 - Architetture Software - Software product line
PDF
6 - Architetture Software - Model transformation
PDF
5 - Architetture Software - Metamodelling and the Model Driven Architecture
PDF
4 - Architetture Software - Architecture Portfolio
PDF
3 - Architetture Software - Architectural styles
PDF
2 - Architetture Software - Software architecture
PDF
1 - Architetture Software - Software as a product
PDF
10 - Architetture Software - More architectural styles
PDF
PDF
PDF
4 (uml basic)
POT
Tmd template-sand
PPT
26 standards
PPT
25 architectural adaptation
8 - Architetture Software - Architecture centric processes
7 - Architetture Software - Software product line
6 - Architetture Software - Model transformation
5 - Architetture Software - Metamodelling and the Model Driven Architecture
4 - Architetture Software - Architecture Portfolio
3 - Architetture Software - Architectural styles
2 - Architetture Software - Software architecture
1 - Architetture Software - Software as a product
10 - Architetture Software - More architectural styles
4 (uml basic)
Tmd template-sand
26 standards
25 architectural adaptation

T7 librerie

  • 1. Programmazione modulare g Linguaggi dinamici – A.A. 2009/2010 1
  • 2. Introduzione T Modularità: suddivisione del programma in più unità funzionali (moduli) distinte T Tutti i linguaggi di programmazione forniscono un qualche supporto per rendere modulari i programmi T I linguaggi dinamici sono fortemente orientati li i di i i f t t i t ti verso la modularità T Quasi tutto è un oggetto (variabili, codice) T È semplice suddividere una funzionalità per classi e per gruppi di classi (pacchetti) T Librerie estese di moduli già pronti g p Linguaggi dinamici – A.A. 2009/2010 2
  • 3. Vantaggi della modularità T Organizzazione T Raggruppamento delle funzioni seguendo una funzioni, organizzazione ben precisa T Limitata d li Li it t duplicazione del codice i d l di T Ciascun modulo implementa una funzionalità ben b specifica ifi T Riuso del software T Se scritto bene (si legga: se astrae dalla logica del singolo programma), un modulo può essere riutilizzato in programmi molto diversi fra loro Linguaggi dinamici – A.A. 2009/2010 3
  • 4. Scope T Lo scope di un oggetto (variabile, funzione) è la parte di programma in cui l oggetto è l'oggetto direttamente accessibile T Variabili con stesso nome possono riferirsi a contenuti diversi in scope diversi T Classico esempio: variabile locale che Cl i i i bil l l h sovrascrive temporaneamente una variabile globale avente lo stesso nome Linguaggi dinamici – A.A. 2009/2010 4
  • 5. Scope Linguaggi dinamici – A.A. 2009/2010 5
  • 6. Scope T Quando il compilatore (o l'interprete) individuano il nome di una variabile, provano variabile ad associare ad essa il valore che le compete, usa do e ego e di usando le regole d scope T Si esamina innanzitutto l'ambiente locale (tipicamente, (tipicamente il blocco di codice in cui la variabile è definita) T Se non si trova una definizione, si applicano le definizione regole di scope T Scope statico S t ti T Scope dinamico Linguaggi dinamici – A.A. 2009/2010 6
  • 7. Scope statico T In un linguaggio basato su scope statico: T lo scope di una variabile è il blocco di codice in cui essa è definita T una variabile non l i bil locale viene cercata all'interno l i t ll'i t del blocco di codice in cui la procedura stessa è definita T La ricerca avviene tipicamente a tempo di compilazione, usando le regole del compilatore il i d l l d l il t T Lo scope statico viene anche chiamato scope lessicale per questo motivo l i l t ti T Esempio: C, Perl (dichiarazione my) Linguaggi dinamici – A.A. 2009/2010 7
  • 8. Scope dinamico T In un linguaggio basato su scope dinamico T lo scope di una variabile non è necessariamente solo il blocco di codice in cui essa è definita T una variabile non locale viene cercata nei vari i bil l l i t i i stack frame T La i L ricerca avviene tipicamente a tempo di i ti i t t esecuzione T Esempio: Perl (dichiarazione local) Linguaggi dinamici – A.A. 2009/2010 8
  • 9. Namespace T Il namespace è l'insieme delle variabili e delle funzioni visibili immediatamente dal punto del programma in cui ci si trova T Più variabili e funzioni si vedono, più aumenta vedono il rischio di collisioni fra i loro nomi T Si creano spiacevoli effetti collaterali i li ff tti ll t li T Diminuisce l'incapsulamento T Occorre un meccanismo per limitare tali effetti collaterali Linguaggi dinamici – A.A. 2009/2010 9
  • 10. Modulo software T Un modulo software è un file contenente la definizione di molteplici T Variabili T Funzioni F i i T Classi (con relativi metodi e attributi) T Idealmente, ciascun modulo contiene l'implementazione di un aspetto del software T Scheletro principale T Funzionalità di gestione T I/O T GUI Linguaggi dinamici – A.A. 2009/2010 10
  • 11. Package T Un package è un insieme di moduli software T A tutti i moduli del package è associato lo stesso namespace T Package diversi hanno namespace diversi e separati T Le variabili e le funzioni contenute in due namespace diversi non si vedono Linguaggi dinamici – A.A. 2009/2010 11
  • 12. Un esempio di package Il file ha il nome File: ModExample.pm del pacchetto package ModExample; p più l'estensione use strict; Nome del package sub randGreeting { b dG i File: demo.pl my (@greets) = #!/usr/bin/perl q ( qw(Hello Howdy WUZZUP); y ); return $greets[rand($#greets)]; use strict; } use ModExample; sub hello { print randGreeting() . ModExample::hello(); “from ModExample!n”; from ModExample!n ; } Invocazione del 1; metodo all'interno del namespace Linguaggi dinamici – A.A. 2009/2010 ModExample 12
  • 13. Naming degli oggetti T Per accedere ad una variabile o funzione di un namespace da un altro namespace occorre namespace, fare una delle seguenti due cose: T Costruire il nome completo dell oggetto che si dell'oggetto vuole referenziare, inteso come l'unione del namespace e dell'oggetto stesso all interno del dell oggetto all'interno namespace (ModExample::hello()) T Esportare la funzione all interno del namespace all'interno che la definisce; d'ora in poi la funzione si può chiamare con il suo nome (hello()) ( ()) Linguaggi dinamici – A.A. 2009/2010 13
  • 14. Best practice di design T Progettare innanzitutto l'API dei vari moduli T Scegliere cosa esportare agli altri moduli/package (sempre il minimo possibile) T Mai rendere esplicito l'uso di variabili nell'API T Usare sempre metodi get()/set() T Refactoring T Si copia ed incolla il codice da fonti esterne e/o si scrive codice T Il codice duplicato lo si fa diventare una subroutine p T Le subroutine duplicate le si fanno diventare moduli o package p g Linguaggi dinamici – A.A. 2009/2010 14
  • 15. Sviluppo per componenti pp p p Linguaggi dinamici – A.A. 2009/2010 15
  • 16. Introduzione T La totalità dei linguaggi dinamici moderni mette a disposizione un deposito (repository) di moduli e pacchetti per le operazioni più d spa ate disparate T Similitudine con la libreria del C per il linguaggio C T Nel caso dei linguaggi dinamici, l'insieme delle funzionalità esterne offerte è molto più grande T Circa 1000 funzioni nella glibc T Circa 20000 moduli negli archivi del Perl T Parafrasando Church e Turing: se riuscite a pensarlo, esiste come modulo! Linguaggi dinamici – A.A. 2009/2010 16
  • 17. Alcuni esempi di repository T Perl: http://www.cpan.org T Python: http://pypi python org/pypi/ http://pypi.python.org/pypi/ T Ruby: http://rubyforge.org/ T Questi repository (come gli altri, in generale) presentano le seguenti funzionalità: T Motore di ricerca (interfaccia Web) T Download di una versione recente del modulo T Documentazione del modulo T Elenco delle dipendenze del modulo Linguaggi dinamici – A.A. 2009/2010 17
  • 18. Uso dei moduli T Il pacchetto software del linguaggio mette a disposizione meccanismi per: T scaricare l'archivio sorgente di un modulo dal repository T compilare (se necessario) un modulo a partire dal suo archivio sorgente T verificare la funzionalità del modulo, tramite degli unit test T installare il modulo in una locazione ben precisa del file system (da dove potrà essere caricato, caricato qualora fosse importato) Linguaggi dinamici – A.A. 2009/2010 18
  • 19. Best practice di programmazione T Non si reinventa la ruota inutilmente! T Si resiste alla tentazione di riscrivere da zero (e di testare!) tonnellate di codice T Passi da seguire T Si suddivide il progetto in moduli software T Si cerca di individuare alcuni moduli nel repository T Si installano i moduli del repository T Si scrive quello che resta (se si è bravi e/o fortunati, solo lo scheletro!) Linguaggi dinamici – A.A. 2009/2010 19
  • 20. Best practice di programmazione T Vantaggi offerti T I moduli sono solitamente self contained self-contained, pertanto non ci si ripete inutilmente (principi DRY, DRY SPOT) T DRY (Don't Repeat Yourself): Every piece of knowledge must have a single unambiguous, single, unambiguous authoritative representation within a system T SinglePointOfTruth (SPOT) Linguaggi dinamici – A.A. 2009/2010 20
  • 21. Best practice di programmazione T Vantaggi offerti T I moduli sono già testati esaustivamente (dai programmatori e dagli altri utenti), pertanto la probabilità di immettere errori nel software si confina al software scritto da noi T I moduli sono scritti da persone spesso molto più competenti di noi, pertanto la qualità del software aumenta Linguaggi dinamici – A.A. 2009/2010 21