corso progettazione

338
Progettazione del software Giuseppe Dell'Abate

Upload: giuseppe-dellabate

Post on 20-Jan-2015

3.202 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Corso progettazione

Progettazione del software

Giuseppe Dell'Abate

Page 2: Corso progettazione

Produzione del software

il programmatore ascolta le esigenze del cliente

il programmatore scrive il codice che soddisferà le varie esigenze

Page 3: Corso progettazione

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

Page 4: Corso progettazione

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

Page 5: Corso progettazione

...ed ecco cosa succede.

Page 6: Corso progettazione

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

Page 7: Corso progettazione

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

modellazioneprocessi

Page 8: Corso progettazione

1-Stakeholder

Qualunque persona che influenza lo sviluppo del software Clienti: utilizzatori o proprietari del sistema Sviluppatori: analisti, progettisti, programmatori

ecc

Page 9: Corso progettazione

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

Page 10: Corso progettazione

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

Page 11: Corso progettazione

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

Page 12: Corso progettazione

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

Page 13: Corso progettazione

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

Page 14: Corso progettazione

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

Page 15: Corso progettazione

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

Page 16: Corso progettazione

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à

Page 17: Corso progettazione

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?

Page 18: Corso progettazione

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.

Page 19: Corso progettazione

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.

Page 20: Corso progettazione

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.

ISO 9000

Page 21: Corso progettazione

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

Page 22: Corso progettazione

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.

Page 23: Corso progettazione

Pianificazione di sistema

Page 24: Corso progettazione

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.

Page 25: Corso progettazione

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

Page 26: Corso progettazione

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”

Page 27: Corso progettazione

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”

Page 28: Corso progettazione

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

Page 29: Corso progettazione

Attività secondarie, non aggiungono valore ma sono necessarie Amministrazione e infrastruttura Gestione delle risorse umane Ricerca e sviluppo

Approccio VCM

Page 30: Corso progettazione

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

Page 31: Corso progettazione

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

Page 32: Corso progettazione

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

Page 33: Corso progettazione

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

Approccio ISA

Page 34: Corso progettazione

Metodologia di sviluppo

Page 35: Corso progettazione

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

Page 36: Corso progettazione

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

Page 37: Corso progettazione

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

Page 38: Corso progettazione

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

Page 39: Corso progettazione

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

Page 40: Corso progettazione

Sviluppo Implementare i moduli

Problemi: tempi, costi e competenze degli

sviluppatori

Page 41: Corso progettazione

Unit testing Module testing Sub-system testing System testing Acceptance testing = alfa-testing beta-testing

Testing

Page 42: Corso progettazione

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%)

Page 43: Corso progettazione

Requisiti

Requisiti Definizione degli obiettivi Linearita del processo Rigidita degli stadi

Page 44: Corso progettazione

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

Page 45: Corso progettazione

Spirale

Scomposizione: la complessita' viene

risolta procedendo per piccoli passi.

Incrementalità: I cambiamenti possono

essere integrati senza impatti.

Il progetto viene diviso per sottoinsiemi di funzionalità che vengono incrementati per periodo temporali.

Page 46: Corso progettazione

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 .

Page 47: Corso progettazione

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

Page 48: Corso progettazione

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)

Page 49: Corso progettazione

I 4 requisiti

1) Comunicazionetutti 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) Feedbacksin dal primo giorno si testa il codice

1) Coraggiosi dà in uso il sistema il prima possibile e si

implementano i cambiamenti richiesti man mano

Page 50: Corso progettazione

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

Le 12 regole di Extreme Programming

Page 51: Corso progettazione

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

Page 52: Corso progettazione

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

Page 53: Corso progettazione

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

Page 54: Corso progettazione

UML Unified Modeling

Language

Page 55: Corso progettazione

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.

Page 56: Corso progettazione

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.

Page 57: Corso progettazione

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.

Page 58: Corso progettazione

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.

Page 59: Corso progettazione

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.

Page 60: Corso progettazione

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

Page 61: Corso progettazione

“Method wars”

Metodi Storici SADT: Structured Analysis and Development

Technique DFD: Data Flow Diagram IDEF0: Integration Definition for Function

Modeling

Page 62: Corso progettazione

