Hoje iremos tocar em um assunto muito importante, mas pouco comentado, o famoso POO, ou para os mais íntimos, Programação Orientada a Objetos.
O que é POO
POO é um conceito fundamental no desenvolvimento de software. Ele se baseia na ideia de que um programa pode ser estruturado em torno de “objetos”, que representam entidades do mundo real ou abstrações. Diferente do conceito procedural a qual modularizamos nossas instruções em procedimento (Vamos deixar esse assunto para outro tópico).
Dentro da POO temos os seguintes pilares
Abstração
Encapsulamento
Herança
Polimorfismo
Encapsulamento
O encapsulamento envolve agrupar dados (atributos) e métodos (comportamentos) relacionados em uma única unidade chamada classe. Essa classe protege seus detalhes internos, permitindo acesso controlado aos seus membros.Por exemplo, definir atributos privados e fornecer métodos públicos para acessá-los. Exemplos
No caso de uma conta bancaria, eu não posso simplesmente acessar a propriedade “saldo” e adicionar 1 bilhão de R$ na minha conta (O que não seria má ideia rsrs), mas para fazer isso eu preciso passar por uma serie de validações rigorosas do banco que garantem a rastreabilidade desse saldo e por fim, o saldo ser creditado na minha conta. Da mesma forma que pode existir uma regra especifica para eu poder ver o saldo da conta (Se eu sou o responsável ou se tenho acesso administrativo suficiente para visualizar)
Ou quando clicamos no botão ligar da televisão, não sabemos o que está acontecendo internamente. Podemos então dizer que os métodos que ligam a televisão estão encapsulados.
Herança
A herança permite que uma classe (subclasse) herde características e comportamentos de outra classe (superclasse). Isso promove a reutilização de código e a criação de hierarquias. Por exemplo, uma classe “Cachorro” pode herdar da classe “Animal”, obtendo características comuns a todos os animais.
Polimorfismo
O polimorfismo permite que objetos de diferentes classes sejam tratados de maneira uniforme. Isso ocorre por meio de herança ou interfaces. Por exemplo.
Temos um objeto genérico “Eletrodoméstico”. Esse objeto possui um método, ou ação, “Ligar()”. Temos dois objetos, “Televisão” e “Geladeira”, que não irão ser ligados da mesma forma. Assim, precisamos, para cada uma das classes filhas, reescrever o método “Ligar()”.
Entendido os 4 pilares da POO, vamos sair da teoria e ir para o exemplo pratico, HORA DO CÓDIGO!
Temos o seguinte exemplo em csharp.
nele temos uma operação simples de subtrair saldo de um produto, mas agora vamos supor que cada produto do meu estoque, dependendo da sua unidade de medida, vai ter uma validação especifica para a redução do saldo
Imagine agora o tanto de IF e ELSE que nosso codigo vai ter, me da calafrios só de pensar….
mas então, como vamos resolver isso? muito simples! primeiro vamos analisar o que cada produto tem em comum.
Tipo
Nome
Saldo
Ai que entra nosso primeiro pilar de POO, abstrair
Percebe-se que eu não deixei as propriedades (nome, tipo e saldo) disponiveis para serem alteradas diretamente, ao inves disso, criei um metodo chamado GetSaldo e um metodo RemoveSaldo(). Feito isso, agora sim podemos criar nossas classes de produto e implementar a regra de remover o saldo especifica de cada uma.
Vamos criar dois produtos como exemplo (ProdutoFisico e ProdutoVirtual)
E agora vamos utilizar ele no nosso programa
Assim vamos remover da nossa responsabilidade, verificar o tipo, verificar se tem saldo suficiente para a remoção, evitando assim erros de processo ou erros de validação.
Entretanto, nem tudo é perfeição na programação orientada a objetos. A execução de uma aplicação orientada a objetos é mais lenta do que o que vemos na programação estruturada, por exemplo. Isso acontece devido à complexidade do modelo, que traz representações na forma de classes. Essas representações irão fazer com que a execução do programa tenha muitos desvios, diferente da execução sequencial da programação estruturada. Esse é o grande motivo por trás da preferência pela linguagem C em hardware limitado, como sistemas embarcados. Também é o motivo pelo qual a programação para sistemas móveis como o Google Android, embora em Java (linguagem orientada a objetos), seja feita o menos orientada a objetos possível.
No momento atual em que estamos, tecnologicamente essa execução mais lenta não é sentida. Isso significa que, em termos de desenvolvimento de sistemas modernos, a programação orientada a objetos é a mais recomendada devido as vantagens que foram apresentadas. Essas vantagens são derivadas do modelo de programação, que busca uma representação baseada no que vemos no mundo real.
Conclusão
Bom pessoal, essa foi a nossa conversa mais aprofundada sobre os pilares da POO e como o nosso codigo pode ficar mais legivel com abstrações, além de vermos alguns exemplos praticos sobre o assunto.
Espero poder ter te ajudado com esse artigo, se tiver alguma duvida, digite na area de comentarios, teremos o prazer em responder-la.
Referências
(1) - Vantagens e desvantagens da poo - https://www.devmedia.com.br/vantagens-e-desvantagens-da-poo/32655
Comments