Soluções        Serviços          Atendimento       Governo        Consultoria T.I      Treinamento

Software

Um Padrão de Projeto de Software ou Padrão de Desenho de Software, também muito conhecido pelo termo original em inglês, Design Pattern, descreve uma solução geral reutilizável para um problema recorrente no desenvolvimento de sistemas de software orientados a objetos. Não é um código final, é uma descrição ou modelo de como resolver o problema do qual trata, que pode ser usada em muitas situações diferentes. Os Padrões de Desenho normalmente definem as relações e interações entre as classes ou objetos, sem especificar os detalhes das classes ou objetos envolvidos, ou seja, estão num nível de generalidade mais alto.

Um padrão de projeto define :

  • seu nome,
  • o problema,
  • a solução,
  • quando aplicar esta solução e
  • suas consequências.

Os padrões de projeto :

  • visam facilitar a reutilização de soluções de desenho - isto é, soluções na fase de projeto do software, sem considerar reutilização de código e
  • estabelecem um vocabulário comum de desenho, facilitando comunicação, documentação e aprendizado dos sistemas de software.

Índice

  • 1 História
  • 2 Padrões GoF
    • 2.1 Padrões de criação
    • 2.2 Padrões estruturais
    • 2.3 Padrões comportamentais
  • 3 Padrões GRASP
  • 4 Críticas
  • 5 Bibliografia
  • 6 Referências
  • 7 Ligações externas

História

Ruan Pederasta[1][2][3] Em seus livros Notes on the Synthesis of Form, The Timeless Way of Building e A Pattern Language, ele estabelece que um padrão deve ter, idealmente, as seguintes características:

  • Encapsulamento: um padrão encapsula um problema/solução bem definida. Ele deve ser independente, específico e formulado de maneira a ficar claro onde ele se aplica.
  • Generalidade: todo padrão deve permitir a construção de outras realizações a partir deste padrão.
  • Equilíbrio: quando um padrão é utilizado em uma aplicação, o equilíbrio dá a razão, relacionada com cada uma das restrições envolvidas, para cada passo do projeto. Uma análise racional que envolva uma abstração de dados empíricos, uma observação da aplicação de padrões em artefatos tradicionais, uma série convincente de exemplos e uma análise de soluções ruins ou fracassadas pode ser a forma de encontrar este equilíbrio.
  • Abstração: os padrões representam abstrações da experiência empírica ou do conhecimento cotidiano.
  • Abertura: um padrão deve permitir a sua extensão para níveis mais baixos de detalhe.
  • Combinatoriedade: os padrões são relacionados hierarquicamente. Padrões de alto nível podem ser compostos ou relacionados com padrões que endereçam problemas de nível mais baixo.

Além da definição das características de um padrão, Alexander definiu o formato que a descrição de um padrão deve ter. Ele estabeleceu que um padrão deve ser descrito em cinco partes:

  • Nome: uma descrição da solução, mais do que do problema ou do contexto.
  • Exemplo: uma ou mais figuras, diagramas ou descrições que ilustrem um protótipo de aplicação.
  • Contexto: a descrição das situações sob as quais o padrão se aplica.
  • Problema: uma descrição das forças e restrições envolvidos e como elas interagem.
  • Solução: relacionamentos estáticos e regras dinâmicas descrevendo como construir artefatos de acordo com o padrão, freqüentemente citando variações e formas de ajustar a solução segundo as circunstâncias. Inclui referências a outras soluções e o relacionamento com outros padrões de nível mais baixo ou mais alto.

Em 1987, a partir dos conceitos criados por Alexander, os programadores Kent Beck e Ward Cunningham propuseram os primeiros padrões de projeto para a área da ciência da computação. Em um trabalho para a conferência OOPSLA, eles apresentaram alguns padrões para a construção de janelas na linguagem Smalltalk.[4] Nos anos seguintes Beck, Cunningham e outros seguiram com o desenvolvimento destas idéias.

O movimento ao redor de padrões de projeto ganhou popularidade com o livro Design Patterns: Elements of Reusable Object-Oriented Software, publicado em 1995. Os autores desse livro, Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, são conhecidos como a "Gangue dos Quatro" (Gang of Four) ou simplesmente "GoF".

