tópicos especiais de programação orientada a objetos · torna o código mais fácil de entender...

27
JAVA Tópicos Especiais de Programação Orientada a Objetos 1 sexta-feira, 26 de outubro de 12

Upload: ngothien

Post on 11-Feb-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

JAVATópicos Especiais de Programação

Orientada a Objetos

1

sexta-feira, 26 de outubro de 12

REFATORAÇÃO DE CÓDIGOS

2

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

O QUE É REFATORAR?

3

Refatorar é alterar o código de um projeto existente, sem mudar o seu comportamento, ou seja, trata-se de melhorar a qualidade interna do software, a nível de código e design.

Melhorar a qualidade no sentido de tornar o código mais legível, coeso, com um melhor desempenho ou simplesmente tornar o design mais limpo.

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

Principais Benefícios:

4

Refatorar resulta em um melhor projeto de software

O entendimento do negócio pode mudar durante o desenvolvimento e refatorar pode aproximar o modelo do software ao negócio.

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

5

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

Principais Benefícios:

6

Ajuda a programar mais rápido

Um código mais limpo, coeso e organizado facilita a alteração e adição de novas funcionalidades.

Programador do Mês

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

Principais Benefícios:

7

Torna o código mais fácil de entender

Com práticas de refatoração o código fala por si, dispensando comentários e melhorando o entendimento do sistema pela equipe que compartilha o código.

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

Principais Benefícios:

8

Ajuda a encontrar falhas

Códigos mais simples e legíveis levam a uma melhor observação, tanto a nível de design quanto a nível de implementação, e isto ajuda a encontrar falhas latentes, gargalos, etc.

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

Mas quando aplicar a Refatoração?Existem alguns momentos principais onde podemos fazer uso da Refatoração:

9

Corrigindo um erro

É um ótimo momento para introduzir um código mais limpo, haja visto que a mesma área pode ser novamente alterada, e por outro programador.

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

10

Adicionando uma nova funcionalidade

Às vezes, percebe-se que a hierarquia de classes poderia ser diferente, um método poderia estar em uma classe mais abstraída ou mais específica. O programador lida o tempo todo com a complexidade, e identificar partes que poderão sofrer alterações no futuro e torná-las mais flexíveis para receber estas alterações, faz parte da complexidade.

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

11

Revisando o código

O código está pronto e funcionando, mas percebe-se locais em que o código parece confuso (ter que ler mais de 2 vezes indica isso) ou nota-se que existem instruções desnecessárias que degradam o desempenho, então, eis um bom momento para refatorar.

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

O livro mais importante sobre refatoração é Refactoring: Improving the Design of Existing Code de Martin Fowler, onde são explicados os conceitos, motivações e uma série de refatorações. Os tipos de refatorações utilizadas por Fowler se tornou padrão e são amplamente utilizados hoje.

12

sexta-feira, 26 de outubro de 12

REFATORAÇÃO

Principais tipos de Refatorações:

•Extrair Método (Extract Method)•Mover Método (Move Method)•Mover Atributo (Move Field)•Extrair Classe (Extract Class)•Encapsular Atributo (Encapsulate Field)•Renomear Método (Rename Method)•Remover Variáveis Temporárias (Split Temporary Variable)•Substituir Temporário por Consulta (Replace Temporary with Query)•Subir Método (Pull Up Method)•Subir Atributo (Pull Up Field)•Descer Método (Push Down Method)•Descer Atributo (Push Down Field)•Extrair Sub-classe (Extract Subclass)•Extrair Super-classe (Extract Superclass)

13

sexta-feira, 26 de outubro de 12

EXTRAIR MÉTODO

Você tem um fragmento de código que poderia ser agrupado. Mude o fragmento para um novo método e escolha um nome que explique o que ele faz.

É uma das refatorações mais comuns. Se um método é longo demais ou difícil de entender e exige muitos comentários, extraia trechos do método e crie novos métodos para eles. Isso vai melhorar as chances de reutilização do código e vai fazer com que os métodos que o chamam fiquem mais fáceis de entender. O código fica parecendo comentário.

14

sexta-feira, 26 de outubro de 12

EXTRAIR MÉTODO

15

public class DividaCliente {!! public void imprimeDividas(ArrayList<Double> dividas) {! !! ! System.out.println("-------------------------------");! ! System.out.println("Impressao de dividas do Cliente");! ! System.out.println("-------------------------------");! !! ! Iterator<Double> iteradorDividas = dividas.iterator();! ! Double totalDivida = 0.0;! !! ! while (iteradorDividas.hasNext()) {! ! ! totalDivida += iteradorDividas.next();! ! }

! ! System.out.println("-------------------------------");! ! System.out.println("Total de dividas: " + totalDivida);! ! System.out.println("-------------------------------");!! }

}

sexta-feira, 26 de outubro de 12

EXTRAIR MÉTODO

16

public class DividaCliente {!! public void imprimeDividas(ArrayList<Double> dividas) {! !! ! imprimeCabecalho();! !! ! Iterator<Double> iteradorDividas = dividas.iterator();! ! Double totalDivida = 0.0;! !! ! while (iteradorDividas.hasNext()) {! ! ! totalDivida += iteradorDividas.next();! ! }

! ! imprimeDivida(totalDivida);!! }!! private void imprimeCabecalho() {! ! System.out.println("-------------------------------");! ! System.out.println("Impressao de dividas do Cliente");! ! System.out.println("-------------------------------");! }

! private void imprimeDivida(double divida) {! ! System.out.println("-------------------------------");! ! System.out.println("Total de dividas: " + divida);! ! System.out.println("-------------------------------");! }

}