“Tre Amigos”

Tre Amigos Grady Booch: Object Oriented Design – OOD James Rumbaugh: Object Modeling

Technique - OMT Ivar Jacobson: Object-Oriented Software

Engineering - OOSE

Page 63: Corso progettazione

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

Page 64: Corso progettazione

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

Page 65: Corso progettazione

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

Page 66: Corso progettazione

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.

Page 67: Corso progettazione

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.

Page 68: Corso progettazione

Perchè visuale?

Sintesi a “colpo d'occhio” Visione delle entità coinvolte Visione delle Relazioni Visione delle Comportamenti

Page 69: Corso progettazione

Approccio ad UML

1) Abbozzo

2) Progetto

3) Linguaggio

Page 70: Corso progettazione

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

Page 71: Corso progettazione

Approccio ad UML

UML come progetto (blueprint) Forward e reverse engineering Forte dipendenza dal tool di modellazione Alto rigore formale Completezza

Page 72: Corso progettazione

Approccio ad UML

UML come linguaggio di programmazione Diagrammi compilabili No forward e reverse engineering Fortissima dipendenza dal tool di modellazione

Page 73: Corso progettazione

...specificare, visualizzare, costruire e documentare... Specificare

Dettagli di implementazione Visualizzare

Un immagine è meglio di 100 parole Costruire

Idee, pensieri Documentare

Interazione con gruppi esterni

Page 74: Corso progettazione

...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)

Page 75: Corso progettazione

...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

Page 76: Corso progettazione

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.

Page 77: Corso progettazione

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

Page 78: Corso progettazione

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.

Page 79: Corso progettazione

...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)

Page 80: Corso progettazione

...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...)

Page 81: Corso progettazione

Diagrammi UML

Page 82: Corso progettazione

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 )

Page 83: Corso progettazione

Diagrammi UML

Page 84: Corso progettazione

Diagrammi UMLUML 1.x

Class diagram Object diagram Deployment diagram Component diagram Package diagram Activity diagram Use case diagram Sequence diagram

Comunication diagram State Chart diagram

UML 2.x Class diagram Object diagram Deployment diagram Component diagram Package diagram Activity diagram Use case diagram Sequence diagram

Collaboration diagram State Machine diagram

Overview diagram Timing diagram Composite structure

diagram

uguali

modificati

nuovi

Page 85: Corso progettazione

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.

Page 86: Corso progettazione

Object Diagram

Consentono di descrivere un sistema in termini di oggetti e relative relazioni.

Concetti di: oggetto, relazione.

Page 87: Corso progettazione

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.

Page 88: Corso progettazione

Component Diagram

Consentono di descrivere l'organizzazione e le dipendenze tra componenti software.

Concetti di: componente, interfaccia.

Page 89: Corso progettazione

Package Diagram

Consentono di mostrare l'organizzazione dei packages e dei loro elementi.

Concetti di: package, merge, import, nested.

Page 90: Corso progettazione

Sequence Diagram

Consentono di mostrare il comportamento dinamico di un gruppo di oggetti che interagiscono.

Concetti di: entità, messaggi.

Page 91: Corso progettazione

Activity Diagram

Consentono di rappresentare la logica interna di un processo.

Concetti di: attività, flusso, responsabilità.

Page 92: Corso progettazione

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.

Page 93: Corso progettazione

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.

Page 94: Corso progettazione

State Machine Diagram

Consentono la descrizione del comportamento di entità o di classi in termini di stato.

Concetti di: stato, transizione.

Page 95: Corso progettazione

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.

Page 96: Corso progettazione

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.

Page 97: Corso progettazione

Composite-structure Diagram

Mostra i sottosistemi che compongono il sistema

Concetti di: parte, connettore, porte.

Page 98: Corso progettazione

UML 2.0

UML 2 è distribuito dall' OMG in 4 specifiche1) 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.

Page 99: Corso progettazione

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

Page 100: Corso progettazione

CASE

Rose; Rational Modeler ed Architect (IBM - Rational)

Together (Borland) Visio (Microsoft) TAU (Telelogic) Objecteering (Softeam) Poseidon (Gentleware) Enterprise Architect (Sparx

Systems) Magic Draw (No Magic) ArgoUML (open source) StarUML (open source) UModel 2005 (Altova) TAU Developer and TAU

