SlideShare ist ein Scribd-Unternehmen logo
1 von 338
Downloaden Sie, um offline zu lesen
Progettazione del software



Giuseppe Dell'Abate
Produzione del software
   il programmatore ascolta le
    esigenze del cliente
   il programmatore scrive il codice
    che soddisferà le varie esigenze
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
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
...ed ecco cosa succede.
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
Triangolo di successo

    Al fine di ottenere i risultati sperati si è
     individuato il così detto “triangolo di
     successo”
    1. Stakeholder: persone che hanno un ruolo nel
       progetto software
    2. Processi: insieme di attività e procedure
       organizzative
    3. Modellazione: linguaggio per costruire modelli
       da discutere con i clienti e gli sviluppatori
                     stakeholder



         processi                  modellazione
1-Stakeholder

   Qualunque persona che influenza lo
    sviluppo del software
       Clienti: utilizzatori o proprietari del sistema
       Sviluppatori: analisti, progettisti, programmatori
        ecc
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
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
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
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
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
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
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
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à
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?
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.
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.
ISO 9000

   Il certificato che viene rilasciato é la
    dichiarazione che l'azienda adotta un
    sistema di regole, responsabilità, controlli,
    ecc... conforme alla famiglia di norme ISO
    9000.
   Solo gli Organismi accreditati presso un
    Ente di Accreditamento riconosciuto
    possono rilasciare certificati di conformità
    alla ISO 9000.
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
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.
Pianificazione di sistema
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.
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
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”
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”
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
Approccio VCM

   Attività secondarie, non aggiungono valore
    ma sono necessarie
       Amministrazione e infrastruttura
       Gestione delle risorse umane
       Ricerca e sviluppo
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
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
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
Approccio ISA
   Descrizioni, servono per definire le
    caratteristiche del sistema:
       Composizione dei dati
       Descrivere i processi di business
       I componenti del processi dove si posiziona
       Chi usa i componenti
       In che modo vengono usati
Metodologia di sviluppo
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
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
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
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
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
Sviluppo
   Implementare i moduli

   Problemi:
       tempi, costi e competenze degli
        sviluppatori
Testing

    Unit testing

    Module testing

    Sub-system testing

    System testing

    Acceptance testing = alfa-testing

    beta-testing
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%)
Requisiti
   Requisiti
       Definizione degli obiettivi
       Linearita del processo
       Rigidita degli stadi
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
Spirale

    Il progetto viene diviso per sottoinsiemi di
    funzionalità che vengono incrementati per
    periodo temporali.
   Scomposizione:
        la complessita' viene
         risolta procedendo per
         piccoli passi.
   Incrementalità:
        I cambiamenti possono
         essere integrati senza
         impatti.
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 .
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
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)
I 4 requisiti

1) Comunicazione
      tutti possono parlare con tutti, persino l'ultimo
     dei programmatori con il cliente
1) Semplicità
       gli analisti mantengano la descrizione formale
     il più semplice e chiara possibile
1) Feedback
      sin dal primo giorno si testa il codice
1) Coraggio
      si dà in uso il sistema il prima possibile e si
     implementano i cambiamenti richiesti man
     mano
Le 12 regole di
      Extreme Programming
1) Progettare con il cliente;
2) Test funzionali e unitari;
3) Refactoring
     riscrivere il codice senza alterarne le
      funzionalità esterne
1) Progettare al minimo;
2) Descrivere il sistema con una metafora,
   anche per la descrizione formale;
3) Proprietà del codice collettiva
     contribuisce alla stesura chiunque sia
      coinvolto nel progetto
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
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
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
UML
Unified Modeling
   Language
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.
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.
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.
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.
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.
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
“Method wars”
   Metodi Storici
       SADT: Structured Analysis and Development
        Technique
       DFD: Data Flow Diagram
       IDEF0: Integration Definition for Function
        Modeling
“Tre Amigos”
   Tre Amigos
       Grady Booch: Object Oriented Design – OOD
       James Rumbaugh: Object Modeling
        Technique - OMT
       Ivar Jacobson: Object-Oriented Software
        Engineering - OOSE
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
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
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
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.
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.
Perchè visuale?
   Sintesi a “colpo d'occhio”
       Visione delle entità coinvolte
       Visione delle Relazioni
       Visione delle Comportamenti
Approccio ad UML

1) Abbozzo

2) Progetto

3) Linguaggio
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
Approccio ad UML
   UML come progetto (blueprint)
       Forward e reverse engineering
       Forte dipendenza dal tool di modellazione
       Alto rigore formale
       Completezza
Approccio ad UML
   UML come linguaggio di programmazione
       Diagrammi compilabili
       No forward e reverse engineering
       Fortissima dipendenza dal tool di modellazione
...specificare, visualizzare,
costruire e documentare...
   Specificare
       Dettagli di implementazione
   Visualizzare
       Un immagine è meglio di 100 parole
   Costruire
       Idee, pensieri
   Documentare
       Interazione con gruppi esterni
