Padr˜
oes de Projeto de Software
Introdu¸c˜ao
Paulo Gomide
Departamento de Ciˆencia da Computa¸c˜ao Universidade de Ita´una
Sumary
Motiva¸c˜ao
Introdu¸c˜ao
Por que Padr˜oes?
Por que Padr˜oes de Projeto?
O que ´e um Padr˜ao de Projeto?
Defini¸c˜oes
Componentes de um Padr˜ao
Formas de Classifica¸c˜ao dos Padr˜oes de Projeto?
Quanto `a Finalidade
Quanto ao Escopo
Quadro de Classifica¸c˜oes dos Padr˜oes de Projetos
Descri¸c˜ao dos Padr˜oes
Como Descrever um Padr˜ao?
Fim
Desenvolvimento de Pequenos Projetos versus
Desenvolvimento de Grandes Projetos
Implementado por uma pessoa Implementado por ou por uma equipe pequena uma grande equipe
Todos desenvolvedores Ningu´em conhece ou conhecem todos os ´e respons´avel por todos aspectos do projeto os aspectos do projeto
O maior esfor¸co ´e voltado O maior esfor¸co ´e voltado para a estrutura¸c˜ao do
para a estrutura¸c˜ao sistema como um todo e e o desenvolvimento a comunica¸c˜ao entre as
dos algoritmos diferentes partes e padr˜oes do projeto
Desenvolvimento versus Engenharia de Software
Um desenvolvedor Equipe de Desenvolvedores
Aplica¸c˜oes Simples Sistemas Complexos
Vida Curta Vida Longa
Um ou Poucos Interessados Muitos Interessados Desenvolvedor = Usu´ario Desenvolvedor 6= Usu´ario
Usu´ario = Cliente Usu´ario 6= Cliente
Solu¸c˜ao Ad-hoc Preocupa¸c˜ao com Reusabilidade
Dificuldades no Desenvolvimento de Software
Complexidade
• C´alculo da complexidade/tempo do desenvolvimento;
• Crescimento da complexidade ´e n˜ao linear em rela¸c˜ao ao tamanho.
Inconstˆ
ancia
• Software visto como infinitamente male´avel;
• Mudan¸cas em rela¸c˜ao ao projeto original como: novos requisitos do
usu´ario, novas tecnologias, novas leis e regulamenta¸c˜oes, etc.
Reusabilidade
• Desenvolver um software orientado a objetos ´e dif´ıcil;
Vantagens no Desenvolvimento de Software de Qualidade
Reusabilidade
• Redu¸c˜ao do tempo e do custo de desenvolvimento no futuro;
• Maior confian¸ca na utiliza¸c˜ao de c´odigos j´a testados.
Experiˆ
encia
• Frieza para estudar padr˜oes utilizados anteriormente, evitando a
solu¸c˜ao mais ´obvia a princ´ıpio;
Aspectos Cruciais na Programa¸c˜
ao Orientada a Objetos
• Definir objetos pertinentes em rela¸c˜ao aos requisitos;
• Represent´a-los em classes na granularidade certa;
• Definir as interfaces das classes;
• Definir as hierarquias das heran¸cas;
Por que Padr˜
oes?
Padr˜
oes
• Solu¸c˜ao para acelerar a tomada de tantas decis˜oes presentes no
desenvolvimento.
• Tentativa de definir uma solu¸c˜ao para um problema estrutural
recorrente.
Tipos de Padr˜
ao
• Alto n´ıvel de abstra¸c˜ao → Padr˜oes Arquiteturais
Ex.: Client-Server
• M´edio n´ıvel de abstra¸c˜ao → Padr˜oes de Projeto
Ex.: Abstract Factory
• Baixo n´ıvel de abstra¸c˜ao → Padr˜oes de Programa¸c˜ao
Por que Padr˜
oes de Projeto?
Problemas Iguais → Solu¸c˜
oes Iguais
• Garantia de que “novas” solu¸c˜oes n˜ao ser˜ao “redescobertas”;
• Confiablidade, eficiˆencia e bom tratamento de “d´ej`a-vu” no
desenvolvimento;
• Garantia de um sistema mais flex´ıvel, elegante e, sobretudo,
reus´avel;
Por que Padr˜
oes de Projeto?
N´ıvel de Abstra¸c˜
ao Intermedi´
ario
• Sobre diferentes pontos o Padr˜ao definido para um sistema pode ser
tipo como apenas um bloco primitivo em outro;
• Os padr˜oes de projeto que ser˜ao estudados apresentam um n´ıvel de
abstra¸c˜ao intermedi´ario;
• N˜ao s˜ao baixo n´ıvel a ponto de definir estruturas de dados a serem
usadas e seu funcionamento;
• N˜ao s˜ao alto n´ıvel a ponto de estruturar por completo a arquitetura
Defini¸c˜
ao 1
“Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice”
Christopher Alexander, A Pattern Language, 1977
Defini¸c˜
ao 2
“The design patterns are descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context.”
Gang of Four, Design Patterns: Elements of Reusable Object-Oriented Software, 2000
Defini¸c˜
ao 3
“A design pattern is a general reusable solution to a commonly occurring problem in software design. (...) It is a description or template for how to solve a problem that can be used in many different situations.
Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.”
Wikip´edia, Portuguˆes,
Componentes de um Padr˜
ao
Nome
• Descreve um problema de design, sua solu¸c˜ao e as consequˆencias
desta em uma ou duas palavras;
• Enriquece o vocabul´ario t´ecnico, facilitando a comunica¸c˜ao entre
projetistas e desenvolvedores;
• Facilita a discuss˜ao sobre os padr˜oes e sobre as vantagens e
desvantagens de sua utiliza¸c˜ao;
• Facilita at´e mesmo a tomada de decis˜oes quanto ao padr˜ao adotado
para um projeto;
Componentes de um Padr˜
ao
Problema
• Descreve quando aplicar o padr˜ao, explicando o problema e seu
contexto;
• Descreve problemas de design espec´ıficos que o padr˜ao resolve;
• Possivelmente, inclui uma lista de requisitos que devem ser
Componentes de um Padr˜
ao
Solu¸c˜
ao
• Descreve os elementos que comp˜oem o design, seus
relacionamentos, responsabilidades e colabora¸c˜oes;
• Descreve o modelo geral de funcionamento, sem se preocupar com
um design particular ou sua implementa¸c˜ao;
• Fornece uma descri¸c˜ao abstrata de um problema de design e explica
Componentes de um Padr˜
ao
Consequˆ
encias
• Compreendem os resultados, vantagens e desvatagens de aplicar o
padr˜ao;
• Descrevem o impacto da sua utiliza¸c˜ao sobre a extensibilidade,
flexibilidade ou portabilidade do sistema, facilitando avaliar o n´ıvel de reusabilidade do mesmo;
• Apresentam o funcionamento do padr˜ao tamb´em em rela¸c˜ao a
espa¸co e tempo, ou utiliza¸c˜ao de mem´oria e processamento;
• Sua an´alise ´e fundamental na avalia¸c˜ao das alternativas de padr˜oes cab´ıveis ao projeto e no entendimento dos custos e benef´ıcios do padr˜ao.
Requisitos de um Padr˜
ao de Software
Um Padr˜
ao de Software Deve:
• solucionar um problema de design espec´ıfico, estruturando os
elementos do sistema de maneira flex´ıvel, elegante e reus´avel;
• ser geral o suficiente para servir de solu¸c˜ao para problemas e
requisitos futuros que apresentem aspectos similares;
• ser facilmente referenciado e permitir sua reutiliza¸c˜ao em um novo
Quanto `
a Finalidade
Padr˜
oes Criacionais
Referem-se ao processo de cria¸c˜ao dos objetos.
Ex.: Builder : separa a constru¸c˜ao de um objeto complexo de sua
representa¸c˜ao, permitindo a utiliza¸c˜ao de um mesmo processo na cria¸c˜ao de diferentes representa¸c˜oes.
Quanto `
a Finalidade
Padr˜
oes Estruturais
Tratam a composi¸c˜ao das classes e objetos.
Ex.: Composite: Comp˜oe objetos em ´arvores de agrega¸c˜ao
(relacionamento parte-todo), permitindo que objetos agregados sejam
Quanto `
a Finalidade
Padr˜
oes Comportamentais
Caracterizam a forma com que as classes e os objetos se interagem e compartilham as responsabilidades.
Ex.: Iterator : Provˆe um modo de acesso sequencial a elementos de um
Quanto ao Escopo
Classe
Tratam o relacionamento entre as classes e suas subclasses. Como essas rela¸c˜oes s˜ao estabelecida por meio de heran¸ca, elas s˜ao est´aticas (fixadas
em tempo de compila¸c˜ao).
Ex.: Um padr˜ao estrutural de classe utiliza heran¸ca para compor as
Quanto ao Escopo
Objeto
Tratam o relacionamento entre os objetos. Essas rela¸c˜oes s˜ao mais
dinˆamicas, podendo ser alteradas em tempo de execu¸c˜ao.
Ex.: Um padr˜ao estrutural de objeto descreve como estes devem ser
Como Descrever um Padr˜
ao?
• Apesar de muito importante, a representa¸c˜ao gr´afica dos elementos
do padr˜ao n˜ao ´e suficiente, j´a que apresenta apenas a estrutura¸c˜ao dos elementos no design.
• Para garantir a compreens˜ao do padr˜ao e facilitar seu reuso, s˜ao
necess´arios tamb´em registros tratando informa¸c˜oes como as
alternativas existentes, as decis˜oes tomadas, as vantagens e
desvantagens do padr˜ao, exemplos de sua aplica¸c˜ao, etc.
• Seguindo a proposta de “Gang of Four”, a descri¸c˜ao de cada um dos
padr˜oes ser´a dividida em 13 informa¸c˜oes categ´oricas, facilitando assim a compreens˜ao, compara¸c˜ao e utiliza¸c˜ao dos padr˜oes.
Elementos da Descri¸c˜
ao dos Padr˜
oes
Nome do Padr˜
ao e Classifica¸c˜
ao
Uma denomina¸c˜ao curta que transmite a essˆencia do padr˜ao e passa a
fazer parte do vocabul´ario dos projetistas. Classifica¸c˜oes quanto a
finalidade e escopo.
Prop´
osito
Uma breve descri¸c˜ao que deve responder a perguntas como: “O quˆe o
padr˜ao faz?”, “Qual a sua pretens˜ao?” e “Que tipo de problema ou
caracter´ıstica particular de Design ele trata?”
Tamb´
em Conhecido Como
Conjunto de outros nomes e denomina¸c˜oes que refereciam o padr˜ao, caso
Elementos da Descri¸c˜
ao dos Padr˜
oes
Motiva¸c˜
ao
Um cen´ario que ilustra o problema de Design e como as estruturas de
classes e objetos no padr˜ao o resolvem.
Aplicabilidade
Uma breve descri¸c˜ao que deve responder a perguntas como: “Quais s˜ao
as situa¸c˜oes em que este padr˜ao pode ser aplicado?”, “Quais s˜ao os
exemplos de designs ruins que a utiliza¸c˜ao dele pode resolver?” e “Como
vocˆe pode reconhecer estas situa¸c˜oes?”.
Estrutura
Elementos da Descri¸c˜
ao dos Padr˜
oes
Participantes
As classes e/ou objetos pertencentes `aquele par˜ao e suas
responsabilidades.
Colabora¸c˜
oes
Como os participantes interagem para cumprir suas responsabilidades.
Conseq¨
uˆ
encias
Uma breve descri¸c˜ao que deve responder a perguntas como: “Como o
padr˜ao alcan¸ca seus objetivos?”, “Quais s˜ao as vantagens e desvantagens
da utiliza¸c˜ao do padr˜ao?” e “Quais aspectos da estrutura do sistema
Elementos da Descri¸c˜
ao dos Padr˜
oes
Implementa¸c˜
ao
Dicas e t´ecnicas ´uteis no processo de implementa¸c˜ao, e poss´ıveis
armadilhas para as quais o projetista deve estar preparado. Rela¸c˜oes do
padr˜ao com uma ou outra linguagem.
C´
odigo Exemplo
Fragmentos de c´odigo que ilustrem como o padr˜ao deve ser implementado
Usos Conhecidos
Exemplos da utiliza¸c˜ao do padr˜ao em sistemas j´a implementados.
Padr˜
oes Relacionados
Lista de todos os padr˜oes fortemente relacionados ao padr˜ao em quest˜ao
Obrigado pela aten¸c˜ao!