Architect (Telelogic) Jude (open-source)

Real-time Studio(ARTiSAN) OMONDO EclipseUML Studio

(open source) PathMATE (Pathfinder

Solutions) Metis with UML 2.0 Template

(Computas) Describe (Embarcadero) I-Logix Rhapsody MetaMatrix MetaBase Modeler

(Tibco) Java Studio Enterprise (Sun

Microsystems) Model-in-Action (Mia Software) Pattern Weaver Ver. 2.0 EDGE UML Suite (Mentor

Graphics) InnovatorAOX 2006 Object

eXcellence (MID)

Page 101: Corso progettazione

Sistema di elaborazione

Page 102: Corso progettazione

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

Page 103: Corso progettazione

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:

Page 104: Corso progettazione

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

Page 105: Corso progettazione

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

Page 106: Corso progettazione

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

Sistemi di elaborazione Classificazione

Page 107: Corso progettazione

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

Page 108: Corso progettazione

Sistema di elaborazioneHardware

CPU Memoria RAM Scheda Video Periferiche I/O BUS di sistema

Page 109: Corso progettazione

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

Page 110: Corso progettazione

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

Page 111: Corso progettazione

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)

Page 112: Corso progettazione

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”

Page 113: Corso progettazione

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

Page 114: Corso progettazione

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

Sistemi di elaborazione Ciclo macchina

Page 115: Corso progettazione

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

Page 116: Corso progettazione

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

Page 117: Corso progettazione

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 )

CPU - Central Processing Unit Unita elementati

Page 118: Corso progettazione

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)

CPU - Central Processing Unit Unita elementati

Page 119: Corso progettazione

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

CPU - Central Processing Unit Unita elementati

Page 120: Corso progettazione

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

Page 121: Corso progettazione

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)

CPU - Central Processing Unit Registri

Page 122: Corso progettazione

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

CPU - Central Processing Unit Registri

Page 123: Corso progettazione

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

CPU - Central Processing Unit Registri

Page 124: Corso progettazione

CPU - Central Processing Unit Schema a blocchi

Memoria Centrale

Bus

Unità di controllo( UC )

Unità aritmetico –logica( ALU )

Registri generali( R )….R0R1R2….Rn

Contatore di programma( PC )

Registro di Stato( SR )

Registro di indirizzo della memoria

( MAR )

Registro dei datidella memoria

( MDR )

Registro di istruzione( IR )

Page 125: Corso progettazione

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

Page 126: Corso progettazione

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

Page 127: Corso progettazione

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

Page 128: Corso progettazione

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

Page 129: Corso progettazione

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

Page 130: Corso progettazione

Tipo di Memoria

Le memorie si dividono in due categorie principali: RAM ROM

Page 131: Corso progettazione

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

Page 132: Corso progettazione

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)

Page 133: Corso progettazione

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)

Page 134: Corso progettazione

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)

Memoria ROM Classificazione

Page 135: Corso progettazione

MemoriaModalità 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

Page 136: Corso progettazione

MemoriaConservazione 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

Page 137: Corso progettazione

MemoriaConservazione 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

Page 138: Corso progettazione

MemoriaSchede 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

Page 139: Corso progettazione

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

Page 140: Corso progettazione

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

Page 141: Corso progettazione

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

Page 142: Corso progettazione

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

Page 143: Corso progettazione

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:

Page 144: Corso progettazione

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

Page 145: Corso progettazione

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

Page 146: Corso progettazione

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

Page 147: Corso progettazione

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

Page 148: Corso progettazione

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

Page 149: Corso progettazione

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”)

Page 150: Corso progettazione

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)

Page 151: Corso progettazione

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

Page 152: Corso progettazione

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

Page 153: Corso progettazione

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

Page 154: Corso progettazione

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”

Page 155: Corso progettazione

Sistemi Operativi

Page 156: Corso progettazione

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

Page 157: Corso progettazione

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

Page 158: Corso progettazione

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

Page 159: Corso progettazione

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)

Page 160: Corso progettazione

Sistema OperativoComponenti 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

Page 161: Corso progettazione

Sistemi OperativiGestore 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

