DEV Community

Izabelle Derrihú
Izabelle Derrihú

Posted on

Uma prosa sobre Orientação a Objetos: Classes

No último post entendemos o que é a Orientação a Objetos, o que é um objeto e que para que tenhamos sistemas úteis devemos aprender a manipulá-los. As classes são componentes fundamentais nesse momento.

A primeira coisa que preciso te explicar é o conceito de instância, ele me confundiu muito e inclusive hoje em dia ainda me pego pesquisando sobre.
Na orientação a objetos, chamamos o objeto de instância de uma classe. O problema aqui é o significado dessa palavra em português:

Significado de Instância: "característica do que é iminente, do que está prestes a acontecer; iminência."

Não sei pra você, mas pra mim NUNCA fez e nunca fará sentido dizer que o objeto é uma "iminência" de uma classe.
Acontece que "instância" nesse sentido veio (presume-se) de instance no inglês, que significa basicamente "exemplo" ou "caso".

Aí sim, faz sentido! Um objeto é um caso ou exemplo que é feito a partir de uma classe.

A variável que recebe uma nova instanciação recebe todos os atributos e métodos da classe. Podemos dizer também que um objeto é a concretização de uma classe, que é, para todos os termos, um molde.

Agora você já sabe que quando falamos em "instânciar uma classe" estamos falando em criar um objeto moldado por ela, que recebe todas as mesmas características iniciais.

Show de bola, a classe é o molde do objeto. E o que tem na classe?
A estrutura básica é de atributos e métodos.

  • Atributos são as características daquilo que estamos querendo exemplificar;
  • Métodos são os meios pelos quais esses atributos serão computados;

Muitos falam que os métodos são comportamentos, pois os exemplos usados denotam isso, mas não é uma explicação que case com o mundo real na minha singela opinião. Por exemplo, uma classe cachorro teria o método latir().

classe Cachorro com método latir

Aqui, pelo e nome são atributos dessa classe, e realmente, latir é um comportamento de cachorro mas isso não existe no nosso cotidiano. O que queremos é cadastrar um cachorro e não fazer ele latir.

Spock star trek dizendo 'logical'

Vamos então continuar com um exemplo mais aplicável na vida real, mesmo que muito simples. Eu vou usar Typescript em todos os exemplos. Agora, não vou me ater muito às tipagens e retornos para não complicarmos, mas em breve começaremos a utilizá-lo de forma integral.

Classe Aluno, com seus atributos e um método

A classe Aluno possui os atributos nome, idade e matricula, e o método getAluno() que retorna um objeto com as informações. É uma estrutura simples, não?

Quero chamar atenção para o this pois pode ser uma pedra no sapato se você exagera no overthinking como eu. Nesse caso, o this é uma palavra-chave, ele é uma referência ao objeto ou classe que está em execução. Por exemplo, o atributo nome do aluno é referenciado como this.nome. é SÓ ISSO que você precisa saber agora, eu juro.

Para instanciar a nossa classe e usar seu método getAluno(), faríamos como no código abaixo:

Classe Aluno sendo instanciada e seu método getAluno sendo utilizado, retornando nome, idade e matrícula

Perceba que os valores retornados por getAluno() não foram enviados para nenhum método da nossa classe. Eu fiz isso para ensinar um outro integrante de uma classe, chamado constructor.

O constructor é um método especial chamado quando uma nova instância da classe é criada. Ou seja, quando fazemos "const xpto = new Aluno();" o constructor será chamado.

Existem outros motivos para o uso desse método, mas o mais comum é inicializar a classe já com valores para seus atributos, poupando tempo e código.

Também podemos usá-lo como validação, pois se os valores não estiverem de acordo com o que nossos atributos esperam, a classe não é instanciada, você receberia um erro.

Veja no código abaixo como a classe ficaria com um constructor, e como instanciaríamos ela. Agora sim, os valores retornados por getAluno() fazem sentido, pois são os estados mais atuais do objeto.

Classe aluno com um constructor que recebe os valores que serão inicializados nos atributos

Sempre que instanciamos ou mudamos esses atributos com outros métodos mais específicos (que veremos à frente), estamos alterando o estado do objeto. Estado nada mais é do que os valores dados aos atributos da classe de acordo com os objetos criados a partir dela.

Quando você envia "José" na instanciação da classe Aluno para o objeto alunoEnsinoMedio, o estado do atributo nome desse objeto é "José".

Cada instanciação é diferente, então cada objeto tem um estado diferente. (a menos que, por algum motivo diabólico, você queira fazer dois objetos iguais vindo de duas instanciações diferentes, mas acho que você não é doido assim).

Instanciando um objeto novo com outros valores para os atributos da classe, e chamando o método getAluno

Acho que esse post já ficou até grande para o propósito do blog, mas com a nossa classe Aluno nós já temos uma classe funcional, e espero que você tenha entendido o que é uma, pra que serve, e o que tem e o que come.

Spock levantando as sobrancelhas com cara de assustado

Top comments (0)