Aulas 33 e 34

Padrão Variações Protegidas

Como atribuir responsabilidades a objetos, subsistemas e sistemas, de modo que as variações ou a instabilidade nesses elementos não tenham um impacto indesejável sobre outros elementos?

Identifique pontos de variação ou instabilidade prevista; atibua responsabilidades para criar uma interface estável em torno deles



EXTREME PROGRAMMING

Extreme Programming (XP) é um processo de desenvolvimento que possibilita a criação de software de alta qualidade, de maneira ágil, econômica e flexível. Vem sendo adotado com enorme sucesso na Europa, nos Estados Unidos e, mais recentemente, no Brasil.

Cada vez mais as empresas convivem com ambientes de negócios que requerem mudanças freqüentes em seus processos, as quais afetam os projetos de software. Os processos de desenvolvimento tradicionais são caracterizados por uma grande quantidade de atividades e artefatos que buscam proteger o software contra mudanças, o que faz pouco ou nenhum sentido, visto que os projetos devem se adaptar a tais mudanças ao invés de evitá-las.

O XP concentra os esforços da equipe de desenvolvimento em atividades que geram resultados rapidamente na forma de software intensamente testado e alinhado às necessidades de seus usuários. Além disso, simplifica e organiza o trabalho combinando técnicas comprovadamente eficazes e eliminando atividades redundantes. Por fim, reduz o risco dos projetos desenvolvendo software de forma iterativa e reavaliando permanentemente as prioridades dos usuários.

Destina-se a profissionais da área de informática, gerentes e diretores de tecnologia da informação, bem como a estudantes e professores universitários.

Artigo: http://novatec.com.br/livros/extreme/capitulo8575220470.pdf

Aulas 31 e 32

Padrão Invenção Pura

Problema: A quem atribuir responsabilidades quando qua do as classes do domínio não são adequadas e não se quer violar os princípios da Coesão Alta e do Acoplamento Fraco ? Como criar componentes de software conectáveis ?

Solução: Atribuir um conjunto de responsabilidades altamente coeso a uma classe artificial – que não representa nada no domínio do problema. Tal classe é construída especialmente para melhorar a coesão e diminuir o acoplamento, facilitando reutilização (uma invenção da imaginação).

Exemplo:

Se for necessário salvar instâncias de Venda em um banco de dados relacional, considerando o padrão Expert, esta responsabilidade pode ser atribuída à própria classe Venda.
Porém há as seguintes implicações:
-Grande número de operações voltadas ao banco de dados- diminuição da coesão
-A classe Venda tem que ser acoplada com a interface do banco de dados relacional aumento do acoplamento
–Salvar objetos é uma tarefa geral, necessária em muitas classes – duplicação de código, baixa reutilização.

-Nesse caso, a solução é criar uma nova classe que é unicamente responsável por salvar objetos em algum tipo de meio de armazenamento persistente, como um banco de dados relacional.
-Chamamos esta solução de PersistentStorageBroker.
Esta classe é uma Invenção Pura.

Padrão Indireção

Problema: Quem irá evitar o acoplamento direto? Como desacoplar objetos de maneira
a apoiar o Acoplamento Fraco e manter o alto potencial de reutilização?

Solução: Atribuir a responsabilidade a um objeto intermediário que faz a mediação
entre outros componentes ou serviços, de modo que eles não estejam diretamente acoplados.

Exemplo:
O exemplo de uma Invenção Pura de desacoplar Venda dos serviços de banco de dados relacionais, também é um exemplo de Indireção. O PersistentStorageBroker atua como um intermediário entre Venda e o banco de dados.

Link: http://www.inf.ufg.br/~juliano/ensino/especializacao/ProjSw2007/ProjetoOO.pdf

Aulas 29 e 30

Padrão Polimorfismo

Problema: Como tratar alternativas com base no tipo ? Como criar componentes de software conectáveis ?

Solução: Atribuir responsabilidade pelo comportamento, aos tipos para os quais o comportamento varia, usando operações polimórficas.

Corolário: não teste o tipo de um objeto nem use condições lógicas no código para executar alternativas que variam com base no tipo.

O Polimorfismo significa "existindo em muitas formas". Ele permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, um mesmo método pode apresentar várias formas, de acordo com seu contexto.

O objetivo principal do polimorfismo é:
- Evitar a condição IF e ELSE;
- Usar polimorfismo melhorar a conectividade dos componentes.





Ferramentas:

Framework: é um conjunto de classes com objetivo de reutilização de um design, provendo um guia para uma solução de arquitetura em um domínio específico de software.
Framework se diferencia de uma simples biblioteca (toolkit), pois esta se concentra apenas em oferecer implementação de funcionalidades, sem definir a reutilização de uma solução de arquitetura (design).

ToolKit: ferramenta que não obriga o desenvolvedor a seguir um roteiro pré-definido, podendo ser alterado conforme a necessidade de cada aplicação.

Injeção de dependência: é um padrão de desenvolvimento de programas de computadores utilizado quando é necessário manter baixo o nível de acoplamento entre diferentes módulos de um sistema. Nesta solução as dependências entre os módulos não são definidas programaticamente, mas sim pela configuração de uma infraestrutura de software que é responsável por "injetar" em cada componente suas dependências declaradas.

Inversão de controle ou Inversão de controlo: (IOC) é o nome dado ao padrão de desenvolvimento de programas de computadores onde a sequência (controle) de chamadas dos métodos não é determinada pelo programador. Este controle é delegado a uma infraestrutura de software muitas vezes chamada de container. Esta é uma característica comum aos frameworks.

Hibernate

Torna a aplicação maleável a mais de um tipo de banco de dados, em poucos minutos de uma reconfiguração básica do framework. Ele também deixa transparente as operações básicas de inserção, recuperação, atualização e remoção de dados. A principal característica está no paradigma de Orientação a Objetos para banco de dados.

Referência: http://www.ezlemonpierecipes.info/pt/Polimorfismo