SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
Padrões de Projeto

       Padrões Criacionais
Padrões Criacionais
•  Abstraem o processo de instanciação
    – Sistema independente de como seus objetos
      são criados, compostos e representados
    – Um padrão criacional:
      •  De classe: usa herança para variar a classe que é
         instanciada
      •  De objeto: delega instanciação a outro objeto
•  Sistemas hoje dependem mais de
   composição de objetos do que de herança
   de classes
2                  Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                     of Reusable OO Software - Gamma
Padrões Criacionais
•  Características comuns do padrões
   criacionais:
    – Todos eles encapsulam o conhecimento
      sobre quais classes concretas o sistema usa
    – Escondem como as instâncias destas classes
      são criadas e postas juntas
•  Alguns são complementares, outros são
   “competidores”

3                Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                   of Reusable OO Software - Gamma
Exemplo: um jogo de labirinto
•  Um labirinto (Maze) é um conjunto de
   cômodos (Room)
•  Um cômodo conhece seus “vizinhos”
•  “Vizinhos” podem ser outro cômodo, uma
   parede (Wall) ou uma porta (Door) para
   outro cômodo
•  Cada cômodo tem 4 lados:
   enum Direction (North, South,
   East, West);
4             Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                of Reusable OO Software - Gamma
Diagrama de Classes do Jogo de
               Labirinto




5            Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
               of Reusable OO Software - Gamma
Classe MapSite




6     Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
        of Reusable OO Software - Gamma
Classe Room




7    Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma
Classes Wall e Door




8       Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
          of Reusable OO Software - Gamma
Classe Maze




9    Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma
Classe MazeGame




10      Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
          of Reusable OO Software - Gamma
Considerações
•  O problema com este código não está no
   tamanho e sim em sua inflexibilidade
•  Mudar o labirinto implica em reescrever o
   código (reimplementar) ou mudar partes
   (o que está sujeito a erros, além de não
   promover reuso)
     – Padrões criacionais tornam mais fácil mudar
       as classes que definem os componentes do
       labirinto
11                Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                    of Reusable OO Software - Gamma
Reuso do layout do Labirinto
•  Suponha um novo labirinto com:
     – DoorNeedingSpell
     – EnchantedRoom
       •  Seria necessário recodificar as partes que instanciam estas
          classes
       •  Padrões criacionais provêem diferentes formas de se
          remover estas referências explícitas a classes concretas:
           –  Chamando funções virtuais (Factory)
           –  Passando objetos com parâmetros (Abstract Factory)
           –  Usando herança para mudar partes (Builder)
           –  Usando parametrização (Protótipo)


12                     Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                         of Reusable OO Software - Gamma

Contenu connexe

Tendances

Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singletonWendel Moreira
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Poo slides01
Poo slides01Poo slides01
Poo slides01jmtofoli
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasBreno Vitorino
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - ConceitosMayron Cachina
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java BasicoJoel Lobo
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLGeorge Mendonça
 
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em JavaJava Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em JavaFábio Antonelli
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 

Tendances (20)

Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singleton
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Poo slides01
Poo slides01Poo slides01
Poo slides01
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e Técnicas
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
Aula 1 5
Aula 1 5Aula 1 5
Aula 1 5
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - Conceitos
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSL
 
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em JavaJava Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 

En vedette

Padrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e StrategyPadrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e StrategyJoão Carlos Ottobboni
 
SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisEduardo Nicola F. Zagari
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosEduardo Nicola F. Zagari
 
Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerEduardo Nicola F. Zagari
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCEduardo Nicola F. Zagari
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasEduardo Nicola F. Zagari
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelEduardo Nicola F. Zagari
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estadosstill01
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)Rudy De Busscher
 

En vedette (19)

TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Padrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e StrategyPadrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e Strategy
 
Padrões-01 - Introdução
Padrões-01 - IntroduçãoPadrões-01 - Introdução
Padrões-01 - Introdução
 
ICC-07 Softwares - Introdução
ICC-07 Softwares - IntroduçãoICC-07 Softwares - Introdução
ICC-07 Softwares - Introdução
 
SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas Operacionais
 
Uma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDBUma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDB
 
Classificação de Documentos
Classificação de DocumentosClassificação de Documentos
Classificação de Documentos
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
 
Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - Broker
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVC
 
ICC-05 Álgebra Booleana
ICC-05 Álgebra BooleanaICC-05 Álgebra Booleana
ICC-05 Álgebra Booleana
 
ICC-06 Periféricos - Introdução
ICC-06 Periféricos - IntroduçãoICC-06 Periféricos - Introdução
ICC-06 Periféricos - Introdução
 
ICC-02 Evolução dos Computadores
ICC-02 Evolução dos ComputadoresICC-02 Evolução dos Computadores
ICC-02 Evolução dos Computadores
 
ICC-01 História dos Computadores
ICC-01 História dos ComputadoresICC-01 História dos Computadores
ICC-01 História dos Computadores
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - Camadas
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - Microkernel
 
Diagramas de estados
Diagramas de estadosDiagramas de estados
Diagramas de estados
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)
 

Similaire à Padrões-07 - Padrões Criacionais

POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
POO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdfPOO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdfJadna Almeida
 
Banco de Dados em Grafos com Neo4J
Banco de Dados em Grafos com Neo4J  Banco de Dados em Grafos com Neo4J
Banco de Dados em Grafos com Neo4J Daniel San Martin
 
