Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.

Slides:



Advertisements
Apresentações semelhantes
Análise e Projeto Orientado a Objetos
Advertisements

Introdução à Programação Orientada à Objetos Prof. Daniel Merli Lamosa Maio de 2002.
Projeto 1.
UML – MODELAÇÃO DA ESTRUTURA Professor Sandro Carvalho.
Análise Orientada a Objetos
Modelagem Orientada a Objetos
1 Introdução aos padrões de projeto (GoF) Conceitos preliminares –Mecanismos de herança –Princípio de Substituição de Liskov –Acoplamento concreto x Acoplamento.
Template Method Intenção: definir o esqueleto de um algoritmo em uma operação, postergando (delegando) a definição de alguns passos desse algoritmo para.
Introdução ao paradigma de programação: Orientado a Objetos
Alexandre Parra Site: Os Pilares da OO em Java Alexandre Parra Site:
Diagrama de Classes.
Linguagem de Programação II
Linguagem de Programação II
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Classes Abstractas.
Geração de Código.
Herança e Polimorfismo
Revisão POO Profa. Cintia Carvalho Oliveira
Herança em C#.
Introdução a programação (if669cc)
Polimorfismo em C#.
Aula prática 13 Orientação a Objetos – C++ Parte 1
Aula prática 6 Vetores e Matrizes
Aula Prática If669 – Introdução à Programação
Linguagens de Programação
Conceitos básicos de orientação a objetos
DIAGRAMA DE CLASSE Modelagem de Software
Programação Orientada à Objetos
Oberdan B. Ferreira Polimorfismo Oberdan B. Ferreira
Linguagem de Programação JAVA
Paradigmas da Programação – Semestre 1 – Aula 2 Professores: Eduardo Mantovani Fábio de Paula.
Professor: Márcio Amador
Orientação a Objetos Parte I
Programação Orientada à Objetos
Programação Orientada a Objetos - Java
Princípios de Análise e Projeto Orientados a Objetos com UML
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Classes e Objetos em Java.
SISTEMAS DISTRIBUIDOS Aula 4
© Ricardo Pereira e Silva
Aula prática 14 Orientação a Objetos – C++ Parte 2
Projeto Orientado aos Objetos Prof. Wolley W. Silva
Análise Orientado aos Objetos Prof. Wolley W. Silva
Programação Orientada à Objetos
Interfaces e classes abstratas. Conceitos de Orientação a Objeto.
Curso de Aprendizado Industrial Desenvolvedor WEB
Introdução às Java Threads
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Interfaces POO Avançado.
Classes Abstratas e Interface
Prof.: Bruno Rafael de Oliveira Rodrigues.  Existe para poder servir de molde para outras classes.  Deve ser declarada tal usando-se a palavra chave.
Paradigmas da Programação – Semestre 2 – Aula 1 Professores: Fábio de Paula Santos Eduardo Mantovani
Classes Abstratas e Interfaces GX – Aula05 1.
Paradigmas de Programação –Aula 7 Lab 2 Professores: Eduardo Mantovani Fábio Paula Santos.
CONEXÕES DE SABERES Amirton Chagas – Paola Accioly –
Conceitos de Orientação a Objetos zConceito de tipo zTipos Abstratos de Dados zMódulos/Pacotes zEncapsulamento.
OO com Java Luiz Carlos d´Oleron Roteiro de aula.
Introdução a Orientação a Objetos
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
20/04/2017 Orientação a Objetos 1 1.
Módulo II Capítulo 1: Orientação a Objetos
Relacionamentos UML e Polimorfismo
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA TOCANTINS Campus Araguaína Continuação Modelagem Orientada a Objetos Técnico Subsequente.
Prof.: Bruno Rafael de Oliveira Rodrigues. Herança Possibilita a uma classe usar campos ou métodos definidos em outra classe. Assim a classe pai possui.
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Desenvolvendo sotfware com UML1 Visão Geral de Orientação a Objetos.
Engenharia de Software Orientada a Objetos Professor: Guilherme Timóteo Aula 3: – Modelagem de Classes (parte 2)
1. 2 Programação Orientada a Objetos II Prof. Maurício Rodrigues de Morais
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários.
Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Análise e Projeto de Sistemas Análise & modelagem conceitual Prof. Edjandir Corrêa Costa
Transcrição da apresentação:

Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones

O que é Refatoração? Refatoração é o processo de alteração de um sistema de software de modo que o comportamento externo do código não mude, mas que sua estrutura interna seja melhorada. É uma maneira disciplinada de aperfeiçoar o código que minimiza a chance de introdução de falhas. Em essência, quando você usa refatoração, você está melhorando o projeto do código após este ter sido escrito.

Um catálogo de Refatorações Tratando Generalizações

Subir atributo na hierarquia

Subir atributo na hierarquia Duas subclasses têm o mesmo atributo Mova o atributo para a superclasse

Subir atributo na hierarquia

Subir método na hierarquia

Subir método na hierarquia Você tem métodos nas subclasses que produzem resultados idênticos . Mova-os para a superclasse. Motivação: Evitar a duplicação de código

Exemplo O método createBill é idêntico para ambas as classes

Exemplo Não posso mover o método createBill na hierarquia porque o método chargeFor é diferente em cada subclasse Solução: declarar o método chargeFor como abstrato na superclasse

Subir código do construtor na hierarquia

Subir código do construtor na hierarquia Você tem construtores nas subclasses com código quase idêntico.   Crie um construtor para a superclasse; chame-o a partir de métodos das subclasses. Motivação: O código dos construtores é quase idêntico, mas você não pode usar "subir método na hierarquia" porque métodos construtores não podem ser herdados

Descer Método na Hierarquia

Descer Método na Hierarquia Algum comportamento na superclasse é relevante apenas para algumas de suas subclasses. Mova-o para essas subclasses Motivação: Um código específico faz sentido apenas em algumas das subclasses

Descer Método na Hierarquia

Extrair Subclasse

Extrair Subclasse Uma classe tem características que são usadas apenas em algumas instâncias. Crie uma subclasse para esse subconjunto de características. Motivação: O principal motivo para usar Extrair Subclasse é a observação de que uma classe tem comportamento usado por algumas das instâncias da classe mas não por outras.

Extrair Subclasse

Extrair Subclasse

Extrair Superclasse

Extrair Superclasse Você tem duas classes com características semelhantes.   Crie uma superclasse e mova as características em comum para ela. Motivação: Evitar a duplicação de código

Extrair Superclasse

Extrair Superclasse

Extrair Interface

Extrair Interface Diversos clientes usam o mesmo subconjunto da interface de uma classe ou duas classes tem parte de suas interfaces em comum.   Extraia o subconjunto para uma interface.

Extrair Interface Motivação: Somente parte da interface de uma classe faz sentido para um grupo de clientes Uma classe tem de trabalhar com qualquer classe que trate um grupo de requisições Interfaces são uma boa solução quando uma classe tem papéis distintos em diferentes situações.

Extrair Interface

Extrair Interface

Condensar Hierarquia

Condensar Hierarquia Uma superclasse e uma subclasse não são muito diferentes. Junte-as.

Criar Método Roteiro

Criar Método Roteiro Você tem dois métodos em subclasses diferentes que executam passos semelhantes na mesma ordem, mas esses passos são diferentes. Coloque os passos em métodos com a mesma assinatura, de modo que os métodos originais se tornem o mesmo. Você poderá então subi-los na hierarquia.

Criar Método Roteiro Motivação Herança é uma ferramenta poderosa para eliminar comportamento duplicado. Sempre que vemos dois métodos semelhantes em uma subclasse, queremos juntá-los em uma superclasse. Mas e se eles não forem exatamente os mesmos?   Um caso comum é o de dois métodos que parecem ter passos similares na mesma ordem, porém os passos não são os mesmos. Neste caso podemos mover a seqüência para a superclasse e permitir que o polimorfismo execute seu papel

Criar Método Roteiro

Substituir Herança por Delegação

Substituir Herança por Delegação Uma subclasse usa apenas parte da interface de uma superclasse ou não quer herdar dados. Crie um campo para a superclasse, ajuste métodos para delegarem para a superclasse e remova a herança.  

Substituir Herança por Delegação Motivação A subclasse usa somente parte da interface da superclasse Problema conceitual: a subclasse não é uma superclasse Necessidade de substituir a herança por outra "mais útil"

Substituir Herança por Delegação

Substituir Herança por Delegação

Substituir Delegação por Herança

Substituir Delegação por Herança Você está usando delegação e está freqüentemente escrevendo muitas delegações simples para toda a interface.   Torne a classe que delega uma subclasse da classe delegada.

Motivação Motivação   Este é o reverso de Substituir Herança por Delegação. Se você se encontrar usando todos os métodos da classe delegada e estiver farto de escrever todos esses métodos de delegação simples, pode voltar para a herança facilmente.

Substituir Delegação por Herança

Substituir Delegação por Herança