# 7.8 - Classes e Objetos

## 📚 Entendendo Classes e Objetos em JavaScript

Bem-vindo(a) ao mundo da **programação orientada a objetos**! 🧠💻\
Você já pensou como um jogo, um aplicativo ou até mesmo um site organiza todas as informações que usa? É aí que entram as **classes** e os **objetos**!

### 🔍 O que são Objetos?

Imagine um **objeto** como algo da vida real: uma *pessoa*, um *carro*, um *celular*...

Cada um desses objetos tem **características** (chamadas de propriedades) e **ações** (chamadas de métodos).

#### 👤 Exemplo de Objeto: Pessoa

```javascript
const pessoa = {
  nome: "Maria",
  idade: 20,
  dizerOla: function() {
    console.log("Olá! Meu nome é " + this.nome);
  }
};

pessoa.dizerOla(); // Olá! Meu nome é Maria
```

📝 Nesse exemplo, `pessoa` tem duas **propriedades** (`nome` e `idade`) e um **método** chamado `dizerOla`.

***

### 🧱 O que são Classes?

Uma **classe** é como um **molde** ou **receita** para criar vários objetos com as mesmas características. Ao invés de criar um por um, você define a **estrutura** com uma classe e depois cria quantos quiser.

#### 🧁 Exemplo: Receita de um Bolo (Classe)

```javascript
class Pessoa {
  constructor(nome, idade) {
    this.nome = nome;
    this.idade = idade;
  }

  dizerOla() {
    console.log(`Oi! Eu sou ${this.nome} e tenho ${this.idade} anos.`);
  }
}

// Criando objetos com base na classe
const joao = new Pessoa("João", 18);
const ana = new Pessoa("Ana", 22);

joao.dizerOla(); // Oi! Eu sou João e tenho 18 anos.
ana.dizerOla();  // Oi! Eu sou Ana e tenho 22 anos.
```

🔧 `constructor` é uma função especial chamada sempre que criamos um novo objeto com `new`.\
💬 `this.nome` e `this.idade` se referem às propriedades de **cada objeto criado** com a classe.

***

### 🤔 Por que usar Classes?

Usar classes ajuda você a:

* Organizar melhor seu código 🧹
* Reutilizar código com facilidade 🔁
* Criar estruturas mais parecidas com o mundo real 🌍

***

### 🚀 Dicas Rápidas

* Nomes de classes sempre começam com **letra maiúscula** (ex: `Pessoa`, `Carro`)
* Use `new` para criar um novo objeto baseado em uma classe
* `this` sempre se refere ao **objeto atual**

***

### 🧭 Conclusão

Aprender sobre **classes** e **objetos** vai abrir várias portas para você no mundo da programação! 🗝️\
Com esses conceitos, você pode criar **jogos, aplicativos e muito mais**! Continue praticando e não tenha medo de errar. 😉

***

### 🔗 Referência

Conteúdo baseado na [documentação oficial do MDN](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Classes)
