Progettazione del software



Giuseppe Dell'Abate
Produzione del software
   il programmatore ascolta le
    esigenze del cliente
   il programmatore scrive il codice
   ...
questo approccio
            è valido se...
   Il problema è molto semplice
   Il cliente formuli il problema in modo ch...
ma è inadatto quando...
   le esigenze dei clienti sono aumentate
   la complessità del problema è aumentata
   un unic...
...ed ecco cosa succede.
Progettazione
   Una indagine della Standish Group, basata
    su un campione di 28.000 progetti e
    pubblicata da Comp...
Triangolo di successo

    Al fine di ottenere i risultati sperati si è
     individuato il così detto “triangolo di
    ...
1-Stakeholder

   Qualunque persona che influenza lo
    sviluppo del software
       Clienti: utilizzatori o proprietar...
Cause di fallimento
         legate al cliente
   Le necessità dei clienti sono mal comprese
    o comprese insufficiente...
Cause di fallimento
          legate allo sviluppo
   Gli sviluppatori (analisti, progettisti,
    programmatori ecc) pos...
Quindi cosa possiamo fare ?
   Assumere gli sviluppatori migliori
   Fornire agli sviluppatori una formazione
    contin...
2-Processo

   Stabilire un processo di sviluppo del
    software che definisca le attività e le
    procedure organizzat...
Migliorare il processo

   Occorre definire un modello da utilizzare
    per cercare di migliorare il processo di
    svi...
Capability Maturity Model
   Definito dal Software Engineering Institute
    (SEI) presso la Carnegie Mellon University
 ...
La scala verso
     l'eccellenza del software
    Sono individuati 5 livelli di maturità:
1)    Iniziale
         situaz...
La scala verso
    l'eccellenza del software
4) Gestito
       possibilità di valutazione del processo. Sono
        intr...
Domande di esempio
        del questionario
   E' presente un processo formale per la
    verifica del software?
   E' p...
ISO 9000
   Le norme della famiglia ISO 9000 danno
    indicazioni su come una azienda deve
    operare per poter fornire...
ISO 9000

   Questa famiglia di norme fornisce
    indicazioni organizzative, per questo si
    adatta a diversi settori ...
ISO 9000

   Il certificato che viene rilasciato é la
    dichiarazione che l'azienda adotta un
    sistema di regole, re...
Modellazione
   Gli sviluppatori hanno bisogno di un linguaggio
    per costruire modelli da discutere con i clienti
    ...
Qualità di un modello
   Accuratezza:
        deve descrivere il sistema correttamente,
         completamente e senza a...
Pianificazione di sistema
Pianificazione di sistema
   Al fine del raggiungimento dell’obiettivo di
    business, occorre pianificare il sistema.
...
Pianificazione di sistema
   La pianificazione può essere fatta
    utilizzando vari approcci:
       SWOT : Strengths, ...
Approccio SWOT

   Modello top-down (Albert Humphrey 1965)
   Definire i punti di forza e di debolezza
    interna dell’...
Approccio SWOT
   Definire la “vision aziendale” ossia lo
    scenario futuro che rispecchia gli ideali, i
    valori e l...
Approccio VCM
   Analizzare l’intero sequenza delle
    attività al fine di individuare gli anelli
    forti e deboli del...
Approccio VCM

   Attività secondarie, non aggiungono valore
    ma sono necessarie
       Amministrazione e infrastrutt...
Approccio BPR
   Per adattarsi velocemente alla variazione del
    mercato occorre modificare l’organizzazione
    aziend...
Approccio ISA
   Modello bottom-up (Zachman 1987)
   Schema architetturale neutrale che
    permette di descrivere l’int...
Approccio ISA
   Le prospettive sono costituite dagli attori di
    un Sistema Informativo
       Pianificatore: definis...
Approccio ISA
   Descrizioni, servono per definire le
    caratteristiche del sistema:
       Composizione dei dati
    ...
Metodologia di sviluppo
Metodologia di sviluppo
   La metodologia serve per specificare:
       quale linguaggio utilizzare per descrivere il
  ...
Waterfall - “A cascata”
   Big Design Up Front
    (BDUF)
   Suddivisione del
    progetto in grosse fasi:
       Studi...
