
Uma breve abordagem sobre a UML para entender relacionamento dos diagramas e notações UML na composição dos padrões GoF.
Aprender a notação gráfica de uma classe usando o diagrama de classes da UML.
Entender todos os tipos de associações entre classes. Cada tipo de associação é exemplificado utilizando a aplicação open source ArgoUML.
Explanação sobre o conceito de herança (generalização / especialização) entre classes através de exemplos de fácil entendimento.
Entender a diferença entre os relacionamentos de agregação e composição de classes (o conceito do objeto todo-parte).
Entender o relacionamento entre duas classes do tipo cliente (client) e fornecedor (supplier), na qual a classe cliente usa / depende da classe fornecedor.
Entender o principal objetivo dos padrões do projeto GoF e o porquê de eles existirem. Uma breve apresentação dos padrões de criação, estruturais e comportamentais.
Intenção: garantir que uma determinada classe tenha uma, e somente uma instância, mantendo um ponto global de acesso para a mesma.
Intenção: definir uma interface para criar um objeto, mas deixar as subclasses decidirem que classe instanciar.
Intenção: fornecer uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.
Intenção: separar a construção de um objeto complexo da sua representação de modo que o mesmo processo de construção possa criar diferentes representações.
Intenção: especificar os tipos de objetos a serem criados usando uma instância protótipo e criar novos objetos pela cópia deste protótipo
Intenção: desacoplar uma abstração da sua implementação, de modo que as duas possam variar independentemente.
Intenção: converter a interface de uma classe em outra interface, esperada pelos clientes. O Adapter permite que classes com interfaces incompatíveis trabalhem em conjunto o que, de outra forma, seria impossível.
Intenção: fornece um substituto (surrogate) ou marcador da localização de outro objeto para controlar o acesso ao mesmo.
Intenção: agregar dinamicamente responsabilidades adicionais a um objeto.
Intenção: compor objetos em estruturas de árvore para representarem hierarquias todo-parte.
Intenção: fornecer uma interface unificada para um conjunto de interfaces em um subsistema. Façade define uma interface de nível mais alto que torna o subsistema mais fácil de ser usado.
Intenção: usar compartilhamento para suportar eficientemente grandes quantidades de objetos de granularidade fina.
Intenção: encapsular uma solicitação como um objeto, desta forma permitindo parametrizar clientes com diferente solicitações, enfileirar ou fazer o registro (log) de solicitações e suportar operações que podem ser desfeitas.
Intenção: definir uma família de algoritmos, encapsular cada uma delas e torná-las intercambiáveis. Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam.
Intenção: permite a um objeto alterar seu comportamento quando o seu estado interno muda. O objeto parecerá ter mudado sua classe.
Intenção: definir uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado todos os seus dependentes são notificados e atualizados automaticamente.
Intenção: definir um objeto que encapsula a forma como um conjunto de objetos interage O Mediator promove o acoplamento fraco ao evitar que os objetos se refiram uns aos outros explicitamente e permite variar suas interações independentemente.
Intenção: evitar o acoplamento do remetente de uma solicitação ao seu receptor, ao dar a mais de um objeto a oportunidade de tratar a solicitação. Encadear os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate.
Intenção: definir o esqueleto de uma algoritmo em uma operação, postergando (deferring) alguns passos para subclasses. Template Method (Gabarito de Método) permite que subclasses redefinam certos passos de um algoritmo sem mudar a estrutura do mesmo.
Intenção: dada uma linguagem, definir uma representação para a sua gramática juntamente com um interpretador que usa representação para interpretar sentenças da linguagem.
Intenção: sem violar o encapsulamento, capturar e "externalizar" um estado interno de um objeto, de maneira que o objeto possa ser restaurado para este estado mais tarde
Intenção: fornecer um meio de acessar, sequencialmente, os elementos de um objeto agregado sem expor a sua representação.
Intenção: representar uma operação a ser executada nos elementos de uma estrutura de objetos. Visitor permite definir uma nova operação sem mudar as classes dos elementos entre os quais opera.
Considerações finais e agradecimentos. Uma revisão sobre o assunto ministrado nos vídeos deste curso, orientando o aluno a dar seus próximos passos.
Este curso apresentará a você cada um dos 23 padrões de projeto GoF (Gang of Four). Cada padrão é explicado e exemplificado utilizando diagramas de classes UML, exemplos em Java e aplicações típicas que irão lhe ajudar no aprendizado de uma maneira mais eficiente, estimulante e divertida.
Padrões de projeto não é algo exclusivo da computação, os padrões são comuns em várias áreas da engenharia. É uma maneira testada e documentada de alcançar um objetivo qualquer. Os padrões GoF, especificamente, são soluções genéricas para os problemas mais comuns e recorrentes no desenvolvimento de softwares orientado a objetos.
Aprender padrões de projeto irá lhe ajudar a identificar problemas comuns em engenharia de software e saber como resolvê-los utilizando soluções testadas e bem documentadas, consequentemente seu nível em programação aumentará e você passará a produzir softwares de melhor qualidade.
Comece hoje mesmo pelos padrões GoF, considerados por muitos como sendo os mais importantes e utilizados padrões de projeto de software orientado a objetos!
*Os códigos Java e os diagramas de classes UML contidos neste curso estão disponíveis para download, bem como, os slides apresentados.