...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)
...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
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.
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
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.
...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)
...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...)
Diagrammi UML
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 )
Diagrammi UML
Diagrammi UML
            UML 1.x                     
                                            UML 2.x
   Class diagram                       
                                            Class diagram
   Object diagram                      
                                            Object diagram
   Deployment diagram                  
                                            Deployment diagram
   Component diagram        uguali     
                                            Component diagram
   Package diagram                     
                                            Package diagram
   Activity diagram                    
                                            Activity diagram
   Use case diagram                    
                                            Use case diagram
   Sequence diagram                    
                                            Sequence diagram
   Comunication diagram                
                                            Collaboration diagram
   State Chart diagram                     State Machine diagram
                           modificati   




                                        
                                            Overview diagram
                                        
                                            Timing diagram
                             nuovi      
                                            Composite structure
                                            diagram
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.
Object Diagram
   Consentono di descrivere un sistema in
    termini di oggetti e relative relazioni.
   Concetti di: oggetto, relazione.
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.
Component Diagram
   Consentono di descrivere l'organizzazione
    e le dipendenze tra componenti software.
   Concetti di: componente, interfaccia.
Package Diagram
   Consentono di mostrare l'organizzazione
    dei packages e dei loro elementi.
   Concetti di: package, merge, import,
    nested.
Sequence Diagram
   Consentono di mostrare il comportamento
    dinamico di un gruppo di oggetti che
    interagiscono.
   Concetti di: entità, messaggi.
Activity Diagram
   Consentono di rappresentare la logica
    interna di un processo.
   Concetti di: attività, flusso, responsabilità.
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.
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.
State Machine Diagram
   Consentono la descrizione del comportamento
    di entità o di classi in termini di stato.
   Concetti di: stato, transizione.
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.
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.
Composite-structure
           Diagram
   Mostra i sottosistemi che compongono il
    sistema
   Concetti di: parte, connettore, porte.
UML 2.0
UML 2 è distribuito dall' OMG in 4 specifiche
1) Diagram Interchange Specification
     layout dello schema con strumenti diversi (xmi)
1) UML Infrastructure
     definisce il core dell'uml, cio' il metamodello
      utilizzato
1) UML Superstructure
     definizione formale degli elementi uml, utilizzata
      dai tool dei vendor e definisce in dettaglio i
      diagrammi utilizzati
1) Object Constraint Language (OCL)
     definisce le regole e le logiche da utilizzare. Ha
      una sintassi e delle parole chiavi.
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
CASE
   Rose; Rational Modeler ed
                                  
                                      Real-time Studio(ARTiSAN)
    Architect (IBM - Rational)    
                                      OMONDO EclipseUML Studio
   Together (Borland)                (open source)
   Visio (Microsoft)
                                  
                                      PathMATE (Pathfinder
                                      Solutions)
   TAU (Telelogic)               
                                      Metis with UML 2.0 Template
   Objecteering (Softeam)            (Computas)
   Poseidon (Gentleware)         
                                      Describe (Embarcadero)
   Enterprise Architect (Sparx   
                                      I-Logix Rhapsody
    Systems)                      
                                      MetaMatrix MetaBase Modeler
   Magic Draw (No Magic)             (Tibco)
   ArgoUML (open source)         
                                      Java Studio Enterprise (Sun
   StarUML (open source)             Microsystems)
   UModel 2005 (Altova)          
                                      Model-in-Action (Mia Software)
   TAU Developer and TAU         
                                      Pattern Weaver Ver. 2.0
    Architect (Telelogic)         
                                      EDGE UML Suite (Mentor
   Jude (open-source)                Graphics)
                                  
                                      InnovatorAOX 2006 Object
                                      eXcellence (MID)
Sistema di elaborazione
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
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:
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
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
Sistemi di elaborazione
        Classificazione
continuo…
    palmtop: personal computer di ridotta potenza

     utilizzati come agende elettroniche
    home computer: calcolatori di bassa potenza e

     molto essenziali (il video è un televisore, es.
     Commodore 64)
    console: evoluzione dei precedenti, dedicati

     esclusivamente all’uso ludico
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
Sistema di elaborazione
           Hardware
   CPU
   Memoria RAM
   Scheda Video
   Periferiche I/O
   BUS di sistema
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
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
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)
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”
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
Sistemi di elaborazione
             Ciclo macchina
   Fase di decode
       La CPU esamina il contenuto
        del registro delle istruzioni
        (IR) e riconosce qual è
        l’istruzione che deve essere
        eseguita
   Fase di execute
       La CPU manda ai vari
        dispositivi (ALU inclusa) i
        comandi per eseguire
        l’istruzione indicata
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
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
CPU - Central Processing Unit
          Unita elementati
   Composta da unita elementari:
       Unità di controllo (CU)
       Unità logico-aritmetica (ALU)
       Registri (R)
       Unità di virgola mobile ( FPU )
       Unita di gestione della memoria ( MMU )