sexta-feira, 26 de outubro de 12

SUBSTITUIR TEMPORÁRIO COM CONSULTA

Essa técnica consiste em trocar variáveis temporárias que contêm expressões matemáticas por métodos, para que possam ser chamados em outros métodos aumentando a reusabilidade e manutenção da expressão em questão.

17

public class SubsTempConsulta {

! private double massa, gravitacional, altura;!! public String localizacaoObjeto() {!! ! double energiaPotencial = this.massa * this.gravitacional * this.altura;! !! ! if (energiaPotencial == 0) {! ! ! return "O objeto está no chão. Energia potencial: " + energiaPotencial;! ! }! ! else ! ! {! ! ! return "O objeto não está no chão. Energia potencial: " + energiaPotencial;! ! }! !! }!}

sexta-feira, 26 de outubro de 12

SUBSTITUIR TEMPORÁRIO COM CONSULTA

18

private double massa, gravitacional, altura; public String localizacaoObjeto() { if (energiaPotencial() == 0) { return "O objeto está no chão. Energia potencial: " + energiaPotencial(); } else { return "O objeto não está no chão. Energia potencial: " + energiaPotencial(); } } private double energiaPotencial() { return getMassa() * getGravitacional() * getAltura(); }

public double getMassa() { return massa; } public void setMassa(double massa) { this.massa = massa; }

public double getGravitacional() { return gravitacional; } public void setGravitacional(double gravitacional) { this.gravitacional = gravitacional; }

public double getAltura() { return altura; } public void setAltura(double altura) { this.altura = altura; }

sexta-feira, 26 de outubro de 12

REMOVER VARIÁVEL TEMPORÁRIA

Caracteriza-se por ter uma ou várias variáveis temporárias com valores designados que são frequentemente alterados, exceto quando forem variáveis de loop ou coleções. O problema afeta diretamente a clareza do seu código, sendo que em um dado momento uma variável vale X e em outro a mesma variável poderá valer Y.

19

A cada vez que a variável altera o seu valor, aumenta-se também a sua responsabilidade dentro do método. Qualquer variável com mais de uma responsabilidade deve ser refatorada de maneira que cada variável tenha apenas uma responsabilidade. Usar uma variável para designar várias coisas pode ser bastante confuso para o leitor do código. Lembre-se que a refatoração de código tem como princípio melhorar a organização do código para ser mais legível aos humanos, e não as máquinas. Para resolver nosso problema podemos criar variáveis temporárias como apenas uma responsabilidade e declara-las como sendo constantes.

sexta-feira, 26 de outubro de 12

REMOVER VARIÁVEL TEMPORÁRIA

20

! ! double temporario = getMassa() * getGravitacional() * getAltura();! ! System.out.println("Energia potencial: " + temporario);! ! temporario = getMassa() * (getVelocidade() * getVelocidade()) / 2;! ! System.out.println("Energia cinetica: " + temporario);! !

! ! final double energiaPotencial = getMassa() * getGravitacional() * getAltura();! ! System.out.println("Energia potencial: " + energiaPotencial);! ! final double energiaCinetica = getMassa() * (getVelocidade() * getVelocidade()) / 2;! ! System.out.println("Energia cinetica: " + energiaCinetica);

sexta-feira, 26 de outubro de 12

SUBIR E DESCER MÉTODO

21

As refatorações dos tipos Subir e Descer Métodos consistem na mudança de um método de uma ou mais subclasses para a superclasse ou vice versa. A principal motivação dessa refatoração é a existência de métodos repetidos ou com comportamento semelhantes nas subclasses. Dessa forma para evitar a repetição de código e melhorar a manutenção, esse método é movido para a superclasses ou vice versa.

sexta-feira, 26 de outubro de 12

SUBIR E DESCER MÉTODO

22

sexta-feira, 26 de outubro de 12

SUBIR E DESCER MÉTODO

23

sexta-feira, 26 de outubro de 12

DESFAZER A HIERARQUIA

24

Neste tipo de refatoração a hierarquia de classes existente é desfeita, deixando toda a implementação para a superclasse. Faz uma generalização dos métodos das subclasses de forma a um único método atender a todas implementações existentes nas subclasses. Normalmente essa refatoração ocorre quando o sistema foi projeto em excesso, ou seja, foi realizado uma abordagem mais completa do que era necessário.

sexta-feira, 26 de outubro de 12

DESFAZER A HIERARQUIA

25

sexta-feira, 26 de outubro de 12

BIBLIOGRAFIA

26

•Introdução ao Java, Daniel Destro do Carmo•Use a Cabeça Java, Kathy Sierra e Bert Bates•Certificação Sun para Programador Java 6, Kathy Sierra e Bert Bates

sexta-feira, 26 de outubro de 12

OBRIGADO

27

PROF. EMILIO PARMEGIANI

DOWNLOAD DO MATERIAL

sexta-feira, 26 de outubro de 12