SlideShare a Scribd company logo
1 of 21
Download to read offline
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

What's hot

Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristicheMajong DevJfu
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope VariabiliMajong DevJfu
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMobileSchool
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai ProgrammiMajong DevJfu
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimentiMajong DevJfu
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingMajong DevJfu
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - TheoryNaLUG
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#Marco Parenzan
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48hFLT.lab
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
Introduzione a libavfilter
Introduzione a libavfilterIntroduzione a libavfilter
Introduzione a libavfilterStefano Sabatini
 
03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++Majong DevJfu
 

What's hot (20)

Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
 
T6 codice
T6 codiceT6 codice
T6 codice
 
T4 tipizzazione
T4 tipizzazioneT4 tipizzazione
T4 tipizzazione
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partI
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi
 
T8 supporti
T8 supportiT8 supporti
T8 supporti
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - Theory
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Introduzione a libavfilter
Introduzione a libavfilterIntroduzione a libavfilter
Introduzione a libavfilter
 
03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++03 - Programmazione: Istruzioni C++
03 - Programmazione: Istruzioni C++
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
2006 Py01 intro
2006 Py01 intro2006 Py01 intro
2006 Py01 intro
 

Viewers also liked

Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testingMajong DevJfu
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Djangobarmassimo
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazioneMajong DevJfu
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testingMajong DevJfu
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 

Viewers also liked (9)

UE week 2
UE week 2UE week 2
UE week 2
 
T1 introduzione
T1 introduzioneT1 introduzione
T1 introduzione
 
Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testing
 
T5 memoria
T5 memoriaT5 memoria
T5 memoria
 
T2 architettura
T2 architetturaT2 architettura
T2 architettura
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Django
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 

Similar to T7 librerie

09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del CodiceMajong DevJfu
 
Clean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech SummitClean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech SummitDavide Muzzarelli
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Commit University
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...Codemotion
 

Similar to T7 librerie (16)

Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
C# Language Evolution
C# Language EvolutionC# Language Evolution
C# Language Evolution
 
Vb.net
 Vb.net Vb.net
Vb.net
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Open xml
Open xmlOpen xml
Open xml
 
7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 
09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Template
TemplateTemplate
Template
 
Clean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech SummitClean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech Summit
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Lezione01
Lezione01Lezione01
Lezione01
 
Lezione01
Lezione01Lezione01
Lezione01
 
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - ...
 

More from Majong DevJfu

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processesMajong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product lineMajong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformationMajong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven ArchitectureMajong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture PortfolioMajong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural stylesMajong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architectureMajong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a productMajong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural stylesMajong DevJfu
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptationMajong DevJfu
 

More from Majong DevJfu (20)

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
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