# 99 bottles - Cap. 6 - Achieving Openess
## Johny
- Data clump (agrupamento de dados): a situação em que varíos (3 ou +) campos de dados rotinamente ocorrem juntos (variáveis que são passadas juntas por várias partes do programa). Quando mandado como parâmetros, o método que o recebe facilmente fica poluído com lógica de gestão de agrupamento de dados. Se mais de um método recebe o mesmo agrupamento como entrada irá duplicar o código por todo lado. Além de ser um porre de gerenciar, a lógica pode acidentalmente divergir, induzindo erros e confundindo todos os envolvidos;
- programadores adicionam linhas em branco onde há mudança de tópico. A presença de múltiplos tópicos sugerem a existência de múltiplas responsabilidades, tornando o código mais difícil de entender quando lido, e mais nocivo ao mudar;
- Substituir Condicionais Com Polimorfismo: receita para remover condicionais criando uma classe para armazenar o padrão das condicionais (ramificações falsas) e adicionar subclasses para cada especialização (ramificações de várias condicionais). É escolhido então um desses novos objetos para conectar. Esta receita resolve problemas com condicionais usando herança;
- a prática leva a intuição. Faça o suficiente e você vai parecer mágico que nem os programadores top top;
- polimorfismo permite remetentes a dependerem da `mensagem` e se manterem ignorantes do `tipo`, ou classe, do destinatário. Remetentes não se importam com o que os remetentes são, e sim dependem do que os destinatários fazem;
- quando várias classes possuem o mesmo papel, algum código, em algum lugar, deve saber como escolher o papel correto pra cada classe. Esta _escolha_ normalmente envolve uma condicional, que deveria existir em apenas um lugar. Código assim é dito que "fabrica" uma instância do tipo certo do objeto, e assim é chamado de `factory`;
- por se recusar a ser ciente das classes dos objetos com que interagem, você dá liberdade de editarem seu código sem editar a fonte. No futuro, isso facilita em novas implementações;
- factories não sabem _o que_ fazer, mas sabem como escolher quem sabe;
- Objetos que por vezes falham em responder a uma mensagem que você tem intenção de enviar, ou que retornam algo inesperado as vezes, te forçam a um estilo paranóico de programação;
- "make the change easy (warning: this may be hard), then make the easy change" Beck, Kent;
- Não controle o fluxo dos programas com excessões, a internet num gosta;
- vale a pena passar pelo custoso trabalho do polimorfismo? Depende, use bom senso, se for ser altamente utilizado, então vale a pena.
## Bruno
- Polimorfismo x condicionais;
- Factory pattern;
- Herança;
## Igor
- Data clumps
- Polimorfismo
- Factories
- Subclasses
- Herança/Composição
- "Factories don’t know what to do: instead, they know how to choose who does."
- "Trust in the implicit contracts between objects."
## dalvi
- a presenca de linhas brancas sugerem a existencia de multipla responsabilidade
- polimorfismo: uma classe com os defaults das condicionais (o false branch) e subclasses com cada true branch
- data clump
## Gabs
- data clumps
- substituir condicionais
- factory
- type info
- custo de um código
- liskov substitution principle