Page 162: Corso progettazione

Sistemi OperativiGestore 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

Page 163: Corso progettazione

Sistemi OperativiGestore 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)

Page 164: Corso progettazione

Sistemi OperativiGestore 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

Page 165: Corso progettazione

Sistemi OperativiGestore 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

Page 166: Corso progettazione

Sistemi OperativiL’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

Page 167: Corso progettazione

Istruzioni e linguaggi

Page 168: Corso progettazione

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.

Page 169: Corso progettazione

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).

Page 170: Corso progettazione

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à.

Page 171: Corso progettazione

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.

Page 172: Corso progettazione

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.

Page 173: Corso progettazione

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.

Page 174: Corso progettazione

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

Page 175: Corso progettazione

Istruzioni e linguaggiLinguaggio 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

Page 176: Corso progettazione

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

Page 177: Corso progettazione

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

Page 178: Corso progettazione

Istruzioni e linguaggi

Possiamo aggregare i numerosi linguaggi di programmazione esistenti sulla base del modello astratto ( paradigma ) di programmazione

Page 179: Corso progettazione

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).

Page 180: Corso progettazione

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.

Page 181: Corso progettazione

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++

Page 182: Corso progettazione

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

Page 183: Corso progettazione

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

Istruzioni e linguaggi

Page 184: Corso progettazione

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.

Istruzioni e linguaggi

Page 185: Corso progettazione

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

Page 186: Corso progettazione

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.

Page 187: Corso progettazione

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”.

Istruzioni e linguaggi

Page 188: Corso progettazione

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)

Page 189: Corso progettazione

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

Istruzioni e linguaggi

Page 190: Corso progettazione

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

Page 191: Corso progettazione

Valori, tipi e operatori

Page 192: Corso progettazione

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

Page 193: Corso progettazione

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.

Valori, tipi e operatori- Valori -

Page 194: Corso progettazione

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.

Page 195: Corso progettazione

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.

Page 196: Corso progettazione

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

Page 197: Corso progettazione

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.

Valori, tipi e operatori- Valori -

Page 198: Corso progettazione

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.

Page 199: Corso progettazione

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.

Valori, tipi e operatori- Valori -

Page 200: Corso progettazione

Valori, tipi e operatori- Valori -

Page 201: Corso progettazione

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.

Page 202: Corso progettazione

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, #).

Page 203: Corso progettazione

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.

Valori, tipi e operatori- Tipi -

Page 204: Corso progettazione

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.

Page 205: Corso progettazione

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.

Valori, tipi e operatori- Tipi -

Page 206: Corso progettazione

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 (! + * / )

Page 207: Corso progettazione

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

Page 208: Corso progettazione

Valori, tipi e operatori- Operatori -

Il linguaggio di programmazione mette a disposizione del programmatore una serie di operatori utili, tra i quali:

Page 209: Corso progettazione

Valori, tipi e operatoriOperatori 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.

Page 210: Corso progettazione

Valori, tipi e operatoriOperatori 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

Page 211: Corso progettazione

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

Valori, tipi e operatoriOperatori di

assegnamento

Page 212: Corso progettazione

Valori, tipi e operatoriOperatori 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;

Page 213: Corso progettazione

Valori, tipi e operatoriOperatori aritmetici

Sono i più comuni operatori aritmetici (somma, sottrazione, moltiplicazione, divisione e modulo).

Sono operatori binari ovvero operatori che necessitano di due operandi:

Page 214: Corso progettazione

Valori, tipi e operatoriOperatori 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.

Page 215: Corso progettazione

Valori, tipi e operatoriOperatori 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 ‘<=’)

Page 216: Corso progettazione

Gli operatori ‘=’ e ‘!=’ sono applicabili a valori di qualunque natura

Gli altri operatori richiedono una relazione d’ordine sull’insieme di valori

Valori, tipi e operatoriOperatori relazionali

Page 217: Corso progettazione

Valori, tipi e operatoriOperatori 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’)

Page 218: Corso progettazione

Non sono operatori logici, ma consentono di costruire espressioni che possono essere usate come argomenti di operatori logici -1 <= x AND x <= 1

Valori, tipi e operatoriOperatori relazionali

Page 219: Corso progettazione

