Este documento resume as seguintes informações essenciais:
1) Rodrigo Branas é um especialista em refatorização de código e desenvolvimento ágil que oferece treinamentos, escreve artigos e faz palestras.
2) Ele tem formação acadêmica em ciência da computação e gestão de projetos e certificações como PMP, Java e ágil.
3) Rodrigo Branas tem mais de 12 anos de experiência desenvolvendo software Java em diversas empresas.
3. Formación Académica
Ciencias de la Computación - UFSC
Gestión de Proyectos - FGV
Certificaciones
SCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
Experiencia
Desde hace más de 12 años desarrollando
software en la plataforma Java en las empresas:
EDS, HP, NET, Citibank, GM, Dígitro, Softplan,
OnCast, Senai, VALE, RBS, Unimed, Globalcode,
V.Office, Suntech, WPlex e Gennera.
5. Hay un fragmento del código que
podría ser agrupado para mejorar
su comprensión.
Transforme este fragmento en un
nuevo método cuyo nombre expliqu
su propósito.
159. Un comando condicional selecciona
diferentes comportamientos según el
tipo de objeto.
Introduzca nuevas clases y mueva cada
rama del comando condicional para un
método.
160. 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public void emitirExtrato(String tipo) {
if(tipo.equals(“SimplificadoMensal”)) {
// Código para emissão do extrato simplificado mensal.
} else if(tipo.equals(“SimplificadoQuinzenal”)) {
// Código para emissão do extrato simplificado quinzenal.
} else if(tipo.equals(“SimplificadoSemanal”)) {
// Código para emissão do extrato simplificado semanal.
} else if(tipo.equals(“Completo”)) {
// Código para emissão do extrato completo.
}
}
166. 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public void emitirExtrato(String tipo) {
if(tipo.equals(“SimplificadoMensal”)) {
// Código para emissão do extrato simplificado mensal.
} else if(tipo.equals(“SimplificadoQuinzenal”)) {
// Código para emissão do extrato simplificado quinzenal.
} else if(tipo.equals(“SimplificadoSemanal”)) {
// Código para emissão do extrato simplificado semanal.
} else if(tipo.equals(“Completo”)) {
// Código para emissão do extrato completo.
}
}
167. 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public abstract class Extrato {
public abstract void emitir();
}
public class ExtratoSimplificadoMensal extends Extrato {
public void emitir() {
// Código para emissão do extrato simplificado mensal.
}
}
public class ExtratoCompleto extends Extrato {
public void emitir() {
// Código para emissão do extrato completo.
}
}
183. Una clase hace referencia a una otra, la
cual hace referencia a una otra y así
sucesivamente.
Críe métodos para ocultar
la delegación.
184. 1.
2.
3.
4.
5.
6.
7.
// Código da classe PaperBoy…
double valorAPagar = 2.00;
if (cliente.getCarteira().getTotal() > valorAPagar) {
cliente.getCarteira().retirarDinheiro(valorAPagar);
} else {
// Volte quando tiver dinheiro para pagar…
}
185. 1.
2.
3.
4.
5.
6.
7.
// Código da classe PaperBoy…
double valorAPagar = 2.00;
if (cliente.getCarteira().getTotal() > valorAPagar) {
cliente.getCarteira().retirarDinheiro(valorAPagar);
} else {
// Volte quando tiver dinheiro para pagar…
}
186. 1.
2.
3.
4.
5.
6.
7.
// Código da classe PaperBoy…
double valorAPagar = 2.00;
if () {
} else {
// Volte quando tiver dinheiro para pagar…
}
187. 1.
2.
3.
4.
5.
6.
7.
// Código da classe PaperBoy…
double valorAPagar = 2.00;
if (cliente.pagar(valorAPagar)) {
// Agradecemos a preferência…
} else {
// Volte quando tiver dinheiro para pagar…
}
200. 1.
2.
3.
4.
5.
6.
public void calcularImposto(int salario) throws Exception {
if(salario < 0) {
throw new Exception(“Salário não pode ser negativo”);
}
// Código de cálculo do imposto retido na fonte
}
201. 1.
2.
3.
4.
5.
6.
public void calcularImposto(int salario) throws Exception {
if(salario < 0) {
throw new Exception(“Salário não pode ser negativo”);
}
// Código de cálculo do imposto retido na fonte
}
203. 1.
2.
3.
4.
5.
6.
public void calcularImposto(int salario) {
if(salario < 0) {
throw new IllegalArgumentException(“Salário não pode ser
negativo”);
}
// Código de cálculo do imposto retido na fonte
}
212. Estamos utilizando una excepción
customizada donde podríamos
utilizar una excepción de la
lenguaje.
Sustitua al excepción customizada
por una excepción de la lenguaje.
214. Principais exceções da linguagem:
IllegalArgumentException
IllegalStateException
NullPointerException
IndexOutOfBoundsException
UnsupportedOperationException
273. Dos métodos en subclasses distintas
ejecutan pasos similares en la misma
orden, pero los pasos son diferentes
Utilice un Template Method para
eliminar la duplicación
274. 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class Cafe {
public void fazerCafe() {
ferverAgua();
passarCafe();
colocarNaXicara();
colocarAcucar();
}
public void ferverAgua() {
System.out.println(“Fervendo a água...”);
}
public void passarCafe() {
System.out.println(“Passando o café...”);
}
public void colocaNaXicara() {
System.out.println(“Colocando na xícara...”);
}
public void colocarAcucar() {
System.out.println(“Colocando açucar...”);
}
}
275. 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class Cha {
public void fazerCha() {
ferverAgua();
mergulharCha();
colocarNaXicara();
colocarLimao();
}
public void ferverAgua() {
System.out.println(“Fervendo a água...”);
}
public void mergulharCha() {
System.out.println(“Mergulhando o chá...”);
}
public void colocaNaXicara() {
System.out.println(“Colocando na xícara...”);
}
public void colocarLimao() {
System.out.println(“Colocando limão...”);
}
}
276. 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class Cafe {
public void fazerCafe() {
ferverAgua();
passarCafe();
colocarNaXicara();
colocarAcucar();
}
public void ferverAgua() {
System.out.println(“Fervendo a água...”);
}
public void passarCafe() {
System.out.println(“Passando o café...”);
}
public void colocaNaXicara() {
System.out.println(“Colocando na xícara...”);
}
public void colocarAcucar() {
System.out.println(“Colocando açucar...”);
}
}
277. 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class Cha {
public void fazerCha() {
ferverAgua();
mergulharCha();
colocarNaXicara();
colocarLimao();
}
public void ferverAgua() {
System.out.println(“Fervendo a água...”);
}
public void mergulharCha() {
System.out.println(“Mergulhando o chá...”);
}
public void colocaNaXicara() {
System.out.println(“Colocando na xícara...”);
}
public void colocarLimao() {
System.out.println(“Colocando limão...”);
}
}
278. 1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public abstract class BebidaQuente {
public void prepararBebida() {
ferverAgua();
infusao();
colocarNaXicara();
condimentar();
}
public void ferverAgua() {
System.out.println(“Fervendo a água...”);
}
public abstract void infusao();
public void colocaNaXicara() {
System.out.println(“Colocando na xícara...”);
}
public abstract void condimentar();
}
279. 1.
2.
3.
4.
5.
6.
7.
8.
public class Café extends BebidaQuente {
public void infusao() {
System.out.println(“Passando o café...”);
}
public void condimentar() {
System.out.println(“Colocando açucar...”);
}
}
280. 1.
2.
3.
4.
5.
6.
7.
8.
public class Cha extends BebidaQuente {
public void infusao() {
System.out.println(“Mergulhando o chá...”);
}
public void condimentar() {
System.out.println(“Colocando limão...”);
}
}