1. O documento discute os padrões de projeto de software, que são soluções reutilizáveis para problemas comuns em projeto de software. 2. São apresentados 23 padrões, como Adapter, Composite, Observer e Strategy, explicando suas intenções e como resolvem problemas de projeto. 3. Também discute conceitos importantes como herança, composição, acoplamento e encapsulamento que os padrões ajudam a aplicar.
18. 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
19. 5. Depender de um algoritmo específico
6. Acoplamento forte
7. Estender funcionalidades usando herança
8. Inabilidade de alterar classes convenientemente
24. 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
42. 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
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63. 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.
72. 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
73. 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
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 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
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106. 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
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128. 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