Aula 2 - Atributos, Métodos e Encapsulamento (modelo “mão na massa”)

Por: Nerd Toolkit Postado em: Fevereiro 23, 2026 Visto por: 164

Objetivos de aprendizagem

Ao final desta aula, você será capaz de:

  • Criar e usar classes e objetos em Python.
  • Identificar e aplicar atributos e métodos.
  • Aplicar encapsulamento usando _atributo e @property.
  • Organizar um projeto simples em múltiplos arquivos (módulos).
  • Evoluir um programa de forma incremental com testes rápidos.
 

 

1) Estrutura do projeto (múltiplos arquivos)

Crie uma pasta chamada poo_jogo/ e monte esta estrutura:

 

BOX — DICA (organização)
Separar em arquivos deixa o projeto mais limpo:

  • personagem.py cuida do personagem
  • inventario.py cuida do inventário
  • main.py é onde você testa e executa
 

 

3) Conceitos essenciais (revisão rápida)

3.1 Atributos e métodos

  • Atributo: guarda um valor (ex.: nome, vida).
  • Método: executa uma ação (ex.: atacar, curar).
 

BOX — LEMBRETE
Atributo geralmente aparece como objeto.valor
Método aparece como objeto.acao() (tem parênteses).

 

3.2 Encapsulamento

Encapsular é controlar como o estado do objeto muda, evitando valores inválidos.

 
  • _atributo → “protegido” por convenção (não mexa direto)
  • @property → forma “bonita” de permitir leitura (e às vezes escrita) com regras
 

BOX — ATENÇÃO
Em Python, encapsulamento é principalmente convenção + disciplina de código.
A ideia é: não altere diretamente aquilo que deve obedecer regras.

 

 

4) Implementação passo a passo (laboratório)

Passo 1 — Crie o arquivo inventario.py

Abra o arquivo inventario.py e cole:

 

BOX — DICA (o que encapsulamos aqui?)
A lista _itens é interna.
Você deve usar adicionar() e remover() para mexer nela.

 

 

Passo 2 — Crie o arquivo personagem.py

Agora abra personagem.py e cole:

 

BOX — ATENÇÃO (por que @property?)
Com @property, você pode acessar vida como atributo: heroi.vida
mas a lógica de mudança fica protegida nos métodos curar() e receber_dano().

 

BOX — ERRO COMUM
Tentar mudar vida diretamente: heroi._vida = 999
Isso “fura” as regras. O correto é usar métodos: curar(), receber_dano().

 

 

Passo 3 — Crie o arquivo main.py (testes do laboratório)

Agora abra main.py e cole:

 

BOX — DICA (como executar)
No terminal, dentro da pasta poo_jogo/, rode:
python main.py

 

 

5) Checkpoint de aprendizagem (para marcar no caderno)

Responda em 1–2 linhas cada:

 
  1. Onde estão os atributos do personagem?
  2. Cite 3 métodos do personagem e o que eles fazem.
  3. O que foi encapsulado no Personagem?
  4. Por que usamos _vida e não vida diretamente?
  5. O que o Inventario encapsula?
 

BOX — LEMBRETE
Encapsular = evitar alterações inválidas e manter regras em um único lugar.

 

 

6) Exercícios (para entregar)

Exercício 1 — Setter com validação (médio)

No arquivo personagem.py, crie um setter para vida usando:

 
  • @vida.setter
 

Regras do setter:

  • se receber valor menor que 0 → definir 0
  • se receber valor maior que vida_maxima → definir vida_maxima
  • caso contrário → aceitar valor
 

BOX — ATENÇÃO
Mesmo com setter, priorize usar curar() e receber_dano() no restante do código.

 

 

Exercício 2 — Dano percentual (médio)

Crie em Personagem o método tomar_dano_percentual(porcentagem) que:

  • calcula o dano como vida_maxima * porcentagem / 100
  • aplica o dano chamando receber_dano(dano)
 

Teste no main.py com porcentagem 10, 25 e 50.

 

 

Exercício 3 — Equipar espada (médio)

No Personagem, crie:

  • atributo _arma (inicie como None)
  • @property arma() para leitura
  • método equipar_espada_curta() que:
    • verifica se o inventário tem "Espada Curta"
    • se tiver, define _arma = "Espada Curta" e retorna mensagem
    • se não tiver, retorna mensagem dizendo que não possui
 

 

Exercício 4 — Inventário com categorias (difícil)

No Inventario, em vez de guardar itens como strings simples, guarde como tuplas (nome, categoria).

 

Exemplo:

  • ("Poção", "cura")
  • ("Espada Curta", "arma")
 

Atualize:

  • adicionar(nome, categoria)
  • listar() para mostrar nome(categoria)
  • tem_item(nome) para buscar pelo nome
 

 

Exercício 5 — Mini batalha automática (desafio)

No main.py, crie um loop de batalha:

 
  • enquanto herói e inimigo estiverem vivos:
    • herói ataca inimigo (dano fixo 12)
    • se inimigo morrer, pare
    • inimigo ataca herói (dano fixo 8)
    • a cada rodada, imprima status dos dois
 

BOX — DICA (organização)
Faça uma função rodada(heroi, inimigo) para deixar o main.py mais limpo.

 

 

7) Extensão (opcional, para quem terminar cedo)

  • Criar classe Monstro separada de Personagem
  • Criar classe Item (Poção, Espada) como objetos
  • Adicionar “defesa” e dano baseado em arma equipada

Tags:
#Py poo python 

Notícias Relacionadas

Aula 2 - Atributos, Métodos e Encapsulamento (modelo “mão na massa”)
  Contato
  • support@nerdtoolkit.com.br
Mapa do Site
Mostrar mapa do site
  Sobre

Feito de programadores para programadores.

Este site utiliza cookies. Ao continuar a utilizar este site, você concorda com a nossa utilização de cookies e política de privacidade.
Leia mais Concordo