O que é programação orientada a objetos e quais são seus pilares?

Ugo Roveda

Por Ugo Roveda15 nov 202212 min de leitura

Imagem ilustrativa

Quando desenvolvemos um sistema, temos sempre um objetivo em mente, criar a solução para um problema. 

Partimos com um propósito de chegar a um resultado final que atenda com sucesso à demanda desejada. Por isso, é fundamental entender cada etapa, com muita clareza.

Os passos seguintes para desenvolver uma aplicação são desenhar a arquitetura, o design e os padrões de projeto que serão mais adequados para o desenvolvimento do produto final. 

A partir daí, é possível ter mais assertividade na escolha das tecnologias que serão aplicadas. E é aqui que entra a programação orientada a objetos (POO). 

Mas antes, entenda o que é paradigma de programação.

O que é programação orientada a objetos?

Paradigmas de programação existem para responder questões que surgem justamente do processo de pensar na abordagem que será utilizada para a solução de problemas.

Enquanto uma linguagem de programação é a implementação de fato de uma ferramenta para desenvolver um software, o paradigma de programação é o modelo conceitual e o conjunto de padrões e metodologias que serão aplicadas no uso de uma linguagem para o desenvolvimento de um software

A POO é um paradigma de programação que se propõe a abordar o design de um sistema em termos de entidades, os objetos, e relacionamentos entre essas entidades. 

Imagine que estamos desenhando um sistema de gerenciamento de funcionários para uma empresa: o funcionário, sob esta abordagem, será uma entidade, e ele deve pertencer a um departamento. 

O departamento também será uma entidade, um objeto. Um departamento pode ter um ou mais funcionários. Logo, estabelecemos um relacionamento entre funcionário e departamento. 

Este funcionário pode ser terceirizado ou direto. Com isso, estabelecemos uma generalização, o funcionário, e sua especialização, ou seja, o funcionário terceirizado, por exemplo.

Por que a programação orientada a objetos é importante?

Não é à toa que a programação orientada a objetos se tornou muito utilizada no mercado de trabalho e famosa na comunidade das pessoas desenvolvedoras. Sua utilização traz diversos benefícios para os códigos, que abordaremos melhor mais para frente nesse mesmo artigo. Alguns desses benefícios são o encapsulamento e a reutilização de códigos, os tornando mais legíveis e trazendo uma maior produtividade para quem está desenvolvendo.

Exatamente por se tornar algo mundialmente utilizado e que vem ganhando cada vez mais força, a sua implementação e estudo se tornou fundamental para qualquer desenvolvedor. 

Qual a diferença entre programação orientada a objetos e programação estruturada?

Na programação estruturada, a abordagem utilizada para o desenvolvimento de sistemas é procedural, ou seja, pensamos em um programa de computador como uma rotina ou sequência lógica, com início e fim determinados. 

Os programas são usados para processar uma entrada, alterando seus dados até que a saída desejada seja produzida. 

A programação estruturada é composta por três tipos de estruturas básicas: sequências (os comandos a serem executados), condições (blocos de decisão) e repetições (sequências que devem ser repetidas até chegar a determinada condição).

Esta abordagem pode se tornar problemática à medida que os sistemas começam a ficar complexos. O acesso às variáveis se torna um problema, pois sub-rotinas devem compartilhar essas variáveis para processá-las. 

O reuso de rotinas fica muito difícil, na programação estruturada, obrigando códigos que desempenham essencialmente a mesma função tenham de ser reescritos. 

A legibilidade e a organização do código também é prejudicada, pois os programas passam a ficar muito longos e praticamente ilegíveis.

Na orientação a objetos, por outro lado, uma variável será vista como um atributo de um objeto, algo que ele “tem”. Um funcionário tem um nome. As funções passarão a ser as responsabilidades do objeto.

Se quisermos uma lista dos funcionários de um departamento, a função que retorna esses dados será responsabilidade da classe Departamento.

