Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução
O que é um padrão?
• Maneira testada ou documentada de alcançar um objetivo qualquer;
• Padrões são comuns em várias áreas da engenharia;
O que é um padrão?
O que é um padrão?
O que é um padrão?
“Um padrão é a abstração de uma forma concreta que ocorre muitas vezes
em contextos específicos.”
Riehle & Zullighoven, 1996
O que é um padrão?
Padrões - características
Catálogos de padrões
Um catálogo de padrões é um grupo de padrões que estão relacionados
de uma certa forma e podem ser usados juntos ou independentemente:
Catálogo - GoF
Elementos de um padrão
• Nome
• Problema:
• Quando aplicar o padrão, em que condições?
• Solução:
• Descrição abstrata de um problema e como usar os elementos
disponíveis (classes e objetos) para solucioná-lo
• Consequências:
• Custos e benefícios de se aplicar o padrão
• Impacto na flexibilidade, extensibilidade, portabilidade e
eficiência do sistema
FUNDAMENTOS DE PADRÕES DE PROJETO – AULA1
PADRÕES DE PROJETO DE SOFTWARE
Formas de classificação
Gamma et al [1] os classifica de duas formas
• Por propósito:
• criação de classes e objetos,
• alteração da estrutura de um programa,
• controle do seu comportamento
• Por escopo: classe ou objeto
Metsker [2] os classifica em 5 grupos, por intenção (problema a ser solucionado):
• oferecer uma 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
FUNDAMENTOS DE PADRÕES DE PROJETO – AULA1
PADRÕES DE PROJETO DE SOFTWARE
• Escopo de classe
• Descrevem relacionamentos entre classes e suas subclasses
(herança).
• Estáticos: relacionamentos são fixos e definidos em tempo de
compilação.
• Escopo de objeto
• Descrevem relacionamentos entre objetos.
• Dinâmicos: relacionamentos entre objetos podem ser alterados
em tempo de execução.
• Estruturais
• Tratam da composição de classes e objetos para formar
estruturas complexas.
• Associados à maneira como classes e objetos são organizados
estruturalmente.
• Oferecem formas efetivas para usar conceitos OO como herança
e composição.
• São abstrações de aspectos estruturais
De criação
• Associados ao processo de criação de objetos
• Tornam um sistema independente de como seus objetos são
criados, compostos e representados
Comportamentais
• Têm a ver com a maneira pela qual responsabilidades são
distribuídas a classes e objetos durante a realização de uma
tarefa.
• São abstrações de aspectos comportamentais
FUNDAMENTOS DE PADRÕES DE PROJETO – AULA1
PADRÕES DE PROJETO DE SOFTWARE
Padrões de construção
A maneira padrão de construir objetos em Java é através de construtores
1. Toda classe tem um construtor: operação declarada com o mesmo
nome da classe, que não retorna valor e só pode ser usada na
inicialização
2. O construtor é uma tarefa de classe (estática)
3. Se um construtor não é explicitamente declarado em uma classe, o
sistema cria um construtor default para a classe
4. Todo construtor inicializa a hierarquia de classes do objeto antes de
executar
5. Todo construtor sempre contém ou uma referência à superclasse
(implícita ou explícita) ou uma referência a outro construtor da classe
como primeira ou única instrução
FUNDAMENTOS DE PADRÕES DE PROJETO – AULA1
PADRÕES DE PROJETO DE SOFTWARE
Construtores em Java
Factory method
"Definir uma interface para criar um objeto mas deixar que subclasses
decidam que classe instanciar. Factory Method permite que uma classe
delegue a responsabilidade de instanciamento às subclasses."
[GoF]
Como implementar?
Prós e contras
• Vantagens
• Criação de objetos é desacoplada do conhecimento do tipo concreto do
objeto
• Conecta hierarquias de classe paralelas
• Facilita a extensibilidade
• Desvantagens
• Ainda é preciso saber a classe concreta do criador de instâncias (pode-
se usar uma classe Factory, com método estático e parametrizado que
chame diretamente o Factory Method):
Exemplo 1
public class Montadora{
public void novoCarro(String tipo){
Carro carroZero;
if(tipo.equals(“Vectra”))
carroZero = new Vectra();
else
if(tipo.equals(“Omega”))
carroZero = new Omega();
else
if(tipo.equals(“Gol”))
carroZero = new Gol();
else
if(tipo.equals(“Golf”))
carroZero = new Golf();
}
};
FUNDAMENTOS DE PADRÕES DE PROJETO – AULA1
PADRÕES DE PROJETO DE SOFTWARE
Continuação do Exemplo 1
Exemplo 2
Continuação do Exemplo 2
public abstract class Aplicacao {
private Documento doc;
void novoDocumento() {
this.doc = this.criaDocumento();
}
void abrirDocumento() {
this.doc.abrir();
}
}
FUNDAMENTOS DE PADRÕES DE PROJETO – AULA1
PADRÕES DE PROJETO DE SOFTWARE
Continuação do Exemplo 2
public abstract class Documento {
void abrir() {
System.out.println("Documento:Abrir documento!");
}
void fechar() {
System.out.println("Documento:Fechar documento!");
}
void gravar() {
System.out.println("Documento:Gravar documento!");
}
}
FUNDAMENTOS DE PADRÕES DE PROJETO – AULA1
PADRÕES DE PROJETO DE SOFTWARE
Continuação do Exemplo 2
public class MinhaAplicacao extends Aplicacao {
/**
* Uma implementação do Factory Method. Este método é
* especializado na criação de documentos do tipo MeuDocumento
*/
Documento criaDocumento() {
return new MeuDocumento();
}
}
Abstract Factory
Problema
Exemplo 1
Exemplo 2
Continuação do Exemplo 2
public abstract class WidgetFactory {
public static WidgetFactory obterFactory() {
if(Configuracao.obterInterfaceGraficaAtual()==Configuracao.MotifWidget)
return new MotifWidgetFactory();
else
return new QtWidgetFactory();
}
public abstract Botao criarBotao();
}
Continuação do Exemplo 2
public class MotifWidgetFactory extends WidgetFactory{
public Botao criarBotao() {
return new BotaoMotif();
}
}
Continuação do Exemplo 2
public abstract class Botao {
public abstract void desenhar();
}
public class BotaoMotif extends Botao {
public void desenhar() {
System.out.println("Eu sou um botao Motif!");
}
}
public class BotaoQt extends Botao {
public void desenhar() {
System.out.println("Eu sou um botao Qt!");
}
}
FUNDAMENTOS DE PADRÕES DE PROJETO – AULA1
PADRÕES DE PROJETO DE SOFTWARE
Continuação do Exemplo 2
public class Cliente
{
public static void main(String[] args)
{
WidgetFactory factory = WidgetFactory.obterFactory();
Bibliografia
Utilizando UML e Padrões: uma introdução à análise e ao
projeto orientados a objetos - 3ª Edição
Autor: Larman, Craig
Slide 6:
http://www.devmedia.com.br/articles/viewcomp.asp?comp=10635
Slide 7:
http://www.anossaescola.com/cr/testes/RMarques/professor.gif
http://sitededicas.ne10.uol.com.br/curgraca3.htm
Slide 8:
http://pedrocosta.wordpress.com/
http://despguerino.com/pictures.html
Slide 9:
http://www.dsc.ufcg.edu.br/~jacques/cursos/p2/html/oo/usando.htm
Slide 10:
http://carrosbr.com/vw-fox-e-cross-fox-2012.htm
http://www.carrosecorridas.com.br/2010/03/volkswagen-fox-e-crossfox-sao-os-modelos-preferidos-do-publico-feminino/
Slide 13:
http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
Slide 14:
http://www.alexandresmcampos.adm.br/fiec/jcid/java.htm
http://viralpatel.net/blogs/2008/12/java-virtual-machine-an-inside-story.html