Class21
3562 palavras
15 páginas
Programação
em
Java
para
a
Plataforma
Android
–
AULA
21
Princípios de Projeto de Classes ‐ II
• A classe como unidade de reúso de código
• Princípios que garantem a boa práCca da programação orientada a objetos
• Principio da Segregação de Interfaces
• Principio da Inversão de Dependências
• O padrão de projetos template
• A lei das interfaces mais genéricas
Princípio da Inversão de Dependências
• Classes mais abstratas não devem depender de classes mais concretas.
– Na verdade, justamente o contrário deve acontecer. • Em outras palavras: classes provedoras devem ser mais abstratas, e classes clientes podem que é uma classe ser mais concretas.
Quando uma classe depende de outra?
O que significa uma classe ser
"mais abstrata"?
cliente? E uma classe provedora?
Princípio da Inversão de Dependências
É um truque comum na programação de interfaces de jogos desenharmos somente as formas que podem ser vistas pelo usuário.
Formas que estão fora da área de visão, ou que são muito pequenas para serem vistas não precisam ser desenhadas.
Aplicaremos essa técnica em nossa aplicação, desenhando somente aquelas formas que possuem uma área grande.
Implemente um método hasLargeArea que receba uma lista de formas, e retorne a sublista com as formas de área grande, isso é, área maior que um certo limiar.
Primeira TentaCva private List<Shape> hasLargeArea(List<Shape> shapes, float area) { List<Shape> largeShapes = new LinkedList<Shape>();
Qual o for (Shape shape : shapes) { problema com if (shape instanceof Rectangle) { esse código? Rectangle r = (Rectangle) shape; if (r.getWidth() * r.getHeight() >= area) { largeShapes.add(r); } } else if (shape instanceof Dot) { Dot d = (Dot) shape; if (d.getDiameter() * Math.PI >= area) { largeShapes.add(d); } } else if (shape instanceof ImmutableCircle) { ImmutableCircle c = (ImmutableCircle) shape; if (c.r * Math.PI >=