🚀 Capítulo 02: Programação Procedural e Orientada a Objetos (Tema: Pokémon)

NOTE

Este capítulo utiliza a temática de Pokémon para explicar a diferença entre a Programação Procedural e a Orientada a Objetos (POO). Organizar seus monstrinhos exige um bom modelo mental!


1. 🎯 Objetivo da Aula

Compreender a diferença entre a Programação Procedural (foco em funções que manipulam dados) e a Programação Orientada a Objetos (foco em objetos que agrupam dados e comportamentos).

2. 🏢 O Cenário Prático (Seu Desafio)

Você foi contratado para programar o sistema de batalhas de um novo jogo de Pokémon.

  • Abordagem Procedural: Você cria variáveis soltas para a vida do Pikachu (vidaPikachu = 100) e para o ataque (ataquePikachu = 50). Depois cria uma função solta atacar(vidaAlvo, forcaAtaque). Os dados e as funções estão separados.
  • Abordagem Orientada a Objetos (POO): Você cria um molde chamado Pokemon. Todo Pokémon criado a partir desse molde terá sua própria vida, seu nome e sua própria função de atacar. O Pikachu é um Objeto que contém tanto os dados quanto as ações!

Seu desafio é entender qual dessas abordagens é mais fácil de manter quando o jogo tiver 1.000 Pokémons diferentes!

3. 🧠 Fundamentos: A Teoria Traduzida

📜 1. Programação Procedural

O código é visto como uma sequência de instruções e funções. Os dados são passados de função em função.

  • Vantagem: Simples para programas pequenos.
  • Desvantagem: Se o sistema cresce, fica difícil saber qual função altera qual variável (o famoso “código espaguete”).

🐶 2. Programação Orientada a Objetos (POO)

O código é organizado em torno de Objetos do mundo real.

  • Classe: É o molde ou a receita (Ex: A espécie “Pokémon”).
  • Objeto: É a instância real criada a partir do molde (Ex: O “Pikachu” do Ash).
  • Atributos: São as características do objeto (Ex: vida, tipo, nivel).
  • Métodos: São as ações que o objeto pode fazer (Ex: atacar(), defender()).

4. 📖 Exemplo Guiado: Comparando os Códigos

Procedural (Dados e Funções separados):

let pikachuVida = 100;
let charmanderVida = 100;
 
function atacar(atacanteNome, vidaDefensor, dano) {
    console.log(`${atacanteNome} atacou!`);
    return vidaDefensor - dano;
}
 
charmanderVida = atacar("Pikachu", charmanderVida, 20);

Orientada a Objetos (Dados e Funções juntos):

class Pokemon {
    constructor(nome, vida, danoBase) {
        this.nome = nome;
        this.vida = vida;
        this.danoBase = danoBase;
    }
 
    atacar(alvo) {
        console.log(`${this.nome} atacou ${alvo.nome}!`);
        alvo.vida -= this.danoBase;
    }
}
 
const pikachu = new Pokemon("Pikachu", 100, 20);
const charmander = new Pokemon("Charmander", 100, 15);
 
pikachu.atacar(charmander); // O Pikachu sabe quem ele é e como atacar!

5. 🛠️ Prática Obrigatória 1: Identificando Elementos da POO

Com base no exemplo de Orientação a Objetos acima:

  1. O que é a class Pokemon?
  2. O que são pikachu e charmander?
  3. O que são nome, vida e danoBase?
  4. O que é atacar(alvo)?

6. 🛠️ Prática Obrigatória 2: Adicionando Novos Tipos

Imagine que agora queremos adicionar 1.000 novos Pokémons ao jogo.

  1. Na abordagem Procedural, o que precisaríamos criar para cada novo Pokémon?
  2. Na abordagem Orientada a Objetos, o que precisaríamos fazer? Qual das duas dá menos trabalho?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 02 Paradigmas) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_10_paradigmas_e_padroes_de_projeto/
├── capitulos/
│   ├── capitulo_02_poo.md
│   └── codigos/
│       └── cap02/
│           └── pokemon_procedural.js
│           └── pokemon_oo.js

9. 💡 Checkpoint de Lógica

É possível usar funções dentro de um programa orientado a objetos? Sim! Os métodos nada mais são do que funções que pertencem a um objeto.

10. 🔥 Desafio de Fixação

Pesquise o que são os 4 Pilares da POO (Encapsulamento, Abstração, Herança e Polimorfismo) que serão a base de muitos padrões de projeto que veremos adiante.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. É a Classe (o molde).
  2. São os Objetos (as instâncias).
  3. São os Atributos (características).
  4. É um Método (ação).

Capitulo Anterior | Proximo Capitulo