Principi di ingegneria del software Flashcards
Scopo ingegneria del software
Ingegnerizzare mediante norme e strumenti la creazione e il mantenimento del software:
- Scelta linguaggio di programmazione: si usa il paradigma di programmazione orientato agli oggetti, che permette l’integrazione del lavoro di molte persone
- Definizione struttura del progetto mediante strumenti semplici e verificabili
- Verifica mediante sistemi automatici, più semplici possibile per gli utilizzatori
Modelli ciclo di vita del software
- Modello a cascata
- Modello a spirale
Modello a cascata
1) Analisi e specifica dei requisiti:
requisiti del committente vengono formalizzati e si verifica che siano consistenti (realizzabili)
2) Progettazione e specifica del sistema:
report che dice come deve funzionare il sistema, verificando che funzioni correttamente. Utilizzato linguaggio Statechart di specifica semi formale
3) Codifica e test di modulo:
scrittura del codice mediante strumenti automatici, verifica del codice implementato e dell’insieme dei file (modulo)
4) Integrazione e test del sistema
5) Consegna e manutenzione
Modello a spirale
Riprende il modello a cascata, ma si eseguono ciclicamente le varie operazioni
1) Analisi e specifica dei requisiti
2) Progetto dell’architettura del sistema
3) Implementazione
4) Verifica/test
Primo giro:
- Analisi iniziale
- Progetto iniziale
- Primo prototipo
- Verifica del primo prototipo
Secondo giro:
- Nuove specifiche da parte del committente
- Progettazione del sistema completo
- Prima versione del sistema completo
- Verifica della prima versione
Problemi programmazione in C
Se più persone lavorano sullo stesso programma, le modifiche di un programmatore si ripercuotono sul codice degli altri, quindi i membri del team non possono lavorare in modo indipendente
Principio della programmazione orientata agli oggetti
Alla base della programmazione object oriented c’è il concetto di classe, un tipo di dato astratto che include la coppia di elementi:
- Definizione del tipo
- Metodi che operano sul tipo
In questo modo tutte le funzioni necessarie per operare su un tipo sono incluse nel tipo di dato astratto
Tipo di dato astratto: differenza tra C e OO
- Se simuliamo un tipo di dato astratto in C, le variabili vengono allocate in memoria, mentre le funzioni operano nel file di chi le ha definite, e le variabili vengono quindi passate in quel file
- Nella programmazione OO, invece, in memoria viene copiato l’intero contenuto della struttura dati astratta (definizione del tipo e attributi), che prende il nome di oggetto. Chi opera sul tipo di dato astratto lo fa localmente, senza modificare file di altri.
Class Diagram
Rappresentazione del software
- Nome classe
- Attributi
- Metodi
Per ogni attributo: Visibilità Nome : Tipo
Per ogni metodo: Visibilità Nome Argomenti in input Tipo in output
Visibilità
- Public + : visibile da altre classi
- Private - : visibile solo nella classe in cui è definito
- Protected # : pubblico per la classe che sta estendendo, privato per tutte le altre classi
Linguaggio compilato o interpretato
- Compilato (es C) : specifico per sistema operativo, eseguibile generato ed eseguito direttamente nel sistema in cui viene compilato
- Interpretato (es Java) : Presente interprete (Java Virtual Machine), codice eseguibile su macchine diverse, indipendentemente da dove viene compilato:
file sorgente .java - > compilato .class (JVM lavora su file .class)
Costruttore
- Metodo generato in automatico
- Sempre public
- Nome uguale alla classe
- Serve per allocare in memoria la classe - > OGGETTO
- Dopo aver chiamato il costruttore per una variabile, si possono chiamare i metodi relativi; altrimenti la variabile punta a NULL
Overload del metodo
In una classe ci possono essere metodi con stesso nome che ricevono in input parametri di tipo diverso
Garbage collector
La JVM ogni tanto pulisce la memoria occupata e non più referenziata, non c’è quindi bisogno di malloc e free.
Questo è un problema per i sistemi real time, perché il garbage collector impiega risorse e non è predicibile, quindi generalmente Java non è usato per sistemi real-time.
Negli Stati Uniti usano Java senza virtual machine, perdendo però la possibilità di eseguire i programmi su sistemi diversi
Attributi/metodi statici
- Parola chiave static riferita ad attributi o metodi
- Metodo o attributo statico vive indipendentemente dall’oggetto: si può quindi fare riferimento senza che la classe sia allocata
- Una modifica di una variabile static in un oggetto si ripercuote su tutti gli altri oggetti
Estensione di una classe
- Una classe A può estendere una classe B
- A è la sottoclasse, B la superclasse
- B è più generale di A
- Sottoclasse può ridefinire metodi public della superclasse