Valori, tipi e operatoriOperatori 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

Page 220: Corso progettazione

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.

Valori, tipi e operatoriOperatori di shift bit a bit

Page 221: Corso progettazione

Valori, tipi e operatoriOperatori logici

Consentono di eseguire operazioni logiche su tipi primitivi operando sulla loro rappresentazione binaria.

Page 222: Corso progettazione

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

Page 223: Corso progettazione

Operatori ternari es.: operatore condizionale “?:” true ? 3:6 il risultato sarà 3 false ? 3:6 il risultato sarà 6

Valori, tipi e operatori- Operatori -

Page 224: Corso progettazione

Costrutti decisionali ed iterativi

Page 225: Corso progettazione

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

Page 226: Corso progettazione

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.

Page 227: Corso progettazione

Costrutto decisionaleIf-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;

Page 228: Corso progettazione

Costrutto decisionaleIf-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

Page 229: Corso progettazione

Costrutto decisionaleIf-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.

Page 230: Corso progettazione

Costrutto decisionaleswitch

Il costrutto switch permette di gestire tutte quelle situazioni in cui dobbiamo prendere scelte diverse a seconda del valore di un'espressioneswitch (espressione) { case val1: istruzione_na; break; case val2: istruzione_nb;break; default: istruzione_ndefault;break;}

Page 231: Corso progettazione

Costrutto decisionaleswitch

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.

Page 232: Corso progettazione

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

Page 233: Corso progettazione

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;}

Page 234: Corso progettazione

Se si desidera che il ciclo venga ripetuto un numero prefissato di volte

i = 0;while(i<=100) {

ISTRUZIONI DA RIPETEREi = i + 1;

}

Costrutti Iterativi while

Page 235: Corso progettazione

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}

Page 236: Corso progettazione

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();

Page 237: Corso progettazione

Array

Page 238: Corso progettazione

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 )

Page 239: Corso progettazione

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.

Page 240: Corso progettazione

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;

Array

Page 241: Corso progettazione

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.

Page 242: Corso progettazione

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.

Array

Page 243: Corso progettazione

Struttura del programma

Page 244: Corso progettazione

Proprietà e Metodi

Un programma è composto da 2 gruppi di elementi:

Proprietà Metodi

Page 245: Corso progettazione

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

Proprietà e Metodi

Page 246: Corso progettazione

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.

Page 247: Corso progettazione

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 ); }

Page 248: Corso progettazione

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

Procedure

Page 249: Corso progettazione

Funzioni

Elaborano eventuali parametri e restituiscono un risultato

Esempio:int moltiplicavalori(int a, int b) { risultato= a * b; return(risultato);}

Page 250: Corso progettazione

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

Funzioni

Page 251: Corso progettazione

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.

Page 252: Corso progettazione

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

Passaggio di parametri

Page 253: Corso progettazione

Programmazione modulare

Page 254: Corso progettazione

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

Page 255: Corso progettazione

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à

Page 256: Corso progettazione

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

Page 257: Corso progettazione

Diagramma delle Chiamate

Page 258: Corso progettazione

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

Page 259: Corso progettazione

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

Diagramma delle Chiamate

Page 260: Corso progettazione

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

Page 261: Corso progettazione

Diagramma delle Chiamate

Page 262: Corso progettazione

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 ?

Page 263: Corso progettazione

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

Page 264: Corso progettazione

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

Regola di visibilità n.1

Page 265: Corso progettazione

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

Page 266: Corso progettazione

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

Dati Locali e Dati Globali

Page 267: Corso progettazione

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

Page 268: Corso progettazione

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)

Page 269: Corso progettazione

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

Page 270: Corso progettazione

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

Page 271: Corso progettazione

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

Page 272: Corso progettazione

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

Tecnica per raffinamenti successivi

Page 273: Corso progettazione

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

Page 274: Corso progettazione

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

Page 275: Corso progettazione

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

Page 276: Corso progettazione

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

Page 277: Corso progettazione

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)

Linee guida per la scrittura di codice

Page 278: Corso progettazione

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

Page 279: Corso progettazione

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

Page 280: Corso progettazione

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

Linee guida per la scrittura di codice

Page 281: Corso progettazione

Basi di Dati

