T7 librerie

Date post:05-Jul-2015
Category:
View:390 times
Download:0 times
Share this document with a friend
Transcript:
  • 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 lii 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 prontig p Linguaggi dinamici A.A. 2009/20102 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 id 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 ii 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 St ti T Scope dinamicoLinguaggi dinamici A.A. 2009/20106 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 li bil locale viene cercata all'internol it 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 id ll d lil 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 varii bil l l itii stack frame T La i L ricerca avviene tipicamente a tempo diiti i tt 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 ili ff tti ll t li T Diminuisce l'incapsulamento T Occorre un meccanismo per limitare tali effetti collateraliLinguaggi dinamici A.A. 2009/20109 10. Modulo software T Un modulo software un file contenente la definizione di molteplici T Variabili T Funzioni Fi 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/201010 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 delpacchetto package ModExample; p pi l'estensione use strict;Nome del package sub randGreeting { bdGiFile: demo.pl my (@greets) =#!/usr/bin/perlq (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 ModExample12 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 sidell'oggetto vuole referenziare, inteso come l'unione del namespace e dell'oggetto stesso all interno deldell oggetto all'interno namespace (ModExample::hello()) T Esportare la funzione all interno del namespaceall'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 packagep gLinguaggi dinamici A.A. 2009/2010 14 15. Sviluppo per componenti pp p p Linguaggi dinamici A.A. 2009/201015 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, unambiguousauthoritative representation within a systemT 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/201021

Click here to load reader

Reader Image
Embed Size (px)
Recommended