quarta-feira, 14 de novembro de 2007

Classificação dos Padrões GOF

Há várias formas de classificar os padrões

Classificação de Gamma et al[2]

–Por propósito

•Criação de classes e objetos

•Alteração da estrutura de uma aplicação

•Controle de seu comportamento

–Por escopo

•Classe

•Objeto

Classificação de Metsker [1]

Classifica-os em 5 grupos (por solução)

Oferecer um interface

Atribuir uma responsabilidade

Realizar a construção de classes ou objetos

Controlar formas de operação

Implementar uma extensão para a aplicação



REFERÊNCIAS BIBLIOGRÁFICAS

[1] METSKER, S. , Design Patterns Java Workbook.Addison : Addison-Wesley, 2002.

[2] GAMMA, Erich et al. Design patterns: elements of reusable object-oriented software. Reading : Addison-Wesley, 1994.

[3] COOPER James W. The Design Patterns Java Companion. http://www.patterndepot.com/put/8/JavaPatterns.htm

Frase do dia

"Quem pára de aprender já é velho, não importa sua idade."
Harvey Ullman

terça-feira, 23 de outubro de 2007

Padrões de Projeto - Parte 1

Introdução


Desenvolver software orientado a objetos é por si só um enorme desafio. Entretanto, desenvolver software orientado a objetos que sejam reusáveis é um desafio ainda maior! Você deve estar se perguntando, mas por que é tão difícil? É difícil por que existem muitas questões envolvidas em um bom projeto de objetos que seja reusável: devo usar métodos construtores ou uma fábrica de instâncias, devo usar herança ou agregação, a partir de quando o acoplamento entre as classes passa a ser nocivo, dentre outras questões. Mas há ainda um outro obstáculo a ser ultrapassado por muitos: a mudança do paradigma procedural para orientado a objetos.

Talvez, num futuro não muito distante, perguntem-nos: "Como era possível desenvolver aplicativos sem utilizar objetos?"; da mesma maneira que muitos se perguntam: "Como era possível desenvolver software de maneira não estruturada ?".

Tem um ditado popular que diz mais ou menos assim: “crie seu primeiro projeto para o seu inimigo, o segundo para o amigo e o terceiro para você”.

Exageros à parte, o primeiro projeto é sempre mais crítico, já que existe a necessidade de se desenvolver a partir do nada. No segundo, alguns objetos que foram pensados e usados no primeiro podem ser (re)utilizados, com algumas adequações. No terceiro, podem ser utilizados objetos do primeiro e do segundo. Assim, conforme vamos desenvolvendo mais projetos Orientados a Objetos, a produtividade e a qualidade do código melhoram substancialmente, graças à experiência adquirida e ao chamado “reaproveitamento de código” .

Isto ocorre porque, normalmente, todos os projetos envolvem a resolução de problemas recorrentes; não raras vezes nos pegamos com a sensação de ‘déjà vu‘. Este conhecimento, de como se resolver um determinado problema, acumulado durante os anos, é o que chamamos de experiência, e esta experiência está ligada diretamente aos responsáveis pela resolução do problema. Mas como podemos armazenar esta experiência para outros usos, ou então para o auxílio de outros desenvolvedores?

Se pudéssemos catalogar as experiências bem sucedidas de forma que qualquer pessoa, experiente ou não, pudesse utilizá-la para resolver problemas de desenvolvimento, conseguiríamos um grande aumento na qualidade dos projetos e uma redução sistemática nos tempos de desenvolvimento dos sistemas. Padrões de projeto têm justamente essa finalidade: catalogar, documentar e repassar soluções para problemas recorrentes.

Histórico

Considera-se como o início da história dos padrões de projeto a publicação de outra obra A Pattern Language: Towns, Buildings, Construction [1], de Christopher Alexander, em 1987. Durante anos, os especialistas na área de engenharia de software tentaram adequar as idéias de Alexander para a construção de sistemas de informação. Entretanto, a sua popularização só veio oito anos depois, em 1995, com o livro Design Patterns – Elements of Reusable Object-Oriented Software [3], também conhecido como GoF(Gang of Four), de Erich Gamma et al.

Hoje, além dos padrões GoF existem muitos outros padrões catalogados dentre eles podemos citar: padrões JEE, padrões GRASP e uma outra infinidade deles. O Pattern Almanac 2000 [5] lista cerca de 500 padrões de projeto, mas muitas centenas foram publicadas desde então. Porém, apesar de ser importante o conhecimento de um grande número de padrões, é ainda mais útil entender seus temas básicos subjacentes [4] (Coesão Alta, Acoplamento Baixo...) para ajudar na aprendizagem dos detalhes e do “alfabeto” fundamental das técnicas de projeto aplicadas.


REFERÊNCIAS BIBLIOGRÁFICAS

[1] ALEXANDER C., S. et al. A pattern language : towns buildings construction. Oxford University Press, 1977.

[2] FLOWER, Martin. Analysis patterns : reusable object models. Reading : Addison-Wesley, 1997.

[3] GAMMA, Erich et al. Design patterns: elements of reusable object-oriented software. Reading : Addison-Wesley, 1994.

[4] LARMAN C. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development. 1.ed. Estados Unidos da América: Prentice Hall, 2004.

[5] RISING, L. 2000. Pattern Almanac 2000. Reading, MA.: Addison-Wesley.

Frase do dia 23/10

É impossível um homem aprender aquilo que ele acha que sabe.
Epitectus

segunda-feira, 22 de outubro de 2007

Padrões de Projeto

Por que aprender padrões é importante?
Na minha visão pelas seguintes razões :

É importante aprender com a experiência dos outros. Ajuda a identificar problemas recorrentes em engenharia de software e utilizar soluções testadas e bem documentadas.

A utilização de soluções que têm um nome facilita a comunicação, compreensão e documentação.

Aprender a programar bem com orientação a objetos. Os 23 padrões de projeto “clássicos” utilizam as melhores práticas em OO para atingir os resultados desejados

Desenvolver software de melhor qualidade . Os padrões utilizam eficientemente polimorfismo, herança, modularidade, composição e abstração. Construção de código reutilizável, eficiente, de alta coesão e baixo acoplamento

Diariamente neste blog, um padrão será tratado de forma clara e com exemplos simples.

Frase do dia 22/10

Qualquer tolo pode escrever código que um computador pode compreender. Bons programadores escrevem código que seres humanos podem compreender". Martin Fowler