Mais à frente, vamos entender estas e mais características da programação orientada a objetos e como ela facilita o desenvolvimento de sistemas conceitualmente mais próximos da situação do mundo real que pretendemos modelar. 

O que são classes e objetos dentro da programação orientada a objetos?

A Programação Orientada a Objetos possui dois pilares de sustentação: a utilização de classes e objetos. As classes são formas de definir objetos que serão reutilizados e instanciados durante o código. É formada por propriedades, que contém informações referentes àquele objeto, e por métodos, que são funções exclusivas para serem utilizadas pelos objetos criados a partir dessa classe. 

Já os objetos em si são pequenos blocos de códigos que contém informações e  referentes àquele mesmo objeto. Dessa forma, conseguimos criar um encapsulamento de informações e ter mais controle sobre os nossos códigos.

Exemplo em Python

Veremos na prática um exemplo de classes e objetos em Python. Criaremos uma classe chamada “Carro”, que receberá como propriedade uma marca, um ano, um valor e um método de ligar.

Todo carro, por padrão, também pode ser desligado. Dessa forma, essa classe sempre possuirá um método de desligar também. 

Feito isso, podemos instanciar um objeto a partir dessa classe. O nosso objeto “carro1” vai receber por padrão todas as propriedades e métodos presentes na classe “Carro”.

Quais são os 4 pilares da programação orientada a objetos?

A orientação a objetos, como vimos, é um modo de projetar e escrever um programa de modo a pensar nas entidades envolvidas como objetos que possuem características (os atributos) e responsabilidades (as funções) e estabelecer relações entre esses objetos. 

Ela tem quatro pilares principais: 

Abstração

Consiste em extrair entidades do mundo real para dentro do código seguindo a fio suas responsabilidades. Um objeto deve ter uma identidade única dentro de um sistema, não podendo haver repetições.

Suas qualidades e responsabilidades devem ser bem definidas. Por exemplo:

Ao criar um estoque de itens em uma loja virtual, um produto teria como “qualidade” ou “características” um “nome”, “categoria”, “quantidade”, etc.

O mesmo produto também teria como “responsabilidade” ou “funcionalidade” o ato de diminuir ou aumentar a quantidade de itens no estoque, ou até o ato de ser removido do estoque por completo.

Encapsulamento

Quando definimos os atributos de um objeto, devemos garantir que alterar os valores desses atributos sejam responsabilidade exclusiva do próprio objeto. O encapsulamento, portanto, é o conceito de proteger os atributos de um objeto. 

Em programação orientada a objetos, os atributos de um objeto são “trancados” dentro do objeto, definindo suas propriedades como privadas, ou seja, elas podem ser consultadas, mas não modificadas por outros objetos. 

Herança

Para evitar repetição de entidades, usamos Herança para passar características e responsabilidades. Em um sistema desenvolvido para uma escola, por exemplo, onde existam Entidades Alunos e Pessoas: 

Ao criar uma entidade (classe) Pessoa, podemos afirmar que toda pessoa possui um “nome”. Por outro lado, todo aluno também deveria ter um nome, sendo assim, para que todo Aluno tenha um nome, fazemos com que o Aluno, herde a característica “nome” de Pessoa, pois todo Aluno é uma Pessoa.

Polimorfismo

O Polimorfismo, por sua vez, diz respeito à especialização das classes “filhas”. Seguindo o Exemplo da Escola, a entidade Aluno teria como característica uma “matrícula”, mesmo que a entidade Pessoa (pai de Aluno) não o tenha. Nesse caso, podemos afirmar que Aluno ainda teria sua base vinda de Pessoa, mas teria mudanças para sua funcionalidade específica.

Seguindo o mesmo padrão, poderia haver uma terceira entidade chamada Professor, que seria herdada de Pessoa, mas com características diferentes de Alunos.

Quais são os benefícios de se utilizar programação orientada a objetos?

Existem várias vantagens de se usar o paradigma de orientação a objetos na linguagem escolhida. Conheça as seis principais:

