Entenda de uma vez por todas o que é OO (Orientação a Objetos)

Sabrina Mariha
7 min readDec 17, 2023

Ao começar a estudar as LP’s (Linguagens de Programação), o primeiro aspecto a ser citado geralmente é em relação ao seu paradigma, mas o que são, afinal, esses paradigmas? É uma pergunta muito recorrente e que geralmente exige esforço para a compreensão. Isso porque os paradigmas são a forma de estruturação, organização e expressão que determinam a maneira de funcionamento de determinada LP. Geralmente, os primeiros paradigmas de programação em que há o contanto no início do aprendizado são do tipo baseado em eventos (VB e VBA) e Imperativo que inclui o Procedural (como a linguagem C) e Orientado a objetos (C++ e Java).

Paradigma de Programação Orientada a Objetos (OOP)

Como já foi dito nesse blog antes, a LP Java é orientada a objetos. O que isso quer dizer? Isso significa que pode-se organizar o código em torno de “objetos”, e eles poderão possuir atributos, comportamentos e ações diversas. No cotidiano estamos cercados de objetos de diversos tipos e formas e podemos identificar suas características físicas, sua forma, etc. Ao visualizar um veículo, por exemplo, reconhecemos sua forma, seu modelo, sua cor, enfim, diversos atributos. Outros veículos possuirão diferentes características, o que nos leva a entender que objetos de um mesmo tipo possuem características diferentes. Além disso, existe outro fator: os procedimentos que podem ser realizados ou analisados com ele — um veículo pode estar parado ou em movimento, existe um procedimento para aumentar (acelerar) e um para diminuir (frear) sua velocidade. A programação orientada a objetos pode ser comparada à esses aspectos da realidade do dia-a-dia.

Quais os benefícios da Programação Orientada a Objetos (OOP)

A Orientação a Objetos traz vários benefícios para o desenvolvimento de software: reusabilidade, modularidade, encapsulamento, herança, polimorfismo e abstração. Primeiro, ela facilita a reutilização de código, permitindo que partes do programa sejam usadas em diferentes partes ou projetos. Além disso, organiza o código de forma modular, tornando-o mais fácil de entender e manter. O fato de haver encapsulamento protege dados importantes e evita modificações não autorizadas e a possibilidade de herança possibilita a criação de hierarquias de classes, promovendo a reutilização e extensão do código. O polimorfismo permite tratar objetos de diferentes classes de maneira uniforme, aumentando a flexibilidade. A abstração simplifica a complexidade do sistema. A OOP, em geral, facilita a manutenção do código ao isolar alterações em partes específicas.

Tantos termos complicados que foram citados podem ser melhor esclarecidos com essa história:

Guerra nas cadeiras (Ou como os objetos podem mudar sua vida) by Use a Cabeça JAVA

Era uma vez em uma loja de softwares, dois programadores que receberam as mesmas especificações e a ordem “construam”. O Gerente de Projetos Muito Chato forçou os dois a competir, prometendo que quem acabasse primeiro ganharia uma daquelas modernas cadeiras Aeron que todo mundo no Vale de Santa Clara tem. Tanto Larry, o programador de procedimentos, quanto Brad, o adepto da OO, sabiam que isso seria fácil.

Sentado em sua baia, Larry pensou: “O que esse programa precisa fazer? de que procedimentos precisamos?”. E respondeu “girar e emitir som”. Portanto, ele começou a construir os procedimentos. Afinal, o que é um programa além de uma pilha de procedimentos?

Enquanto isso, Brad voltou ao restaurante e pensou: “Que itens existiriam nesse programa… Quem são os principais envolvidos?”. Primeiro ele pensou nas Formas Geométricas, o Som e o evento de Clicar. Mas já tinha uma biblioteca de códigos para esses itens, portanto, se dedicou à construção das Formas. Continue a ler para saber como Brad e Larry construíram seus programas e para conhecer a resposta à inquietante pergunta “Mas quem ganhou a Aeron?”.

Larry achou que tinha conseguido. Podia quase sentir as rodas de aço da Aeron rolando embaixo do seu…

Mas espere! Houve uma alteração nas especificações.

