não de reuso
ClasseDerivada herda
atributos e operações
da ClassePai
ClasseAbstrata define
uma interface comum
para todas as suas
subclasses
Um objeto pode ter muitos tipos; objetos de
diferentes classes podem ter o mesmo tipo
Classe Tipo
Classe Tipo
Programe para uma interface e não para uma implementação
Para reuso, prefira composição à herança
1. Criar um objeto especificando sua classe explicitamente
2. Depender de operações específicas
3. Depender de uma plataforma de hardware ou software
4. Depender de implementação ou representação de
objeto
5. Depender de um algoritmo específico
6. Acoplamento forte
7. Estender funcionalidades usando herança
8. Inabilidade de alterar classes convenientemente
Helm Gamma Johnson Vlissides
Metsker, 2002
Intenção Padrão
Ajustar a interface de uma classe à interface que o
cliente espera
Adapter
Oferecer uma interface única para uma coleção de
classes
Façade
Definir uma interface que se aplica a objetos individuais
ou a grupos de objetos
Composite
Desacoplar uma abstração de sua implementação de
forma que as duas possam variar independentemente
Bridge
java.awt.event
Problemas?
Metsker, 2002
Intenção Padrão
Centralizar responsabilidade em uma única instância da classe Singleton
Desacoplar um objeto do conhecimento de quais outros objetos
dependem dele
Observer
Centralizar responsabilidade em uma classe que supervisiona
como um conjunto de outros objetos interagem
Mediator
Deixar um objeto atuar em nome de outro objeto Proxy
Permitir que uma requisição passe por uma sequência de objetos
até encontrar um que possa atendê-la
Chain of responsibility
Centralizar responsabilidade em pequenos objetos
compartilhados
Flyweight
In brief, smart pointers are C++ objects that simulate
simple pointers by implementing operator -> and the
unary operator *. In addition to sporting pointer syntax
and semantics, smart pointers often perform useful
tasks—such as memory management or locking—under
the covers, thus freeing the application from carefully
managing the lifetime of pointed-to objects.
Andrei Alexandrescu,
Modern C++ Design: Generic Programming and Design
Patterns Applied.
Addison-Wesley, 2001.
Criação
Uso
Liberação
Não permite a cópia!
pont1 deixa de ser
válido
(nullptr)
Fim do escopo mas não é a última referência:
destrutor não é invocado
Cópia do ponteiro
Observer 1 Observer 2
Construtor
Destrutor
Objetos construídos
Cada objeto referencia o outro (referência compartilhada)
Fim do escopo das referências,
mas recursos não são liberados
(vazamento de memória)
Referência compartilhada
Solução problemática
Cada objeto referencia o outro, mas sem posse (referência fraca)
Referência fraca
Referência fraca não detém a
posse do recurso alocado
(sem vazamento de memória)
Destrutores invocados
Solução com weak_ptr
Intrínseco (imutável)Extrínseco
Fábrica
Como se dá a criação de
objetos ao longo de uma
hierarquia de classes?
Como fazer se vários
construtores da mesma
classe colaboram entre si?
Intenção Padrão
Obter gradualmente a informação necessária
para construir um objeto
Builder
Adiar a decisão sobre qual classe instanciar Factory Method
Construir uma família de objetos Abstract Factory
Construir um objeto a partir de exemplo
existente
Prototype
Reconstruir um objeto a partir de informação de
estado anteriormente salva
Memento
Intenção Padrão
Implementar um algoritmo em um método, deixando a
definição de alguns passos do algoritmo para subclasses
que podem refiná-lo
Template Method
Distribuir uma operação de modo que cada classe
represente um estado diferente
State
Encapsular uma operação, tornado as implementações
intercambiáveis
Strategy
Encapsular a invocação de um método em um objeto Command
Distribuir uma operação de modo que cada
implementação seja aplicável a um tipo diferente de
composição
Interpreter
Intenção Padrão
Acrescentar responsabilidades adicionais a um
objeto dinamicamente
Decorator
Oferecer um modo de acessar uma coleção de
instâncias de uma classe
Iterator
Acrescentar novas operações a uma classe sem
alterar a classe
Visitor
http://proquestcombo.safaribooksonline.com/0-201-74397-3

