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