Design Patterns
Atenção: esse artigo tem um vídeo complementar. Clique e assista!
O artigo trata do uso de Design Patterns (ou padrões de projetos).
Os mesmos são técnicas que já foram utilizadas na resolução de problemascomuns no desenvolvimento de software (por
exemplo, garantir uma única instância de uma classe em toda a aplicação). Um
padrão representa, basicamente, um conjunto de orientações possíveis de
serem seguidas quando da ocorrência de um tipo de problema específico. Design patterns podem ser úteis na resolução de uma série de
problemas recorrentes dentro do desenvolvimento de software. Determinados tipos
de situações costumam acontecer com certa regularidade em atividades
relacionadas à construção de aplicações; o uso de padrões pode neste caso não
apenas se traduzir em economia de tempo, como também conduzir a uma melhor
estruturação dos sistemas que estão sendo elaborados. Design Patterns -
Utilizando padrões de projeto na construção de aplicações - Parte 2 No transcorrer de diversos
projetos de software, será bastante comum que os desenvolvedores se deparem com
a repetição de determinadas situações. Em casos como este, pode ser possível a
existência de soluções para certos tipos de necessidades: ao conjunto de
recomendações que representam um caminho para a resolução de um problema
específico dá-se o nome de padrão de projeto/design pattern. Padrões são o
resultado de experiências bem sucedidas (por outros desenvolvedores) durante a
elaboração de sistemas, sendo que sua aplicação promove não apenas o uso de
boas práticas, como também pode contribuir para uma melhor estruturação dos
softwares que se baseiam nos mesmos.
Em que situação o tema é útil
Na edição passada, foi iniciada uma discussão a respeito do uso de padrões de projetos no desenvolvimento de aplicações. Foram apresentados os objetivos a que se prestam estes mecanismos, bem como mencionadas vantagens que tais práticas oferecem.
São inúmeros os benefícios advindos do uso de padrões. A escolha pelos design patterns mais apropriados a um determinado contexto pode resultar em economia de recursos, bem como numa melhor estruturação da aplicação que se está contribuindo e, consequentemente, em uma maior facilidade para a condução de atividades futuras de manutenção. Outro ponto positivo obtido a partir da utilização destas técnicas, está na forte ênfase no reuso de soluções cuja eficácia já foi demonstrada anteriormente.
Merece destaque o fato de que os patterns de maior difusão no desenvolvimento de software estão fundamentados em conceitos de orientação a objetos, sendo uma prática comum à representação dos mesmos em diagramas da linguagem UML. Devido a estas características, diversos padrões podem ser empregados sem maiores transtornos em linguagens e plataformas bem heterogêneas como C#, VB.NET, Java, C++, Delphi etc.
Os patterns apresentados nesta série de artigos pertencem a um agrupamento de 23 padrões, conhecidos como GoF. Esta sigla é uma abreviação do termo (“Gang of Four”), sendo uma referência ao trabalho pioneiro de quatro autores (Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides) e que culminou no lançamento do conhecido livro “Design Patterns: Elements of Reusable Object-Oriented Software” em meados da década de 1990. Por mais que as diversas técnicas apresentadas nesta publicação sejam baseadas em exemplos codificados em C++ e Smalltalk, o largo escopo coberto por tais soluções auxilia ainda hoje desenvolvedores de modernas tecnologias, como .NET e Java (em problemas cotidianos, que serão visto a seguir).
Considerando o tipo de problema a que se propõe solucionar, os patterns GoF podem ser classificados em:
• Padrões de criação: Abstract Factory, Builder, Factory Method, Prototype e Singleton;
• Padrões estruturais: Adapter, Bridge, Composite, Decorator, Façade, Flyweight e Proxy;
• Padrões comportamentais: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor.
É importante ressaltar que a própria plataforma .NET teve diversos de seus componentes básicos construídos em conformidade com alguns padrões GoF (alguns casos serão apresentados em seções subsequentes).
A finalidade deste artigo é dar andamento à abordagem iniciada na edição anterior, sendo que serão explicados em maior profundidade os seguintes patterns GoF:
• Abstract Factory;
• Adapter;
• Decorator;
• Iterator;
• Memento;
• Prototype;
• Strategy;
• Template Method.
UML (sigla em inglês para
"Unified Modeling Language") é uma linguagem voltada à modelagem de
componentes de software e que se baseia em conceitos de orientação a objetos.
Trata-se de uma notação que disponibiliza uma série de diagramas, sendo o de
classes um dos mais conhecidos (este que será utilizado para a demonstração dos
diversos patterns descritos neste artigo).
Abstract Factory
O padrão de criação Abstract Factory (Figura 1) promove o uso de uma interface (ou classe abstrata) que estará envolvida na geração de famílias de objetos relacionados (ou mesmo dependentes entre si), sem que se especifiquem as classes concretas das instâncias que serão criadas.
Graças a estas características, o consumidor de uma Abstract Factory não precisará ter conhecimento de todas as classes concretas que implementam a mesma ou ainda, dos produtos retornados por tal Factory.
As instâncias correspondentes às fabricas de objetos e aos produtos propriamente ditos, serão obtidas basicamente a partir de implementações concretas de interfaces e classes abstratas: os critérios para definir quais elementos servirão de base para a geração de referência, dependerá geralmente de informações de configuração ou mesmo, de alguma informação fornecida por um usuário da aplicação.
Classes concretas: são
classes que possuem atributos, métodos, construtores etc. As mesmas podem ser
instanciadas, ou seja, permite a criação de objetos a partir dela. Classes abstratas: são
classes que servem como modelos para outras classes. Não pode ser instanciada.
Na prática, você deve fazer com que classes concretas herdem de classes
abstratas. Métodos abstratos codificados em uma classe abstrata devem
obrigatoriamente ser implementados em uma classe concreta. Interface: é um tipo de
recurso que define um conjunto de funcionalidades, sendo normalmente implementadas
por classes. Declarações de métodos, propriedades e/ou eventos podem fazer
parte de interfaces. Uma interface corresponde, em termos conceituais, a uma
espécie de "contrato" ou "esqueleto", que serve de base
para a construção de uma ou mais classes. Já uma classe pode implementar ao
mesmo tempo mais de uma interface (a herança de múltiplas classes, contudo, não
é possível dentro da plataforma .NET).
O próprio .NET framework
emprega o padrão Abstract Factory dentro da tecnologia de acesso a dados
ADO.NET: trata-se do tipo DbProviderFactory, o qual encontra-se definido no
namespace System.Data.Common. Esta classe conta com funcionalidades para
criação de objetos Connection, Command e DataAdapter, dentre outros elementos.
As versões específicas da Factory e que correspondem ao uso dos drivers SQL
Server ou Oracle serão implementadas, respectivamente, pelos tipos
SqlClientFactory e OracleClientFactory.
Confira outros conteúdos:
Programação x Concurso Público
Osvaldo aprendeu programação
DevMedia x Netflix: Onde investir meu...
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.