Design Patterns – Artigo Clube Delphi 123 - Parte 2
Neste artigo continuaremos o estudo sobre os padrões de projeto. Iremos abordar o padrão Abstract Factory, implementando-o de duas formas: como uma classe abstrata e como uma interface. Daremos um enfoque maior à segunda opção.
ArtigosDelphiDesign Patterns – Artigo Clube Delphi 123 - Parte 2
Neste artigo
continuaremos o estudo sobre os padrões de projeto. Iremos abordar o padrão
Abstract Factory, implementando-o de duas formas: como uma classe abstrata e
como uma interface. Daremos um enfoque maior à segunda opção.
Para
que serve
Abstract Factory não é
apenas a ancestral de todas as Concrete Factorys, mas é também um modo de
desacoplar ainda mais os seus sistemas, por delegar a criação de famílias
inteiras de objetos sem se especificar uma classe concreta e usando uma única
interface. Pode ser até uma fábrica de fábricas.
Em
que situação o tema é útil
Quando o seu sistema
necessita de um alto nível de generalização ele também precisará de um alto
nível de desacoplamento. Enquanto as concrete Factorys permitem criar uma gama
diferente de objetos da mesma família através de seus Factory Methods, contanto
que a fábrica concreta seja especificada, Abstract Factory pode flexibilizar
até mesmo qual será a fábrica concreta a ser usada, delegando o tipo de retorno
de seus Factory Methods a seus descendentes. Isso nos permitirá, por exemplo,
criar conexões com bancos de dados diferentes por usar linhas/fabricantes de
componentes diferentes.
Resumo do DevMan
Desacoplar
é a chave para flexibilizar. Se o seu sistema for capaz de montar
automaticamente todo um fluxo que vai desde as interfaces, passando pelos
objetos de negócio e indo até a persistência, livre de qualquer dependência com
outras tecnologias podemos dizer que o sistema é flexível. A flexibilidade no Delphi
ainda traz os benefícios de se estar usando uma linguagem compilada, nativa e
fortemente tipada.
Como se sabe a orientação a objetos sempre foi
um dos pilares das boas práticas de programação, permitindo que seja possível
construir aplicações robustas e ao mesmo tempo flexíveis, ou seja, que sejam
capazes de sofrer modificações sem tornar isso uma tarefa árdua e desgastante.
Embora todo o IDE do Delphi seja Orientado a Objetos, esta ainda é uma prática
pouco utilizada pelos seguidores do Object Pascal, devido à metodologia
procedural que sempre foi adotada pela maioria. Porém, acompanhando fóruns de
discussão, é possível notar que este quadro tem se revertido, mostrando um
interesse maior e uma mudança de ideias em relação à adoção da orientação a objetos
como metodologia cotidiana dos desenvolvedores Delphi.
Para a melhor utilização da metodologia é
necessário compreender os principais fundamentos e conceitos, e porque não
dizer obrigatórios e indispensáveis, para visualizar a orientação a objetos de forma
clara e organizada. Para isto, foram criados os padrões de projeto, que
ganharam popularidade através dos autores Erich Gamma, Richard Helm, Ralph
Johnson e John Vlissides, ou GoF (Gang Of Four) como é mais conhecida, através
do livro Design Patterns: Elements of Resuble Object-Oriented Software.
Nota do DevMan
Os
padrões de projeto são basicamente divididos em três famílias:
Padrões
de criação ou criacionais:
Abstract Factory, Factory Method, Singleton,
Builder e Prototype;
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;
No artigo anterior foi comentado a respeito do padrão
de projeto Factory Method. Factory Method é um método que se responsabiliza
pela criação (e possível configuração ou ligação) de um objeto ou de um grupo
de objetos.
Nesse contexto o construtor de uma classe
(Create no Delphi Win32, new no Delphi Prism) pode ser considerado como um
método fábrica degenerado, pois cria apenas um tipo de objeto, sem
parametrizá-lo muito e ainda tem um alto acoplamento com a unidade desta classe
por motivos óbvios: ele foi escrito como método desta classe, nesta mesma
unidade.
Já nesta parte da série, será abordado o
Abstract Factory. Para facilitar a compreensão do padrão, imagine já ter criado
melhorias em um sistema por delegar a criação de certos objetos a alguns
métodos que serão usados por “clientes” (outros objetos que necessitem destes).
A limitação aqui refere-se a necessidade de
instanciar uma classe fábrica concreta para cada tipo ou família de objetos que
seja criada. Supondo-se por exemplo, que uma fábrica de conexões com o
Interbase fosse criada, ela criaria tanto o IBConnection como os IBDataSets, e
talvez uma outra fábrica concreta poderia criar AdoConnections e AdoDataSets.
O objetivo do Abstract Factory é criar uma
interface comum para acesso e manipulação de qualquer fábrica concreta. Com o Abstract
Factory criam-se variáveis genéricas, com métodos que criarão o objeto
indiretamente, delegando aos descendentes da Abstract Factory a
responsabilidade de saber qual o tipo de objeto correto a se criar.
Há duas formas de atribuir uma interface comum
a todas as fábricas de objetos: ou elas são descendentes do mesmo ancestral
comum ou elas implementam uma mesma interface.
Será adotada a segunda opção pelas vantagens
que o uso de interfaces proporciona: contagem de referências (veja nota do
DevMan) e a possibilidade de criar uma fábrica concreta que não seja
necessariamente “da família” das outras fábricas. Porém, antes de criar uma
interface padrão para as fábricas concretas, será criada uma interface padrão
para os produtos concretos. Isso flexibilizará a aplicação a tal ponto que para
um objeto ser considerado um produto concreto basta que implemente a interface,
mesmo que não seja “parente” dos outros produtos. Isso exibe um cenário em que
virtualmente qualquer classe pode ser uma fábrica e criar qualquer tipo de
produto.
Nota do DevMan
Interfaces, contagem de referência, TInterfacedObject e IInterface
Objetos
que implementam interfaces, caso sejam descendentes de TInterfacedObject não
necessitam ser destruídos, pois tem um contador de referências interno que
automaticamente destrói o objeto que a implementa quando esse contador chega a
zero. Além disso, TInterfacedObject tem um mecanismo para trabalhar com multithread que previne que um objeto seja
destruído quando ainda não terminou de ser criado. Então, teoricamente usando
interfaces e criando classes como
descendentes de TInterfacedObject não precisamos nos preocupar com a destruição dos objetos e nem com Memory Leaks, que é o termo dado para um objeto
que foi criado em tempo de execução, contudo, após seu devido uso e descarte,
não é destruído / eliminado da memória.
Como
sabemos, toda classe emObject Pascalacabará herdando de uma outra conhecida comoTObject.
Desse modo, os métodos dessa classe estarão disponíveis a qualquer outra que
for herdada. Não surpreendentemente, o mesmo acontece com as interfaces. Toda e
qualquer interface no Delphi, mesmo que não seja declarado explicitamente,
herdará deIInterface.
A
diferença na herança entre classes e interfaces está na falta de implementação.
Se uma interface X herda de Y, um objeto que implemente X também deverá
implementar os métodos de Y. Ou seja, se seguirmos essa ideia até o topo da
hierarquia, todos os objetos que implementem interfaces, deverão definir
implementações para os métodos deIInterface. Na
prática normalmente não implementamos diretamente nenhum método deIInterface(mesmo que ainda não saibamos quais eles sejam).
Vejaa seguir a declaração de IInterfacee TInterfacedObject,
retirada dos fontes da VCL do Delphi XE:
IInterface = interface
['{00000000-0000-0000-C000-000000000046}']
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;
TInterfacedObject = class(TObject, IInterface)
protected
FRefCount: Integer;
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
class function NewInstance: TObject; override;
property RefCount: Integer read FRefCount;
end; ...
Recomendamos começar pelo Plano de Estudo Carreira Programador Front-End. Essa área da programação é mais visual e intuitiva, tornando-a ideal para iniciantes. No Front-End, você aprenderá a criar a parte visual dos sites, como layout, cores e interatividade. Depois de dominar o Front-End, você pode avançar para Programador Back-End, onde aprenderá a lidar com a lógica e o funcionamento interno dos sites, e, finalmente, para Programador Mobile, focando no desenvolvimento de aplicativos para smartphones. Nossa metodologia é estruturada de forma progressiva para garantir que você desenvolva confiança e experiência ao criar projetos reais, como sites estáticos e dinâmicos.
Em quanto tempo vou me tornar um programador?
O tempo necessário para se tornar um programador varia de acordo com a dedicação de cada estudante. Com nossa metodologia, que inclui um Plano de Estudo detalhado e suporte contínuo, você pode se tornar um programador de 6 meses a um ano, dependendo do seu ritmo e esforço. Nossa abordagem prática e orientada a projetos ajudará a acelerar seu aprendizado.
Eu preciso de um diploma de faculdade para começar a atuar como programador?
Não. Ser programador é uma excelente oportunidade para quem não possui diploma de faculdade. Muitas empresas contratam baseadas nas habilidades técnicas e experiência prática, não necessariamente em diplomas. Após conquistar uma vaga, você pode optar por complementar sua formação com um diploma.
Por que a programação se tornou a profissão mais promissora da atualidade?
A necessidade de programadores cresceu exponencialmente, especialmente após a pandemia de Covid-19, que forçou muitas empresas a se adaptarem ao digital. Com o crescimento das empresas de tecnologia, a demanda por programadores aumentou. Atualmente, há mais de 200 mil vagas abertas no Brasil devido à falta de profissionais qualificados.
Metodologia
Quais são os principais diferenciais da DevMedia?
Didática e Metodologia
Com mais de 20 anos de experiência, nossa metodologia foca em menos aulas e mais prática. Desenvolvemos dezenas de projetos e exercícios para ajudar você a se tornar um programador completo. Nossos projetos são desafiadores e autênticos, não apenas exercícios repetitivos.
Projetos reais e exercícios
Você desenvolverá diversos projetos práticos em cada carreira (Front-End, Back-End e Mobile), recebendo mentoria e suporte contínuo. A prática é essencial, e oferecemos milhares de exercícios para ajudar você a fixar o conteúdo e melhorar sua posição no ranking.
Suporte ao aluno
Nossa plataforma oferece suporte dedicado com professores experientes, respondendo suas dúvidas em menos de uma hora. Isso garante que você receba a ajuda necessária durante toda a sua jornada de aprendizado.
Gamificação
A DevMedia utiliza gamificação para tornar o aprendizado mais envolvente e motivador. Você acumula pontos e moedas por acertos, que podem ser trocados por produtos e customizações no seu card pessoal. Além disso, o sistema de ranking mensal incentiva a competição amigável e a melhoria contínua.
O que eu irei aprender estudando pela DevMedia?
Ao estudar conosco, você se tornará um programador Full Stack, dominando Front-End, Back-End e Mobile. Utilizamos a linguagem JavaScript, a mais utilizada no mercado, preparando você para criar sistemas webs e aplicativos celulares. Nossa abordagem prática inclui exercícios para fixar o conhecimento e desenvolvimento de projetos reais que te preparam, para o mercado de trabalho.
Quais as vantagens de aprender programação através da linguagem JavaScript?
Ela é Multiplataforma, ela vai te permitir programar para web e para celulares utilizando praticamente a mesma sintaxe.
Elá é Full Stack. Ela te permite criar aplicações Front-end, Back-end e Mobile. Isso acelera muito sua carreira e aumenta suas possibilidades de pegar trabalhos autônomos e conquistar uma vaga no mercado.
Ela é fácil de aprender. Como ela não exige conhecimento inicial em “Orientação a Objetos” ela se torna mais simples com uma curva de aprendizado suave e vai te permitir começar a programar mais rápido do que outras linguagens
A plataforma oferece certificados?
Sim, oferecemos dois tipos de certificados: o certificado de conclusão, que você adquire ao consumir o conteúdo, e o certificado de autoridade, que você obtém ao acertar exercícios. Ambos possuem carga horária, que pode ser utilizada para fins acadêmicos, como atividades complementares na faculdade, e também para comprovações em processos seletivos ou no seu currículo.
A plataforma tem suporte ao aluno, como funciona?
Sim, temos uma equipe de programadores pronta para ajudar com todas as suas dúvidas! Durante o horário comercial, o tempo médio de resposta é de até 10 minutos. E não se preocupe, também oferecemos suporte à noite e nos finais de semana, com um prazo de resposta um pouco maior.
A DevMedia me forma como programador Full Stack?
Sim! Oferecemos uma formação completa, do zero até Full Stack. Nosso foco é na prática, então você vai encontrar muitos exercícios e projetos reais ao longo do curso. Garantimos que você sairá com a autonomia necessária para desenvolver seus próprios projetos com confiança!
Tem horário para as aulas?
Não, não temos horários fixos para as aulas. Todo o nosso conteúdo está disponível para você acessar a qualquer momento, permitindo que você estude conforme sua própria disponibilidade e ritmo. Dessa forma, você pode integrar o aprendizado à sua rotina de maneira mais flexível e eficaz.
Por que a DevMedia não usa videoaulas em sua didática?
Nosso foco principal é formar programadores de verdade. Sabemos que o dia a dia de um programador envolve muita leitura, interpretação e escrita de código. Por isso, nosso conteúdo é desenvolvido para ambientar você nesse processo desde o início, proporcionando mais autonomia e acelerando seu aprendizado.
Na vídeo-aula é o professor que está lendo, interpretando e escrevndo o código para você, isso limita o seu progresso. Ao ler e interagir diretamente com o conteúdo, você exercita sua capacidade de leitura e concentração, além de poder avançar no seu próprio ritmo. Dessa forma, você se torna um programador mais independente e preparado para os desafios reais do mercado.
Preciso de um computador específico para estudar na DevMedia?
Não é necessário nada específico. Qualquer computador com processador atual e memória de 8 GB é suficiente.
Eu consigo estudar pelo celular?
Sim, a DevMedia possui um aplicativo que te permite seguir com seus estudos de qualquer lugar.
A DevMedia tem aplicativo?
Sim, nosso aplicativo está disponível na Play Store e na Apple Store, permitindo que você estude de forma prática e conveniente em qualquer lugar.
Preciso estar na faculdade para acompanhar os estudos na DevMedia?
Não, a faculdade não é necessária. Você não precisa de nenhum conhecimento prévio para iniciar os estudos na nossa plataforma.
Assinatura e Pagamentos
Quais são os planos de assinatura disponíveis?
Oferecemos o plano anual, o valor total é lançado no cartão de crédito, parcelado em 12 vezes, e você precisa dispor do valor total no limite do seu cartão. Você também pode optar por pagar no PIX
Adquirindo o plano, terei acesso a todo o conteúdo?
Sim, ao assinar nossa plataforma, você desbloqueia acesso total a todo o nosso conteúdo, sem precisar comprar nada separadamente.
A plataforma tem planos vitalícios?
Não, nossos planos são anuais, garantindo que você tenha acesso contínuo às atualizações mais recentes e aos novos conteúdos. A tecnologia evolui rapidamente, e um plano vitalício oferece um conteúdo estático que se tornará ultrapassado em pouco tempo. Com nossos planos anuais, você está sempre à frente, aprendendo as novidades e tendências mais atuais no mundo da programação.
A DevMedia tem fidelidade?
Sim, nosso plano tem uma fidelidade de 12 meses, o que garante o tempo ideal para você explorar nosso conteúdo e desenvolver a autonomia necessária para trabalhar com programação.
Como funciona o cancelamento?
Nós garantimos seu direito de cancelamento com reembolso total dentro dos primeiros 7 dias.
Para que você aproveite ao máximo seu investimento, oferecemos suporte personalizado para orientá-lo na utilização da plataforma. Também temos a opção de transferência de titularidade do plano, permitindo que outra pessoa aproveite o restante do seu período de assinatura.
Cadastro
Como excluir meus dados da plataforma?
Para excluir seus dados da plataforma, acesse o link : https://www.devmedia.com.br/fale-conosco/ e abra um protocolo de 'Exclusão de dados'. Nossa equipe processará a solicitação e removerá todas as informações do seu cadastro.
Compartilhe esse conteúdo com um amigo!
Faça login para ganhar recompensas.
Ou
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.