Corso progettazione

  • 3,154 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,154
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
71
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Progettazione del software Giuseppe Dell'Abate
  • 2. Produzione del software  il programmatore ascolta le esigenze del cliente  il programmatore scrive il codice che soddisferà le varie esigenze
  • 3. questo approccio è valido se...  Il problema è molto semplice  Il cliente formuli il problema in modo chiaro  Il programmatore capisca esattamente cosa il cliente si aspetta  Il programmatore lavora senza la collaborazione di altri colleghi
  • 4. ma è inadatto quando...  le esigenze dei clienti sono aumentate  la complessità del problema è aumentata  un unico programmatore non era sufficiente per la completa produzione del software
  • 5. ...ed ecco cosa succede.
  • 6. Progettazione  Una indagine della Standish Group, basata su un campione di 28.000 progetti e pubblicata da Computer Weekly il 9 luglio 1998, fornisce questi risultati...  26% progetti riusciti  46% progetti chiusi con notevole ritardo sui tempi e/o costi imprevisti e/o funzionalità inadeguate  28% progetti falliti
  • 7. Triangolo di successo  Al fine di ottenere i risultati sperati si è individuato il così detto “triangolo di successo” 1. Stakeholder: persone che hanno un ruolo nel progetto software 2. Processi: insieme di attività e procedure organizzative 3. Modellazione: linguaggio per costruire modelli da discutere con i clienti e gli sviluppatori stakeholder processi modellazione
  • 8. 1-Stakeholder  Qualunque persona che influenza lo sviluppo del software  Clienti: utilizzatori o proprietari del sistema  Sviluppatori: analisti, progettisti, programmatori ecc
  • 9. Cause di fallimento legate al cliente  Le necessità dei clienti sono mal comprese o comprese insufficientemente  I requisiti dei clienti cambiano troppo frequentemente  I clienti non forniscono sufficienti risorse ai progetti  I clienti non vogliono cooperare con il team di sviluppo  I clienti hanno attese non realistiche  Il sistema non porta più benefici ai clienti
  • 10. Cause di fallimento legate allo sviluppo  Gli sviluppatori (analisti, progettisti, programmatori ecc) possono:  Non essere all'altezza delle attività  Non vengono adeguatamente motivati (economicamente e personalmente)  Non vengono seguite le loro necessità di formazione
  • 11. Quindi cosa possiamo fare ?  Assumere gli sviluppatori migliori  Fornire agli sviluppatori una formazione continua  Incoraggiare lo scambio di conoscenze tra gli sviluppatori al fine del sostegno reciproco  Motivare gli sviluppatori rimuovendo gli ostacoli e incanalando i loro sforzi in attività produttive  Offrire un ambiente di lavoro stimolante  Allineare gli obiettivi delle persone con quelli dell'organizzazione  Enfatizzare il lavoro di gruppo
  • 12. 2-Processo  Stabilire un processo di sviluppo del software che definisca le attività e le procedure organizzative per incrementare la collaborazione nel gruppo di sviluppo.  Stabilire un modello di processo che preveda:  Un ordine di esecuzione delle attività  Quando e quali elaborati dello sviluppo fornire  Le attività ed assegnare i compiti  I criteri per monitorare il progresso del processo per misurare i risultati
  • 13. Migliorare il processo  Occorre definire un modello da utilizzare per cercare di migliorare il processo di sviluppo software.  Modelli utilizzati:  CMM - Capability Maturity Model  ISO 9000 - International Organization for Standardization
  • 14. Capability Maturity Model  Definito dal Software Engineering Institute (SEI) presso la Carnegie Mellon University di Pittsburgh, USA, largamente usato in America dalle industrie IT  E' un modello per la valutazione del livello di maturità delle capacità aziendali.  E' realizzando partendo da un questionario che permette di assegnare uno dei cinque livelli del modello
  • 15. La scala verso l'eccellenza del software  Sono individuati 5 livelli di maturità: 1) Iniziale  situazione caotica, processi non predicibili e non disciplinati, dipendenti dal personale attualmente presente 1) Ripetibile  gestione del processo ripetibile, possibilità di prevedere tempi e costi per progetti simili 1) Definito  uso di metodi e strumenti per sviluppo e gestione del processo, i processi di gestione e ingegnerizzazione sono specificati e seguiti
  • 16. La scala verso l'eccellenza del software 4) Gestito  possibilità di valutazione del processo. Sono introdotte delle metriche per la valutazione e l controllo del processo 5) Ottimizzato  miglioramento continuo del processo. E' resa fattibile l'evoluzione permanente del processo  Sono necessari anni per progredire di un livello nella scala della maturità
  • 17. Domande di esempio del questionario  E' presente un processo formale per la verifica del software?  E' presente una procedura formale per determinare le tempistiche di sviluppo del software?  Esistono procedure formali per stimare il costo di sviluppo del software?  Sono raccolte le statistiche sugli errori nel codice e sui test?  E' presente un meccanismo per controllare le modifiche dei requisiti del software?
  • 18. ISO 9000  Le norme della famiglia ISO 9000 danno indicazioni su come una azienda deve operare per poter fornire un prodotto o un servizio di qualità, cioé rispondente a quanto richiesto dal cliente.  La certificazione secondo questa famiglia di norme é una certificazione di sistema e NON di prodotto, cioé non viene certificato il bene o il servizio, ma il sistema di gestione dell'azienda.
  • 19. ISO 9000  Questa famiglia di norme fornisce indicazioni organizzative, per questo si adatta a diversi settori di attività  Con questa certificazione il cliente ha una certa sicurezza che l'azienda certificata fornirà quanto richiesto.  La certificazione é fondamentalmente un esame a cui l'azienda si sottopone per poter avere una dichiarazione rilasciata da parte di un ente terzo specializzato, questo ente si chiama Organismo di Certificazione.
  • 20. ISO 9000  Il certificato che viene rilasciato é la dichiarazione che l'azienda adotta un sistema di regole, responsabilità, controlli, ecc... conforme alla famiglia di norme ISO 9000.  Solo gli Organismi accreditati presso un Ente di Accreditamento riconosciuto possono rilasciare certificati di conformità alla ISO 9000.
  • 21. Modellazione  Gli sviluppatori hanno bisogno di un linguaggio per costruire modelli da discutere con i clienti  Il modello deve prevedere vari livelli di astrazione in modo da presentare le soluzioni a vari livelli di dettaglio  Gli sviluppatori hanno bisogno di strumenti CASE (Computer-Assisted Software Engineering) per memorizzare i modelli, visualizzarli e manipolarli  Il CASE prevede la creazione di uno scheletro del codice che deve essere implementato dagli sviluppatori
  • 22. Qualità di un modello  Accuratezza:  deve descrivere il sistema correttamente, completamente e senza ambiguità;  Consistenza:  le diverse viste devono completarsi vicendevolmente per formare un insieme coerente  Semplicità:  deve poter essere compreso, senza troppi problemi, da persone estranee al processo di modellazione;  Manutenibilità:  la variazione dello stesso deve essere la più semplice possibile.
  • 23. Pianificazione di sistema
  • 24. Pianificazione di sistema  Al fine del raggiungimento dell’obiettivo di business, occorre pianificare il sistema.  Pianificare significa: identificare, classificare, selezionare, sviluppare e migliorare un progetto.  Le piccole organizzazione hanno un obiettivo di business influenzato dal mercato che impone continue modifiche  Le grandi organizzazioni sono obbligate a fissare degli obiettivi di business e si ritrovano ad influenzare il mercato che ha una durata di lungo periodo.
  • 25. Pianificazione di sistema  La pianificazione può essere fatta utilizzando vari approcci:  SWOT : Strengths, Weaknesses, Opportunities, Threads  VCM : Value Chain Model  BPR : Business Process Reenginering  ISA : Information System Architecture  Fare le cose in modo efficace e non necessariamente in modo efficiente
  • 26. Approccio SWOT  Modello top-down (Albert Humphrey 1965)  Definire i punti di forza e di debolezza interna dell’azienda  Definizione delle opportunità del mercato e dei suoi pericoli  Definire la “mission aziendale” ossia la ragion d’essere.  Es.: Microsoft “consentire a persone e organizzazioni di tutto il mondo di realizzare il proprio potenziale”
  • 27. Approccio SWOT  Definire la “vision aziendale” ossia lo scenario futuro che rispecchia gli ideali, i valori e le aspirazioni  Es.: Microsoft “Un personal computer su ogni scrivania, e ogni computer con un software Microsoft installato”
  • 28. Approccio VCM  Analizzare l’intero sequenza delle attività al fine di individuare gli anelli forti e deboli dell’organizzazione (Porter 1985)  Attività primarie, creano o aggiungono valore al prodotto finale:  Logistica in ingresso  Operazioni  Logistica in uscita  Vendita e marketing  Servizi
  • 29. Approccio VCM  Attività secondarie, non aggiungono valore ma sono necessarie  Amministrazione e infrastruttura  Gestione delle risorse umane  Ricerca e sviluppo
  • 30. Approccio BPR  Per adattarsi velocemente alla variazione del mercato occorre modificare l’organizzazione aziendale (Hammer e Champy 1993).  Bisogna passare:  da una organizzazione “verticale” basata su funzioni, gerarchie, prodotti e servizi  ad una organizzazione “orizzontale” basata sui processi di business  Occorre definire:  un responsabile di processo  un workflow per implementazione e controllo
  • 31. Approccio ISA  Modello bottom-up (Zachman 1987)  Schema architetturale neutrale che permette di descrivere l’intero sistema  E’ rappresentato attraverso una griglia composta da  prospettive  descrizioni
  • 32. Approccio ISA  Le prospettive sono costituite dagli attori di un Sistema Informativo  Pianificatore: definisce lo scopo  Responsabile: definisce il modello concettuale  Progettista: definisce il modello fisico  Programmatore: definisce la soluzione  Sottocontraente: fornisce i componenti
  • 33. Approccio ISA  Descrizioni, servono per definire le caratteristiche del sistema:  Composizione dei dati  Descrivere i processi di business  I componenti del processi dove si posiziona  Chi usa i componenti  In che modo vengono usati
  • 34. Metodologia di sviluppo
  • 35. Metodologia di sviluppo  La metodologia serve per specificare:  quale linguaggio utilizzare per descrivere il lavoro progettuale  quali sono i passi necessari per raggiungerlo.  Tipi di Metodologie  pesante: waterfall  iterativa: spirale  leggera: extreme programming
  • 36. Waterfall - “A cascata”  Big Design Up Front (BDUF)  Suddivisione del progetto in grosse fasi:  Studio di fattibilità  Analisi dei requisiti  Progettazione  Sviluppo  Test/Collaudo  Delivery  Maintenance
  • 37. Studio di fattibilità  Valuta la convenienza dell'applicazione  costi/benefici ( risorse richieste, costi, tempi )  Punti salienti:  Definizione del contesto e del problema  Soluzioni, alternative e relativi vantaggi  Offerta al Cliente
  • 38. Analisi dei requisiti  Definizione dei dettagli (funzionali e non ) della specifica sulla base dello studio di fattibilità  Problemi:  Assenza di linguaggio comune tra gli attori (ambigui, incompleti)  Requisiti spesso poco chiari
  • 39. Progettazione  Definire l’architettura del sistema  Strutturato in componenti: sottosistemi e moduli  Descrive le relazioni fra componenti, e cosa fa ciascuno, non come la fa  Problemi:  Si devono prendere molte decisioni  Non tutte le strutture sono uguali  Una cattiva architettura per un palazzo non puo’ essere compensato da una buona costruzione
  • 40. Sviluppo  Implementare i moduli  Problemi:  tempi, costi e competenze degli sviluppatori
  • 41. Testing  Unit testing  Module testing  Sub-system testing  System testing  Acceptance testing = alfa-testing  beta-testing
  • 42. Maintenance  Manutenzione 60% dei costi di sviluppo  Possiamo distinguerla in 3 tipologie:  Correttiva: rimuovere errori (20%)  Adattiva: adattare l’applicazione a cambi nell’ambiente in cui il sistema ‘gira’ (20%)  Perfettiva: migliorare, cambiare, aggiungere qualita’ o funzioni (60%)
  • 43. Requisiti  Requisiti  Definizione degli obiettivi  Linearita del processo  Rigidita degli stadi
  • 44. Pregi e Difetti  Pregi  Controllo dello stadio di lavorazione (SAL)  Problematiche specifiche x singole fasi  Fasi indipendenti ed autonome  Difetti  Formalismo documentale  Flussi di ritorno non gestibili (es: modifica requisiti)  Mancanza di interazione
  • 45. Spirale  Il progetto viene diviso per sottoinsiemi di funzionalità che vengono incrementati per periodo temporali.  Scomposizione:  la complessita' viene risolta procedendo per piccoli passi.  Incrementalità:  I cambiamenti possono essere integrati senza impatti.
  • 46. Spirale  Parzialità:  un uso parziale del software e non aspettare la fine.  Iteratività:  Possibile avere feed-back dal client e fare integrazioni.  Parallelità:  L'attivita' puo' essere svolta da gruppi diversi su sottosistemi diversi .
  • 47. Requisiti – Pregi - Difetti  Requisiti  Elasticità di tempi e costi  Pregi  Linearità ciclica  Comunicazione interna  Ridotto formalismo documentale  Difetti:  Effetto farfalla: fare continui test di regressione e refactoring  Tempi impredicibili
  • 48. Metodi Agili  Metodi agili:  Extreme Programming (Kent Beck, Ward Cunningham e Ron Jeffries)  Scrum  Feature Driven Development (FDD)  Crystal  DSDM (Dynamic Systems Development Method)  Orientati:  alle persone e alle loro qualita'  ai fattori sociali e relazionali  sono poco cerimoniosi (documentazione, blueprint)
  • 49. I 4 requisiti 1) Comunicazione tutti possono parlare con tutti, persino l'ultimo dei programmatori con il cliente 1) Semplicità gli analisti mantengano la descrizione formale il più semplice e chiara possibile 1) Feedback sin dal primo giorno si testa il codice 1) Coraggio si dà in uso il sistema il prima possibile e si implementano i cambiamenti richiesti man mano
  • 50. Le 12 regole di Extreme Programming 1) Progettare con il cliente; 2) Test funzionali e unitari; 3) Refactoring  riscrivere il codice senza alterarne le funzionalità esterne 1) Progettare al minimo; 2) Descrivere il sistema con una metafora, anche per la descrizione formale; 3) Proprietà del codice collettiva  contribuisce alla stesura chiunque sia coinvolto nel progetto
  • 51. Le 12 regole di Extreme Programming 7) Scegliere ed utilizzare un preciso standard di scrittura del codice; 8) Integrare continuamente i cambiamenti al codice; 9) Il cliente deve essere presente e disponibile a verificare  sono consigliate riunioni settimanali 7) Open Workspace; 8) 40 ore di lavoro settimanali; 9) Pair Programming  due programmatori lavorano insieme su un solo computer
  • 52. Quindi come pianifichiamo ?  Predittiva  Conoscenta anticipata di requisiti, tempi, costi, risorse  Adattativa  Impossibilità reale di avere delle informazioni in tempi non ancora maturi oppure inevitabilmente cambieranno
  • 53. Progettazione  I progetti software sono differenti per molti motivi:  la tipologia di sistema che devi sviluppare  la tecnologia da usare  la dimensione e la distribuzione del team  le conseguenze del fallimento  lo stile di lavoro del team  la cultura dell'organizzazione
  • 54. UML Unified Modeling Language
  • 55. Cos'è UML ?  UML ( Unified Modeling Language) è un linguaggio standard di modellazione visuale per specificare, visualizzare, costruire e documentare domini applicativi eterogenei, adatto maggiormente a progettare sistemi object-oriented e sistemi component-based.
  • 56. UML è un linguaggio…  UML è un linguaggio pertanto costituito da sintassi e semantica  sintassi: regole attraverso le quali gli elementi del linguaggio (parole) sono assemblate in espressioni (frasi).  semantica: regole attraverso le quali alle espressioni sintattiche viene assegnato un significato.
  • 57. UML non è una metodologia!  La metodologia serve per specificare:  quale linguaggio di modellazione utilizzare per descrivere il lavoro progettuale  quali sono i passi necessari per raggiungerlo.
  • 58. UML non è un processo!  Il processo è un insieme di regole che definiscono come un progetto di sviluppo dovrebbe essere condotto.  Include una descrizione e sequenzializzazione delle attività, documenti e modelli.
  • 59. UML è un linguaggio standard...  Per standard si intende:  una base di riferimento, un paradigma codificato  per la produzione di tecnologie fra loro compatibili e interoperabili  riferiti ad hardware, software o infrastrutture di rete.
  • 60. Come si arriva allo standard? E chi contribuisce ad UML?  UML è definito:  sotto l'egidia dell'OMG (Object Management Group)  a partire dal contributo dei “Tre Amigos” (Grady Booch, Jim Rumbaugh e Ivar Jacobson)  ed il supporto delle più importanti società di software mondiali
  • 61. “Method wars”  Metodi Storici  SADT: Structured Analysis and Development Technique  DFD: Data Flow Diagram  IDEF0: Integration Definition for Function Modeling
  • 62. “Tre Amigos”  Tre Amigos  Grady Booch: Object Oriented Design – OOD  James Rumbaugh: Object Modeling Technique - OMT  Ivar Jacobson: Object-Oriented Software Engineering - OOSE
  • 63. Storia di UML  Booch e Rumbaugh lavoravano alla Rational  1994 Unified Object Notation v0.8  Jacobson capo di Objectory che nel 1995 fu acquistata dalla Rational  1995 Unified Modeling Language v0.9  Booch e Rumbaugh e Jacobson crearono consorzio “UML Partners” e redassero UML v1.0
  • 64. Storia di UML  Microsoft, HP, Oracle, Rational ed altri crearono consorzio “OMG”  novembre 1997 versione v1.1  dicembre 1998: versione 1.2  giugno 1999: versione 1.3  maggio 2001: versione 1.4  marzo 2003: versione 1.5  agosto 2005 : versione 2.0  ottobre 2006: versione 2.1
  • 65. UML è un linguaggio standard di modellazione...  Modellare significa descrivere un sistema in termini di:  entità coinvolte  relazioni esisteni tra di loro  Esempio:  Diagrammi di flusso  UML  Diagrammi Entita-Relazione
  • 66. Qualità di un modello  Accuratezza:  deve descrivere il sistema correttamente, completamente e senza ambiguità;  Consistenza:  le diverse viste devono completarsi vicendevolmente per formare un insieme coerente  Semplicità:  deve poter essere compreso, senza troppi problemi, da persone estranee al processo di modellazione;  Manutenibilità:  la variazione dello stesso deve essere la più semplice possibile.
  • 67. UML è un linguaggio standard di modellazione visuale...  Per quale motivo è utile un approccio visuale alla progettazione?  chi progetta un qualsiasi tipo di costruzione o artefatto utilizza sempre figure, schemi, diagrammi per svolgere la propria attività:  ingegneri, architetti, ma anche stilisti utilizzano diagrammi e figure per visualizzare i propri progetti  anche i progettisti e gli analisti di sistemi informativi utilizzano figure e diagrammi per visualizzare il risultato del loro lavoro.
  • 68. Perchè visuale?  Sintesi a “colpo d'occhio”  Visione delle entità coinvolte  Visione delle Relazioni  Visione delle Comportamenti
  • 69. Approccio ad UML 1) Abbozzo 2) Progetto 3) Linguaggio
  • 70. Approccio ad UML  UML come abbozzo (sketch)  Documentazione, discussione e condivisione delle idee  Bassa, se non nulla dipendenza dal tool di modellazione  Selettività: focalizzazione solo su alcuni aspetti dell’applicazione  Basso rigore formale
  • 71. Approccio ad UML  UML come progetto (blueprint)  Forward e reverse engineering  Forte dipendenza dal tool di modellazione  Alto rigore formale  Completezza
  • 72. Approccio ad UML  UML come linguaggio di programmazione  Diagrammi compilabili  No forward e reverse engineering  Fortissima dipendenza dal tool di modellazione
  • 73. ...specificare, visualizzare, costruire e documentare...  Specificare  Dettagli di implementazione  Visualizzare  Un immagine è meglio di 100 parole  Costruire  Idee, pensieri  Documentare  Interazione con gruppi esterni
  • 74. ...domini applicativi eterogenei...  Dominio eterogenei  sanita, finanza, tlc, aereospazio  indipendentemente dalla piattaforma  Sistema:  una singola organizzazione vista nella sua globalità (es. azienda)  una parte di un’organizzazione (es. divisione, oppure processo)  un insieme di organizzazioni, o di parti di organizzazioni, in relazione tra loro (es. processi di interazione Business-to-Business)
  • 75. ...adatto maggiormente a progettare sistemi object-oriented...  I concetti OO si sono sviluppati dal 1970 attraverso diversi linguaggi di programmazione C++, Smalltalk, Java, Eiffel.  Il paradigma ad oggetti è basato su 3 principi:  Incapsulamento  Generalizzazione  Poliformismo
  • 76. Incapsulamento  Permette di nascondere la complessita' sulla base dell'information hiding  Le informazioni vengono esposte o impostate senza dover conoscere la logica implementativa.  Gestire meglio i cambiamenti centralizzando l'implementazione in un unico punto.
  • 77. Generalizzazione Specializzazione  Permette di poter specializzare il comportamento di un oggetto ereditando le caratteristiche di un oggetto padre, senza dover riscrivere la logica.  Permette di gestire:  i cambiamenti  la complessita'  il riuso  propagare i cambiamenti su tutti i figli
  • 78. Polimorfismo  Molti modi per fare la stessa cosa  Combinando la generalizzazione, la specializzazione e l'incapsulamento è possibile definire un oggetto generico e decidere a Run-time quale oggetto specializzato utilizzare sulla base dell'incapsulamento.
  • 79. ...e sistemi component- based.  I quattro “dogmi” della modularizzazione sono:  Alta coesione (omogeneità interna)  Basso accoppiamento (indipendenza da altri moduli)  Interfacciamento esplicito (chiare modalità d’uso)  Information hiding (poco rumore nella comunicazione)
  • 80. ...e sistemi component- based.  Il PC che stiamo utilizzando ne è un esempio...  Di cosa parliamo?  Componenti riutilizzabili  Dividere la logica dall'interfaccia  Utilizzare uno standard di comunicazione(esempio: CORBA, COM ecc...)
  • 81. Diagrammi UML
  • 82. Diagrammi UML  Classica suddivisione dei diagrammi UML  Strutturali: come è composto il sistema ( package, object, deployment, class, composite, component )  Comportamentali: come interagisce sistema (activity, use-case, state-machine )  Interattivi: che messaggi si scambia il sistema ( overview, sequence, timing, comunication )
  • 83. Diagrammi UML
  • 84. Diagrammi UML UML 1.x  UML 2.x  Class diagram  Class diagram  Object diagram  Object diagram  Deployment diagram  Deployment diagram  Component diagram uguali  Component diagram  Package diagram  Package diagram  Activity diagram  Activity diagram  Use case diagram  Use case diagram  Sequence diagram  Sequence diagram  Comunication diagram  Collaboration diagram  State Chart diagram State Machine diagram modificati   Overview diagram  Timing diagram nuovi  Composite structure diagram
  • 85. Class Diagram  Consentono di descrivere tipi di entità, con le loro caratteristiche e le eventuali relazioni fra questi tipi.  Concetti di: classe, associazione, dipendenze, generalizzazione.
  • 86. Object Diagram  Consentono di descrivere un sistema in termini di oggetti e relative relazioni.  Concetti di: oggetto, relazione.
  • 87. Deployment Diagram  Consentono di descrivere un sistema in termini di risorse hardware detti nodi, e di relazioni fra di esse.  Spesso si combina con le componenti software per mostrare dove sono distribuite (Component Diagram).  Concetti di: nodo, connessione.
  • 88. Component Diagram  Consentono di descrivere l'organizzazione e le dipendenze tra componenti software.  Concetti di: componente, interfaccia.
  • 89. Package Diagram  Consentono di mostrare l'organizzazione dei packages e dei loro elementi.  Concetti di: package, merge, import, nested.
  • 90. Sequence Diagram  Consentono di mostrare il comportamento dinamico di un gruppo di oggetti che interagiscono.  Concetti di: entità, messaggi.
  • 91. Activity Diagram  Consentono di rappresentare la logica interna di un processo.  Concetti di: attività, flusso, responsabilità.
  • 92. Use Case Diagram  Consentono la descrizione delle funzioni o servizi offerti da un sistema, così come sono percepiti e utilizzati dagli attori che interagiscono col sistema stesso.  Concetti di: sistema, attore, caso, associazioni.
  • 93. Collaboration Diagram  Consentono la descrizione dell'interazione fra più oggetti ed i messaggi scambiati, focalizzandosi sugli oggetti e non sul tempo.  Concetti di: oggetti, messaggi.
  • 94. State Machine Diagram  Consentono la descrizione del comportamento di entità o di classi in termini di stato.  Concetti di: stato, transizione.
  • 95. Overview Diagram  Fornisce una visione complessiva delle interazioni che cooperano in un flusso molto simile a quella di un diagramma di attività  Concetti di: oggetto, relazione.
  • 96. Timing Diagram  Mostra le interazione tra gli oggetti ed il loro cambiamento di stato in un dato periodo di tempo.  Concetti di: oggetto, relazione, tempo.
  • 97. Composite-structure Diagram  Mostra i sottosistemi che compongono il sistema  Concetti di: parte, connettore, porte.
  • 98. UML 2.0 UML 2 è distribuito dall' OMG in 4 specifiche 1) Diagram Interchange Specification  layout dello schema con strumenti diversi (xmi) 1) UML Infrastructure  definisce il core dell'uml, cio' il metamodello utilizzato 1) UML Superstructure  definizione formale degli elementi uml, utilizzata dai tool dei vendor e definisce in dettaglio i diagrammi utilizzati 1) Object Constraint Language (OCL)  definisce le regole e le logiche da utilizzare. Ha una sintassi e delle parole chiavi.
  • 99. Computer Aided Software Engineering ( CASE )  Tool di modellazione  Supporto alla creazione dei diagrammi e validazione  Ricerca tra i mille modelli creati  Generazione del codice  Supporto a diversi linguaggi di programmazione, DDL, DML  Reverse engineering  Supporto all'analisi partendo dal codice  UML 1.x – 2.x  Supporto alle versioni
  • 100. CASE  Rose; Rational Modeler ed  Real-time Studio(ARTiSAN) Architect (IBM - Rational)  OMONDO EclipseUML Studio  Together (Borland) (open source)  Visio (Microsoft)  PathMATE (Pathfinder Solutions)  TAU (Telelogic)  Metis with UML 2.0 Template  Objecteering (Softeam) (Computas)  Poseidon (Gentleware)  Describe (Embarcadero)  Enterprise Architect (Sparx  I-Logix Rhapsody Systems)  MetaMatrix MetaBase Modeler  Magic Draw (No Magic) (Tibco)  ArgoUML (open source)  Java Studio Enterprise (Sun  StarUML (open source) Microsystems)  UModel 2005 (Altova)  Model-in-Action (Mia Software)  TAU Developer and TAU  Pattern Weaver Ver. 2.0 Architect (Telelogic)  EDGE UML Suite (Mentor  Jude (open-source) Graphics)  InnovatorAOX 2006 Object eXcellence (MID)
  • 101. Sistema di elaborazione
  • 102. Sistema di elaborazione  Il termine sistema di elaborazione(SE) indica solitamente un dispositivo in grado di eseguire una serie di operazioni a seguito di comandi impartiti dall’utente  Un sistema di elaborazione è dotato di una serie dispositivi che gli permettono di comunicare con “il mondo esterno”, ricevendo dati e comandi e trasmettendo all’esterno i risultati delle sue elaborazioni
  • 103. Sistema di elaborazione  Nel senso più generale del termine un sistema di elaborazione è caratterizzato da due parti:  l’hardware che è l’insieme delle parti elettroniche e meccaniche del sistema  il software che è l’insieme dei programmi che possono essere eseguiti dal sistema  Il seguente diagramma (“struttura a cipolla”) schematizza i livelli di un sistema di elaborazione:
  • 104. Sistemi di elaborazione Classificazione  I sistemi di elaborazione sono usualmente classificati nelle seguenti categorie:  super computer: sistemi multiutente e multiprocessore, utilizzati per il calcolo scientifico intensivo (es. previsioni meteorologiche) costo: > 10 MLD  mainframe: sistemi multiutente di fascia alta (> 100 utenti), potenza di calcolo elevata, costo: 1-10 MLD  mini computer e super-mini: sistemi multiutente di fascia media, media potenza, costo: 100-1000 MIL
  • 105. Sistemi di elaborazione Classificazione continuo…  microcomputer super-micro: sistemi multiutente di fascia bassa, costo: 10-100 MIL  workstation: calcolatori in genere mono- utente dotati di dispositivi e software di qualità superiore, costo: 10-100 MIL  personal computer: calcolatori personali di piccole dimensioni, economici e mono-utente, costo: 1-10 MIL  laptop e notebook:personal computer di ridotte dimensioni al fine di renderli trasportabili
  • 106. Sistemi di elaborazione Classificazione continuo…  palmtop: personal computer di ridotta potenza utilizzati come agende elettroniche  home computer: calcolatori di bassa potenza e molto essenziali (il video è un televisore, es. Commodore 64)  console: evoluzione dei precedenti, dedicati esclusivamente all’uso ludico
  • 107. Sistema di elaborazione Architettura  Non è possibile identificare un unico schema fisico (realizzativo) dell’architettura interna di un sistema di elaborazione, in quanto questa può variare notevolmente  E’ invece possibile identificare uno schema logico di massima che si adatta abbastanza bene per descrivere l’architettura della maggior parte dei SE attuali
  • 108. Sistema di elaborazione Hardware  CPU  Memoria RAM  Scheda Video  Periferiche I/O  BUS di sistema
  • 109. Sistemi di elaborazione Principi di funzionamento  In generale, un’istruzione specifica una serie di operazioni elementari da svolgere e quali dati devono essere considerati  Un programma è una sequenza di istruzioni usata per risolvere un determinato problema  Il programma indica quali sono le operazioni da svolgere e la CPU le esegue  Nei primi calcolatori le istruzioni venivano inserite in modo meccanico, ad esempio, mediante schede perforate
  • 110. Sistemi di elaborazione Principi di funzionamento  La parte della CPU che permette di “distinguere” tra dati e istruzioni si chiama Program Counter (PC)  Il Program Counter è un registro che contiene l’indirizzo della locazione di memoria nella quale è memorizzata la prossima istruzione da eseguire  Le locazioni che seguono possono contenere dati su cui operare, indirizzi di memoria contenenti dati oppure altre istruzioni
  • 111. Sistemi di elaborazione Principi di funzionamento  Il calcolatore, comunque, è a conoscenza della lunghezza dell’istruzione che sta eseguendo. Questo gli permette di aggiornare il Program Counter in modo che contenga sempre l’indirizzo di memoria della prossima istruzione da eseguire  Il concepire i dati al pari delle istruzioni come sequenze di bit presenta il vantaggio di avere un’unica memoria (e non una per i dati e una per le istruzioni)
  • 112. Sistemi di elaborazione Principi di funzionamento  All’accensione del calcolatore, il Program Counter contiene sempre un indirizzo di memoria ROM prestabilito (solitamente la cella all’indirizzo 0)  A partire da questa locazione di memoria vi è il programma che inizializza la macchina e i dispositivi e fa sì che il sistema operativo venga caricato in memoria dal disco  La fase di caricamento di questo programma viene detta “bootstrap”
  • 113. Sistemi di elaborazione Ciclo macchina  La CPU conosce la posizione in memoria (l’indirizzo) della prossima istruzione da eseguire: è memorizzato nel Program Counter  Fase di fetch  L’indirizzo di cui sopra viene messo dalla CPU sull’address bus  La memoria riceve l’indirizzo e mette sul data bus il contenuto della locazione indicata  La CPU legge il dato dal data bus e lo mette nel registro delle istruzioni
  • 114. Sistemi di elaborazione Ciclo macchina  Fase di decode  La CPU esamina il contenuto del registro delle istruzioni (IR) e riconosce qual è l’istruzione che deve essere eseguita  Fase di execute  La CPU manda ai vari dispositivi (ALU inclusa) i comandi per eseguire l’istruzione indicata
  • 115. Sistemi di elaborazione Ciclo macchina  Se l’istruzione ha più di 1 parte, le successive sono i dati su cui operare  I dati possono essere:  dei valori veri e propri  gli indirizzi di memoria dei valori  In quest’ultimo caso la fase di fetch è più complessa in quanto la CPU dovrà:  mettere sull’address bus gli indirizzi degli operandi  leggere dal data bus gli operandi  Quando la CPU dispone di tutti gli operandi può finalmente eseguire l’istruzione
  • 116. CPU - Central Processing Unit  La CPU (Central Processing Unit) è il “cervello” del sistema;  E’ la componente che è in grado di eseguire i programmi, fare i calcoli oltre a controllare le altre componenti del sistema  E’ l’unità di elaborazione delle istruzioni prelevate dalla memoria centrale
  • 117. CPU - Central Processing Unit Unita elementati  Composta da unita elementari:  Unità di controllo (CU)  Unità logico-aritmetica (ALU)  Registri (R)  Unità di virgola mobile ( FPU )  Unita di gestione della memoria ( MMU )
  • 118. CPU - Central Processing Unit Unita elementati  Unità di controllo (CU)  preposta alla organizzazione della sequenza di attività ,  ha il compito di coordinare l’attività interna della CPU stessa con quella di tutte le altre componenti del sistema  Unità logico-aritmetica (ALU)  Predisposta alle operazioni logiche (somma, divisione, condizioni, iterazioni)
  • 119. CPU - Central Processing Unit Unita elementati  Registri  Predisposti a contenere informazioni, ad accesso rapido, recuperate nella memoria centrale o frutto di elaborazione  Unità di virgola mobile ( FPU )  Preposta ad eseguire calcolo in virgola mobile  Unita di gestione della memoria ( MMU )  Preposta a mappare la memoria virtuale in fisica, al supporto di protezione della memoria ed alla gestione della memoria virtuale
  • 120. CPU - Central Processing Unit Registri  La CPU mantiene al suo interno le informazioni da elaborare in appositi “contenitori” chiamati registri  Il motivo per cui il processore mantiene, se possibile, le informazioni al suo interno è quello di aumentare la velocità di esecuzione: non deve andare a cercare i dati in memoria
  • 121. CPU - Central Processing Unit Registri  Alcuni registri possono avere un compito specifico mentre altri possono essere generici  Contatori di programma (PC)  Registro di istruzione (IR)  Registri generali (R)  Registri di stato (SR)  Registro di indirizzi della memoria (MAR)  Registri dati della memoria (MDR)
  • 122. CPU - Central Processing Unit Registri  Contatori di programma (PC)  contiene l’indirizzo dell’istruzione da eseguire in un dato istante  Registro di istruzione (IR)  contiene l’istruzione elementare da eseguire  Registri generali (R)  contengono informazioni di accesso rapido
  • 123. CPU - Central Processing Unit Registri  Registri di stato (SR)  Contengono informazioni riguardo lo stato del processore, l’istruzione da eseguire, le condizioni particolari e le azioni da intraprendere per gestirle  Registro di indirizzi della memoria (MAR)  Contiene i puntatori ai registri della memoria utilizzati in I/O  Registri dati della memoria (MDR)  Contiene i dati trasferiti o da trasferire nella memoria
  • 124. CPU - Central Processing Unit Schema a blocchi Unità di controllo Unità aritmetico –logica ( UC ) ( ALU ) Memoria Centrale Registri generali Contatore di programma Registro dei dati (R) ( PC ) della memoria …. ( MDR ) R0 R1 R2 Registro di istruzione …. ( IR ) Rn Registro di indirizzo della memoria ( MAR ) Bus Registro di Stato ( SR )
  • 125. CPU - Central Processing Unit La velocità di elaborazione  La velocità di elaborazione dipende da più fattori, tra i quali:  l’architettura dell’elaboratore  presenza di molti o pochi registri  componenti più o meno veloci  il programma eseguito  alcune CPU sono particolarmente veloci ad elaborare valori interi  la frequenza del segnale di clock  il clock è il segnale di sincronizzazione di tutto il sistema, più è alta la frequenza più è veloce il sistema
  • 126. CPU - Central Processing Unit La velocità di elaborazione  La CPU è in grado di eseguire un’istruzione (in media) ogni “n” colpi di clock  La frequenza “f” del clock si misura in MHz  La velocità di esecuzione delle istruzioni si misura in “MIPS” (Million Instructions Per Second)  Il numero di istruzioni eseguite per secondo sarà allora: MIPS=f / n  Esempio  CPU con f = 100 MHz e in media 1 istruzione ogni 2 colpi di clock: allora 100/2 = 50 MIPS
  • 127. Memoria  I programmi, per essere eseguiti, devono essere presenti nel sistema di elaborazione, ovvero memorizzati in componenti dette memorie  Le memorie sono dei contenitori di informazioni (istruzioni e dati) a cui il processore può accedere al fine dell’elaborazione.  Poiché l’informazione elementare comprensibile da un calcolatore è il bit, le memorie contengono un certo numero di celle(variabile a seconda della dimensione della memoria) ognuna delle quali può contenere un bit, l’unione di otto celle consecutive è detta byte
  • 128. Memoria  Quando la CPU fa riferimento ad una cella si dice che la “indirizza”, ovvero la identifica con un “nome” numerico univoco tra tutte le celle  Questo è il motivo per cui si parla di indirizzi di memoria  In realtà la CPU, per motivi di efficienza, non accede mai ad una singola cella (bit) alla volta, ma a multipli di m byte: locazione  Ad ogni indirizzo di memoria corrispondono m byte, ossia 1 locazione
  • 129. Memoria  La CPU comunica alla memoria l’indirizzo della locazione che intende leggere o scrivere per mezzo dell’address bus (bus degli indirizzi)  Il trasferimento dei dati dalla CPU alla memoria e viceversa avviene tramite il data bus  La dimensione (il numero di fili) del data bus indica il parallelismo della memoria:  se il data bus ha 8 fili significa che si può scrivere o leggere dalla memoria un byte alla volta  se il data bus ha 16 bit possono essere effettuate operazioni di lettura e scrittura della memoria che coinvolgono 2 byte
  • 130. Tipo di Memoria  Le memorie si dividono in due categorie principali:  RAM  ROM
  • 131. Memoria RAM  Le memorie RAM (Random Access Memory)  possono essere scritte e lette un numero illimitato di volte  sono dette volatili in quanto se il sistema viene spento il loro contenuto viene perso
  • 132. Memoria ROM  Le memorie ROM (Read Only Memory)  scritte una volta sola dal costruttore  i dati non sono persi togliendo l’alimentazione (non sono “volatili”)  possono essere lette un numero illimitato di volte  Utilizzi:  piccoli programmi di uso frequente  istruzioni che il sistema di elaborazione deve eseguire ogni volta all’accensione (BIOS)
  • 133. Memoria ROM Classificazione  ROM  Scritte dal costruttore  PROM ( Programmable ROM)  Possono essere scritte una volta sola con dispositivi speciali  EPROM ( Erasable PROM)  Possono essere riscritte solo alcune volte con dispositivi speciali (cancellazione a raggi UV)
  • 134. Memoria ROM Classificazione continua…  EEPROM ( Electrically EPROM)  Come le precedenti, vengono cancellate con impulsi elettrici  Flash EPROM  Riscrivibili più volte senza apparecchiature particolari; si possono scrivere solo a settori ⇒non utilizzabili come DRAM, ma come piccole memorie di massa per dispositivi programmati (es. modem)
  • 135. Memoria Modalità di accesso  Il processore può accedere ai dati:  direttamente ( tramite IRQ )  indirettamente “Controller MMU”  La memoria può essere utilizzata dai processori, in modo:  Esclusivo : allocazione esclusiva dell’area di memoria  Condiviso: condivisione dell’area di memoria  Misto: parte condivisa e parte esclusiva
  • 136. Memoria Conservazione del dato  L’informazione è mantenuta in modo: 1) Dinamico  usano i condensatori, ma richiedono continui refresh elettrici delle celle cariche.  Sono le memorie più economiche e frequentemente usate. Sono memorie relativamente “lente” perché richiedono un continuo aggiornamento dei dati durante il quale la memoria non è utilizzabile 2) Statico  usano i flip-flop, ma sono molto costosi.  Più veloci e costose delle DRAM, non hanno bisogno del continuo aggiornamento dei dati
  • 137. Memoria Conservazione del dato 3) A cambiamento di fase:  usano GST - Germano, Antimonio, Tellurio – sollecitando il cambio di fase del materiale ma sono prototipi (02/2008)  La temporizzazione dell’accesso è di tipo:  Sincrona: basato sulla velocità di clock  Asincrona: basato sui segnali del dispositivo
  • 138. Memoria Schede RAM  Il package delle RAM è di tipo: 1) SIMM, Single In-Line Memory Module  è un modello di scheda di memoria RAM caratterizzata da contatti su una sola faccia della scheda.  Usata per Pentium I 2) DIMM, Dual In-line Memory Module  è l'evoluzione delle SIMM, da cui si differenziano per il numero di contatti, la dimensione leggermente maggiore e il tempo di accesso.  Usata per Pentium II e successivi
  • 139. Memoria gerarchica  Nei sistemi di elaborazione moderni, al fine di aumentare l’efficienza, le memorie sono organizzate in modo gerarchico  L’obiettivo è quello di mettere diversi livelli di memoria. I livelli più vicini al processore sono più veloci di quelli più lontani  Una maggior velocità da parte delle memorie implica anche un maggior costo, quindi, i livelli più vicini al processore hanno una capacità di memorizzazione inferiore rispetto a quelli lontani
  • 140. Memoria Cache  Tra la CPU e la memoria DRAM di sistema vengono “interposti” uno o due livelli di SRAM detta memoria cache  La cache si classifica in:  cache di I° livello fisicamente situata nello stesso chip del processore (4-64 KByte)  cache di II° livello esterna al processore (256- 2048 KByte) su un chip a parte
  • 141. Memoria Cache  Quando la CPU richiede un dato non presente in cache si verifica un “cache miss”  A seguito di un cache miss il dato richiesto (e quelli successivi) deve essere portato dalla memoria di sistema alla cache prima di poter essere usato dalla CPU
  • 142. Periferiche I/O  Per interagire con il “mondo esterno” il sistema di elaborazione ha bisogno di opportuni dispositivi  Tali componenti si dicono dispositivi di Input-Output(I/O)  I dispositivi di Input servono per introdurre nel sistema di elaborazione, dal mondo esterno, dati o istruzioni  I dispositivi di Output servono a trasferire verso l’esterno le informazioni elaborate dal calcolatore
  • 143. Periferiche I/O  I dispositivi di I/O non sono gestiti direttamente dalla CPU, ma attraverso circuiti di controllo chiamati I/O controller ( controllori di dispositivi di I/O )  Lo schema tipico è il seguente:
  • 144. Periferiche I/O  Quando la CPU vuole che un dispositivo periferico esegua una determinata operazione invia il comando corrispondente al controller del dispositivo  Il controller interpreta il comando ricevuto e “pilota” il periferico (gli invia segnali elettrici di controllo) in modo che esegua il comando impartito dalla CPU
  • 145. Periferiche I/O  La CPU può usare due tecniche differenti per accorgersi che il dispositivo periferico ha assolto al comando impartito:  gestione in polling  gestione in interrupt  Con la gestione in polling (detta anche di attesa attiva) la CPU periodicamente va a controllare lo stato del dispositivo
  • 146. Periferiche I/O Gestione in polling  Nella gestione in polling può accadere che:  la CPU controlli per un certo numero di volte lo stato del dispositivo senza che questi abbia ancora terminato il suo compito: spreco di tempo di CPU che potrebbe essere utilizzato per svolgere altre attività  la CPU non si accorga immediatamente che il dispositivo ha terminato perché il controllo avviene periodicamente  Inadatta per sistemi operativi multitasking dove la CPU deve essere sempre sfruttata al massimo  Molto semplice da realizzare e non richiede hardware aggiuntivo
  • 147. Periferiche I/O Gestione in interrupt  Con la gestione in interrupt (interruzioni) la CPU assegna un compito ad un dispositivo e poi procede a svolgere altre attività  Quando il dispositivo ha terminato il suo compito avverte la CPU mediante un segnale detto interrupt  La CPU, a seguito di un interrupt, interrompe appena possibile la sua elaborazione attuale per “servire” il dispositivo periferico
  • 148. Periferiche I/O Gestione in interrupt  In realtà la CPU può decidere di interrompere le sue attività  in seguito a un qualunque interrupt  in seguito a interrupt selezionati  Con la gestione mediante interrupt la CPU non spreca mai tempo per controllare inutilmente lo stato del dispositivo ed è immediatamente avvertita quando il periferico ha terminato il compito
  • 149. Periferiche I/O Gestione in interrupt  La gestione mediante interrupt è più complessa di quella in polling e richiede hardware aggiuntivo  Le interruzioni provenienti dai dispositivi, in genere, non vanno direttamente alla CPU, ma ad un circuito chiamato interrupt controller  La gestione mediante interrupt è in generale adatta a gestire eventi asincroni (ossia eventi “inattesi”)
  • 150. Periferiche I/O Modalità di collegamento  Le modalità di collegamento di una periferica al calcolatore sono legate alle modalità di trasferimento dei dati:  Comunicazione seriale i bit vengono trasmessi uno per volta (ad esempio su un unico filo)  Comunicazione parallela più dati vengono trasmessi alla volta (ad esempio su più fili)
  • 151. Periferiche I/O Bit di controllo  Spesso, insieme ai dati veri e propri si trasmettono anche dei bit di controllo, così che il dispositivo in ricezione possa controllare la correttezza dei dati ricevuti  Il metodo di controllo più semplice è il bit di parità (parity bit)  Consiste nel trasmettere, dopo un byte di dati, un bit in più;  Si conta il numero di bit 1per ogni byte:  se sono in numero dispari, si aggiunge un bit di parità 1  se invece sono pari, si aggiunge un bit di parità 0
  • 152. Periferiche I/O Bit di controllo  Nel calcolare la velocità effettiva di comunicazione, bisogna considerare che il bit di parità non è un bit di dato e come tale “degrada” le prestazioni della comunicazione  Esempio:  Si devono trasmettere 1000 byte ad una velocità di 300 bit/sec adottando la tecnica del controllo di parità  Ogni 8 bit ce n’è uno di parità, quindi si trasmettono 1000 blocchi di 9 bit: 1000 · 9 = 9000 bit totali  A 300 bit al secondo sono necessari 30 secondi per la trasmissione
  • 153. Bus di sistema  Un bus non è altro che una serie di fili (in realtà sono delle piste metalliche) ognuno dei quali può “trasportare” dei segnali elettrici digitali (assumono solo 2 valori di tensione "Algebra di Boole")  Possiamo distinguere 3 tipi di BUS:  Control Bus  Data Bus  Address Bus
  • 154. Bus di sistema  Control bus:  La CPU controlla tutto il sistema di elaborazione mandando e ricevendo segnali per mezzo del “control bus”  Address bus:  La CPU comunica alla memoria l’indirizzo della locazione che intende leggere o scrivere per mezzo dell’address bus (bus degli indirizzi)  Data bus:  Il trasferimento dei dati dalla CPU alla memoria e viceversa avviene tramite il “data bus”
  • 155. Sistemi Operativi
  • 156. Sistema Operativo  Il software può essere diviso un due classi:  i programmi di sistema che gestiscono le operazioni del sistema di elaborazione  i programmi applicativi che risolvono i problemi dei loro utilizzatori  Il più importante dei programmi di sistema è il sistema operativo che controlla tutte le risorse del calcolatore e fornisce la base sulla quale possono essere sviluppate le applicazioni  Il programmatore deve essere il più possibile svincolato dalla complessità dell’hardware
  • 157. Sistema Operativo  Per ovviare al problema è necessario mettere uno strato di software tra l’hardware e l’utente  Questo strato di software, chiamato sistema operativo, si presenta all’utente con una interfaccia o macchina virtuale più facile da:  capire  usare  programmare
  • 158. Sistema Operativo  La situazione può essere rappresentata graficamente nel seguente modo:  E’ molto difficile descrivere esattamente cos’è un sistema operativo  Il problema è dovuto al fatto che il sistema operativo svolge due funzioni tra loro scorrelate:  sistema operativo come interfaccia uomo- macchina  sistema operativo come gestore delle risorse
  • 159. Sistema Operativo  La definizione come interfaccia tende ad evidenziare come il sistema operativo sia in grado di nascondere all’utente i dettagli dell’hardware  La definizione come gestore delle risorse evidenzia la capacità del sistema operativo di gestire le risorse di sistema ( la CPU, la memoria, i dispositivi di I/O ecc)
  • 160. Sistema Operativo Componenti funzionali  Non è possibile individuare un unico schema realizzativo per tutte le tipologie di sistemi operativi, però si possono identificare cinque componenti funzionali comuni a tutti i sistemi:  gestore della CPU  gestore della memoria  gestore dei dispositivi di I/O  gestore del file system  interprete dei comandi
  • 161. Sistemi Operativi Gestore della CPU  Il gestore della CPU è quel modulo del sistema operativo che ha il compito di decidere a quale task(non a quale utente) spetta l’assegnazione della CPU  Tale componente prende spesso il nome di scheduler e gli algoritmi di scheduling sono le strategie adottate per assegnare la CPU ai task
  • 162. Sistemi Operativi Gestore della Memoria  Il gestore della memoria è quel modulo del sistema operativo incaricato di assegnare la memoria ai vari task (per eseguire un task è necessario che il suo codice sia caricato in memoria)  La complessità del gestore della memoria dipende dal tipo di sistema operativo  Nei sistemi multi-tasking più programmi contemporaneamente possono essere caricati in memoria
  • 163. Sistemi Operativi Gestore della Memoria  Spesso la memoria non è sufficiente per contenere completamente tutto il codice dei vari task  Il disco però è molto capiente, si può simulare una memoria più grande tenendo nella memoria di sistema (RAM) solo le parti di codice e dei dati che servono in quel momento, lasciando sul disco tutto il resto: è il concetto di memoria virtuale  Lo scambio di dati tra memoria fisica (RAM) e il disco è chiamato swap (scambio)
  • 164. Sistemi Operativi Gestore dei dispositivi di I/O  Il gestore dei dispositivi di I/O è quel modulo del sistema operativo incaricato di assegnare i dispositivi ai task che ne fanno richiesta  In particolare deve gestire i conflitti, ovvero le situazioni in cui due o più task vogliono accedere contemporaneamente allo stesso dispositivo
  • 165. Sistemi Operativi Gestore del File System  Il gestore del file system è quel modulo del sistema operativo incaricato di gestire le informazioni memorizzate sui dispositivi di memoria di massa  Il gestore del file system deve garantire la correttezza e la coerenza delle informazioni  Inoltre, nei sistemi multi-utente, deve mettere a disposizione dei meccanismi di protezione in modo tale da consentire agli utenti di proteggere i propri dati dall’accesso da parte di altri utenti non autorizzati
  • 166. Sistemi Operativi L’interprete dei comandi  L’interprete dei comandi è la vera interfaccia del sistema operativo verso l’utente  Riceve i comandi dall’utente (generalmente da tastiera) e li esegue  Nei sistemi multi-tasking l’utente può mandare in esecuzione un comando senza aspettare che il precedente sia terminato
  • 167. Istruzioni e linguaggi
  • 168. Istruzioni e linguaggi  Un linguaggio di programmazione è costituito, come ogni altro tipo di linguaggio,  da un alfabeto con cui viene costruito un insieme di parole chiave (il vocabolario)  da un insieme di regole sintattiche (la grammatica) per l’uso corretto delle parole del linguaggio.  I microprocessori presenti all’interno della macchina sono stati progettati per riconoscere ed eseguire un insieme piuttosto ristretto di istruzioni; tali istruzioni costituiscono il cosiddetto linguaggio macchina.
  • 169. Istruzioni e linguaggi  Il linguaggio macchina è basato su una codifica estremamente compatta e poco intuitiva.  Codificare un programma utilizzando il linguaggio macchina è assai arduo e richiede una conoscenza approfondita del funzionamento di un particolare calcolatore (o meglio: del microprocessore che costituisce la CPU della macchina).
  • 170. Istruzioni e linguaggi  Per ovviare a questo problema, che ha costituito per molti anni un grosso limite alla diffusione della programmazione e quindi anche dell’uso dei calcolatori, sono stati sviluppati dei linguaggi di programmazione più evoluti, che si pongono a metà strada fra il nostro linguaggio naturale ed il linguaggio macchina.  Sono semplici e poveri (poche parole chiave, poche regole), ma privi di qualsiasi ambiguità.
  • 171. Istruzioni e linguaggi  In informatica si parla di programmazione a basso livello quando si utilizza un linguaggio molto vicino alla macchina, al suo funzionamento interno.  Si parla invece di programmazione ad alto livello quando si utilizzano linguaggi più sofisticati ed astratti, slegati dal funzionamento fisico della macchina.
  • 172. Istruzioni e linguaggi  Si viene così a creare una gerarchia di linguaggi, dai meno evoluti (il linguaggio macchina e l’assembler) a quelli più evoluti(Pascal, Fortran, Cobol, Perl, Java);  Per esempio il linguaggio C si pone ad un livello intermedio.
  • 173. Istruzioni e linguaggi  La programmazione a basso livello è più ardua e meno intuitiva, ma consente di sviluppare programmi efficienti.  Ad alto livello la programmazione è più“naturale” e rapida, ma è possibile che non consenta di produrre software efficiente.
  • 174. Istruzioni e linguaggi Linguaggio ASSEMBLY  Il linguaggio assembly (e il linguaggio macchina) è diverso per ogni tipo di CPU  Ad esempio, il linguaggio assembly dei processori Intel 80x86 (Personal Computer) non è compatibile con quello dei processori Motorola (Macintosh) o Digital  Quindi i programmi scritti in assembly per una determinata macchina non possono essere trasportati su calcolatori di tipo diverso
  • 175. Istruzioni e linguaggi Linguaggio ASSEMBLY  L’istruzione di somma potrebbe avere il nome simbolico ADD invece di 01001010  Questo simbolismo è chiamato linguaggio ASSEMBLY (o ASSEMBLER)  Per tradurre un programma scritto in assembly in codice macchina (che è l’unico linguaggio compreso dal calcolatore) viene utilizzato un programma chiamato assemblatore (assembler)  L’assemblatore traduce i nomi simbolici delle istruzioni, dei dati e degli indirizzi assembly nei corrispondenti valori numerici
  • 176. Istruzioni e linguaggi Linguaggio ASSEMBLY  Al fine di rendere più agevole la stesura dei programmi si è deciso di assegnare a istruzioni, dati e indirizzi dei nomi simbolici  L’operazione di stesura di un programma diventa quindi organizzata nelle seguenti fasi:  scrittura del programma assembly (codice sorgente) con un editor  traduzione del codice sorgente con l’assemblatore in codice macchina (programma oggetto)  esecuzione del programma oggetto
  • 177. Istruzioni e linguaggi  Al fine di ovviare a questo inconveniente è preferibile utilizzare linguaggi ad alto livello  Nei linguaggi ad alto livello si hanno istruzioni con un più alto potere espressivo e, soprattutto, indipendenti dal tipo di CPU sulle quali devono essere eseguite
  • 178. Istruzioni e linguaggi  Possiamo aggregare i numerosi linguaggi di programmazione esistenti sulla base del modello astratto ( paradigma ) di programmazione
  • 179. Istruzioni e linguaggi  Linguaggi imperativi:  Il modello computazionale è basato sui cambiamenti di stato della memoria della macchina.  È centrale il concetto di assegnazione di un valore ad una locazione di memoria.  Il compito del programmatore è costruire una sequenza di assegnazioni che producano lo stato finale (in modo tale che questo rappresenti la soluzione del problema).
  • 180. Istruzioni e linguaggi  Linguaggi dichiarativi:  Il modello computazionale è basato sui concetti di funzione e relazione.  Il programmatore non ragiona in termini di assegnazioni di valori, ma di relazioni fra entità e di valori di una funzione.
  • 181. Istruzioni e linguaggi  Sulla base dell’ambito in cui è necessario risolvere il problema, è opportuno adottare un linguaggio piuttosto che un altro:  Calcolo scientifico: Fortran, C  Intelligenza Artificiale: Prolog, Lisp  Applicazioni gestionali: Cobol, SQL, C  Sistemi, device driver: Assembler, C  Applicazioni client visuali: C++, Java, Visual Basic  Applicazioni su Web: Perl, ASP, Java  Applicazioni distribuite: Java, C, C++
  • 182. Istruzioni e linguaggi  Un programma scritto in un linguaggio ad alto livello deve essere convertito in linguaggio macchina per essere eseguito  A seconda del modo in cui avviene la conversione, si parla di:  Linguaggio interpretato  Linguaggio compilato
  • 183. Istruzioni e linguaggi  Linguaggio interpretato:  ogni riga di codice sorgente viene letta, convertita in linguaggio macchina e poi eseguita da un programma detto interprete  Interprete: itera più volte questo processo  Legge un’istruzione del programma “sorgente”  Traduce l’istruzione in linguaggio macchina  Esegue l’istruzione  Passa all’interpretazione dell’istruzione successiva
  • 184. Istruzioni e linguaggi  Al termine di questa operazione, del programma in linguaggio macchina non rimane alcuna traccia (la traduzione non viene memorizzata).  Se il programma torna più volte su una stessa istruzione, questa verrà tradotta (ed eseguita) ogni volta.
  • 185. Istruzioni e linguaggi  Linguaggio compilato  tutto il codice viene letto e convertito in linguaggio macchina da un programma detto compilatore, l’esecuzione avviene in un momento successivo in seguito ad una richiesta esplicita dell’utente
  • 186. Istruzioni e linguaggi  Compilatore: esegue una sola volta il processo  Legge tutte le istruzioni del programma “sorgente” e le traduce in linguaggio macchina.  Memorizza su disco il programma “eseguibile” tradotto in linguaggio macchina.  Al termine della compilazione avremo un programma “eseguibile” in linguaggio macchina.
  • 187. Istruzioni e linguaggi  La traduzione di ogni istruzione del programma avviene una sola volta, anche se una stessa istruzione viene ripetuta più volte all’interno del programma.  Non ho bisogno di avere il compilatore ed il “sorgente” per eseguire il programma: mi basta il programma “eseguibile”.
  • 188. Istruzioni e linguaggi  Schema ibrido compilazione/interpretazione nel caso di Java  Il compilatore  a partire dal listato in Java crea del codice binario  non per una architettura specifica (Intel, Linux,...) ma per una architettura virtuale (JVM)
  • 189. Istruzioni e linguaggi  L’interprete  l’interpretazione viene effettuata dalla JVM  è un “simulatore” della architettura virtuale per le architetture effettive ( • Intel, Linux, Macintosh )  Filosofia: write-once run everywhere
  • 190. Istruzioni e linguaggi Un linguaggio è definito da 2 aspetti: 1) Sintassi:  Indica la sequenza di parole o simboli appartenenti alle giuste categorie sintattiche 1) Semantica  Indica se il programma ha senso, se sarà possibile eseguirlo Esempio:  “Il cane gioca in borsa”  è sintatticamente corretta, ma non semanticamente  3+true=false  è sintatticamente corretta, ma non semanticamente
  • 191. Valori, tipi e operatori
  • 192. Valori, tipi e operatori - Valori -  Nella vita di tutti i giorni siamo abituati a rappresentare i numeri in base 10.  In questo tipo di numerazione utilizziamo 10 simboli convenzionali (l’alfabeto della nostra codifica):  0, 1, 2, 3, …, 9.  Utilizzando un criterio simile possiamo scegliere di rappresentare i numeri con basi diverse da 10, ad esempio la base 2 o la base 16
  • 193. Valori, tipi e operatori - Valori -  La macchina opera con una logica binaria che riflette direttamente la struttura fisica delle sue componenti.  Nella numerazione binaria ogni numero viene rappresentato fattorizzandolo in multipli di potenze di 2  La memoria della macchina è un “casellario” molto grande suddiviso in locazioni di memoria, numerate progressivamente mediante degli indirizzi di memoria che ne identificano univocamente la posizione.
  • 194. Valori, tipi e operatori - Valori -  Ogni locazione è composta da un insieme di 8 bit che compongono un byte.  Con un solo byte è possibile rappresentare piccoli numeri interi (compresi tra 0 e 255).  Per rappresentare numeri più grandi la macchina aggrega più locazioni di memoria contigue: ad esempio con 2 byte è possibile rappresentare numeri binari di 16 cifre (16 bit), compresi tra 0 e 65.535.
  • 195. Valori, tipi e operatori - Valori -  Per rappresentare numeri con il segno (interi relativi) si adotta la convenzione di considerare il primo bit come rappresentante del segno: ad esempio 0 per il segno negativo ed 1 per il segno positivo.  Con 2 byte (16 bit, di cui 15 per la rappresentazione del numero ed 1 per il segno) potremo così rappresentare numeri compresi tra +32.767 e –32.767.  Complessivamente vengono così rappresentati comunque 65.535 numeri, di cui 32.768 positivi (considerando anche lo zero) e 32.767 negativi.
  • 196. Valori, tipi e operatori - Valori -  Per rappresentare numeri con la virgola (razionali positivi o negativi) si utilizza la notazione scientifica: –12,345 = –12345 × 10 ^–3  Quindi basta adottare un’altra convenzione: ad esempio, su un insieme di 32 bit:  il primo rappresenterà il segno  28 bit rappresenteremo le cifre significative del numero  gli ultimi 3 bit rappresenteremo l’esponente
  • 197. Valori, tipi e operatori - Valori -  Così si possono rappresentare alcuni numeri razionali compresi, tra – 268.435.455 e +268.435.455, con un massimo di 8 cifre dopo la virgola.  Più è grande (in valore assoluto) il numero e meno cifre decimali potremo rappresentare.
  • 198. Valori, tipi e operatori - Valori -  Con i computer spesso si trattano informazioni non numeriche, come caratteri alfabetici (o meglio, alfanumerici) o rappresentazioni grafiche.  Mediante opportune convenzioni è possibile rappresentare utilizzando la codifica binaria ogni tipo di informazione.
  • 199. Valori, tipi e operatori - Valori -  Per i caratteri alfanumerici (caratteri alfabetici, simboli di interpunzione, cifre numeriche ed altri simboli ancora) esiste una tabella di codifica standard che associa ad ogni carattere un codice numerico intero: la codifica ASCII (American Standard Code for Information Interchange).  Ad esempio il carattere “a” è associato al codice 61, al carattere “b” il 62, e così via.
  • 200. Valori, tipi e operatori - Valori -
  • 201. Valori, tipi e operatori - Valori -  La codifica ASCII base viene rappresenta utilizzando uno spazio di 2^7 ossia 127 caratteri  La codifica ASCII estesa viene rappresentata utilizzando uno spazio di 2^8 ossia 256 caratteri, pertanto i caratteri da 128 a 255 rappresentano vari caratteri speciali, simboli matematici e lettere.  La codifica UNICODE viene rappresentata utilizzando uno spazio di 2^16 ossia 65536 caratteri, pertanto risolve i problemi legati al mapping di tutte le lingue.
  • 202. Valori, tipi e operatori - Tipi -  Una medesima sequenza di bit può dunque rappresentare:  un numero relativo ( es: 15 , -30)  un numero razionale (24.434, -78.778)  un carattere alfanumerico (A, m, #).
  • 203. Valori, tipi e operatori - Tipi -  Per indicare alla macchina come dovrà essere trattata una certa sequenza di bit memorizzati in un determinato blocco della memoria, è necessario che il programmatore a priori dichiari il tipo di dato che intenderà associare ad una certa variabile nell’ambito di un intero programma o di una determinata funzione.  Con la dichiarazione del tipo di una variabile si indica anche alla macchina la quantità di memoria che dovrà essere riservata (allocata) per la memorizzazione delle informazioni trattate dal programma.
  • 204. Valori, tipi e operatori - Tipi -  In ogni linguaggio di programmazione vengono messi a disposizione del programmatore dei tipi di dato elementari con cui possono essere definite le variabili o le strutture dati più complesse ed articolate.
  • 205. Valori, tipi e operatori - Tipi -  I tipi di dato fondamentali, disponibili in quasi tutti i linguaggi di programmazione sono i seguenti:  Intero (in C: short, unsigned, int e long)  Floating point (in C: float, double)  Carattere (in C: char)  I puntatori sono delle variabili che contengono l’indirizzo di memoria in cui è allocata un’altra variabile: si dice così che puntano ad un’altra variabile.
  • 206. Valori, tipi e operatori - Tipi -  I tipi definiscono l’insieme di tutti i suoi possibili valori  boolean={true,false}  byte = {-128,..,0,..,127}  I tipi sono denotati da un “identificatore” (o nome)  Ad ogni tipo si associano anche gli operatori che è possibile applicare ai suoi valori (! + * / )
  • 207. Valori, tipi e operatori - Tipi -  Perchè i tipi?  Semplificano la scrittura/lettura dei programmi  se di ogni valore gestito si conosce il tipo, si sa quali operatori sono applicabili.  Consentono di controllare la correttezza dei programmi:(correttezza semantica)  In alcuni casi, consentono anche di ottimizzare le performance del programma  si collega direttamente ad un operatore l’azione/i elementari da effettuare
  • 208. Valori, tipi e operatori - Operatori -  Il linguaggio di programmazione mette a disposizione del programmatore una serie di operatori utili, tra i quali:
  • 209. Valori, tipi e operatori Operatori di assegnamento  L’operatore di assegnamento “=” consente al programmatore, una volta definita una variabile, di assegnarle un valore.  int res1 = 5;  Assegna il valore 5 alla destra dell’operatore alla variabile res1.  int res1 = 5+10;  Esegue l’espressione alla destra dell’operatore e ne assegna il risultato (15) a res1.
  • 210. Valori, tipi e operatori Operatori di assegnamento  La variabile a sinistra dell’operatore di assegnazione (simbolo =) viene definita  Eventuali variabili presenti nell’espressione (a destra dell’operatore di assegnazione) vengono usate
  • 211. Valori, tipi e operatori Operatori di assegnamento  variabile = espressione;  X = 23;  w = ‘a’;  y = z;  alfa = x + y;  r3 = (alfa*43 - xgg) * (delta - 32*ijj);  x = x + 1;  il valore dell’espressione viene registrato (assegnato) alla variabile  l’assegnazione non è una relazione di uguaglianza produce una modifica della memoria
  • 212. Valori, tipi e operatori Operatori di assegnamento  I due elementi di un istruzione di assegnazione sono asimmetrici  variabile = espressione;  A sinistra una cella di memoria a destra un valore  Non ha senso invertire gli elementi  espressione = variabile;
  • 213. Valori, tipi e operatori Operatori aritmetici  Sono i più comuni operatori aritmetici (somma, sottrazione, moltiplicazione, divisione e modulo).  Sono operatori binari ovvero operatori che necessitano di due operandi:
  • 214. Valori, tipi e operatori Operatori relazionali  Gli operatori relazionali servono ad effettuare un confronto tra valori producendo come risultato di ritorno un valore booleano (true o false) come prodotto del confronto.  Nella tabella sono riassunti gli operatori ed il loro significato.
  • 215. Valori, tipi e operatori Operatori relazionali  Gli operatori di relazione più noti sono quelli che permettono di confrontare quantità numeriche:  uguale ( simbolo ‘==’)  diverso ( simbolo ‘!=’)  maggiore ( simbolo ‘>’)  minore ( simbolo ‘<’)  maggiore o uguale ( simbolo ‘>=’)  minore o uguale ( simbolo ‘<=’)
  • 216. Valori, tipi e operatori Operatori relazionali  Gli operatori ‘=’ e ‘!=’ sono applicabili a valori di qualunque natura  Gli altri operatori richiedono una relazione d’ordine sull’insieme di valori
  • 217. Valori, tipi e operatori Operatori relazionali  Gli operatori di relazione permettono di esprimere predicati semplici  1 < 2 (valore: vero)  7 < 0 (valore: falso)  x != 0 (valore: dipende cosa rappresenta ‘x’)  oggi = venerdì (valore: dipende cosa rappresenta ‘oggi’)
  • 218. Valori, tipi e operatori Operatori relazionali  Non sono operatori logici, ma consentono di costruire espressioni che possono essere usate come argomenti di operatori logici  -1 <= x AND x <= 1
  • 219. Valori, tipi e operatori Operatori di shift bit a bit  Gli operatori di shift bit a bit consentono di manipolare tipi primitivi spostandone i bit verso sinistra o verso destra secondo le regole definite nella tabella seguente
  • 220. Valori, tipi e operatori Operatori di shift bit a bit  byte i = 100; i >> 1;  dal momento che la rappresentazione binaria del numero decimale 100 è 01100100, lo shift verso destra di una posizione dei bit, produrrà come risultato il numero binario 00110010 che corrisponde al valore 50 decimale.
  • 221. Valori, tipi e operatori Operatori logici  Consentono di eseguire operazioni logiche su tipi primitivi operando sulla loro rappresentazione binaria.
  • 222. Valori, tipi e operatori - Operatori -  Tipologia di operatori:  Operatori unari:  es.: simbolo “!” per i booleani (NOT logico)  !true si valuta in false  !false is valuta in true  Operatori binari:  es.: simbolo “&&” per i booleani (AND logico)  true && false si valuta in false  true && true si valuta in true
  • 223. Valori, tipi e operatori - Operatori -  Operatori ternari  es.: operatore condizionale “?:”  true ? 3:6 il risultato sarà 3  false ? 3:6 il risultato sarà 6
  • 224. Costrutti decisionali ed iterativi
  • 225. Costrutto decisionale  Un costrutto decisionale permette al programmatore di vincolare l'esecuzione di un'istruzione (o di un blocco di istruzioni) ad una condizione booleana  “condizione booleana” è un'espressione della quale si può dire se sia vera o falsa  “blocco di istruzioni” è un insieme di istruzioni racchiuso tra parentesi graffe, che vengono trattate come se fossero un'istruzione unica
  • 226. Costrutto decisionale  if-else  verificano diverse espressioni e quando viene incontrata l'espressione che restituisce true viene eseguito un determinato pezzo di codice.  switch-case  viene esaminata UNA SOLA espressione, pero' a seconda del suo risultato cambia il pezzo di codice che verrà eseguito.
  • 227. Costrutto decisionale If-else  Il costrutto condizionale più usato è l'if- else, che può essere usato nelle due varianti con o senza else: if ( condizioneBooleana ) istruzione;  La variante con l'else ha una forma del tipo: if ( condizioneBooleana ) istruzione1; else istruzione2;
  • 228. Costrutto decisionale If-else annidate  Si presenta nel caso in cui vengono ad annidarsi piu’ condizioni all’interno di un’istruzione condizionale.  E' buona norma di programmazione evitare di ricorrere pesantemente alla nidificazione di istruzioni if, data la confusione che spesso ne segue
  • 229. Costrutto decisionale If-else combinate  Una combinazione condizionale si ha quando si fa seguire ad un else una if. if( x <= 0 ) System.out.println("x <= 0"); else if( x <= 10) System.out.println("x > 0 e <= 10"); else if ( x <= 20) System.out.println("x > 10 <= 20"); else System.out.println("x è maggiore di 20");  Si noti che in questo caso l'ultimo else comprende tutti i casi non considerati dalle precedenti istruzioni.
  • 230. Costrutto decisionale switch  Il costrutto switch permette di gestire tutte quelle situazioni in cui dobbiamo prendere scelte diverse a seconda del valore di un'espressione switch (espressione) { case val1: istruzione_na; break; case val2: istruzione_nb;break; default: istruzione_ndefault;break; }
  • 231. Costrutto decisionale switch  L'espressione contenuta tra le parentesi dello switch solitamente è di tipo intero  Ogni istruzione “case” lavora su di un particolare valore, e fornisce una sequenza di istruzioni da eseguire in quella circostanza  Tale sequenza termina usualmente con l'istruzione break, che forza il computer a uscire dallo switch, senza verificare i valori sucessivi.  blocco di default, ovvero una sequenza di istruzioni da eseguire se non si è verificato nessuno dei casi precedenti.
  • 232. Costrutti Iterativi  I costrutti iterativi (cicli) vengono abitualmente utilizzati in tutti quei casi in cui bisogna eseguire delle attività ripetitive in modo automatico.  Abbiamo due tipi di cicli:  I cicli con contatore o Cicli For  I cicli contatore servono per svolgere una data attività per un numero determinato di volte  i cicli condizionali o Cicli While, Do-While  I cicli condizionali vengono usati per eseguire un'attività fino a quando una data condizione viene soddisfatta
  • 233. Costrutti Iterativi while  La struttura generale del while è while(condizioneBooleana) { ISTRUZIONE1; ISTRUZIONE2; .... }  Se si desidera che un ciclo venga ripetuto all'infinito, è sufficiente specificare una condizione sempre vera, tipo while(0 == 0) { ISTRUZIONE1; }
  • 234. Costrutti Iterativi while  Se si desidera che il ciclo venga ripetuto un numero prefissato di volte i = 0; while(i<=100) { ISTRUZIONI DA RIPETERE i = i + 1; }
  • 235. Costrutti Iterativi for  il ciclo di 10 iterazioni utilizzando il ciclo while i=0; while(i<10) { faiQualcosa(); i++; } comporta maggior elaborazione da parte del programmatore pertanto è possibile usare l’istruzione for: for(init_statement ; conditional_expr ; iteration_stmt) { istruzione }
  • 236. Costrutti Iterativi for  init_statement:  rappresenta l’inizializzazione della variabile per il controllo del ciclo  conditional_expr  è l’espressione condizionale  iteration_stmt  è l’aggiornamento della variabile di controllo  Il problema presentato precedentemente puo essere risolto utilizzando il ciclo for in questo modo: for (int i=0 ; i<10 ; i++) faiQualcosa();
  • 237. Array
  • 238. Array  Molto spesso nei programmi si ha l'esigenza di manipolare un gruppo di variabili dello stesso tipo che contengono valori tra loro correlati.  Un array è uno strumento concettualmente simile ad una tabella, che accomuna sotto un unico nome un insieme di variabili dello stesso tipo  Il valore di un array come unica variabile è quindi una n-pla di valori componenti:  Esempio: ( 2, 9, 0, -1, 24, 0, 9, 6 )
  • 239. Array  Occorre indicare il numero di valori (lunghezza della n-pla):  tipo nome[lunghezza];  Esempio: int a[100]  I numeri associati ai componenti si dicono indici e solitamente partono dal numero zero.
  • 240. Array  Il popolamento è l'operazione che permette di assegnare un valore ad un elemento del vettore.  a[0] = s[1] + x;  Un vettore può essere inizializzato con una serie di valori, in modo simile a come si può fare con le variabili.  int[] vettore = {10,12};  oppure  int[] vettore = new int[5]; vettore[0] = 10;
  • 241. Array  E' possibile creare array bi-dimensionali, concettualmente simili ad una tabella rettangolare, dotata di righe e colonne (detto matrice).  int i[][] = new int[10][15];  Inoltre è possibile definire vettori n- dimensionali ossia con un numero qualunque di dimensioni:  int v1[][][] = new int[10][15][5];  Ma tali strutture, in ogni caso, risultano decisamente poco utilizzate.
  • 242. Array  E' inoltre possibile la realizzazione di tabelle non rettangolari.  Un Array multidimensionale può essere  inizializzato con una serie di valori in modo simile a come si può fare con gli Array semplici.
  • 243. Struttura del programma
  • 244. Proprietà e Metodi  Un programma è composto da 2 gruppi di elementi:  Proprietà  Metodi
  • 245. Proprietà e Metodi  Le “proprietà” servono per definire le variabili e le constanti utilizzate durante l’esecuzione.  Hanno visibilità  Generale: è visibile da qualunque porzione di codice dell’applicazione  Locale: è visibile solo all’interno di una ristretta porzione di codice dell’applicazione
  • 246. Proprietà e Metodi  I metodi servono per definire il blocco di codice che si occuperà di eseguire una serie di istruzioni  I metodi sono di 2 tipi:  Procedure: ossia eseguono delle istruzioni e non ritornano nessun valore al chiamante.  Funzioni: ossia eseguono delle istruzione e ritornano un valore al chiamante in base al tipo di ritorno definito dalla funzione.
  • 247. Procedure  Elaborano eventuali parametri e non restituiscono un valore.  Servono per evitare di ripetere un blocco di codice  Esempio: void nomeMetodo(int a, int b) { System.out.println(a+” - “+b ); }
  • 248. Procedure  void (vuoto)  indica che la funzione non restituira nessun valore ma eseguira solamente le istruzioni indicate  nomeMetodo  è il nome della funzione;  int a:  all'interno delle parentesi tonde troviamo i due argomenti che forniamo alla funzione con i loro relativi tipi  System.out.println  all'interno delle parentesi graffe troviamo il blocco di istruzioni della funzione.  L'istruzione System.out.println(...) è quella che permette alla funzione di visualizzare in Dos i parametri passati
  • 249. Funzioni  Elaborano eventuali parametri e restituiscono un risultato  Esempio: int moltiplicavalori(int a, int b) { risultato= a * b; return(risultato); }
  • 250. Funzioni  int  è il tipo di valore che la funzione restituirà(quindi il tipo della variabile risultato);  moltiplicavalori  è il nome della funzione;  int a  all'interno delle parentesi tonde troviamo i due argomenti che forniamo alla funzione con i loro relativi tipi  risultato= a * b  all'interno delle parentesi graffe troviamo il blocco di istruzioni della funzione  return  l'istruzione return(...) è quella che permette alla funzione di restituire il valore risultato.  Le istruzioni che seguono l'istruzione return vengono ignorate
  • 251. Passaggio di parametri  I metodi consentono di ricevere argomenti, i quali possono essere passati per valore o riferimento:  Passaggio per valore:  Al momento del richiamo della funzione, il valore dei parametri attuali sono ricopiati nello spazio di memoria allocato ai parametri formali del metodo chiamato  Pasaggio per riferimento:  Al momento del richiamo della funzione, il puntatore all’indirizzo di memoria dei parametri attuali sono resi disponibili al metodo chiamato che potrà disporne direttamente.
  • 252. Passaggio di parametri  Gestione tipica dello specifico linguaggio di programmazione:  Java: viene gestito direttamente dalla JVM attraverso il riconoscimento del tipo di parametro  C: viene gestito direttamente dal programmatore tramite l’utilizzo o meno dei puntari
  • 253. Programmazione modulare
  • 254. Programmazione modulare  Un’applicazione è fatta di una serie di moduli  programma principale (main)  sottoprogrammi (procedure e funzioni)  Funzionamento  si inizia con l’esecuzione del “main”  i vari moduli si chiamano a vicenda  comunicando attraverso i parametri
  • 255. Programmazione modulare  Aspetti metodologici della programmazione modulare  albero delle chiamate  regole di visibilità e utilizzo dei dati  compilazione separata e “riuso” del codice  metodologia di sviluppo per raffinamenti successivi  linee guida per la scrittura di codice di qualità
  • 256. Diagramma delle Chiamate  In un programma modulare i moduli dipendono gli uni dagli altri e per ogni chiamata il chiamante “dipende” dal chiamato  Diagramma delle chiamate  diagramma che rappresenta le relazioni di dipendenza tra i moduli  ogni modulo è un elemento  gli archi descrivono le dipendenze
  • 257. Diagramma delle Chiamate
  • 258. Diagramma delle Chiamate  Il Diagramma delle Chiamate:  è un ottimo strumento per studiare il funzionamento di un programma scritto da altri  aiuta a ragionare sul “livello di accoppiamento” tra i moduli e sulla logica applicativa del programma  Livello di accoppiamento di un modulo corrisponde al numero di moduli del programma da cui il modulo dipende cioè che chiama direttamente o indirettamente
  • 259. Diagramma delle Chiamate  Attenzione al livello di accoppiamento  tanto più è alto il livello di accoppiamento di un modulo, tanto più il modulo dipende da altri moduli  se uno o più degli altri moduli è scorretto, il modulo si comporta scorrettamente  se uno o più degli altri moduli cambiano prototipo, bisogna cambiare anche il modulo
  • 260. Diagramma delle Chiamate  E' importante che il diagramma sia organizzato per livelli  i moduli a livello più alto dipendono da quelli a livello più basso (tipicamente il “main” dipende da tutti gli altri moduli)  ai livelli più bassi l’accoppiamento deve diminuire progressivamente
  • 261. Diagramma delle Chiamate
  • 262. Regole di Visibilità  Regole di Visibilità sono quell'insieme di regole che stabiliscono cosa può essere utilizzato in ciascun modulo:  quali dati possono essere utilizzati  utilizzare una costante, una variabile o un parametro in una istruzione ?  quali altri moduli possono essere utilizzati  utilizzare una funzione o una procedura ?
  • 263. Regola di visibilità n.1  “Prima dichiarare e poi usare”  un dato o un sottoprogramma può essere utilizzato solo se è stato precedentemente dichiarato  il compilatore deve verificare che la chiamata sia corretta  Per quanto riguarda i dati:  Occorre verificarne il nome  Occorre verificarne il tipo
  • 264. Regola di visibilità n.1  Per quanto riguarda i sottoprogrammi:  Occorre verificare il nome  Occorre verificare il numero ed il tipo dei parametri  Occorre verificare la natura dei parametri (per valore o per riferimento)  Occorre verificare l’eventuale tipo del risultato
  • 265. Dati Locali e Dati Globali  Dati locali  sono quei dati dichiarati all’interno di un modulo  ogni modulo ha i suoi dati locali  i dati sono “indipendenti”: i dati di un modulo non sono visibili all’interno di un altro  possono avere nomi uguali ma corrispondono a spazi di memoria diversi
  • 266. Dati Locali e Dati Globali  Dati globali  costanti e variabili dichiarate al di fuori di tutti i moduli  sono comuni a tutti i moduli  Utilizzo tipico  costanti utilizzate da molti moduli  è utile poterle definire una volta per tutte
  • 267. Regola di visibilità n. 2  In ciascun modulo sono sempre visibili tutti i dati locali  I dati globali sono visibili a meno che nel modulo non sia dichiarato un dato locale con lo stesso nome
  • 268. Compilazione Separata  Idealmente  un programmatore scrive un’applicazione sulla libreria basandosi sull’interfaccia  utilizza inizialmente una specifica implementazione  successivamente l’implementazione può essere cambiata (migliorata, corretta) senza che sia necessario cambiare il codice dell’applicazione scritta (basta ricompilare)
  • 269. Compilazione Separata  Idea alla base di questo meccanismo  “riuso” del codice (un “mito” informatico)  sviluppare il codice è costoso  per quanto possibile, bisognerebbe evitare di sviluppare di nuovo soluzioni già esistenti  Utilità delle librerie  collezione di sottoprogrammi di utilizzo sufficientemente generale  di correttezza verificata
  • 270. Tecnica per raffinamenti successivi  Individuare (preliminarmente) una strategia di dichiarazioni per la rappresentazione dei dati  Partire dalla specifica del problema complessivo e sviluppare il main()  Individuare una prima divisione sommaria del problema in passi (sottoproblemi) e supporre di disporre di un sottoprogramma per ciascun passo
  • 271. Tecnica per raffinamenti successivi  Definire il prototipo del sottoprogramma (modalità di comunicazione con l’esterno)  Scrivere una prima versione del codice del main() usando sottoprogrammi che non esistono  Aggiungendo scheletri “vuoti” dei sottoprogrammi mancanti è già possibile compilare ed eseguire il codice per verificare
  • 272. Tecnica per raffinamenti successivi  Per completare la soluzione, è necessario scrivere il corpo dei sottoprogrammi mancanti  In alcuni casi il sottoprogramma è sufficientemente semplice da procedere per scrittura diretta del codice  In altri casi il sottoprogramma viene visto come un sottoproblema da affrontare e si riapplica il metodo  Approccio dall’alto (“top-down”)  l’approccio procede da problemi più generali a problemi via via più specifici
  • 273. Linee guida per la scrittura di codice  Linea guida n. 1 – Semplicità  adottare sempre la soluzione più semplice tra quelle che potrebbero funzionare  non complicare mai inutilmente il codice  In generale  la prima soluzione ad un problema non è mai la migliore  conviene migliorarla e renderla più generale con il tempo, quando il problema è più chiaro
  • 274. Linee guida per la scrittura di codice  Linea guida n. 2 – Leggibilità  adottare regole di stile  scegliere accuratamente gli identificatori per variabili e sottoprogrammi - notazione cammello  indentare il codice  adottare regole per la posizione delle parentesi  utilizzare sempre le parentesi
  • 275. Linee guida per la scrittura di codice  Linea guida n. 3 – Semplicità:  scrivere moduli brevi  nel caso di problemi complessi, spezzarli in più passi per frammentare la soluzione  il codice di un sottoprogramma non dovrebbe mai richiedere più di 30 secondi per essere interpretato da un altro programmatore
  • 276. Linee guida per la scrittura di codice  Linea guida n. 4 – Modularità  adottare la metodologia incrementale  procedere per raffinamenti successivi  Linea guida n. 5 – Verificabilità  compilare progressivamente e frequentemente il codice  verificare progressivamente il codice eseguibile
  • 277. Linee guida per la scrittura di codice  Linea guida n. 6 – Parametrizzabilità  ragionare accuratamente sui parametri  scegliere con cura quali e quanti parametri (evitare parametri inutili)  scegliere con cura il tipo dei parametri (standard o per riferimento)
  • 278. Linee guida per la scrittura di codice  Linea guida n. 7 – Modularità  “minimizzare l’accoppiamento” tra i sottoprogrammi  analizzare il diagramma delle chiamate  verificare che la logica applicativa del programma sia chiara ed ordinata  Linea guida n. 8 – Modularità  non utilizzare mai variabili globali  è consentito di utilizzare costanti globali
  • 279. Linee guida per la scrittura di codice  Linea guida n. 9 - Modularità  “massimizzare la coesione” all’interno di un sottoprogramma  ogni sottoprogramma deve avere una funzione precisa nell’applicazione  deve risolvere un problema ben preciso e non fare due o più cose diverse
  • 280. Linee guida per la scrittura di codice  Linea guida n. 10 - Modularità  separare i sottoprogrammi “orientati all’elaborazione” dai sottoprogrammi “orientati all’interazione con l’utente”  i secondi sono meno riutilizzabili, sia nella stessa applicazione che in applicazioni diverse  i primi dovrebbero essere pensati per essere per quanto possibile riutilizzabili
  • 281. Basi di Dati
  • 282. Basi di Dati Definizione  La base di dati (DB) è una collezione di dati logicamente correlati e rappresentati in modo omogeneo, utilizzati per rappresentare le informazioni di interesse per un sistema informativo  I dati costituiscono una risorsa per l’organizzazione che li gestisce, un patrimonio da sfruttare e proteggere
  • 283. Basi di Dati DBMS  Il Data Base Management System (DBMS) è un sistema software in grado di:  gestire collezioni di dati grandi, condivise e persistenti  assicurare la loro affidabilità e privatezza  essere efficiente ed efficace  disaccoppiare il modello dati dalla rappresentazione fisica
  • 284. Basi di Dati Modello di Dati  Un modello di dati è un insieme di concetti utilizzati per organizzare i dati di interesse e descrivere la struttura in modo che risulti comprensibile ad un elaboratore  Deve consentire di rappresentare le entità, i suoi attributi e le relazioni tra le entità  I modelli di dati più conosciuti sono:  Modello gerarchico  Modello reticolare  Modello ad oggetti  Modello relazionale
  • 285. Basi di Dati Modello gerarchico  Nel modello gerarchico i dati sono organizzati in record connessi tra loro secondo strutture ad albero.  Un albero può essere definito come un insieme di elementi (detti nodi) collegati tra loro da una relazione di ordine parziale (ossia che sussiste solo per alcune coppie di nodi).
  • 286. Basi di Dati Modello gerarchico  Una struttura gerarchica può rappresentarsi graficamente come un albero rovesciato; da questa rappresentazione derivano molti termini del gergo: radice, ramo, nodo, foglia.  Strutture gerarchiche si trovano in molti campi; la più classica è l'albero genealogico dal quale derivano altri termini del gergo informatico: padre, figlio...
  • 287. Basi di Dati Modello gerarchico  Le strutture ad albero sono molto usate in Informatica:  molti sistemi operativi (p.es. DOS, Windows, Unix ...) organizzano i file sul disco in un albero (file-system);  Ci sono una serie di regole:  Ogni record può avere solo 1 padre (genera ridondanza)  Il livello più alto è il punto di accesso a tutto  La cancellazione di un record elimina a cascata tutti i record figli  Comporta una forte dipendenza dei programmi dalle strutture
  • 288. Basi di Dati Modello reticolare  Una struttura reticolare, (o reticolo o grafo) è un insieme di nodi liberamente connessi tra di loro. I collegamenti tra due nodi si dicono archi  Gli archi possono essere semplici o orientati.  semplici: il collegamento è bilaterale  orientati: il collegamento è unilaterale
  • 289. Basi di Dati Modello reticolare  Nel modello reticolare i nodi sono legati tra di loro tramite strutture ad anello, che consentono l’accesso ai dati + facilmente.  Può essere visto come una estensione del modello gerarchico in cui i figli possono avere + padri.  Un grafo si dice:  connesso: se da ogni nodo è possibile raggiungere un qualsiasi altro nodo del grafo.  non connesso: può essere visto come un insieme di grafi connessi, isolati uno dall'altro.
  • 290. Basi di Dati Modello reticolare  Vantaggi:  Ogni nodo può permettere di raggiungere un determinato campo.  Un record può avere + padri (evita ridondanza)
  • 291. Basi di Dati Modello ad Oggetti  Nel modello dei dati a oggetti le entità del dominio vengono modellate con oggetti e relazioni fra oggetti.  Un ODBMS (Object Data Base Management System) offre le funzioni necessarie a rendere persistenti collezioni di oggetti e le relazioni fra di loro.  Vantaggi:  La naturalezza nel rappresentare dati complessi e l'abilità ad accedervi in modo efficiente sono il principale punto a favore di un ODBMS rispetto a un RDBMS.
  • 292. Basi di Dati Modello ad Oggetti continua…  A differenza che nel modello relazionale, nel modello a oggetti gli attributi di un oggetto possono essere di qualunque tipo: in particolare, un oggetto può contenere altri oggetti.  Inoltre l'ODBMS può essere istruito per privilegiare gli accessi a gruppi di oggetti eterogenei, in modo che il caricamento di un oggetto con tutte le sue componenti si svolga in un'operazione unica di accesso al disco; questa stessa operazione nei RDBMS deve essere eseguita tramite una o più JOIN, che è una delle operazioni più costose di un RDBMS.
  • 293. Basi di Dati Modello ad Oggetti  Svantaggi:  la mancanza di validi strumenti di amministrazione  una presunta difficoltà di apprendimento della tecnologia  una certa immaturità della tecnologia rispetto alle applicazioni critiche  una scarsa scalabilità
  • 294. Basi di Dati Modello ad Oggetti  Ma…  In molti casi questi problemi sono state superati da soluzioni affidabili, nelle quali i motori dei database lavorano come quelli dei tradizionali RDBMS per assicurare una gestione semplice e la giusta scalabilità
  • 295. Basi di Dati Modello Relazionale  Nel modello relazionale i dati sono organizzati in tabelle che rappresentano sia le entità che le relazioni tra di esse  Esso si basa sull'algebra relazionale e sulla teoria degli insiemi ed è strutturato attorno al concetto di relazione (detta anche tabella).
  • 296. Basi di Dati Modello Relazionale  Oggi è uno dei modelli logici più utilizzati, implementato su moltissimi DBMS sia commerciali che open source  Venne proposto da Edgar F. Codd nel 1970 per semplificare la scrittura di interrogazioni sui database e per favorire l’indipendenza dei dati; venne reso disponibile come modello logico in DBMS reali nel 1981.
  • 297. Basi di Dati Modello Relazionale  Codd propose 12 regole per definire un “database relazionale”:  Regola 1: l'informazione deve essere rappresentata sotto forma di tabelle.  Regola 2: Tutti i dati devono essere accessibili senza ambiguità  Regola 3: Il DBMS deve consentire all'utente di lasciare un campo vuoto, o con valore NULL.  Regola 4: la descrizione del database deve avvenire ad un livello logico tramite i metadati (come DDL).
  • 298. Basi di Dati Modello Relazionale continua…  Regola 5: deve esistere un linguaggio che permetta la gestione dei dati (come SQL)  Regola 6: si possono creare delle viste per vedere una parte dei dati. queste viste devono essere aggiornabili  Regola 7: le operazioni che avvengono su database devono avvenire anche sulle tabelle  Regola 8: I dati memorizzati nel database devono essere indipendenti dalle strutture di memorizzazione fisiche
  • 299. Basi di Dati Modello Relazionale continua…  Regola 9: i dati devono essere indipendenti dalla struttura logica del database per garantire la crescita naturale e la manutenzione del database  Regola 10: le restrizioni sui dati devono essere memorizzate nel database  Regola 11: l'accesso ai dati è indipendente dal tipo di supporto per la lettura o memorizzazione degli stessi  Regola 12: l'accesso ai dati non deve annullare le restrizioni o i vincoli di integrità del linguaggio principale (SQL).
  • 300. Algebra Relazionale
  • 301. Basi di Dati Algebra Relazionale  L'algebra relazione è un linguaggio procedurale cioè una descrizione della procedura da attuare per ottenere il risultato.  Operatori fondamentali (di base):  operatori unari di Selezione  operatori unari di Proiezione  operatori unari di Ridenominazione  operatori binari di Prodotto Cartesiano  operatori binari di Unione  operatori binari di Differenza
  • 302. Basi di Dati Algebra Relazionale  Operatori derivati (da quelli di base):  operatore binario di Intersezione  operatore di join in varie forme (theta-join, natural-join, etc.)
  • 303. Basi di Dati Algebra Relazionale  L’operazione di selezione  estrae un sottoinsieme di righe da una tabella in base a delle condizioni imposte ai valori contenuti n una o più colonne.  L’operazione di proiezione  estrae un sottoinsieme di colonne da una tabella
  • 304. Basi di Dati Algebra Relazionale  L'operatore di ridenominazione:  modifica lo schema di una relazione, cambiando i nomi di uno o più attributi.  L’operatore di prodotto cartesiano:  l'insieme di tutte le possibili coppie di due insiemi A e B che hanno per primo elemento un elemento di A e per secondo elemento un elemento di B.  Esempio: A{1,3} B{2,5} = {(1,2), (1,5), (3,2), (3,5)}
  • 305. Basi di Dati Algebra Relazionale  Operatore di unione  relazione contenente i valori che appartengono a A ed a B (A+B)  Operazione di differenza  relazione contenente i valori che appartengono ad A e non appartengono a B (A-B)  Operazione di intersezione  relazione contenente i valori che appartengono sia ad A che a B
  • 306. Basi di Dati Algebra Relazionale  L’operazione di congiunzione ( join )  combina le operazioni di prodotto e di selezione tra due (o più tabelle);  viene cioè effettuato prima il prodotto fra le tabelle e poi estratte solo le righe che soddisfano una determinata condizione tra le colonne della prima e della seconda tabella.
  • 307. Vincoli di integrità
  • 308. Basi di Dati Vincoli di integrità  I vincoli di integrità sono quei vincoli che devono essere rispettate affinché si possa considerare la bontà dell’informazione in essa contenuta.  Si disinguono in vincoli  Intra-relazionali: quando interessano una tabella  Chiave primaria  Chiave univoca  Vincoli di tupla  Inter-relazionali: quando interessano + tabelle  Chiave esterna
  • 309. Basi di Dati Vincoli di integrità  Vincoli intra-relazionali,  interessano una sola tabella  Chiave primaria  Definizione: un insieme K di attributi è superchiave per una relazione r se r non contiene due ennuple distinte t1 e t2 tali che t1[K] = t2[K]  Traduzione della definizione: serve a identificare univocamente le righe della tabella, dichiarando uno o più attributi come chiave primaria.  Due righe distinte non possono avere lo stesso valore sui campi scelti come primary key.
  • 310. Basi di Dati Vincoli di integrità  Chiave univoca  implementa una caratteristica simile alla chiave primaria, con la particolarità che gli attributi coinvolti possono assumere il valore nullo.  Si può definire il vincolo su uno o più attributi della tabella.
  • 311. Basi di Dati Vincoli di integrità  Vincoli di tupla  Definizione: vincolo di dominio di ciascuna ennupla, indipendentemente dalle altre ennuple  Traduzione della definizione: condizione su una colonna della tabella  Un esempio è il vincolo “not null”, usato per dichiarare che un dato attributo non può assumere il valore nullo.
  • 312. Basi di Dati Vincoli di integrità  Vincoli inter-relazionali  definiscono legami tra due o più tabelle  Chiave esterna  Definizione: Un vincolo di integrità referenziale (detto anche vincolo di “foreign key”) fra un insieme di attributi X di una relazione R1 e un’altra relazione R2 impone ai valori su X di ciascuna ennupla dell’istanza di R1 di comparire come valori della chiave (primaria) dell’istanza di R2  Traduzione della definizione: I valori delle colonne di una data tabella possono assumere soltanto dei valori specificati nelle colonne di un'altra tabella.
  • 313. SQL Structured Query Language
  • 314. Basi di Dati SQL  L'SQL nasce nel 1974 ad opera di Donald Chamberlin, nei laboratori dell'IBM. Nasce come strumento per lavorare con database che seguano il modello relazionale.  Nel 1981 IBM iniziò a vendere alcuni prodotti relazionali e nel 1983 rilasciò DB2, il suo DBMS relazionale diffuso ancor oggi insieme a SQL.  L'ANSI adottò SQL come standard fin dal 1986, senza apportare modifiche sostanziali alla versione inizialmente sviluppata da IBM.
  • 315. Basi di Dati SQL  Possiamo distinguere 3 versioni di SQL  SQL Base  SQL-86 - costrutti base  SQL-89 integrità referenziale  SQL-2  SQL- 92: entry level, intermediate level, full  SQL-3  SQL-99 estensione ad oggetti, trigger, ..  SL-2003 Estensione del modello a oggetti, SQL/XML
  • 316. Basi di Dati SQL  I sistemi commerciali sono classificati in base all’aderenza allo standard 92  Entry Level (SQL-89)  Intermediate Level  Full SQL (SQL-92)
  • 317. Basi di Dati SQL  Il linguaggio SQL (Structured Query Language) è l’insieme dei comandi che possono essere usati per accedere ai database relazionali  Caratteristiche:  Linguaggio di alto livello  Elabora più elementi insieme  Utilizzato a più livelli (utente, amministratore)  Estremamente portatile tra piattaforme
  • 318. Basi di Dati SQL  Data Definition Language (DDL)  permette di creare e cancellare database o di modificarne la struttura  Data Manipulation Language (DML)  permette di inserire, cancellare, modificare e leggere i dati  Data Control Language (DCL)  permette di gestire gli utenti e i permessi
  • 319. Basi di Dati SQL  Data Definition Language (DDL)  ALTER (INDEX, TABLE, VIEW)  CREATE (INDEX, TABLE, VIEW)  DROP (INDEX, TABLE, VIEW)  RENAME (TABLE, VIEW, SEQUENCE)  TRUNCATE (TABLE)
  • 320. Basi di Dati SQL  Data Manipulation Language (DML)  SELECT  DELETE  INSERT  UPDATE
  • 321. Basi di Dati SQL  Data Control Language (DCL)  GRANT  REVOKE  COMMIT  ROLLBACK  SAVEPOINT  LOCK TABLE
  • 322. Basi di Dati SQL  A seconda del database che si utilizza, sono presenti diversi tipi di dati.  Nel seguito un elenco di tipi del database Oracle:  CHAR stringa di caratteri di lunghezza stabilita  VARCHAR2 stringa di caratteri di lunghezza variabile (max 2000 caratteri)  LONG stringa di caratteri di lunghezza variabile (max 2GB)  NUMBER dato numerico intero  DECIMAL dato numerico decimale  INTEGER dato numerico intero
  • 323. Basi di Dati SQL continua…  SMALLINT dato numerico intero  DATE data ed orario  ROWID indirizzo fisico del record  RAW stringa binaria per contenere immagini, programmi  LONG RAW stringa binaria per contenere immagini, programmi (max 2GB)  CLOB stringa binaria per contenere caratteri (max 2GB)
  • 324. Progettazione di architetture Web
  • 325. Obiettivi  La definizione dell’architettura dell’applicazione deve assicurare il raggiungimento di un adeguato livello di servizio nei confronti delle seguenti dimensioni:  Prestazioni: sostenere il carico  Scalabilità: estendibile per mantenere prestazioni  Disponibilità: funzionalità continuative  Mantenimento dello stato: preservare stato utente  Sicurezza: dati riservati ad accesso autenticato
  • 326. Vincoli decisionali  La progettazione è condizionata da vincoli di carattere fisico, economico e organizzativo:  Costi: budget progetto limita lescelte  Complessità: la semplicità costa meno  Infrastruttura azienda: condiziona le scelte
  • 327. Scenari di installazione  Lo scenario di istallazione condiziona l’organizzazione aziendale perché definisce il servizio che si vuole raggiungere  Interna: locata e gestita in azienda  Housing: locata all’esterno ma gestita dall’azienda  Hosting: locata e gestita all’esterno
  • 328. Architettura standard  Nella realizzazione di una architettura web a pagine dinamica possiamo distinguere diversi componenti:  Utente  Internet/Intranet  Web Server  Application Server  DataBase
  • 329. Server singolo  Tutti i componenti (Web Server, Application Server, Database) sono installati su un’unica macchina fisica accessibile:  tramite la LAN aziendale  tramite Internet.  Nel caso di accesso da Internet  il router permette il collegamento con la rete internet  il Firewall garantisce le regole di controllo degli accessi
  • 330. Server doppio  Il primo passo per migliorare l’architettura consiste nel dedicare una macchina al database, in modo da migliorare prestazioni, scalabilità, disponibilità e sicurezza attraverso la creazione di una DMZ (DeMilitarized Zone)
  • 331. Replica verticale e orizzontale  Per consentire una maggiore garanzia in termini di scalabilità e tolleranza ai guasti, è prevista la configurazione che preveda:  Replica verticale: upgrade del server  Replica orizzontale: replica del server
  • 332. Conservazione dello stato  Per garantire la conservazione dello stato dell’utente, occorre gestire:  L’affinità di sessione: il bilanciatore di carico invia l’utente al server che gestisce la sua sessione  Base dati di sessioni: conservazioni delle sessioni in una base dati utilizzabili in caso di fail-over.
  • 333. Server triplo  Per consentire una maggiore efficienza in termini di risposta, possiamo separare il Web Server e l’Application Server in server distinti in modo da gestire meglio il loro funzionamento
  • 334. Maggiori garanzie  La massima flessibilità di configurazione e scalablità può essere raggiunta garantendo anche la replica di tutti i server coinvolti.
  • 335. Ottimizzare le prestazioni  Affinchè sia possibile migliorare le prestazioni della nostra applicazione, occorre seguire alcuni buoni consigli:  Migliorare il codice applicativo  Estendere la configurazione (repliche)  Introdurre meccanismi di caching
  • 336. Caching  Il caching consiste nel memorizzare temporaneamente le risorse in una locazione ad accesso veloce, da cui sia possibile recuperarle in seguito.  Ciò consente:  Ridurre la latenza di rete: percorso del client è + ridotto  Riduzione dello sforzo di calcolo: uso di copie salvate
  • 337. Caching  Dove posizionare la cache:  Caching su browser: browser del client  Proxy caching: proxy aziendale della LAN del client  Content Delivery Network: infrastrutture di caching gestite dal fornitore di servizi di contenuti  Accelleratori di server: buffer posizionato davanti ai cluster di server di contenuti
  • 338. Popolamento della cache  Gestione delle copie dei contenuti:  Approccio PUSH: trasferimento in massa dei contenuti dalla loro sede alla cache (in linea o fuori linea)  Approccio PULL: su richiesta del client. Se l’oggetto è nella cache (cache hit) viene restituito, altrimenti (cache miss) viene richiesto al server e si aggiorna la cache.  Protocollo di invalidazione della cache:  Insieme di regole che stabiliscono la durata di un oggetto in cache ed i criteri per stabilire che un oggetto non è più conforme all’oggetto originale