Classe - detalhamento Flashcards
O que significa implementar uma classe?
É dizer que dados e a lógica sobre eles estão juntos, não sempre, mas que a lógica muda mais lentamente que os valores que ela opera
Qual o limite de implementação de classes em um programa?
Classes são elementos caros, quanto menor o número melhor, contanto que não fiquem inchadas
O que envolve o padrão de nomeação ‘Nome simples de superclasse’?
Nomear as classes com brevidade, mas mantendo a expressividade
É preferível usar nomes com uma só palavra para classes importantes
O que envolve o padrão de nomeação ‘Nome qualificado de subclasse’?
Incluir, no início do nome da superclasse, um ou mais modificadores para formar o nome da subclasse
No entanto, quando a subclasse é apenas para compartilhar a implementação e se tornar uma nova raíz na hierarquia é melhor receber seu próprio nome de superclasse
Qual o propósito dos nomes das classes?
Comunicação com as pessoas
O que envolve o padrão para ‘Interface abstrata’?
Programar orientado a interfaces, ou conjunto de métodos não implementados
Quando interfaces não são necesseráras?
Quando o seu custo é apenas especulativo, deve-se procurar flexibilidade no momento em que ela é necessária
Porque deve-se procurar flexibilidade somente quando ele realmente é necessária?
A necessidade da flexibilidade, o custo da flexibilidade, a imprevisibilidade de onde é preciso haver flexibilidade
O que envolve o padrão para ‘Interface’?
É uma forma de aplicar o padrão Interface Abstrata informando apenas o que se quer fazer e não os detalhes que envolvem o ‘como fazer’
Como interfaces são pouco flexiveis?
É aconselhável não alterá-las, pois qualquer mudança numa interface resulta em modificação em todas as classes que a implementam
O que envolve o padrão para ‘Classe Abstrata’?
Criar interfaces abstratas capazes de se modificarem sem alterar os implementadores existentes
Qual a limitação das classes abastratas?
Os implementadores podem declarar fidelidade apenas a uma classes abstrata
Por que deve-se preocupar em criar classes raízes úteis e instanciáveis?
Deve-se ter cuidado para não criar abstrações que nunca serão implementadas
Empenhar-se em tornar instanciáveis as classes-raiz estimula a eliminação de abstrações que não valem a pena
O que envolve o padrão para ‘Interface versionada’?
Criar uma nova interface com a nova funcionalidade estendendo a anterior, de forma que quem quiser a nova funcionalidade poderá estende-la
Por que interfaces alternativas são uma solução feia para um problema feio?
Muitas interfaces alternativas perdem forçar a necessidade de o cliente ter de lidar com muitas variações, sinal de que deve-se repensar o projeto
O que envolve o padrão para ‘Objeto valor’?
Criar objetos que agem como inteiros em vez de serem mutáveis
Ou seja, não se muda o estado apenas se criavam novas instâncias
São objetos representando valores matemáticos, diferentes de objetos de estados mutáveis
Por que usar objeto valor?
Sabe-se que não há porque se preocupar com transações que flutuam perdidas ou com transações que têm valores alterados depois de terem sido enviadas
Por que não usar objeto valor?
Por causa da dificuldade em se identificar onde o sistema deve mudar e onde não
Um sistema com muitos objetos valores é sinal de pouca flexibilidade
O que envolve o padrão para ‘Especialização’?
Envolve comunicar similaridade e diferença entre lógicas e dados, para melhor comunicação do projeto
O que envolve o padrão para ‘Subclasse’?
É uma forma de aplicar o padrão para Especialização
É como dizer: ‘Estes objetos são como aqueles, exceto por…’
Quais pontos negativos à criação de subclasses?
Só pode ser usada uma vez
É preciso entender a superclasse antes de entender a subclasse
Mudanças na superclasse são perigosas
Todos esses problemas são agravados por hierarquias profundas
Como criar subclasses úteis?
Fatorar completamente a lógica da superclasse em métodos que fazem uma única tarefa
Quando se escreve uma subclasse deve-se ser capaz de sobreescrever apenas um método
Não podem ser usadas para expressar lógica mutável, pois será necessário usar condicionais ou delegação para expressar uma lógica que muda
O que envolve o padrão para ‘Implementador’ ?
A criação de objetos polimórficos que implementam a intenção do código, sem que seja necessário saber como isso é feito pelo cliente
O que envolve o padrão para ‘Classe interna’ ?
Empacotar a lógica com os dados sem o custo de um novo arquivo.
Úteis para refinamentos de classes interessantes apenas local
O que envolve o padrão para ‘Comportamento específico de instância’ ?
Se trata de como agir quando um objeto possui um comportamento específico, ou não generalizado pela classe
O que envolve o padrão para ‘Condicional’ ?
É a forma mais simples de comportamento específico
A proliferação de condicionais reduz a confiabilidade do código
O que envolve o padrão para ‘Delegação’ ?
Aplica o comportamento específico de instância
A lógica comum é mantida na classe referência
Um truque comum na delegação é passar o delegador como parâmetro para um método delegado
O que envolve o padrão para ‘Seletor plugável’ ?
Armazenar em um campo o nome do método par ser invocado, sendo depois chamado por reflexão
O que envolve o padrão para ‘Classe interna anônima’ ?
Criar uma classe que seja usada apenas em um lugar, que pode sobrescrever um ou mais métodos para propósitos estritamente locais
Deve ser curto e simples
O que envolve o padrão para ‘Classe biblioteca’ ?
Inserir código que não se encaixa em nenhum contexto do projeto em uma classe com métodos estáticos
Mas sempre que possível tente transformar classes biblioteca em objetos