CPU - Central Processing Unit
          Unita elementati
   Unità di controllo (CU)
       preposta alla organizzazione della sequenza di
        attività ,
       ha il compito di coordinare l’attività interna
        della CPU stessa con quella di tutte le altre
        componenti del sistema
   Unità logico-aritmetica (ALU)
       Predisposta alle operazioni logiche (somma,
        divisione, condizioni, iterazioni)
CPU - Central Processing Unit
          Unita elementati
   Registri
       Predisposti a contenere informazioni, ad
        accesso rapido, recuperate nella memoria
        centrale o frutto di elaborazione
   Unità di virgola mobile ( FPU )
       Preposta ad eseguire calcolo in virgola mobile
   Unita di gestione della memoria ( MMU )
       Preposta a mappare la memoria virtuale in
        fisica, al supporto di protezione della memoria
        ed alla gestione della memoria virtuale
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
CPU - Central Processing Unit
               Registri
   Alcuni registri possono avere un compito
    specifico mentre altri possono essere
    generici
       Contatori di programma (PC)
       Registro di istruzione (IR)
       Registri generali (R)
       Registri di stato (SR)
       Registro di indirizzi della memoria (MAR)
       Registri dati della memoria (MDR)
CPU - Central Processing Unit
               Registri
   Contatori di programma (PC)
       contiene l’indirizzo dell’istruzione da eseguire
        in un dato istante
   Registro di istruzione (IR)
       contiene l’istruzione elementare da eseguire
   Registri generali (R)
       contengono informazioni di accesso rapido
CPU - Central Processing Unit
               Registri
   Registri di stato (SR)
       Contengono informazioni riguardo lo stato del
        processore, l’istruzione da eseguire, le
        condizioni particolari e le azioni da
        intraprendere per gestirle
   Registro di indirizzi della memoria (MAR)
       Contiene i puntatori ai registri della memoria
        utilizzati in I/O
   Registri dati della memoria (MDR)
       Contiene i dati trasferiti o da trasferire nella
        memoria
CPU - Central Processing Unit
      Schema a blocchi

          Unità di controllo           Unità aritmetico –logica
               ( UC )                          ( ALU )


                                                                         Memoria Centrale
Registri generali     Contatore di programma        Registro dei dati
     (R)                       ( PC )                della memoria
      ….                                                ( MDR )
       R0
       R1
       R2               Registro di istruzione
      ….                        ( IR )
       Rn                                        Registro di indirizzo
                                                    della memoria
                                                       ( MAR )               Bus
                          Registro di Stato
                               ( SR )
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
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
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
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
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
Tipo di Memoria
   Le memorie si dividono in due categorie
    principali:
       RAM
       ROM
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
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)
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)
Memoria ROM
                Classificazione
continua…
   EEPROM ( Electrically EPROM)
       Come le precedenti, vengono cancellate con
        impulsi elettrici
   Flash EPROM
       Riscrivibili più volte senza apparecchiature
        particolari; si possono scrivere solo a settori
        ⇒non utilizzabili come DRAM, ma come piccole
        memorie di massa per dispositivi programmati
        (es. modem)
Memoria
             Modalità di accesso
   Il processore può accedere ai dati:
       direttamente ( tramite IRQ )
       indirettamente “Controller MMU”

   La memoria può essere utilizzata dai
    processori, in modo:
       Esclusivo : allocazione esclusiva dell’area di
        memoria
       Condiviso: condivisione dell’area di memoria
       Misto: parte condivisa e parte esclusiva
Memoria
        Conservazione del dato
  L’informazione è mantenuta in modo:
1) Dinamico
       usano i condensatori, ma richiedono continui
        refresh elettrici delle celle cariche.
       Sono le memorie più economiche e
        frequentemente usate. Sono memorie
        relativamente “lente” perché richiedono un
        continuo aggiornamento dei dati durante il
        quale la memoria non è utilizzabile
2) Statico
       usano i flip-flop, ma sono molto costosi.
       Più veloci e costose delle DRAM, non hanno
        bisogno del continuo aggiornamento dei dati
Memoria
        Conservazione del dato
3) A cambiamento di fase:
       usano GST - Germano, Antimonio, Tellurio –
        sollecitando il cambio di fase del materiale ma
        sono prototipi (02/2008)

   La temporizzazione dell’accesso è di tipo:
       Sincrona: basato sulla velocità di clock
       Asincrona: basato sui segnali del dispositivo
Memoria
    Schede RAM
  Il package delle RAM è di tipo:
1) SIMM, Single In-Line Memory
   Module
       è un modello di scheda di memoria
        RAM caratterizzata da contatti su una
        sola faccia della scheda.
       Usata per Pentium I