Studio di fattibilità
   Valuta la convenienza dell'applicazione
       costi/benefici ( risorse richieste, costi, tempi...
Analisi dei requisiti
   Definizione dei dettagli (funzionali e non )
    della specifica sulla base dello studio di
    ...
Progettazione
   Definire l’architettura del sistema
       Strutturato in componenti: sottosistemi e moduli
       Des...
Sviluppo
   Implementare i moduli

   Problemi:
       tempi, costi e competenze degli
        sviluppatori
Testing

    Unit testing

    Module testing

    Sub-system testing

    System testing

    Acceptance testing = a...
Maintenance
   Manutenzione 60% dei costi di sviluppo

   Possiamo distinguerla in 3 tipologie:
       Correttiva: rimu...
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 f...
Spirale

    Il progetto viene diviso per sottoinsiemi di
    funzionalità che vengono incrementati per
    periodo tempo...
Spirale
   Parzialità:
       un uso parziale del software e non aspettare la
        fine.
   Iteratività:
       Pos...
Requisiti – Pregi - Difetti
   Requisiti
       Elasticità di tempi e costi
   Pregi
       Linearità ciclica
       ...
Metodi Agili
   Metodi agili:
        Extreme Programming (Kent Beck, Ward
         Cunningham e Ron Jeffries)
        ...
I 4 requisiti

1) Comunicazione
      tutti possono parlare con tutti, persino l'ultimo
     dei programmatori con il clie...
Le 12 regole di
      Extreme Programming
1) Progettare con il cliente;
2) Test funzionali e unitari;
3) Refactoring
    ...
Le 12 regole di
   Extreme Programming
7) Scegliere ed utilizzare un preciso
   standard di scrittura del codice;
8) Integ...
Quindi come
               pianifichiamo ?
   Predittiva
       Conoscenta anticipata di requisiti, tempi, costi,
      ...
Progettazione
   I progetti software sono differenti per molti
    motivi:
       la   tipologia di sistema che devi svi...
UML
Unified Modeling
   Language
Cos'è UML ?
   UML ( Unified Modeling Language) è un
    linguaggio standard di modellazione visuale
    per specificare,...
UML è un linguaggio…
   UML è un linguaggio pertanto costituito da
    sintassi e semantica
       sintassi: regole attr...
UML non è una
                metodologia!
   La metodologia serve per specificare:
       quale linguaggio di modellazi...
UML non è un processo!
   Il processo è un insieme di regole che
    definiscono come un progetto di sviluppo
    dovrebb...
UML è un linguaggio
             standard...
   Per standard si intende:
       una base di riferimento, un paradigma co...
Come si arriva allo
        standard?
E chi contribuisce ad UML?
   UML è definito:
       sotto l'egidia dell'OMG (Obje...
“Method wars”
   Metodi Storici
       SADT: Structured Analysis and Development
        Technique
       DFD: Data Flo...
“Tre Amigos”
   Tre Amigos
       Grady Booch: Object Oriented Design – OOD
       James Rumbaugh: Object Modeling
    ...
Storia di UML
   Booch e Rumbaugh lavoravano alla Rational
       1994 Unified Object Notation v0.8
   Jacobson capo di...
Storia di UML
   Microsoft, HP, Oracle, Rational ed altri
    crearono consorzio “OMG”
       novembre 1997 versione v1....
UML è un linguaggio
            standard di
           modellazione...
   Modellare significa descrivere un sistema in
  ...
Qualità di un modello
   Accuratezza:
        deve descrivere il sistema correttamente,
         completamente e senza a...
UML è un linguaggio standard
 di modellazione visuale...
   Per quale motivo è utile un approccio
    visuale alla proget...
Perchè visuale?
   Sintesi a “colpo d'occhio”
       Visione delle entità coinvolte
       Visione delle Relazioni
    ...
Approccio ad UML

1) Abbozzo

2) Progetto

3) Linguaggio
Approccio ad UML
   UML come abbozzo (sketch)
       Documentazione, discussione e condivisione
        delle idee
    ...
Approccio ad UML
   UML come progetto (blueprint)
       Forward e reverse engineering
       Forte dipendenza dal tool...
Approccio ad UML
   UML come linguaggio di programmazione
       Diagrammi compilabili
       No forward e reverse engi...
...specificare, visualizzare,
costruire e documentare...
   Specificare
       Dettagli di implementazione
   Visualizz...
...domini applicativi
              eterogenei...
   Dominio eterogenei
       sanita, finanza, tlc, aereospazio
      ...
...adatto maggiormente a progettare
      sistemi object-oriented...

   I concetti OO si sono sviluppati dal 1970
    at...
Incapsulamento
   Permette di nascondere la complessita'
    sulla base dell'information hiding
   Le informazioni vengo...
Generalizzazione
               Specializzazione
   Permette di poter specializzare il
    comportamento di un oggetto er...
Polimorfismo
   Molti modi per fare la stessa cosa
   Combinando la generalizzazione, la
    specializzazione e l'incaps...
...e sistemi component-
               based.
   I quattro “dogmi” della modularizzazione sono:
        Alta coesione (o...
...e sistemi component-
               based.
   Il PC che stiamo utilizzando ne è un
    esempio...

   Di cosa parliam...
Diagrammi UML
Diagrammi UML
   Classica suddivisione dei diagrammi UML

   Strutturali: come è composto il sistema
    ( package, obje...
Diagrammi UML
Diagrammi UML
            UML 1.x                     
                                            UML 2.x
   Class diag...
Class Diagram
   Consentono di descrivere tipi di entità, con
    le loro caratteristiche e le eventuali
    relazioni fr...
Object Diagram
   Consentono di descrivere un sistema in
    termini di oggetti e relative relazioni.
   Concetti di: og...
Deployment Diagram
   Consentono di descrivere un sistema in
    termini di risorse hardware detti nodi, e di
    relazio...
Component Diagram
   Consentono di descrivere l'organizzazione
    e le dipendenze tra componenti software.
   Concetti ...
Package Diagram
   Consentono di mostrare l'organizzazione
    dei packages e dei loro elementi.
   Concetti di: package...
Sequence Diagram
   Consentono di mostrare il comportamento
    dinamico di un gruppo di oggetti che
    interagiscono.
...
Activity Diagram
   Consentono di rappresentare la logica
    interna di un processo.
   Concetti di: attività, flusso, ...
Use Case Diagram
   Consentono la descrizione delle funzioni o
    servizi offerti da un sistema, così come sono
    perc...
Collaboration Diagram
   Consentono la descrizione dell'interazione
    fra più oggetti ed i messaggi scambiati,
    foca...
State Machine Diagram
   Consentono la descrizione del comportamento
    di entità o di classi in termini di stato.
   C...
Overview Diagram
   Fornisce una visione complessiva delle
    interazioni che cooperano in un flusso molto
    simile a ...
Timing Diagram
   Mostra le interazione tra gli oggetti ed il
    loro cambiamento di stato in un dato
    periodo di tem...
Composite-structure
           Diagram
   Mostra i sottosistemi che compongono il
    sistema
   Concetti di: parte, con...
UML 2.0
UML 2 è distribuito dall' OMG in 4 specifiche
1) Diagram Interchange Specification
     layout dello schema con s...
Computer Aided Software
      Engineering ( CASE )
   Tool di modellazione
       Supporto alla creazione dei diagrammi ...
CASE
   Rose; Rational Modeler ed
                                  
                                      Real-time Stu...
Sistema di elaborazione
Sistema di elaborazione
   Il termine sistema di elaborazione(SE)
    indica solitamente un dispositivo in grado
    di e...
Sistema di elaborazione

   Nel senso più generale del termine un sistema
    di elaborazione è caratterizzato da due par...
Sistemi di elaborazione
          Classificazione
   I sistemi di elaborazione sono usualmente
    classificati nelle seg...
Sistemi di elaborazione
        Classificazione
continuo…
    microcomputer super-micro: sistemi

     multiutente di fas...
Sistemi di elaborazione
        Classificazione
continuo…
    palmtop: personal computer di ridotta potenza

     utilizz...
Sistema di elaborazione
           Architettura
   Non è possibile identificare un unico
    schema fisico (realizzativo)...
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...
Sistemi di elaborazione
    Principi di funzionamento
   La parte della CPU che permette di
    “distinguere” tra dati e ...
Sistemi di elaborazione
    Principi di funzionamento
   Il calcolatore, comunque, è a conoscenza
    della lunghezza del...
Sistemi di elaborazione
    Principi di funzionamento
   All’accensione del calcolatore, il Program
    Counter contiene ...
Sistemi di elaborazione
              Ciclo macchina
   La CPU conosce la posizione in
    memoria (l’indirizzo) della
  ...
Sistemi di elaborazione
             Ciclo macchina
   Fase di decode
       La CPU esamina il contenuto
        del reg...
Sistemi di elaborazione
             Ciclo macchina
   Se l’istruzione ha più di 1 parte, le
    successive sono i dati s...
CPU - Central Processing
               Unit
   La CPU (Central Processing
    Unit) è il “cervello” del sistema;
   E’ ...
CPU - Central Processing Unit
          Unita elementati
   Composta da unita elementari:
       Unità di controllo (CU)...
CPU - Central Processing Unit
          Unita elementati
   Unità di controllo (CU)
       preposta alla organizzazione ...
CPU - Central Processing Unit
          Unita elementati
   Registri
       Predisposti a contenere informazioni, ad
   ...
CPU - Central Processing Unit
               Registri
   La CPU mantiene al suo interno le
    informazioni da elaborare ...
CPU - Central Processing Unit
               Registri
   Alcuni registri possono avere un compito
    specifico mentre al...
CPU - Central Processing Unit
               Registri
   Contatori di programma (PC)
       contiene l’indirizzo dell’is...
CPU - Central Processing Unit
               Registri
   Registri di stato (SR)
       Contengono informazioni riguardo ...
CPU - Central Processing Unit
      Schema a blocchi

          Unità di controllo           Unità aritmetico –logica
    ...
CPU - Central Processing Unit
     La velocità di elaborazione
   La velocità di elaborazione dipende da più
    fattori,...
CPU - Central Processing Unit
     La velocità di elaborazione
   La CPU è in grado di eseguire un’istruzione
    (in med...
Memoria
   I programmi, per essere eseguiti, devono essere
    presenti nel sistema di elaborazione, ovvero
    memorizza...
Memoria
   Quando la CPU fa riferimento ad una cella si
    dice che la “indirizza”, ovvero la identifica con
    un “nom...
Memoria
   La CPU comunica alla memoria l’indirizzo della
    locazione che intende leggere o scrivere per
    mezzo dell...
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
        illimit...
Memoria ROM
   Le memorie ROM (Read Only Memory)
       scritte una volta sola dal costruttore
       i dati non sono p...
Memoria ROM
                 Classificazione
   ROM
       Scritte dal costruttore
   PROM ( Programmable ROM)
       ...
Memoria ROM
                Classificazione
continua…
   EEPROM ( Electrically EPROM)
       Come le precedenti, vengono...
Memoria
             Modalità di accesso
   Il processore può accedere ai dati:
       direttamente ( tramite IRQ )
    ...
Memoria
        Conservazione del dato
  L’informazione è mantenuta in modo:
1) Dinamico
       usano i condensatori, ma...
Memoria
        Conservazione del dato
3) A cambiamento di fase:
       usano GST - Germano, Antimonio, Tellurio –
      ...
Memoria
    Schede RAM
  Il package delle RAM è di tipo:
1) SIMM, Single In-Line Memory
   Module
       è un modello di...
Memoria gerarchica

   Nei sistemi di elaborazione moderni, al fine
    di aumentare l’efficienza, le memorie sono
    or...
Memoria Cache

   Tra la CPU e la memoria DRAM di sistema
    vengono “interposti” uno o due livelli di
    SRAM detta me...
Memoria Cache
   Quando la CPU richiede un dato non
    presente in cache si verifica un “cache
    miss”
   A seguito d...
Periferiche I/O

   Per interagire con il “mondo esterno” il
    sistema di elaborazione ha bisogno di
    opportuni disp...
Periferiche I/O
   I dispositivi di I/O non sono gestiti
    direttamente dalla CPU, ma attraverso
    circuiti di contro...
Periferiche I/O
   Quando la CPU vuole che un dispositivo
    periferico esegua una determinata
    operazione invia il c...
Periferiche I/O
   La CPU può usare due tecniche differenti
    per accorgersi che il dispositivo periferico
    ha assol...
Periferiche I/O
               Gestione in polling
   Nella gestione in polling può accadere che:
        la CPU control...
Periferiche I/O
          Gestione in interrupt
   Con la gestione in interrupt (interruzioni) la
    CPU assegna un comp...
Periferiche I/O
           Gestione in interrupt
   In realtà la CPU può decidere di
    interrompere le sue attività
   ...
Periferiche I/O
          Gestione in interrupt
   La gestione mediante interrupt è più
    complessa di quella in pollin...
Periferiche I/O
        Modalità di collegamento
   Le modalità di collegamento di una
    periferica al calcolatore sono...
Periferiche I/O
                    Bit di controllo
   Spesso, insieme ai dati veri e propri si
    trasmettono anche de...
Periferiche I/O
                    Bit di controllo
   Nel calcolare la velocità effettiva di
    comunicazione, bisogna...
Bus di sistema
   Un bus non è altro che una
    serie di fili (in realtà sono delle
    piste metalliche) ognuno dei
   ...
Bus di sistema
   Control bus:
       La CPU controlla tutto il sistema di elaborazione
        mandando e ricevendo seg...
Sistemi Operativi
Sistema Operativo
   Il software può essere diviso un due classi:
        i programmi di sistema che gestiscono le opera...
Sistema Operativo
   Per ovviare al problema è
    necessario mettere uno strato di
    software tra l’hardware e l’utent...
Sistema Operativo
   La situazione può essere rappresentata
    graficamente nel seguente modo:
   E’ molto difficile de...
Sistema Operativo
   La definizione come interfaccia tende ad
    evidenziare come il sistema operativo sia in
    grado ...
Sistema Operativo
          Componenti funzionali
   Non è possibile individuare un unico
    schema realizzativo per tut...
Sistemi Operativi
            Gestore della CPU
   Il gestore della CPU è quel modulo del
    sistema operativo che ha il...
Sistemi Operativi
       Gestore della Memoria
   Il gestore della memoria è quel modulo del
    sistema operativo incari...
Sistemi Operativi
       Gestore della Memoria
   Spesso la memoria non è sufficiente per
    contenere completamente tut...