Page 282: Corso progettazione

Basi di DatiDefinizione

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

Page 283: Corso progettazione

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

Basi di DatiDBMS

Page 284: Corso progettazione

Basi di DatiModello 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

Page 285: Corso progettazione

Basi di DatiModello 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).

Page 286: Corso progettazione

Basi di DatiModello 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...

Page 287: Corso progettazione

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

Basi di DatiModello gerarchico

Page 288: Corso progettazione

Basi di DatiModello 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

Page 289: Corso progettazione

Basi di DatiModello 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.

Page 290: Corso progettazione

Vantaggi: Ogni nodo può permettere di raggiungere un

determinato campo. Un record può avere + padri (evita ridondanza)

Basi di DatiModello reticolare

Page 291: Corso progettazione

Basi di DatiModello 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.

Page 292: Corso progettazione

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.

Basi di DatiModello ad Oggetti

Page 293: Corso progettazione

Basi di DatiModello 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à

Page 294: Corso progettazione

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à

Basi di DatiModello ad Oggetti

Page 295: Corso progettazione

Basi di DatiModello 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).

Page 296: Corso progettazione

Basi di DatiModello 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.

Page 297: Corso progettazione

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).

Basi di DatiModello Relazionale

Page 298: Corso progettazione

Basi di DatiModello 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

Page 299: Corso progettazione

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).

Basi di DatiModello Relazionale

Page 300: Corso progettazione

Algebra Relazionale

Page 301: Corso progettazione

Basi di DatiAlgebra 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

Page 302: Corso progettazione

Operatori derivati (da quelli di base): operatore binario di Intersezione operatore di join in varie forme (theta-join,

natural-join, etc.)

Basi di DatiAlgebra Relazionale

Page 303: Corso progettazione

Basi di DatiAlgebra 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

Page 304: Corso progettazione

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)}

Basi di DatiAlgebra Relazionale

Page 305: Corso progettazione

Basi di DatiAlgebra 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

Page 306: Corso progettazione

Basi di DatiAlgebra 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.

Page 307: Corso progettazione

Vincoli di integrità

Page 308: Corso progettazione

Basi di DatiVincoli 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

Page 309: Corso progettazione

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.

Basi di DatiVincoli di integrità

Page 310: Corso progettazione

Basi di DatiVincoli 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.

Page 311: Corso progettazione

Basi di DatiVincoli 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.

Page 312: Corso progettazione

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.

Page 313: Corso progettazione

SQL Structured Query

Language

Page 314: Corso progettazione

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.

Page 315: Corso progettazione

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

Page 316: Corso progettazione

I sistemi commerciali sono classificati in base all’aderenza allo standard 92 Entry Level (SQL-89) Intermediate Level Full SQL (SQL-92)

Basi di Dati SQL

Page 317: Corso progettazione

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

Page 318: Corso progettazione

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

Page 319: Corso progettazione

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)

Page 320: Corso progettazione

Data Manipulation Language (DML) SELECT DELETE INSERT UPDATE

Basi di Dati SQL

Page 321: Corso progettazione

Basi di Dati SQL

Data Control Language (DCL) GRANT REVOKE COMMIT ROLLBACK SAVEPOINT LOCK TABLE

Page 322: Corso progettazione

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

Page 323: Corso progettazione

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)

Basi di Dati SQL

Page 324: Corso progettazione

Progettazione di architetture Web

Page 325: Corso progettazione

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

Page 326: Corso progettazione

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

Page 327: Corso progettazione

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

Page 328: Corso progettazione

Architettura standard Nella realizzazione di una

architettura web a pagine dinamica possiamo distinguere diversi componenti: Utente Internet/Intranet Web Server Application Server DataBase

Page 329: Corso progettazione

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

Page 330: Corso progettazione

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)

Page 331: Corso progettazione

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

Page 332: Corso progettazione

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.

Page 333: Corso progettazione

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

Page 334: Corso progettazione

Maggiori garanzie

La massima flessibilità di configurazione e scalablità può essere raggiunta garantendo anche la replica di tutti i server coinvolti.

Page 335: Corso progettazione

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

Page 336: Corso progettazione

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

Page 337: Corso progettazione

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

Page 338: Corso progettazione

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