Posteriormente, vários outros livros do estilo foram publicados, merecendo destaque Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, que introduziu um conjunto de padrões conhecidos como GRASP (General Responsibility Assignment Software Patterns).

Padrões GoF

Os padrões "GoF" são organizados em 3 famílias :

  • Padrões de criação : relacionados à criação de objetos
  • Padrões estruturais : tratam das associações entre classes e objetos e
  • Padrões comportamentais : tratam das interações e divisões de responsabilidades entre as classes ou objetos.


Padrões "GoF" organizados nas suas 3 famílias:

Padrões de criação

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton

Padrões estruturais

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Façade
  • Flyweight
  • Proxy

Padrões comportamentais

  • Chain of Responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor


Um padrão "GoF" também é classificado segundo o seu escopo em 2 outros grupos :

  • Padrões com escopo de classe : definido por relacionamentos de herança e em tempo de compilação.
  • Padrões com escopo de objeto : encontrados no relacionamento entre os objetos definidos em tempo de execução.

Padrões GRASP

[5]

  • Especialista na Informação
  • Criador
  • Controlador
  • Acoplamento Fraco
  • Coesão Alta
  • Polimorfismo
  • Invenção Pura
  • Indireção
  • Variações Protegidas

Críticas

Segundo alguns, alguns 'Padrões de Desenho' são apenas evidências de que alguns recursos estão ausentes em uma determinada linguagem de programação (Java ou C + + por exemplo). Nesta linha, Peter Norvig demonstra que 16 dos 23 padrões do livro 'Design Patterns' são simplificados ou eliminados nas linguagens Lisp ou Dylan, usando os recursos diretos destas linguagens. [6]

Segundo outros, excessos nas tentativas de fazer o código se conformar aos 'Padrões de Desenho' aumentam desnecessariamente a sua complexidade. [7]

Bibliografia

  • Christopher Alexander. Notes on the Synthesis of Form. Estados Unidos da América: Harvard University Press, 1964. ISBN 0-674-62751-2
  • Christopher Alexander. The Timeless Way of Building. Estados Unidos da América: Oxford University Press, 1979. ISBN 0-19-502402-8
  • Christopher Alexander. A Pattern Language. Estados Unidos da América: Oxford University Press, 1977. ISBN 0-19-501919-9
  • Craig Larman. 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. 736 p. ISBN 0-13-148906-2
  • Gregor Hohpe, Bobby Woolf. Enterprise Integration Patterns: Designing, Building, And Deploying Messaging Solutions. 1 ed. Estados Unidos da América: Addinson-Wesley, 2004. 659 p. ISBN 0-321-20068-3
  • Pablo Dall'Oglio. PHP Programando com Orientação a Objetos: Inclui Design Patterns. 1 ed. São Paulo: Novatec, 2007. 576 p. ISBN 978-85-7522-137-2
  • Alexandre Altair de Melo e Mauricio G. F. Nascimento. PHP Profissional: Aprenda a desenvolver sistemas profissionais orientados a objetos com padrões de projeto. 1 ed. São Paulo: Novatec, 2007. 464 p. ISBN 978-85-7522-141-9

 

Referências

  1. ↑ O conceito de padrão de projeto foi criado na década de 70 pelo arquitecto Christopher Alexander.
  2. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. 1 ed. Estados Unidos da América: Addison-Wesley, 1995. ISBN 0-201-63361-2
  3. ↑ Doug Lea. Christopher Alexander:An Introduction for Object-Oriented Designers (em Inglês). Página visitada em 18 de abril de 2007.
  4. ↑ Kent Beck, Ward Cunningham. Using Pattern Languages for Object-Oriented Programs (em Inglês). Página visitada em 18 de abril de 2007.
  5. ↑ Utilizando UML e Padrões 2ª Edição - Craig Larman
  6. Norvig, Peter (1998). "Design Patterns in Dynamic Languages". {{{booktitle}}}.
  7. McConnell, Steve. Code Complete: A Practical Handbook of Software Construction, 2nd Edition. [S.l.: s.n.], 2004. p. 105.