2) DIMM, Dual In-line Memory
   Module
       è l'evoluzione delle SIMM, da cui si
        differenziano per il numero di
        contatti, la dimensione leggermente
        maggiore e il tempo di accesso.
       Usata per Pentium II e successivi
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
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
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
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
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:
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
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
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
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
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
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”)
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)
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
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
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
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”
Sistemi Operativi
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
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
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
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)
Sistema Operativo
          Componenti funzionali
   Non è possibile individuare un unico
    schema realizzativo per tutte le tipologie di
    sistemi operativi, però si possono
    identificare cinque componenti funzionali
    comuni a tutti i sistemi:
       gestore della CPU
       gestore della memoria
       gestore dei dispositivi di I/O
       gestore del file system
       interprete dei comandi
Sistemi Operativi
            Gestore della CPU
   Il gestore della CPU è quel modulo del
    sistema operativo che ha il compito di
    decidere a quale task(non a quale utente)
    spetta l’assegnazione della CPU
   Tale componente prende spesso il nome di
    scheduler e gli algoritmi di scheduling sono
    le strategie adottate per assegnare la CPU
    ai task
Sistemi Operativi
       Gestore della Memoria
   Il gestore della memoria è quel modulo del
    sistema operativo incaricato di assegnare
    la memoria ai vari task (per eseguire un
    task è necessario che il suo codice sia
    caricato in memoria)
   La complessità del gestore della memoria
    dipende dal tipo di sistema operativo
   Nei sistemi multi-tasking più programmi
    contemporaneamente possono essere
    caricati in memoria
Sistemi Operativi
       Gestore della Memoria
   Spesso la memoria non è sufficiente per
    contenere completamente tutto il codice
    dei vari task
   Il disco però è molto capiente, si può
    simulare una memoria più grande tenendo
    nella memoria di sistema (RAM) solo le
    parti di codice e dei dati che servono in
    quel momento, lasciando sul disco tutto il
    resto: è il concetto di memoria virtuale
   Lo scambio di dati tra memoria fisica (RAM)
    e il disco è chiamato swap (scambio)
Sistemi Operativi
    Gestore dei dispositivi di I/O
   Il gestore dei dispositivi di I/O è quel
    modulo del sistema operativo incaricato di
    assegnare i dispositivi ai task che ne fanno
    richiesta
   In particolare deve gestire i conflitti,
    ovvero le situazioni in cui due o più task
    vogliono accedere contemporaneamente
    allo stesso dispositivo
Sistemi Operativi
       Gestore del File System
   Il gestore del file system è quel modulo del
    sistema operativo incaricato di gestire le
    informazioni memorizzate sui dispositivi di
    memoria di massa
   Il gestore del file system deve garantire la
    correttezza e la coerenza delle informazioni
   Inoltre, nei sistemi multi-utente, deve
    mettere a disposizione dei meccanismi di
    protezione in modo tale da consentire agli
    utenti di proteggere i propri dati
    dall’accesso da parte di altri utenti non
    autorizzati
Sistemi Operativi
       L’interprete dei comandi
   L’interprete dei comandi è la vera
    interfaccia del sistema operativo verso
    l’utente
   Riceve i comandi dall’utente (generalmente
    da tastiera) e li esegue
   Nei sistemi multi-tasking l’utente può
    mandare in esecuzione un comando senza
    aspettare che il precedente sia terminato
Istruzioni e linguaggi
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.
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).
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à.
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.
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.
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.
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
Istruzioni e linguaggi
        Linguaggio ASSEMBLY
   L’istruzione di somma potrebbe avere il
    nome simbolico ADD invece di 01001010
   Questo simbolismo è chiamato linguaggio
    ASSEMBLY (o ASSEMBLER)
   Per tradurre un programma scritto in
    assembly in codice macchina (che è l’unico
    linguaggio compreso dal calcolatore) viene
    utilizzato un programma chiamato
    assemblatore (assembler)
   L’assemblatore traduce i nomi simbolici
    delle istruzioni, dei dati e degli indirizzi
    assembly nei corrispondenti valori numerici
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
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
Istruzioni e linguaggi
   Possiamo aggregare i numerosi linguaggi di
    programmazione esistenti sulla base del
    modello astratto ( paradigma ) di
    programmazione
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).
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.
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++
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
Istruzioni e linguaggi

   Linguaggio interpretato:
       ogni riga di codice sorgente viene letta,
        convertita in linguaggio macchina e poi eseguita
        da un programma detto interprete
   Interprete: itera più volte questo processo
       Legge un’istruzione del programma “sorgente”
       Traduce l’istruzione in linguaggio macchina
       Esegue l’istruzione
       Passa all’interpretazione dell’istruzione
        successiva
