Este artigo trata da aplicação dos padrões de projeto e suas boas práticas em projetos já existentes, em situações comuns que podem ser reescritas de forma orientada a objetos, mostrando que mesmo em poucas partes pode-se obter flexibilidade.
Em que situação o tema é útil
Quando se deseja ter partes de um projeto que possam responder de forma mais rápida às mudanças de requisitos dos clientes, seguindo boas práticas conceituadas.
Padrões de projeto no dia a dia
Saber como aplicar uma teoria da orientação a objeto é a dúvida de todos que estão começando ou estudando o assunto. Nesse artigo vamos abordar os conceitos que formam a base dos padrões de projeto e como podemos aplicar os padrões em trechos de código já existente.
Princípios
Existe um fato irrefutável no desenvolvimento de sistemas: requisitos sempre mudam. Outro fato que sempre vejo nas organizações é que elas sabem disso e por isso, tentam melhorar sua forma de captação desses requisitos. Isso é bom. Contudo, a atenção não deve estar presa somente a isso, não significa que por se ter requisitos de qualidade, teremos um sistema de qualidade ou, se esses requisitos modificarem será fácil aplicar a modificação pedida.É aí que a orientação a objetos em conjunto com os padrões pode ajudar. Existem alguns princípios de modelagem e programação OO que levam os padrões de projetos a serem considerados como boas práticas, esses mesmos conceitos podem ser aplicados sem a utilização dos padrões. Portando, a ideia é entender esses princípios e procurar aplicá-los em nosso desenvolvimento. São eles: Modelar para interfaces, favorecer composição sobre herança e encontrar o que varia, e encapsulá-lo.Modelando, desenvolvendo para interfaces
Em qualquer desenvolvimento, seja ele orientado a objetos ou não, temos dois problemas que impedem do mesmo ser fácil de ser alterado: baixa coesão e alto acoplamento.A baixa coesão é quando encontramos rotinas/classes que realizam várias funções, mais do que deveriam fazer por seu conceito. Já o alto acoplamento é quando temos rotinas/classes que são muito dependentes de outras, aonde um alteração nessa conduz a um cascateamento de alterações, ou seja, é o quanto as rotinas/classes estão dependentes uma das outras.Mas porque uma interface resolveria esse problema? Uma interface ou classe abstrata simplesmente expõem uma assinatura de métodos que pode ser utilizada por outra rotina. A implementação real não está nela, mas sim outra classe que a implementa. Dessa forma, se esperarmos por uma interface, teremos acesso somente à definição dos métodos, como eles serão implementados não será importante. Mais adiante teremos a parte prática onde será possível ver isso acontecendo.Compor ou herdar?
Quem está aprendendo orientação a objetos sempre se atenta muito ao recurso de herança. É a primeira coisa que estudantes aprendem. É a primeira forma de realizar a tão sonhada reutilização de funcionalidades, isso porque ela permite que o interior de uma classe base seja vista pelas suas subclasses. Esse é o modo mais fácil. Existe um segundo recurso para reutilização de funcionalidade, a composição. Nela objetos diferentes são interligados através de suas interfaces para garantir reutilizações mais complexas. A composição pode ser um pouco mais difícil de entender inicialmente, mas possui vantagens sobre a herança.A herança permite que de forma fácil seja alterada a implementação de uma funcionalidade. Isso é obtido através da técnica de sobrecarga de operações. Por ser fácil de implementar, passa uma ideia de que agora aquele trecho de código está flexível, mas não é verdade. Ela é resolvida em tempo de compilação e isso deixa o sistema um pouco inflexível porque em tempo de execução qualquer alteração na implementação de uma classe base não é permitida. Os mais puristas em orientação a objetos dizem que a principal desvantagem da herança está na exposição do interior de uma classe base à suas subclasses, quebrando assim o conceito de encapsulamento. Essa exposição conduz a um modelo de dependência de implementações entre as classes envolvidas, isso porque a parte exportada da classe base faz parte também das subclasses. Qualquer alteração na classe base implica em alterações nas subclasses, o que não é recomendado quando se deseja um modelo flexível. A composição por sua vez é resolvida em tempo de execução. Ela exige que as interfaces sejam respeitadas, consequentemente devem ser bem planejadas para que não haja impedimentos de reutilização, isso porque a implementação de composição é feita através de referências. Algumas desvantagens vistas na herança, como quebra de encapsulamento e dependência de implementação, não são vistas na composição, isso porque os objetos envolvidos são acessados somente por suas interfaces. O impacto disso na modelagem, é que classes manterão seu encapsulamento e estarão voltadas para sua tarefa apenas, porque não há o que herdar de outras classes, obedecendo assim o conceito de alta coesão.Porém, como nada é perfeito, o uso de composição prende o comportamento do modelo aos relacionamentos entre os objetos, que pode implicar em maior complexidade. Os padrões de projeto fazem uso extenso de composição e quando é necessário criar heranças, elas são baseadas em classes abstratas. Esse é um dos motivos que consagram os padrões de projeto como prática de flexibilização de modelos, deixando um código preparado para eventuais mudanças de requisitos....
Confira outros conteúdos:

Instalando o ACBr

Mapeamento Objeto-Relacional com TMS...

Introdução aos componentes JEDI

Faça a sua matrícula
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 64,90
Total: R$ 778,80
Garanta o desconto
- Formação FullStack Completa
- Aprenda Marketing digital, automações e IA para Devs
- Módulo como ganhar dinheiro com Tech
- +10.000 exercícios gamificados
- +50 projetos reais com acompanhamento
- Clube de alunos e professores no WhatsApp
- Mentorias online em grupo toda semana
- Estude pelo Aplicativo (Android e iOS)
- Suporte 24h / 7 dias por semana
- Biblioteca com +40 Tecnologias
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 64,90 /mês
Total: R$ 778,80
Garanta o desconto
- Formação FullStack Completa
- Aprenda Marketing digital, automações e IA para Devs
- Módulo como ganhar dinheiro com Tech
- +10.000 exercícios gamificados
- +50 projetos reais com acompanhamento
- Clube de alunos e professores no WhatsApp
- Mentorias online em grupo toda semana
- Estude pelo Aplicativo (Android e iOS)
- Suporte 24h / 7 dias por semana
- Biblioteca com +40 Tecnologias
- 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.