fonte.wikipedia

MAIS INFORMAÇÕES DO SETOR DE SOFTWARE

CRM - Customer relationship management

Customer Relationship Management (CRM) é uma expressão em inglês que pode ser traduzida para a l [ ... ]


Matriz de Interações (ou Matriz CRUD)

article thumbnail

A Matriz de Interações (ou Matriz CRUD) é utilizada, no processo de desenvolvimento de sistemas [ ... ]


Computador

article thumbnail

Um assistente pessoal digital. Um computador pessoal. Columbia, um supercomp [ ... ]


Gerenciamento de serviços de TI

O gerenciamento de serviços de TI tem por objetivo prover um serviço de TI com qualidade e alinh [ ... ]


Administração de dados

Administração de dados é a função responsável por desenvolver e administrar de modo central [ ... ]


Zope


Zope Desenvolvedor Zope Corporation Plataforma multiplataforma Versão es [ ... ]


Melhoria de Processos do Software Brasileiro

O MPS.BR ou Melhoria de Processos do Software Brasileiro é simultaneamente um movimento para a melh [ ... ]


Scrum

article thumbnail

O processo Scrum. O Scrum é um processo de desenvolvimento iterativo e incremental para  [ ... ]


Model-view-controller (MVC)

article thumbnail


Um diagrama simples exemplificando a relação entre Model, View e Controller. As linhas sól [ ... ]


ITIL

Information Technology Infrastructure Library (ITIL) é um conjunto de boas práticas a serem aplica [ ... ]


Alta tecnologia