Istruzioni e linguaggi
   Al termine di questa operazione, del
    programma in linguaggio macchina non
    rimane alcuna traccia (la traduzione non
    viene memorizzata).
   Se il programma torna più volte su una
    stessa istruzione, questa verrà tradotta (ed
    eseguita) ogni volta.
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
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.
Istruzioni e linguaggi
   La traduzione di ogni istruzione del
    programma avviene una sola volta, anche
    se una stessa istruzione viene ripetuta
    più volte all’interno del programma.
   Non ho bisogno di avere il compilatore ed
    il “sorgente” per eseguire il programma:
    mi basta il programma “eseguibile”.
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)
Istruzioni e linguaggi
   L’interprete
       l’interpretazione viene effettuata dalla JVM
       è un “simulatore” della architettura virtuale per
        le architetture effettive ( • Intel, Linux,
        Macintosh )
   Filosofia: write-once run everywhere
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
Valori, tipi e operatori
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
Valori, tipi e operatori
               - Valori -
   La macchina opera con una logica binaria che
    riflette direttamente la struttura fisica delle
    sue componenti.
   Nella numerazione binaria ogni numero viene
    rappresentato fattorizzandolo in multipli di
    potenze di 2
   La memoria della macchina è un “casellario”
    molto grande suddiviso in locazioni di
    memoria, numerate progressivamente
    mediante degli indirizzi di memoria che ne
    identificano univocamente la posizione.
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.
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.
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
Valori, tipi e operatori
               - Valori -
   Così si possono rappresentare alcuni
    numeri razionali compresi, tra –
    268.435.455 e +268.435.455, con un
    massimo di 8 cifre dopo la virgola.
   Più è grande (in valore assoluto) il
    numero e meno cifre decimali potremo
    rappresentare.
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.
Valori, tipi e operatori
                - Valori -
   Per i caratteri alfanumerici (caratteri
    alfabetici, simboli di interpunzione, cifre
    numeriche ed altri simboli ancora) esiste
    una tabella di codifica standard che associa
    ad ogni carattere un codice numerico intero:
    la codifica ASCII (American Standard Code
    for Information Interchange).
   Ad esempio il carattere “a” è associato al
    codice 61, al carattere “b” il 62, e così via.
Valori, tipi e operatori
        - Valori -
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.
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, #).
Valori, tipi e operatori
                 - Tipi -
   Per indicare alla macchina come dovrà essere
    trattata una certa sequenza di bit memorizzati
    in un determinato blocco della memoria, è
    necessario che il programmatore a priori
    dichiari il tipo di dato che intenderà associare
    ad una certa variabile nell’ambito di un intero
    programma o di una determinata funzione.
   Con la dichiarazione del tipo di una variabile si
    indica anche alla macchina la quantità di
    memoria che dovrà essere riservata (allocata)
    per la memorizzazione delle informazioni
    trattate dal programma.
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.
Valori, tipi e operatori
                  - Tipi -
   I tipi di dato fondamentali, disponibili in
    quasi tutti i linguaggi di programmazione
    sono i seguenti:
       Intero (in C: short, unsigned, int e long)
       Floating point (in C: float, double)
       Carattere (in C: char)
   I puntatori sono delle variabili che
    contengono l’indirizzo di memoria in cui è
    allocata un’altra variabile: si dice così che
    puntano ad un’altra variabile.
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 (! + * / )
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
Valori, tipi e operatori
             - Operatori -
   Il linguaggio di programmazione mette a
    disposizione del programmatore una serie
    di operatori utili, tra i quali:
Valori, tipi e operatori
               Operatori di
             assegnamento
   L’operatore di assegnamento “=”
    consente al programmatore, una volta
    definita una variabile, di assegnarle un
    valore.
   int res1 = 5;
       Assegna il valore 5 alla destra dell’operatore
        alla variabile res1.
   int res1 = 5+10;
       Esegue l’espressione alla destra dell’operatore
        e ne assegna il risultato (15) a res1.
Valori, tipi e operatori
             Operatori di
           assegnamento
   La variabile a sinistra dell’operatore di
    assegnazione (simbolo =) viene definita
   Eventuali variabili presenti
    nell’espressione (a destra dell’operatore
    di assegnazione) vengono usate
Valori, tipi e operatori
             Operatori di
           assegnamento
   variabile = espressione;
       X = 23;
       w = ‘a’;
       y = z;
       alfa = x + y;
       r3 = (alfa*43 - xgg) * (delta - 32*ijj);
       x = x + 1;
   il valore dell’espressione viene registrato
    (assegnato) alla variabile
   l’assegnazione non è una relazione di
    uguaglianza produce una modifica della
    memoria
Valori, tipi e operatori
               Operatori di
             assegnamento
   I due elementi di un istruzione di
    assegnazione sono asimmetrici
       variabile = espressione;
   A sinistra una cella di memoria a destra
    un valore
   Non ha senso invertire gli elementi
       espressione = variabile;
Valori, tipi e operatori
         Operatori aritmetici
   Sono i più comuni operatori aritmetici
    (somma, sottrazione, moltiplicazione,
    divisione e modulo).
   Sono operatori binari ovvero operatori che
    necessitano di due operandi:
Valori, tipi e operatori
         Operatori relazionali
   Gli operatori relazionali servono ad effettuare
    un confronto tra valori producendo come
    risultato di ritorno un valore booleano (true o
    false) come prodotto del confronto.
   Nella tabella sono riassunti gli operatori ed il
    loro significato.