Padroes

  • 9.
  • 10.
    ClasseDerivada herda atributos eoperações da ClassePai ClasseAbstrata define uma interface comum para todas as suas subclasses
  • 11.
    Um objeto podeter muitos tipos; objetos de diferentes classes podem ter o mesmo tipo
  • 12.
  • 13.
    Programe para umainterface e não para uma implementação
  • 14.
    Para reuso, prefiracomposição à herança
  • 18.
    1. Criar umobjeto especificando sua classe explicitamente 2. Depender de operações específicas 3. Depender de uma plataforma de hardware ou software 4. Depender de implementação ou representação de objeto
  • 19.
    5. Depender deum algoritmo específico 6. Acoplamento forte 7. Estender funcionalidades usando herança 8. Inabilidade de alterar classes convenientemente
  • 20.
  • 22.
  • 24.
    Intenção Padrão Ajustar ainterface de uma classe à interface que o cliente espera Adapter Oferecer uma interface única para uma coleção de classes Façade Definir uma interface que se aplica a objetos individuais ou a grupos de objetos Composite Desacoplar uma abstração de sua implementação de forma que as duas possam variar independentemente Bridge
  • 28.
  • 40.
  • 42.
    Intenção Padrão Centralizar responsabilidadeem uma única instância da classe Singleton Desacoplar um objeto do conhecimento de quais outros objetos dependem dele Observer Centralizar responsabilidade em uma classe que supervisiona como um conjunto de outros objetos interagem Mediator Deixar um objeto atuar em nome de outro objeto Proxy Permitir que uma requisição passe por uma sequência de objetos até encontrar um que possa atendê-la Chain of responsibility Centralizar responsabilidade em pequenos objetos compartilhados Flyweight
  • 63.
    In brief, smartpointers are C++ objects that simulate simple pointers by implementing operator -> and the unary operator *. In addition to sporting pointer syntax and semantics, smart pointers often perform useful tasks—such as memory management or locking—under the covers, thus freeing the application from carefully managing the lifetime of pointed-to objects. Andrei Alexandrescu, Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley, 2001.
  • 66.
  • 67.
  • 68.
    pont1 deixa deser válido (nullptr)
  • 70.
    Fim do escopomas não é a última referência: destrutor não é invocado Cópia do ponteiro
  • 71.
  • 72.
    Construtor Destrutor Objetos construídos Cada objetoreferencia o outro (referência compartilhada) Fim do escopo das referências, mas recursos não são liberados (vazamento de memória) Referência compartilhada Solução problemática
  • 73.
    Cada objeto referenciao outro, mas sem posse (referência fraca) Referência fraca Referência fraca não detém a posse do recurso alocado (sem vazamento de memória) Destrutores invocados Solução com weak_ptr
  • 83.
  • 87.
    Como se dáa criação de objetos ao longo de uma hierarquia de classes? Como fazer se vários construtores da mesma classe colaboram entre si?
  • 88.
    Intenção Padrão Obter gradualmentea informação necessária para construir um objeto Builder Adiar a decisão sobre qual classe instanciar Factory Method Construir uma família de objetos Abstract Factory Construir um objeto a partir de exemplo existente Prototype Reconstruir um objeto a partir de informação de estado anteriormente salva Memento
  • 106.
    Intenção Padrão Implementar umalgoritmo em um método, deixando a definição de alguns passos do algoritmo para subclasses que podem refiná-lo Template Method Distribuir uma operação de modo que cada classe represente um estado diferente State Encapsular uma operação, tornado as implementações intercambiáveis Strategy Encapsular a invocação de um método em um objeto Command Distribuir uma operação de modo que cada implementação seja aplicável a um tipo diferente de composição Interpreter
  • 128.
    Intenção Padrão Acrescentar responsabilidadesadicionais a um objeto dinamicamente Decorator Oferecer um modo de acessar uma coleção de instâncias de uma classe Iterator Acrescentar novas operações a uma classe sem alterar a classe Visitor
  • 145.