Confiável

A orientação a objetos confere aos sistemas maior clareza, distribuição mais adequada de responsabilidades, encapsulamento de atributos e comportamentos, dentre muitas outras características. Isso torna o código mais seguro e confiável. 

Oportuno

Por se aproximar mais do mundo real, modelando objetos reais e seus comportamentos, bem como o relacionamento entre esses objetos, a orientação a objetos é mais adequada ao desenvolvimento de software moderno.

Ajustável

Ao concentrar em objetos atributos e funcionalidades, é bem mais fácil manter um código orientado a objetos. 

Se um sistema não se comporta da maneira esperada, torna- se mais fácil localizar o problema. 

Extensível

A herança e o polimorfismo permitem a inclusão de funcionalidades em um sistema de forma muito direta. 

Suponha que um novo tipo de funcionário tenha de ser adicionado na nossa Escola, como por exemplo “Bibliotecário”. Grande parte da lógica dessa nova entidade já estará concentrada e encapsulada dentro da entidade Pessoa, restando apenas adicionar as características específicas dessa classe filha. 

Reutilizável

Ao deslocar as funcionalidades do software de procedures para dentro de objetos, é possível, de forma muito fácil reutilizar código. 

Dentro do fluxo do código, sempre que é preciso desempenhar uma determinada tarefa, basta criar uma instância de um objeto que tenha aquela responsabilidade e invocar o método desse objeto. 

Natural

A modelagem de software orientada a objetos aproxima o software do mundo real, tornando a engenharia de software uma questão de relacionar as entidades do mundo real com as ferramentas das quais o desenvolvedor dispõe na linguagem de programação escolhida. 

As principais linguagens de programação orientadas a objetos

Java

Java é a mais popular linguagem de programação orientada a objetos. Ela foi desenvolvida pela Sun Microsystems e hoje é mantida pela Oracle. 

O Java possui uma vasta gama de ferramentas e recursos para o desenvolvimento de sistemas orientados a objetos. 

Desde a incorporação da tecnologia Java pela Oracle, ela tem ganhado cada vez mais bibliotecas e tem sofrido atualizações mais frequentes, incorporando tecnologias recentes e inovadoras.  

C#

Foi desenvolvido pela Microsoft como parte da plataforma .NET. Ela foi criada com forte influência de outras linguagens de programação como Object Pascal e, especialmente, o Java. 

C++

O C++ foi desenvolvido a partir da linguagem C, uma linguagem estruturada e procedural. O C++ foi criado justamente para adaptar o C, que era bastante popular à época para esse paradigma de programação que ganhava força. 

O C++ se destaca pelo desempenho, uma vez que possibilita o uso de recursos de mais baixo nível, como ponteiros.

Uma diferença interessante entre C++ e Java no assunto específico da orientação a objetos é que C++ permite a implementação direta do conceito de herança múltipla, isto é, um objeto herdar de dois ou mais objetos. 

Em Java, isto também é possível, porém de forma menos direta, por meio de interfaces. 

Como aprender mais sobre programação orientada a objetos?

Para se aprofundar no tema, recomendamos o livro “Orientação a Objetos. Aprenda seus conceitos e suas aplicabilidades de forma efetiva”, de Thiago Leite e Carvalho.

Como sabemos, o desenvolvimento web está em constante aperfeiçoamento. Por isso, é preciso dedicação e estudos constantes, procurando não se limitar à bibliografia recomendada.

Conclusão

Hoje, entendemos o que é e quais as vantagens de usar a POO para criar sistemas mais complexos.

Depois de se aprofundar no assunto, uma boa pedida é iniciar seus estudos em padrões de projetos, que são abordagens mais especializadas para a engenharia de sistemas complexos. 

Se você gostou desse conteúdo e gostaria de entrar na área de programação, recomendo que você faça a sua inscrição na próxima turma da Kenzie Academy Brasil.

VOCÊ TAMBÉM PODE SE INTERESSAR POR: