SlideShare a Scribd company logo
1 of 91
HHiigghh--QQuuaalliittyy PPrrooggrraammmmiinngg 
CCooddee CCoonnssttrruuccttiioonn –– PPaarrtt IIII 
RReevveeaalliinngg tthhee SSeeccrreettss ooff SSeellff--DDooccuummeennttiinngg CCooddee 
SSvveettlliinn NNaakkoovv 
TTeelleerriikk CCoorrppoorraattiioonn 
wwwwww..tteelleerriikk..ccoomm 
FFoorr CC## DDeevveellooppeerrss
TTaabbllee ooff CCoonntteennttss 
HHiigghh--QQuuaalliittyy MMeetthhooddss 
CCoohheessiioonn aanndd CCoouupplliinngg 
UUssiinngg VVaarriiaabblleess CCoorrrreeccttllyy 
SSccooppee,, SSppaann,, LLiiffeettiimmee 
UUssiinngg EExxpprreessssiioonnss CCoorrrreeccttllyy 
UUssiinngg CCoonnssttaannttss 
UUssiinngg CCoonnttrrooll--FFllooww LLooggiicc CCoorrrreeccttllyy 
CCoonnddiittiioonnaall SSttaatteemmeennttss 
LLooooppss 
2
TTaabbllee ooff CCoonntteennttss ((22)) 
DDeeffeennssiivvee PPrrooggrraammmmiinngg 
AAsssseerrttiioonnss aanndd EExxcceeppttiioonnss 
 CCoommmmeennttss aanndd DDooccuummeennttaattiioonn 
SSeellff--DDooccuummeennttiinngg CCooddee 
 CCooddee RReeffaaccttoorriinngg 
IImmpprroovviinngg tthhee QQuuaalliittyy ooff 
EExxiissttiinngg CCooddee 
3
HHiigghh--QQuuaalliittyy MMeetthhooddss 
HHooww ttoo DDeessiiggnn aanndd IImmpplleemmeenntt HHiigghh--QQuuaalliittyy 
MMeetthhooddss?? UUnnddeerrssttaannddiinngg CCoohheessiioonn aanndd CCoouupplliinngg
WWhhyy WWee NNeeeedd MMeetthhooddss?? 
MMeetthhooddss aarree iimmppoorrttaanntt iinn 
ssooffttwwaarree ddeevveellooppmmeenntt 
RReedduuccee ccoommpplleexxiittyy 
DDiivviiddee aanndd ccoonnqquueerr:: ccoommpplleexx pprroobblleemmss ccaann bbee 
sspplliitt iinnttoo ccoommppoossiittiioonn ooff sseevveerraall ssiimmppllee oonneess 
IImmpprroovvee ccooddee rreeaaddaabbiilliittyy 
SSmmaallll mmeetthhooddss wwiitthh ggoooodd mmeetthhoodd nnaammeess mmaakkee 
tthhee ccooddee sseellff--ddooccuummeennttiinngg 
AAvvooiidd dduupplliiccaattiinngg ccooddee 
DDuupplliiccaattiinngg ccooddee iiss hhaarrdd ttoo mmaaiinnttaaiinn 
5
WWhhyy WWee NNeeeedd MMeetthhooddss?? ((22)) 
MMeetthhooddss ssiimmpplliiffyy ssooffttwwaarree ddeevveellooppmmeenntt 
HHiiddee iimmpplleemmeennttaattiioonn ddeettaaiillss 
CCoommpplleexx llooggiicc iiss eennccaappssuullaatteedd aanndd hhiiddddeenn bbeehhiinndd 
aa ssiimmppllee iinntteerrffaaccee 
AAllggoorriitthhmmss aanndd ddaattaa ssttrruuccttuurreess aarree hhiiddddeenn aanndd 
ccaann bbee ttrraannssppaarreennttllyy rreeppllaacceedd llaatteerr 
IInnccrreeaassee tthhee lleevveell ooff aabbssttrraaccttiioonn 
MMeetthhooddss aaddddrreessss tthhee bbuussiinneessss pprroobblleemm,, nnoott tthhee 
tteecchhnniiccaall iimmpplleemmeennttaattiioonn:: 
6 
BBaannkk..aaccccoouunnttss[[ccuussttoommeerr]]..ddeeppoossiitt((550000));;
UUssiinngg MMeetthhooddss:: FFuunnddaammeennttaallss 
 FFuunnddaammeennttaall pprriinncciippllee ooff ccoorrrreecctt mmeetthhoodd uussaaggee:: 
MMeetthhooddss sshhoouulldd ddoo eexxaaccttllyy wwhhaatt tthheeiirr nnaammeess ssaayy 
NNootthhiinngg lleessss 
NNootthhiinngg mmoorree 
 IInn ccaassee ooff iinnccoorrrreecctt iinnppuutt oorr iinnccoorrrreecctt 
pprreeccoonnddiittiioonnss,, aann eerrrroorr sshhoouulldd bbee iinnddiiccaatteedd 
7 
AA mmeetthhoodd sshhoouulldd ddoo wwhhaatt iittss nnaammee ssaayyss oorr 
sshhoouulldd iinnddiiccaattee aann eerrrroorr.. AAnnyy ootthheerr 
bbeehhaavviioouurr iiss iinnccoorrrreecctt!!
GGoooodd MMeetthhooddss –– EExxaammpplleess 
8 
lloonngg SSuumm((iinntt[[]] eelleemmeennttss)) 
{{ 
lloonngg ssuumm == 00;; 
ffoorreeaacchh ((iinntt eelleemmeenntt iinn eelleemmeennttss)) 
{{ 
ssuumm == ssuumm ++ eelleemmeenntt;; 
}} 
rreettuurrnn ssuumm;; 
}} 
ddoouubbllee CCaallccTTrriiaanngglleeAArreeaa((ddoouubbllee aa,, ddoouubbllee bb,, ddoouubbllee cc)) 
{{ 
iiff ((aa <<== 00 |||| bb <<== 00 |||| cc <<== 00)) 
{{ 
tthhrrooww nneeww AArrgguummeennttEExxcceeppttiioonn((""SSiiddeess sshhoouulldd bbee ppoossiittiivvee..""));; 
}} 
ddoouubbllee ss == ((aa ++ bb ++ cc)) // 22;; 
ddoouubbllee aarreeaa == MMaatthh..SSqqrrtt((ss ** ((ss -- aa)) ** ((ss -- bb)) ** ((ss -- cc))));; 
rreettuurrnn aarreeaa;; 
}}
SSyymmppttoommss ooff WWrroonngg MMeetthhooddss 
MMeetthhoodd tthhaatt ddooeess ssoommeetthhiinngg ddiiffffeerreenntt tthhaann iittss 
nnaammee,, iiss wwrroonngg ffoorr aatt lleeaasstt oonnee ooff tthheessee rreeaassoonnss:: 
 TThhee mmeetthhoodd ssoommeettiimmeess rreettuurrnnss iinnccoorrrreecctt rreessuulltt  bbuugg 
 TThhee mmeetthhoodd rreettuurrnnss iinnccoorrrreecctt oouuttppuutt wwhheenn iittss iinnppuutt iiss 
iinnccoorrrreecctt oorr uunnuussuuaall  llooww qquuaalliittyy 
 AAcccceeppttaabbllee ffoorr pprriivvaattee mmeetthhooddss oonnllyy 
 TThhee mmeetthhoodd ddooeess ttoooo mmaannyy tthhiinnggss  bbaadd ccoohheessiioonn 
 TThhee mmeetthhoodd hhaass ssiiddee eeffffeeccttss  ssppaagghheettttii ccooddee 
MMeetthhoodd rreettuurrnnss ssttrraannggee vvaalluuee wwhheenn aann eerrrroorr ccoonnddiittiioonn 
hhaappppeennss  iitt sshhoouulldd iinnddiiccaattee tthhee eerrrroorr 
9
WWrroonngg MMeetthhooddss –– EExxaammpplleess 
10 
lloonngg SSuumm((iinntt[[]] eelleemmeennttss)) 
{{ 
lloonngg ssuumm == 00;; 
ffoorr ((iinntt ii == 00;; ii << eelleemmeennttss..LLeennggtthh;; ii++++)) 
{{ 
ssuumm == ssuumm ++ eelleemmeennttss[[ii]];; 
eelleemmeennttss[[ii]] == 00;; 
}} 
HHiiddddeenn ssiiddee eeffffeecctt 
rreettuurrnn ssuumm;; 
}} 
ddoouubbllee CCaallccTTrriiaanngglleeAArreeaa((ddoouubbllee aa,, ddoouubbllee bb,, ddoouubbllee cc)) 
{{ 
iiff ((aa <<== 00 |||| bb <<== 00 |||| cc <<== 00)) 
{{ 
IInnccoorrrreecctt rreessuulltt.. 
TThhrrooww aann eexxcceeppttiioonn 
rreettuurrnn 00;; 
}} 
ddoouubbllee ss == ((aa ++ bb ++ cc)) // 22;; 
iinnsstteeaadd.. 
ddoouubbllee aarreeaa == MMaatthh..SSqqrrtt((ss ** ((ss -- aa)) ** ((ss -- bb)) ** ((ss -- cc))));; 
rreettuurrnn aarreeaa;; 
}}
SSttrroonngg CCoohheessiioonn 
MMeetthhooddss sshhoouulldd hhaavvee ssttrroonngg ccoohheessiioonn 
SShhoouulldd aaddddrreessss ssiinnggllee ttaasskk aanndd aaddddrreessss iitt wweellll 
SShhoouulldd hhaavvee cclleeaarr iinntteenntt 
MMeetthhooddss tthhaatt aaddddrreessss sseevveerraall ttaasskkss iinn tthhee 
ssaammee ttiimmee aarree hhaarrdd ttoo bbee nnaammeedd 
 SSttrriinngg ccoohheessiioonn iiss uusseedd iinn eennggiinneeeerriinngg 
IInn ccoommppuutteerr hhaarrddwwaarree aannyy PPCC ccoommppoonneenntt 
ssoollvveess aa ssiinnggllee ttaasskk 
EE..gg.. hhaarrdd ddiisskk ppeerrffoorrmmss aa ssiinnggllee ttaasskk –– ssttoorraaggee 
11
AAcccceeppttaabbllee TTyyppeess ooff CCoohheessiioonn 
 FFuunnccttiioonnaall ccoohheessiioonn ((iinnddeeppeennddeenntt ffuunnccttiioonn)) 
MMeetthhoodd ppeerrffoorrmmss cceerrttaaiinn wweellll--ddeeffiinneedd 
ccaallccuullaattiioonn aanndd rreettuurrnnss aa ssiinnggllee rreessuulltt 
TThhee eennttiirree iinnppuutt iiss ppaasssseedd tthhrroouugghh ppaarraammeetteerrss 
aanndd tthhee eennttiirree oouuttppuutt iiss rreettuurrnneedd aass rreessuulltt 
NNoo eexxtteerrnnaall ddeeppeennddeenncciieess oorr ssiiddee eeffffeeccttss 
EExxaammpplleess:: 
12 
MMaatthh..SSqqrrtt((vvaalluuee))  ssqquuaarree rroooott 
CChhaarr..IIssLLeetttteerrOOrrDDiiggiitt((cchh)) 
SSttrriinngg..SSuubbssttrriinngg((ssttrr,, ssttaarrttIInnddeexx,, lleennggtthh))
AAcccceeppttaabbllee TTyyppeess ooff CCoohheessiioonn ((22)) 
 SSeeqquueennttiiaall ccoohheessiioonn ((aallggoorriitthhmm)) 
MMeetthhoodd ppeerrffoorrmmss cceerrttaaiinn sseeqquueennccee ooff ooppeerraattiioonnss ttoo 
ppeerrffoorrmm aa ssiinnggllee ttaasskk aanndd aacchhiieevvee cceerrttaaiinn rreessuulltt 
 IItt eennccaappssuullaatteess aann aallggoorriitthhmm 
EExxaammppllee:: 
11..CCoonnnneecctt ttoo mmaaiill sseerrvveerr 
22..SSeenndd mmeessssaaggee hheeaaddeerrss 
33..SSeenndd mmeessssaaggee bbooddyy 
44..DDiissccoonnnneecctt ffrroomm tthhee sseerrvveerr 
13 
SSeennddEEmmaaiill((rreecciippiieenntt,, ssuubbjjeecctt,, bbooddyy))
AAcccceeppttaabbllee TTyyppeess ooff CCoohheessiioonn ((33)) 
 CCoommmmuunniiccaattiioonnaall ccoohheessiioonn ((ccoommmmoonn ddaattaa)) 
AA sseett ooff ooppeerraattiioonnss uusseedd ttoo pprroocceessss cceerrttaaiinn ddaattaa aanndd 
pprroodduuccee aa rreessuulltt 
EExxaammppllee:: 
11..RReettrriieevvee iinnppuutt ddaattaa ffrroomm ddaattaabbaassee 
22..PPeerrffoorrmm iinntteerrnnaall ccaallccuullaattiioonnss oovveerr rreettrriieevveedd ddaattaa 
33..BBuuiilldd tthhee rreeppoorrtt 
44..FFoorrmmaatt tthhee rreeppoorrtt aass EExxcceell wwoorrkksshheeeett 
55..DDiissppllaayy tthhee EExxcceell wwoorrkksshheeeett oonn tthhee ssccrreeeenn 
14 
DDiissppllaayyAAnnnnuuaallEExxppeennsseessRReeppoorrtt((iinntt eemmppllooyyeeeeIIdd))
AAcccceeppttaabbllee TTyyppeess ooff CCoohheessiioonn ((44)) 
 TTeemmppoorraall ccoohheessiioonn ((ttiimmee rreellaatteedd aaccttiivviittiieess)) 
OOppeerraattiioonnss tthhaatt aarree ggeenneerraallllyy nnoott rreellaatteedd bbuutt nneeeedd 
ttoo hhaappppeenn iinn aa cceerrttaaiinn mmoommeenntt 
EExxaammpplleess:: 
11.. LLooaadd uusseerr sseettttiinnggss 
22.. CChheecckk ffoorr uuppddaatteess 
33.. LLooaadd aallll iinnvvooiicceess ffrroomm tthhee ddaattaabbaassee 
 SSeeqquueennccee ooff aaccttiioonnss ttoo hhaannddllee tthhee eevveenntt 
15 
IInniittiiaalliizzeeAApppplliiccaattiioonn(()) 
BBuuttttoonnCCoonnffiirrmmCClliicckk(())
UUnnaacccceeppttaabbllee CCoohheessiioonn 
 LLooggiiccaall ccoohheessiioonn 
PPeerrffoorrmmss aa ddiiffffeerreenntt ooppeerraattiioonn ddeeppeennddiinngg oonn aann 
iinnppuutt ppaarraammeetteerr 
 IInnccoorrrreecctt eexxaammppllee:: 
 CCaann bbee aacccceeppttaabbllee iinn eevveenntt hhaannddlleerrss ((ee..gg.. tthhee KKeeyyDDoowwnn 
eevveenntt iinn WWiinnddoowwss FFoorrmmss)) 
16 
oobbjjeecctt RReeaaddAAllll((iinntt ooppeerraattiioonnCCooddee)) 
{{ 
iiff ((ooppeerraattiioonnCCooddee ==== 11)) …… //// RReeaadd ppeerrssoonn nnaammee 
eellssee iiff ((ooppeerraattiioonnCCooddee ==== 22)) …… //// RReeaadd aaddddrreessss 
eellssee iiff ((ooppeerraattiioonnCCooddee ==== 33)) …… //// RReeaadd ddaattee 
…… 
}}
UUnnaacccceeppttaabbllee CCoohheessiioonn 
 CCooiinncciiddeennttaall ccoohheessiioonn ((ssppaagghheettttii)) 
NNoott rreellaatteedd ((rraannddoomm)) ooppeerraattiioonnss aarree ggrroouuppeedd iinn aa 
mmeetthhoodd ffoorr uunncclleeaarr rreeaassoonn 
IInnccoorrrreecctt eexxaammppllee:: 
11..PPrreeppaarreess aannnnuuaall iinnccoommeess rreeppoorrtt ffoorr ggiivveenn ccuussttoommeerr 
22..SSoorrttss aann aarrrraayy ooff iinntteeggeerrss iinn iinnccrreeaassiinngg oorrddeerr 
33..CCaallccuullaatteess tthhee ssqquuaarree rroooott ooff ggiivveenn nnuummbbeerr 
44..CCoonnvveerrttss ggiivveenn MMPP33 ffiillee iinnttoo WWMMAA ffoorrmmaatt 
55..SSeennddss eemmaaiill ttoo ggiivveenn ccuussttoommeerr 
17 
HHaannddlleeSSttuuffff((ccuussttoommeerrIIdd,, iinntt[[]],, rreeff ssqqrrttVVaalluuee,, 
mmpp33FFiilleeNNaammee,, eemmaaiillAAddddrreessss))
LLoooossee CCoouupplliinngg 
WWhhaatt iiss lloooossee ccoouupplliinngg?? 
MMiinniimmaall ddeeppeennddeenncceess ooff tthhee mmeetthhoodd oonn tthhee 
ootthheerr ppaarrttss ooff tthhee ssoouurrccee ccooddee 
MMiinniimmaall ddeeppeennddeenncceess oonn tthhee ccllaassss mmeemmbbeerrss oorr 
eexxtteerrnnaall ccllaasssseess aanndd tthheeiirr mmeemmbbeerrss 
NNoo ssiiddee eeffffeeccttss 
IIff tthhee ccoouupplliinngg iiss lloooossee,, wwee ccaann eeaassiillyy rreeuussee aa 
mmeetthhoodd oorr ggrroouupp ooff mmeetthhooddss iinn aa nneeww pprroojjeecctt 
 TTiigghhtt ccoouupplliinngg  ssppaagghheettttii ccooddee 
18
LLoooossee CCoouupplliinngg ((22)) 
 TThhee iiddeeaall ccoouupplliinngg 
AA mmeetthhooddss ddeeppeennddss oonnllyy oonn iittss ppaarraammeetteerrss 
DDooeess nnoott hhaavvee aannyy ootthheerr iinnppuutt oorr oouuttppuutt 
EExxaammppllee:: MMaatthh..SSqqrrtt 
RReeaall wwoorrlldd 
CCoommpplleexx ssooffttwwaarree ccaannnnoott aavvooiidd ccoouupplliinngg bbuutt 
ccoouulldd mmaakkee iitt aass lloooossee aass ppoossssiibbllee 
EExxaammppllee:: ccoommpplleexx eennccrryyppttiioonn aallggoorriitthhmm 
ppeerrffoorrmmss iinniittiiaalliizzaattiioonn,, eennccrryyppttiioonn,, ffiinnaalliizzaattiioonn 
19
CCoouupplliinngg –– EExxaammppllee 
 IInntteennttiioonnaallllyy iinnccrreeaasseedd ccoouupplliinngg ffoorr mmoorree 
fflleexxiibbiilliittyy ((..NNEETT ccrryyppttooggrraapphhyy AAPPII)):: 
20 
bbyyttee[[]] EEnnccrryyppttAAEESS((bbyyttee[[]] iinnppuuttDDaattaa,, bbyyttee[[]] sseeccrreettKKeeyy)) 
{{ 
RRiijjnnddaaeell ccrryyppttooAAllgg == nneeww RRiijjnnddaaeellMMaannaaggeedd(());; 
ccrryyppttooAAllgg..KKeeyy == sseeccrreettKKeeyy;; 
ccrryyppttooAAllgg..GGeenneerraatteeIIVV(());; 
MMeemmoorryySSttrreeaamm ddeessttSSttrreeaamm == nneeww MMeemmoorryySSttrreeaamm(());; 
CCrryyppttooSSttrreeaamm ccssEEnnccrryyppttoorr == nneeww CCrryyppttooSSttrreeaamm(( 
ddeessttSSttrreeaamm,, ccrryyppttooAAllgg..CCrreeaatteeEEnnccrryyppttoorr(()),, 
CCrryyppttooSSttrreeaammMMooddee..WWrriittee));; 
ccssEEnnccrryyppttoorr..WWrriittee((iinnppuuttDDaattaa,, 00,, iinnppuuttDDaattaa..LLeennggtthh));; 
ccssEEnnccrryyppttoorr..FFlluusshhFFiinnaallBBlloocckk(());; 
bbyyttee[[]] eennccrryypptteeddDDaattaa == ddeessttSSttrreeaamm..TTooAArrrraayy(());; 
rreettuurrnn eennccrryypptteeddDDaattaa;; 
}}
LLoooossee CCoouupplliinngg –– EExxaammppllee 
 TToo rreedduuccee ccoouupplliinngg wwee ccaann mmaakkee uuttiilliittyy ccllaasssseess 
tthhaatt hhiiddee tthhee ccoommpplleexx llooggiicc aanndd pprroovviiddee ssiimmppllee 
ssttrraaiigghhttffoorrwwaarrdd iinntteerrffaaccee ((aa..kk..aa.. ffaaççaaddee)):: 
21 
bbyyttee[[]] EEnnccrryyppttAAEESS((bbyyttee[[]] iinnppuuttDDaattaa,, bbyyttee[[]] sseeccrreettKKeeyy)) 
{{ 
MMeemmoorryySSttrreeaamm iinnppuuttSSttrreeaamm == 
nneeww MMeemmoorryySSttrreeaamm((iinnppuuttDDaattaa));; 
MMeemmoorryySSttrreeaamm oouuttppuuttSSttrreeaamm == nneeww MMeemmoorryySSttrreeaamm(());; 
EEnnccrryyppttiioonnUUttiillss..EEnnccrryyppttAAEESS(( 
iinnppuuttSSttrreeaamm,, oouuttppuuttSSttrreeaamm,, sseeccrreettKKeeyy));; 
bbyyttee[[]] eennccrryypptteeddDDaattaa == oouuttppuuttSSttrreeaamm..TTooAArrrraayy(());; 
rreettuurrnn eennccrryypptteeddDDaattaa;; 
}}
TTiigghhtt CCoouupplliinngg –– EExxaammppllee 
 PPaassssiinngg ppaarraammeetteerrss tthhrroouugghh ccllaassss ffiieellddss 
TTyyppiiccaall eexxaammppllee ooff ttiigghhtt ccoouupplliinngg 
DDoonn''tt ddoo tthhiiss uunnlleessss yyoouu hhaavvee aa ggoooodd rreeaassoonn!! 
22 
ccllaassss SSuummaattoorr 
{{ 
ppuubblliicc iinntt aa,, bb;; 
iinntt SSuumm(()) 
{{ 
WWhhyy ddoonn''tt ppaassss tthhee 
nnuummbbeerrss aass 
ppaarraammeetteerrss?? 
rreettuurrnn aa ++ bb;; 
}} 
ssttaattiicc vvooiidd MMaaiinn(()) 
{{ 
SSuummaattoorr ssuummaattoorr == nneeww SSuummaattoorr(()) {{ aa == 33,, bb == 55 }};; 
CCoonnssoollee..WWrriitteeLLiinnee((ssuummaattoorr..SSuumm(())));; 
}} 
}}
LLoooossee CCoouupplliinngg aanndd OOOOPP 
RReedduucciinngg ccoouupplliinngg wwiitthh OOOOPP tteecchhnniiqquueess 
AAbbssttrraaccttiioonn 
DDeeffiinnee aa ppuubblliicc iinntteerrffaaccee aanndd hhiiddee tthhee 
iimmpplleemmeennttaattiioonn ddeettaaiillss 
EEnnccaappssuullaattiioonn 
MMaakkee mmeetthhooddss aanndd ffiieellddss pprriivvaattee uunnlleessss tthheeyy aarree 
ddeeffiinniitteellyy nneeeeddeedd 
DDeeffiinnee nneeww mmeemmbbeerrss aass pprriivvaattee 
IInnccrreeaassee vviissiibbiilliittyy aass ssoooonn aass tthhiiss iiss nneeeeddeedd 
23
AAcccceeppttaabbllee CCoouupplliinngg 
MMeetthhoodd iiss ccoouupplleedd ttoo iittss ppaarraammeetteerrss 
TThhiiss iiss tthhee bbeesstt ttyyppee ooff ccoouupplliinngg 
MMeetthhoodd iinn aa ccllaassss iiss ccoouupplleedd ttoo ssoommee ccllaassss ffiieellddss 
TThhiiss ccoouupplliinngg iiss uussuuaall,, ddoo nnoott wwoorrrryy ttoooo mmuucchh 
MMeetthhoodd iinn aa ccllaassss iiss ccoouupplleedd ttoo ssttaattiicc mmeetthhooddss,, 
pprrooppeerrttiieess oorr ccoonnssttaannttss iinn eexxtteerrnnaall ccllaassss 
TThhiiss iiss nnoorrmmaall,, uussuuaallllyy iiss nnoott aa pprroobblleemm 
MMeetthhoodd iiss ccoouupplleedd ttoo eexxtteerrnnaall ssttaattiicc ffiieellddss 
AAvvooiidd tthhiiss,, ccllaasssseess sshhoouulldd kkeeeepp tthheeiirr ffiieellddss pprriivvaattee 
24
NNoonn--AAcccceeppttaabbllee CCoouupplliinngg 
MMeetthhoodd iinn aa ccllaassss iiss ccoouupplleedd ttoo ssttaattiicc ffiieellddss iinn 
eexxtteerrnnaall ccllaassss 
AAvvooiidd iitt  ccoonnssiiddeerr rreeffaaccttoorriinngg 
MMeetthhooddss ttaakkee aass iinnppuutt ddaattaa ssoommee ffiieellddss tthhaatt 
ccoouulldd bbee ppaasssseedd aass ppaarraammeetteerrss 
CChheecckk tthhee iinntteenntt ooff tthhee mmeetthhoodd 
IIss iitt ddeessiiggnneedd ttoo pprroocceessss iinntteerrnnaall ccllaassss ddaattaa oorr iiss 
uuttiilliittyy mmeetthhoodd 
MMeetthhoodd iiss ddeeffiinneedd ppuubblliicc wwiitthhoouutt bbeeiinngg ppaarrtt ooff 
tthhee ppuubblliicc ccllaassss''ss iinntteerrffaaccee  ppoossssiibbllee ccoouupplliinngg 
25
MMeetthhooddss PPaarraammeetteerrss 
 PPuutt mmoosstt iimmppoorrttaanntt ppaarraammeetteerrss ffiirrsstt 
FFiirrsstt ppuutt tthhee mmaaiinn iinnppuutt ppaarraammeetteerrss 
PPuutt nnoonn--iimmppoorrttaanntt ooppttiioonnaall ppaarraammeetteerrss llaasstt 
EExxaammppllee:: 
IInnccoorrrreecctt eexxaammppllee:: 
26 
vvooiidd RReeggiisstteerrUUsseerr((ssttrriinngg uusseerrnnaammee,, ssttrriinngg ppaasssswwoorrdd,, 
DDaattee aaccccoouunnttEExxppiirraattiioonnDDaattee,, RRoollee[[]] rroolleess)) 
vvooiidd RReeggiisstteerrUUsseerr((RRoollee[[]] rroolleess,, ssttrriinngg ppaasssswwoorrdd,, ssttrriinngg 
uusseerrnnaammee,, DDaattee aaccccoouunnttEExxppiirraattiioonnDDaattee,,)) 
vvooiidd RReeggiisstteerrUUsseerr((ssttrriinngg ppaasssswwoorrdd,, DDaattee 
aaccccoouunnttEExxppiirraattiioonnDDaattee,, RRoollee[[]] rroolleess,, ssttrriinngg uusseerrnnaammee))
MMeetthhooddss PPaarraammeetteerrss ((22)) 
DDoo nnoott mmooddiiffyy tthhee iinnppuutt ppaarraammeetteerrss 
UUssee nneeww vvaarriiaabbllee iinnsstteeaadd 
IInnccoorrrreecctt eexxaammppllee:: 
CCoorrrreecctt eexxaammppllee:: 
27 
bbooooll CChheecckkLLooggiinn((ssttrriinngg uusseerrnnaammee,, ssttrriinngg ppaasssswwoorrdd)) 
{{ 
uusseerrnnaammee == uusseerrnnaammee..TTooLLoowweerr(());; 
…… //// CChheecckk tthhee uusseerrnnaammee // ppaasssswwoorrdd hheerree 
}} 
bbooooll CChheecckkLLooggiinn((ssttrriinngg uusseerrnnaammee,, ssttrriinngg ppaasssswwoorrdd)) 
{{ 
ssttrriinngg uusseerrnnaammeeLLoowweerrccaassee == uusseerrnnaammee..TTooLLoowweerr(());; 
…… //// CChheecckk tthhee uusseerrnnaammee // ppaasssswwoorrdd hheerree 
}}
MMeetthhooddss PPaarraammeetteerrss ((33)) 
UUssee ppaarraammeetteerrss ccoonnssiisstteennttllyy 
UUssee tthhee ssaammee nnaammeess aanndd tthhee ssaammee oorrddeerr iinn aallll 
mmeetthhooddss 
IInnccoorrrreecctt eexxaammppllee:: 
OOuuttppuutt ppaarraammeetteerrss sshhoouulldd bbee ppuutt llaasstt 
28 
vvooiidd EEnnccrryyppttFFiillee((SSttrreeaamm iinnppuutt,, SSttrreeaamm oouuttppuutt,, ssttrriinngg 
kkeeyy));; 
vvooiidd DDeeccrryyppttFFiillee((ssttrriinngg kkeeyy,, SSttrreeaamm oouuttppuutt,, SSttrreeaamm 
iinnppuutt));; 
FFiinnddCCuussttoommeerrssAAnnddIInnccoommeess((RReeggiioonn rreeggiioonn,, oouutt CCuussttoommeerr[[]] 
ccuussttoommeerrss,, oouutt ddeecciimmaall[[]] iinnccoommeess))
Pass EEnnttiirree OObbjjeecctt oorr IIttss FFiieellddss?? 
WWhheenn sshhoouulldd wwee ppaassss aann oobbjjeecctt ccoonnttaaiinniinngg ffeeww 
vvaalluueess aanndd wwhheenn tthheessee vvaalluueess sseeppaarraatteellyy?? 
SSoommeettiimmee wwee ppaassss aann oobbjjeecctt aanndd uussee oonnllyy aa 
ssiinnggllee ffiieelldd ooff iitt –– iitt iiss aa ggoooodd pprraaccttiiccee?? 
EExxaammpplleess:: 
LLooookk aatt tthhee mmeetthhoodd''ss lleevveell ooff aabbssttrraaccttiioonn 
IIss iitt iinntteennddeedd ttoo ooppeerraattee wwiitthh eemmppllooyyeeeess ooff wwiitthh 
rraatteess aanndd mmoonntthhss??  tthhee ffiirrsstt iiss iinnccoorrrreecctt 
29 
CCaallccuullaatteeSSaallaarryy((EEmmppllooyyeeee eemmppllooyyeeee,, iinntt mmoonntthhss));; 
CCaallccuullaatteeSSaallaarryy((ddoouubbllee rraattee,, iinntt mmoonntthhss));;
HHooww MMuucchh PPaarraammeetteerrss 
MMeetthhooddss SShhoouulldd HHaavvee?? 
 LLiimmiitt tthhee nnuummbbeerr ooff mmeetthhoodd ppaarraammeetteerrss ttoo 77 
((++//--22)) 
77 iiss aa mmaaggiicc nnuummbbeerr iinn ppssyycchhoollooggyy 
HHuummaann bbrraaiinn ccaannnnoott pprroocceessss mmoorree tthhaann 77 ((++//--22)) 
tthhiinnggss iinn tthhee ssaammee ttiimmee 
IIff tthhee ppaarraammeetteerrss nneeeedd ttoo bbee ttoooo mmuucchh 
rreeccoonnssiiddeerr tthhee mmeetthhoodd iinntteenntt  ddooeess iitt hhaavvee 
cclleeaarr iinntteenntt?? 
CCoonnssiiddeerr ppuuttttiinngg ffeeww ppaarraammeetteerrss iinn aa nneeww ccllaassss 
30
MMeetthhooddss LLeennggtthh 
HHooww lloonngg sshhoouulldd aa mmeetthhoodd bbee?? 
TThheerree iiss nnoo ssppeecciiffiicc rreessttrriiccttiioonn 
AAvvooiidd mmeetthhooddss lloonnggeerr tthhaann oonnee ssccrreeeenn ((3300 lliinneess)) 
LLoonngg mmeetthhooddss aarree nnoott aallwwaayyss bbaadd 
BBee ssuurree yyoouu hhaavvee aa ggoooodd rreeaassoonn ffoorr tthheeiirr lleennggtthh 
CCoohheessiioonn aanndd ccoouupplliinngg aarree mmoorree iimmppoorrttaanntt tthhaann 
tthhee mmeetthhoodd lleennggtthh!! 
LLoonngg mmeetthhooddss oofftteenn ccoonnttaaiinn ppoorrttiioonnss tthhaatt ccoouulldd 
bbee eexxttrraacctteedd aass sseeppaarraattee mmeetthhooddss wwiitthh ggoooodd 
nnaammee aanndd cclleeaarr iinntteenntt  cchheecckk tthhiiss!! 
31
UUssiinngg VVaarriiaabblleess 
BBeesstt PPrraaccttiicceess
RReettuunniinngg RReessuulltt ffrroomm aa MMeetthhoodd 
AAllwwaayyss aassssiiggnn tthhee rreessuulltt ooff aa mmeetthhoodd iinn ssoommee 
vvaarriiaabbllee bbeeffoorree rreettuurrnniinngg iitt.. BBeenneeffiittss:: 
IImmpprroovveedd ccooddee rreeaaddaabbiilliittyy 
TThhee rreettuurrnneedd vvaalluuee hhaass sseellff--ddooccuummeennttiinngg nnaammee 
SSiimmpplliiffiieedd ddeebbuuggggiinngg 
TThhee iinntteenntt ooff tthhee 
EExxaammppllee:: 
ffoorrmmuullaa iiss oobbvviioouuss.. 
iinntt ssaallaarryy == ddaayyss ** hhoouurrssPPeerrDDaayy ** rraatteePPeerrHHoouurr;; 
rreettuurrnn ssaallaarryy;; 
IInnccoorrrreecctt eexxaammppllee:: 
33 
WWee ccaann ppuutt aa bbrreeaakkppooiinntt aatt tthhiiss 
lliinnee aanndd cchheecckk iiff tthhee rreessuulltt iiss 
ccoorrrreecctt.. 
rreettuurrnn ddaayyss ** hhoouurrssPPeerrDDaayy ** rraatteePPeerrHHoouurr;;
VVaarriiaabbllee IInniittiiaalliizzaattiioonn 
 IInniittiiaalliizzee aallll vvaarriiaabblleess bbeeffoorree tthheeiirr ffiirrsstt uussaaggee 
CCllaassss vvaarriiaabblleess ((ffiieellddss)) aarree aauuttoommaattiiccaallllyy 
iinniittiiaalliizzeedd wwiitthh 00 // nnuullll bbyy tthhee CC## ccoommppiilleerr 
YYoouu ssttiillll ggeett aa wwaarrnniinngg mmeessssaaggee 
LLooccaall vvaarriiaabblleess sshhoouulldd bbee mmaannuuaallllyy iinniittiiaalliizzeedd 
TThhiiss CC## ccooddee wwiillll rreessuulltt iinn ccoommppiillaattiioonn eerrrroorr:: 
WWee ccaann iinniittiiaalliizzee vvaarriiaabblleess aatt tthheeiirr ddeeccllaarraattiioonn:: 
34 
iinntt vvaalluuee;; 
CCoonnssoollee..WWrriitteeLLiinnee((vvaalluuee));; 
iinntt vvaalluuee == 00;; 
CCoonnssoollee..WWrriitteeLLiinnee((vvaalluuee));;
PPaarrttiiaallllyy IInniittiiaalliizzeedd OObbjjeeccttss 
 EEnnssuurree oobbjjeeccttss ccaannnnoott ggeett iinnttoo ppaarrttiiaallllyy 
iinniittiiaalliizzeedd ssttaattee 
MMaakkee aallll ffiieellddss pprriivvaattee aanndd rreeqquuiirree vvaalliidd vvaalluueess 
ffoorr aallll mmaannddaattoorryy ffiieellddss iinn aallll ccoonnssttrruuccttoorrss 
EExxaammppllee:: SSttuuddeenntt oobbjjeecctt iiss iinnvvaalliidd uunnlleessss iitt hhaass 
NNaammee aanndd FFaaccuullttyyNNuummbbeerr 
35 
ccllaassss SSttuuddeenntt 
{{ 
pprriivvaattee ssttrriinngg nnaammee,, ffaaccuullttyyNNuummbbeerr;; 
ppuubblliicc SSttuuddeenntt((ssttrriinngg nnaammee,, ssttrriinngg ffaaccuullttyyNNuummbbeerr)) 
{{ …… }} 
}}
VVaarriiaabbllee SSccooppee 
 VVaarriiaabbllee ssccooppee ddeeffiinneess hhooww ""ffaammoouuss"" iiss aa vvaarriiaabbllee 
iinn tthhee pprrooggrraamm 
SSttaattiicc vvaarriiaabblleess aarree mmoorree ""ffaammoouuss"" tthhaann iinnssttaannccee 
vvaarriiaabblleess,, aanndd tthheeyy aarree mmoorree ""ffaammoouuss"" tthhaann llooccaall 
VVaarriiaabblleess'' vviissiibbiilliittyy iiss ddiirreeccttllyy rreellaatteedd ttoo tthheeiirr ssccooppee 
ppuubblliicc,, pprrootteecctteedd,, iinntteerrnnaall,, pprriivvaattee 
AAllwwaayyss ttrryy ttoo rreedduuccee tthhee vvaarriiaabbllee''ss ssccooppee 
TThhiiss rreedduucceess ppootteennttiiaall ccoouupplliinngg 
AAvvooiidd ppuubblliicc ffiieellddss ((eexxcceeppttiioonn:: rreeaaddoonnllyy // ccoonnsstt)) 
AAcccceessss aallll ffiieellddss tthhrroouugghh pprrooppeerrttiieess // mmeetthhooddss 
36
EExxcceeeeddeedd SSccooppee –– EExxaammppllee 
37 
ppuubblliicc ccllaassss GGlloobbaallss 
{{ 
ppuubblliicc ssttaattiicc iinntt ssttaattee == 00;; 
}} 
ppuubblliicc ccllaassss GGeenniioouuss 
{{ 
ppuubblliicc ssttaattiicc vvooiidd PPrriinnttSSoommeetthhiinngg(()) 
{{ 
iiff ((GGlloobbaallss..ssttaattee ==== 00)) 
{{ 
CCoonnssoollee..WWrriitteeLLiinnee((""HHeelllloo..""));; 
}} 
eellssee 
{{ 
CCoonnssoollee..WWrriitteeLLiinnee((""GGoooodd bbyyee..""));; 
}} 
}} 
}}
VVaarriiaabbllee SSppaann aanndd LLiiffeettiimmee 
 VVaarriiaabbllee ssppaann 
TThhee aavveerraaggee nnuummbbeerr ooff lliinneess ooff ccooddee ((LLOOCC)) bbeettwweeeenn 
vvaarriiaabbllee uussaaggeess 
 VVaarriiaabbllee lliiffeettiimmee 
TThhee nnuummbbeerr ooff lliinneess ooff ccooddee ((LLOOCC)) bbeettwweeeenn tthhee ffiirrsstt 
aanndd tthhee llaasstt vvaarriiaabbllee uussaaggee iinn aa bblloocckk 
 KKeeeepp vvaarriiaabbllee ssppaann aanndd lliiffeettiimmee aass llooww aass ppoossssiibbllee 
38 
AAllwwaayyss ddeeffiinnee aanndd iinniittiiaalliizzee vvaarriiaabblleess jjuusstt 
bbeeffoorree tthheeiirr ffiirrsstt uussee aanndd nneevveerr bbeeffoorree iitt!!
UUnnnneeeeddeedd LLaarrggee VVaarriiaabbllee 
SSppaann aanndd LLiiffeettiimmee 
39 
iinntt ccoouunntt;; 
iinntt[[]] nnuummbbeerrss == nneeww iinntt[[110000]];; 
ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh;; ii++++)) 
{{ 
nnuummbbeerrss[[ii]] == ii;; 
}} 
ccoouunntt == 00;; 
ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh // 22;; ii++++)) 
{{ 
nnuummbbeerrss[[ii]] == nnuummbbeerrss[[ii]] ** nnuummbbeerrss[[ii]];; 
}} 
ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh;; ii++++)) 
{{ 
iiff ((nnuummbbeerrss[[ii]] %% 33 ==== 00)) 
{{ 
ccoouunntt++++;; 
}} 
}} 
CCoonnssoollee..WWrriitteeLLiinnee((ccoouunntt));; 
lifetime 
("count") 
= 19 
span = 
19 / 4 = 
4.75
RReedduucceedd VVaarriiaabbllee 
SSppaann aanndd LLiiffeettiimmee 
40 
iinntt[[]] nnuummbbeerrss == nneeww iinntt[[110000]];; 
ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh;; ii++++)) 
{{ 
nnuummbbeerrss[[ii]] == ii;; 
}} 
ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh // 22;; ii++++)) 
{{ 
nnuummbbeerrss[[ii]] == nnuummbbeerrss[[ii]] ** nnuummbbeerrss[[ii]];; 
}} 
iinntt ccoouunntt == 00;; 
ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh;; ii++++)) 
{{ 
iiff ((nnuummbbeerrss[[ii]] %% 33 ==== 00)) 
{{ 
ccoouunntt++++;; 
}} 
}} 
CCoonnssoollee..WWrriitteeLLiinnee((ccoouunntt));; 
lifetime = 9 
span= 
9 / 3 = 3
SSiinnggllee PPuurrppoossee 
VVaarriiaabblleess sshhoouulldd hhaavvee ssiinnggllee ppuurrppoossee 
NNeevveerr uussee aa ssiinnggllee vvaarriiaabbllee ffoorr mmuullttiippllee 
ppuurrppoosseess!! 
EEccoonnoommiizziinngg mmeemmoorryy iiss nnoott aann eexxccuussee 
 CCaann yyoouu cchhoooossee aa ggoooodd nnaammee ffoorr vvaarriiaabbllee tthhaatt 
iiss uusseedd ffoorr sseevveerraall ppuurrppoosseess?? 
EExxaammppllee:: vvaarriiaabbllee uusseedd ttoo ccoouunntt ssttuuddeennttss ooff ttoo 
kkeeeepp tthhee aavveerraaggee ooff tthheeiirr ggrraaddeess 
PPrrooppoosseedd nnaammee:: ssttuuddeennttssCCoouunnttOOrrAAvvggGGrraaddee 
41
VVaarriiaabblleess –– OOtthheerr SSuuggggeessttiioonnss 
DDoonn''tt ddeeffiinnee vvaarriiaabblleess tthhaatt aarree nnoott uusseedd 
CCoommppiilleerrss uussuuaallllyy iissssuueess wwaarrnniinnggss 
DDoonn''tt uussee vvaarriiaabblleess wwiitthh hhiiddddeenn ppuurrppoossee 
IInnccoorrrreecctt eexxaammppllee:: 
IInnsstteeaadd uussee eennuummeerraattiioonn:: 
42 
iinntt mmooddee == 11;; 
…… 
iiff ((mmooddee ==== 11)) ……;; //// RReeaadd 
iiff ((mmooddee ==== 22)) ……;; //// WWrriittee 
iiff ((mmooddee ==== 33)) ……;; //// RReeaadd aanndd wwrriittee 
eennuumm RReessoouurrcceeAAcccceessssMMooddee {{ RReeaadd,, WWrriittee,, RReeaaddWWrriittee }}
UUssiinngg 
EExxpprreessssiioonnss 
BBeesstt PPrraaccttiicceess
AAvvooiidd CCoommpplleexx EExxpprreessssiioonnss 
NNeevveerr uussee ccoommpplleexx eexxpprreessssiioonnss iinn tthhee ccooddee!! 
IInnccoorrrreecctt eexxaammppllee:: 
WWhhaatt sshhaallll wwee ddoo iiff wwee ggeett aatt tthhiiss 
lliinnee IInnddeexxOOuuttOOffRRaannggeeEExxcceeppttiioonn?? 
 CCoommpplleexx eexxpprreessssiioonnss aarree eevviill bbeeccaauussee:: 
