Pular para o conteúdo principal

Padrões de Projeto

Padrões de projeto (em inglês, Design Patterns) são soluções para problemas específicos que ocorrem de forma recorrente em um determinado contexto que foram identificados a partir da experiência coletiva de desenvolvedores de software.

A proposta original de padrões veio do trabalho de Christopher Alexander na área de arquitetura. Sua definição para padrões é que "Cada padrão é uma regra (esquema) de três partes que expressa uma relação entre um certo contexto, um problema, e uma solução".

O contexto descreve uma situação no desenvolvimento na qual existe um problema. O problema que ocorre repetidamente no contexto deve também ser descrito bem como as forças (requisitos, restrições e propriedades) associadas a ele. A solução descreve uma configuração ou estrutura de componentes e suas interconexões, obedecendo às forças do problema. As forças, denominação dada por Alexander, descrevem:

  • os requisitos que caracterizam o problema e que a solução deve satisfazer,
  • as restrições que devem ser aplicadas às soluções
  • as propriedades desejáveis que a solução deve ter.

Exemplo: Observer (Observador)

Considere uma interface gráfica que permita representar uma estrutura de dados de diversas formas - tabela, gráfico de barras e gráfico de tortas. A solução mais simples é ativar cada uma das classes que implementam as três diferentes visualizações cada vez que a estrutura de dados for ativada. Isso, no entanto, torna o núcleo do software dependente da interface (maior acoplamento). Além disso, para adicionar novas visualizações, é preciso modificar também a estrutura de dados.

Um bom design de software requer um única estrutura de dados independente das três diferentes visualizações e atuando como observadores. Para isso, é preciso que a implementação das visualizações sejam observadores (ouvintes) da estrutura de dados e que sejam avisados quando ocorrer um evento de atualização.

O padrão Observer oferece uma solução para isso:

  • Contexto: Situações nas quais vários componentes dependem de dados que são modificados em outro componente (sujeito).
  • Problema: Os dados do componente sujeito modificam-se constantemente e precisam ser atualizados nos outros componentes. O número de componentes pode variar.
  • Solução: Utilizar um mecanismo de registro que permite ao componente sujeito notificar aos interessados sobre mudanças.

A visualização das classes e a interação dos objetos são ilustrados na figura abaixo.

Para saber mais:

Pattern-Oriented Software Architecture (POSA) – A System of Patterns – F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal John Wiley and Sons Ltd, Chichester, UK, 1996

Comentários

Postagens mais visitadas deste blog

Ciclo de Vida do Software

O ciclo de vida de um software descreve as fases pelas quais o software passa desde a sua concepção até ficar sem uso algum. O conceito de ciclo de vida de um software é muitas vezes confundido com o de modelo de processo (assunto do próximo artigo). Existem várias propostas e denominações para as fases do ciclo de vida de um software. Nossa proposta identifica 4 fases que são delimitadas por eventos típicos em diversos ciclos de vida. Cada fase inclui um conjunto de atividades ou disciplinas que devem ser realizadas pelas partes envolvidas. Essas fases são: Definição Desenvolvimento Operação Retirada Fase de Definição A fase de definição do software ocorre em conjunto com outras atividades como a modelagem de processos de negócios e análise de sistemas . Nesta atividade, diversos profissionais buscam o conhecimento da situação atual e a identificação de problemas para que possam elaborar propostas de solução de sistemas computacionais que resolvam tais problemas. Dentre as propostas...

O Modelo Evolutivo

O modelo evolutivo descreve um processo na qual o software deve ser desenvolvido de forma a evoluir a partir de protótipos iniciais. Para entender melhor este modelo é importante entender o que é prototipação (ou prototipagem). Prototipação é uma abordagem baseada numa visão evolutiva do desenvolvimento de software, afetando o processo como um todo. Esta abordagem envolve a produção de versões iniciais - "protótipos" - de um sistema futuro com o qual pode-se realizar verificações e experimentações para se avaliar algumas de suas qualidades antes que o sistema venha realmente a ser construído. Objetivos da Prototipação Num projeto de software várias questões podem ser respondida com a construcão de protótipos. Nas situações típicas de desenvolvimento podemos distinguir entre diferentes objetivos na prototipação: Exploratória - é quando o protótipo é usado para ajudar a esclarecer requisitos dos usuários com respeito ao sistema futuro. Uma prototipação também é exploratória...

O Modelo Espiral

O objetivo do modelo espiral é prover um metamodelo que pode acomodar diversos processos específicos. Isto significa que podemos encaixar nele as principais características dos modelos vistos anteriormente, adaptando-os a necessidades específicas de desenvolvedores ou às particularidades do software a ser desenvolvido. Este modelo prevê prototipação, desenvolvimento evolutivo e cíclico, e as principais atividades do modelo cascata. Sua principal inovação é guiar o processo de desenvolvimento gerado a partir deste metamodelo com base em análise de riscos e planejamento que é realizado durante toda a evolução do desenvolvimento. Riscos são circunstâncias adversas que podem surgir durante o desenvolvimento de software impedindo o processo ou diminuindo a qualidade do produto. São exemplos de riscos: pessoas que abandonam a equipe de desenvolvimento, ferramentas que não podem ser utilizadas, falha em equipamentos usados no desenvolvimento ou que serão utilizados no produto final, etc....