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

Documentos relacionados
Refatoração de Software

Java para Desktop. Programação Orientada à Objetos 2 JSE

Refactoring Visão Geral do Catálogo de Martin Fowler

Programação Orientada a Objetos

Introdução à orientação a objetos. João Tito Almeida Vianna 18/05/2013

Linguagem de Programação. Diagrama de classes

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Java na Prática. Célio Silva Aula 3

Refatoração Melhorando o sistema e preparando pra a Web

Variáveis primitivas e Controle de fluxo

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Interfaces e Classes Abstratas

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Programação Orientada a Objetos. Prof. MsC Sílvio Bacalá Júnior

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

PROGRAMAÇÃO JAVA. Parte 3

Programação para GI. Subprogramas

Sobrecarga, Sobreposição e Polimorfismo

JAVA TÓPICOS ESPECIAIS DE PROGRAMACAO ORIENTADA A OBJETOS

DELEGAÇÃO REGIONAL DO ALENTEJO CENTRO DE FORMAÇÃO PROFISSIONAL DE ÉVORA REFLEXÃO 5

Programação por Objectos. Java

Introdução. Programação Orientada a Objetos (POO) João Paulo Q. dos Santos

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

Programação Orientada a Objetos

Decorator e Composite. Nazareno Andrade (baseado no material de Hyggo Almeida)

Introdução à orientação a objetos

Unidade: sobrecarga, construtores e herança

Estratégias de Escrita de Testes Automatizados

ponteiros INF Programação I Prof. Roberto Azevedo

Lição 11 Herança, polimorfismo e interfaces

Estruturas de controle Parte 1

Aula 11 Introdução ao Java Script

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

Programação Orientada a Objetos em Java

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

PROGRAMAÇÃO PARA DESIGNERS - PENSAR COMO O INIMIGO

Engenharia de Software Experimental

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

Linguagem e Técnicas de Programação

Programação Orientada a Objetos - 3º semestre AULA 01 Prof. André Moraes

AULA 16 HERANÇA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes

Herança e Propriedades

Programação Orientada a Objetos Relacionamentos entre classes

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

1) Operadores de auto incremento ++ e auto decremento --

Computação II Orientação a Objetos

Evolução de Software e Refatoração

Aula 4 Estruturas de Controle

Programação Orientada a Objetos

Programação de Computadores - I. Profª Beatriz Profº Israel

Disciplina: Engenharia de Software. 3 Bimestre Aula 2: EVOLUÇÃO DE SOFTWARE

Tratamento de Exceções

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Notas de Aula 04: Herança e polimorfismo.

DATA ACCESS OBJECT (DAO)

PADRONIZAÇÃO 10. INTERFACES PADRONIZAÇÃO CONTRATOS

Introdução a Programação Orientada a Objetos

9 Classes Abstractas e Interfaces

Classes e Objetos em Java. Algoritmos e Programação I. Classes. Classes. Modificadores de Acesso. Classes. Revisão

Algoritmos. Algoritmos. Linguagem de programação. Conceitos. Conceitos. Conceitos. Sintaxe do comando para incluir bibliotecas no programa:

Orientação a Objetos e Java

4 Conceito de Herança

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Módulo 04 Expressões, Estruturas de Seleção e Controle de Fluxo. Última atualização: 09/06/2010

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Objetivo: Aplicar a técnica de encapsulamento no sistema de gestão acadêmica

Herança. BCC702-Programação de Computadores II Emiliana Mara Lopes Simões Universidade Federal de Ouro Preto abril 2010

1 Da aula teórica ao Java

Pág. 1 de 6

Transcrição:

JAVA Tópicos Especiais de Programação Orientada a Objetos 1

REFATORAÇÃO DE CÓDIGOS 2

REFATORAÇÃO O QUE É REFATORAR? 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. 3

REFATORAÇÃO Principais Benefícios: 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. 4

REFATORAÇÃO 5

REFATORAÇÃO Principais Benefícios: 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 6

REFATORAÇÃO Principais Benefícios: 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. 7

REFATORAÇÃO Principais Benefícios: 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. 8

REFATORAÇÃO Mas quando aplicar a Refatoração? Existem alguns momentos principais onde podemos fazer uso da Refatoração: 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. 9

REFATORAÇÃO 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. 10

REFATORAÇÃO 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. 11

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

Principais tipos de Refatorações: REFATORAÇÃO 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

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

EXTRAIR MÉTODO 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("-------------------------------");!! } } 15

EXTRAIR MÉTODO 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("-------------------------------");! } } 16

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. 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;!! }!!! }! } 17

SUBSTITUIR TEMPORÁRIO COM CONSULTA 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 getaltura() { return altura; } public void setaltura(double altura) { this.altura = altura; } public double getgravitacional() { return gravitacional; } public void setgravitacional(double gravitacional) { this.gravitacional = gravitacional; } 18

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. 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. 19

REMOVER VARIÁVEL TEMPORÁRIA! 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); 20

SUBIR E DESCER MÉTODO 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. 21

SUBIR E DESCER MÉTODO 22

SUBIR E DESCER MÉTODO 23

DESFAZER A HIERARQUIA 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. 24

DESFAZER A HIERARQUIA 25

BIBLIOGRAFIA 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 26

OBRIGADO PROF. EMILIO PARMEGIANI DOWNLOAD DO MATERIAL 27