MMaakkee ccooddee hhaarrdd ttoo rreeaadd aanndd uunnddeerrssttaanndd,, hhaarrdd 
ttoo ddeebbuugg,, hhaarrdd ttoo mmooddiiffyy aanndd hhaarrdd ttoo mmaaiinnttaaiinn 
44 
ffoorr ((iinntt ii==00;; ii<<xxCCoooorrddss..lleennggtthh;; ii++++)) {{ 
ffoorr ((iinntt jj==00;; jj<<yyCCoooorrddss..lleennggtthh;; jj++++)) {{ 
mmaattrriixx[[ii]][[jj]] == 
mmaattrriixx[[xxCCoooorrddss[[ffiinnddMMaaxx((ii))++11]]]][[yyCCoooorrddss[[ffiinnddMMiinn((jj))--11]]]] ** 
mmaattrriixx[[yyCCoooorrddss[[ffiinnddMMaaxx((jj))++11]]]][[xxCCoooorrddss[[ffiinnddMMiinn((ii))--11]]]];; 
}} 
}} 
TThheerree aarree 1100 ppootteennttiiaall ssoouurrcceess ooff 
IInnddeexxOOuuttOOffRRaannggeeEExxcceeppttiioonn iinn tthhiiss 
eexxpprreessssiioonn!!
SSiimmpplliiffyyiinngg CCoommpplleexx EExxpprreessssiioonnss 
45 
ffoorr ((iinntt ii == 00;; ii << xxCCoooorrddss..lleennggtthh;; ii++++)) 
{{ 
ffoorr ((iinntt jj == 00;; jj << yyCCoooorrddss..lleennggtthh;; jj++++)) 
{{ 
iinntt mmaaxxSSttaarrttIInnddeexx == ffiinnddMMaaxx((ii)) ++ 11;; 
iinntt mmiinnSSttaarrttIInnddeexx == ffiinnddMMiinn((ii)) -- 11;; 
iinntt mmiinnXXccoooorrdd == xxCCoooorrddss[[mmiinnSSttaarrttIInnddeexx]];; 
iinntt mmaaxxXXccoooorrdd == xxCCoooorrddss[[mmaaxxSSttaarrttIInnddeexx]];; 
iinntt mmiinnYYccoooorrdd == yyCCoooorrddss[[mmiinnSSttaarrttIInnddeexx]];; 
iinntt mmaaxxYYccoooorrdd == yyCCoooorrddss[[mmaaxxSSttaarrttIInnddeexx]];; 
iinntt nneewwVVaalluuee == 
mmaattrriixx[[mmaaxxXXccoooorrdd]][[mmiinnYYccoooorrdd]] ** 
mmaattrriixx[[mmaaxxYYccoooorrdd]][[mmiinnXXccoooorrdd]];; 
mmaattrriixx[[ii]][[jj]] == nneewwVVaalluuee;; 
}} 
}}
UUssiinngg CCoonnssttaannttss 
WWhheenn aanndd HHooww ttoo UUssee CCoonnssttaannttss??
AAvvooiidd MMaaggiicc NNuummbbeerrss aanndd SSttrriinnggss 
WWhhaatt iiss mmaaggiicc nnuummbbeerr oorr vvaalluuee?? 
MMaaggiicc nnuummbbeerrss // vvaalluueess aarree aallll lliitteerraallss ddiiffffeerreenntt 
tthhaann 00,, 11,, --11,, nnuullll aanndd """" ((eemmppttyy ssttrriinngg)) 
AAvvooiidd uussiinngg mmaaggiicc nnuummbbeerrss // vvaalluueess 
TThheeyy aarree hhaarrdd ttoo mmaaiinnttaaiinn 
WWhheenn cchhaannggee ooccccuurrss,, yyoouu nneeeedd ttoo mmooddiiffyy aallll 
ooccccuurrrreenncceess ooff tthhee mmaaggiicc nnuummbbeerr // ccoonnssttaanntt 
TThheeiirr mmeeaanniinngg iiss nnoott oobbvviioouuss 
EExxaammppllee:: wwhhaatt ddooeess tthhee nnuummbbeerr 11002244 mmeeaann?? 
47
TThhee EEvviill MMaaggiicc NNuummbbeerrss 
48 
ppuubblliicc ccllaassss GGeeoommeettrryyUUttiillss 
{{ 
ppuubblliicc ssttaattiicc ddoouubbllee CCaallccCCiirrcclleeAArreeaa((ddoouubbllee rraaddiiuuss)) 
{{ 
ddoouubbllee aarreeaa == 33..1144115599220066 ** rraaddiiuuss ** rraaddiiuuss;; 
rreettuurrnn aarreeaa;; 
}} 
ppuubblliicc ssttaattiicc ddoouubbllee CCaallccCCiirrcclleePPeerriimmeetteerr((ddoouubbllee rraaddiiuuss)) 
{{ 
ddoouubbllee ppeerriimmeetteerr == 66..2288331188441122 ** rraaddiiuuss;; 
rreettuurrnn ppeerriimmeetteerr;; 
}} 
ppuubblliicc ssttaattiicc ddoouubbllee CCaallccEElliippsseeAArreeaa((ddoouubbllee aaxxiiss11, ddoouubbllee aaxxiiss22)) 
{{ 
ddoouubbllee aarreeaa == 33..1144115599220066 ** aaxxiiss11 ** aaxxiiss22;; 
rreettuurrnn aarreeaa;; 
}} 
}}
TTuurrnniinngg MMaaggiicc 
NNuummbbeerrss iinnttoo CCoonnssttaannttss 
49 
ppuubblliicc ccllaassss GGeeoommeettrryyUUttiillss 
{{ 
ppuubblliicc ccoonnsstt ddoouubbllee PPII == 33..1144115599220066;; 
ppuubblliicc ssttaattiicc ddoouubbllee CCaallccCCiirrcclleeAArreeaa((ddoouubbllee rraaddiiuuss)) 
{{ 
ddoouubbllee aarreeaa == PPII ** rraaddiiuuss ** rraaddiiuuss;; 
rreettuurrnn aarreeaa;; 
}} 
ppuubblliicc ssttaattiicc ddoouubbllee CCaallccCCiirrcclleePPeerriimmeetteerr((ddoouubbllee rraaddiiuuss)) 
{{ 
ddoouubbllee ppeerriimmeetteerr == 22 ** PPII ** rraaddiiuuss;; 
rreettuurrnn ppeerriimmeetteerr;; 
}} 
ppuubblliicc ssttaattiicc ddoouubbllee CCaallccEElliippsseeAArreeaa((ddoouubbllee aaxxiiss11, ddoouubbllee aaxxiiss22)) 
{{ 
ddoouubbllee aarreeaa == PPII ** aaxxiiss11 ** aaxxiiss22;; 
rreettuurrnn aarreeaa;; 
}} 
}}
WWhheenn ttoo UUssee CCoonnssttaannttss?? 
 CCoonnssttaannttss sshhoouulldd bbee uusseedd iinn tthhee ffoolllloowwiinngg ccaasseess:: 
WWhheenn wwee nneeeedd ttoo uussee nnuummbbeerrss oorr ootthheerr vvaalluueess aanndd 
tthheeiirr llooggiiccaall mmeeaanniinngg aanndd vvaalluuee aarree nnoott oobbvviioouuss 
FFiillee nnaammeess 
MMaatthheemmaattiiccaall ccoonnssttaannttss 
BBoouunnddss aanndd rraannggeess 
50 
ppuubblliicc ccoonnsstt ssttrriinngg SSeettttiinnggssFFiilleeNNaammee == 
""AApppplliiccaattiioonnSSeettttiinnggss..xxmmll"";; 
ppuubblliicc ccoonnsstt ddoouubbllee EE == 22..77118822881188228844;; 
ppuubblliicc ccoonnsstt iinntt RREEAADD__BBUUFFFFEERR__SSIIZZEE == 55 ** 11002244 **11002244;;
WWhheenn ttoo AAvvooiidd CCoonnssttaannttss?? 
 SSoommeettiimmee iitt iiss bbeetttteerr ttoo kkeeeepp tthhee mmaaggiicc vvaalluueess 
iinnsstteeaadd ooff uussiinngg aa ccoonnssttaanntt 
EErrrroorr mmeessssaaggeess aanndd eexxcceeppttiioonn ddeessccrriippttiioonnss 
SSQQLL ccoommmmaannddss ffoorr ddaattaabbaassee ooppeerraattiioonnss 
TTiittlleess ooff GGUUII eelleemmeennttss ((llaabbeellss,, bbuuttttoonnss,, mmeennuuss,, 
ddiiaallooggss,, eettcc..)) 
 FFoorr iinntteerrnnaattiioonnaalliizzaattiioonn ppuurrppoosseess uussee 
rreessoouurrcceess,, nnoott ccoonnssttaannttss 
51
UUssiinngg CCoonnttrrooll 
CCoonnssttrruuccttss 
UUssiinngg CCoonnddiittiioonnaall SSttaatteemmeennttss 
aanndd LLooooppss CCoorrrreeccttllyy
UUssiinngg CCoonnddiittiioonnaall SSttaatteemmeennttss 
AAllwwaayyss uussee {{ aanndd }} ffoorr tthhee ccoonnddiittiioonnaall 
ssttaatteemmeennttss bbooddyy,, eevveenn wwhheenn iitt iiss aa ssiinnggllee lliinnee:: 
WWhhyy oommiittttiinngg tthhee bbrraacckkeettss ccoouulldd bbee hhaarrmmffuull?? 
TThhiiss iiss mmiisslleeaaddiinngg ccooddee ++ mmiisslleeaaddiinngg ffoorrmmaattttiinngg 
53 
iiff ((ccoonnddiittiioonn)) 
{{ 
DDooSSoommeettiinngg(());; 
}} 
iiff ((ccoonnddiittiioonn)) 
DDooSSoommeetthhiinngg(());; 
DDooAAnnootthheerrTThhiinngg(());; 
DDooDDiiffffeerreennttTThhiinngg(());;
UUssee SSiimmppllee CCoonnddiittiioonnss 
DDoo nnoott uussee ccoommpplleexx iiff ccoonnddiittiioonnss 
YYoouu ccaann aallwwaayyss ssiimmpplliiffyy tthheemm bbyy iinnttrroodduucciinngg 
bboooolleeaann vvaarriiaabblleess oorr bboooolleeaann mmeetthhooddss 
IInnccoorrrreecctt eexxaammppllee:: 
CCoommpplleexx bboooolleeaann eexxpprreessssiioonnss aarree hhaarrmmffuull 
HHooww yyoouu wwiillll ffiinndd tthhee pprroobblleemm iiff yyoouu ggeett 
IInnddeexxOOuuttOOffRRaannggeeEExxcceeppttiioonn?? 
54 
iiff ((xx >> 00 &&&& yy >> 00 &&&& xx << WWiiddtthh--11 &&&& yy << HHeeiigghhtt--11 &&&& 
mmaattrriixx[[xx, yy]] ==== 00 &&&& mmaattrriixx[[xx--11, yy]] ==== 00 &&&& 
mmaattrriixx[[xx++11, yy]] ==== 00 &&&& mmaattrriixx[[xx, yy--11]] ==== 00 &&&& 
mmaattrriixx[[xx, yy++11]] ==== 00 &&&& !!vviissiitteedd[[xx, yy]]))
SSiimmpplliiffyyiinngg BBoooolleeaann CCoonnddiittiioonnss 
 TThhee llaasstt eexxaammppllee ccaann bbee eeaassiillyy rreeffaaccttoorreedd iinnttoo 
sseellff--ddooccuummeennttiinngg ccooddee:: 
NNooww tthhee ccooddee iiss:: 
EEaassyy ttoo rreeaadd –– tthhee llooggiicc ooff tthhee ccoonnddiittiioonn iiss cclleeaarr 
EEaassyy ttoo ddeebbuugg –– bbrreeaakkppooiinntt ccaann bbee ppuutt aatt tthhee iiff 
55 
bbooooll iinnRRaannggee == 
xx >> 00 &&&& yy >> 00 &&&& xx << WWiiddtthh--11 &&&& yy << HHeeiigghhtt--11;; 
bbooooll eemmppttyyCCeellllAAnnddNNeeiigghhbboouurrss == 
mmaattrriixx[[xx, yy]] ==== 00 &&&& mmaattrriixx[[xx--11, yy]] ==== 00 &&&& 
mmaattrriixx[[xx++11, yy]] ==== 00 &&&& mmaattrriixx[[xx, yy--11]] ==== 00 &&&& 
mmaattrriixx[[xx, yy++11]] ==== 00;; 
iiff ((iinnRRaannggee &&&& eemmppttyyCCeellllAAnnddNNeeiigghhbboouurrss &&&& !!vviissiitteedd[[xx, yy]]))
AAvvooiidd DDeeeepp NNeessttiinngg ooff BBlloocckkss 
DDeeeepp nneessttiinngg ooff ccoonnddiittiioonnaall ssttaatteemmeennttss aanndd 
llooooppss mmaakkeess tthhee ccooddee uunncclleeaarr 
DDeeeeppllyy nneesstteedd ccooddee iiss ccoommpplleexx aanndd hhaarrdd ttoo rreeaadd 
aanndd uunnddeerrssttaanndd 
UUssuuaallllyy yyoouu ccaann eexxttrraacctt ppoorrttiioonnss ooff tthhee ccooddee iinn 
sseeppaarraattee mmeetthhooddss 
TThhiiss ssiimmpplliiffiieess tthhee llooggiicc ooff tthhee ccooddee 
UUssiinngg ggoooodd mmeetthhoodd nnaammee mmaakkeess tthhee ccooddee sseellff-- 
ddooccuummeennttiinngg 
56
DDeeeepp NNeessttiinngg –– EExxaammppllee 
57 
iiff ((mmaaxxEElleemm !!== IInntt3322..MMaaxxVVaalluuee)) 
{{ 
iiff ((aarrrr[[ii]] << aarrrr[[ii ++ 11]])) 
{{ 
iiff ((aarrrr[[ii ++ 11]] << aarrrr[[ii ++ 22]])) 
{{ 
iiff ((aarrrr[[ii ++ 22]] << aarrrr[[ii ++ 33]])) 
{{ 
mmaaxxEElleemm == aarrrr[[ii ++ 33]];; 
}} 
eellssee 
{{ 
mmaaxxEElleemm == aarrrr[[ii ++ 22]];; 
}} 
}} 
eellssee 
{{ 
iiff ((aarrrr[[ii ++ 11]] << aarrrr[[ii ++ 33]])) 
{{ 
mmaaxxEElleemm == aarrrr[[ii ++ 33]];; 
}} 
eellssee 
{{ 
mmaaxxEElleemm == aarrrr[[ii ++ 11]];; 
}} 
}} 
}} (continues on the next slide)
DDeeeepp NNeessttiinngg –– EExxaammppllee ((22)) 
58 
eellssee 
{{ 
iiff ((aarrrr[[ii]] << aarrrr[[ii ++ 22]])) 
{{ 
iiff ((aarrrr[[ii ++ 22]] << aarrrr[[ii ++ 33]])) 
{{ 
mmaaxxEElleemm == aarrrr[[ii ++ 33]];; 
}} 
eellssee 
{{ 
mmaaxxEElleemm == aarrrr[[ii ++ 22]];; 
}} 
}} 
eellssee 
{{ 
iiff ((aarrrr[[ii]] << aarrrr[[ii ++ 33]])) 
{{ 
mmaaxxEElleemm == aarrrr[[ii ++ 33]];; 
}} 
eellssee 
{{ 
mmaaxxEElleemm == aarrrr[[ii]];; 
}} 
}} 
}} 
}}
Avoiding DDeeeepp NNeessttiinngg –– EExxaammppllee 
59 
pprriivvaattee ssttaattiicc iinntt MMaaxx((iinntt ii, iinntt jj)) 
{{ 
iiff ((ii << jj)) 
{{ 
rreettuurrnn jj;; 
}} 
eellssee 
{{ 
rreettuurrnn ii;; 
}} 
}} 
pprriivvaattee ssttaattiicc iinntt MMaaxx((iinntt ii, iinntt jj, iinntt kk)) 
{{ 
iiff ((ii << jj)) 
{{ 
iinntt mmaaxxEElleemm == MMaaxx((jj, kk));; 
rreettuurrnn mmaaxxEElleemm;; 
}} 
eellssee 
{{ 
iinntt mmaaxxEElleemm == MMaaxx((ii, kk));; 
rreettuurrnn mmaaxxEElleemm;; 
}} 
}} (continues on the next slide)
Avoiding DDeeeepp NNeessttiinngg –– EExxaammppllee 
60 
pprriivvaattee ssttaattiicc iinntt FFiinnddMMaaxx((iinntt[[]] aarrrr, iinntt ii)) 
{{ 
iiff ((aarrrr[[ii]] << aarrrr[[ii ++ 11]])) 
{{ 
iinntt mmaaxxEElleemm == MMaaxx((aarrrr[[ii ++ 11]], aarrrr[[ii ++ 22]], aarrrr[[ii ++ 33]]));; 
rreettuurrnn mmaaxxEElleemm;; 
}} 
eellssee 
{{ 
iinntt mmaaxxEElleemm == MMaaxx((aarrrr[[ii]], aarrrr[[ii ++ 22]], aarrrr[[ii ++ 33]]));; 
rreettuurrnn mmaaxxEElleemm;; 
}} 
}} 
iiff ((mmaaxxEElleemm !!== IInntt3322..MMaaxxVVaalluuee)) {{ 
mmaaxxEElleemm == FFiinnddMMaaxx((aarrrr, ii));; 
}}
UUssiinngg CCaassee SSttaatteemmeenntt 
 Choose the most effective ordering of cases 
Put the normal (usual) case first 
Order cases by frequency 
Put the most unusual (exceptional) case last 
Order cases alphabetically or numerically 
 Keep the actions of each case simple 
Extract complex logic in separate methods 
 Use the default clause in a case statement or the 
last else in a chain of if-else to trap errors 
61
BBaadd CCaassee SSttaatteemmeenntt 
62 
vvooiidd PPrroocceessssNNeexxttCChhaarr((cchhaarr cchh)) 
{{ 
sswwiittcchh ((ppaarrsseeSSttaattee)) 
{{ 
IInnTTaagg:: 
iiff ((cchh ==== "">>"")) 
{{ 
CCoonnssoollee..WWrriitteeLiinnee((""FFoouunndd ttaagg:: {{00}}"", ttaagg));; 
tteexxtt == """";; 
ppaarrsseeSSttaattee == PPaarrsseeSSttaattee..OOuuttOOffTTaagg;; 
}} 
eellssee 
{{ 
ttaagg == ttaagg ++ cchh;; 
}} 
bbrreeaakk;; 
OOuuttOOffTTaagg:: 
…… 
}} 
}}
IImmpprroovveedd CCaassee SSttaatteemmeenntt 
63 
vvooiidd PPrroocceessssNNeexxttCChhaarr((cchhaarr cchh)) 
{{ 
sswwiittcchh ((ppaarrsseeSSttaattee)) 
{{ 
IInnTTaagg:: 
PPrroocceessssCChhaarraacctteerrIInnTTaagg((cchh));; 
bbrreeaakk;; 
OOuuttOOffTTaagg:: 
PPrroocceessssCChhaarraacctteerrOOuuttOOffTTaagg((cchh));; 
bbrreeaakk;; 
ddeeffaauulltt:: 
tthhrrooww nneeww EExxcceeppttiioonn((""IInnvvaalliidd ppaarrssee ssttaattee:: "" ++ 
ppaarrsseeSSttaattee));; 
}} 
}}
UUssiinngg LLooooppss 
 CChhoooossiinngg tthhee ccoorrrreecctt ttyyppee ooff lloooopp:: 
UUssee ffoorr lloooopp ttoo rreeppeeaatt ssoommee bblloocckk ooff ccooddee aa cceerrttaaiinn 
nnuummbbeerr ooff ttiimmeess 
UUssee ffoorreeaacchh lloooopp ttoo pprroocceessss eeaacchh eelleemmeenntt ooff aarrrraayy 
oorr ccoolllleeccttiioonn 
UUssee wwhhiillee // ddoo--wwhhiillee lloooopp wwhheenn yyoouu ddoonn''tt kknnooww 
hhooww mmaannyy ttiimmeess aa bblloocckk sshhoouulldd bbee rreeppeeaatteedd 
AAvvooiidd ddeeeepp nneessttiinngg ooff llooooppss 
YYoouu ccaann eexxttrraacctt tthhee lloooopp bbooddyy iinn aa nneeww mmeetthhoodd 
64
LLooooppss:: BBeesstt PPrraaccttiicceess 
KKeeeepp llooooppss ssiimmppllee 
TThhiiss hheellppss rreeaaddeerrss ooff yyoouurr ccooddee 
 TTrreeaatt tthhee iinnssiiddee ooff tthhee lloooopp aass iitt wweerree aa rroouuttiinnee 
DDoonn’’tt mmaakkee tthhee rreeaaddeerr llooookk iinnssiiddee tthhee lloooopp ttoo 
uunnddeerrssttaanndd tthhee lloooopp ccoonnttrrooll 
 TThhiinnkk ooff aa lloooopp aass aa bbllaacckk bbooxx:: 
65 
wwhhiillee ((!!iinnppuuttFFiillee..EEnnddOOffFFiillee(()) &&&& !!hhaassEErrrroorrss)) 
{{ 
}} 
((bbllaacckk bbooxx ccooddee))
DDeeffeennssiivvee PPrrooggrraammmmiinngg 
UUssiinngg AAsssseerrttiioonnss aanndd EExxcceeppttiioonnss CCoorrrreeccttllyy
PPrriinncciipplleess ooff DDeeffeennssiivvee 
PPrrooggrraammmmiinngg 
 FFuunnddaammeennttaall pprriinncciippllee ooff ddeeffeennssiivvee pprrooggrraammmmiinngg 
 DDeeffeennssiivvee pprrooggrraammmmiinngg mmeeaannss:: 
TToo eexxppeecctt iinnccoorrrreecctt iinnppuutt aanndd ttoo hhaannddllee iitt ccoorrrreeccttllyy 
TToo tthhiinnkk nnoott oonnllyy aabboouutt tthhee uussuuaall eexxeeccuuttiioonn ffllooww,, 
bbuutt ttoo ccoonnssiiddeerr aallssoo uunnuussuuaall ssiittuuaattiioonnss 
TToo eennssuurree tthhaatt iinnccoorrrreecctt iinnppuutt rreessuullttss ttoo eexxcceeppttiioonn,, 
nnoott ttoo iinnccoorrrreecctt oouuttppuutt 
67 
AAnnyy ppuubblliicc mmeetthhoodd sshhoouulldd cchheecckk iittss iinnppuutt 
ddaattaa,, pprreeccoonnddiittiioonnss aanndd ppoossttccoonnddiittiioonnss
DDeeffeennssiivvee PPrrooggrraammmmiinngg –– 
EExxaammppllee 
68 
ssttrriinngg SSuubbssttrriinngg((ssttrriinngg ssttrr, iinntt ssttaarrttIInnddeexx, iinntt lleennggtthh)) 
{{ 
iiff ((ssttrr ==== nnuullll)) 
{{ 
tthhrrooww nneeww NNuullllRReeffeerreenncceeEExxcceeppttiioonn((""SSttrr iiss nnuullll..""));; 
}} 
iiff ((ssttaarrttIInnddeexx >>== ssttrr..Leennggtthh)) 
{{ 
tthhrrooww nneeww AArrgguummeennttEExxcceeppttiioonn(( 
""IInnvvaalliidd ssttaarrttIInnddeexx::"" ++ ssttaarrttIInnddeexx));; 
CChheecckk tthhee iinnppuutt 
aanndd pprreeccoonnddiittiioonnss.. 
}} 
iiff ((ssttaarrttIInnddeexx ++ ccoouunntt >> ssttrr..Leennggtthh)) 
{{ 
tthhrrooww nneeww AArrgguummeennttEExxcceeppttiioonn((""IInnvvaalliidd lleennggtthh::"" ++ lleennggtthh));; 
}} 
…… 
DDeebbuugg..AAsssseerrtt((rreessuulltt..Leennggtthh ==== lleennggtthh));; 
}} 
PPeerrffoorrmm tthhee mmeetthhoodd mmaaiinn llooggiicc.. CChheecckk tthhee 
ppoossttccoonnddiittiioonnss 
..
EExxcceeppttiioonnss –– BBeesstt PPrraaccttiicceess 
 CChhoooossee aa ggoooodd nnaammee ffoorr yyoouurr eexxcceeppttiioonn ccllaassss 
IInnccoorrrreecctt eexxaammppllee:: 
EExxaammppllee:: 
UUssee ddeessccrriippttiivvee eerrrroorr mmeessssaaggeess 
IInnccoorrrreecctt eexxaammppllee:: 
EExxaammppllee:: 
69 
tthhrrooww nneeww EExxcceeppttiioonn((""FFiillee eerrrroorr!!""));; 
tthhrrooww nneeww FFiilleeNNoottFFoouunnddEExxcceeppttiioonn((""CCaannnnoott ffiinndd ffiillee "" ++ ffiilleeNNaammee));; 
tthhrrooww nneeww EExxcceeppttiioonn((""EErrrroorr!!""));; 
tthhrrooww nneeww AArrgguummeennttEExxcceeppttiioonn((""TThhee ssppeeeedd sshhoouulldd bbee aa nnuummbbeerr "" ++ 
""bbeettwweeeenn "" ++ MMIINN__SSPPEEEEDD ++ "" aanndd "" ++ MMAAXX__SSPPEEEEDD ++ ""..""));;
EExxcceeppttiioonnss HHaannddlliinngg BBeesstt 
PPrraaccttiicceess ((22)) 
 CCaattcchh oonnllyy eexxcceeppttiioonnss tthhaatt yyoouu aarree ccaappaabbllee ttoo 
pprroocceessss ccoorrrreeccttllyy 
DDoo nnoott ccaattcchh aallll eexxcceeppttiioonnss!! 
IInnccoorrrreecctt eexxaammppllee:: 
WWhhaatt aabboouutt OOuuttOOffMMeemmoorryyEExxcceeppttiioonn?? 
70 
ttrryy 
{{ 
RReeaaddSSoommeeFFiillee(());; 
}} 
ccaattcchh 
{{ 
CCoonnssoollee..WWrriitteeLLiinnee((""FFiillee nnoott ffoouunndd!!""));; 
}}
EExxcceeppttiioonnss HHaannddlliinngg BBeesstt 
PPrraaccttiicceess ((33)) 
 AAllwwaayyss iinncclluuddee tthhee eexxcceeppttiioonn ccaauussee wwhheenn 
tthhrroowwiinngg aa nneeww eexxcceeppttiioonn 
71 
ttrryy 
{{ 
WWiitthhddrraawwMMoonneeyy((aaccccoouunntt,, aammoouunntt));; 
}} 
ccaattcchh ((DDaattaabbaasseeEExxcceeppttiioonn ddbbeexx)) 
{{ 
tthhrrooww nneeww WWiitthhddrraawwEExxcceeppttiioonn((SSttrriinngg..FFoorrmmaatt(( 
""CCaann nnoott wwiitthhddrraaww tthhee aammoouunntt {{00}} ffrroomm aaccoooouunntt {{11}}"",, 
aammoouunntt,, aaccccoouunntt)),, ddbbeexx));; 
}} 
WWee iinncclluuddee iinn tthhee eexxcceeppttiioonnss 
cchhaaiinn tthhee oorriiggiinnaall ssoouurrccee ooff tthhee 
pprroobblleemm..
EExxcceeppttiioonnss HHaannddlliinngg BBeesstt 
PPrraaccttiicceess ((44)) 
 TThhrrooww eexxcceeppttiioonnss aatt tthhee ccoorrrreessppoonnddiinngg lleevveell ooff 
aabbssttrraaccttiioonn 
EExxaammppllee:: BBaannkk aaccccoouunntt wwiitthhddrraawwaall ooppeerraattiioonn ccoouulldd 
tthhrrooww IInnssuuffffiicciieennttFFuunnddssEExxcceeppttiioonn bbuutt ccaannnnoott 
tthhrrooww FFiilleeAAcccceessssDDeenniieeddEExxcceeppttiioonn 
DDiissppllaayy ttoo tthhee eenndd uusseerrss oonnllyy mmeessssaaggeess tthhaatt 
tthheeyy ccoouulldd uunnddeerrssttaanndd 
72 
or
DDiissppoossaabbllee RReessoouurrcceess 
HHaannddllee ddiissppoossaabbllee rreessoouurrcceess wwiitthh ccaarree 
AAllll ccllaasssseess iimmpplleemmeennttiinngg IIDDiissppoossaabbllee sshhoouulldd 
ffoollllooww tthhee ttrryy--ffiinnaallllyy // uussiinngg ppaatttteerrnn:: 
73 
SSttrreeaammRReeaaddeerr rreeaaddeerr == 
nneeww SSttrreeaammRReeaaddeerr((""ffiillee..ttxxtt""));; 
ttrryy 
{{ 
SSttrriinngg lliinnee == rreeaaddeerr..RReeaaddLLiinnee(());; 
}} 
ffiinnaallllyy 
{{ 
rreeaaddeerr..CClloossee(());; 
}} 
SSttrreeaammRReeaaddeerr rreeaaddeerr == 
nneeww SSttrreeaammRReeaaddeerr(( 
""ffiillee..ttxxtt""));; 
uussiinngg ((rreeaaddeerr)) 
{{ 
SSttrriinngg lliinnee == 
rreeaaddeerr..RReeaaddLLiinnee(());; 
}} 
==
CCoommmmeennttss aanndd CCooddee 
DDooccuummeennttaattiioonn 
TThhee CCoonncceepptt ooff SSeellff--DDooccuummeennttiinngg CCooddee
EEffffeeccttiivvee CCoommmmeennttss 
 EEffffeeccttiivvee ccoommmmeennttss ddoo nnoott rreeppeeaatt tthhee ccooddee 
TThheeyy eexxppllaaiinn iitt aatt hhiigghheerr lleevveell aanndd rreevveeaall nnoonn-- 
oobbvviioouuss ddeettaaiillss 
 TThhee bbeesstt ssooffttwwaarree ddooccuummeennttaattiioonn iiss tthhee ssoouurrccee 
ccooddee iittsseellff –– kkeeeepp iitt cclleeaann aanndd rreeaaddaabbllee 
 SSeellff--ddooccuummeennttiinngg ccooddee iiss ccooddee tthhaatt iiss sseellff-- 
eexxppllaaiinnaabbllee aanndd ddooeess nnoott nneeeedd ccoommmmeennttss 
SSiimmppllee ddeessiiggnn,, ssmmaallll wweellll nnaammeedd mmeetthhooddss,, 
ssttrroonngg ccoohheessiioonn aanndd lloooossee ccoouupplliinngg,, ssiimmppllee 
llooggiicc,, ggoooodd vvaarriiaabbllee nnaammeess,, ggoooodd ffoorrmmaattttiinngg,, …… 
75
SSeellff--DDooccuummeennttiinngg CCooddee 
 SSeellff--ddooccuummeennttiinngg ccooddee ffuunnddaammeennttaall pprriinncciipplleess 
76 
TThhee bbeesstt ddooccuummeennttaattiioonn iiss tthhee ccooddee iittsseellff.. 
MMaakkee tthhee ccooddee sseellff--eexxppllaaiinnaabbllee aanndd sseellff-- 
ddooccuummeennttiinngg,, eeaassyy ttoo rreeaadd aanndd uunnddeerrssttaanndd.. 
DDoo nnoott ddooccuummeenntt bbaadd ccooddee,, rreewwrriittee iitt!!
BBaadd CCoommmmeennttss –– EExxaammppllee 
77 
ppuubblliicc ssttaattiicc LLiisstt<<iinntt>> FFiinnddPPrriimmeess((iinntt ssttaarrtt,, iinntt eenndd)) 
{{ 
//// CCrreeaattee nneeww lliisstt ooff iinntteeggeerrss 
LLiisstt<<iinntt>> pprriimmeessLLiisstt == nneeww LLiisstt<<iinntt>>(());; 
//// PPeerrffoorrmm aa lloooopp ffrroomm ssttaarrtt ttoo eenndd 
ffoorr ((iinntt nnuumm == ssttaarrtt;; nnuumm <<== eenndd;; nnuumm++++)) 
{{ 
//// DDeeccllaarree bboooolleeaann vvaarriiaabbllee,, iinniittiiaallllyy ttrruuee 
bbooooll pprriimmee == ttrruuee;; 
//// PPeerrffoorrmm lloooopp ffrroomm 22 ttoo ssqqrrtt((nnuumm)) 
ffoorr ((iinntt ddiivv == 22;; ddiivv <<== MMaatthh..SSqqrrtt((nnuumm));; ddiivv++++)) 
{{ 
//// CChheecckk iiff ddiivv ddiivviiddeess nnuumm wwiitthh nnoo rreemmaaiinnddeerr 
iiff ((nnuumm %% ddiivv ==== 00)) 
{{ 
//// WWee ffoouunndd aa ddiivviiddeerr -->> tthhee nnuummbbeerr iiss nnoott pprriimmee 
pprriimmee == ffaallssee;; 
//// EExxiitt ffrroomm tthhee lloooopp 
bbrreeaakk;; 
}} (continues on the next slide)
BBaadd CCoommmmeennttss –– EExxaammppllee ((22)) 
78 
//// CCoonnttiinnuuee wwiitthh tthhee nneexxtt lloooopp vvaalluuee 
}} 
//// CChheecckk iiff tthhee nnuummbbeerr iiss pprriimmee 
iiff ((pprriimmee)) 
{{ 
//// AAdddd tthhee nnuummbbeerr ttoo tthhee lliisstt ooff pprriimmeess 
pprriimmeessLLiisstt..AAdddd((nnuumm));; 
}} 
}} 
//// RReettuurrnn tthhee lliisstt ooff pprriimmeess 
rreettuurrnn pprriimmeessLLiisstt;; 
}}
SSeellff--DDooccuummeennttiinngg CCooddee –– EExxaammppllee 
79 
ppuubblliicc ssttaattiicc LLiisstt<<iinntt>> FFiinnddPPrriimmeess((iinntt ssttaarrtt,, iinntt eenndd)) 
{{ 
LLiisstt<<iinntt>> pprriimmeessLLiisstt == nneeww LLiisstt<<iinntt>>(());; 
ffoorr ((iinntt nnuumm == ssttaarrtt;; nnuumm <<== eenndd;; nnuumm++++)) 
{{ 
bbooooll iissPPrriimmee == IIssPPrriimmee((nnuumm));; 
iiff ((iissPPrriimmee)) 
{{ 
pprriimmeessLLiisstt..AAdddd((nnuumm));; 
GGoooodd ccooddee ddooeess nnoott nneeeedd 
}} 
ccoommmmeennttss.. IItt iiss sseellff-- 
}} 
eexxppllaaiinniinngg.. 
rreettuurrnn pprriimmeessLLiisstt;; 
}} (continues on the next slide)
SSeellff--DDooccuummeennttiinngg CCooddee –– 
EExxaammppllee ((22)) 
80 
pprriivvaattee ssttaattiicc bbooooll IIssPPrriimmee((iinntt nnuumm)) 
{{ 
bbooooll iissPPrriimmee == ttrruuee;; 
iinntt mmaaxxDDiivviiddeerr == MMaatthh..SSqqrrtt((nnuumm));; 
ffoorr ((iinntt ddiivv == 22;; ddiivv <<== mmaaxxDDiivviiddeerr;; ddiivv++++)) 
{{ 
GGoooodd mmeetthhooddss hhaavvee ggoooodd nnaammee 
iiff ((nnuumm %% ddiivv ==== 00)) 
{{ 
//// WWee ffoouunndd aa ddiivviiddeerr -->> tthhee nnuummbbeerr iiss nnoott pprriimmee 
iissPPrriimmee == ffaallssee;; 
bbrreeaakk;; 
}} 
}} 
rreettuurrnn iissPPrriimmee;; 
}} 
aanndd aarree eeaassyy ttoo rreeaadd aanndd 
uunnddeerrssttaanndd.. 
TThhiiss ccoommmmeenntt eexxppllaaiinn nnoonn-- 
oobbvviioouuss ddeettaaiillss.. IItt ddooeess nnoott rreeppeeaatt 
tthhee ccooddee..
CCooddee RReeffaaccttoorriinngg 
IImmpprroovviinngg tthhee QQuuaalliittyy ooff tthhee EExxiissttiinngg CCooddee
CCooddee RReeffaaccttoorriinngg 
WWhhaatt iiss rreeffaaccttoorriinngg ooff tthhee ssoouurrccee ccooddee?? 
IImmpprroovviinngg tthhee ddeessiiggnn aanndd qquuaalliittyy ooff eexxiissttiinngg 
ssoouurrccee ccooddee wwiitthhoouutt cchhaannggiinngg iittss bbeehhaavviioorr 
SStteepp bbyy sstteepp pprroocceessss tthhaatt ttuurrnnss tthhee bbaadd ccooddee 
iinnttoo ggoooodd ccooddee ((iiff ppoossssiibbllee)) 
WWhhyy wwee nneeeedd rreeffaaccttoorriinngg?? 
CCooddee ccoonnssttaannttllyy cchhaannggeess aanndd iittss qquuaalliittyy 
ccoonnssttaannttllyy ddeeggrraaddeess ((uunnlleessss rreeffaaccttoorreedd)) 
RReeqquuiirreemmeennttss oofftteenn cchhaannggee aanndd ccooddee nneeeeddss ttoo 
bbee cchhaannggeedd ttoo ffoollllooww tthheemm 
82
RRaaffaaccttoorriinngg PPaatttteerrnnss 
WWhheenn sshhoouulldd wwee ppeerrffoorrmm rreeffaaccttoorriinngg ooff tthhee ccooddee?? 
BBaadd ssmmeellllss iinn tthhee ccooddee iinnddiiccaattee nneeeedd ooff rreeffaaccttoorriinngg 
UUnniitt tteessttss gguuaarraanntteeee tthhaatt rreeffaaccttoorriinngg ddooeess nnoott 
cchhaannggee tthhee bbeehhaavviioorr 
RRaaffaaccttoorriinngg ppaatttteerrnnss 
LLaarrggee rreeppeeaattiinngg ccooddee ffrraaggmmeennttss  eexxttrraacctt 
rreeppeeaattiinngg ccooddee iinn sseeppaarraattee mmeetthhoodd 
LLaarrggee mmeetthhooddss  sspplliitt tthheemm llooggiiccaallllyy 
LLaarrggee lloooopp bbooddyy oorr ddeeeepp nneessttiinngg  eexxttrraacctt mmeetthhoodd 
83
RRaaffaaccttoorriinngg PPaatttteerrnnss ((22)) 
 RReeffaaccttoorriinngg ppaatttteerrnnss 
CCllaassss oorr mmeetthhoodd hhaass wweeaakk ccoohheessiioonn  sspplliitt iinnttoo 
sseevveerraall ccllaasssseess // mmeetthhooddss 
SSiinnggllee cchhaannggee ccaarrrryy oouutt cchhaannggeess iinn sseevveerraall ccllaasssseess 
 ccllaasssseess hhaavvee ttiigghhtt ccoouupplliinngg  ccoonnssiiddeerr rreeddeessiiggnn 
RReellaatteedd ddaattaa aarree aallwwaayyss uusseedd ttooggeetthheerr bbuutt aarree nnoott 
ppaarrtt ooff aa ssiinnggllee ccllaassss  ggrroouupp tthheemm iinn aa ccllaassss 
AA mmeetthhoodd hhaass ttoooo mmaannyy ppaarraammeetteerrss  ccrreeaattee aa 
ccllaassss ttoo ggrroouuppss ppaarraammeetteerrss ttooggeetthheerr 
AA mmeetthhoodd ccaallllss mmoorree mmeetthhooddss ffrroomm aannootthheerr ccllaassss 
tthhaann ffrroomm iittss oowwnn ccllaassss  mmoovvee iitt 
84
RRaaffaaccttoorriinngg PPaatttteerrnnss ((33)) 
 RReeffaaccttoorriinngg ppaatttteerrnnss 
TTwwoo ccllaasssseess aarree ttiigghhttllyy ccoouupplleedd  mmeerrggee tthheemm oorr 
rreeddeessiiggnn tthheemm ttoo sseeppaarraattee tthheeiirr rreessppoonnssiibbiilliittiieess 
PPuubblliicc nnoonn--ccoonnssttaanntt ffiieellddss  mmaakkee tthheemm pprriivvaattee 
aanndd ddeeffiinnee aacccceessssiinngg pprrooppeerrttiieess 
MMaaggiicc nnuummbbeerrss iinn tthhee ccooddee  ccoonnssiiddeerr eexxttrraaccttiinngg 
ccoonnssttaannttss 
BBaadd nnaammeedd ccllaassss // mmeetthhoodd // vvaarriiaabbllee  rreennaammee iitt 
CCoommpplleexx bboooolleeaann ccoonnddiittiioonn  sspplliitt iitt ttoo sseevveerraall 
eexxpprreessssiioonnss oorr mmeetthhoodd ccaallllss 
85
RRaaffaaccttoorriinngg PPaatttteerrnnss ((44)) 
 RReeffaaccttoorriinngg ppaatttteerrnnss 
CCoommpplleexx eexxpprreessssiioonn  sspplliitt iitt iinnttoo ffeeww ssiimmppllee ppaarrttss 
AA sseett ooff ccoonnssttaannttss iiss uusseedd aass eennuummeerraattiioonn  
ccoonnvveerrtt iitt ttoo eennuummeerraattiioonn 
MMeetthhoodd llooggiicc iiss ttoooo ccoommpplleexx aanndd iiss hhaarrdd ttoo 
uunnddeerrssttaanndd  eexxttrraacctt sseevveerraall mmoorree ssiimmppllee 
mmeetthhooddss oorr eevveenn ccrreeaattee aa nneeww ccllaassss 
UUnnuusseedd ccllaasssseess,, mmeetthhooddss,, ppaarraammeetteerrss,, vvaarriiaabblleess  
rreemmoovvee tthheemm 
LLaarrggee ddaattaa iiss ppaasssseedd bbyy vvaalluuee wwiitthhoouutt aa ggoooodd 
rreeaassoonn  ppaassss iitt bbyy rreeffeerreennccee 
86
RRaaffaaccttoorriinngg PPaatttteerrnnss ((55)) 
 RReeffaaccttoorriinngg ppaatttteerrnnss 
FFeeww ccllaasssseess sshhaarree rreeppeeaattiinngg ffuunnccttiioonnaalliittyy  
eexxttrraacctt bbaassee ccllaassss aanndd rreeuussee tthhee ccoommmmoonn ccooddee 
DDiiffffeerreenntt ccllaasssseess nneeeedd ttoo bbee iinnssttaannttiiaatteedd ddeeppeennddiinngg 
oonn ccoonnffiigguurraattiioonn sseettttiinngg  uussee ffaaccttoorryy 
CCooddee iiss nnoott wweellll ffoorrmmaatttteedd  rreeffoorrmmaatt iitt 
TToooo mmaannyy ccllaasssseess iinn aa ssiinnggllee nnaammeessppaaccee  sspplliitt 
ccllaasssseess llooggiiccaallllyy iinnttoo mmoorree nnaammeessppaacceess 
UUnnuusseedd uussiinngg ddeeffiinniittiioonnss  rreemmoovvee tthheemm 
NNoonn--ddeessccrriippttiivvee eerrrroorr mmeessssaaggeess  iimmpprroovvee tthheemm 
AAbbsseennccee ooff ddeeffeennssiivvee pprrooggrraammmmiinngg  aadddd iitt 
87
CCooddee RReeffaaccttoorriinngg 
LLiivvee DDeemmoo
RReessoouurrcceess 
 TThhee ""HHiigghh--QQuuaalliittyy PPrrooggrraammmmiinngg CCooddee"" ccoouurrssee 
aatt TTeelleerriikk AAccaaddeemmyy:: 
 hhttttpp::////ccooddeeccoouurrssee..tteelleerriikk..ccoomm 
 TThhee bbiibbllee ooff hhiigghh--qquuaalliittyy ssooffttwwaarree ccoonnssttrruuccttiioonn:: 
89 
CCooddee CCoommpplleettee,, 22nndd eeddiittiioonn,, SStteevvee 
MMccCCoonnnneellll,, MMiiccrroossoofftt PPrreessss,, 22000044,, 
IISSBBNN 00773355661199667700,, 
hhttttpp::////wwwwww..cccc22ee..ccoomm
HHiigghh--QQuuaalliittyy PPrrooggrraammmmiinngg 
CCooddee CCoonnssttrruuccttiioonn –– PPaarrtt IIII 
QQQQuuuueeeessssttttiiiioooonnnnssss????
EExxeerrcciisseess 
11.. YYoouu aarree ggiivveenn aa ssoouurrccee ccooddee ttrryyiinngg ttoo ssoollvvee tthhee 
""GGaammee 1155"" ppuuzzzzllee.. RReeffaaccttoorr tthhee ccooddee qquuaalliittyy wwiitthhoouutt 
cchhaannggiinngg iittss ffuunnccttiioonnaalliittyy ((bbuugg ffiixxeess aarree aalllloowweedd)):: 
aa)) RReeffoorrmmaatt tthhee ccooddee.. 
bb)) GGiivvee ggoooodd nnaammeess ttoo aallll iiddeennttiiffiieerrss.. 
cc)) SSpplliitt tthhee ffuunnccttiioonnaalliittyy iinnttoo aapppprroopprriiaattee ccllaasssseess.. 
dd)) RReeffaaccttoorr mmeetthhooddss ttoo aacchhiieevvee ssttrroonngg ccoohheessiioonn aanndd 
lloooossee ccoouupplliinngg.. 
ee)) MMiinniimmiizzee tthhee vvaarriiaabblleess ssccooppee,, ssppaann aanndd lliiffeettiimmee.. 
ff)) IImmpprroovvee tthhee ccoonnttrrooll--ffllooww llooggiicc.. 
gg)) IInnttrroodduuccee ccoonnssttaannttss wwhheerree aapppprroopprriiaattee.. 
hh)) AAdddd ddeeffeennssiivvee pprrooggrraammmmiinngg wwhheerree aapppprroopprriiaattee.. 
91

More Related Content

What's hot

2102 - Manifestação - CPC Atualizado 2018
2102 - Manifestação - CPC Atualizado 20182102 - Manifestação - CPC Atualizado 2018
2102 - Manifestação - CPC Atualizado 2018Consultor JRSantana
 
Kurs tworzenia prezntacji
Kurs tworzenia prezntacjiKurs tworzenia prezntacji
Kurs tworzenia prezntacjikamimodelska82
 
Independent sample_t-test
Independent sample_t-testIndependent sample_t-test
Independent sample_t-testShajar Khan
 
violencia familiar
violencia familiar violencia familiar
violencia familiar pablnilder
 
DPP - Aula 17 - júri (continuação)
DPP - Aula 17 -  júri (continuação)DPP - Aula 17 -  júri (continuação)
DPP - Aula 17 - júri (continuação)direitoturmamanha
 
Comandos para diseño de página Web
Comandos para diseño de página WebComandos para diseño de página Web
Comandos para diseño de página WebArmando Bond
 
18 Hash tables and sets
18 Hash tables and sets18 Hash tables and sets
18 Hash tables and setsmaznabili
 
Lect 1 physical assessment
Lect 1 physical assessmentLect 1 physical assessment
Lect 1 physical assessmentAli Mohamed Aziz
 
2072 - ALEGAÇÕES PRELIMINARES - CPC Atualizado
2072 - ALEGAÇÕES PRELIMINARES  - CPC Atualizado2072 - ALEGAÇÕES PRELIMINARES  - CPC Atualizado
2072 - ALEGAÇÕES PRELIMINARES - CPC AtualizadoConsultor JRSantana
 
CS201- Introduction to Programming- Lecture 40
CS201- Introduction to Programming- Lecture 40CS201- Introduction to Programming- Lecture 40
CS201- Introduction to Programming- Lecture 40Bilal Ahmed
 
Criminalistics questionnaires
Criminalistics questionnairesCriminalistics questionnaires
Criminalistics questionnairesAlexzur
 
2074 - APELAÇÃO CPC Atualizado 2018
2074 - APELAÇÃO CPC Atualizado 20182074 - APELAÇÃO CPC Atualizado 2018
2074 - APELAÇÃO CPC Atualizado 2018Consultor JRSantana
 

What's hot (19)

2102 - Manifestação - CPC Atualizado 2018
2102 - Manifestação - CPC Atualizado 20182102 - Manifestação - CPC Atualizado 2018
2102 - Manifestação - CPC Atualizado 2018
 
Kurs tworzenia prezntacji
Kurs tworzenia prezntacjiKurs tworzenia prezntacji
Kurs tworzenia prezntacji
 
Aula 1 (2)
Aula 1 (2)Aula 1 (2)
Aula 1 (2)
 
Independent sample_t-test
Independent sample_t-testIndependent sample_t-test
Independent sample_t-test
 
Chapter 6 testbench
Chapter 6 testbenchChapter 6 testbench
Chapter 6 testbench
 
violencia familiar
violencia familiar violencia familiar
violencia familiar
 
DPP - Aula 17 - júri (continuação)
DPP - Aula 17 -  júri (continuação)DPP - Aula 17 -  júri (continuação)
DPP - Aula 17 - júri (continuação)
 
Melhorando as dinâmicas pr george
Melhorando as dinâmicas pr georgeMelhorando as dinâmicas pr george
Melhorando as dinâmicas pr george
 
Comandos para diseño de página Web
Comandos para diseño de página WebComandos para diseño de página Web
Comandos para diseño de página Web
 
18 Hash tables and sets
18 Hash tables and sets18 Hash tables and sets
18 Hash tables and sets
 
Lect 1 physical assessment
Lect 1 physical assessmentLect 1 physical assessment
Lect 1 physical assessment
 
AULA TEORIAS DE CARL ROGERS
AULA TEORIAS DE CARL ROGERSAULA TEORIAS DE CARL ROGERS
AULA TEORIAS DE CARL ROGERS
 
cardiac arrhythmias
cardiac arrhythmiascardiac arrhythmias
cardiac arrhythmias
 
2072 - ALEGAÇÕES PRELIMINARES - CPC Atualizado
2072 - ALEGAÇÕES PRELIMINARES  - CPC Atualizado2072 - ALEGAÇÕES PRELIMINARES  - CPC Atualizado
2072 - ALEGAÇÕES PRELIMINARES - CPC Atualizado
 
Iglesia de Filadelfia
Iglesia de FiladelfiaIglesia de Filadelfia
Iglesia de Filadelfia
 
Gelombang
GelombangGelombang
Gelombang
 
CS201- Introduction to Programming- Lecture 40
CS201- Introduction to Programming- Lecture 40CS201- Introduction to Programming- Lecture 40
CS201- Introduction to Programming- Lecture 40
 
Criminalistics questionnaires
Criminalistics questionnairesCriminalistics questionnaires
Criminalistics questionnaires
 
2074 - APELAÇÃO CPC Atualizado 2018
2074 - APELAÇÃO CPC Atualizado 20182074 - APELAÇÃO CPC Atualizado 2018
2074 - APELAÇÃO CPC Atualizado 2018
 

Viewers also liked

00 Fundamentals of csharp course introduction
00 Fundamentals of csharp course introduction00 Fundamentals of csharp course introduction
00 Fundamentals of csharp course introductionmaznabili
 
20 Object-oriented programming principles
20 Object-oriented programming principles20 Object-oriented programming principles
20 Object-oriented programming principlesmaznabili
 
Everything You know about CSS is Wrong
Everything You know about CSS is WrongEverything You know about CSS is Wrong
Everything You know about CSS is Wrongchandleryu
 
22 Methodology of problem solving
22 Methodology of problem solving22 Methodology of problem solving
22 Methodology of problem solvingmaznabili
 
Creating a CSS layout from scratch
Creating a CSS layout from scratchCreating a CSS layout from scratch
Creating a CSS layout from scratchDesignveloper
 
04 Console input output-
04 Console input output-04 Console input output-
04 Console input output-maznabili
 
03 Operators and expressions
03 Operators and expressions03 Operators and expressions
03 Operators and expressionsmaznabili
 
08 Numeral systems
08 Numeral systems08 Numeral systems
08 Numeral systemsmaznabili
 
05 Conditional statements
05 Conditional statements05 Conditional statements
05 Conditional statementsmaznabili
 
01 Introduction to programming
01 Introduction to programming01 Introduction to programming
01 Introduction to programmingmaznabili
 
12 Exceptions handling
12 Exceptions handling12 Exceptions handling
12 Exceptions handlingmaznabili
 
15 Text files
15 Text files15 Text files
15 Text filesmaznabili
 
11 Using classes and objects
11 Using classes and objects11 Using classes and objects
11 Using classes and objectsmaznabili
 
13 Strings and text processing
13 Strings and text processing13 Strings and text processing
13 Strings and text processingmaznabili
 

Viewers also liked (20)

09 Methods
09 Methods09 Methods
09 Methods
 
00 Fundamentals of csharp course introduction
00 Fundamentals of csharp course introduction00 Fundamentals of csharp course introduction
00 Fundamentals of csharp course introduction
 
20 Object-oriented programming principles
20 Object-oriented programming principles20 Object-oriented programming principles
20 Object-oriented programming principles
 
Css advance
Css   advanceCss   advance
Css advance
 
Everything You know about CSS is Wrong
Everything You know about CSS is WrongEverything You know about CSS is Wrong
Everything You know about CSS is Wrong
 
Layout
LayoutLayout
Layout
 
Css positioning
Css positioningCss positioning
Css positioning
 
22 Methodology of problem solving
22 Methodology of problem solving22 Methodology of problem solving
22 Methodology of problem solving
 
Creating a CSS layout from scratch
Creating a CSS layout from scratchCreating a CSS layout from scratch
Creating a CSS layout from scratch
 
04 Console input output-
04 Console input output-04 Console input output-
04 Console input output-
 
Floating
FloatingFloating
Floating
 
Steps for CSS Layout
Steps for CSS LayoutSteps for CSS Layout
Steps for CSS Layout
 
03 Operators and expressions
03 Operators and expressions03 Operators and expressions
03 Operators and expressions
 
08 Numeral systems
08 Numeral systems08 Numeral systems
08 Numeral systems
 
05 Conditional statements
05 Conditional statements05 Conditional statements
05 Conditional statements
 
01 Introduction to programming
01 Introduction to programming01 Introduction to programming
01 Introduction to programming
 
12 Exceptions handling
12 Exceptions handling12 Exceptions handling
12 Exceptions handling
 
15 Text files
15 Text files15 Text files
15 Text files
 
11 Using classes and objects
11 Using classes and objects11 Using classes and objects
11 Using classes and objects
 
13 Strings and text processing
13 Strings and text processing13 Strings and text processing
13 Strings and text processing
 

Similar to 21 High-quality programming code construction part-ii

Maurizio Elia. I problemi psichiatrici in età adulta.
Maurizio Elia. I problemi psichiatrici in età adulta.Maurizio Elia. I problemi psichiatrici in età adulta.
Maurizio Elia. I problemi psichiatrici in età adulta.claudiopagano
 
Globally harmonized system (ghs) classification and labeling
Globally harmonized system (ghs) classification and labelingGlobally harmonized system (ghs) classification and labeling
Globally harmonized system (ghs) classification and labelingArthur Francis Alcantara
 
Fluid & electrolytes & acid base
Fluid & electrolytes & acid baseFluid & electrolytes & acid base
Fluid & electrolytes & acid baseMichelle Harris
 
CS201- Introduction to Programming- Lecture 10
CS201- Introduction to Programming- Lecture 10CS201- Introduction to Programming- Lecture 10
CS201- Introduction to Programming- Lecture 10Bilal Ahmed
 
WHY THE SEATTLE MARKET & EB-5
WHY THE SEATTLE MARKET & EB-5WHY THE SEATTLE MARKET & EB-5
WHY THE SEATTLE MARKET & EB-5usasiapacific
 
Avaliacao de investimentos
Avaliacao de investimentosAvaliacao de investimentos
Avaliacao de investimentosdanilobotucatu
 
Anatomiadelaparatoreproductorfemenino
Anatomiadelaparatoreproductorfemenino Anatomiadelaparatoreproductorfemenino
Anatomiadelaparatoreproductorfemenino Karen Toledo
 
Osteo osteomalacia ricket2
Osteo osteomalacia ricket2Osteo osteomalacia ricket2
Osteo osteomalacia ricket2padli ahmad
 
06.introduction to middle third fractures
06.introduction to  middle third fractures  06.introduction to  middle third fractures
06.introduction to middle third fractures vasanramkumar
 
Former Chapter 3
Former Chapter 3 Former Chapter 3
Former Chapter 3 Lizz Renee
 
Dielectrics lect28
Dielectrics lect28Dielectrics lect28
Dielectrics lect28Joao Tan
 
CS201- Introduction to Programming- Lecture 38
CS201- Introduction to Programming- Lecture 38CS201- Introduction to Programming- Lecture 38
CS201- Introduction to Programming- Lecture 38Bilal Ahmed
 
Aqua Eagles Presentation August 25th 2014
Aqua Eagles Presentation August 25th 2014 Aqua Eagles Presentation August 25th 2014
Aqua Eagles Presentation August 25th 2014 amandaleaallen
 
introduccion basica php
introduccion basica phpintroduccion basica php
introduccion basica phpPablo Mamani
 
Agency and The Use of Electronic Media
Agency and The Use of Electronic MediaAgency and The Use of Electronic Media
Agency and The Use of Electronic MediaSteve Lines
 
GastritisZaydoon
GastritisZaydoonGastritisZaydoon
GastritisZaydoonZay Doon
 
Creating the Startup The Accounting Panorama
Creating the Startup The Accounting PanoramaCreating the Startup The Accounting Panorama
Creating the Startup The Accounting PanoramaSteve Lines
 

Similar to 21 High-quality programming code construction part-ii (20)

Maurizio Elia. I problemi psichiatrici in età adulta.
Maurizio Elia. I problemi psichiatrici in età adulta.Maurizio Elia. I problemi psichiatrici in età adulta.
Maurizio Elia. I problemi psichiatrici in età adulta.
 
Globally harmonized system (ghs) classification and labeling
Globally harmonized system (ghs) classification and labelingGlobally harmonized system (ghs) classification and labeling
Globally harmonized system (ghs) classification and labeling
 
Fluid & electrolytes & acid base
Fluid & electrolytes & acid baseFluid & electrolytes & acid base
Fluid & electrolytes & acid base
 
CS201- Introduction to Programming- Lecture 10
CS201- Introduction to Programming- Lecture 10CS201- Introduction to Programming- Lecture 10
CS201- Introduction to Programming- Lecture 10
 
1334006 mitali
1334006 mitali1334006 mitali
1334006 mitali
 
Training methods
Training methodsTraining methods
Training methods
 
debishis (3)
debishis (3)debishis (3)
debishis (3)
 
WHY THE SEATTLE MARKET & EB-5
WHY THE SEATTLE MARKET & EB-5WHY THE SEATTLE MARKET & EB-5
WHY THE SEATTLE MARKET & EB-5
 
Avaliacao de investimentos
Avaliacao de investimentosAvaliacao de investimentos
Avaliacao de investimentos
 
Anatomiadelaparatoreproductorfemenino
Anatomiadelaparatoreproductorfemenino Anatomiadelaparatoreproductorfemenino
Anatomiadelaparatoreproductorfemenino
 
Osteo osteomalacia ricket2
Osteo osteomalacia ricket2Osteo osteomalacia ricket2
Osteo osteomalacia ricket2
 
06.introduction to middle third fractures
06.introduction to  middle third fractures  06.introduction to  middle third fractures
06.introduction to middle third fractures
 
Former Chapter 3
Former Chapter 3 Former Chapter 3
Former Chapter 3
 
Dielectrics lect28
Dielectrics lect28Dielectrics lect28
Dielectrics lect28
 
CS201- Introduction to Programming- Lecture 38
CS201- Introduction to Programming- Lecture 38CS201- Introduction to Programming- Lecture 38
CS201- Introduction to Programming- Lecture 38
 
Aqua Eagles Presentation August 25th 2014
Aqua Eagles Presentation August 25th 2014 Aqua Eagles Presentation August 25th 2014
Aqua Eagles Presentation August 25th 2014
 
introduccion basica php
introduccion basica phpintroduccion basica php
introduccion basica php
 
Agency and The Use of Electronic Media
Agency and The Use of Electronic MediaAgency and The Use of Electronic Media
Agency and The Use of Electronic Media
 
GastritisZaydoon
GastritisZaydoonGastritisZaydoon
GastritisZaydoon
 
Creating the Startup The Accounting Panorama
Creating the Startup The Accounting PanoramaCreating the Startup The Accounting Panorama
Creating the Startup The Accounting Panorama
 

More from maznabili

21 high-quality programming code construction part-i
21 high-quality programming code construction part-i21 high-quality programming code construction part-i
21 high-quality programming code construction part-imaznabili
 
17 Trees and graphs
17 Trees and graphs17 Trees and graphs
17 Trees and graphsmaznabili
 
16 Linear data structures
16 Linear data structures16 Linear data structures
16 Linear data structuresmaznabili
 
14 Defining classes
14 Defining classes14 Defining classes
14 Defining classesmaznabili
 
10 Recursion
10 Recursion10 Recursion
10 Recursionmaznabili
 
02 Primitive data types and variables
02 Primitive data types and variables02 Primitive data types and variables
02 Primitive data types and variablesmaznabili
 

More from maznabili (8)

21 high-quality programming code construction part-i
21 high-quality programming code construction part-i21 high-quality programming code construction part-i
21 high-quality programming code construction part-i
 
17 Trees and graphs
17 Trees and graphs17 Trees and graphs
17 Trees and graphs
 
16 Linear data structures
16 Linear data structures16 Linear data structures
16 Linear data structures
 
14 Defining classes
14 Defining classes14 Defining classes
14 Defining classes
 
10 Recursion
10 Recursion10 Recursion
10 Recursion
 
07 Arrays
07 Arrays07 Arrays
07 Arrays
 
06 Loops
06 Loops06 Loops
06 Loops
 
02 Primitive data types and variables
02 Primitive data types and variables02 Primitive data types and variables
02 Primitive data types and variables
 

21 High-quality programming code construction part-ii

  • 1. HHiigghh--QQuuaalliittyy PPrrooggrraammmmiinngg CCooddee CCoonnssttrruuccttiioonn –– PPaarrtt IIII RReevveeaalliinngg tthhee SSeeccrreettss ooff SSeellff--DDooccuummeennttiinngg CCooddee SSvveettlliinn NNaakkoovv TTeelleerriikk CCoorrppoorraattiioonn wwwwww..tteelleerriikk..ccoomm FFoorr CC## DDeevveellooppeerrss
  • 2. TTaabbllee ooff CCoonntteennttss HHiigghh--QQuuaalliittyy MMeetthhooddss CCoohheessiioonn aanndd CCoouupplliinngg UUssiinngg VVaarriiaabblleess CCoorrrreeccttllyy SSccooppee,, SSppaann,, LLiiffeettiimmee UUssiinngg EExxpprreessssiioonnss CCoorrrreeccttllyy UUssiinngg CCoonnssttaannttss UUssiinngg CCoonnttrrooll--FFllooww LLooggiicc CCoorrrreeccttllyy CCoonnddiittiioonnaall SSttaatteemmeennttss LLooooppss 2
  • 3. TTaabbllee ooff CCoonntteennttss ((22)) DDeeffeennssiivvee PPrrooggrraammmmiinngg AAsssseerrttiioonnss aanndd EExxcceeppttiioonnss  CCoommmmeennttss aanndd DDooccuummeennttaattiioonn SSeellff--DDooccuummeennttiinngg CCooddee  CCooddee RReeffaaccttoorriinngg IImmpprroovviinngg tthhee QQuuaalliittyy ooff EExxiissttiinngg CCooddee 3
  • 4. HHiigghh--QQuuaalliittyy MMeetthhooddss HHooww ttoo DDeessiiggnn aanndd IImmpplleemmeenntt HHiigghh--QQuuaalliittyy MMeetthhooddss?? UUnnddeerrssttaannddiinngg CCoohheessiioonn aanndd CCoouupplliinngg
  • 5. WWhhyy WWee NNeeeedd MMeetthhooddss?? MMeetthhooddss aarree iimmppoorrttaanntt iinn ssooffttwwaarree ddeevveellooppmmeenntt RReedduuccee ccoommpplleexxiittyy DDiivviiddee aanndd ccoonnqquueerr:: ccoommpplleexx pprroobblleemmss ccaann bbee sspplliitt iinnttoo ccoommppoossiittiioonn ooff sseevveerraall ssiimmppllee oonneess IImmpprroovvee ccooddee rreeaaddaabbiilliittyy SSmmaallll mmeetthhooddss wwiitthh ggoooodd mmeetthhoodd nnaammeess mmaakkee tthhee ccooddee sseellff--ddooccuummeennttiinngg AAvvooiidd dduupplliiccaattiinngg ccooddee DDuupplliiccaattiinngg ccooddee iiss hhaarrdd ttoo mmaaiinnttaaiinn 5
  • 6. WWhhyy WWee NNeeeedd MMeetthhooddss?? ((22)) MMeetthhooddss ssiimmpplliiffyy ssooffttwwaarree ddeevveellooppmmeenntt HHiiddee iimmpplleemmeennttaattiioonn ddeettaaiillss CCoommpplleexx llooggiicc iiss eennccaappssuullaatteedd aanndd hhiiddddeenn bbeehhiinndd aa ssiimmppllee iinntteerrffaaccee AAllggoorriitthhmmss aanndd ddaattaa ssttrruuccttuurreess aarree hhiiddddeenn aanndd ccaann bbee ttrraannssppaarreennttllyy rreeppllaacceedd llaatteerr IInnccrreeaassee tthhee lleevveell ooff aabbssttrraaccttiioonn MMeetthhooddss aaddddrreessss tthhee bbuussiinneessss pprroobblleemm,, nnoott tthhee tteecchhnniiccaall iimmpplleemmeennttaattiioonn:: 6 BBaannkk..aaccccoouunnttss[[ccuussttoommeerr]]..ddeeppoossiitt((550000));;
  • 7. UUssiinngg MMeetthhooddss:: FFuunnddaammeennttaallss  FFuunnddaammeennttaall pprriinncciippllee ooff ccoorrrreecctt mmeetthhoodd uussaaggee:: MMeetthhooddss sshhoouulldd ddoo eexxaaccttllyy wwhhaatt tthheeiirr nnaammeess ssaayy NNootthhiinngg lleessss NNootthhiinngg mmoorree  IInn ccaassee ooff iinnccoorrrreecctt iinnppuutt oorr iinnccoorrrreecctt pprreeccoonnddiittiioonnss,, aann eerrrroorr sshhoouulldd bbee iinnddiiccaatteedd 7 AA mmeetthhoodd sshhoouulldd ddoo wwhhaatt iittss nnaammee ssaayyss oorr sshhoouulldd iinnddiiccaattee aann eerrrroorr.. AAnnyy ootthheerr bbeehhaavviioouurr iiss iinnccoorrrreecctt!!
  • 8. GGoooodd MMeetthhooddss –– EExxaammpplleess 8 lloonngg SSuumm((iinntt[[]] eelleemmeennttss)) {{ lloonngg ssuumm == 00;; ffoorreeaacchh ((iinntt eelleemmeenntt iinn eelleemmeennttss)) {{ ssuumm == ssuumm ++ eelleemmeenntt;; }} rreettuurrnn ssuumm;; }} ddoouubbllee CCaallccTTrriiaanngglleeAArreeaa((ddoouubbllee aa,, ddoouubbllee bb,, ddoouubbllee cc)) {{ iiff ((aa <<== 00 |||| bb <<== 00 |||| cc <<== 00)) {{ tthhrrooww nneeww AArrgguummeennttEExxcceeppttiioonn((""SSiiddeess sshhoouulldd bbee ppoossiittiivvee..""));; }} ddoouubbllee ss == ((aa ++ bb ++ cc)) // 22;; ddoouubbllee aarreeaa == MMaatthh..SSqqrrtt((ss ** ((ss -- aa)) ** ((ss -- bb)) ** ((ss -- cc))));; rreettuurrnn aarreeaa;; }}
  • 9. SSyymmppttoommss ooff WWrroonngg MMeetthhooddss MMeetthhoodd tthhaatt ddooeess ssoommeetthhiinngg ddiiffffeerreenntt tthhaann iittss nnaammee,, iiss wwrroonngg ffoorr aatt lleeaasstt oonnee ooff tthheessee rreeaassoonnss::  TThhee mmeetthhoodd ssoommeettiimmeess rreettuurrnnss iinnccoorrrreecctt rreessuulltt  bbuugg  TThhee mmeetthhoodd rreettuurrnnss iinnccoorrrreecctt oouuttppuutt wwhheenn iittss iinnppuutt iiss iinnccoorrrreecctt oorr uunnuussuuaall  llooww qquuaalliittyy  AAcccceeppttaabbllee ffoorr pprriivvaattee mmeetthhooddss oonnllyy  TThhee mmeetthhoodd ddooeess ttoooo mmaannyy tthhiinnggss  bbaadd ccoohheessiioonn  TThhee mmeetthhoodd hhaass ssiiddee eeffffeeccttss  ssppaagghheettttii ccooddee MMeetthhoodd rreettuurrnnss ssttrraannggee vvaalluuee wwhheenn aann eerrrroorr ccoonnddiittiioonn hhaappppeennss  iitt sshhoouulldd iinnddiiccaattee tthhee eerrrroorr 9
  • 10. WWrroonngg MMeetthhooddss –– EExxaammpplleess 10 lloonngg SSuumm((iinntt[[]] eelleemmeennttss)) {{ lloonngg ssuumm == 00;; ffoorr ((iinntt ii == 00;; ii << eelleemmeennttss..LLeennggtthh;; ii++++)) {{ ssuumm == ssuumm ++ eelleemmeennttss[[ii]];; eelleemmeennttss[[ii]] == 00;; }} HHiiddddeenn ssiiddee eeffffeecctt rreettuurrnn ssuumm;; }} ddoouubbllee CCaallccTTrriiaanngglleeAArreeaa((ddoouubbllee aa,, ddoouubbllee bb,, ddoouubbllee cc)) {{ iiff ((aa <<== 00 |||| bb <<== 00 |||| cc <<== 00)) {{ IInnccoorrrreecctt rreessuulltt.. TThhrrooww aann eexxcceeppttiioonn rreettuurrnn 00;; }} ddoouubbllee ss == ((aa ++ bb ++ cc)) // 22;; iinnsstteeaadd.. ddoouubbllee aarreeaa == MMaatthh..SSqqrrtt((ss ** ((ss -- aa)) ** ((ss -- bb)) ** ((ss -- cc))));; rreettuurrnn aarreeaa;; }}
  • 11. SSttrroonngg CCoohheessiioonn MMeetthhooddss sshhoouulldd hhaavvee ssttrroonngg ccoohheessiioonn SShhoouulldd aaddddrreessss ssiinnggllee ttaasskk aanndd aaddddrreessss iitt wweellll SShhoouulldd hhaavvee cclleeaarr iinntteenntt MMeetthhooddss tthhaatt aaddddrreessss sseevveerraall ttaasskkss iinn tthhee ssaammee ttiimmee aarree hhaarrdd ttoo bbee nnaammeedd  SSttrriinngg ccoohheessiioonn iiss uusseedd iinn eennggiinneeeerriinngg IInn ccoommppuutteerr hhaarrddwwaarree aannyy PPCC ccoommppoonneenntt ssoollvveess aa ssiinnggllee ttaasskk EE..gg.. hhaarrdd ddiisskk ppeerrffoorrmmss aa ssiinnggllee ttaasskk –– ssttoorraaggee 11
  • 12. AAcccceeppttaabbllee TTyyppeess ooff CCoohheessiioonn  FFuunnccttiioonnaall ccoohheessiioonn ((iinnddeeppeennddeenntt ffuunnccttiioonn)) MMeetthhoodd ppeerrffoorrmmss cceerrttaaiinn wweellll--ddeeffiinneedd ccaallccuullaattiioonn aanndd rreettuurrnnss aa ssiinnggllee rreessuulltt TThhee eennttiirree iinnppuutt iiss ppaasssseedd tthhrroouugghh ppaarraammeetteerrss aanndd tthhee eennttiirree oouuttppuutt iiss rreettuurrnneedd aass rreessuulltt NNoo eexxtteerrnnaall ddeeppeennddeenncciieess oorr ssiiddee eeffffeeccttss EExxaammpplleess:: 12 MMaatthh..SSqqrrtt((vvaalluuee))  ssqquuaarree rroooott CChhaarr..IIssLLeetttteerrOOrrDDiiggiitt((cchh)) SSttrriinngg..SSuubbssttrriinngg((ssttrr,, ssttaarrttIInnddeexx,, lleennggtthh))
  • 13. AAcccceeppttaabbllee TTyyppeess ooff CCoohheessiioonn ((22))  SSeeqquueennttiiaall ccoohheessiioonn ((aallggoorriitthhmm)) MMeetthhoodd ppeerrffoorrmmss cceerrttaaiinn sseeqquueennccee ooff ooppeerraattiioonnss ttoo ppeerrffoorrmm aa ssiinnggllee ttaasskk aanndd aacchhiieevvee cceerrttaaiinn rreessuulltt  IItt eennccaappssuullaatteess aann aallggoorriitthhmm EExxaammppllee:: 11..CCoonnnneecctt ttoo mmaaiill sseerrvveerr 22..SSeenndd mmeessssaaggee hheeaaddeerrss 33..SSeenndd mmeessssaaggee bbooddyy 44..DDiissccoonnnneecctt ffrroomm tthhee sseerrvveerr 13 SSeennddEEmmaaiill((rreecciippiieenntt,, ssuubbjjeecctt,, bbooddyy))
  • 14. AAcccceeppttaabbllee TTyyppeess ooff CCoohheessiioonn ((33))  CCoommmmuunniiccaattiioonnaall ccoohheessiioonn ((ccoommmmoonn ddaattaa)) AA sseett ooff ooppeerraattiioonnss uusseedd ttoo pprroocceessss cceerrttaaiinn ddaattaa aanndd pprroodduuccee aa rreessuulltt EExxaammppllee:: 11..RReettrriieevvee iinnppuutt ddaattaa ffrroomm ddaattaabbaassee 22..PPeerrffoorrmm iinntteerrnnaall ccaallccuullaattiioonnss oovveerr rreettrriieevveedd ddaattaa 33..BBuuiilldd tthhee rreeppoorrtt 44..FFoorrmmaatt tthhee rreeppoorrtt aass EExxcceell wwoorrkksshheeeett 55..DDiissppllaayy tthhee EExxcceell wwoorrkksshheeeett oonn tthhee ssccrreeeenn 14 DDiissppllaayyAAnnnnuuaallEExxppeennsseessRReeppoorrtt((iinntt eemmppllooyyeeeeIIdd))
  • 15. AAcccceeppttaabbllee TTyyppeess ooff CCoohheessiioonn ((44))  TTeemmppoorraall ccoohheessiioonn ((ttiimmee rreellaatteedd aaccttiivviittiieess)) OOppeerraattiioonnss tthhaatt aarree ggeenneerraallllyy nnoott rreellaatteedd bbuutt nneeeedd ttoo hhaappppeenn iinn aa cceerrttaaiinn mmoommeenntt EExxaammpplleess:: 11.. LLooaadd uusseerr sseettttiinnggss 22.. CChheecckk ffoorr uuppddaatteess 33.. LLooaadd aallll iinnvvooiicceess ffrroomm tthhee ddaattaabbaassee  SSeeqquueennccee ooff aaccttiioonnss ttoo hhaannddllee tthhee eevveenntt 15 IInniittiiaalliizzeeAApppplliiccaattiioonn(()) BBuuttttoonnCCoonnffiirrmmCClliicckk(())
  • 16. UUnnaacccceeppttaabbllee CCoohheessiioonn  LLooggiiccaall ccoohheessiioonn PPeerrffoorrmmss aa ddiiffffeerreenntt ooppeerraattiioonn ddeeppeennddiinngg oonn aann iinnppuutt ppaarraammeetteerr  IInnccoorrrreecctt eexxaammppllee::  CCaann bbee aacccceeppttaabbllee iinn eevveenntt hhaannddlleerrss ((ee..gg.. tthhee KKeeyyDDoowwnn eevveenntt iinn WWiinnddoowwss FFoorrmmss)) 16 oobbjjeecctt RReeaaddAAllll((iinntt ooppeerraattiioonnCCooddee)) {{ iiff ((ooppeerraattiioonnCCooddee ==== 11)) …… //// RReeaadd ppeerrssoonn nnaammee eellssee iiff ((ooppeerraattiioonnCCooddee ==== 22)) …… //// RReeaadd aaddddrreessss eellssee iiff ((ooppeerraattiioonnCCooddee ==== 33)) …… //// RReeaadd ddaattee …… }}
  • 17. UUnnaacccceeppttaabbllee CCoohheessiioonn  CCooiinncciiddeennttaall ccoohheessiioonn ((ssppaagghheettttii)) NNoott rreellaatteedd ((rraannddoomm)) ooppeerraattiioonnss aarree ggrroouuppeedd iinn aa mmeetthhoodd ffoorr uunncclleeaarr rreeaassoonn IInnccoorrrreecctt eexxaammppllee:: 11..PPrreeppaarreess aannnnuuaall iinnccoommeess rreeppoorrtt ffoorr ggiivveenn ccuussttoommeerr 22..SSoorrttss aann aarrrraayy ooff iinntteeggeerrss iinn iinnccrreeaassiinngg oorrddeerr 33..CCaallccuullaatteess tthhee ssqquuaarree rroooott ooff ggiivveenn nnuummbbeerr 44..CCoonnvveerrttss ggiivveenn MMPP33 ffiillee iinnttoo WWMMAA ffoorrmmaatt 55..SSeennddss eemmaaiill ttoo ggiivveenn ccuussttoommeerr 17 HHaannddlleeSSttuuffff((ccuussttoommeerrIIdd,, iinntt[[]],, rreeff ssqqrrttVVaalluuee,, mmpp33FFiilleeNNaammee,, eemmaaiillAAddddrreessss))
  • 18. LLoooossee CCoouupplliinngg WWhhaatt iiss lloooossee ccoouupplliinngg?? MMiinniimmaall ddeeppeennddeenncceess ooff tthhee mmeetthhoodd oonn tthhee ootthheerr ppaarrttss ooff tthhee ssoouurrccee ccooddee MMiinniimmaall ddeeppeennddeenncceess oonn tthhee ccllaassss mmeemmbbeerrss oorr eexxtteerrnnaall ccllaasssseess aanndd tthheeiirr mmeemmbbeerrss NNoo ssiiddee eeffffeeccttss IIff tthhee ccoouupplliinngg iiss lloooossee,, wwee ccaann eeaassiillyy rreeuussee aa mmeetthhoodd oorr ggrroouupp ooff mmeetthhooddss iinn aa nneeww pprroojjeecctt  TTiigghhtt ccoouupplliinngg  ssppaagghheettttii ccooddee 18
  • 19. LLoooossee CCoouupplliinngg ((22))  TThhee iiddeeaall ccoouupplliinngg AA mmeetthhooddss ddeeppeennddss oonnllyy oonn iittss ppaarraammeetteerrss DDooeess nnoott hhaavvee aannyy ootthheerr iinnppuutt oorr oouuttppuutt EExxaammppllee:: MMaatthh..SSqqrrtt RReeaall wwoorrlldd CCoommpplleexx ssooffttwwaarree ccaannnnoott aavvooiidd ccoouupplliinngg bbuutt ccoouulldd mmaakkee iitt aass lloooossee aass ppoossssiibbllee EExxaammppllee:: ccoommpplleexx eennccrryyppttiioonn aallggoorriitthhmm ppeerrffoorrmmss iinniittiiaalliizzaattiioonn,, eennccrryyppttiioonn,, ffiinnaalliizzaattiioonn 19
  • 20. CCoouupplliinngg –– EExxaammppllee  IInntteennttiioonnaallllyy iinnccrreeaasseedd ccoouupplliinngg ffoorr mmoorree fflleexxiibbiilliittyy ((..NNEETT ccrryyppttooggrraapphhyy AAPPII)):: 20 bbyyttee[[]] EEnnccrryyppttAAEESS((bbyyttee[[]] iinnppuuttDDaattaa,, bbyyttee[[]] sseeccrreettKKeeyy)) {{ RRiijjnnddaaeell ccrryyppttooAAllgg == nneeww RRiijjnnddaaeellMMaannaaggeedd(());; ccrryyppttooAAllgg..KKeeyy == sseeccrreettKKeeyy;; ccrryyppttooAAllgg..GGeenneerraatteeIIVV(());; MMeemmoorryySSttrreeaamm ddeessttSSttrreeaamm == nneeww MMeemmoorryySSttrreeaamm(());; CCrryyppttooSSttrreeaamm ccssEEnnccrryyppttoorr == nneeww CCrryyppttooSSttrreeaamm(( ddeessttSSttrreeaamm,, ccrryyppttooAAllgg..CCrreeaatteeEEnnccrryyppttoorr(()),, CCrryyppttooSSttrreeaammMMooddee..WWrriittee));; ccssEEnnccrryyppttoorr..WWrriittee((iinnppuuttDDaattaa,, 00,, iinnppuuttDDaattaa..LLeennggtthh));; ccssEEnnccrryyppttoorr..FFlluusshhFFiinnaallBBlloocckk(());; bbyyttee[[]] eennccrryypptteeddDDaattaa == ddeessttSSttrreeaamm..TTooAArrrraayy(());; rreettuurrnn eennccrryypptteeddDDaattaa;; }}
  • 21. LLoooossee CCoouupplliinngg –– EExxaammppllee  TToo rreedduuccee ccoouupplliinngg wwee ccaann mmaakkee uuttiilliittyy ccllaasssseess tthhaatt hhiiddee tthhee ccoommpplleexx llooggiicc aanndd pprroovviiddee ssiimmppllee ssttrraaiigghhttffoorrwwaarrdd iinntteerrffaaccee ((aa..kk..aa.. ffaaççaaddee)):: 21 bbyyttee[[]] EEnnccrryyppttAAEESS((bbyyttee[[]] iinnppuuttDDaattaa,, bbyyttee[[]] sseeccrreettKKeeyy)) {{ MMeemmoorryySSttrreeaamm iinnppuuttSSttrreeaamm == nneeww MMeemmoorryySSttrreeaamm((iinnppuuttDDaattaa));; MMeemmoorryySSttrreeaamm oouuttppuuttSSttrreeaamm == nneeww MMeemmoorryySSttrreeaamm(());; EEnnccrryyppttiioonnUUttiillss..EEnnccrryyppttAAEESS(( iinnppuuttSSttrreeaamm,, oouuttppuuttSSttrreeaamm,, sseeccrreettKKeeyy));; bbyyttee[[]] eennccrryypptteeddDDaattaa == oouuttppuuttSSttrreeaamm..TTooAArrrraayy(());; rreettuurrnn eennccrryypptteeddDDaattaa;; }}
  • 22. TTiigghhtt CCoouupplliinngg –– EExxaammppllee  PPaassssiinngg ppaarraammeetteerrss tthhrroouugghh ccllaassss ffiieellddss TTyyppiiccaall eexxaammppllee ooff ttiigghhtt ccoouupplliinngg DDoonn''tt ddoo tthhiiss uunnlleessss yyoouu hhaavvee aa ggoooodd rreeaassoonn!! 22 ccllaassss SSuummaattoorr {{ ppuubblliicc iinntt aa,, bb;; iinntt SSuumm(()) {{ WWhhyy ddoonn''tt ppaassss tthhee nnuummbbeerrss aass ppaarraammeetteerrss?? rreettuurrnn aa ++ bb;; }} ssttaattiicc vvooiidd MMaaiinn(()) {{ SSuummaattoorr ssuummaattoorr == nneeww SSuummaattoorr(()) {{ aa == 33,, bb == 55 }};; CCoonnssoollee..WWrriitteeLLiinnee((ssuummaattoorr..SSuumm(())));; }} }}
  • 23. LLoooossee CCoouupplliinngg aanndd OOOOPP RReedduucciinngg ccoouupplliinngg wwiitthh OOOOPP tteecchhnniiqquueess AAbbssttrraaccttiioonn DDeeffiinnee aa ppuubblliicc iinntteerrffaaccee aanndd hhiiddee tthhee iimmpplleemmeennttaattiioonn ddeettaaiillss EEnnccaappssuullaattiioonn MMaakkee mmeetthhooddss aanndd ffiieellddss pprriivvaattee uunnlleessss tthheeyy aarree ddeeffiinniitteellyy nneeeeddeedd DDeeffiinnee nneeww mmeemmbbeerrss aass pprriivvaattee IInnccrreeaassee vviissiibbiilliittyy aass ssoooonn aass tthhiiss iiss nneeeeddeedd 23
  • 24. AAcccceeppttaabbllee CCoouupplliinngg MMeetthhoodd iiss ccoouupplleedd ttoo iittss ppaarraammeetteerrss TThhiiss iiss tthhee bbeesstt ttyyppee ooff ccoouupplliinngg MMeetthhoodd iinn aa ccllaassss iiss ccoouupplleedd ttoo ssoommee ccllaassss ffiieellddss TThhiiss ccoouupplliinngg iiss uussuuaall,, ddoo nnoott wwoorrrryy ttoooo mmuucchh MMeetthhoodd iinn aa ccllaassss iiss ccoouupplleedd ttoo ssttaattiicc mmeetthhooddss,, pprrooppeerrttiieess oorr ccoonnssttaannttss iinn eexxtteerrnnaall ccllaassss TThhiiss iiss nnoorrmmaall,, uussuuaallllyy iiss nnoott aa pprroobblleemm MMeetthhoodd iiss ccoouupplleedd ttoo eexxtteerrnnaall ssttaattiicc ffiieellddss AAvvooiidd tthhiiss,, ccllaasssseess sshhoouulldd kkeeeepp tthheeiirr ffiieellddss pprriivvaattee 24
  • 25. NNoonn--AAcccceeppttaabbllee CCoouupplliinngg MMeetthhoodd iinn aa ccllaassss iiss ccoouupplleedd ttoo ssttaattiicc ffiieellddss iinn eexxtteerrnnaall ccllaassss AAvvooiidd iitt  ccoonnssiiddeerr rreeffaaccttoorriinngg MMeetthhooddss ttaakkee aass iinnppuutt ddaattaa ssoommee ffiieellddss tthhaatt ccoouulldd bbee ppaasssseedd aass ppaarraammeetteerrss CChheecckk tthhee iinntteenntt ooff tthhee mmeetthhoodd IIss iitt ddeessiiggnneedd ttoo pprroocceessss iinntteerrnnaall ccllaassss ddaattaa oorr iiss uuttiilliittyy mmeetthhoodd MMeetthhoodd iiss ddeeffiinneedd ppuubblliicc wwiitthhoouutt bbeeiinngg ppaarrtt ooff tthhee ppuubblliicc ccllaassss''ss iinntteerrffaaccee  ppoossssiibbllee ccoouupplliinngg 25
  • 26. MMeetthhooddss PPaarraammeetteerrss  PPuutt mmoosstt iimmppoorrttaanntt ppaarraammeetteerrss ffiirrsstt FFiirrsstt ppuutt tthhee mmaaiinn iinnppuutt ppaarraammeetteerrss PPuutt nnoonn--iimmppoorrttaanntt ooppttiioonnaall ppaarraammeetteerrss llaasstt EExxaammppllee:: IInnccoorrrreecctt eexxaammppllee:: 26 vvooiidd RReeggiisstteerrUUsseerr((ssttrriinngg uusseerrnnaammee,, ssttrriinngg ppaasssswwoorrdd,, DDaattee aaccccoouunnttEExxppiirraattiioonnDDaattee,, RRoollee[[]] rroolleess)) vvooiidd RReeggiisstteerrUUsseerr((RRoollee[[]] rroolleess,, ssttrriinngg ppaasssswwoorrdd,, ssttrriinngg uusseerrnnaammee,, DDaattee aaccccoouunnttEExxppiirraattiioonnDDaattee,,)) vvooiidd RReeggiisstteerrUUsseerr((ssttrriinngg ppaasssswwoorrdd,, DDaattee aaccccoouunnttEExxppiirraattiioonnDDaattee,, RRoollee[[]] rroolleess,, ssttrriinngg uusseerrnnaammee))
  • 27. MMeetthhooddss PPaarraammeetteerrss ((22)) DDoo nnoott mmooddiiffyy tthhee iinnppuutt ppaarraammeetteerrss UUssee nneeww vvaarriiaabbllee iinnsstteeaadd IInnccoorrrreecctt eexxaammppllee:: CCoorrrreecctt eexxaammppllee:: 27 bbooooll CChheecckkLLooggiinn((ssttrriinngg uusseerrnnaammee,, ssttrriinngg ppaasssswwoorrdd)) {{ uusseerrnnaammee == uusseerrnnaammee..TTooLLoowweerr(());; …… //// CChheecckk tthhee uusseerrnnaammee // ppaasssswwoorrdd hheerree }} bbooooll CChheecckkLLooggiinn((ssttrriinngg uusseerrnnaammee,, ssttrriinngg ppaasssswwoorrdd)) {{ ssttrriinngg uusseerrnnaammeeLLoowweerrccaassee == uusseerrnnaammee..TTooLLoowweerr(());; …… //// CChheecckk tthhee uusseerrnnaammee // ppaasssswwoorrdd hheerree }}
  • 28. MMeetthhooddss PPaarraammeetteerrss ((33)) UUssee ppaarraammeetteerrss ccoonnssiisstteennttllyy UUssee tthhee ssaammee nnaammeess aanndd tthhee ssaammee oorrddeerr iinn aallll mmeetthhooddss IInnccoorrrreecctt eexxaammppllee:: OOuuttppuutt ppaarraammeetteerrss sshhoouulldd bbee ppuutt llaasstt 28 vvooiidd EEnnccrryyppttFFiillee((SSttrreeaamm iinnppuutt,, SSttrreeaamm oouuttppuutt,, ssttrriinngg kkeeyy));; vvooiidd DDeeccrryyppttFFiillee((ssttrriinngg kkeeyy,, SSttrreeaamm oouuttppuutt,, SSttrreeaamm iinnppuutt));; FFiinnddCCuussttoommeerrssAAnnddIInnccoommeess((RReeggiioonn rreeggiioonn,, oouutt CCuussttoommeerr[[]] ccuussttoommeerrss,, oouutt ddeecciimmaall[[]] iinnccoommeess))
  • 29. Pass EEnnttiirree OObbjjeecctt oorr IIttss FFiieellddss?? WWhheenn sshhoouulldd wwee ppaassss aann oobbjjeecctt ccoonnttaaiinniinngg ffeeww vvaalluueess aanndd wwhheenn tthheessee vvaalluueess sseeppaarraatteellyy?? SSoommeettiimmee wwee ppaassss aann oobbjjeecctt aanndd uussee oonnllyy aa ssiinnggllee ffiieelldd ooff iitt –– iitt iiss aa ggoooodd pprraaccttiiccee?? EExxaammpplleess:: LLooookk aatt tthhee mmeetthhoodd''ss lleevveell ooff aabbssttrraaccttiioonn IIss iitt iinntteennddeedd ttoo ooppeerraattee wwiitthh eemmppllooyyeeeess ooff wwiitthh rraatteess aanndd mmoonntthhss??  tthhee ffiirrsstt iiss iinnccoorrrreecctt 29 CCaallccuullaatteeSSaallaarryy((EEmmppllooyyeeee eemmppllooyyeeee,, iinntt mmoonntthhss));; CCaallccuullaatteeSSaallaarryy((ddoouubbllee rraattee,, iinntt mmoonntthhss));;
  • 30. HHooww MMuucchh PPaarraammeetteerrss MMeetthhooddss SShhoouulldd HHaavvee??  LLiimmiitt tthhee nnuummbbeerr ooff mmeetthhoodd ppaarraammeetteerrss ttoo 77 ((++//--22)) 77 iiss aa mmaaggiicc nnuummbbeerr iinn ppssyycchhoollooggyy HHuummaann bbrraaiinn ccaannnnoott pprroocceessss mmoorree tthhaann 77 ((++//--22)) tthhiinnggss iinn tthhee ssaammee ttiimmee IIff tthhee ppaarraammeetteerrss nneeeedd ttoo bbee ttoooo mmuucchh rreeccoonnssiiddeerr tthhee mmeetthhoodd iinntteenntt  ddooeess iitt hhaavvee cclleeaarr iinntteenntt?? CCoonnssiiddeerr ppuuttttiinngg ffeeww ppaarraammeetteerrss iinn aa nneeww ccllaassss 30
  • 31. MMeetthhooddss LLeennggtthh HHooww lloonngg sshhoouulldd aa mmeetthhoodd bbee?? TThheerree iiss nnoo ssppeecciiffiicc rreessttrriiccttiioonn AAvvooiidd mmeetthhooddss lloonnggeerr tthhaann oonnee ssccrreeeenn ((3300 lliinneess)) LLoonngg mmeetthhooddss aarree nnoott aallwwaayyss bbaadd BBee ssuurree yyoouu hhaavvee aa ggoooodd rreeaassoonn ffoorr tthheeiirr lleennggtthh CCoohheessiioonn aanndd ccoouupplliinngg aarree mmoorree iimmppoorrttaanntt tthhaann tthhee mmeetthhoodd lleennggtthh!! LLoonngg mmeetthhooddss oofftteenn ccoonnttaaiinn ppoorrttiioonnss tthhaatt ccoouulldd bbee eexxttrraacctteedd aass sseeppaarraattee mmeetthhooddss wwiitthh ggoooodd nnaammee aanndd cclleeaarr iinntteenntt  cchheecckk tthhiiss!! 31
  • 33. RReettuunniinngg RReessuulltt ffrroomm aa MMeetthhoodd AAllwwaayyss aassssiiggnn tthhee rreessuulltt ooff aa mmeetthhoodd iinn ssoommee vvaarriiaabbllee bbeeffoorree rreettuurrnniinngg iitt.. BBeenneeffiittss:: IImmpprroovveedd ccooddee rreeaaddaabbiilliittyy TThhee rreettuurrnneedd vvaalluuee hhaass sseellff--ddooccuummeennttiinngg nnaammee SSiimmpplliiffiieedd ddeebbuuggggiinngg TThhee iinntteenntt ooff tthhee EExxaammppllee:: ffoorrmmuullaa iiss oobbvviioouuss.. iinntt ssaallaarryy == ddaayyss ** hhoouurrssPPeerrDDaayy ** rraatteePPeerrHHoouurr;; rreettuurrnn ssaallaarryy;; IInnccoorrrreecctt eexxaammppllee:: 33 WWee ccaann ppuutt aa bbrreeaakkppooiinntt aatt tthhiiss lliinnee aanndd cchheecckk iiff tthhee rreessuulltt iiss ccoorrrreecctt.. rreettuurrnn ddaayyss ** hhoouurrssPPeerrDDaayy ** rraatteePPeerrHHoouurr;;
  • 34. VVaarriiaabbllee IInniittiiaalliizzaattiioonn  IInniittiiaalliizzee aallll vvaarriiaabblleess bbeeffoorree tthheeiirr ffiirrsstt uussaaggee CCllaassss vvaarriiaabblleess ((ffiieellddss)) aarree aauuttoommaattiiccaallllyy iinniittiiaalliizzeedd wwiitthh 00 // nnuullll bbyy tthhee CC## ccoommppiilleerr YYoouu ssttiillll ggeett aa wwaarrnniinngg mmeessssaaggee LLooccaall vvaarriiaabblleess sshhoouulldd bbee mmaannuuaallllyy iinniittiiaalliizzeedd TThhiiss CC## ccooddee wwiillll rreessuulltt iinn ccoommppiillaattiioonn eerrrroorr:: WWee ccaann iinniittiiaalliizzee vvaarriiaabblleess aatt tthheeiirr ddeeccllaarraattiioonn:: 34 iinntt vvaalluuee;; CCoonnssoollee..WWrriitteeLLiinnee((vvaalluuee));; iinntt vvaalluuee == 00;; CCoonnssoollee..WWrriitteeLLiinnee((vvaalluuee));;
  • 35. PPaarrttiiaallllyy IInniittiiaalliizzeedd OObbjjeeccttss  EEnnssuurree oobbjjeeccttss ccaannnnoott ggeett iinnttoo ppaarrttiiaallllyy iinniittiiaalliizzeedd ssttaattee MMaakkee aallll ffiieellddss pprriivvaattee aanndd rreeqquuiirree vvaalliidd vvaalluueess ffoorr aallll mmaannddaattoorryy ffiieellddss iinn aallll ccoonnssttrruuccttoorrss EExxaammppllee:: SSttuuddeenntt oobbjjeecctt iiss iinnvvaalliidd uunnlleessss iitt hhaass NNaammee aanndd FFaaccuullttyyNNuummbbeerr 35 ccllaassss SSttuuddeenntt {{ pprriivvaattee ssttrriinngg nnaammee,, ffaaccuullttyyNNuummbbeerr;; ppuubblliicc SSttuuddeenntt((ssttrriinngg nnaammee,, ssttrriinngg ffaaccuullttyyNNuummbbeerr)) {{ …… }} }}
  • 36. VVaarriiaabbllee SSccooppee  VVaarriiaabbllee ssccooppee ddeeffiinneess hhooww ""ffaammoouuss"" iiss aa vvaarriiaabbllee iinn tthhee pprrooggrraamm SSttaattiicc vvaarriiaabblleess aarree mmoorree ""ffaammoouuss"" tthhaann iinnssttaannccee vvaarriiaabblleess,, aanndd tthheeyy aarree mmoorree ""ffaammoouuss"" tthhaann llooccaall VVaarriiaabblleess'' vviissiibbiilliittyy iiss ddiirreeccttllyy rreellaatteedd ttoo tthheeiirr ssccooppee ppuubblliicc,, pprrootteecctteedd,, iinntteerrnnaall,, pprriivvaattee AAllwwaayyss ttrryy ttoo rreedduuccee tthhee vvaarriiaabbllee''ss ssccooppee TThhiiss rreedduucceess ppootteennttiiaall ccoouupplliinngg AAvvooiidd ppuubblliicc ffiieellddss ((eexxcceeppttiioonn:: rreeaaddoonnllyy // ccoonnsstt)) AAcccceessss aallll ffiieellddss tthhrroouugghh pprrooppeerrttiieess // mmeetthhooddss 36
  • 37. EExxcceeeeddeedd SSccooppee –– EExxaammppllee 37 ppuubblliicc ccllaassss GGlloobbaallss {{ ppuubblliicc ssttaattiicc iinntt ssttaattee == 00;; }} ppuubblliicc ccllaassss GGeenniioouuss {{ ppuubblliicc ssttaattiicc vvooiidd PPrriinnttSSoommeetthhiinngg(()) {{ iiff ((GGlloobbaallss..ssttaattee ==== 00)) {{ CCoonnssoollee..WWrriitteeLLiinnee((""HHeelllloo..""));; }} eellssee {{ CCoonnssoollee..WWrriitteeLLiinnee((""GGoooodd bbyyee..""));; }} }} }}
  • 38. VVaarriiaabbllee SSppaann aanndd LLiiffeettiimmee  VVaarriiaabbllee ssppaann TThhee aavveerraaggee nnuummbbeerr ooff lliinneess ooff ccooddee ((LLOOCC)) bbeettwweeeenn vvaarriiaabbllee uussaaggeess  VVaarriiaabbllee lliiffeettiimmee TThhee nnuummbbeerr ooff lliinneess ooff ccooddee ((LLOOCC)) bbeettwweeeenn tthhee ffiirrsstt aanndd tthhee llaasstt vvaarriiaabbllee uussaaggee iinn aa bblloocckk  KKeeeepp vvaarriiaabbllee ssppaann aanndd lliiffeettiimmee aass llooww aass ppoossssiibbllee 38 AAllwwaayyss ddeeffiinnee aanndd iinniittiiaalliizzee vvaarriiaabblleess jjuusstt bbeeffoorree tthheeiirr ffiirrsstt uussee aanndd nneevveerr bbeeffoorree iitt!!
  • 39. UUnnnneeeeddeedd LLaarrggee VVaarriiaabbllee SSppaann aanndd LLiiffeettiimmee 39 iinntt ccoouunntt;; iinntt[[]] nnuummbbeerrss == nneeww iinntt[[110000]];; ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh;; ii++++)) {{ nnuummbbeerrss[[ii]] == ii;; }} ccoouunntt == 00;; ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh // 22;; ii++++)) {{ nnuummbbeerrss[[ii]] == nnuummbbeerrss[[ii]] ** nnuummbbeerrss[[ii]];; }} ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh;; ii++++)) {{ iiff ((nnuummbbeerrss[[ii]] %% 33 ==== 00)) {{ ccoouunntt++++;; }} }} CCoonnssoollee..WWrriitteeLLiinnee((ccoouunntt));; lifetime ("count") = 19 span = 19 / 4 = 4.75
  • 40. RReedduucceedd VVaarriiaabbllee SSppaann aanndd LLiiffeettiimmee 40 iinntt[[]] nnuummbbeerrss == nneeww iinntt[[110000]];; ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh;; ii++++)) {{ nnuummbbeerrss[[ii]] == ii;; }} ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh // 22;; ii++++)) {{ nnuummbbeerrss[[ii]] == nnuummbbeerrss[[ii]] ** nnuummbbeerrss[[ii]];; }} iinntt ccoouunntt == 00;; ffoorr ((iinntt ii == 00;; ii << nnuummbbeerrss..LLeennggtthh;; ii++++)) {{ iiff ((nnuummbbeerrss[[ii]] %% 33 ==== 00)) {{ ccoouunntt++++;; }} }} CCoonnssoollee..WWrriitteeLLiinnee((ccoouunntt));; lifetime = 9 span= 9 / 3 = 3
  • 41. SSiinnggllee PPuurrppoossee VVaarriiaabblleess sshhoouulldd hhaavvee ssiinnggllee ppuurrppoossee NNeevveerr uussee aa ssiinnggllee vvaarriiaabbllee ffoorr mmuullttiippllee ppuurrppoosseess!! EEccoonnoommiizziinngg mmeemmoorryy iiss nnoott aann eexxccuussee  CCaann yyoouu cchhoooossee aa ggoooodd nnaammee ffoorr vvaarriiaabbllee tthhaatt iiss uusseedd ffoorr sseevveerraall ppuurrppoosseess?? EExxaammppllee:: vvaarriiaabbllee uusseedd ttoo ccoouunntt ssttuuddeennttss ooff ttoo kkeeeepp tthhee aavveerraaggee ooff tthheeiirr ggrraaddeess PPrrooppoosseedd nnaammee:: ssttuuddeennttssCCoouunnttOOrrAAvvggGGrraaddee 41
  • 42. VVaarriiaabblleess –– OOtthheerr SSuuggggeessttiioonnss DDoonn''tt ddeeffiinnee vvaarriiaabblleess tthhaatt aarree nnoott uusseedd CCoommppiilleerrss uussuuaallllyy iissssuueess wwaarrnniinnggss DDoonn''tt uussee vvaarriiaabblleess wwiitthh hhiiddddeenn ppuurrppoossee IInnccoorrrreecctt eexxaammppllee:: IInnsstteeaadd uussee eennuummeerraattiioonn:: 42 iinntt mmooddee == 11;; …… iiff ((mmooddee ==== 11)) ……;; //// RReeaadd iiff ((mmooddee ==== 22)) ……;; //// WWrriittee iiff ((mmooddee ==== 33)) ……;; //// RReeaadd aanndd wwrriittee eennuumm RReessoouurrcceeAAcccceessssMMooddee {{ RReeaadd,, WWrriittee,, RReeaaddWWrriittee }}
  • 44. AAvvooiidd CCoommpplleexx EExxpprreessssiioonnss NNeevveerr uussee ccoommpplleexx eexxpprreessssiioonnss iinn tthhee ccooddee!! IInnccoorrrreecctt eexxaammppllee:: WWhhaatt sshhaallll wwee ddoo iiff wwee ggeett aatt tthhiiss lliinnee IInnddeexxOOuuttOOffRRaannggeeEExxcceeppttiioonn??  CCoommpplleexx eexxpprreessssiioonnss aarree eevviill bbeeccaauussee:: MMaakkee ccooddee hhaarrdd ttoo rreeaadd aanndd uunnddeerrssttaanndd,, hhaarrdd ttoo ddeebbuugg,, hhaarrdd ttoo mmooddiiffyy aanndd hhaarrdd ttoo mmaaiinnttaaiinn 44 ffoorr ((iinntt ii==00;; ii<<xxCCoooorrddss..lleennggtthh;; ii++++)) {{ ffoorr ((iinntt jj==00;; jj<<yyCCoooorrddss..lleennggtthh;; jj++++)) {{ mmaattrriixx[[ii]][[jj]] == mmaattrriixx[[xxCCoooorrddss[[ffiinnddMMaaxx((ii))++11]]]][[yyCCoooorrddss[[ffiinnddMMiinn((jj))--11]]]] ** mmaattrriixx[[yyCCoooorrddss[[ffiinnddMMaaxx((jj))++11]]]][[xxCCoooorrddss[[ffiinnddMMiinn((ii))--11]]]];; }} }} TThheerree aarree 1100 ppootteennttiiaall ssoouurrcceess ooff IInnddeexxOOuuttOOffRRaannggeeEExxcceeppttiioonn iinn tthhiiss eexxpprreessssiioonn!!
  • 45. SSiimmpplliiffyyiinngg CCoommpplleexx EExxpprreessssiioonnss 45 ffoorr ((iinntt ii == 00;; ii << xxCCoooorrddss..lleennggtthh;; ii++++)) {{ ffoorr ((iinntt jj == 00;; jj << yyCCoooorrddss..lleennggtthh;; jj++++)) {{ iinntt mmaaxxSSttaarrttIInnddeexx == ffiinnddMMaaxx((ii)) ++ 11;; iinntt mmiinnSSttaarrttIInnddeexx == ffiinnddMMiinn((ii)) -- 11;; iinntt mmiinnXXccoooorrdd == xxCCoooorrddss[[mmiinnSSttaarrttIInnddeexx]];; iinntt mmaaxxXXccoooorrdd == xxCCoooorrddss[[mmaaxxSSttaarrttIInnddeexx]];; iinntt mmiinnYYccoooorrdd == yyCCoooorrddss[[mmiinnSSttaarrttIInnddeexx]];; iinntt mmaaxxYYccoooorrdd == yyCCoooorrddss[[mmaaxxSSttaarrttIInnddeexx]];; iinntt nneewwVVaalluuee == mmaattrriixx[[mmaaxxXXccoooorrdd]][[mmiinnYYccoooorrdd]] ** mmaattrriixx[[mmaaxxYYccoooorrdd]][[mmiinnXXccoooorrdd]];; mmaattrriixx[[ii]][[jj]] == nneewwVVaalluuee;; }} }}
  • 46. UUssiinngg CCoonnssttaannttss WWhheenn aanndd HHooww ttoo UUssee CCoonnssttaannttss??
  • 47. AAvvooiidd MMaaggiicc NNuummbbeerrss aanndd SSttrriinnggss WWhhaatt iiss mmaaggiicc nnuummbbeerr oorr vvaalluuee?? MMaaggiicc nnuummbbeerrss // vvaalluueess aarree aallll lliitteerraallss ddiiffffeerreenntt tthhaann 00,, 11,, --11,, nnuullll aanndd """" ((eemmppttyy ssttrriinngg)) AAvvooiidd uussiinngg mmaaggiicc nnuummbbeerrss // vvaalluueess TThheeyy aarree hhaarrdd ttoo mmaaiinnttaaiinn WWhheenn cchhaannggee ooccccuurrss,, yyoouu nneeeedd ttoo mmooddiiffyy aallll ooccccuurrrreenncceess ooff tthhee mmaaggiicc nnuummbbeerr // ccoonnssttaanntt TThheeiirr mmeeaanniinngg iiss nnoott oobbvviioouuss EExxaammppllee:: wwhhaatt ddooeess tthhee nnuummbbeerr 11002244 mmeeaann?? 47
  • 48. TThhee EEvviill MMaaggiicc NNuummbbeerrss 48 ppuubblliicc ccllaassss GGeeoommeettrryyUUttiillss {{ ppuubblliicc ssttaattiicc ddoouubbllee CCaallccCCiirrcclleeAArreeaa((ddoouubbllee rraaddiiuuss)) {{ ddoouubbllee aarreeaa == 33..1144115599220066 ** rraaddiiuuss ** rraaddiiuuss;; rreettuurrnn aarreeaa;; }} ppuubblliicc ssttaattiicc ddoouubbllee CCaallccCCiirrcclleePPeerriimmeetteerr((ddoouubbllee rraaddiiuuss)) {{ ddoouubbllee ppeerriimmeetteerr == 66..2288331188441122 ** rraaddiiuuss;; rreettuurrnn ppeerriimmeetteerr;; }} ppuubblliicc ssttaattiicc ddoouubbllee CCaallccEElliippsseeAArreeaa((ddoouubbllee aaxxiiss11, ddoouubbllee aaxxiiss22)) {{ ddoouubbllee aarreeaa == 33..1144115599220066 ** aaxxiiss11 ** aaxxiiss22;; rreettuurrnn aarreeaa;; }} }}
  • 49. TTuurrnniinngg MMaaggiicc NNuummbbeerrss iinnttoo CCoonnssttaannttss 49 ppuubblliicc ccllaassss GGeeoommeettrryyUUttiillss {{ ppuubblliicc ccoonnsstt ddoouubbllee PPII == 33..1144115599220066;; ppuubblliicc ssttaattiicc ddoouubbllee CCaallccCCiirrcclleeAArreeaa((ddoouubbllee rraaddiiuuss)) {{ ddoouubbllee aarreeaa == PPII ** rraaddiiuuss ** rraaddiiuuss;; rreettuurrnn aarreeaa;; }} ppuubblliicc ssttaattiicc ddoouubbllee CCaallccCCiirrcclleePPeerriimmeetteerr((ddoouubbllee rraaddiiuuss)) {{ ddoouubbllee ppeerriimmeetteerr == 22 ** PPII ** rraaddiiuuss;; rreettuurrnn ppeerriimmeetteerr;; }} ppuubblliicc ssttaattiicc ddoouubbllee CCaallccEElliippsseeAArreeaa((ddoouubbllee aaxxiiss11, ddoouubbllee aaxxiiss22)) {{ ddoouubbllee aarreeaa == PPII ** aaxxiiss11 ** aaxxiiss22;; rreettuurrnn aarreeaa;; }} }}
  • 50. WWhheenn ttoo UUssee CCoonnssttaannttss??  CCoonnssttaannttss sshhoouulldd bbee uusseedd iinn tthhee ffoolllloowwiinngg ccaasseess:: WWhheenn wwee nneeeedd ttoo uussee nnuummbbeerrss oorr ootthheerr vvaalluueess aanndd tthheeiirr llooggiiccaall mmeeaanniinngg aanndd vvaalluuee aarree nnoott oobbvviioouuss FFiillee nnaammeess MMaatthheemmaattiiccaall ccoonnssttaannttss BBoouunnddss aanndd rraannggeess 50 ppuubblliicc ccoonnsstt ssttrriinngg SSeettttiinnggssFFiilleeNNaammee == ""AApppplliiccaattiioonnSSeettttiinnggss..xxmmll"";; ppuubblliicc ccoonnsstt ddoouubbllee EE == 22..77118822881188228844;; ppuubblliicc ccoonnsstt iinntt RREEAADD__BBUUFFFFEERR__SSIIZZEE == 55 ** 11002244 **11002244;;
  • 51. WWhheenn ttoo AAvvooiidd CCoonnssttaannttss??  SSoommeettiimmee iitt iiss bbeetttteerr ttoo kkeeeepp tthhee mmaaggiicc vvaalluueess iinnsstteeaadd ooff uussiinngg aa ccoonnssttaanntt EErrrroorr mmeessssaaggeess aanndd eexxcceeppttiioonn ddeessccrriippttiioonnss SSQQLL ccoommmmaannddss ffoorr ddaattaabbaassee ooppeerraattiioonnss TTiittlleess ooff GGUUII eelleemmeennttss ((llaabbeellss,, bbuuttttoonnss,, mmeennuuss,, ddiiaallooggss,, eettcc..))  FFoorr iinntteerrnnaattiioonnaalliizzaattiioonn ppuurrppoosseess uussee rreessoouurrcceess,, nnoott ccoonnssttaannttss 51
  • 52. UUssiinngg CCoonnttrrooll CCoonnssttrruuccttss UUssiinngg CCoonnddiittiioonnaall SSttaatteemmeennttss aanndd LLooooppss CCoorrrreeccttllyy
  • 53. UUssiinngg CCoonnddiittiioonnaall SSttaatteemmeennttss AAllwwaayyss uussee {{ aanndd }} ffoorr tthhee ccoonnddiittiioonnaall ssttaatteemmeennttss bbooddyy,, eevveenn wwhheenn iitt iiss aa ssiinnggllee lliinnee:: WWhhyy oommiittttiinngg tthhee bbrraacckkeettss ccoouulldd bbee hhaarrmmffuull?? TThhiiss iiss mmiisslleeaaddiinngg ccooddee ++ mmiisslleeaaddiinngg ffoorrmmaattttiinngg 53 iiff ((ccoonnddiittiioonn)) {{ DDooSSoommeettiinngg(());; }} iiff ((ccoonnddiittiioonn)) DDooSSoommeetthhiinngg(());; DDooAAnnootthheerrTThhiinngg(());; DDooDDiiffffeerreennttTThhiinngg(());;
  • 54. UUssee SSiimmppllee CCoonnddiittiioonnss DDoo nnoott uussee ccoommpplleexx iiff ccoonnddiittiioonnss YYoouu ccaann aallwwaayyss ssiimmpplliiffyy tthheemm bbyy iinnttrroodduucciinngg bboooolleeaann vvaarriiaabblleess oorr bboooolleeaann mmeetthhooddss IInnccoorrrreecctt eexxaammppllee:: CCoommpplleexx bboooolleeaann eexxpprreessssiioonnss aarree hhaarrmmffuull HHooww yyoouu wwiillll ffiinndd tthhee pprroobblleemm iiff yyoouu ggeett IInnddeexxOOuuttOOffRRaannggeeEExxcceeppttiioonn?? 54 iiff ((xx >> 00 &&&& yy >> 00 &&&& xx << WWiiddtthh--11 &&&& yy << HHeeiigghhtt--11 &&&& mmaattrriixx[[xx, yy]] ==== 00 &&&& mmaattrriixx[[xx--11, yy]] ==== 00 &&&& mmaattrriixx[[xx++11, yy]] ==== 00 &&&& mmaattrriixx[[xx, yy--11]] ==== 00 &&&& mmaattrriixx[[xx, yy++11]] ==== 00 &&&& !!vviissiitteedd[[xx, yy]]))
  • 55. SSiimmpplliiffyyiinngg BBoooolleeaann CCoonnddiittiioonnss  TThhee llaasstt eexxaammppllee ccaann bbee eeaassiillyy rreeffaaccttoorreedd iinnttoo sseellff--ddooccuummeennttiinngg ccooddee:: NNooww tthhee ccooddee iiss:: EEaassyy ttoo rreeaadd –– tthhee llooggiicc ooff tthhee ccoonnddiittiioonn iiss cclleeaarr EEaassyy ttoo ddeebbuugg –– bbrreeaakkppooiinntt ccaann bbee ppuutt aatt tthhee iiff 55 bbooooll iinnRRaannggee == xx >> 00 &&&& yy >> 00 &&&& xx << WWiiddtthh--11 &&&& yy << HHeeiigghhtt--11;; bbooooll eemmppttyyCCeellllAAnnddNNeeiigghhbboouurrss == mmaattrriixx[[xx, yy]] ==== 00 &&&& mmaattrriixx[[xx--11, yy]] ==== 00 &&&& mmaattrriixx[[xx++11, yy]] ==== 00 &&&& mmaattrriixx[[xx, yy--11]] ==== 00 &&&& mmaattrriixx[[xx, yy++11]] ==== 00;; iiff ((iinnRRaannggee &&&& eemmppttyyCCeellllAAnnddNNeeiigghhbboouurrss &&&& !!vviissiitteedd[[xx, yy]]))
  • 56. AAvvooiidd DDeeeepp NNeessttiinngg ooff BBlloocckkss DDeeeepp nneessttiinngg ooff ccoonnddiittiioonnaall ssttaatteemmeennttss aanndd llooooppss mmaakkeess tthhee ccooddee uunncclleeaarr DDeeeeppllyy nneesstteedd ccooddee iiss ccoommpplleexx aanndd hhaarrdd ttoo rreeaadd aanndd uunnddeerrssttaanndd UUssuuaallllyy yyoouu ccaann eexxttrraacctt ppoorrttiioonnss ooff tthhee ccooddee iinn sseeppaarraattee mmeetthhooddss TThhiiss ssiimmpplliiffiieess tthhee llooggiicc ooff tthhee ccooddee UUssiinngg ggoooodd mmeetthhoodd nnaammee mmaakkeess tthhee ccooddee sseellff-- ddooccuummeennttiinngg 56
  • 57. DDeeeepp NNeessttiinngg –– EExxaammppllee 57 iiff ((mmaaxxEElleemm !!== IInntt3322..MMaaxxVVaalluuee)) {{ iiff ((aarrrr[[ii]] << aarrrr[[ii ++ 11]])) {{ iiff ((aarrrr[[ii ++ 11]] << aarrrr[[ii ++ 22]])) {{ iiff ((aarrrr[[ii ++ 22]] << aarrrr[[ii ++ 33]])) {{ mmaaxxEElleemm == aarrrr[[ii ++ 33]];; }} eellssee {{ mmaaxxEElleemm == aarrrr[[ii ++ 22]];; }} }} eellssee {{ iiff ((aarrrr[[ii ++ 11]] << aarrrr[[ii ++ 33]])) {{ mmaaxxEElleemm == aarrrr[[ii ++ 33]];; }} eellssee {{ mmaaxxEElleemm == aarrrr[[ii ++ 11]];; }} }} }} (continues on the next slide)
  • 58. DDeeeepp NNeessttiinngg –– EExxaammppllee ((22)) 58 eellssee {{ iiff ((aarrrr[[ii]] << aarrrr[[ii ++ 22]])) {{ iiff ((aarrrr[[ii ++ 22]] << aarrrr[[ii ++ 33]])) {{ mmaaxxEElleemm == aarrrr[[ii ++ 33]];; }} eellssee {{ mmaaxxEElleemm == aarrrr[[ii ++ 22]];; }} }} eellssee {{ iiff ((aarrrr[[ii]] << aarrrr[[ii ++ 33]])) {{ mmaaxxEElleemm == aarrrr[[ii ++ 33]];; }} eellssee {{ mmaaxxEElleemm == aarrrr[[ii]];; }} }} }} }}
  • 59. Avoiding DDeeeepp NNeessttiinngg –– EExxaammppllee 59 pprriivvaattee ssttaattiicc iinntt MMaaxx((iinntt ii, iinntt jj)) {{ iiff ((ii << jj)) {{ rreettuurrnn jj;; }} eellssee {{ rreettuurrnn ii;; }} }} pprriivvaattee ssttaattiicc iinntt MMaaxx((iinntt ii, iinntt jj, iinntt kk)) {{ iiff ((ii << jj)) {{ iinntt mmaaxxEElleemm == MMaaxx((jj, kk));; rreettuurrnn mmaaxxEElleemm;; }} eellssee {{ iinntt mmaaxxEElleemm == MMaaxx((ii, kk));; rreettuurrnn mmaaxxEElleemm;; }} }} (continues on the next slide)
  • 60. Avoiding DDeeeepp NNeessttiinngg –– EExxaammppllee 60 pprriivvaattee ssttaattiicc iinntt FFiinnddMMaaxx((iinntt[[]] aarrrr, iinntt ii)) {{ iiff ((aarrrr[[ii]] << aarrrr[[ii ++ 11]])) {{ iinntt mmaaxxEElleemm == MMaaxx((aarrrr[[ii ++ 11]], aarrrr[[ii ++ 22]], aarrrr[[ii ++ 33]]));; rreettuurrnn mmaaxxEElleemm;; }} eellssee {{ iinntt mmaaxxEElleemm == MMaaxx((aarrrr[[ii]], aarrrr[[ii ++ 22]], aarrrr[[ii ++ 33]]));; rreettuurrnn mmaaxxEElleemm;; }} }} iiff ((mmaaxxEElleemm !!== IInntt3322..MMaaxxVVaalluuee)) {{ mmaaxxEElleemm == FFiinnddMMaaxx((aarrrr, ii));; }}
  • 61. UUssiinngg CCaassee SSttaatteemmeenntt  Choose the most effective ordering of cases Put the normal (usual) case first Order cases by frequency Put the most unusual (exceptional) case last Order cases alphabetically or numerically  Keep the actions of each case simple Extract complex logic in separate methods  Use the default clause in a case statement or the last else in a chain of if-else to trap errors 61
  • 62. BBaadd CCaassee SSttaatteemmeenntt 62 vvooiidd PPrroocceessssNNeexxttCChhaarr((cchhaarr cchh)) {{ sswwiittcchh ((ppaarrsseeSSttaattee)) {{ IInnTTaagg:: iiff ((cchh ==== "">>"")) {{ CCoonnssoollee..WWrriitteeLiinnee((""FFoouunndd ttaagg:: {{00}}"", ttaagg));; tteexxtt == """";; ppaarrsseeSSttaattee == PPaarrsseeSSttaattee..OOuuttOOffTTaagg;; }} eellssee {{ ttaagg == ttaagg ++ cchh;; }} bbrreeaakk;; OOuuttOOffTTaagg:: …… }} }}
  • 63. IImmpprroovveedd CCaassee SSttaatteemmeenntt 63 vvooiidd PPrroocceessssNNeexxttCChhaarr((cchhaarr cchh)) {{ sswwiittcchh ((ppaarrsseeSSttaattee)) {{ IInnTTaagg:: PPrroocceessssCChhaarraacctteerrIInnTTaagg((cchh));; bbrreeaakk;; OOuuttOOffTTaagg:: PPrroocceessssCChhaarraacctteerrOOuuttOOffTTaagg((cchh));; bbrreeaakk;; ddeeffaauulltt:: tthhrrooww nneeww EExxcceeppttiioonn((""IInnvvaalliidd ppaarrssee ssttaattee:: "" ++ ppaarrsseeSSttaattee));; }} }}
  • 64. UUssiinngg LLooooppss  CChhoooossiinngg tthhee ccoorrrreecctt ttyyppee ooff lloooopp:: UUssee ffoorr lloooopp ttoo rreeppeeaatt ssoommee bblloocckk ooff ccooddee aa cceerrttaaiinn nnuummbbeerr ooff ttiimmeess UUssee ffoorreeaacchh lloooopp ttoo pprroocceessss eeaacchh eelleemmeenntt ooff aarrrraayy oorr ccoolllleeccttiioonn UUssee wwhhiillee // ddoo--wwhhiillee lloooopp wwhheenn yyoouu ddoonn''tt kknnooww hhooww mmaannyy ttiimmeess aa bblloocckk sshhoouulldd bbee rreeppeeaatteedd AAvvooiidd ddeeeepp nneessttiinngg ooff llooooppss YYoouu ccaann eexxttrraacctt tthhee lloooopp bbooddyy iinn aa nneeww mmeetthhoodd 64
  • 65. LLooooppss:: BBeesstt PPrraaccttiicceess KKeeeepp llooooppss ssiimmppllee TThhiiss hheellppss rreeaaddeerrss ooff yyoouurr ccooddee  TTrreeaatt tthhee iinnssiiddee ooff tthhee lloooopp aass iitt wweerree aa rroouuttiinnee DDoonn’’tt mmaakkee tthhee rreeaaddeerr llooookk iinnssiiddee tthhee lloooopp ttoo uunnddeerrssttaanndd tthhee lloooopp ccoonnttrrooll  TThhiinnkk ooff aa lloooopp aass aa bbllaacckk bbooxx:: 65 wwhhiillee ((!!iinnppuuttFFiillee..EEnnddOOffFFiillee(()) &&&& !!hhaassEErrrroorrss)) {{ }} ((bbllaacckk bbooxx ccooddee))
  • 66. DDeeffeennssiivvee PPrrooggrraammmmiinngg UUssiinngg AAsssseerrttiioonnss aanndd EExxcceeppttiioonnss CCoorrrreeccttllyy
  • 67. PPrriinncciipplleess ooff DDeeffeennssiivvee PPrrooggrraammmmiinngg  FFuunnddaammeennttaall pprriinncciippllee ooff ddeeffeennssiivvee pprrooggrraammmmiinngg  DDeeffeennssiivvee pprrooggrraammmmiinngg mmeeaannss:: TToo eexxppeecctt iinnccoorrrreecctt iinnppuutt aanndd ttoo hhaannddllee iitt ccoorrrreeccttllyy TToo tthhiinnkk nnoott oonnllyy aabboouutt tthhee uussuuaall eexxeeccuuttiioonn ffllooww,, bbuutt ttoo ccoonnssiiddeerr aallssoo uunnuussuuaall ssiittuuaattiioonnss TToo eennssuurree tthhaatt iinnccoorrrreecctt iinnppuutt rreessuullttss ttoo eexxcceeppttiioonn,, nnoott ttoo iinnccoorrrreecctt oouuttppuutt 67 AAnnyy ppuubblliicc mmeetthhoodd sshhoouulldd cchheecckk iittss iinnppuutt ddaattaa,, pprreeccoonnddiittiioonnss aanndd ppoossttccoonnddiittiioonnss
  • 68. DDeeffeennssiivvee PPrrooggrraammmmiinngg –– EExxaammppllee 68 ssttrriinngg SSuubbssttrriinngg((ssttrriinngg ssttrr, iinntt ssttaarrttIInnddeexx, iinntt lleennggtthh)) {{ iiff ((ssttrr ==== nnuullll)) {{ tthhrrooww nneeww NNuullllRReeffeerreenncceeEExxcceeppttiioonn((""SSttrr iiss nnuullll..""));; }} iiff ((ssttaarrttIInnddeexx >>== ssttrr..Leennggtthh)) {{ tthhrrooww nneeww AArrgguummeennttEExxcceeppttiioonn(( ""IInnvvaalliidd ssttaarrttIInnddeexx::"" ++ ssttaarrttIInnddeexx));; CChheecckk tthhee iinnppuutt aanndd pprreeccoonnddiittiioonnss.. }} iiff ((ssttaarrttIInnddeexx ++ ccoouunntt >> ssttrr..Leennggtthh)) {{ tthhrrooww nneeww AArrgguummeennttEExxcceeppttiioonn((""IInnvvaalliidd lleennggtthh::"" ++ lleennggtthh));; }} …… DDeebbuugg..AAsssseerrtt((rreessuulltt..Leennggtthh ==== lleennggtthh));; }} PPeerrffoorrmm tthhee mmeetthhoodd mmaaiinn llooggiicc.. CChheecckk tthhee ppoossttccoonnddiittiioonnss ..
  • 69. EExxcceeppttiioonnss –– BBeesstt PPrraaccttiicceess  CChhoooossee aa ggoooodd nnaammee ffoorr yyoouurr eexxcceeppttiioonn ccllaassss IInnccoorrrreecctt eexxaammppllee:: EExxaammppllee:: UUssee ddeessccrriippttiivvee eerrrroorr mmeessssaaggeess IInnccoorrrreecctt eexxaammppllee:: EExxaammppllee:: 69 tthhrrooww nneeww EExxcceeppttiioonn((""FFiillee eerrrroorr!!""));; tthhrrooww nneeww FFiilleeNNoottFFoouunnddEExxcceeppttiioonn((""CCaannnnoott ffiinndd ffiillee "" ++ ffiilleeNNaammee));; tthhrrooww nneeww EExxcceeppttiioonn((""EErrrroorr!!""));; tthhrrooww nneeww AArrgguummeennttEExxcceeppttiioonn((""TThhee ssppeeeedd sshhoouulldd bbee aa nnuummbbeerr "" ++ ""bbeettwweeeenn "" ++ MMIINN__SSPPEEEEDD ++ "" aanndd "" ++ MMAAXX__SSPPEEEEDD ++ ""..""));;
  • 70. EExxcceeppttiioonnss HHaannddlliinngg BBeesstt PPrraaccttiicceess ((22))  CCaattcchh oonnllyy eexxcceeppttiioonnss tthhaatt yyoouu aarree ccaappaabbllee ttoo pprroocceessss ccoorrrreeccttllyy DDoo nnoott ccaattcchh aallll eexxcceeppttiioonnss!! IInnccoorrrreecctt eexxaammppllee:: WWhhaatt aabboouutt OOuuttOOffMMeemmoorryyEExxcceeppttiioonn?? 70 ttrryy {{ RReeaaddSSoommeeFFiillee(());; }} ccaattcchh {{ CCoonnssoollee..WWrriitteeLLiinnee((""FFiillee nnoott ffoouunndd!!""));; }}
  • 71. EExxcceeppttiioonnss HHaannddlliinngg BBeesstt PPrraaccttiicceess ((33))  AAllwwaayyss iinncclluuddee tthhee eexxcceeppttiioonn ccaauussee wwhheenn tthhrroowwiinngg aa nneeww eexxcceeppttiioonn 71 ttrryy {{ WWiitthhddrraawwMMoonneeyy((aaccccoouunntt,, aammoouunntt));; }} ccaattcchh ((DDaattaabbaasseeEExxcceeppttiioonn ddbbeexx)) {{ tthhrrooww nneeww WWiitthhddrraawwEExxcceeppttiioonn((SSttrriinngg..FFoorrmmaatt(( ""CCaann nnoott wwiitthhddrraaww tthhee aammoouunntt {{00}} ffrroomm aaccoooouunntt {{11}}"",, aammoouunntt,, aaccccoouunntt)),, ddbbeexx));; }} WWee iinncclluuddee iinn tthhee eexxcceeppttiioonnss cchhaaiinn tthhee oorriiggiinnaall ssoouurrccee ooff tthhee pprroobblleemm..
  • 72. EExxcceeppttiioonnss HHaannddlliinngg BBeesstt PPrraaccttiicceess ((44))  TThhrrooww eexxcceeppttiioonnss aatt tthhee ccoorrrreessppoonnddiinngg lleevveell ooff aabbssttrraaccttiioonn EExxaammppllee:: BBaannkk aaccccoouunntt wwiitthhddrraawwaall ooppeerraattiioonn ccoouulldd tthhrrooww IInnssuuffffiicciieennttFFuunnddssEExxcceeppttiioonn bbuutt ccaannnnoott tthhrrooww FFiilleeAAcccceessssDDeenniieeddEExxcceeppttiioonn DDiissppllaayy ttoo tthhee eenndd uusseerrss oonnllyy mmeessssaaggeess tthhaatt tthheeyy ccoouulldd uunnddeerrssttaanndd 72 or
  • 73. DDiissppoossaabbllee RReessoouurrcceess HHaannddllee ddiissppoossaabbllee rreessoouurrcceess wwiitthh ccaarree AAllll ccllaasssseess iimmpplleemmeennttiinngg IIDDiissppoossaabbllee sshhoouulldd ffoollllooww tthhee ttrryy--ffiinnaallllyy // uussiinngg ppaatttteerrnn:: 73 SSttrreeaammRReeaaddeerr rreeaaddeerr == nneeww SSttrreeaammRReeaaddeerr((""ffiillee..ttxxtt""));; ttrryy {{ SSttrriinngg lliinnee == rreeaaddeerr..RReeaaddLLiinnee(());; }} ffiinnaallllyy {{ rreeaaddeerr..CClloossee(());; }} SSttrreeaammRReeaaddeerr rreeaaddeerr == nneeww SSttrreeaammRReeaaddeerr(( ""ffiillee..ttxxtt""));; uussiinngg ((rreeaaddeerr)) {{ SSttrriinngg lliinnee == rreeaaddeerr..RReeaaddLLiinnee(());; }} ==
  • 74. CCoommmmeennttss aanndd CCooddee DDooccuummeennttaattiioonn TThhee CCoonncceepptt ooff SSeellff--DDooccuummeennttiinngg CCooddee
  • 75. EEffffeeccttiivvee CCoommmmeennttss  EEffffeeccttiivvee ccoommmmeennttss ddoo nnoott rreeppeeaatt tthhee ccooddee TThheeyy eexxppllaaiinn iitt aatt hhiigghheerr lleevveell aanndd rreevveeaall nnoonn-- oobbvviioouuss ddeettaaiillss  TThhee bbeesstt ssooffttwwaarree ddooccuummeennttaattiioonn iiss tthhee ssoouurrccee ccooddee iittsseellff –– kkeeeepp iitt cclleeaann aanndd rreeaaddaabbllee  SSeellff--ddooccuummeennttiinngg ccooddee iiss ccooddee tthhaatt iiss sseellff-- eexxppllaaiinnaabbllee aanndd ddooeess nnoott nneeeedd ccoommmmeennttss SSiimmppllee ddeessiiggnn,, ssmmaallll wweellll nnaammeedd mmeetthhooddss,, ssttrroonngg ccoohheessiioonn aanndd lloooossee ccoouupplliinngg,, ssiimmppllee llooggiicc,, ggoooodd vvaarriiaabbllee nnaammeess,, ggoooodd ffoorrmmaattttiinngg,, …… 75
  • 76. SSeellff--DDooccuummeennttiinngg CCooddee  SSeellff--ddooccuummeennttiinngg ccooddee ffuunnddaammeennttaall pprriinncciipplleess 76 TThhee bbeesstt ddooccuummeennttaattiioonn iiss tthhee ccooddee iittsseellff.. MMaakkee tthhee ccooddee sseellff--eexxppllaaiinnaabbllee aanndd sseellff-- ddooccuummeennttiinngg,, eeaassyy ttoo rreeaadd aanndd uunnddeerrssttaanndd.. DDoo nnoott ddooccuummeenntt bbaadd ccooddee,, rreewwrriittee iitt!!
  • 77. BBaadd CCoommmmeennttss –– EExxaammppllee 77 ppuubblliicc ssttaattiicc LLiisstt<<iinntt>> FFiinnddPPrriimmeess((iinntt ssttaarrtt,, iinntt eenndd)) {{ //// CCrreeaattee nneeww lliisstt ooff iinntteeggeerrss LLiisstt<<iinntt>> pprriimmeessLLiisstt == nneeww LLiisstt<<iinntt>>(());; //// PPeerrffoorrmm aa lloooopp ffrroomm ssttaarrtt ttoo eenndd ffoorr ((iinntt nnuumm == ssttaarrtt;; nnuumm <<== eenndd;; nnuumm++++)) {{ //// DDeeccllaarree bboooolleeaann vvaarriiaabbllee,, iinniittiiaallllyy ttrruuee bbooooll pprriimmee == ttrruuee;; //// PPeerrffoorrmm lloooopp ffrroomm 22 ttoo ssqqrrtt((nnuumm)) ffoorr ((iinntt ddiivv == 22;; ddiivv <<== MMaatthh..SSqqrrtt((nnuumm));; ddiivv++++)) {{ //// CChheecckk iiff ddiivv ddiivviiddeess nnuumm wwiitthh nnoo rreemmaaiinnddeerr iiff ((nnuumm %% ddiivv ==== 00)) {{ //// WWee ffoouunndd aa ddiivviiddeerr -->> tthhee nnuummbbeerr iiss nnoott pprriimmee pprriimmee == ffaallssee;; //// EExxiitt ffrroomm tthhee lloooopp bbrreeaakk;; }} (continues on the next slide)
  • 78. BBaadd CCoommmmeennttss –– EExxaammppllee ((22)) 78 //// CCoonnttiinnuuee wwiitthh tthhee nneexxtt lloooopp vvaalluuee }} //// CChheecckk iiff tthhee nnuummbbeerr iiss pprriimmee iiff ((pprriimmee)) {{ //// AAdddd tthhee nnuummbbeerr ttoo tthhee lliisstt ooff pprriimmeess pprriimmeessLLiisstt..AAdddd((nnuumm));; }} }} //// RReettuurrnn tthhee lliisstt ooff pprriimmeess rreettuurrnn pprriimmeessLLiisstt;; }}
  • 79. SSeellff--DDooccuummeennttiinngg CCooddee –– EExxaammppllee 79 ppuubblliicc ssttaattiicc LLiisstt<<iinntt>> FFiinnddPPrriimmeess((iinntt ssttaarrtt,, iinntt eenndd)) {{ LLiisstt<<iinntt>> pprriimmeessLLiisstt == nneeww LLiisstt<<iinntt>>(());; ffoorr ((iinntt nnuumm == ssttaarrtt;; nnuumm <<== eenndd;; nnuumm++++)) {{ bbooooll iissPPrriimmee == IIssPPrriimmee((nnuumm));; iiff ((iissPPrriimmee)) {{ pprriimmeessLLiisstt..AAdddd((nnuumm));; GGoooodd ccooddee ddooeess nnoott nneeeedd }} ccoommmmeennttss.. IItt iiss sseellff-- }} eexxppllaaiinniinngg.. rreettuurrnn pprriimmeessLLiisstt;; }} (continues on the next slide)
  • 80. SSeellff--DDooccuummeennttiinngg CCooddee –– EExxaammppllee ((22)) 80 pprriivvaattee ssttaattiicc bbooooll IIssPPrriimmee((iinntt nnuumm)) {{ bbooooll iissPPrriimmee == ttrruuee;; iinntt mmaaxxDDiivviiddeerr == MMaatthh..SSqqrrtt((nnuumm));; ffoorr ((iinntt ddiivv == 22;; ddiivv <<== mmaaxxDDiivviiddeerr;; ddiivv++++)) {{ GGoooodd mmeetthhooddss hhaavvee ggoooodd nnaammee iiff ((nnuumm %% ddiivv ==== 00)) {{ //// WWee ffoouunndd aa ddiivviiddeerr -->> tthhee nnuummbbeerr iiss nnoott pprriimmee iissPPrriimmee == ffaallssee;; bbrreeaakk;; }} }} rreettuurrnn iissPPrriimmee;; }} aanndd aarree eeaassyy ttoo rreeaadd aanndd uunnddeerrssttaanndd.. TThhiiss ccoommmmeenntt eexxppllaaiinn nnoonn-- oobbvviioouuss ddeettaaiillss.. IItt ddooeess nnoott rreeppeeaatt tthhee ccooddee..
  • 81. CCooddee RReeffaaccttoorriinngg IImmpprroovviinngg tthhee QQuuaalliittyy ooff tthhee EExxiissttiinngg CCooddee
  • 82. CCooddee RReeffaaccttoorriinngg WWhhaatt iiss rreeffaaccttoorriinngg ooff tthhee ssoouurrccee ccooddee?? IImmpprroovviinngg tthhee ddeessiiggnn aanndd qquuaalliittyy ooff eexxiissttiinngg ssoouurrccee ccooddee wwiitthhoouutt cchhaannggiinngg iittss bbeehhaavviioorr SStteepp bbyy sstteepp pprroocceessss tthhaatt ttuurrnnss tthhee bbaadd ccooddee iinnttoo ggoooodd ccooddee ((iiff ppoossssiibbllee)) WWhhyy wwee nneeeedd rreeffaaccttoorriinngg?? CCooddee ccoonnssttaannttllyy cchhaannggeess aanndd iittss qquuaalliittyy ccoonnssttaannttllyy ddeeggrraaddeess ((uunnlleessss rreeffaaccttoorreedd)) RReeqquuiirreemmeennttss oofftteenn cchhaannggee aanndd ccooddee nneeeeddss ttoo bbee cchhaannggeedd ttoo ffoollllooww tthheemm 82
  • 83. RRaaffaaccttoorriinngg PPaatttteerrnnss WWhheenn sshhoouulldd wwee ppeerrffoorrmm rreeffaaccttoorriinngg ooff tthhee ccooddee?? BBaadd ssmmeellllss iinn tthhee ccooddee iinnddiiccaattee nneeeedd ooff rreeffaaccttoorriinngg UUnniitt tteessttss gguuaarraanntteeee tthhaatt rreeffaaccttoorriinngg ddooeess nnoott cchhaannggee tthhee bbeehhaavviioorr RRaaffaaccttoorriinngg ppaatttteerrnnss LLaarrggee rreeppeeaattiinngg ccooddee ffrraaggmmeennttss  eexxttrraacctt rreeppeeaattiinngg ccooddee iinn sseeppaarraattee mmeetthhoodd LLaarrggee mmeetthhooddss  sspplliitt tthheemm llooggiiccaallllyy LLaarrggee lloooopp bbooddyy oorr ddeeeepp nneessttiinngg  eexxttrraacctt mmeetthhoodd 83
  • 84. RRaaffaaccttoorriinngg PPaatttteerrnnss ((22))  RReeffaaccttoorriinngg ppaatttteerrnnss CCllaassss oorr mmeetthhoodd hhaass wweeaakk ccoohheessiioonn  sspplliitt iinnttoo sseevveerraall ccllaasssseess // mmeetthhooddss SSiinnggllee cchhaannggee ccaarrrryy oouutt cchhaannggeess iinn sseevveerraall ccllaasssseess  ccllaasssseess hhaavvee ttiigghhtt ccoouupplliinngg  ccoonnssiiddeerr rreeddeessiiggnn RReellaatteedd ddaattaa aarree aallwwaayyss uusseedd ttooggeetthheerr bbuutt aarree nnoott ppaarrtt ooff aa ssiinnggllee ccllaassss  ggrroouupp tthheemm iinn aa ccllaassss AA mmeetthhoodd hhaass ttoooo mmaannyy ppaarraammeetteerrss  ccrreeaattee aa ccllaassss ttoo ggrroouuppss ppaarraammeetteerrss ttooggeetthheerr AA mmeetthhoodd ccaallllss mmoorree mmeetthhooddss ffrroomm aannootthheerr ccllaassss tthhaann ffrroomm iittss oowwnn ccllaassss  mmoovvee iitt 84
  • 85. RRaaffaaccttoorriinngg PPaatttteerrnnss ((33))  RReeffaaccttoorriinngg ppaatttteerrnnss TTwwoo ccllaasssseess aarree ttiigghhttllyy ccoouupplleedd  mmeerrggee tthheemm oorr rreeddeessiiggnn tthheemm ttoo sseeppaarraattee tthheeiirr rreessppoonnssiibbiilliittiieess PPuubblliicc nnoonn--ccoonnssttaanntt ffiieellddss  mmaakkee tthheemm pprriivvaattee aanndd ddeeffiinnee aacccceessssiinngg pprrooppeerrttiieess MMaaggiicc nnuummbbeerrss iinn tthhee ccooddee  ccoonnssiiddeerr eexxttrraaccttiinngg ccoonnssttaannttss BBaadd nnaammeedd ccllaassss // mmeetthhoodd // vvaarriiaabbllee  rreennaammee iitt CCoommpplleexx bboooolleeaann ccoonnddiittiioonn  sspplliitt iitt ttoo sseevveerraall eexxpprreessssiioonnss oorr mmeetthhoodd ccaallllss 85
  • 86. RRaaffaaccttoorriinngg PPaatttteerrnnss ((44))  RReeffaaccttoorriinngg ppaatttteerrnnss CCoommpplleexx eexxpprreessssiioonn  sspplliitt iitt iinnttoo ffeeww ssiimmppllee ppaarrttss AA sseett ooff ccoonnssttaannttss iiss uusseedd aass eennuummeerraattiioonn  ccoonnvveerrtt iitt ttoo eennuummeerraattiioonn MMeetthhoodd llooggiicc iiss ttoooo ccoommpplleexx aanndd iiss hhaarrdd ttoo uunnddeerrssttaanndd  eexxttrraacctt sseevveerraall mmoorree ssiimmppllee mmeetthhooddss oorr eevveenn ccrreeaattee aa nneeww ccllaassss UUnnuusseedd ccllaasssseess,, mmeetthhooddss,, ppaarraammeetteerrss,, vvaarriiaabblleess  rreemmoovvee tthheemm LLaarrggee ddaattaa iiss ppaasssseedd bbyy vvaalluuee wwiitthhoouutt aa ggoooodd rreeaassoonn  ppaassss iitt bbyy rreeffeerreennccee 86
  • 87. RRaaffaaccttoorriinngg PPaatttteerrnnss ((55))  RReeffaaccttoorriinngg ppaatttteerrnnss FFeeww ccllaasssseess sshhaarree rreeppeeaattiinngg ffuunnccttiioonnaalliittyy  eexxttrraacctt bbaassee ccllaassss aanndd rreeuussee tthhee ccoommmmoonn ccooddee DDiiffffeerreenntt ccllaasssseess nneeeedd ttoo bbee iinnssttaannttiiaatteedd ddeeppeennddiinngg oonn ccoonnffiigguurraattiioonn sseettttiinngg  uussee ffaaccttoorryy CCooddee iiss nnoott wweellll ffoorrmmaatttteedd  rreeffoorrmmaatt iitt TToooo mmaannyy ccllaasssseess iinn aa ssiinnggllee nnaammeessppaaccee  sspplliitt ccllaasssseess llooggiiccaallllyy iinnttoo mmoorree nnaammeessppaacceess UUnnuusseedd uussiinngg ddeeffiinniittiioonnss  rreemmoovvee tthheemm NNoonn--ddeessccrriippttiivvee eerrrroorr mmeessssaaggeess  iimmpprroovvee tthheemm AAbbsseennccee ooff ddeeffeennssiivvee pprrooggrraammmmiinngg  aadddd iitt 87
  • 89. RReessoouurrcceess  TThhee ""HHiigghh--QQuuaalliittyy PPrrooggrraammmmiinngg CCooddee"" ccoouurrssee aatt TTeelleerriikk AAccaaddeemmyy::  hhttttpp::////ccooddeeccoouurrssee..tteelleerriikk..ccoomm  TThhee bbiibbllee ooff hhiigghh--qquuaalliittyy ssooffttwwaarree ccoonnssttrruuccttiioonn:: 89 CCooddee CCoommpplleettee,, 22nndd eeddiittiioonn,, SStteevvee MMccCCoonnnneellll,, MMiiccrroossoofftt PPrreessss,, 22000044,, IISSBBNN 00773355661199667700,, hhttttpp::////wwwwww..cccc22ee..ccoomm
  • 90. HHiigghh--QQuuaalliittyy PPrrooggrraammmmiinngg CCooddee CCoonnssttrruuccttiioonn –– PPaarrtt IIII QQQQuuuueeeessssttttiiiioooonnnnssss????
  • 91. EExxeerrcciisseess 11.. YYoouu aarree ggiivveenn aa ssoouurrccee ccooddee ttrryyiinngg ttoo ssoollvvee tthhee ""GGaammee 1155"" ppuuzzzzllee.. RReeffaaccttoorr tthhee ccooddee qquuaalliittyy wwiitthhoouutt cchhaannggiinngg iittss ffuunnccttiioonnaalliittyy ((bbuugg ffiixxeess aarree aalllloowweedd)):: aa)) RReeffoorrmmaatt tthhee ccooddee.. bb)) GGiivvee ggoooodd nnaammeess ttoo aallll iiddeennttiiffiieerrss.. cc)) SSpplliitt tthhee ffuunnccttiioonnaalliittyy iinnttoo aapppprroopprriiaattee ccllaasssseess.. dd)) RReeffaaccttoorr mmeetthhooddss ttoo aacchhiieevvee ssttrroonngg ccoohheessiioonn aanndd lloooossee ccoouupplliinngg.. ee)) MMiinniimmiizzee tthhee vvaarriiaabblleess ssccooppee,, ssppaann aanndd lliiffeettiimmee.. ff)) IImmpprroovvee tthhee ccoonnttrrooll--ffllooww llooggiicc.. gg)) IInnttrroodduuccee ccoonnssttaannttss wwhheerree aapppprroopprriiaattee.. hh)) AAdddd ddeeffeennssiivvee pprrooggrraammmmiinngg wwhheerree aapppprroopprriiaattee.. 91