T7 librerie

587 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
587
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

T7 librerie

  1. 1. Programmazione modulare g Linguaggi dinamici – A.A. 2009/2010 1
  2. 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. 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. 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. 5. Scope Linguaggi dinamici – A.A. 2009/2010 5
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 15. Sviluppo per componenti pp p p Linguaggi dinamici – A.A. 2009/2010 15
  16. 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. 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. 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. 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. 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. 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

×