Apresentação Intermediária 2
Apresentação Intermediária 2Apresentação Intermediária 2
Apresentação Intermediária 2ardeoino
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
Weka em aplicações java
Weka em aplicações javaWeka em aplicações java
Weka em aplicações javaMarcio Palheta
 
BlingTech - Padrões de Projeto
BlingTech - Padrões de ProjetoBlingTech - Padrões de Projeto
BlingTech - Padrões de ProjetoFernando Henrique
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosCloves da Rocha
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheirasHigor César
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4javamanrj
 
Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5oliveiraprog
 
Refatoração de código Python
Refatoração de código PythonRefatoração de código Python
Refatoração de código Pythondiogobaeder
 
Java Básico :: Orientação a objetos
Java Básico :: Orientação a objetosJava Básico :: Orientação a objetos
Java Básico :: Orientação a objetosWesley R. Bezerra
 
Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2Matheus Calegaro
 

Similaire à Padrões-07 - Padrões Criacionais (20)

POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
POO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdfPOO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdf
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Banco de Dados em Grafos com Neo4J
Banco de Dados em Grafos com Neo4J  Banco de Dados em Grafos com Neo4J
Banco de Dados em Grafos com Neo4J
 
Apresentação Intermediária 2
Apresentação Intermediária 2Apresentação Intermediária 2
Apresentação Intermediária 2
 
000
000000
000
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Weka em aplicações java
Weka em aplicações javaWeka em aplicações java
Weka em aplicações java
 
BlingTech - Padrões de Projeto
BlingTech - Padrões de ProjetoBlingTech - Padrões de Projeto
BlingTech - Padrões de Projeto
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a Objetos
 
Aprensentacao oo-trincheiras
Aprensentacao oo-trincheirasAprensentacao oo-trincheiras
Aprensentacao oo-trincheiras
 
Java 02
Java 02Java 02
Java 02
 
Workshop ExtJS4
Workshop ExtJS4Workshop ExtJS4
Workshop ExtJS4
 
Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5
 
Refatoração de código Python
Refatoração de código PythonRefatoração de código Python
Refatoração de código Python
 
Java Básico :: Orientação a objetos
Java Básico :: Orientação a objetosJava Básico :: Orientação a objetos
Java Básico :: Orientação a objetos
 
Refatorações
RefatoraçõesRefatorações
Refatorações
 
Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2
 

Plus de Eduardo Nicola F. Zagari

Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasEduardo Nicola F. Zagari
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSEduardo Nicola F. Zagari
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxEduardo Nicola F. Zagari
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealEduardo Nicola F. Zagari
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Eduardo Nicola F. Zagari
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Eduardo Nicola F. Zagari
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Eduardo Nicola F. Zagari
 

Plus de Eduardo Nicola F. Zagari (10)

Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes Linux
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo Real
 
Módulo de Estudos em Tempo Real
Módulo de Estudos em Tempo RealMódulo de Estudos em Tempo Real
Módulo de Estudos em Tempo Real
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
 
ICC-03 Organização dos Computadores
ICC-03 Organização dos ComputadoresICC-03 Organização dos Computadores
ICC-03 Organização dos Computadores
 
ICC-04 Sistemas Numéricos
ICC-04 Sistemas NuméricosICC-04 Sistemas Numéricos
ICC-04 Sistemas Numéricos
 

Padrões-07 - Padrões Criacionais

  • 1. Padrões de Projeto Padrões Criacionais
  • 2. Padrões Criacionais •  Abstraem o processo de instanciação – Sistema independente de como seus objetos são criados, compostos e representados – Um padrão criacional: •  De classe: usa herança para variar a classe que é instanciada •  De objeto: delega instanciação a outro objeto •  Sistemas hoje dependem mais de composição de objetos do que de herança de classes 2 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 3. Padrões Criacionais •  Características comuns do padrões criacionais: – Todos eles encapsulam o conhecimento sobre quais classes concretas o sistema usa – Escondem como as instâncias destas classes são criadas e postas juntas •  Alguns são complementares, outros são “competidores” 3 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 4. Exemplo: um jogo de labirinto •  Um labirinto (Maze) é um conjunto de cômodos (Room) •  Um cômodo conhece seus “vizinhos” •  “Vizinhos” podem ser outro cômodo, uma parede (Wall) ou uma porta (Door) para outro cômodo •  Cada cômodo tem 4 lados: enum Direction (North, South, East, West); 4 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 5. Diagrama de Classes do Jogo de Labirinto 5 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 6. Classe MapSite 6 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 7. Classe Room 7 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 8. Classes Wall e Door 8 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 9. Classe Maze 9 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 10. Classe MazeGame 10 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 11. Considerações •  O problema com este código não está no tamanho e sim em sua inflexibilidade •  Mudar o labirinto implica em reescrever o código (reimplementar) ou mudar partes (o que está sujeito a erros, além de não promover reuso) – Padrões criacionais tornam mais fácil mudar as classes que definem os componentes do labirinto 11 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 12. Reuso do layout do Labirinto •  Suponha um novo labirinto com: – DoorNeedingSpell – EnchantedRoom •  Seria necessário recodificar as partes que instanciam estas classes •  Padrões criacionais provêem diferentes formas de se remover estas referências explícitas a classes concretas: –  Chamando funções virtuais (Factory) –  Passando objetos com parâmetros (Abstract Factory) –  Usando herança para mudar partes (Builder) –  Usando parametrização (Protótipo) 12 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma