Top Banner
Classe Geovane Pazine Filho Inael Rodrigues de Oliveira Neto Jackeline Neves de Almeida
26

Livro Código limpo: Classes

Jun 11, 2015

Download

Documents

Inael Rodrigues

Apresentação do capítulo que trata de Classes no Livro - Código Limpo: Habilidades Práticas do Agile Software
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Livro Código limpo:  Classes

Classe

Geovane Pazine FilhoInael Rodrigues de Oliveira NetoJackeline Neves de Almeida

Page 2: Livro Código limpo:  Classes

Organização

Ordem

Variáveis Públicas (raramente);Estáticas;Constantes.Estáticas privadas;Instância privada;

Funções Públicas;Privadas (Após a função pública que a chama.)

Page 3: Livro Código limpo:  Classes

Encapsulamento

Ideal: variáveis e funções privadas;

Mas para poder realizar testes tornamos protegidas.

Manter a privacidade! Perder o encapsulamento é a última alternativa!

Page 4: Livro Código limpo:  Classes

Classes pequenas

1ª regra: Classes devem ser pequenas;2ª regra: Elas devem ser menores ainda.

O quão pequena?

Page 5: Livro Código limpo:  Classes
Page 6: Livro Código limpo:  Classes
Page 7: Livro Código limpo:  Classes

Classes pequenas - cont

Cinco métodos nesse caso é muito!!!

Para classe não medimos em quantidade de métodos e sim responsabilidades!

Page 8: Livro Código limpo:  Classes

Classes pequenas - cont

O nome da classe descreve quais responsabilidades ela faz.

Se ela não tiver um nome conciso, provavelmente ficará grande.

Ambiguidade = Chances de muitas responsabilidades. Ex: Processador, Gerenciador ou Super

Exercício: Escreva uma breve descrição da classe com 25 palavras sem usar "se", "e", "ou" ou "mas".

Page 9: Livro Código limpo:  Classes

Princípio da Responsabilidade única (SRP)

Uma classe deve ter apenas uma responsabilidade e um motivo para mudar.

A classe abaixo tem 2 motivos para mudar:1º acompanha informação sobre a versão;2º gerencia componentes Swing do Java.

Vamos alterar o nro da versão se alterarmos qualquer código Swing, mas o oposto não é necessário.

Page 10: Livro Código limpo:  Classes

Princípio da Responsabilidade única (SRP)

Responsabilidade única e potencial para reutilização em outros aplicativos.

Fazer funcionar é diferente de código limpo! Não terminamos quando o programa funciona! Volte e divida classes muito cheias em outras

com responsabilidades únicas.

Page 11: Livro Código limpo:  Classes

Princípio da Responsabilidade única (SRP)

"Você quer suas ferramentas organizadas em caixas de ferramentas com muitas gavets

pequenas, cada um com objetos bem classificados e rotulados? Ou poucas gavetas

nas quais você coloca tudo?"

Page 12: Livro Código limpo:  Classes

Coesão

● Classes devem ter poucas variáveis

● Cada variavel deve ser manipulada por algum método

● Métodos e variáveis são co-dependentes como um todo lógico

Page 13: Livro Código limpo:  Classes

Coesão

Veja a implementação de uma Pilha:● Bem Coesa● Apenas size() não usa ambas as variáveis

Page 14: Livro Código limpo:  Classes

Coesão

No entanto, funções pequenas e poucos parâmetros pode:● proliferar instâncias de variáveis usadas por

vários métodos

Quando isso ocorre deve-se separar as variáveis e métodos em duas classes mais coesas

Page 15: Livro Código limpo:  Classes

Coesão

Imagine uma função grande em que desejamos extrair uma parte dela para outra função.

Se código a ser extraído usa quatro variáveis declaradas na função, devemos passar todas as quatro variáveis como parâmetros para a nova função?

Page 16: Livro Código limpo:  Classes

Coesão

Se convertêssemos aquelas4 variáveis em instâncias de classe, seria mais fácil extrair o código sem passarvariável por parâmetro.

Page 17: Livro Código limpo:  Classes

Coesão

Se classe ficar com muitas instâncias de variáveis:● é bem provável que essa classe pode ser

dividida em outra classe.

Page 18: Livro Código limpo:  Classes

Como organizar para alterar

● Necessidade de Mudança○ Complexidade de entendimento das classes

● Mudança constante○ Risco do Sistema não funcionar como esperado

Page 19: Livro Código limpo:  Classes

Como organizar para alterarExemplo de classe:

● Falta suporte a update● Modificação tem possibilidade de estragar outro código.

Page 20: Livro Código limpo:  Classes

Como organizar para alterar

● A Classe esta logicamente completa?!

○ Se sim, a classe pode ser deixada em paz!

○ Se não, devemos considerar consertar nosso projeto!

Page 21: Livro Código limpo:  Classes

Como organizar para alterar

● Classes comresponsabilidades únicas.

● Metodos privados somenteonde necessário.

● Beneficios:● Entendimento Simples!● Risco de uma função

prejudicar outra é infima!● Mais fácil testar pontos

lógicos● Adicionar funções muito

mais fácil.

Page 22: Livro Código limpo:  Classes

Como organizar para alterar

● Classes devem ser abertas para expansão, mas fechadas para alteração!

● Num sistema ideal, incorporaríamos novos recursos através da expansão e não alterando o código.

Page 23: Livro Código limpo:  Classes

Como isolar das alterações

● Uma classe do cliente dependente de detalhes concretos corre perigo quando tais detalhes são modificados.

● Interface e classes abstratas ajudam a isolar o impacto desses detalhes.

Page 24: Livro Código limpo:  Classes

Como isolar das alterações

Exemplo:Classe Portfolio, depende diretamente de

uma API TokyoStockExchange externa para derivar o valor do portfolio.

Problemas?!

Page 25: Livro Código limpo:  Classes

Como isolar das alterações

Solução:

Interface StockExchange que declare um único método.

Page 26: Livro Código limpo:  Classes

Como isolar das alterações

● Sistema desacoplado é mais flexivel, portanto, tem maior capacidade de reutilização.

● Ao utilizar dessa estratégia nossas classes aderem ao DIP (Principio da Inversão da Independencia)

"Classes devem depender de abstrações e não de detalhes concretos"