Sei sulla pagina 1di 30

Princpios de projeto ...

... e boas prticas de programao em Java

Mrcio Torres
Desenvolvedor de Software e Professor!

Patrocinadores

Patrocinadores

Patrocinadores

Agenda

"oas prticas lidando com ...

Strings #$meros %ole&es M'todos (str)t)ras dicas e princpios, digamos, transversalmente.

e ...

Preldio

Strings: concatene com StringBuilder

(vite a concatenao de Strings* se for o caso* )se String")ilder.


Ao invs disto: String var = sobrenome + , + nome + ; ; Faa isto: String var = new StringBuilder(sobrenome !a""end(, !a""end(nome !a""end(; ;

CONHECER A API VOC DEVE

Cuidado para no reinventar a roda

Strings: declare Strings literalmente

#o )se new para declarar )ma String


Ao invs disto: String var = new String(#e$to ; Faa isto: String var = te$to;

Strings: compare com o mtodo equals

#o )se ++ para comparar Strings. , operador compara a refer-ncia da varivel.

Ao invs disto: boolean igual = sobrenome == nome; Faa isto: boolean igual = sobrenome!e%uals(nome ;

Strings: compare o literal com a varivel

(vite comparar )ma varivel com )ma String* t) podes receber )ma #)llPointer(.ception

Ao invs disto: boolean igual = sobrenome!e%uals(silva ; Faa isto: boolean igual = silva!e%uals(sobrenome ;

Nmeros: use primitivos sempre que possvel

#o Java e.istem d)as maneiras de representar caracteres* n$meros e boleanos* )sando primitivos c/ar* b0te* s/ort* int* long* float* do)ble* boolean! o) s)as vers&es ,bjeto %/aracter* "0te* S/ort* 1nteger* 2ong* 3loat* Do)ble* "oolean!. (vite )sar 4rappers 5)ando so reali6ados clc)los e a performance e o footprint sejam importantes

USE SEU IDE COM SABEDORIA

Aproveite os atalhos, geradores de cdigo e demais recursos do seu IDE para tornar-se produtivo
Mas saiba se virar sem ele

Nmeros: use BigDecimal para clculos precisos

(vite )sar do)ble e float para opera&es 5)e necessitam de preciso.

Ao invs disto: double salario = &''(!&'; Faa isto: Bid)e*imal salario = Bid)e*imal!value+,(&''(!&' ;

USE A FORA

Experimente programar usando a inteno, declare seu desejo e ento subjugue o cdigo a sua vontade ...

Nmeros: use Wrappers para representar o nulo

Mas c)idado com a #)llPointer(.ception

Ao invs disto: double ta$a; Faa isto: )ouble ta$a;

Cole !es: parametri"e suas cole !es

#o )se arra0s e evite )sar 7rra02ist o) 8as/Set sem parametri6ar o tipo.

Ao invs disto: String-. nomes = new String-(/.; Faa isto: 0ist1String2 nomes = new Arra30ist1String2( ;

Cole !es: devolva uma lista va"ia ao invs de nulo

(vite devolver n)lo. (m )m m'todo 5)e devolva )ma coleo prefira devolv-9la va6ia.

Ao invs disto: "ubli* 0ist1Algo2 get0ista( return lista; 5 Faa isto: "ubli* 0ist1Algo2 get0ista( 4 i, (lista == null return 6olle*tions!em"t30ist( ; return lista; 5 4

Ao desenvolver a API p !lica de seus mdulos pergunte-se a cada tipo de entrada, v"lida ou inv"lida, #ual o retorno #ue no surpreenderia ...

Cole !es: sempre so#rescreva equals e $as$Code

,s m'todos e5)als e /as/%ode so )sados em conj)ntos Set! e o)tras cole&es baseados em /as/ como o 8as/Map!.

%todos: n&o passe nulo como par'metros

Prefira a sobrecarga a passar n)lo nos par:metros Se o m'todo tem m)itos par:metros apli5)e a refatorao ,bjeto Par:metro

Ao invs disto: "rinter!"rint(null, null, &, null, do* ; Faa isto: "rinter!"rint(&, do* ; *lass 7rinter 4 "ubli* void "rint(int *o"ias, )o*ument do* 5 4

NO SE REPITA

Pro$ete tendo o princ%pio D&' (Don)t &epeat 'oursel*+ em mente. Cada parte de cdigo deve ser expresso em nico ponto e sem am!iguidades

%todos: escreva mtodos pequenos e legveis

Se o m'todo crescer m)ito decompon/a em m'todos menores* apli5)e a refatorao (.trair M'todo

(struturas: use (numerados para op !es

#o )se Strings* #$meros o) "oleanos para op&es

Ao invs disto: mailer!send(true ; Faa isto: mailer!send(7rioridade!A0#A ;

SEMPRE QUE UM COMENTRIO VOC FOR ADICIONAR, A SI MESMO PERGUNTE: ,C-.- P-//- E0 E//E C1DI2- .E34-&A& P-//- PA&A 50E DE/6ECE//7&I- E//E C-.E687&I- P-//A /E&9

(struturas: crie novas classes para grupos de dados

(vite gr)pos de dados criando novas classes (vite a ,bsesso Primitiva

Ao invs disto: *lass 8ota 4 int distan*ia; 5 Faa isto: *lass 8ota 4 )istan*ia distan*ia; 5

/I2A - P&I6C:PI- DE ACE//- 06I;-&.E

;ornea acesso <s propriedades e servios de seus o!$etos atrav=s de uma notao uni*orme escondendo se eles so o!tidos atrav=s de arma>enamento ou computao ....

Bi#liogra)ia

Pergun !"#

Contato

marciojrtorres.blogspot.com marciojrtorres at gmail.com

Potrebbero piacerti anche