Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Orientada a Objetos Lei de Lavoisier - Lei de Conservação das Massas (Antoine Lavoisier, 1760): “Na natureza nada se cria, nada se perde, tudo se transforma” - Livro sobre solução de problemas comuns de computação: “Design Patterns: Elements of Reusable Object-Oriented Software” (Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetos), 1995 - Esse livro ficou conhecido como GoF – Gang of Four (Gangue dos Quatro): Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides - Os padrões de projeto propostos pelo GoF são uma evolução a partir de ideias de padrões de desenvolvimento propostas por Christopher Alexander em publicações a partir de 1977. Padrões de Criação Padrões Estruturais Padrões Comportamentais Família de padrões de projetos propostos por GoF Padrões de Criação: ▪ Abstract Factory”, este padrão, que poderia ser traduzido livremente como “fábrica abstrata”, permite a criação de diversos objetos relacionados utilizando uma “interface”, sem que a “classe concreta” seja especificada. Uma interface, em computação, é uma definição de comunicação entre duas entidades. Possibilita a reutilização de componentes sem que sua implementação seja conhecida. ▪ “Builder”, utilizado para criar objetos complexos, isto é, mais de um objeto relacionado. A diferença entre ele e o “Abstract Factory” é que esse constrói de uma única vez, enquanto o “Builder” faz isso passo a passo. ▪ “Factory Method”, método que retorna um objeto que pode ser instanciado nas classes derivadas, ao invés de isto acontecer na classe base. ▪ “Prototype” é um objeto com a principal característica de poder clonar a si mesmo. Isto significa que ele é um “Abstract Factory” para um número reduzido de classes. ▪ “Singleton”, que é uma classe cujo objetivo é garantir que haja apenas uma única instância de uma classe. O “Singleton” é bastante utilizado em aplicações em que, se houver mais de uma instância de um mesmo objeto, pode haver problemas de performance ou replicação. Para que isso aconteça, o construtor de um “Singleton” precisa ser privado e deve haver um método público estático para criação do objeto, caso ainda não exista, ou para retorno do objeto existente. class BancoDeDados { private: static BancoDeDados *instancia; BancoDeDados() {} public: static BancoDeDados & getInstancia() { if (!instancia) instancia = new BancoDeDados(); return *instancia; } void Connect() {} }; Padrão Singleton APLICAÇÃO BANCO DE DADOS Padrões Estruturais: ▪ Adapter” do inglês, adaptador. Permite que classes com interfaces diferentes possam interagir. Ele faz uma adaptação, criando uma interface única, a partir das interfaces diferentes de outras classes. ▪ “Bridge”, do inglês, ponte. Esse padrão permite que diferentes interfaces sofram variações independentemente de suas implementações concretas. Neste padrão, a hierarquia, isto é, a cadeia de heranças, que define as interfaces é separada da hierarquia que contém a implementação. ▪ “Composite”, do inglês, composto, define que um objeto que é composto de várias classes de mesma hierarquia. ▪ Decorator, ou também de Wrapper, classe não possui determinado comportamento em sua definição, só aparece depois do objeto estar instanciado, durante a execução ▪ “Façade”, que é uma interface simplificada para funcionalidades de uma API, uma Interface Avançada de Programação. A proposta deste padrão é melhorar a compreensão para o uso de uma determinada funcionalidade, ou às vezes, melhorar uma interface que originalmente foi mal definida. ▪ “Flyweight”, tem como objetivo de otimizar recursos computacionais ▪ “Proxy, controlador de acesso a outros objetos. Ele é praticamente uma interface para outra interface, porém com esse controle de acesso. Composite Janela + desenhar() CaixaDeTexto + desenhar() Icone + desenhar() Elemento Gráfico + desenhar() possui Padrões Comportamentais: ▪ “Chain of Responsibility”, do inglês: cadeia de responsabilidade. Este padrão estabelece a chamada sucessiva de vários objetos em cadeia, a fim de se resolver um problema. Durante o percurso da cadeia, cada objeto vai resolvendo a sua parte, ou seja, cuidando da sua responsabilidade. ▪ “Command”, cuja principal característica é permitir o enfileiramento das execuções, e armazenar o estado dessas execuções, para que, por qualquer necessidade, elas possam ser desfeitas. ▪ “Interpreter”, que especifica um processo recursivo para que pequenas gramáticas da linguagem de programação possam ser agrupadas de forma, até que se tenha um único ponto de entrada para a chamada na hierarquia de classes, em uma linguagem formal simples. ▪ “Iterator”, tem como objetivo encapsular uma iteração. ▪ “Mediator”, que propõe uma interação simplificada entre as classes, reduzindo a dependência entre os objetos que estão se comunicando. Durante a execução de um programa, pode ser desejável que ele retorne a um determinado estado anterior. Padrões Comportamentais: ▪ “Memento”, cujo objetivo é armazenar o estado de um objeto para permitir o possível retorno a esse estado anterior. ▪ “Observer”. Uma das relações comuns entre classes é a agregação, onde um objeto é criado a partir de um conjunto de outros objetos que, se destruídos, levam à destruição do objeto possuidor. Aí entra a figura do “Observer”, para garantir que, quando um objeto mudar seu estado, seus dependentes (no caso, o objeto possuidor), sejam notificados dessa mudança. ▪ “State”, define quando um objeto pode assumir um determinado estado ou mudar de estado ▪ Strategy”, que sugere a implementação de diferentes algoritmos independente dos objetos que o utilizem. ▪ “Template Method”, um padrão onde parte da definição do algoritmo é feita com uso de métodos abstratos. Neste padrão, as subclasses devem se responsabilizar pela implementação concreta dos métodos, de acordo com a necessidade. ▪ “Visitor”, que provê a habilidade de incorporação de novas funcionalidades à estrutura de um objeto, sem que essas funcionalidades precisem ser modificadas.
Compartilhar