Valori, tipi e operatori
           Operatori relazionali
   Gli operatori di relazione più noti sono
    quelli che permettono di confrontare
    quantità numeriche:
       uguale ( simbolo ‘==’)
       diverso ( simbolo ‘!=’)
       maggiore ( simbolo ‘>’)
       minore ( simbolo ‘<’)
       maggiore o uguale ( simbolo ‘>=’)
       minore o uguale ( simbolo ‘<=’)
Valori, tipi e operatori
         Operatori relazionali
   Gli operatori ‘=’ e ‘!=’ sono applicabili a
    valori di qualunque natura
   Gli altri operatori richiedono una
    relazione d’ordine sull’insieme di valori
Valori, tipi e operatori
           Operatori relazionali
   Gli operatori di relazione permettono di
    esprimere predicati semplici
       1 < 2 (valore: vero)
       7 < 0 (valore: falso)
       x != 0 (valore: dipende cosa rappresenta ‘x’)
       oggi = venerdì (valore: dipende cosa
        rappresenta ‘oggi’)
Valori, tipi e operatori
          Operatori relazionali
   Non sono operatori logici, ma consentono di
    costruire espressioni che possono essere
    usate come argomenti di operatori logici
       -1 <= x AND x <= 1
Valori, tipi e operatori
     Operatori di shift bit a bit
   Gli operatori di shift bit a bit consentono
    di manipolare tipi primitivi spostandone i
    bit verso sinistra o verso destra secondo
    le regole definite nella tabella seguente
Valori, tipi e operatori
Operatori di shift bit a bit
   byte i = 100;
    i >> 1;
   dal momento che la rappresentazione
    binaria del numero decimale 100 è
    01100100, lo shift verso destra di una
    posizione dei bit, produrrà come risultato
    il numero binario 00110010 che
    corrisponde al valore 50 decimale.
Valori, tipi e operatori
           Operatori logici
   Consentono di eseguire operazioni logiche
    su tipi primitivi operando sulla loro
    rappresentazione binaria.
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
Valori, tipi e operatori
              - Operatori -
   Operatori ternari
       es.: operatore condizionale “?:”
       true ? 3:6 il risultato sarà 3
       false ? 3:6 il risultato sarà 6
Costrutti decisionali ed
       iterativi
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
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.
Costrutto decisionale
                If-else
   Il costrutto condizionale più usato è l'if-
    else, che può essere usato nelle due
    varianti con o senza else:
        if ( condizioneBooleana )
          istruzione;
   La variante con l'else ha una forma del
    tipo:
       if ( condizioneBooleana )
         istruzione1;
       else
         istruzione2;
Costrutto decisionale
           If-else annidate
   Si presenta nel caso in cui vengono ad
    annidarsi piu’ condizioni all’interno di
    un’istruzione condizionale.
   E' buona norma di programmazione evitare di
    ricorrere pesantemente alla nidificazione di
    istruzioni if, data la confusione che spesso ne
    segue
Costrutto decisionale
         If-else combinate
   Una combinazione condizionale si ha
    quando si fa seguire ad un else una if.
      if( x <= 0 )
        System.out.println("x   <= 0");
      else if( x <= 10)
        System.out.println("x   > 0 e <= 10");
      else if ( x <= 20)
        System.out.println("x   > 10 <= 20");
      else
        System.out.println("x   è maggiore di 20");
   Si noti che in questo caso l'ultimo else
    comprende tutti i casi non considerati
    dalle precedenti istruzioni.
Costrutto decisionale
                switch
   Il costrutto switch permette di gestire
    tutte quelle situazioni in cui dobbiamo
    prendere scelte diverse a seconda del
    valore di un'espressione
    switch (espressione) {
      case val1:
       istruzione_na; break;
      case val2:
       istruzione_nb;break;
      default:
       istruzione_ndefault;break;
    }
Costrutto decisionale
                switch
   L'espressione contenuta tra le parentesi dello
    switch solitamente è di tipo intero
   Ogni istruzione “case” lavora su di un
    particolare valore, e fornisce una sequenza di
    istruzioni da eseguire in quella circostanza
   Tale sequenza termina usualmente con
    l'istruzione break, che forza il computer a
    uscire dallo switch, senza verificare i valori
    sucessivi.
   blocco di default, ovvero una sequenza di
    istruzioni da eseguire se non si è verificato
    nessuno dei casi precedenti.
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
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;
      }
Costrutti Iterativi
                 while
   Se si desidera che il ciclo venga ripetuto un
    numero prefissato di volte
      i = 0;
      while(i<=100) {
              ISTRUZIONI DA RIPETERE
              i = i + 1;
      }
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
      }
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();
Array
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 )
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.
Array
   Il popolamento è l'operazione che permette
    di assegnare un valore ad un elemento del
    vettore.
       a[0] = s[1] + x;
   Un vettore può essere inizializzato con una
    serie di valori, in modo simile a come si può
    fare con le variabili.
       int[] vettore = {10,12};
   oppure
       int[] vettore = new int[5]; vettore[0] = 10;
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.
Array
   E' inoltre possibile la realizzazione di tabelle
    non rettangolari.
   Un Array multidimensionale può essere
       inizializzato con una serie di valori in modo
        simile a come si può fare con gli Array
        semplici.
Struttura del programma
Proprietà e Metodi
   Un programma è composto da 2 gruppi di
    elementi:
       Proprietà
       Metodi
Proprietà e Metodi
   Le “proprietà” servono per definire le
    variabili e le constanti utilizzate durante
    l’esecuzione.

   Hanno visibilità
       Generale: è visibile da qualunque porzione di
        codice dell’applicazione
       Locale: è visibile solo all’interno di una ristretta
        porzione di codice dell’applicazione
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.
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 );
    }
Procedure
   void (vuoto)
       indica che la funzione non restituira nessun
        valore ma eseguira solamente le istruzioni
        indicate
   nomeMetodo
       è il nome della funzione;
   int a:
       all'interno delle parentesi tonde troviamo i due
        argomenti che forniamo alla funzione con i loro
        relativi tipi
   System.out.println
       all'interno delle parentesi graffe troviamo il
        blocco di istruzioni della funzione.
       L'istruzione System.out.println(...) è quella che
        permette alla funzione di visualizzare in Dos i
        parametri passati
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione
Corso progettazione

Weitere ähnliche Inhalte

Was ist angesagt?

Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliAndrea Della Corte
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingAndrea Della Corte
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliAndrea Della Corte
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
 
Introduzione alla programmazione android - Android@tulug lezione 3
Introduzione alla programmazione android - Android@tulug lezione 3Introduzione alla programmazione android - Android@tulug lezione 3
Introduzione alla programmazione android - Android@tulug lezione 3Ivan Gualandri
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiMarco Gasparetto
 
Slide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro AndreosèSlide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro Andreosèguesta10af3
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Antonio Musarra
 

Was ist angesagt? (20)

JavaScript
JavaScriptJavaScript
JavaScript
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Corso di servlet jsp e pattern
Corso di servlet jsp e patternCorso di servlet jsp e pattern
Corso di servlet jsp e pattern
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Guida C++
Guida C++Guida C++
Guida C++
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
Lezione Android prima parte
Lezione Android prima parteLezione Android prima parte
Lezione Android prima parte
 
Introduzione alla programmazione android - Android@tulug lezione 3
Introduzione alla programmazione android - Android@tulug lezione 3Introduzione alla programmazione android - Android@tulug lezione 3
Introduzione alla programmazione android - Android@tulug lezione 3
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
Introduzione WPF
Introduzione WPFIntroduzione WPF
Introduzione WPF
 
Slide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro AndreosèSlide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro Andreosè
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1
 
Spring @Aspect e @Controller
Spring @Aspect e @Controller Spring @Aspect e @Controller
Spring @Aspect e @Controller
 

Andere mochten auch (8)

Design Pattern
Design PatternDesign Pattern
Design Pattern
 
Corso UML
Corso UMLCorso UML
Corso UML
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Corso Java 1 - BASE
Corso Java 1 - BASECorso Java 1 - BASE
Corso Java 1 - BASE
 
Corso web services
Corso web servicesCorso web services
Corso web services
 
Ley islr reforma dic 2015
Ley islr reforma dic 2015Ley islr reforma dic 2015
Ley islr reforma dic 2015
 
Reforma cot g.o-6152
 Reforma cot g.o-6152 Reforma cot g.o-6152
Reforma cot g.o-6152
 

Ähnlich wie Corso progettazione

Open Innovation Campus - 05/04/2018 - Agile challenges: essere agili nello sv...
Open Innovation Campus - 05/04/2018 - Agile challenges: essere agili nello sv...Open Innovation Campus - 05/04/2018 - Agile challenges: essere agili nello sv...
Open Innovation Campus - 05/04/2018 - Agile challenges: essere agili nello sv...Vittorio Polizzi
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Gian Maria Ricci
 
PERCHE' E COME SI VALUTA LA QUALITA' DEL SOFTWARE19 06_2015
PERCHE' E COME SI VALUTA LA QUALITA' DEL SOFTWARE19 06_2015PERCHE' E COME SI VALUTA LA QUALITA' DEL SOFTWARE19 06_2015
PERCHE' E COME SI VALUTA LA QUALITA' DEL SOFTWARE19 06_2015Redazione InnovaPuglia
 
ITSMF Conferenza 2014 - L'officina Agile per innovare l'IT Service Management
ITSMF Conferenza 2014 - L'officina Agile per innovare l'IT Service ManagementITSMF Conferenza 2014 - L'officina Agile per innovare l'IT Service Management
ITSMF Conferenza 2014 - L'officina Agile per innovare l'IT Service ManagementSimone Onofri
 
Competence center Application Management & Quality Assurance
Competence center Application Management  & Quality AssuranceCompetence center Application Management  & Quality Assurance
Competence center Application Management & Quality AssuranceFausto Servello
 
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAbilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAmazon Web Services
 
