S Picker
S Picker
ll
ecti
o nsIn t
e r
face Strea
ms Of
fi
zi
el
leNo rmd er Soft
wa reQu al
it
ät (
I
SO2 510) Pr
inz
ipi
en Ar
t
envonTest-
Doubles:
-Exist
e nz-An f
rag ens chne
ll
stenHash-Dat
enst
ru
ktu
re-S
n.t r
e aminterme diat
eOp er
a t
ions: ▪Ka nnCo den i
ch ti
mme r perf
ekts e
inu ndall
eserf
ü l
le
n? -DIP–De pe ndenc yInversionPrinci
pl
e -Dummy :
EinObjekt
,dasnurübergebenwir
d,abe
rnic
htver
wendetwi
rd.
Z.B.n
ullo
derne
wDu mmyCust
ome r
(
).Sob
a l
dMeth
odenauf
ger
ufe
nwer
den,
is
teskei
nDu
mmymehr
.
-ret
ainAll(Sc hnit
t)&r emoveAll ▪limit(
longn ) ◦Ne in:Wiede r
s pr
uc hz wischenPe rf
ormanzu ndKo mpat
ibi
l
it
ät
, ▪High-Lev el
-Mo du l
es ol
lenn i
chtdir
ektvo nkon k
ret
enKl a
s senabhän
gen -Stub
:Ers
etzt
einOb j
ektdur
cheinfestde
fi
ni
ert
esVerhal
t
en(z.
[Link](
)->Loc
al
Time.o
f(
..
.
))
.Gib
timmerden
selb
enWe rt
zur
ück.
Kei
nec
hte
sVerh
alt
en.
Wir
dimT
est
ni
cht
übe
rpr
üf
t.
-ArrayList
sv e r
we nd enArrays ▪s kip(
longn ) Sc hnell
b edeu t
etv i
elL ei
stungsanspruch,wasn i
chtsokompat
i
beli
st
. ▪St at
tde ssenü be rInt
e r
facesa bs
trah
ieren -Mock:Wi
ee i
nStub,aberzus
ätzl
ichwir
ddasVe r
hal
t
enimT es
tüberp
rüf
t
.Spei
cher
tz.
[Link]
leAuf
ru
fe.
WirdimAsse
rt
-Schr
i
ttv
erwend
et.
▪s ch nel
lesl esen&s pei
chernamENDE ▪t akeWh il
e/dropWh i
l
e(Predicat
ep ) ▪Wa rtbar
keiti
stwi cht
igb eiSy st
eme nd i
elangeb entu
tzwerden ▪→ En t
k oppelt&a u st
au schbar -Merkr
egel
:
▪l angsa me ss peichernanb el
ieb
igenSt
ell
en ▪d ist
inct
()(entferntdupl
icate) (Wo chentest
-Sy ste
m) undn ichtwic
h t
igbeiSystemend i
eei
nma l
kur
z -L CHC–L owCo up l
ing,HighCo he
s i
on ▪Du mmy→ n urfürKonst
ruk
tor/
Paramete
rnöti
g
Qu eueIn t
e r
fac e(FIFO) boxe d(
) (
kon vert
iertpr
imit
iveino b j
ekt
e) geb r
a u
ch twerde n(Ko nvert
e r
). Niedri
g eKo pp l
un g:Ko mp onent
enmö g l
ichstunabhängi
g St
ub→ k ont
ro
ll
ier
teEinga
befür di
eMe t
hod
e
▪o ff
e r(Eleme inf
üg en) ▪s ort
e d(
) (
sorti
e r
tn achstanda r
dCo mp ar
a t
or) Smel
l
s( Mü s
s ennicht i
mme rbeh obenwe rden,sol
l
tenwe nn:Le
sbar
kei
t, ▪Ho heKo häsi
o n:All
e sind erKomp o
n entege hör
tthemati
s c
hz u
sammen ▪Mo ck→ kontr
oll
i
ert
eEingabeu ndgl
eic
hzei
ti
gÜberpr
üf
ungimAs s
ert
▪p e ek(An g uckend esn ächs
tenElem) ▪s ort
e d(
Co mp a r
atorc) Ver
st
änd l
ic
hk e
it,
Wa rt
ba r
ke i
t,Erweiter
ba r
keitd
runt
e rl
eidet
) ▪→ Ve r
s t
ä ndl
ich,testbar,änderbar -Cust
omerReposi
t
o r
yrepo=mo ck(Cust
omerReposi
t
ory.
cl
ass
);
▪p o l
l(En t
ferne nde snächstenEl
em) ▪ma p(a->In t
e ger.
p ar
seInt
(a)) -MehrereVe r
a n
two rt
li
chk ei
ten(SRP- Ve r
stoß) -SLAP–Si n gl
eL ay erofAb str
acti
on -when(
repo.
get
NextCust
ome r
()
).
thenRetur
n(
"a@[Link]"
,"b
@c .
de")
;
-Li
n kedListsd opp el
teVe r
knüpfung ▪f l
atma p()/
/UmSt reama usSt reamsz uv erhi
n der
n ▪Kl asse/
Me thod ema ch tzuv i
elaufe i
nma l
(z.
B. Logi
k+Da r
stel
l
ung) ▪Me t
ho dee n t
hältnu rei
n eAb st
rakt
i
ons ebene -when(
repo.
i
sDone()
).
thenRet
urn(f
als
e,fal
se
,tr
ue);
▪Re fer
e nza u fdasletzt
eEleme nt ▪ma pT oDoub l
e /
ma pToInt ▪Sc h wertest
ba r,schlechterwe i
ter
ba r ▪→ Ke i
nMi schma scha usk onkr
e t
er&a b s
tr
a kt
erLogik -I
mAs ser
tSchr
it
t(Überpr
üfe
no bMe t
hodevomMo ckauf
geru
fenwurde
):
▪o ff
e rFi
rst&o ff
erLa s
t..
.vonDe queIn
t. ◦Wi chti
g:Umz ugr
if
fau fsowa swi e
: ▪L :Au f
tei
lenink l
arg etr
e nnt
eAu f
gab en ▪Au f
r
u f
el ogischg ruppieren(Hil
fsmet
h ode n
!) ▪v er
i
fy(
mail
Sender)
.se
ndMa i
l
("a@b .
de")
; //gen
au1x
Stack(L I
F O) a ver
a ge,e t
cz ugri
ffz
uh aben Mysteri
öseNa me n I
HP–I nf
o rma ti
onHi ding ver
i
fy(
mail
Sender,t
i
me s(
2)
).
s endMail
(
..
.)
; //2
x
▪p u sh( drau fl
e gen) ▪f i
lt
er(
Pr edi
ca t
ep ) ▪Na mens agenn i
cht,wa sg ema chtwir
d ▪Int
erneDe tai
lsv erst
ecke n, ▪v er
i
fy(
mail
Sender,ne
ver(
))
.s
e ndMail
(.
.
.)
; //
0x
▪p o p(he runternehme n) ▪r educe(0,(a, e)->a+e );=2 5 ▪Kü rzel,generi
s chod erirr
eführend nurüb er kl
ar defi
niert
eSc h ni
tt
st
e l
l
enz ugäng l
ic
h ▪v er
i
fy(
mail
Sender,at
Least
Once())
.sen
dMail
(
...
)
; / /min
d.1x
-Set (
Je desEl eme i
n mal/kei
ned oppel
t
) -St r
e amt er
min alOp erat
ions: ▪L :Au ssagekräft
ige,spre chendeNa me n,f
ürMe nschen,ni
cht
Compil
er ▪→ Än derun genmö gli
ch,ohn eandereKl a
ss enzub r
echen ▪v er
i
fy(
mail
Sender,at
Most(
3)
).sendMai
l(
..
.
); / /ma x
.3x
▪k eineRe i
h enfolge ▪t oLi
st()
/to
Ar r
a y() -LongMe thod ▪Attr
i
b utek apseln+Z ugri
ffkontr
oll
i
eren ▪v er
i
fy(
mock)
.sendMail
(
a n
yStr
ing()
); / /bel
i
ebi
gerStr
i
ng≠n ul
l
▪L inked Ha shSe tha t
Re i
henfol
ge ▪mi n/ma x(
Co mp arat
orc) ▪Me t
h odema ch tzuv i
ela ufei
nma l -SRP–Si ng l
eRe spon si
bil
i
tyPr i
nci
ple ▪v er
i
fy(
mock)
.sendMail
(
a n
y()
); //
bel
iebi
gerWert
in
kl.n
ull
▪n e wT ree Se t
<> (
Wo ert
e r
buch::
compar
e); ▪c oun t
()
/sum( )/
ave r
age() ▪Sc h werzuv erstehen/testen ▪JedeKo mp one nteha tnureinenGrun dz urÄnderung ▪v er
i
fy(
mock)
.sendMail
(
e q
("
abc@e xample.
com")
);
//ex
akt
erWe r
t
MapInterf
ac e anyMa tch/
a l
lMa tch/
none Ma t
ch(Pr ed
icatep) L:Inklei
ne r
e,logischg ruppier
teMe t
hodena u
ftei
l
e n → Ei neVe rantwo r
tl
ichkeitpr
oKlasse/Fu nk
tion I
nOrderor
der=inOrder
(mock);
-get/
ge t
Or De fault ▪f i
ndF i
rst
()
/fi
nd Any (
) -LongPa rame t
er List ▪Au f
t
ren nen ,wen nme hr
e r
ePe rsonenÄn derungswü n
s c
h ehätt
en ▪o r
der.
ver
if
y(
mo ck)
.se
ndMa i
l
("a@b .
de"
);
-put/
pu t
All -St r
e amCo l
l
ec t
o r
s: ▪Z uv ie
lePa r
a me te
r →u nübersi
chtl
ic
h -DRY–Do n ’
tRe pea tYou r
se l
f ▪o r
der.
ver
if
y(
mo ck)
.se
ndMa i
l
("b@c .
de"
);
-putI
fAb sent(We nnsu nt
er demSc h
lüss
elni
xgi
bt) ▪Ma p<Nu mb erState,Long>ma p= ▪Vi el
eg l
e i
cheT yp en→ f ehl
eranfäl
l
ig ▪Ke i
neDo pplung enimCo de(L o
g i
k,
Stru kt
ur,Wissen)
-remo ve/cl
e ar i
n t
ege r
Stream. coll
ect( ▪L :Pa r
ame terzu samme nfassen([Link] j
ekt
),evt
[Link]
denauft
ei
l
en ▪→ Än derun gena ne inerStel
le,weni
g erFeh l
er
-keySe t
/value s Co l
l
e ct
o r
[Link](i->(i%2 == 0?
Nu mb erStat
[Link]: Numb erSt
ate.
ODD), -SLAP( Singl
eL ay erofAb stract
ionPrinci
ple) ▪Wi e
d erverwe ndba r
eMe thoden/
Klassenn utzen
Gr
adle Co l
l
e ct
o r
[Link] t
ing()
))
;o derda: ▪Ab s t
rakt
es&k on k
retesMi schma sch -ISP–In t
e r
fac eSe grega t
i
o nPrinci
ple
.
/gradlewr un- -args="ar
g1a r
gs 2
" Co ll
ectors.
a veragi
ngDo uble(Studi
::get
Ue bungspu nkt
e) L:EineMe t
hod eso l
lt
en u rei
neAb s t
r
a kt
io
nseben eent
hal
ten Int
erf
a cesn ur sog roßwi enöti
g,nic
ht größer
-.
/gradlewd istZip(gez i
ppt
eVe rsi
ondesProgr
ams/DT
ie
s
ts
rt
i
bi
n
ug
ti
on) -Dupli
ca t
edCo de/ DRY- Ve r
stoß ▪→ Nu rd asd eklar
ieren,wa swirkl
i
chg ebrauchtwir
d
-buil
[Link]: -Kö n nenRe gress i
onv erhi
nde r
n&d o ku
me n t
i
eren ▪Gl eicherCod ea nme hrerenSte l
l
enfü rgl
ei
chenKo nte
xt ▪So n
s t
:Kl assenmü ssenu nnö t
ig
eMe tho denimplemen t
i
e r
en
▪p lugins{ i
d'java'id'appl
icat
i
o n
'} -Kö n nenn i
chtbe we i
send asse i
nPr o gr
ammf ehler
fr
eiist ▪Au fwe ndi
g&f e hl
eran f
ä l
l
igb eiÄnde r
ungen -LSP–L i
sk ovSu b st
it
u t
i
o nPr i
nci
p l
e
▪a p pl
icati
o n{ma inClassName=' de.
pro
pra.
.
.} -T
' estsmü ssene i
nfacheralsPr oduktiv
codes ei
n ,l
inearsein, ▪L :Wi eder
v e
rwe ndb areMe t
hod en/
Klassenextr
ah i
eren ▪EineSu b kl
a ssemu ssimme r al
sErsatzfürdieObe r
klas
s efunk
ti
oni
er
en
▪r epo si
tori
e s{ma ve n
Ce nt
ral
()} ma xeinKo nzep tproT estprüf
e nu ndVe r
h al
tens t
att -RefusedBe ques t ▪→ z .B. Apfelex t
en dsF r
u c
h t→ü berallwoF ruch
t geht
, Gi
t
-Bef
ehl
e
▪d e pend encies{imp l
eme nt
ati
on'com.
..
.'
} Impleme nt
ier
u ngs det
ail
sp rüf
en . ▪Su b kl
asse„lehn t
“ge erbteMe thodena b mu ssa uchAp f
e lf
un kt
ionier
en -gi
tcl
one
Apa cheF o unda t
iong ut
eQu ell
efürdepe
ndenc
ies
/l
i
barJ
i
eU
snitTests:Arran ge,Act,Assert. Üb ers
ch r
eibtmitEx cep t
ion→ z e
igtschle
chtesDe si
gn Ke i
nthro wn ewUn su pport
edOp er
ati
on Excep t
i
on()
! -gi
ti
nit
Gener
ischeMe t
ho den ▪T DD: Wirsch r
e i
benT estsb evor wi
rPro dukt
ivcodes chr
ei
b en ▪L :Ve r
erbungd ur
chKo mp osi
ti
o nersetzen -ISP&L SPg eme i
n sam( Re f
usedBe quest) -gi
tst
atu
s
-publi
cc l
a ssT ree< Te xt
endsCo mparabl
e<T
>>{} ◦1 :Schreibee i
n enTes tdernich te
x t
rafehl
s chl
ägt(RED) . -Lar
g eClass ▪Ve r
erbteMe t
h oden ,di
en ichtgenut
ztwe rden=L SP- Verst
oß ▪Z ei
gtdenak t
uel
l
enZ u
standdesRep o
s:We l
cheDate
iensi
ndgeändert
,wel
chesin
dgesta
gedode
runt
rac
ked?
-publi
cs tati
c< T >L i
st<T>a sL
ist
(T[
]arr
ay){
} ◦2 :Schreibeg eradeg enugPr o dukt
iv
c oded amitderTes t
d u
rchläuf
t(
GREEN) ▪Kl asseistzug roß(SRP- Verst
o ß) ▪Mü sseni mp l
eme nt
iert
,ab erni
chtgebrau c
ht werd
e n=I SP-Vers
toß -gi
tadd<Datei
>
-Vorgeferti
gtef unkti
on al
eInt
erf
a c
es: ▪3 :Wi rverbessernu nserenCo deo hneF unkti
onali
tä
tz uverä
ndern(REFACTOR). ▪L :Inklei
ne r
eKl assenmi tkl
arenZ ust
ä ndi
gkei
tena u
ft
eil
en ▪Lösun g:Sc hnit
tstel
lenü berar
b e
it
eno der Fügt
Än der
u n
genzurStagi
ngAreah i
nz
u–wi r
db ei
mnä c
hst
enCo mmitüber
nomme n
.
▪Co nsu me r:a→ v oi
d ,
BiCon s
ume r
:(a
,b)→v o
id-Se it
ene f
fekt
e: Bs pw:Än derungd esZ ustandse i
neOb j
ekts/
I
n s
tanzvari
abl
eetc.
, -Pri
miti
veOb s e
ss i
o n Ve r
erbu ngv erme i
d en(Ko mpo s
it
ion
!) -gi
tcommit-
m" Na c
hri
cht
"
▪F uncti
o n:a→ b , Bi
Fun c
ti
on(a,b)→c Ausgab ea ufder Kon s
o l
e,Ab schi
c kene i
nerMa il… ▪Ve rwe ndungp ri
mitiverT ypens t
attFachobj
ekte -OCP–Op e n/ClosedPr inci
ple ▪Erstel
l
teinenneuenCommi tmi
tdengestagt
enÄnder
ungenu n
de i
nerNachr
ich
t.
Su ppli
e r
: void→ a PureF unkti
on: Au sschl
i
e ßl
ichv onPa rame t
erna bhängig, L:EigeneT ype n(z.B. I
BAN) ma c
he nCo desi
che r
er&a us
sagek
räf
ti
ger Of fenfü rErwe i
terung ,geschl
o s
senfür Ände r
ungen -gi
tpush
▪Pr e di
ca t
e :a→ b o o
lean,Bi
Predi
cate:
(a,
b)→b ool
eg
al
ne
icheEi ngabe=g lei
cheAu s gabe ,I
MMER! -DataCl u
mp s ▪→ Ne ueF unkt
ion enh i
nzufügen,ohneb estehendenCo dez uänd
ern ▪L ädt
deinelokal
enCommitsaufei
nRe mote-
Reposi
to
ry(z.
[Link]
Hu b
).
▪Un aryOp e r
a t
o r
:a→ a ,Bi
na r
yOpera
tor
:(
a,a→ aKe
) ineSe it
[Link]
ac herzute st
en . ▪Da t
e n
,d i
ezu samme ng ehören,werdeng et
renntübergeb
en/g
enut
zt ▪[Link] r
c hVe rerbung ,I
nterf
aces,Even t
s -gi
tl
og
-ei
n t
rag→ e i
ntragAu sgeben(ei
nt
rag)=Bei
spi
el
::
ei
ntr
agAusg▫F
ebeI
nRST( fast,
independ ent,r
e pro
d ucabl
e, sel
f
-eva l
uat
ing,t
ime l
y) ▪L :ZuOb j
ekteng ruppieren(z.B. Tei
lnehmerstat
tNa me+Pu nk
te) -SOL I
D-Pr i
n zi
pien( Me r
ksa t
z) ▪Z ei
gtdi
eCo mmit-
Hist
or
ie(Commit-
IDs,Aut
oren,
Nachri
cht
en,Zei
t
s t
empel)
.
-Lamb daAu sd r
ü ckewof unkt
ional
esInt
er
fac
eerwart
etwir
d. -i n
d epe ndentme int
,obd i
etestsvone i
na n
de runabhängigs i
nd. -Div
e r
ge ntChang e ▪Singl
eRe s ponsibi
li
ty gi
tbl
ame< Da t
ei
>
St
r
ea ms ▫Wi rtesten :Randfäll
e,Gr enzen ▪Kl assewirda usv erschiedenenGr ü n
d engeändert ▪Op en/Close d ▪Z ei
gtf
ürjedeZeil
eei
nerDa t
ei,
welc
h e
rCo mmits
iezul
etz
tgeänder
that–nüt
zli
chzur
Fehl
ersu
che
.
-VonL ist
e :integers.
s t
ream() ▫T estswe r
de nmit@T estan not
ier
t ▪Z eigtme hre
reVe r
a nt
wo r
tungen ▪Lisk
o vSu b st
it
ution -gi
tdi
ff
VonAr ray :[Link]
ream(int
Array
) Testd eakti
vieren:@Di sabled("
T estvorübergehendd eakt
ivi
ert
") L:Ve r
an t
wortl
ichkeit
e ntrennen Int
erf
a ceSe gr
e gati
on ▪Z ei
gtUnter
schi
edezwisch
e nArbe
it
sver
z e
ich
nis
,Stag
ingAreaundlet
zt
enCo mmit
s.
-VonSu ppli
e r:[Link]
e (
Math:
:r
ando
m) Da dur
c hwi r
dT estals„Üb ersprungen“(Sk i
pped)a n
g eze
igt. -Mess ageCh ai
n ▪De pend encyIn versi
on -gi
tchec
kout<c o
mmi t
-
id>
-Vone inze l
ne m: Str
e [Link]
(t
estObj
ekt)
; ▫T estDis pl
a ynamens e t
zten: @DisplayNa me("Meinbesond ere
rTest
name "
) ▪L ang erMe t
hod enau f
ruf:[Link]
B( )
.
ge t
C().
ma chWa s(
) -LoD–L awo fDe me t
e r ▪We chsel
tzue i
nemfrüh
erenCo mmit(
De t
ache
dHe ad!
Än d
erungengehenbei
mZ ur
ücks
pri
ngenv
erl
or
en,
wennsi
eni
cht
gespe
ic
her
twer
den)
.
-Od er
: I
ntStrea [Link] e
(0,1000) Da dur
c himBe r
ichtnichtde rMe t
hoden namens on d
e r
nd erDPNa me. ▪Ve rlet
zung„L awo f De me t
er“/
LOD ▪„Spri
chn urmitd einend i
rekt
e nFreunden “ -gi
tres
et
-Od er
: Str
e am. i
terat
e (0
,x->x+1 ) ▫T estsü ber gr
ad l
elaufenlas sen:.
/gradl
e wche ck(Al
les)oder .
/
gradl
ewtest(
NurTes
ts
) ▪L :Direkt
zu g
ri
ffev erei
n f
ac hen→ s tat
t get
Produkt
().
get
Prei
s()→g e
tPr
ei
s (
)▪→ Me thod ed arfnurau fdi
rekterr
ei
ch bareOb je
ktezugreif
en MachtCommi t
soderSt
agingrück
gängi
g .
▫As sertJ-Asse r
ti
ons: -ShotgunSu rgery (
AUCHNI CHTÜBERUMWEGE) -gi
trev
ert<commit-
i
d>
-a ssertTha t
(.
..
) ▪Ei neklei
neÄn derunge r
forder
t Änderungenanv i
e l
enStel
l
en ▪Ke i
na .
g etB().
ge t
C().ma chWa s(
) ▪Ma chtei
nena l
te
nCo mmitrück
gängi
g,i
n d
eme i
nn e
uerCommiterst
el
ltwi
rd,
d e
rdi
eÄn d
erun
genneu
tr
al
is
ier
t
.Si
ch
erf
ürgep
usht
eCommit
s.
.i
s Equ al
To(x),.
isNo t
Eq ual
T o(x)
,.i
sNu l
l
(),.
isNotNull
(
),.i
sIns
tanc
eOf(Kl
asse.
cl
as
s), Z eigtschl
e c
h t
eVe r
teil
u ngd erLogi
k Me t
ho de→ Ob jekt→ Me thode -gi
trm<Da t
ei
>
▪. i
s True(),
.i
sFa l
se(), ▪L :Ve r
an t
wortl
ichkeit
e nb ündeln -Pri
nzipi
ens i
ndL eitl
i
n i
en ,
k ei
neGe setz
e ▪En t
fer
ntei
n eDatei
ausdemAr bei
t
sverzei
chni
sundausdemn ächst
enCommi t
.
▪. i
s Zero(),
.i
sPo si
ti
ve (
),.is
Ne gati
ve()
, .
i
sGre at
erThan(x)
, -Featur
eEn v
y ▪→ Imme rabwä g en,nichtbl
inda n
we nde n -gi
trm--
cached< Dat
ei>
.i
s LessT han(
x )
,.i
sBe tween (
a,b),.
isCloseTo(1.
0 ,Of
fset.o
ff
set
(0.
05)
), ▪Kl assen ut
ztstän di
gMe thoden/Fel
d erei
nerande r
en ▪En t
fer
ntei
n eDatei
nurausd e
mGi t
-Tr
acki
ng,aberni
chta
usd e
mAr bei
tsv
erzei
chn
is
.Nütz
li
ch
,wennmanei
neDat
ein
acht
r
ägl
ic
hign
ori
er
enwi
ll
.
▪. i
s Emp ty(
),.
isBlank()
, .st
art
sWi t
h("
x "
),.
en dsWit
h (
"y"
),.
c ont
ai
ns(
"z")
, ▪Z eigtf
alscheKl assen zuordnung
▪. ha sSize(
n),.
c ontai
ns (
a ,b
),.cont
a i
nsExa ct
ly(
a,b),.
con t
ai
nsExact
ly
InAnyOr
der
(.
..
)
,▪L :Lo g
ikda hi
nv erschieb en,wod i
eDa t
ensind(Da t
en→ Ve r
hal
te
n)
.do esNo t
Co nt
ain(x)
,.d oesNotHave Dupl
icates(
),.
a l
l
Ma tch(
x->.
..
),
.co nt
ainsKey(k),.
c ontain
sEn t
ry(
k,v ),
.doesNo t
Con t
ai
n Key(
k)