Engenharia de Software 1
10 - Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Alexandre de Andrade Barbosa
Objetivos
Objetivos
Apresentar alternativas de reuso de software Exibir o conceito de padr˜oes de projeto
Descrever os elementos de um padr˜ao de projeto Fornecer uma vis˜ao geral dos padr˜oes GoF
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Introdu¸c˜ao
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Introdu¸c˜ao
Por muito tempo a ES focou no desenvolvimento tradicional Atualmente existem muitos esfor¸cos para aumentar o reuso no desenvolvimento de software
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Introdu¸c˜ao
As unidades de software reusadas podem se basear em unidade com tamanhos diferentes
Reuso de aplica¸c˜oes. Reuso baseado na incorpora¸c˜ao de aplica¸c˜oes inteiras com ou sem adapta¸c˜oes
Reuso de componentes. Reuso de subsistemas inteiros que fornecem um conjunto de servi¸cos
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Introdu¸c˜ao
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Introdu¸c˜ao
Quais s˜ao os benef´ıcios do desenvolvimento baseado em reuso: menores custos de produ¸c˜ao e manuten¸c˜ao - partes do sistema j´a foram implementadas;
entregas mais r´apidas - o tempo necess´ario para desenvolver do zero ´e maior do que se uma solu¸c˜ao j´a implementada for adotada; aumento da qualidade do software - o sistema j´a foi usado e testado diversas vezes;
uso eficiente de recursos humanos - os especialistas n˜ao executar˜ao trabalho repetido;
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Introdu¸c˜ao
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Introdu¸c˜ao
Quais s˜ao os problemas do desenvolvimento baseado em reuso: s´ındrome do n˜ao inventado aqui - os desenvolvedores tendem a pensar que suas solu¸c˜oes s˜ao melhores que a de terceiros; falta de documenta¸c˜ao do componente a ser reutilizado - os criadores podem n˜ao ter criado material de apoio para suas solu¸c˜oes;
custos de manuten¸c˜ao podem aumentar no in´ıcio - a curva de aprendizado inicial pode ser custosa;
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
O panorama do reuso
Existem muitas abordagens diferentes para reuso que podem ser usadas
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
O panorama do reuso
Design patterns (Padr˜oes de projeto). Solu¸c˜oes abstratas que resolvem problemas recorrentes no desenvolvimento
Desenvolvimento baseado em componentes. Integra¸c˜ao de componentes (conjuntos de objetos) em uma aplica¸c˜ao Frameworks. Conjuntos de classes abstratas e concretas que pode ser adaptado ou ampliados na cria¸c˜ao de uma aplica¸c˜ao Linhas de produto. Adapta¸c˜ao de uma arquitetura comum a uma fam´ılia de produtos
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
O panorama do reuso
Qual t´ecnica ´e mais apropriada?
Uma serie de fatores influenciam, por exemplo: tipo de software que ser´a desenvolvido; tecnologias utilizadas;
ativos reus´aveis dipon´ıveis;
preferˆencias da equipe de desenvolvimento;
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Planejar e adotar
O reuso n˜ao vai acontecer da noite para o dia
Planejamento ´e necess´ario para que se possa adotar solu¸c˜oes de reuso
A adapta¸c˜ao da equipe pode levar algum tempo e diminuir a produtividade em um primeiro momento
Para adotar qualquer solu¸c˜ao de reuso ´e necess´ario: Descobrir
Codifica¸c˜ao:
Introdu¸c˜ao aos Padr˜oes de Projeto
Planejar e adotar
Planejamento de reuso deve levar em considera¸c˜ao: cronograma do projeto - aprendizado inicial pode demorar; ciclo de vida previsto do software - para ciclos longos o melhor ´e facilitar a manuten¸c˜ao;
equipe de desenvolvimento - levar em considera¸c˜ao o conhecimento e as habilidades da equipe;
propriedades emergentes - requisitos de performance pode n˜ao ser garantidos;
outros
Padr˜oes de projeto
Criar um bom projeto de software ´e uma tarefa complicada Projeto O.O. reutiliz´avel e flex´ıvel dificilmente ´e obtido na primeira especifica¸c˜ao
Projetistas experientes costumam realizar bons projetos, pois se baseiam em solu¸c˜oes anteriores
Padr˜oes de projeto
Padr˜oes de projeto
O que projetistas experientes sabem que os novatos n˜ao sabem?
Padr˜oes de projeto
Um sistema O.O. cont´em objetos que trocam mensagens para realizar uma funcionalidade
Solu¸c˜oes que mostraram ser eficientes na resolu¸c˜ao de um problema devem ser reutilizadas
Com o reuso de solu¸c˜oes surgem padr˜oes de objetos e de comunica¸c˜oes entre estes
Padr˜oes de projeto
Uma analogia...Autores de cinema, novela, teatro... reutilizam elementos b´asicos em seus roteiros
Padr˜oes de projeto
Uma analogia...Autores de cinema, novela, teatro... reutilizam elementos b´asicos em seus roteiros
Padr˜oes de projeto
Muitos problemas que ocorrem em um projeto j´a devem ter sido resolvidos em projetos anteriores
O problema ´e que dificilmente algu´em ir´a lembrar como o problema foi resolvido
Padr˜oes de projeto consistem em registros destas experiˆencias para o projeto de software
Exemplos de padr˜oes:
Padr˜oes GRASP (General Responsibility Assignment Software Patterns)
O que ´e um padr˜ao de projeto?
“...cada padr˜ao descreve um problema no nosso ambiente e o n´ucleo de sua solu¸c˜ao...”
O que ´e um padr˜ao de projeto?
Um padr˜ao representa a solu¸c˜aoreutiliz´avel para um problema
recorrenteem um determinado contexto
Os padr˜oes s˜ao descritos utilizando quatro elementos essenciais: nome - r´otulo (sugestivo) utilizado para identificar o padr˜ao problema - descri¸c˜ao do tipo de problema e seu contexto solu¸c˜ao - descri¸c˜ao abstrata dos elementos do projeto utilizado para resolver o problema
O que ´e um padr˜ao de projeto?
Descri¸c˜ao dos padr˜oes
Os padr˜oes de projeto GoF s˜ao descritos utilizando as seguintes descri¸c˜oes:
Descri¸c˜ao dos padr˜oes
Nome e classifica¸c˜ao
O nome representa o padr˜ao expressando seu objetivo de forma breve
A classifica¸c˜ao descreve a finalidade e o escopo do padr˜ao Inten¸c˜ao e objetivo
Declara¸c˜ao breve sobre o que o padr˜ao faz, qual tipo de problema ele ataca, ...
Sinˆonimos
Descri¸c˜ao dos padr˜oes
Motiva¸c˜ao
Descri¸c˜ao de um cen´ario ilustrativo do problema e de como o padr˜ao soluciona este problema
Aplicabilidade
Lista de situa¸c˜oes onde o padr˜ao pode ser aplicado com sucesso Estrutura
Descri¸c˜ao dos padr˜oes
Participantes
Descri¸c˜ao das classes e/ou objetos que participam do padr˜ao e quais s˜ao as responsabilidades associadas a cada um
Colabora¸c˜oes
Descri¸c˜ao das colabora¸c˜oes entre os participantes Conseq¨uˆencias
Descri¸c˜ao dos padr˜oes
Implementa¸c˜ao
Sugest˜oes e observa¸c˜oes relacionadas aos cuidados que se deve ter na implementa¸c˜ao do padr˜ao
Exemplo de c´odigo
Trechos de c´odigo implementando o padr˜ao Usos conhecidos
Exemplos de sistemas que utilizam o padr˜ao Padr˜oes relacionados
Cat´alogo de padr˜oes
23 padr˜oes de projeto GoF, s˜ao eles:
Abstract Factory Factory Method Proxy
Adapter Flyweight Singleton
Bridge Interpreter State
Builder Iterator Strategy
Chain of Responsibility Mediator Template Method
Command Memento Visitor
Decorator Observer
Cat´alogo de padr˜oes
Os padr˜oes de projeto variam em granularidade e em seu n´ıvel de abstra¸c˜ao
Dois crit´erios s˜ao adotados na classifica¸c˜ao dos padr˜oes de projeto GoF:
Cat´alogo de padr˜oes
Os padr˜oes de cria¸c˜ao - se preocupam com o processo de cria¸c˜ao de objetos
Os padr˜oes de estrutura - lidam com a composi¸c˜ao de classes ou de objetos
Cat´alogo de padr˜oes
Cat´alogo de padr˜oes
Cria¸c˜ao Estrutura Comportamento Factory Method Adapter (classe) Interpreter
Classe Template Method
Abstract Factory Adapter (objeto) Chain of Responsibility
Objeto Builder Bridge Command
Prototype Composite Iterator Singleton Decorator Mediator
Fa¸cade Memento Flyweight Observer
Proxy State
Padr˜oes de comportamento
Template MethodTemplate Method
Padr˜oes de comportamento
Template MethodInten¸c˜ao e objetivo:
“Definir o esqueleto de um algoritmo em uma opera¸c˜ao, postergando alguns passos para subclasses. Permite que subclasses redefinam certos passos de um algoritmo sem mudar a estrutura do mesmo.”
Padr˜oes de comportamento
Template Method - Motiva¸c˜aoConsidere um framework para aplica¸c˜oes para manipula¸c˜ao de documentos
Padr˜oes de comportamento
Template Method - Motiva¸c˜aoAplica¸c˜oes baseadas no framework poder˜ao criar subclasses de Application eDocument com algoritmos espec´ıficos
Padr˜oes de comportamento
Template Method - Motiva¸c˜aoClasse abstrata define o algoritmo para abrir e ler um documento
void Application::OpenDocument (const char* name) { if (!CanOpenDocument(name)) {
// cannot handle this document return;
}
Document* doc = DoCreateDocument(); if (doc) {
_docs->AddDocument(doc); AboutToOpenDocument(doc); doc->Open();
Padr˜oes de comportamento
Template Method - Motiva¸c˜aoOpenDocument ´e o Template Method
Os passos necess´arios para abrir um documento verifica se o documento pode ser aberto cria o objeto Documento (espec´ıfico)
adiciona o documento ao conjunto de documentos da aplica¸c˜ao As subclasses definem:
o algoritmo que verifica se o documento pode ser aberto (CanOpenDocument)
Padr˜oes de comportamento
Template Method - AplicabilidadeO padr˜ao Template Method deve ser utilizado:
para implementar as partes invariantes de um algoritmo uma ´unica vez, deixando os comportamentos espec´ıficos para as subclasses quando o comportamento comum entre subclasses precisa ser fatorado, evitando duplica¸c˜ao de c´odigo
Padr˜oes de comportamento
Template Method - EstruturaPadr˜oes de comportamento
Template Method - ParticipantesAbstractClass (Application)
define opera¸c˜oes primitivas abstratas que devem ser implementadas nas subclasses
implementa um m´etodo concreto que invoca opera¸c˜oes primitivas abstratas
ConcreteClass (My Application)
Padr˜oes de comportamento
Template Method - Colabora¸c˜oesPadr˜oes de comportamento
Template Method - Conseq¨uˆenciasBenef´ıcios:
reuso de c´odigo (centraliza¸c˜ao de partes comuns de algoritmos) comportamento padr˜ao extens´ıvel
Cuidados:
Padr˜oes de comportamento
Template Method - Implementa¸c˜aoUtilizando controle de acesso - Opera¸c˜oes primitivas que um m´etodo template chama podem ser declaradas como protegidas (protected)
Minimizando opera¸c˜oes primitivas - Um grande n´umero de opera¸c˜oes primitivas abstratas pode tornar a implementa¸c˜ao trabalhosa
Padr˜oes de comportamento
Template Method - Padr˜oes relacionadosFactory Method - Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual a classe a ser instanciada.
Factory Method s˜ao freq¨uentemente chamados por um template method
Strategy - Define uma fam´ılia de algoritmos, encapsula cada um deles permitindo que eles se tornem intercambi´aveis
Padr˜oes de estrutura
Fa¸cadeFa¸cade
Padr˜oes de estrutura
Fa¸cadeInten¸c˜ao e objetivo:
“Fornecer uma interface unificada para um conjunto de interfaces em um subsistema. Fa¸cade define uma interface de n´ıvel mais alto que torna o subsistema mais f´acil de ser usado.”
-Padr˜oes de estrutura
Fa¸cade - Motiva¸c˜aoSistema complexos s˜ao estruturados em subsistemas
Cada subsistema fornece e utiliza servi¸cos de outros subsistemas Um objetivo de todo projeto ´e minimizar a comunica¸c˜ao e as dependˆencias entre os subsistemas
Padr˜oes de estrutura
Fa¸cade - AplicabilidadeO padr˜ao Fa¸cade deve ser utilizado quando:
se deseja fornecer uma interface simples para um subsistema complexo
existirem muitas dependˆencias entre clientes e as classes de implementa¸c˜ao de uma abstra¸c˜ao
Padr˜oes de estrutura
Fa¸cade - EstruturaPadr˜oes de estrutura
Fa¸cade - ParticipantesFa¸cade
conhece quais as classes do subsistema respons´aveis pelo atendimento de uma solicita¸c˜ao;
delega solicita¸c˜oes de clientes a objetos apropriados do subsistema Classes de subsistema
implementam a funcionalidade do subsistema;
Padr˜oes de estrutura
Fa¸cade - Colabora¸c˜oesClientes se comunicam com um subsistema atrav´es da fachada, a qual repassa as solicita¸c˜oes para os objetos adequados no
Padr˜oes de estrutura
Fa¸cade - Conseq¨uˆenciasBenef´ıcios:
Os clientes que utilizam a fachada n˜ao precisam conhecer as classes do subsistema
Padr˜oes de estrutura
Fa¸cade - Implementa¸c˜aoRedu¸c˜ao do acoplamento
Padr˜oes de estrutura
Fa¸cade - Padr˜oes relacionadosAbstract Factory - Fornece uma interface para cria¸c˜ao de objetos relacionados ou dependentes sem especificar suas classes
concretas
pode ser utilizada uma fachada para cria¸c˜ao de objetos do subsistema de maneira independente do subsistema
Mediator - Define um objeto que encapsula como um conjunto de objetos interage, evita que objetos fa¸cam referˆencia direta uns aos outros
abstrai comunica¸c˜oes arbitr´arias entre objetos-colega,
Singleton
Singleton
Singleton
Inten¸c˜ao e objetivo:
“Garantir que uma classe tenha somente uma instˆancia e fornecer um ponto global de acesso para a mesma.”
-Singleton - Motiva¸c˜ao
Em diversas aplica¸c˜oes ´e necess´ario controlar o acesso a algum recurso:
diversas impressoras podem ser acessadas atrav´es de um ´unico spooler de impress˜ao
o banco de dados pode ser acessado somente atrav´es de uma classe para persistˆencia
Uma solu¸c˜ao ´e determinar a responsabilidade de manter o controle de sua ´unica instˆancia
Singleton - Aplicabilidade
O padr˜ao Singleton deve ser utilizado quando:
Singleton - Participantes
Singleton
define uma opera¸c˜ao Instance (opera¸c˜ao de classe) que permite aos clientes acessarem sua ´unica instˆancia
Singleton - Colabora¸c˜oes
Singleton - Conseq¨uˆencias
Benef´ıcios:
Singleton - Implementa¸c˜ao
Garantindo uma instˆancia ´unica
A instˆancia ´unica de Singleton corresponde a uma instˆancia normal da classe que possui restri¸c˜oes no momento de sua cria¸c˜ao O construtor da classe ´e ocultado
Singleton - Implementa¸c˜ao
class Singleton {
private static Singleton uniqueInstance = null;
private Singleton () { }
public static synchronized Singleton Instance() { if (uniqueInstance == null) {
uniqueInstance = new Singleton(); }
return uniqueInstance; }
Singleton - Padr˜oes relacionados
Diversos padr˜oes podem ser implementados utilizando Singleton Abstract Factory
Exerc´ıcio
Exerc´ıcio
1 Implemente o exemplo apresentadao para o padr˜aoTemplate Methodno livro ‘Padr˜oes de projeto, Gamma, 2000.’
2 Implemente o exemplo apresentadao para o padr˜aoFa¸cadeno livro ‘Padr˜oes de projeto, Gamma, 2000.’
Resumo
Resumo
O desenvolvimento tradicional n˜ao ´e suficiente para atender ao conjunto atual de demandas de software
Reuso possibilita uma s´erie de benef´ıcios para o desenvolvimento de software Padr˜oes de projeto s˜ao solu¸c˜oes eficientes que j´a se mostraram ´uteis em diversos contextos
Template method - “Definir o esqueleto de um algoritmo em uma opera¸c˜ao, postergando alguns passos para subclasses. Permite que subclasses redefinam certos passos de um algoritmo sem mudar a estrutura do mesmo.”
Fa¸cade - “Fornecer uma interface unificada para um conjunto de interfaces em um subsistema. Fa¸cade define uma interface de n´ıvel mais alto que torna o subsistema mais f´acil de ser usado.”
Resumo
Resumo
Leituras recomendadas
Ian Sommerville.
Engenharia de Software 8a ed., 2007.
Cap´ıtulo 18 - Reuso de Software
Sourcemaking Team
Sourcemaking - Teaching IT professionals
Leituras recomendadas
Gamma. E. et al.
Padr˜oes de projeto 1a ed., 2000.
Cap´ıtulo 1 - Introdu¸c˜ao P´ag. 130 Singleton
Cay Horstmann
Padr˜oes de projeto orientados a Objetos 2a ed., 2007.
Perguntas?
Alexandre de Andrade Barbosa