sexta-feira, dezembro 12, 2008

Engenharia de Software com Processos Ágeis – Desenvolvimento de Aplicações para a Internet

Olá pessoal, já faz algum tempo que não escrevo por aqui, e desta vez eu gostaria apenas de divulgar um novo projeto.

Venho trabalhando com um grupo de professores da PUC - São Paulo, e recentemente criamos um curso de especialização que será oferecido pela própria Universidade. Trata-se de um curso inovador na área de Ciência da Computação, que agrega conceitos de Engenharia de Software, Orientação a Objetos, Internet, e Processos Ágeis.

O curso acaba de ser lançado sob o nome "Engenharia de Software com Processos Ágeis – Desenvolvimento de Aplicações para a Internet". Oito módulos serão oferecidos, sendo que cada um será completamente independente dos demais, não havendo pré-requisito entre eles. Isto fará com que o aluno possa trilhar um caminho de acordo com suas necessidades. Adicionalmente, não será necessário que o aluno se inscreva em todos os módulos, somente nos que julgar adequado ao seu perfil. Este formato é realmente novo e flexível.

Segue a lista de módulos:

  1. Processos Ágeis
  2. Engenharia de Requisitos
  3. Desenho Lógico com Objetos
  4. Implementação de Aplicações para a Internet
  5. Programação com Objetos para Internet
  6. Análise com Objetos
  7. Desenho Físico com Objetos
  8. Teste de Aplicações para Internet
Uma descrição mais detalhada pode ser encontrada no site da Coordenadoria Geral de Especialização, Aperfeiçoamento e Extensão da PUC-SP.

Atalho: http://tinyurl.com/eng-sw-puc/

Qualquer dúvida, por favor entre em contato, ou escreva um comentário neste post. Forte abraço!

sexta-feira, maio 16, 2008

Crítica Rápida ao Active Record

Resumidamente, Active Record é um padrão encontrado em alguns projetos de software que armazenam dados em bases relacionais. Neste padrão, uma tabela é "encapsulada" por uma classe, portanto cada instância desta classe estará diretamente acoplada à uma linha da tabela.


Crítica: Caso a classe em questão seja um conceito do domínio, obviamente suas instâncias serão objetos de negócio. Ao aplicarmos o padrão Active Record, criamos uma dependência a partir negócio para a tecnologia!


No post Inversão de Dependências, apresento pelo menos quatro consequências geradas por esta dependência. Discussão polêmica... ;-) Comentários?


Abraços!

sexta-feira, maio 02, 2008

Inversão de Dependências

A forte dependência entre classes (ou componentes) é o principal vilão de uma boa arquitetura de software! Evidentemente, não existe uma arquitetura completamente desacoplada, pois desta forma os objetos não poderíam trocar mensagens uns com os outros. A idéia é minimizar a existência destas dependências, e inserir no modelo apenas dependências bem planejadas. Particularmente, costumo chamar estas dependências bem planejadas de dependências saudáveis, afinal de contas, trazem muitos benefícios para o sistema como um todo.


No post Princípios Fundamentais do Processo Unificado, apresento o conceito Processo Centrado em Arquitetura. Resumidamente, o processo de desenvolvimento é guiado pela evolução da arquitetura, e o arquiteto preocupa-se em estabelecer um alto grau de modularidade para facilitar a expansão e a manutenção do sistema. Com módulos bem planejados, e dependências saudáveis entre eles, minimizamos três propriedades internas indesejáveis: Rigidez, Fragilidade, e Imobilidade. Vale a pena dar um pulo naquele post para entender cada uma destas três propriedades.


OK, vamos ao que realmente interessa: Como modelar apenas dependências saudáveis? Resposta bate-pronto: Utilizando interfaces para a inversão de dependências! Interface é uma definição parcial de algum conceito do domínio tratado por sua arquitetura. Certamente é a maior aliada do arquiteto de software! Vamos apelar para a UML para entender como inverter dependências.



O esquema acima poderia ser parte integrante da arquitetura de um comércio eletrônico, onde pedidos são armezenados na base de dados. É natural pensar que um objeto da classe Pedido envie mensagens para um objeto da classe MSSQL. Entretando, a dependência existente a partir de Pedido para MSSQL é indesejável. Algumas consequências podem ser observadas:

  • O negócio passa a depender da tecnologia. Como sabemos, a tecnologia está em constante evolução, e cada mudança tecnológica potencialmente provoca uma mudança nas classes de negócio, como a classe Pedido neste exemplo. Regras de negócio tendem a ser mais estáveis ao longo do tempo.

  • A arquitetura assume que, invariavelmente, o armazenamento dos dados será realizado por um banco de dados. É importante lembrarmos que o armezenamento baseado no sistema de arquivos vem ganhando algum destaque, e mostra bom desempenho.

  • Caso a classe de acesso aos dados tenha sido desenvolvida para trabalhar com um banco de dados específico (MSSQL neste exemplo), então a classe de negócio deverá ser constantemente modificada para cobrir eventuais novos provedores de dados (MySQL por exemplo).

  • Cria um acoplamento que dificulta testes unitários.


Como alternativa, poderíamos fazer com que a classe Pedido dependesse de uma interface que teria por objetivo prímário desacoplar o negócio das questões de armezenamento e recuperação dos dados.



Repare que, neste momento, a dependência é invertida, e todos os pontos negativos citados são removidos da arquitetura! Porém, o objeto de negócio ainda precisa enviar a mensagem para o objeto que manipula a base de dados. Como realizar isso nesta nova arquitetura? Simples! Interfaces não existem em tempo de execução, apenas objetos. Desta forma, o lugar da interface é ocupado pelo objeto de alguma classe que realiza esta interface. Podemos ter uma classe para MSSQL, outra para MySQL, uma terceira para FileSystem, e assim por diante.


Visualizar a inversão de dependência é ainda mais fácil quando tratamos com componentes, e não classes, como segue.



No próximo diagrama a dependência é invertida com o advento da interface.



A notação caixa-preta torna tudo ainda mais evidente, como segue:



E, novamente, a inversão da dependência:




É isso aí pessoal, espero ter colaborado com mais essa! Até a próxima, abraços!

 
> blogblogs.com.br