Classes e Objetos

Até aqui, procuramos levá-los a um raciocínio sobre o mundo real de forma que seja simples a associação deste com os conceitos da POO.

Na POO, tudo é baseado em classes e objetos. O conceito de classes é universal e imprescindível para a POO, qualquer que seja a linguagem em que esta seja aplicada.

Uma classe é a definição de um objeto. Semanticamente, podemos definir uma classe como sendo um conjunto de características e atributos que definem um objeto. Sendo assim, podemos definir um objeto como algo que é criado, estabelecido, definido e concebido a partir de uma classe.

Um ótimo exemplo para a afirmação acima é imaginar um bolo como sendo um objeto. Qual seria a classe do objeto bolo? O que o define? Como ele é feito ou criado? Neste caso, a classe do objeto bolo seria a sua receita. É nela que está definido o quanto de farinha será gasto no bolo, quanto tempo ele deverá ficar no forno, entre outros atributos e características. Podemos dizer então que a classe molda o objeto.

Outro exemplo simples é o de uma casa e sua planta. A planta seria a classe, pois define todas as características para a construção desta, enquanto que a casa é o nosso objeto.

Na ótica da programação, um objeto é uma instância de uma classe. Não se assuste com esta frase. Ela ficará bem entendida até final deste capítulo.

É bom frisar que a partir de uma classe, é possível construir uma série de objetos. Com uma receita, é possível fazer infinitos bolos assim como com uma planta, é possível construir uma série de casas.

Podemos então começar a definir o que é o conteúdo de uma classe. Ela deverá listar todas as características do objeto, podendo incluir:

  • campos e propriedades – o que define as características (ex: cor, tamanho, etc.);
  • comportamentos, ações ou métodos;
  • reações ou eventos – qual o comportamento deste objeto com base em alguma ação causada;

Isso é dito procurando ainda associar a idéia de objetos reais. Entretanto, na POO alguns aspectos e definições especiais são implementados para garantir o perfeito comportamento na criação,  utilização e descarte dos objetos e classes.  São eles:

  • construtores;
  • destrutores;

Cada um destes elementos citados são membros de uma classe, cada qual com sua aplicação.

Cada linguagem de programação tem sua sintaxe para interpretar, definir e diferenciar cada um destes membros da classe. Algumas estabelecem implementações adicionais a cada uma destas características das classes. No entanto, o padrão conceitual de classe e objeto deve ser seguido.

O conceito

Na era pré-POO, o desenvolvimento de programas passou por diversas gerações. Os antigos modelos, baseados nas necessidades da época, eram desenvolvidos de maneira aleatória, desordenada, e não ofereciam grandes recursos de produtividade ou mesmo de reaproveitamento. Utilizando-se algumas técnicas de programação estruturada, era possível atingir um certo nível de organização do código, que se mostrou extremamente necessário para manter os sistemas mais organizados e estáveis possíveis, facilitando ainda futuras manutenções.

Foi com base nessas estruturações que surgiu a necessidade de um novo modelo de programação que suportasse de forma nativa os conceitos de organização, reaproveitamento, guarda e proteção de informações, dentre outras necessidades. É neste ponto que surge a POO.

A POO procura estabelecer um modelo de programação que aproxima o desenvolvedor do mundo real. Isso ficará claro no decorrer do curso quando os primeiros conceitos estiverem sendo explicados.

Estamos falando de Programação Orientada a Objetos. O que é então um Objeto?

Um objeto no seu mais puro sentido é algo que pode ser percebido pelos nossos sentidos. Está atrelado ao conceito de algo que seja material. Bem, então um objeto é “alguma coisa”, e o que quer ela seja, essa coisa tem suas características, tem seus comportamentos, tem suas reações e provavelmente tudo isso a define perfeitamente. Nem tudo pode ser visto ou percebido, isso pode ser entendido como um conjunto de características que só se aplicam àquele objeto, e a mais nenhum. Mas ele também deve ter características comuns a outros objetos, como tamanho, altura, peso, dentre outras.

Até aqui essa idéia pode estar meio obscura, mas deixe-me tentar esclarecer o conceito acima num exemplo real, muito comum hoje em dia. Imagine esse objeto como sendo um carro. Pense em algumas características deste carro. Com certeza você pode imaginar várias, mas para esse exemplo, vamos citar algumas mais comuns:

  • Cor
  • Marca
  • Ano
  • Potência
  • Direção
  • Ar condicionado
  • Vidros elétricos
  • Som

Essas são algumas características deste carro. Outros carros podem ou não ter uma ou mais características das citadas acima. Vamos então tentar abstrair das características acima, apenas as que se aplicariam a qualquer tipo de carro:

  • Cor
  • Marca
  • Ano
  • Potência

Isso se aplicaria também não só a suas características, como citado acima, mas também aos seus comportamentos e reações, como acelerar, brecar, virar, etc. Podemos generalizar mais ainda esta lista, chegando a uma categoria genérica que pode ser entendida como a dos veículos. Se tentarmos listar as características de um objeto veículo, veremos que essa lista ficará cada vez mais enxuta, procurando abranger toda a categoria de objetos que se encaixariam como um veículo.

Pensando agora no objeto veículo, podemos imaginar uma série de outros objetos que se encaixariam nesta categoria de objeto. Por exemplo, um trem é um véiculo, um avião é um véículo, uma bicicleta é um veículo, até mesmo um skate pode ser considerado um veículo.

Por quê? Porque sabemos que todos os objetos acima possuem todas as características apresentadas no objeto veículo, porém, cada qual possui suas próprias características que os diferenciam dos outros. O que é importante absorver do conteúdo acima, é que todos estão descendendo de uma categoria comum, que no caso é a categoria dos veículos.

Podemos exemplificar os conceitos acima com um outro objeto, por exemplo, um cão. Um cão tem suas características e comportamentos particulares, assim como tem as mesmas características que são comuns a uma categoria que é a categoria animal. Um gato também é um animal, mas não é um cão. A categoria “mãe” destes dois animais poderia ser a categoria dos mamíferos, que seria uma subcategoria do reino animal.