La Formazione, Leva del Cambiamento Organizzativo
La Formazione, Leva del Cambiamento OrganizzativoLa Formazione, Leva del Cambiamento Organizzativo
La Formazione, Leva del Cambiamento OrganizzativoNicola Mezzetti
 
Agile Lean Conference 2016 - Pescatore_ Road to Disciplined DevOps
Agile Lean Conference 2016 - Pescatore_ Road to Disciplined DevOpsAgile Lean Conference 2016 - Pescatore_ Road to Disciplined DevOps
Agile Lean Conference 2016 - Pescatore_ Road to Disciplined DevOpsAgile Lean Conference
 
La governance de iprogetti agili
La governance de iprogetti agiliLa governance de iprogetti agili
La governance de iprogetti agiliinspearit Italy
 
Introduzione alla Metodologia Scrumban
Introduzione alla Metodologia ScrumbanIntroduzione alla Metodologia Scrumban
Introduzione alla Metodologia ScrumbanNextre Engineering
 
Agile raccontato a mia nonna
Agile raccontato a mia nonnaAgile raccontato a mia nonna
Agile raccontato a mia nonnaFelice Pescatore
 

Ähnlich wie Corso progettazione (20)

Manuale Agile Stelnet
Manuale Agile StelnetManuale Agile Stelnet
Manuale Agile Stelnet
 
Agile for Genio
Agile for GenioAgile for Genio
Agile for Genio
 
Produzione software
Produzione softwareProduzione software
Produzione software
 
Open Innovation Campus - 05/04/2018 - Agile challenges: essere agili nello sv...
Open Innovation Campus - 05/04/2018 - Agile challenges: essere agili nello sv...Open Innovation Campus - 05/04/2018 - Agile challenges: essere agili nello sv...
Open Innovation Campus - 05/04/2018 - Agile challenges: essere agili nello sv...
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
PERCHE' E COME SI VALUTA LA QUALITA' DEL SOFTWARE19 06_2015
PERCHE' E COME SI VALUTA LA QUALITA' DEL SOFTWARE19 06_2015PERCHE' E COME SI VALUTA LA QUALITA' DEL SOFTWARE19 06_2015
PERCHE' E COME SI VALUTA LA QUALITA' DEL SOFTWARE19 06_2015
 
ITSMF Conferenza 2014 - L'officina Agile per innovare l'IT Service Management
ITSMF Conferenza 2014 - L'officina Agile per innovare l'IT Service ManagementITSMF Conferenza 2014 - L'officina Agile per innovare l'IT Service Management
ITSMF Conferenza 2014 - L'officina Agile per innovare l'IT Service Management
 
Competence center Application Management & Quality Assurance
Competence center Application Management  & Quality AssuranceCompetence center Application Management  & Quality Assurance
Competence center Application Management & Quality Assurance
 
Agile software lifecycle
Agile software lifecycleAgile software lifecycle
Agile software lifecycle
 
Visaggio fd l13_9_18
Visaggio fd l13_9_18Visaggio fd l13_9_18
Visaggio fd l13_9_18
 
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAbilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
 
La Formazione, Leva del Cambiamento Organizzativo
La Formazione, Leva del Cambiamento OrganizzativoLa Formazione, Leva del Cambiamento Organizzativo
La Formazione, Leva del Cambiamento Organizzativo
 
Iso 9001 2000 Sezione VII
Iso 9001 2000 Sezione VIIIso 9001 2000 Sezione VII
Iso 9001 2000 Sezione VII
 
Agile Lean Conference 2016 - Pescatore_ Road to Disciplined DevOps
Agile Lean Conference 2016 - Pescatore_ Road to Disciplined DevOpsAgile Lean Conference 2016 - Pescatore_ Road to Disciplined DevOps
Agile Lean Conference 2016 - Pescatore_ Road to Disciplined DevOps
 
Disciplined Agile DevOps
Disciplined Agile DevOpsDisciplined Agile DevOps
Disciplined Agile DevOps
 
La governance de iprogetti agili
La governance de iprogetti agiliLa governance de iprogetti agili
La governance de iprogetti agili
 
Iso 9001 2000 Sezione Vi.3 Vii.6
Iso 9001 2000 Sezione Vi.3 Vii.6Iso 9001 2000 Sezione Vi.3 Vii.6
Iso 9001 2000 Sezione Vi.3 Vii.6
 
Iso 9001 2000 Sezione VII.3 VII.6
Iso 9001 2000 Sezione VII.3 VII.6Iso 9001 2000 Sezione VII.3 VII.6
Iso 9001 2000 Sezione VII.3 VII.6
 
Introduzione alla Metodologia Scrumban
Introduzione alla Metodologia ScrumbanIntroduzione alla Metodologia Scrumban
Introduzione alla Metodologia Scrumban
 
Agile raccontato a mia nonna
Agile raccontato a mia nonnaAgile raccontato a mia nonna
Agile raccontato a mia nonna
 

Corso progettazione

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