Intr
oduz
ione
al
l’A
nali
si e
Des
ign
ad o
gget
ti
Intr
oduz
ione
al
l’A
nali
si e
Des
ign
ad o
gget
ti
Luc
a L
ista
Il ci
clo
di v
ita d
el s
oftw
are
Il ci
clo
di v
ita d
el s
oftw
are
•R
equi
rem
ents
•A
naly
sis
•D
esig
n•
Prod
uctio
n•
Tes
ting
•M
aint
enan
ce
Il m
odel
lo W
ater
fall
Il m
odel
lo W
ater
fall
Ana
lysi
sA
naly
sis D
esig
nD
esig
n Prod
uctio
nPr
oduc
tion
Tes
ting
Tes
ting
Req
uire
men
tsR
equi
rem
ents
Il m
odel
lo E
volu
tion
ary
Il m
odel
lo E
volu
tion
ary
Req
uire
men
tsR
equi
rem
ents
Ana
lysi
sA
naly
sis
Des
ign
Des
ign
Prod
uctio
nPr
oduc
tion
Tes
ting
Tes
ting
Wat
erfa
ll vs
Evo
lutio
nary
Wat
erfa
ll vs
Evo
lutio
nary
Evo
luti
onar
y
•B
revi
cic
li di
svi
lupp
o co
mpl
eti
•Sc
elte
bas
ate
sulla
val
utaz
ione
de
i ris
chi
•In
tegr
azio
ne c
ontin
ua
Wat
erfa
ll
�
Dec
ompo
sizi
one
com
plet
a de
l si
stem
a da
ll’in
izio
�
Proc
esso
per
sin
goli
pass
i
�
Inte
graz
ione
alla
fine
Un
prod
otto
com
plet
o è
disp
onib
ile
solo
alla
fine
Un
prot
otip
o fu
nzio
nant
e è
disp
onib
ile si
n da
ll’in
izio
Ana
lysi
sA
naly
sis
•C
ompr
ensi
one
e raz
iona
lizza
zion
ede
i req
uisi
ti –
la fo
rmul
azio
ne d
ei r
equi
siti
è sp
esso
inco
mpl
eta,
am
big
uao
impr
ecis
a–
chia
rifi
ca d
ei r
equi
siti
e ve
rifi
ca d
ella
con
sist
enza
•C
ostr
uzio
ne d
el m
odel
lo•
Iden
tifi
cazi
one
delle
cla
ssi d
egli
ogge
tti r
ileva
nti
per
l’ap
plic
azio
ne–
Evi
tare
rife
rim
enti
a st
ruttu
re in
form
atic
he, c
ome
arra
y,
list
e, e
tc. c
he sa
rann
o tr
atta
te p
iù ta
rdi
•U
so d
ell’
astr
azio
ne–
Rim
anda
re i
detta
gli a
una
fase
succ
essi
va
•Id
enti
fica
zion
e de
lle re
lazi
oni t
ra c
lass
i•
I no
mi d
i cla
ssi,
met
odi e
attr
ibut
i son
o im
port
anti!
Com
e id
entif
icar
e le
cla
ssi
Com
e id
entif
icar
e le
cla
ssi
•D
all’
anal
isi t
estu
ale
dei r
equi
siti
, le
clas
si p
osso
no
es
sere
iden
tific
ate
con
i pi
ù im
por
tant
i sos
tant
ivi
•Po
sson
o sp
ecif
icar
e si
a ra
ppr
esen
tazi
oni d
i ent
ità
fisi
che
(im
pieg
ato,
libr
o, e
cc.)
che
co
ncet
ti (s
upe
rfic
ie, t
raie
ttori
a, p
agam
ento
, pre
stito
, ecc
.)
•G
li o
gge
tti d
evo
no
aver
e re
spo
nsab
ilità
chi
are
all’
inte
rno
del m
ode
llo
•L
e re
spo
nsab
ilità
dev
on
o es
sere
eq
uam
ente
di
stri
buite
tra
le d
iver
se c
lass
i
Err
ori d
a ev
itare
Err
ori d
a ev
itare
•E
limin
are
clas
si ri
don
dant
i–
dupl
icat
i di c
lass
i già
def
inite
(ste
sse
funz
iona
lità:
in
vest
itore
, com
prat
ore ,
ven
dito
re),
cla
ssi i
rrile
vant
i (s
cars
e fu
nzio
nalit
à: p
eso,
alte
zza,
pre
zzo)
, cla
ssi d
i so
la im
plem
enta
zion
e ( e
lenc
o li
bri ,
ecc.
)
•E
vita
re c
lass
i co
n tr
oppe
resp
onsa
bilit
à–
Meg
lio s
pezz
arle
in c
lass
i più
pic
cole
, con
ruol
i più
ch
iari
e de
fini
ti
•E
vita
re c
lass
i che
sian
o so
lo c
onte
nito
ri di
dat
i–
Ese
mpi
o: s
olo
met
odi getX()
, setX()
: equ
ival
e ad
av
er d
ichi
arat
o X
attr
ibut
o pu
bblic
o. L
a re
spon
sabi
lità
sull’
uso
di X
ce l’
haqu
alch
e al
tro
ogge
tto!
Iden
tific
azio
ne d
ei m
etod
i e a
ttrib
uti
Iden
tific
azio
ne d
ei m
etod
i e a
ttrib
uti
•I
prim
i can
dida
ti m
etod
i pos
sono
ess
ere e
strat
to d
ai
prin
cipa
li ve
rbin
ella
des
criz
ione
testu
ale
dei r
equi
siti
•G
li at
trib
uti r
appr
esen
tano
le p
rinc
ipal
i pro
prie
tàde
gli
ogge
tti–
Util
izza
re n
uovi
og
getti
agg
rega
ti pe
r le
pro
prie
tà c
ompl
esse
che
m
erita
no u
n’id
entit
à in
dipe
nden
te (e
s.: l
’aut
odi
un
aut
ista
, il
cont
oco
rren
te b
anca
rio
di u
n ri
spar
mia
tore
)
–R
iman
dare
la d
escr
izio
ne d
egli
attr
ibut
i nec
essa
ri pe
r de
ttagl
i di
im
plem
enta
zion
e
•C
erca
re o
pera
zion
i com
uni a
più
cla
ssi e
ver
ific
are
se sia
poss
ibile
cre
are
una
clas
se a
stra
tta
Rap
port
o tr
a cl
ient
e se
rver
Rap
port
o tr
a cl
ient
e se
rver
Vis
ta d
el c
lien
t•
Il cl
ient
sa d
i cos
a ha
bi
sogn
o, e
che
vuol
e ri
chie
dere
al s
erve
r
•N
on g
li in
tere
ssa
come
il se
rver
fa
il la
voro
•N
on g
li in
tere
ssa
se il
lavo
ro lo
fai i
l ser
ver
o se
lo
del
ega
(es.
: pro
xy)
Vis
ta d
el s
erve
r•
Il se
rver
sa
qua
le la
voro
de
ve sv
olge
re a
rich
iesta
•N
on g
li in
tere
ssa
chi
effe
ttua
la ri
chie
sta
•Se
com
e sv
olge
re il
lav
oro
o a
chi c
hied
ere
per
svol
gere
le p
arti
che
non
sa co
mpl
etar
e
Ass
egna
re R
espo
nsab
ilità
Ass
egna
re R
espo
nsab
ilità
•A
naliz
zare
il r
uol
ode
i var
i og
getti
•C
onc
entr
arsi
sul
com
por
tam
ento
e n
on
sulla
ra
ppr
esen
tazi
one
•D
efin
ire
le in
terf
acce
(le
ope
razi
oni c
he so
ddi
sfan
o le
re
spon
sabi
lità)
pri
ma
Un
a c
orre
tta
ass
egn
azio
ne d
elle
res
po
nsa
bilità
è la
chi
ave
di u
n a
bu
on
a m
odu
lari
tàe
rius
o
Col
labo
razi
one
tra
clas
siC
olla
bora
zion
e tr
a cl
assi
•L
e re
spo
nsab
ilità
van
no
sudd
ivis
e tr
a i v
ari o
gge
tti
del s
iste
ma
•N
on
dev
e es
iste
re u
n co
ntro
llo c
entr
aliz
zato
–U
n og
gett
o ch
e sv
olge
tutte
le o
pera
zion
i e u
sa og
getti
ch
e si
ano
solo
con
teni
tori
di d
ati e
quiv
ale
a un
prog
ram
mar
e in
term
ini d
i dat
i e fu
nzio
ni!
•U
n o
gge
tto d
eve
com
pier
e le
pro
prie
re
spon
sabi
lità
e del
egar
e ad
altr
i ope
razi
oni
spec
ific
he–
Leg
ge d
i Dem
eter
: non
usa
te o
gget
ti lo
ntan
i:In
vece
di: stockMarket.stocklist().add(stock);
usar
e:
stockMarket.add(stock);
Iden
tific
azio
ne d
elle
resp
onsa
bilit
àId
entif
icaz
ione
del
le re
spon
sabi
lità
•O
gni
cla
sse
deve
tent
ate
di r
ifiu
tare
le
resp
onsa
bilit
à–
Dov
rei?
(Non
sono
io c
he lo
dev
o fa
re!)
–Po
trei
? (
Non
ho l
e ca
ratte
rist
iche
per
far
lo!)
•C
erca
te d
i far
e p
oco
lavo
ro–
Se u
na c
lass
e ha
dov
uto
acce
ttare
una
re
spon
sabi
lità
può
cerc
are
di f
ar f
are
il la
voro
a
qual
che
altr
o og
gett
o
•Po
tenz
iate
i co
llab
orat
ori,
no
n in
terf
erite
Iden
tific
azio
ne d
elle
rela
zion
iId
entif
icaz
ione
del
le re
lazi
oni
•C
erca
re c
olla
bor
azio
ni
•C
erca
re a
ggre
gazi
oni
•C
erca
re g
ener
aliz
azio
ni
Com
e u
n c
lien
tcon
osce
il su
o se
rvic
epr
ovid
er?
•E
vita
re le
rela
zio
ni i
nut
ili e
di e
cced
ere
nelle
di
pend
enze
–
Rag
nate
le d
i dip
ende
nze
rend
ono r
igid
o il
codi
ce!
Scel
ta d
elle
pos
sibili
rel
azio
niSc
elta
del
le p
ossib
ili r
elaz
ioni
Lo
gich
e
•G
ener
aliz
zazio
ne: E
’ u
n..
•A
ggr
egaz
ione
: Ha
•D
ipen
denz
a: C
on
osce
Impl
emen
tazi
one
•E
redi
tari
età
•Is
tanz
iazi
one
di t
empl
ate
•C
omp
osiz
ione
b
y va
lue
•C
omp
osiz
ione
b
y re
fere
nce
Ave
reo
Ess
ere
Ave
reo
Ess
ere
sottot
ipi p
osso
no
ess
ere u
sati
ogni
vol
ta c
he è
ri
chie
sta
la c
lass
e d
i bas
e.
•U
sare
ere
dita
riet
àse
è r
ichi
esto
il p
olim
orfi
smo
•M
ai m
odi
fica
re il
com
por
tam
ento
del
la c
lass
e di
ba
se p
er m
otiv
i ind
otti
dalle
sotto
clas
si c
oncr
ete.
•In
C+
+, l’
ered
itari
età
pu
bbl
ica
seg
ue il
“P
rinc
ipio
di L
isko
v”:
Ere
dita
riet
à e r
i -us
o d
el c
odic
eE
redi
tari
età
e ri -
uso
del
cod
ice
•A
ttenz
ione
! L
’ ere
dita
riet
àpu
ò e
sser
e us
ata
per
evita
re d
i ris
criv
ere
codi
ce ch
e es
iste
già
in
altr
e cl
assi.
Que
sto
non
è O
O e
d è
da
evita
re!
•L
’agg
rega
zion
esp
esso
risp
onde
meg
lio a
qu
esta
esi
genz
a.
•Se
il r
appo
rto
fra
due
ogge
tti è
del
tip
o:–
èal
lora
si u
sa l’
ered
itari
età;
–ha
allo
ra si
usa
l’ag
greg
azio
ne.
Ave
reo
Ess
ere
Ave
reo
Ess
ere
•Investor: è
una Strategy
o ha
una
Strategy
•StockMarket: è
un vector<Stock>
o ha
un vector<Stock>
•Auto: h
a4
Ruote
o è
4 vo
lte u
na Ruota
(im
poss
iblie
in C
++,
tipi
co in
EIF
FE
L)
Com
posi
zion
e:by
val
ueo
by
refe
renc
eC
ompo
sizi
one:
by v
alue
o b
y re
fere
nce
•T
ipi s
empi
ci( int, d
ouble, …
): b
y va
lue
•Pa
rte
dello
sta
todi
un
og
getto
: b
y va
lue
•U
n o
gge
tto v
iene
con
divi
so:
by
refe
renc
e
•A
lloca
to r
un
tim
e:
by
refe
renc
e
•U
sato
pol
imor
fica
men
te:
by
refe
renc
e
Des
ign
Des
ign
•A
vvic
inar
e il
mo
dello
ad
og
getti
del
l’an
alis
i ai
conc
etti
info
rmat
ici
•A
ggi
unt
a di
nuo
vi o
gge
tti i
nter
ni n
eces
sari
per
l’im
plem
enta
zion
e
•E
spre
ssio
ne d
elle
ope
razi
oni
ide
ntif
icat
e in
fase
di
anal
isi i
n te
rmin
i di a
lgor
itmi
•Su
ddi
visi
one
delle
ope
razi
oni
com
ples
se in
op
eraz
ioni
più
sem
plic
i–
da d
eleg
are
ad a
ltri o
gget
ti
•Sc
elta
del
le st
ruttu
re d
ati
Cic
lo d
i Des
ign
Cic
lo d
i Des
ign
Spe
cify
Sem
anti
cs
Spe
cify
Sem
anti
cs
Iden
tify
Obj
ects
an
d C
lass
es
Iden
tify
Obj
ects
an
d C
lass
es
Spe
cify
inte
rfa
ces
and
impl
emen
tatio
n
Spe
cify
inte
rfa
ces
and
impl
emen
tatio
n
Iden
tify
Rel
atio
nshi
ps
Iden
tify
Rel
atio
nshi
ps
Iter
azio
ni s
ul D
esig
nIt
eraz
ioni
sul
Des
ign
•D
opo
ogni
cic
lo b
isog
na a
naliz
zare
i ri
schi
, la
stab
ilità
e la
com
ples
sità
delle
cla
ssi
•Se
una
cla
sse
è tro
ppo
com
ples
sa c
onvi
ene
divi
derl
a
•A
d o
gni
cic
lo il
num
ero
di m
odif
iche
dev
e di
min
uire
•A
rchi
tettu
re tr
oppo
com
ples
se d
evon
o es
sere
mod
ular
izza
te
Prod
uzio
nePr
oduz
ione
•C
odi
fica
, im
plem
enta
zio
ne d
el m
ode
llo
•N
on
sopr
avva
luta
re q
uest
a fa
se: r
ichi
ede
min
ore
sfor
zo s
e le
fasi
pre
cede
nti s
ono
fatte
ben
e
Su
dd
ivis
ion
e d
el t
emp
o p
er il
pri
mo
cic
lo
Ana
lysi
s30
%
Pro
d.15
%Tes
ting
20%
Des
ign
35%
Tes
tT
est
•D
ebug
gin
g :è
ovv
io…
il c
odi
ce n
on
dev
e da
re
erro
ri.
•U
se c
ases
: spe
cifi
can
o il
com
por
tam
ento
del
si
stem
a in
una
regi
one.
•Sc
enar
i : so
no
esem
pi c
onc
reti
di u
se c
ases
. Per
de
fini
zion
e se
tutti
gli
scen
ari s
on
o so
ddi
sfat
ti co
rret
tam
ente
il t
est è
pos
itivo
.
Use
Cas
ese
Scen
ari
Use
Cas
ese
Scen
ari
•U
no U
seC
ase
spec
ific
a al
cuni
dei
co
mpo
rtam
enti
rich
iest
i al s
iste
ma
•U
noSc
enar
ioè
una
real
izza
zione
con
cret
adi
uno
use
case
in u
na p
artic
olar
e ci
rcos
tanz
a–
Scen
aris
eco
nda
ripo
sson
o e
sser
e us
ati p
er
rap
pres
enta
re u
na v
aria
zio
nedi
un
tem
a di
un
o
scen
ario
pri
ncip
ale
(wh
at if
...)
Met
odi
di s
vilu
ppo
del
sof
twar
eM
eto
di d
i svi
lupp
o d
el s
oftw
are
Un
met
odo
com
pren
de:
•U
na n
otaz
ione
mez
zo c
omu
ne p
er e
spri
mer
e st
rate
gie
e dec
isio
ni
•U
n p
roce
sso
spec
ific
a co
me
deve
avv
enir
e lo
svi
lupp
o
Met
odi
Obj
ect O
rien
ted
Met
odi
Obj
ect O
rien
ted
–B
ooch
Met
hod
by G
rady
Bo
och
–O
MT
by J
im R
umba
ugh
–O
bjec
tory
(Use
Cas
es)
by I
var
Jaco
bso
n
–C
RC
by
R.W
irfs
-Bro
ck
•D
i più
rece
nte
intr
oduz
ione
: UM
L–
uno
sta
nda
rd O
MG
(Obj
ectM
anag
emen
t Gro
up),
da
l no
vem
bre
1997
Gra
dy B
ooch
Jim
Rum
baug
h
Ivar
Jac
obso
n
Un
ese
mpi
o co
ncre
toU
n e
sem
pio
conc
reto
•R
equi
siti:
–R
ealiz
zare
una
sim
ulaz
ione
di u
n m
ode
llo d
i m
erca
to a
zio
nari
o. D
iver
si i
nves
titor
i si
scam
bian
o ti
toli
su u
n m
erca
to a
zio
nari
o. G
li in
vest
itori
deci
don
o se
ven
dere
o a
cqui
star
e in
ba
se a
pro
prie
stra
tegi
e.
–Si
vu
ole
mis
urar
e •
l’an
dam
ento
dei
tito
li su
l mer
cato
•qu
ali s
ono
le st
rate
gie
più
redd
itizi
e
Poss
ibili
can
dida
ti cl
assi
Poss
ibili
can
dida
ti cl
assi
•R
equi
siti:
–R
ealiz
zare
una
sim
ulaz
ione
di u
n m
ode
llo d
i m
erca
to a
zio
nari
o. D
iver
si i
nves
titor
isi
scam
bian
o ti
toli
su u
n m
erca
to a
zio
nari
o. G
li in
vest
itori
deci
don
o se
ven
dere
o a
cqui
star
e in
ba
se a
pro
prie
stra
tegi
e.
–Si
vu
ole
mis
urar
e •
l’an
dam
ento
dei
tito
lisu
l mer
cato
•qu
ali s
ono
le st
rate
gie
più
redd
itizi
e
Iden
tific
hiam
o cl
assi
e og
getti
Iden
tific
hiam
o cl
assi
e og
getti
•I
prim
i can
dida
ti cl
assi
poss
ono
ess
ere
pres
i da
l voc
abol
ario
del
pro
blem
a ch
e st
iam
o
anal
izza
ndo.
Ese
mpi
o:–
Inve
stito
re, T
itolo
, Ord
ine,
Str
ateg
ia
Ana
lizzi
amo
un p
aio
di s
cena
riA
naliz
ziam
o un
pai
o d
i sce
nari
•C
ome
deci
dere
se v
ende
re o
acq
uist
are
un
titol
o
•C
ome
gest
ire
gli
ordi
nisu
l mer
cato
Dec
ider
e se
ven
dere
o a
cqui
star
e un
tito
loD
ecid
ere
se v
ende
re o
acq
uist
are
un ti
tolo
•A
cqui
sire
info
rmaz
ioni
sul
tito
lo•
Ana
lizza
re le
pre
staz
ioni
del
tito
lo–
Gua
dag
no,
per
dita
, sto
ria…
.
•A
naliz
zare
i pr
opri
guad
agni
o le
pro
prie
pe
rdite
•D
ecid
ere
in b
ase
alla
stra
tegi
a–
Qua
nto
acq
uist
are/
ven
dere
–A
che
pre
zzo
pia
zzare
l’or
dine
Ges
tire
gli
ordi
niG
estir
e gl
i or
dini
•C
ont
rolla
re g
li or
dini
rela
tivi a
cia
scu
n ti
tolo
•V
erif
icar
e se
ci s
on
o o
rdin
idi v
endi
ta e
di
acq
uist
o c
ompa
tibili
–L
’off
erta
di v
endi
ta d
eve
aver
e un
pre
zzo
min
ore
o ug
uale
a qu
ello
del
l’of
fert
a di
acq
uist
o
•E
seg
uire
gli
ordi
ni–
Poss
ibili
tà d
i ese
cuzi
one
parz
iale
deg
li or
dini
–G
li or
dini
pos
sono
term
inar
e in
eseg
uiti
al t
erm
ine
di
una
valid
ità m
assim
a
Iden
tific
hiam
o al
cune
rela
zion
iId
entif
ichi
amo
alcu
ne re
lazi
oni
•U
n in
vest
itore
–
poss
iede
una
cer
ta q
uant
ità d
i tito
li–
ha u
na c
erta
stra
tegi
a di
acq
uist
o
Bu
yS
tra
teg
y
pri
ce
()b
uy
()
(fro
m n
as
da
q)
Sto
ck
sym
bo
l()
pri
ce
()
(fro
m n
as
da
q)
sto
ckI
nfo
am
ou
nt
: lo
ng
= (
0)
bu
yPri
ce
: d
ou
ble
= (
0)
sto
ckI
nfo
()a
vaila
ble
()
(fro
m I
nve
sto
r)
Po
rtfo
lio
Inve
sto
r
ca
pita
l_ :
do
ub
le =
( c
ap
ital )
bu
y()
se
ll()
(fro
m n
as
da
q)
0..
1
1-b
uyS
tra
teg
y_
0..
1
11
1
1
1
-po
rtfo
lio_
Rel
azio
ni d
ella
cla
sse Order
Rel
azio
ni d
ella
cla
sse Order
•In
ord
ine
è re
lativ
o a
un
tito
lo
•Sa
da
chi i
nves
titor
e è
stat
o im
mes
so
•Pu
ò re
aliz
zare
ven
dita
o a
cqui
sto
Sto
ck
(fro
m n
as
da
q)
Ord
er
pri
ce
_ :
do
ub
le =
( p
ric
e )
am
ou
nt_
: l
on
g =
( a
mo
un
t )
valid
ity_
: u
ns
ign
ed
int
= (
va
lidit
y )
exe
cu
te()
(fro
m n
as
da
q)
0..
11
-sto
ck
_
0..
11
Inve
sto
r(f
rom
na
sd
aq
)
#in
ves
tor_
0..
11
0..
11
Bu
yOrd
er
exe
cu
te()
(fro
m n
as
da
q)
Se
llOrd
er
exe
cu
te()
(fro
m n
as
da
q)
Che
sig
nifi
ca ac
quis
tare
o v
ende
reC
he si
gni
fica
acqu
ista
re o
ven
dere
•U
n in
vest
itore
:–
deci
de la
qua
ntità
e il
prez
zo d
i azi
oni
da
ven
dere
in b
ase
alla
sua
stra
tegi
a–
crea
l’or
dine
rela
tivo
al ti
tolo
da
acq
uist
are/
ven
dere
•Si
ris
erva
di n
on sp
ende
re il
cap
itale
che
può
serv
ire
per
eseg
uire
un
acqu
isto
(altr
imen
ti va
in ro
sso…
!)•
Si r
iser
va d
i non
ven
dere
azi
oni g
ià im
pegn
ate
in u
n or
dine
di v
endi
ta (v
ende
rebb
e le
stes
se az
ioni
due
vo
lte!)
–M
ette
rlo
l’or
dine
sul m
erca
to
Com
e vi
ene
emes
so u
n or
dine
di a
cqui
sto
Com
e vi
ene
emes
so u
n or
dine
di a
cqui
sto
an
Inve
sto
r :
Inve
sto
ra
Str
ate
gy
: B
uy
Str
ate
gy
an
Ord
er
: B
uy
Ord
er
na
sd
aq
: S
toc
kM
ark
et
bu
y(s
toc
k, c
ap
ital,
bu
yPri
ce
, a
mo
un
tAva
ilab
le)
Bu
yOrd
er(
this
, s
toc
k,
pri
ce
, a
mo
un
t)
pri
ce
( )
ad
dB
uy(
an
Ord
er)
res
erv
e(c
os
t)
co
st(
)
Def
inia
mo
le st
rate
gie
Def
inia
mo
le st
rate
gie
•St
rate
gie
di a
cqui
sto:
–C
ompr
o se
il t
itolo
sta
sale
ndo
•Pe
rché
cre
do
che
co
ntin
uerà
a sa
lire
–C
ompr
o se
il t
itolo
è sc
eso
•Pe
rché
cre
do
che
poi
ris
alir
à
–C
ompr
o a
cas
o •
es.:
sim
ulo
il c
aso
in c
ui h
o a
vuto
not
izie
che
mi h
ann
o co
nvi
nto
–C
ompr
o al
tre
azio
ni d
i un
titol
o ch
e st
a pe
rden
do•
Cos
ì med
io il
pre
zzo
di a
cqui
sto,
e p
iù fa
cilm
ente
pos
so re
cupe
rare
•St
rate
gie
di v
endi
ta:
–V
endo
se h
o gu
adag
nato
•Pe
rché
cos
ì rea
lizz
o il
gua
dag
no
–V
endo
per
non
per
dere
ulte
rior
men
te (S
top-
loss
)•
Cos
ì no
n p
erd
o u
lter
iorm
ente
–V
endo
a c
aso
•es
.: si
mul
o il
cas
o in
cui
ho
bis
og
no
di s
oldi
Com
e so
no o
rgan
izza
te le
stra
tegi
eC
ome
sono
org
aniz
zate
le st
rate
gie
Ra
nd
om
Bu
yStr
ate
gy
(fro
m n
as
da
q)
Ra
nd
om
Se
llStr
ate
gy
(fro
m n
as
da
q)
Sim
ple
Bu
yStr
ate
gy
(fro
m n
as
da
q)
Sim
ple
Se
llStr
ate
gy
(fro
m n
as
da
q)
Sm
art
Bu
yStr
ate
gy
(fro
m n
as
da
q)
Sto
pL
os
sS
tra
teg
y(f
rom
na
sdaq
)
Inve
sto
r(f
rom
na
sd
aq
)
Bu
yS
tra
teg
y
bu
y()
pri
ce
()
(fro
m n
asd
aq)
-bu
yStr
ate
gy_
0..
11
0..
11
Il m
odel
lo è
este
ndib
ilea
nuov
e po
ssib
ili s
trat
egie
ch
e po
sso
defi
nire
in s
egui
to
Stra
tegi
e m
ultip
leSt
rate
gie
mul
tiple
•C
ome
gest
ire
la p
ossib
ilità
di s
egui
re p
iù
poss
ibili
str
ateg
ie a
sec
onda
del
le
circ
osta
nze?
•U
na st
rate
gia
mul
tipla
è a
nch’
essa
una
st
rate
gia
–A
stra
zio
ne!
Stra
tegi
e m
ultip
leSt
rate
gie
mul
tiple
Inve
sto
r(f
rom
na
sd
aq
)
Co
mp
os
iteB
uy
Str
ate
gy
bu
y()
ad
d()
(fro
m n
as
da
q)
Bu
yS
tra
teg
y
pri
ce
_ :
do
ub
le
bu
y()
pri
ce
()
(fro
m n
as
da
q)
0..
11
-bu
yS
tra
teg
y_
0..
11
1
1..
*
1
1..
*
str
ate
gie
s_
loo
p o
ver
sta
teg
ies
( s
)
{
lo
ng
bu
yAm
ou
nt
= s
->b
uy(
s,
ca
pita
l, p
ric
e,
am
ou
nt
);
if
( b
uyA
mo
un
t !=
0 )
{
p
ric
e_
= s
->p
ric
e()
;
retu
rn b
uyA
mo
un
t;
}
}
p
ric
e_
= 0
;
retu
rn 0
;
Que
sto m
odel
lo d
ire
lazi
one
si ch
iam
aC
omp
osit
e P
atte
rn.
E’
com
une
a m
olte
cir
cost
anze
nelle
qua
le è
nec
essa
rio
un a
lber
odi
ogg
etti
com
posi
ti
Com
e ve
ngon
o ge
stiti
gli
ordi
niC
ome
veng
ono
gest
iti g
li or
dini
na
sd
aq
: S
toc
kM
ark
et
sel
lOrd
er
: O
rde
rb
uy
Ord
er
: O
rde
rb
uye
r :
Inve
sto
rs
elle
r :
Inve
sto
r
pri
ce
( )
pri
ce
( )
if (s
ellP
ric
e <
= b
uyP
ric
e)
{ p
ric
e =
se
llPri
ce
;
. .
.}
am
ou
nt(
)
am
ou
nt(
)
exe
cu
te(p
ric
e,
am
oun
t)
exe
cu
te(p
ric
e,
am
ou
nt)
se
ll(s
toc
k, p
ric
e,
am
ou
nt)
bu
y(s
toc
k, p
ric
e,
am
ou
nt)
am
ou
nt
=
m
in(s
ellA
mo
un
t,
bu
yAm
ou
nt)
Com
e ve
ngon
o si
ncro
nizz
ate
le o
pera
zio
niC
ome
veng
ono
sinc
roni
zzat
e le
ope
razi
oni
•Pe
r si
mul
are
ogni
“to
rnat
a” d
i acq
uist
i e
ven
dite
:–
i div
ersi
in
vest
itori
devo
no s
egui
re le
pro
prie
st
rate
gie
e dec
ider
e gl
i or
dini
–il
mer
cato
dev
e ge
stir
e gl
i or
dini
Ges
tione
sim
ulat
a de
l “m
ultit
aski
ng ”
Ges
tione
sim
ulat
a de
l “m
ultit
aski
ng ”
Ta
sk
do
Ta
sk(
) :
void
(fro
m n
asd
aq)
Ta
skM
an
ag
er
do
Ta
sk(
) :
void
ad
d(t
as
k :
Ta
sk*
) :
void
(fro
m n
as
da
q)
10
..*
10
..*
-ta
sks
_
Inve
sto
r(f
rom
na
sd
aq
)
do
Ta
sk(
) :
void
Sto
ckM
ark
et
(fro
m n
as
da
q)
do
Ta
sk
() :
vo
id
Com
e fu
nzio
na il
“m
ultit
aski
ng”
Com
e fu
nzio
na il
“m
ultit
aski
ng”
ma
in p
rog
ram
ma
na
ge
r :
Ta
sk
Ma
na
ge
rin
ves
tor3
:
Inve
sto
rin
ves
tor3
:
Inve
sto
rn
as
da
q :
Sto
ck
Ma
rke
tin
ves
tor1
:
Inve
sto
r
do
Ta
sk(
)d
oT
as
k( )
do
Ta
sk(
)d
oT
as
k( )
do
Ta
sk(
)d
oT
as
k( )
do
Ta
sk(
)d
oT
as
k( )
do
Ta
sk(
)d
oT
as
k( )
do
Ta
sk(
)d
oT
as
k( )
do
Ta
sk(
)d
oT
as
k( )
do
Ta
sk(
)d
oT
as
k( )
Def
iniz
ione
del
le im
plem
enta
zion
iD
efin
izio
ne d
elle
impl
emen
tazi
oni
#include "Task.h"
#include <map>
class Stock;
class BuyStrategy;
class StockMarket;
class Investor
: public Task
{ public:
Investor( double
capital, StockMarket* );
~Investor();
void setBuyStrategy( BuyStrategy
* buy
);
void doTask();
void print();
bool buy
( Stock*, double
price, long
amount
);
bool
sell( Stock*, double
price, long
amount
);
void reserve( double
);
void release( double
);
void reserve( Stock *, long );
void release( Stock *, long );
long amountAvailable( Stock * ) const;
private:
double
capital_;
double reservedCapital_;
StockMarket
* market_;
BuyStrategy
* buyStrategy_;
struct stockInfo
{
stockInfo() : buyPrice(0), amount(0),
reserved(0) {}
double buyPrice;
long amount;
long reserved;
long available() const
{ return
amount
-reserved; }
};
map<Stock*, stockInfo> portfolio_;
double buyPrice( Stock * ) const;
long amount( Stock * ) const;
long amountAvailable( Stock * ) const;
};
Impl
emen
tazi
one
met
odi
Impl
emen
tazi
one
met
odi
void Investor::doTask()
{
if
( market_ == 0 ) return;
vector<Stock*>::const_iterator
s;
for( s = market_->begin(); s != market_->end(); s++ )
{
Stock * stock = *s;
double buyPrice
= Investor::buyPrice( stock );
long amountAvailable
= Investor::amountAvailable( stock );
double capitalAvailable
= capital_-
reservedCapital_;
long buyAmount
= buyStrategy_->buy( stock, capitalAvailable, buyPrice, amountAvailable
);
double
price = buyStrategy_->price();
if
( buyAmount
< 0 )
{
// cout
<< "sell order: " << -buyAmount
<< " " << stock->symbol()
//
<< " at " << price << endl;
market_->addSell( new
SellOrder(
this, stock, price, -buyAmount
) );
} else
if
(buyAmount
> 0 )
{
//
cout
<< "buy order: " <<
buyAmount
<< " " << stock->symbol()
//
<< " at " << price <<
endl;
market_->addBuy( new
BuyOrder(this, stock, price,
buyAmount
) );
}
}
// print();
}
Met
tere
tutto
insi
eme
Met
tere
tutto
insi
eme
•Is
tanz
iare
i ti
toli
e il
mer
cato
•Is
tanz
iare
gli i
nves
titor
i
•A
sseg
nare
le st
rate
gie
–i p
aram
etri
so
no
det
erm
inat
i in
bas
e a n
umer
i ps
eudo
casu
ali
•C
onne
ttere
i di
vers
i og
getti
•…
far
par
tire
il m
ultit
aski
ng!
Il m
ain
pro
gram
(1)
Il m
ain
pro
gram
(1)
StockMarket nasdaq;
Stock msft( "MSoft", 4.0);
nasdaq.add( &msft
);
msft.setPrice( 5.0 );
vector<Investor> investors;
const unsigned int numberOfInvestors
= 200;
for( int
k = 0; k < numberOfInvestors; k++ )
investors.push_back( Investor( 100000,
&nasdaq
) );
const unsigned int initialBuyers
= 100;
for
( int
j = 0; j < initialBuyers; j ++ )
{
investors[j].buy( &msft, msft.price(),
20000 );
} vector<Investor>::iterator
i
for( i = investors.begin(); i !=
investors.end(); i++ )
i->print();
for( vector<Investor>::iterator
i =
investors.begin(); i != investors.end();
i++ )
{
CompositeBuyStrategy
* strategy
=
new CompositeBuyStrategy;
strategy->add( new StopLossStrategy
( 0.20 + drand48()*0.30 ) );
strategy->add( new RandomBuyStrategy
( 0.05 + drand48()*0.15, 0.05 +
drand48()*0.015, 0.02 + drand48()*0.48 )
);
strategy->add( new RandomSellStrategy
( 0.002 + drand48()*0.003, 0.05 +
drand48()*0.015, 0.02 + drand48()*0.48 )
);
strategy->add( new SmartBuyStrategy
( 3, 0.010 + drand48()*0.020, 0.3 +
drand48()*0.7 ) );
strategy->add( new SimpleBuyStrategy
( 1, 0.005 + drand48()*0.015, 0.3 +
drand48()*0.7 ) );
strategy->add( new SimpleSellStrategy
( 0.1 + drand48()*0.20 ) );
i->setBuyStrategy( strategy
);
}
Il m
ain
pro
gram
(2)
Il m
ain
pro
gram
(2)
TaskManager
manager;
for( vector<Investor>::iterator
i = investors.begin();
i != investors.end(); i++ )
manager.add( &*i );
manager.add( &nasdaq
);
const unsigned int numberOfTasks
= numberOfInvestors
+ 1;
const unsigned int numberOfTransactions
= 5000;
const unsigned
long iterations
= (unsigned
long)( numberOfTasks
) *
(unsigned
long)(numberOfTransactions);
for( unsigned
long i = 0; i < iterations
; i++ )
manager.doTask();
for( vector<Investor>::iterator
i = investors.begin(); i !=
investors.end(); i++ )
i->print();
Ris
ulta
ti…R
isul
tati…
0123456789
110
0120
0130
0140
01
spec
ulaz
ione
crol
lo
Tem
po (
gio
rni?
)
Quo
tazi
one
($?,
���
Top Related