Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Tale metodologia è focalizzata sul dato più che sul processo nel suo
complesso; essa mira alla realizzazione di parti di codice
autoconsistenti e riusabili detti appunto Oggetti che siano in grado di
manipolare le strutture dati di cui hanno bisogno, nascondendo al
“mondo esterno” i dettagli implementativi che ne garantiscono il
funzionamento corretto.
Incapsulamento (Encapsulation)
Ereditarietà (Inheritance)
Polimorfismo (Polymophism)
Oggetto: è uno specifico elemento reale ed utilizzabile della classe. Es. C-3PO
Attributo: è una variabile interna ad una classe che concorre a definirne lo stato. Es. Private Sensor as Radar
Proprietà: è il metodo col quale si scrive o si legge un attributo di una classe. Es. C-3PO.GetBatteryLevel()
Ereditarietà: è la possibilità di creare gerarchie di classi in cui alcuni metodi o attributi risiedono nella classe base
Polimorfismo: è la possibilità di definire uno stesso nome di metodo con comportamenti diversi
Astrazione: è la caratteristica principale delle classi che consente di trattare ad alto livello i problemi
Incapsulamento: è l’azione di nascondere al mondo esterno parti di funzionamento interno alla classe
Privati (Private)
Pubblici (Public)
Protetti (Protected)
Statici (Static)
Sono metodi o attributi di classe e non di istanza il che implica che per
chiamarli o per leggerne il valore non serve istanziare alcun oggetto.
Ogni istanza di una classe contenete metodi o attributi statici può
accedere a questi elementi che condivide con tutte le altre istanze.
Finali (Final)
Sono metodi dei quali si vincola a non poterli più ridefinire; lo stesso
modificatore è applicabile alle classi delle quali non si vuole più
consentire l’ereditarietà.
Virtuali (Virtual)
Robustezza
Nascondendo ciò che non è necessario esporre si sfavorisce un utilizzo non ortodosso
della struttura dati interna.
Es. Stack o Queue implementate con vettori e variabili di stato Empty, Full, CurrentElement sono soggette ad un
inserimento ed estrazione di elementi del vettore con accesso diretto anzichè con Push() e Pop()
Indipendenza
Il “mondo esterno” conosce solamente l’interfaccia con la quale dialogare con l’oggetto
mentre la sua implementazione è nascosta e quindi aggiornabile indipendentemente da
chi sta già utilizzando l’oggetto.
Es. Metodo Draw() che disegna un quadrato. La prima versione utilizza quattro chiamate ad una DrawLine()
mentre la versione successiva e più performante utilizza una unica DrawBox()
Riusabilità
Essendo moduli autocosistenti, le classi si prestano ad essere riutilizzate in più parti dello
stesso applicativo o in applicativi diversi, magari raccolte in Package.
End Class
La classe dalla quale si eredita viene detta SUPERCLASSE mentre la derivata si indica
con SOTTOCLASSE.
Una Abstract Class è una classe che defininisce la struttura di un oggetto e può
anche implementarne alcuni metodi generici per tutta la gerarchia.
Una classe può estendere molte interfacce ma eredita solo da una classe
Una abstract class definisce anche il “modo” con cui una classe deve svolgere
un compito. Es. metodo implementato nella classe abstract
Va usata in tutti i casi in cui è presente una palese gerarchia tra gli elementi che
compongono il problema da risolvere; il beneficio principale consiste nella minor
stesura di codice, nella possibilità di centralizzarlo e nell’approccio top-down al
problema.
Se vi sono oggetti che sono utili per identificare una categoria ma che non
saranno mai istanziati allora è bene indirizzarsi alle interfacce o alle classi
astratte; al contrario se una classe non solo è genitrice di una gerarchia ma
anch’essa sarà realmente utilizzata allora si può realizzare un’ereditarietà
semplice.
Nel caso in cui si sia scelta la prima strada si può considerare che l’uso delle
interfacce è utile quando oggetti possono doverne estendere più di una e
quando non sia chiaro a priori o sia poco indentificabile un’implementazione
comune per tutta la gerarchia.
Es.
MyRover.RotateRight() MyHexapod.RotateRight()
RightWheel.Speed=10; RightLegs.MoveBackward();
LeftWheel.Speed=20; LeftLegs.MoveForward();
Migliora le performance
Un metodo implementato nella classe base viene successivamente raffinato per svolgere meglio compiti di
dettaglio nelle classi derivate.
Es. Object.Draw() nella classe base implementato con una draw di un punto alla volta mentre
nell’oggetto Rectangle è implementato con la primitiva Object.DrawBox()
Si implementa un metodo nella classe base con funzionalità generiche che vengono specializzate solo nel
divenire del progetto.
E’ possibile assegnare lo stesso nome a metodi che hanno comportamenti differenti, ad esempio perchè
agiscono su un numero diverso di parametri, pur avendo la medesima finalità; altresì è possibile utilizzare
lo stesso nome e numero di parametri ma per ottenere risultati diversi ma omogenei per funzionalità.
Overloading
Effettuare overloading di un metodo significa dichiararlo più volte all’interno della stessa classe o in classi
gerarchicamente dipendenti, mantenendone il nome ma variandone la SIGNATURE.
Overriding
L’overriding consiste nel ridefinire un metodo di una classe base in una derivata ottenendo che l’oggetto
istanziato chiamerà a run-time il metodo che realmente ha implementato utilizzando la tecnica del late
binding.
robots.Add(rover1)
robots.Add(rover2)
robots.Add(hexapod)
r.Move(10)
Next
r.Turn(1)
Next
End Sub
Usare le superclassi per definire il codice comune a molte classi piuttosto che
distribuire lo stesso codice in più classi diverse.
Ciclo di vita del software: comprende tutte le attività dall’analisi inziale fino all’obsolescenza (sviluppo,
aggiornamento, manutenzione)
Analisi
Progettazione
Implementazione
Collaudo
Es. una cattiva progettazione può portare a run-time ad un eccessiva formazione di thread che
utilizzano troppa ram con la conseguente paginazione su disco ed un rallentamento delle performance.
Risultato:
Scrivere il codice relativo alle classi definite nella fase di progettazione, compilare ed effettuare
il debugging del codice.
Collaudo
Effettuare una serie di test atti a verificare che tutti i punti indicati nell’SRS siano correttamente
implementati.
Produzione di un documento di test che mostri il pool di verifiche effettuate
Installazione
Installare sulle macchine target l’applicativo prodotto mediante un apposito installatore che
potrebbe essere anche dotato del meccanismo di aggiornamento mediante patch per versioni
successive del prodotto.
Valutazione del feedback da parte dell’utilizzatore finale.
Modello a spirale
! Problema: numero di iterazioni elevato, il processo può
richiedere molto tempo per essere completato
Se usato pedissequamente non produce Problema: numero di iterazioni anche elevato quindi tempi di
risultati soddisfacenti. realizzazione potenzialmente lunghi.
System
Il sistema nel suo complesso è rappresentato come un rettangolo vuoto; questo
simbolo viene messo in relazione con altri model element che rappresentano
caratteristiche del sistema.
Actor
Gli attori sono rappresentati graficamente nel diagramma da un'icona che
rappresenta un uomo stilizzato (stickman). Formalmente, un attore è una classe. Un
attore rappresenta un ruolo coperto da un certo insieme di entità interagenti col
sistema (inclusi utenti umani, altri sistemi software, dispositivi hardware e così via).
Use Case
Un caso d'uso è rappresentato graficamente come un'ellisse contenente un nome;
esso rappresenta una funzione o servizio offerto dal sistema a uno o più attori.
Object Oriented Design
Classe
Una classe rappresenta una categoria di entità dette istanze o oggetti; ogni classe è corredata da un insieme di
attributi che ne descrivono le caratteristiche e da operazioni che ne descrivono il comportamento:
1. nome della classe
2. gli attributi
3. le operazioni
Associazioni
Due classi possono essere legate da associazioni che rappresentano i legami (link) che sussistono fra gli oggetti
delle classi associate. Le associazioni possono essere corredate da informazioni aggiuntive relative alla
molteplicità.
Dipendenze
Due classi possono essere legate da una relazione di dipendenza indicante che la definizione di una delle due
fa riferimento all'altra.
Generalizzazione
Due classi possono essere legate da una relazione di generalizzazione, che indica che una delle due
(superclasse) si può considerare una generalizzazione dell'altra (sottoclasse).
Messaggi
Un messaggio è un'informazione che viene scambiata tra due entità. Solitamente chi
invia il messaggio, la parte attiva, è l'attore.
Il messaggio è sincrono, se l'emittente rimane in attesa di una risposta, o asincrono,
nel caso l'emittente non aspetti la risposta e questa può arrivare in un secondo
momento.