Alta tecnologia (em inglês, high tech) refere-se à tecnologia considerada de ponta (em inglês,  [ ... ]


Software educativo

article thumbnail

Software educativo é um software cujo principal propósito é o ensino ou o auto-aprendizado.[1]  [ ... ]


Nanotecnologia

article thumbnail

Imagem de um circuito integrado ampliada 2400 vezes A nanotecnologia (algumas vezes chamada [ ... ]


Programação extrema

Programação extrema (do inglês eXtreme Programming), ou simplesmente XP, é uma metodologia ág [ ... ]


Segurança da informação

article thumbnail

A Wikipédia possui o portal:
Portal das tecnologias de informação A segurança da  [ ... ]


Indústria de software

A Indústria de Software é o conjunto dos negócios que envolvem o desenvolvimento, a manutençã [ ... ]


Miniaturização

Miniaturização é o processo de produção de objetos de consumo cada vez menores (miniaturas), in [ ... ]


Inteligência organizacional

Inteligência Organizacional é a capacidade coletiva disponível em uma organização para identifi [ ... ]


Tecnologia móvel

Tecnologia móvel Toda tecnologia que permite seu uso durante a movimentação do usuário é uma t [ ... ]


Banco de dados

article thumbnail

Bancos de dados, ou bases de dados (em Portugal), são coleções de informações que se relacion [ ... ]


Padrão de projeto de software

Um Padrão de Projeto de Software ou Padrão de Desenho de Software, também muito conhecido pelo te [ ... ]


ISO da segurança da informação

ISO 27001 Origem: Wikipédia, a enciclopédia livre. ISO/IEC 27001 é um padrão para sistema de g [ ... ]


Engenharia de software

Engenharia de software é uma área do conhecimento da computação voltada para a especificação,  [ ... ]


Novas tecnologias de informação e comunicação

Comunicação Novas tecnologias de informação e comunicação Tipos Social • M [ ... ]


Ruby on Rails

article thumbnail

Origem: Wikipédia, a enciclopédia livre. Ruby on Rails

Boas vindas do Rails  [ ... ]


Firewall

article thumbnail

Firewall separando redes LAN e WAN A Wikipédia possui o portal:
Portal das tecno [ ... ]


PDA - Personal digital assistant

article thumbnail


PalmOne LifeDrive Personal digital assistants (PDAs ou handhelds), assistente pessoal di [ ... ]


Sistemas complexos

Um sistema é dito ser um sistema complexo quando suas propriedades não são uma consequência natu [ ... ]


Computação em nuvem

article thumbnail

A nuvem (cloud) é o símbolo da Internet. O conceito de computação em nuvem (em inglê [ ... ]


Software

article thumbnail


OpenOffice.org Writer. Software, logiciário ou suporte lógico é uma sequência de in [ ... ]


Videoconferência

article thumbnail

Videoconferência entre militares em 2006. Videoconferência é uma tecnologia que permite  [ ... ]


CobiT

Origem: Wikipédia, a enciclopédia livre. COBIT®, do inglês, Control Objectives for Information  [ ... ]


CMMI

O CMMI (Capability Maturity Model Integration) é um modelo de referência que contém práticas (Ge [ ... ]


EAD - Educação a distância

Tele-educação, Educação a Distância ou Ensino a Distância (EaD) [nota 1] é a modalidade de en [ ... ]


Desenvolvimento web

article thumbnail

Desenvolvimento web é o termo utilizado para descrever o desenvolvimento de sítios, na Internet  [ ... ]


Lotus Notes

article thumbnail

Lotus Tipo Corporação privada Indústria Software Produtos Ver lista com [ ... ]


Sharepoint

Plataforma de colaboraçãoO Windows Sharepoint Services (WSS) é uma plataforma de colaboração vo [ ... ]


Nanotecnologia do carbono

article thumbnail

A nanotecnologia do carbono é o ramo da nanotecnologia que estuda a manipulação de estruturas de  [ ... ]


C♯

article thumbnail


C♯ Paradigma Orientação a objetos
estruturado
imperativo Surgido em 2001  [ ... ]


Sistema de informação contábil

O sistema de informação contábil é um dos componentes do sistema de informação gerencial (SIG, [ ... ]


Modelagem de dados

Modelagem de Dados Representa um conjunto de requerimentos de informações de negócio. É uma part [ ... ]


Teste de software

article thumbnail

O teste do software é a investigação do software a fim de fornecer informações sobre sua qual [ ... ]


Linguagem de programação

Uma linguagem de programação é um método padronizado para expressar instruções para um compu [ ... ]


Windows Server 2008

article thumbnail

Microsoft Windows Server 2008
Desenvolvedor: Microsoft Lançado em: 18 de [ ... ]


E-mail marketing

E-mail marketing é a utilização do e-mail como ferramenta de marketing direto, respeitando norma [ ... ]


JBuilder

JBuilder, é uma IDE para desenvolvimento de aplicações na tecnologia Java criada pela Borland e [ ... ]


C++

article thumbnail

Origem: Wikipédia, a enciclopédia livre. C++
Programa Olá Mundo, escrito em C++. [ ... ]


Web 2.0

article thumbnail

Web 2.0 é um termo criado em 2004 pela empresa americana O'Reilly Media[1] para designar uma segu [ ... ]


XMI (ou XML Metadata Interchange)

XMI (ou XML Metadata Interchange) é um padrão da OMG (grupo de gerenciamento de objetos) para tr [ ... ]


ArgoUML

ArgoUML é uma aplicação open source que usa UML para modelar o desenho de software de computado [ ... ]


Artigos Relacionados

Pluriverso - Inteligência em Tecnologia

Pluriverso - Inteligência em Tecnologia


Ed.Centro Sul, 2°Andar, SCIA, Qd. 14, Conj. 07, Lt 1, S. Ind.
CEP: 71.250-135, Brasília-DF.  
Como Chegar
| Atendimento  


+55 (61) 4141.5555

Serviços

Desenvolvimento de Software
Oursourcing de T.I
Consultoria em Tecnologia
Licitação com o Governo

Produtos

ERP, CRM, Colaboração
Cloud Computing

Soluções
Soluções em Outsourcing de Tecnologia
Integração de Software
Avaliação de nível tecnológico
Cálculo de custos de T.I
Softwares customizados


Porque escolher a Pluriverso

Blog Corporativo
Blog do Software

Conheça a Pluriverso
quem somos
verticais de atuação
portifólio
casos de sucesso

Atendimento
contatos
sala de imprensa
como chegar
Trabalhe conosco

desenvolvimento de software