Sistemi Operativi
    Gestore dei dispositivi di I/O
   Il gestore dei dispositivi di I/O è quel
    modulo del sistema o...
Sistemi Operativi
       Gestore del File System
   Il gestore del file system è quel modulo del
    sistema operativo in...
Sistemi Operativi
       L’interprete dei comandi
   L’interprete dei comandi è la vera
    interfaccia del sistema opera...
Istruzioni e linguaggi
Istruzioni e linguaggi
   Un linguaggio di programmazione è costituito,
    come ogni altro tipo di linguaggio,
        ...
Istruzioni e linguaggi
   Il linguaggio macchina è basato su una
    codifica estremamente compatta e poco
    intuitiva....
Istruzioni e linguaggi
   Per ovviare a questo problema, che ha
    costituito per molti anni un grosso limite
    alla d...
Istruzioni e linguaggi
   In informatica si parla di programmazione
    a basso livello quando si utilizza un
    linguag...
Istruzioni e linguaggi
   Si viene così a creare una gerarchia di
    linguaggi, dai meno evoluti (il linguaggio
    macc...
Istruzioni e linguaggi
   La programmazione a basso livello è più ardua
    e meno intuitiva, ma consente di sviluppare
 ...
Istruzioni e linguaggi
         Linguaggio ASSEMBLY
   Il linguaggio assembly (e il linguaggio
    macchina) è diverso pe...
Istruzioni e linguaggi
        Linguaggio ASSEMBLY
   L’istruzione di somma potrebbe avere il
    nome simbolico ADD inve...
Istruzioni e linguaggi
           Linguaggio ASSEMBLY
   Al fine di rendere più agevole la stesura dei
    programmi si è...
Istruzioni e linguaggi
   Al fine di ovviare a questo inconveniente è
    preferibile utilizzare linguaggi ad alto
    li...
Istruzioni e linguaggi
   Possiamo aggregare i numerosi linguaggi di
    programmazione esistenti sulla base del
    mode...
Istruzioni e linguaggi
   Linguaggi imperativi:
       Il modello computazionale è basato sui
        cambiamenti di sta...
Istruzioni e linguaggi
   Linguaggi dichiarativi:
       Il modello computazionale è basato sui concetti
        di funz...
Istruzioni e linguaggi
   Sulla base dell’ambito in cui è necessario
    risolvere il problema, è opportuno adottare
    ...
Istruzioni e linguaggi
   Un programma scritto in un linguaggio ad
    alto livello deve essere convertito in
    linguag...
Istruzioni e linguaggi

   Linguaggio interpretato:
       ogni riga di codice sorgente viene letta,
        convertita ...
Istruzioni e linguaggi
   Al termine di questa operazione, del
    programma in linguaggio macchina non
    rimane alcuna...
Istruzioni e linguaggi
   Linguaggio compilato
       tutto il codice viene letto e convertito in linguaggio
        mac...
Istruzioni e linguaggi
   Compilatore: esegue una sola volta il
    processo
       Legge tutte le istruzioni del progra...
Istruzioni e linguaggi
   La traduzione di ogni istruzione del
    programma avviene una sola volta, anche
    se una ste...
Istruzioni e linguaggi
   Schema ibrido compilazione/interpretazione
    nel caso di Java
   Il compilatore
       a pa...
Istruzioni e linguaggi
   L’interprete
       l’interpretazione viene effettuata dalla JVM
       è un “simulatore” del...
Istruzioni e linguaggi
Un linguaggio è definito da 2 aspetti:
1) Sintassi:
        Indica la sequenza di parole o simboli...
Valori, tipi e operatori
Valori, tipi e operatori
                   - Valori -
   Nella vita di tutti i giorni siamo abituati a
    rappresentare...
Valori, tipi e operatori
               - Valori -
   La macchina opera con una logica binaria che
    riflette direttame...
Valori, tipi e operatori
                - Valori -
   Ogni locazione è composta da un insieme di
    8 bit che compongon...
Valori, tipi e operatori
                 - Valori -
   Per rappresentare numeri con il segno (interi
    relativi) si ad...
