Skip to main content

Os principais benefícios que a orientação a objetos traz para você e para seu código.

Este post faz parte de uma sequência de posts para desmistificar a orientação a objetos, esses posts serão:

#1 O que é a orientação a objetos, uma visão geral sobre orientação a objetos e como ela funciona.

#2 Os 4 Pilares da orientação a objetos.

#3 Os principais benefícios que a orientação a objetos traz para você e para seu código.

#4 como continuar evoluindo em orientação a objetos.

Se você chegou até aqui, primeiramente parabéns 😊, você já entendeu como a orientação a objetos funciona, mas por que devemos utilizar a orientação a objetos no sistema?

Como falei no primeiro POST, orientação a objetos não é o único paradigma de software que existe, então por que ele é um dos mais utilizados pelas empresas?

Por isso preparamos essa lista de motivos para o uso da orientação a objetos e como isso te ajuda a ter mais produtividade e menos trabalho ao desenvolver. Vamos lá!

Mais produtividade para escrever código e facilidade ao depurar.

O principal benefício da orientação a objetos é a possibilidade de reutilizar código, então, à medida que a quantidade de código escrito vai crescendo, mais código você tem disponível para “reutilizar” ou seja quanto mais código escrevemos, menos códigos precisamos escrever (PARADOXO).

Isso fica claro quando olhamos para a quantidade de bibliotecas e frameworks disponíveis no mercado open source, essas bibliotecas são um conjunto de objetos que podem ser reutilizados no seu sistema se você precisar, legal né?

E não para por ai, código orientado a objetos é mais fácil de ser depurado pois como o encapsulamento restringe os limites de atuação de um objeto, acaba ficando mais fácil de entender a origem do problema, isso ajuda você a salvar tempo que você usaria procurando o erro.

Efetividade do design da arquitetura de software.

Sim, uma boa orientação a objetos nasce quando você consegue planejar ao design arquitetural do seu sistema traduzindo elementos da vida real em classes e objetos, quem aqui nunca passou por aquela duvida de “como estrutura os arquivos do projeto”, ou até mesmo “como resolver aquele algoritmo complexo”.

Uma boa orientação a objetos deixa explicita a forma como pensamos no problema e por consequência gera um padrão de design a ser seguido, um modelo de desenvolvimento, facilitando assim a entrada de novos programadores na equipe e o desenvolvimento de novas funcionalidades.

Flexibilidade para desenvolver novas funcionalidades.

Vamos imaginar o caso de um sistema CRM que faz cadastro de pessoas físicas e uma nova funcionalidade de cadastro de pessoas jurídicas será acrescentada, nesse caso se você desenvolveu seus objetos corretamente, fica fácil estender o comportamento de uma possível classe “Pessoa” para conter informações de pessoas físicas e ou jurídicas.

Esse é o benefício do polimorfismo, quando você pode estender comportamentos dos objetos  sem necessariamente alterar código e sim criar código novo, com isso você ganha segurança de que seu sistema irá manter o comportamento esperado em cenários já conhecidos e pode se dedicar a desenvolver somente aos novos comportamentos.

Isso é um ganho para a confiabilidade do sistema e uma facilidade para o programador que pode manter a simplicidade e a extensibilidade do código.

Efetividade para resolver problemas.

Temos muitas linguagens que tem um legado incrível na história de software que tem um estilo mais imperativo como C, porém quanto mais código a gente escreve mais perto vamos ficando de um colapso completo do software, por outro lado, resolver problemas complexos com um paradigma mais funcional as vezes pode ser difícil.

A possibilidade de decompor problemas complexos em pequenas partes e desenvolver componentes especializados para resolver essas partes é um grande beneficio da OOP, por isso, devemos sempre pensar na especialização dos nossos objetos e na interação entre os objetos.

São muitos benefícios para você deixar de lado, não é? Pois bem, saiba que isso é só o começo uma boa orientação a objetos permeia quase todas as áreas de desenvolvimento de software, e para te dar uma visão de futuro, no próximo post vamos te dar umas dicas de o que você deve estudar para avançar na orientação a objetos e se tornar um programador ninja.

Gostou do conteúdo? Não esquece de seguir a gente no facebook e no instagram para receber drops diários para melhorar seu nível de desenvolvimento de software.

4 pilares da orientação a objetos.

Este post faz parte de uma sequência de posts para desmistificar a orientação a objetos, esses posts serão:

#1 O que é a orientação a objetos, uma visão geral sobre orientação a objetos e como ela funciona.

#2 Os 4 Pilares da orientação a objetos.

#3 Os principais benefícios que a orientação a objetos traz para você e para seu código.

#4 como continuar evoluindo em orientação a objetos.

Se você leu o primeiro post viu que um para a orientação a objetos sempre devemos estar pensando em como os objetos se relacionam certo?

Porém as vezes precisamos criar novas funcionalidades nos nossos objetos para que essa relação seja mais completa, mas, como fazemos isso?

Utilizando os 4 pilares da orientação a objetos podemos criar, estender ou modificar comportamentos das nossas classes para que elas consigam interagir de uma forma mais semântica, mas, quais são esses pilares? Ótima pergunta, vamos lá!!

Encapsulamento

Na programação procedural, temos nossos programas escritos através de um punhado de funções que vão se interligando até a saída do sistema, porém a medida que o código cresce o as funções vão se duplicando e fica cada vez mais complexo de manter as funcionalidades do sistema por que estamos produzindo um código macarrônico.

A orientação objetos resolve esse problema pois ao centralizar todas essas funções em um único ponto podemos reutiliza-las onde a gente quiser. Essa centralização é o que chamamos de encapsulamento.

Toda classe encapsula seus atributos(variáveis) e seus comportamentos (funções) e a partir da instancia dessa classe podemos reutilizar essas funções em todo lugar do sistema.

Porém um código bem encapsulado não é uma tarefa simples, precisamos questionar sempre ao criar um método em uma classe se o mesmo está no lugar certo além de seus atributos de acessibilidade.

Por exemplo não podemos esperar que nas propriedades de uma classe pessoa tenhamos a propriedade quantidade de rodas, pois por definição Pessoas não tem rodas. Logo nesse sentido o mais prudente seria criar uma classe automóvel e definir como suas propriedades quantidade de rodas.

Assim poderíamos relacionar os objetos futuramente, dizendo que um Pessoa pode possuir um carro?

Abstração

Aqui que normalmente o programador começa a ficar confuso, por tanto vou ser o mais descritivo possível para não restar dúvidas.

Uma abstração é um “Modelo” de algum objeto, é a representação mais simples possível sem se preocupar ainda com os detalhes da implementação.

Por exemplo, se a gente analisar as pessoas do mundo real, todos nós somos da classe raça humana, que por sua vez é um mamífero.

Mamífero é a representação “abstrata” de um ser humano, pois compartilhamos comportamentos comuns com outros mamíferos.

Podemos fazer essa mesma lógica com carros, carros são na verdade um tipo de “Automóvel”, e o carro compartilha comportamentos com outros automóveis como, por exemplo, quantidade de rodas, o ato de ligar e desligar.

Classes Abstratas servem como implementações padrão (Templates) e não podem ser instanciadas uma vez que dependem da implementação final para funcionar.

Podemos citar também que a partir da abstração conseguimos reduzir os efeitos colaterais de novas implementações, pois o comportamento novo deverá ser implementado na classe filha.

E por falar nisso.

Herança

A herança ajuda a reduzir a quantidade de código duplicado em nosso sistema, como?

Bom, vamos imaginar a maioria dos componentes de um formulário HTML eles têm dentro de si as mesmas funções básicas de “OnClick” para quando o usuário clica no elemento ou “OnHover” para quando o usuário posiciona o mouse em cima do elemento.

Neste caso ao invés de duplicar código para todos os elementos do HTML seria mais indicado criar uma classe “ElementoHTML” onde cada elemento (CheckBox por exemplo) podesse estender a calsse ElementoHTML herdando assim seus comportamentos padrão.

Para voltar ao passo anterior a relação entre a classe Carro e Automóvel é uma reação onde a classe carro estende a classe automóvel herdando seus comportamentos padrão.

Polimorfismo

O Polimorfismo é quase como um efeito colateral de um sistema em escrito, se nós estamos utilizando as abstrações e suas implementações corretamente podemos admitir que uma Classe Abstrata tem “muitas formas” pois cada uma de suas classes filhas é uma forma potencial.

No caso do exemplo anterior, todos os “ElementoHTML” tem a capacidade de aparecer na tela, porém, cada elemento aparece de uma forma diferente, ao implementarmos o método aparecer em cada elemento filho podemos dizer que a classe “ElementoHTML” tem muitas formas de aparecer.

Na pratica isso ajuda nosso código reduzindo a quantidade de if e elses não precisamos tratar o comportamento pelo tipo da classe pai.

No próximo capítulo.

No Próximo iremos falar mais sobre os benefícios que cada uma dessas técnicas trás para o nosso código, então fica ligado que vem mais conteúdo por aí.

Se você gostou do post não esquece de curtir a nossa pagina nas redes socias, tem muito, muito conteúdo banca por lá também 😊

O que é programação orientada a objetos?

Este post faz parte de uma sequência de conteúdospara desmistificar a orientação a objetos, a sequência será:

#1 O que é a orientação a objetos, uma visão geral sobre orientação a objetos e como ela funciona.

#2 Os 4 Pilares da orientação a objetos.

#3 Os principais benefícios que a orientação a objetos traz para você e para seu código.

#4 como continuar evoluindo em orientação a objetos.

Mas então, o que é programação orientada a objetos?

Primeiramente precisamos entender que programação orientada a objetos é mais do que somente “programação”. Para compreender a orientação a objetos precisamos entender que orientação a objetos é uma forma de pensar em desenvolvimento de software, é isso que estamos habituados a chamar de paradigma de desenvolvimento.

Para exemplificar melhor sobre paradigmas de desenvolvimento de software nada melhor que falar um pouco sobre os principais paradigmas para que possamos ter a capacidade de comparação entre eles.

Programação estruturada.

Tendo como uma das principais características um bloco único de código a programação estruturada é um dos principais paradigmas mais antigos do desenvolvimento de software.

Nesse padrão de programação o software é estruturado de uma maneira sequencial onde cada tarefa deve ser executada ao termino de outra.

Apesar de defasado o paradigma estruturado ainda é muito comum pois é a forma como a maioria dos estudantes de programação aprender a programar.

Como principal problema de um código estrutural, o desenvolvedor normalmente acaba ficando perdido na desorganização de milhares de linhas de código repetidas, complicando a manutenção do sistema à medida que a base de código aumenta.

Programação Funcional.

Fortemente baseada em definições matemáticas na programação funcional em resumo (sim é um tanto mais complexo que isso :P) devemos pensar em nosso código como uma sequencia de funções que conjuntamente irão completar um algoritmo que irá resolver o problema.

A principal vantagem da programação funcional é sua previsibilidade, visto que suas regras incentivam a imutabilidade das variáveis, logo, podemos confiar que as funções não devem alterar os valores das variáveis originas.

Finalmente programação orientada a objetos.

Na programação orientada a objetos o mais importante de se entender é:

Na orientação a objetos o software é baseado na composição e interação entre diversas micro unidades que chamamos de objetos.

Ou seja, devemos analisar quais os objetos (e as composições) envolvidos em um problema para que dali pra frente possamos entender como eles devem interagir entre eles gerando os comportamentos esperados.

Quem aqui nunca leu, viu ou ouviu sobre a “Classe Pessoa” ou “Classe Automóvel” certo? A verdade é que a estrutura da classe por si só diz pouco sobre OOP. O principal erro de quem está começando a estudar o paradigma orientado a objetos é focar somente nos mecanismos de composição dos objetos e não na interação entre objetos que compõe um algoritmo.

Benefícios da programação orientada a objetos

Como um dos principais benefícios da programação orientada a objetos temos a possibilidade de modelagem de sistemas complexos de maneira clara e prática.

A orientação a objetos também leva ao reuso de código, dando ao programador uma produtividade elevada pois é ele não precisará escrever muito mais código visto que parte das funções podem ser reutilizadas.

Para mim o principal ganho da orientação a objetos é que ao entender a relação entre os objetos (design do código) o programador ganha clareza da regra de negócio. [SPOILER ALERT] por isso que saber produzir um bom design código é essencial para todo programador, pois um bom design de código facilita o entendimento do software para quem está entrando na equipe além de melhorar muito a manutenibilidade do software, vamos tratar de design de código mais para frente. [/SPOILER ALERT]

No próximo capítulo.

Vamos entender os 4 pilares da programação a objetos e como eles facilitam a interação dos objetos formando algoritmos que automatizam as rotinas necessárias.

Gostou do conteúdo até aqui? Me ajuda a entender como posso te ajudar mais deixa um comentário aqui em baixo e curte a nossa pagina lá no facebook e no Instagram para receber mais conteúdos como esse aqui.

Duas dicas rápidas para produzir um código muito mais limpo e claro.

Faaala Dev!

É comum que quando estamos trabalhando com programas mais antigos, nos depararmos com linhas de código com uma interpretação mais complexa ou até dúbia.

Muito dessa complexidade se dá pela forma como o software é escrito e um dos pontos mais importantes da escrita de código para que ele fique mais claro é como nomeamos nossas variáveis.

Robert C. Martin ( Uncle Bob 👴👴), em um dos seus livros dá dicas de como nomear nossas variáveis, iremos falar sobre duas das principais aqui.

👉 Nomeação por significado.

Ao nomear uma variável o dev deve se perguntar se o nome da variável responde “O que essa variável faz?” ou “Qual valor essa variável armazena”, essa é uma boa forma de deixar seu código mais claro.

👉 Uso nomes “procuráveis”

Se uma variável puder ser usada em outros lugares no código é mandatório que seu nome seja amigável para uma pesquisa, isso facilita a identificação do uso da variável ao decorrer do programar.

Uncle Bob dá diversos outros exemplos de como nomear melhor suas variáveis, quer saber mais? Curte a nossa página 💜💜 que nos próximos posts iremos falar mais sobre como programar melhor.