Programação Orientada ao Objeto – Conceitos básicos

Quando eu estava começando a aprender programação orientado ao objeto, senti uma certa dificuldade em trazer para o código os conceitos primordiais desse paradigma: classe e objeto. Para quem pensa em desenvolver programas mais complexos (ou apenas quer passar em uma disciplina na faculdade), assimilar essa ideia base é fundamental.

Pensando nisso, eu resolvi escrever algumas linhas sobre o tema. Não é nem de longe um graaande tutorial sobre o assunto, e com certezas existem outros mais completos por aí, basta procurar. Mas eu curto a ideia de compartilhar o conhecimento e, quem sabe, ajudar alguém. Espero que esse mini guia sirva como uma fonte de consulta no início do aprendizado desse tema.

Optei por deixar de lado a programação e abordar apenas o conceito de classe e objeto. Acho importante começar dessa forma, e só depois implementar o código em alguma linguagem. Por isso, vou deixar para mostrar a parte prática do assunto em outro post.

O paradigma de programação orientado ao objeto surgiu para facilitar a vida dos programadores. Ele tenta aproximar a programação do mundo real, tratando vários elementos do código como “objetos”, exatamente como esses que nós conhecemos do dia a dia, como um copo, um lápis ou um carro. Cada um desses objetos têm suas propriedades (tamanhos, cores) e funções específicas (armazenar água, escrever, acelerar), e na POO a coisa funciona da mesma maneira.

Em sistemas mais complexos e modernos (ou seja, bem além daquela calculadora de IMC que você provavelmente já fez um dia), é comum tratar os componentes que serão usados no programa como objetos. Isso torna o código mais limpo, legível, e facilita a manutenção e expansão do sistema. Esses dois últimos itens são essenciais em todos os grandes projetos.

É bem possível que essa mistura de mundos (objetos da vida real implementados em código) cause uma certa confusão no início, o que é extremamente comum. Eu me confundi e muita gente se confunde também. Por isso, esqueça programação por enquanto. Penso nos conceitos a seguir de modo natural, como nós os conhecemos da vida real.

Classe e Objeto

Uma Classe nada mais é do que um documento que define um determinado objeto. Numa classe estão contidos os atributos de um objeto, assim como o que ele pode fazer. Mas no momento vamos nos focar apenas nos atributos.

Uma receita de bolo é uma classe que define um objeto bolo. Você não pode comer uma receita, pois ela apenas define o que deve ser um bolo, e não é um bolo (objeto). Da mesma forma, uma planta de uma casa é uma classe define um objeto casa. É possível morar numa planta? Não, na planta estão as especificações de uma casa, como seu tamanho, número de janelas, portas, garagens e etc, mas ainda é preciso construir uma casa (objeto) para poder morar nela.

Formalmente, objeto é uma instância (ou especialização) de uma classe, e uma classe é a abstração de um objeto. É importante memorizar essa definição. No exemplo anterior, a receita do bolo e a planta da casa são abstrações dos seus respectivos objetos, um bolo e uma casa.

Agora imagine um projeto de um carro. No documento desse projeto, há todos os detalhes sobre o automóvel, suas rodas, espessura dos seus vidros, potência do motor e vários outros pormenores. Seguindo a lógica, esse projeto é uma classe para o carro em questão. E essa classe foi usada para dar vida ao objeto carro, que agora existe, é algo concreto e você pode utilizar. Mas um carro não foi feito para ficar parado, ele pode fazer várias coisas, tem suas funções próprias como acelerar, abrir as portas, abaixar/levantar os vidros, ligar o motor, frear e outras dezenas de opções.

Todas as coisas que um objeto carro pode fazer também estão contidas na sua classe, e chamamos essas “coisas” de métodos. Ou seja, no final das contas, uma classe define o que um determinado objeto é (seus atributos) e o que ele pode fazer (seus métodos).

Em suma, depois desses exemplos mais práticos, podemos finalizar dando a Classes e a Objetos em POO uma definição formal, como essa:

Classe: documento que define um tipo de objeto, especificando o que ele deve ter (atributos) e quais ações ele é capaz de fazer (seus métodos).

Objeto: é a concretização de uma classe. É a junção de tudo aquilo que foi defino na sua classe e que agora está transformado em algo sólido, que nós podemos usar e utilizar de suas funções.

About these ads