“Certo, tecnicamente você venceu. Larry”, disse o Gerente, “mas temos que adicionar apensas mais um pequeno item ao programa. Não será problema para programadores avançados como vocês dois.”
Se eu ganhasse uma moeda sempre que ouvisse isso”, pensou Larry, sabendo que alterações nas especificações sem problemas era ilusão. “E mesma assim Brad parece estranhamente tranquilo. O que estará acontecendo?” Larry continuou mantendo sua crença de que fazer da maneira orientada a objetos, embora avançado, era lento. E que, se alguém quisesse fazê-lo mudar de ideia, teria que fazer isso à força.

Larry acabou alguns minutos na frente de Brad.

(Ah! Tanto barulhos por aquela besteira de OO.): “Oh, não é assim que a ameba deve girar…!”

Os dois programadores acabarem escrevendo seu código de rotação dessa forma:

1)determine o retângulo que circula a forma
2) calcule o centro desse retângulo e gire a forma ao redor desse ponto.

mas a forma que a ameba devia girar ao redor de um ponto em uma extremidade, como um ponteiro de relógio.
“Estou frito” pensou Larry, visualizando o Wonderbread chamuscado. “porém, hmmmm. Eu poderia apenas adicionar outra instrução if/else ao procedimento de rotação e, em seguida, embutir o código do ponto de rotação da ameba. Provavelmente isso não atrapalhará nada. “Mas uma voz longínqua em sua mente dizia: “É um grande erro. Você acha honestamente que as especificações não mudarão novamente?”.

Então, Brad, o adepto da OO ganhou a cadeira, certo?

Não tão rápido. Larry encontrou uma falha na abordagem de Brad. E, já que tinha certeza de que, se ganhasse a cadeira, também se daria bem com a Lucy da contabilidade, tinha que reverter a situação.
Larry: Você tem código duplicado! O procedimento de rotação aparece em todos os quatro itens Shape.
Brad: Trata-se de um método e não um procedimento. E essas são classes e não itens.
Larry: Não importa. É um projeto estúpido. Você tem que manter quatro “métodos” de rotação diferentes. Em que isso poderia ser bom?
Brad: Oh, acho que você não viu o projeto final. Deixe que lhe mostre como a herança da OO funciona, Larry.

E quanto ao método rotate() de Amoeba?

Larry: Não é esse o problema aqui — que a forma de ameba tinha um procedimento de rotação e reprodução de som totalmente diferentes?
Brad: Método.
Larry: Não importa. Como a ameba pode fazer algo diferente se ela “herda” sua funcionalidade da classe Shape?
Brad: Essa é a última etapa. A classe Amoeba sobrepõe os métodos da classe Shape. Portanto, no tempo de execução, a JVM saberá exatamente que método rotate() irá executar quando alguém solicitar que o objeto Amoeba gire.

Larry: Como você “diria” a um objeto Amoeba para fazer algo? Não é preciso chamar o procedimento, desculpe — método, e, em seguida, lhe informar que item girar?
Brad: Isso é o que há de mais interessante na OO. Quando for hora, digamos, de o triângulo girar, o código do programa referenciará (chamará) o método rotate() no objeto Triangle. O resto do programa não saberá ou se importará realmente em como o triângulo o fará. E quando você precisar adicionar algo novo ao programa, apenas criará uma novo classe para o novo tipo de objeto, para que os novos objetos tenham seu próprio comportamento.

O suspense está me matando. Quem ganhou a cadeira?

Amy, que trabalha no segundo andar.
(Sem que ninguém soubesse, o Gerente de Projetos tinha dado as especificações para três programadores.)

Fim

Se você já era um leitor desse blog, alguns dos termos citados são familiares, se não for o caso, você pode saber mais sobre a JVM do Java, suas ferramentas e conceitos básicos nos posts anteriores (O que um iniciante em Java precisa saber — PARTE I e O que um iniciante em Java precisa saber — PARTE II).

Por fim, espero que os conceitos tratados aqui tenham contribuído para melhor compreensão desse paradigma de programação, tendo em vista que essa abordagem é eficaz para desenvolver sistemas de maneira eficiente, modular e flexível.

Referência: FURGERI, Sérgio. Java : Ensino didático: desenvolvimento e implementação de aplicações : compatível com versão 9 e jshell com netbeans. São Paulo: Érica, 2018.

SIERRA, Kathy; BATES, Bert. Use a cabeça! Java. 2. ed. Rio de Janeiro: Alta Books, 2010.

Sabrina Mariha, uma desenvolvedora em desenvolvimento.

--

--

Sabrina Mariha

Uma desenvolvedora em desenvolvimento. Graduanda em Análise e Desenvolvimento de Sistemas - Mogi das Cruzes.