Valori, tipi e operatori
                    - Valori -
   Per rappresentare numeri con la virgola
    (razionali positiv...
Valori, tipi e operatori
               - Valori -
   Così si possono rappresentare alcuni
    numeri razionali compresi,...
Valori, tipi e operatori
                 - Valori -
   Con i computer spesso si trattano
    informazioni non numeriche,...
Valori, tipi e operatori
                - Valori -
   Per i caratteri alfanumerici (caratteri
    alfabetici, simboli di...
Valori, tipi e operatori
        - Valori -
Valori, tipi e operatori
               - Valori -
   La codifica ASCII base viene rappresenta
    utilizzando uno spazio...
Valori, tipi e operatori
                   - Tipi -
   Una medesima sequenza di bit può
    dunque rappresentare:
     ...
Valori, tipi e operatori
                 - Tipi -
   Per indicare alla macchina come dovrà essere
    trattata una certa...
Valori, tipi e operatori
                 - Tipi -
   In ogni linguaggio di programmazione
    vengono messi a disposizio...
Valori, tipi e operatori
                  - Tipi -
   I tipi di dato fondamentali, disponibili in
    quasi tutti i ling...
Valori, tipi e operatori
                     - Tipi -
   I tipi definiscono l’insieme di tutti i suoi possibili
    valo...
Valori, tipi e operatori
                    - Tipi -
   Perchè i tipi?
        Semplificano la scrittura/lettura dei
  ...
Valori, tipi e operatori
             - Operatori -
   Il linguaggio di programmazione mette a
    disposizione del progr...
Valori, tipi e operatori
               Operatori di
             assegnamento
   L’operatore di assegnamento “=”
    con...
Valori, tipi e operatori
             Operatori di
           assegnamento
   La variabile a sinistra dell’operatore di
 ...
Valori, tipi e operatori
             Operatori di
           assegnamento
   variabile = espressione;
       X = 23;
  ...
Valori, tipi e operatori
               Operatori di
             assegnamento
   I due elementi di un istruzione di
    ...
Valori, tipi e operatori
         Operatori aritmetici
   Sono i più comuni operatori aritmetici
    (somma, sottrazione,...
Valori, tipi e operatori
         Operatori relazionali
   Gli operatori relazionali servono ad effettuare
    un confron...
Valori, tipi e operatori
           Operatori relazionali
   Gli operatori di relazione più noti sono
    quelli che perm...
Valori, tipi e operatori
         Operatori relazionali
   Gli operatori ‘=’ e ‘!=’ sono applicabili a
    valori di qual...
Valori, tipi e operatori
           Operatori relazionali
   Gli operatori di relazione permettono di
    esprimere predi...
Valori, tipi e operatori
          Operatori relazionali
   Non sono operatori logici, ma consentono di
    costruire esp...
Valori, tipi e operatori
     Operatori di shift bit a bit
   Gli operatori di shift bit a bit consentono
    di manipola...
Valori, tipi e operatori
Operatori di shift bit a bit
   byte i = 100;
    i >> 1;
   dal momento che la rappresentazion...
Valori, tipi e operatori
           Operatori logici
   Consentono di eseguire operazioni logiche
    su tipi primitivi o...
Valori, tipi e operatori
               - Operatori -
   Tipologia di operatori:
   Operatori unari:
       es.: simbol...
Valori, tipi e operatori
              - Operatori -
   Operatori ternari
       es.: operatore condizionale “?:”
     ...
Costrutti decisionali ed
       iterativi
Costrutto decisionale
   Un costrutto decisionale permette al
    programmatore di vincolare l'esecuzione
    di un'istru...
Costrutto decisionale
   if-else
        verificano diverse espressioni e quando viene
         incontrata l'espressione...
Costrutto decisionale
                If-else
   Il costrutto condizionale più usato è l'if-
    else, che può essere usa...
Costrutto decisionale
           If-else annidate
   Si presenta nel caso in cui vengono ad
    annidarsi piu’ condizioni...
Costrutto decisionale
         If-else combinate
   Una combinazione condizionale si ha
    quando si fa seguire ad un el...
Costrutto decisionale
                switch
   Il costrutto switch permette di gestire
    tutte quelle situazioni in cu...
Costrutto decisionale
                switch
   L'espressione contenuta tra le parentesi dello
    switch solitamente è d...
Costrutti Iterativi
   I costrutti iterativi (cicli) vengono
    abitualmente utilizzati in tutti quei casi in
    cui bi...
Costrutti Iterativi
                   while
   La struttura generale del
    while è
      while(condizioneBooleana) {
 ...
Costrutti Iterativi
                 while
   Se si desidera che il ciclo venga ripetuto un
    numero prefissato di volt...
Costrutti Iterativi
                    for
   il ciclo di 10 iterazioni utilizzando il ciclo
    while
      i=0;
      ...
Costrutti Iterativi
                      for
   init_statement:
        rappresenta l’inizializzazione della variabile ...
Array
Array
   Molto spesso nei programmi si ha
    l'esigenza di manipolare un gruppo di
    variabili dello stesso tipo che c...
Array
   Occorre indicare il numero di valori
    (lunghezza della n-pla):
       tipo nome[lunghezza];
       Esempio:...
Array
   Il popolamento è l'operazione che permette
    di assegnare un valore ad un elemento del
    vettore.
       a[...
Array
   E' possibile creare array bi-dimensionali,
    concettualmente simili ad una tabella
    rettangolare, dotata di...
Array
   E' inoltre possibile la realizzazione di tabelle
    non rettangolari.
   Un Array multidimensionale può essere...
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’esecuz...
Proprietà e Metodi
   I metodi servono per definire il blocco di
    codice che si occuperà di eseguire una
    serie di ...
Procedure
   Elaborano eventuali parametri e non
    restituiscono un valore.
   Servono per evitare di ripetere un bloc...
Procedure
   void (vuoto)
       indica che la funzione non restituira nessun
        valore ma eseguira solamente le is...
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
Upcoming SlideShare
Loading in...5
×

Corso progettazione

3,559

Published on

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

No Downloads
Views
Total Views
3,559
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
82
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Corso progettazione

  1. 1. Progettazione del software Giuseppe Dell'Abate
  2. 2. Produzione del software  il programmatore ascolta le esigenze del cliente  il programmatore scrive il codice che soddisferà le varie esigenze
  3. 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. 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. 5. ...ed ecco cosa succede.
  6. 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. 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. 8. 1-Stakeholder  Qualunque persona che influenza lo sviluppo del software  Clienti: utilizzatori o proprietari del sistema  Sviluppatori: analisti, progettisti, programmatori ecc
  9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 22. Qualità di un modello  Accuratezza:  deve descrivere il sistema correttamente, completamente e senza ambiguità;  Consistenza:  le diverse viste devono completarsi vicendevolmente per formare un insieme coerente  Semplicità:  deve poter essere compreso, senza troppi problemi, da persone estranee al processo di modellazione;  Manutenibilità:  la variazione dello stesso deve essere la più semplice possibile.
  23. 23. Pianificazione di sistema
  24. 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. 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. 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. 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. 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. 29. Approccio VCM  Attività secondarie, non aggiungono valore ma sono necessarie  Amministrazione e infrastruttura  Gestione delle risorse umane  Ricerca e sviluppo
  30. 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. 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. 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. 33. Approccio ISA  Descrizioni, servono per definire le caratteristiche del sistema:  Composizione dei dati  Descrivere i processi di business  I componenti del processi dove si posiziona  Chi usa i componenti  In che modo vengono usati
  34. 34. Metodologia di sviluppo
  35. 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. 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. 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. 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. 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. 40. Sviluppo  Implementare i moduli  Problemi:  tempi, costi e competenze degli sviluppatori
  41. 41. Testing  Unit testing  Module testing  Sub-system testing  System testing  Acceptance testing = alfa-testing  beta-testing
  42. 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. 43. Requisiti  Requisiti  Definizione degli obiettivi  Linearita del processo  Rigidita degli stadi
  44. 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. 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. 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. 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. 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. 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. 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. 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. 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. 53. Progettazione  I progetti software sono differenti per molti motivi:  la tipologia di sistema che devi sviluppare  la tecnologia da usare  la dimensione e la distribuzione del team  le conseguenze del fallimento  lo stile di lavoro del team  la cultura dell'organizzazione
  54. 54. UML Unified Modeling Language
  55. 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. 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. 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. 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. 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. 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. 61. “Method wars”  Metodi Storici  SADT: Structured Analysis and Development Technique  DFD: Data Flow Diagram  IDEF0: Integration Definition for Function Modeling
  62. 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. 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. 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. 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. 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. 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. 68. Perchè visuale?  Sintesi a “colpo d'occhio”  Visione delle entità coinvolte  Visione delle Relazioni  Visione delle Comportamenti
  69. 69. Approccio ad UML 1) Abbozzo 2) Progetto 3) Linguaggio
  70. 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. 71. Approccio ad UML  UML come progetto (blueprint)  Forward e reverse engineering  Forte dipendenza dal tool di modellazione  Alto rigore formale  Completezza
  72. 72. Approccio ad UML  UML come linguaggio di programmazione  Diagrammi compilabili  No forward e reverse engineering  Fortissima dipendenza dal tool di modellazione
  73. 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. 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. 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. 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. 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. 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. 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. 80. ...e sistemi component- based.  Il PC che stiamo utilizzando ne è un esempio...  Di cosa parliamo?  Componenti riutilizzabili  Dividere la logica dall'interfaccia  Utilizzare uno standard di comunicazione(esempio: CORBA, COM ecc...)
  81. 81. Diagrammi UML
  82. 82. Diagrammi UML  Classica suddivisione dei diagrammi UML  Strutturali: come è composto il sistema ( package, object, deployment, class, composite, component )  Comportamentali: come interagisce sistema (activity, use-case, state-machine )  Interattivi: che messaggi si scambia il sistema ( overview, sequence, timing, comunication )
  83. 83. Diagrammi UML
  84. 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. 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. 86. Object Diagram  Consentono di descrivere un sistema in termini di oggetti e relative relazioni.  Concetti di: oggetto, relazione.
  87. 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. 88. Component Diagram  Consentono di descrivere l'organizzazione e le dipendenze tra componenti software.  Concetti di: componente, interfaccia.
  89. 89. Package Diagram  Consentono di mostrare l'organizzazione dei packages e dei loro elementi.  Concetti di: package, merge, import, nested.
  90. 90. Sequence Diagram  Consentono di mostrare il comportamento dinamico di un gruppo di oggetti che interagiscono.  Concetti di: entità, messaggi.
  91. 91. Activity Diagram  Consentono di rappresentare la logica interna di un processo.  Concetti di: attività, flusso, responsabilità.
  92. 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. 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. 94. State Machine Diagram  Consentono la descrizione del comportamento di entità o di classi in termini di stato.  Concetti di: stato, transizione.
  95. 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. 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. 97. Composite-structure Diagram  Mostra i sottosistemi che compongono il sistema  Concetti di: parte, connettore, porte.
  98. 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. 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. 100. CASE  Rose; Rational Modeler ed  Real-time Studio(ARTiSAN) Architect (IBM - Rational)  OMONDO EclipseUML Studio  Together (Borland) (open source)  Visio (Microsoft)  PathMATE (Pathfinder Solutions)  TAU (Telelogic)  Metis with UML 2.0 Template  Objecteering (Softeam) (Computas)  Poseidon (Gentleware)  Describe (Embarcadero)  Enterprise Architect (Sparx  I-Logix Rhapsody Systems)  MetaMatrix MetaBase Modeler  Magic Draw (No Magic) (Tibco)  ArgoUML (open source)  Java Studio Enterprise (Sun  StarUML (open source) Microsystems)  UModel 2005 (Altova)  Model-in-Action (Mia Software)  TAU Developer and TAU  Pattern Weaver Ver. 2.0 Architect (Telelogic)  EDGE UML Suite (Mentor  Jude (open-source) Graphics)  InnovatorAOX 2006 Object eXcellence (MID)
  101. 101. Sistema di elaborazione
  102. 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. 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. 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. 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. 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. 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. 108. Sistema di elaborazione Hardware  CPU  Memoria RAM  Scheda Video  Periferiche I/O  BUS di sistema
  109. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 130. Tipo di Memoria  Le memorie si dividono in due categorie principali:  RAM  ROM
  131. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 154. Bus di sistema  Control bus:  La CPU controlla tutto il sistema di elaborazione mandando e ricevendo segnali per mezzo del “control bus”  Address bus:  La CPU comunica alla memoria l’indirizzo della locazione che intende leggere o scrivere per mezzo dell’address bus (bus degli indirizzi)  Data bus:  Il trasferimento dei dati dalla CPU alla memoria e viceversa avviene tramite il “data bus”
  155. 155. Sistemi Operativi
  156. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 166. Sistemi Operativi L’interprete dei comandi  L’interprete dei comandi è la vera interfaccia del sistema operativo verso l’utente  Riceve i comandi dall’utente (generalmente da tastiera) e li esegue  Nei sistemi multi-tasking l’utente può mandare in esecuzione un comando senza aspettare che il precedente sia terminato
  167. 167. Istruzioni e linguaggi
  168. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 178. Istruzioni e linguaggi  Possiamo aggregare i numerosi linguaggi di programmazione esistenti sulla base del modello astratto ( paradigma ) di programmazione
  179. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 191. Valori, tipi e operatori
  192. 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. 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. 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. 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. 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. 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. 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. 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. 200. Valori, tipi e operatori - Valori -
  201. 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. 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. 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. 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. 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. 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. 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. 208. Valori, tipi e operatori - Operatori -  Il linguaggio di programmazione mette a disposizione del programmatore una serie di operatori utili, tra i quali:
  209. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 221. Valori, tipi e operatori Operatori logici  Consentono di eseguire operazioni logiche su tipi primitivi operando sulla loro rappresentazione binaria.
  222. 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. 223. Valori, tipi e operatori - Operatori -  Operatori ternari  es.: operatore condizionale “?:”  true ? 3:6 il risultato sarà 3  false ? 3:6 il risultato sarà 6
  224. 224. Costrutti decisionali ed iterativi
  225. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 237. Array
  238. 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. 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. 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. 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. 242. Array  E' inoltre possibile la realizzazione di tabelle non rettangolari.  Un Array multidimensionale può essere  inizializzato con una serie di valori in modo simile a come si può fare con gli Array semplici.
  243. 243. Struttura del programma
  244. 244. Proprietà e Metodi  Un programma è composto da 2 gruppi di elementi:  Proprietà  Metodi
  245. 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. 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. 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. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×