🎬 The Last of Us como Metáfora para Orientação a Objetos
No último domingo (13/04/2025), estreou a segunda temporada de The Last of Us. Bastou o episódio começar pra eu mergulhar de novo naquele mundo pós-apocalíptico de decisões difíceis, fungos bizarros e personagens marcantes.
Enquanto acompanhava Joel e Ellie, comecei a pensar em como dá pra usar esse universo como pano de fundo pra explicar alguns conceitos de programação — mais especificamente, Programação Orientada a Objetos (POO).
Se você também curte aprender com exemplos mais práticos (ou mais dramáticos), bora explorar como a estrutura do mundo de The Last of Us pode ajudar a visualizar POO de forma mais intuitiva.
🧠 O que é Programação Orientada a Objetos (POO)?
A Programação Orientada a Objetos é um paradigma de desenvolvimento que organiza o código em torno de entidades chamadas objetos, que combinam dados (atributos) e comportamentos (métodos). Ao invés de um conjunto de funções soltas, temos estruturas organizadas e reutilizáveis.
Esse modelo é ideal para representar sistemas complexos — como, por exemplo, o próprio universo de The Last of Us.
🧍 Objetos e Classes: Joel, Ellie e os Infectados
Em POO, uma classe
representa um tipo de entidade, e um objeto
é uma instância específica dessa classe. Em The Last of Us, por exemplo, podemos ter:
class Sobrevivente {
string Nome;
string Arma;
void Atacar(string inimigo) {
Console.WriteLine($"{Nome} atacou {inimigo} com {Arma}");
}
}
Joel e Ellie são objetos da classe Sobrevivente
. Cada um tem seus próprios atributos e comportamentos, mas compartilham a mesma estrutura básica.
🔁 Herança: toda ameaça tem um ancestral comum
Herança permite que classes compartilhem comportamentos, evitando duplicação de código. Por exemplo, podemos ter uma classe base Infectado
e classes derivadas para cada tipo:
class Infectado {
public virtual void Atacar() {
Console.WriteLine("Ataca de forma genérica.");
}
}
class Estalador : Infectado {
public override void Atacar() {
Console.WriteLine("Dá um grito horrível e morde.");
}
}
Todos os infectados têm comportamento de ataque, mas cada tipo pode especializar o seu jeito. Essa flexibilidade é uma das maiores forças da POO.
🌀 Polimorfismo: mesma interface, comportamentos diferentes
Com polimorfismo, você pode tratar objetos de subclasses como se fossem da superclasse, e o comportamento certo ainda será executado.
Infectado infectado = new Estalador();
infectado.Atacar(); // Saída: Dá um grito horrível e morde.
Isso permite escrever código mais genérico e reutilizável, mesmo quando trabalhamos com classes diferentes.
🔒 Encapsulamento: esconda o caos, exponha só o necessário
Encapsulamento é o princípio de esconder detalhes internos de implementação, expondo apenas o que for necessário para uso externo. Exemplo:
class Ellie {
private int saude = 100;
public void Sobreviver() {
Console.WriteLine("Ellie se esconde e cuida dos ferimentos.");
saude += 10;
}
}
O resto do sistema não precisa saber como a saúde dela aumenta, apenas que o método Sobreviver()
está disponível.
🔗 Composição: Joel + Ellie = 💀 menos chance de morte
Composição é quando uma classe é formada por outras. Em The Last of Us, Joel e Ellie funcionam melhor juntos:
class Dupla {
public Joel joel;
public Ellie ellie;
public void Explorar() {
joel.Andar();
ellie.ProcurarSuprimentos();
}
}
Essa união entre objetos forma sistemas mais complexos, que colaboram entre si para resolver tarefas maiores.
🎮 Conclusão: POO é sobrevivência (com menos fungo)
Assim como em The Last of Us, um código bem estruturado com POO é mais resiliente, modular e fácil de evoluir. Personagens, infectados e interações podem ser modelados como objetos, cada um com seus papéis, limitações e comportamentos únicos.
Se Joel e Ellie conseguem sobreviver com trabalho em equipe e estrutura, seu código também pode. Só não deixe ele virar um estalador com public static void Main
de 500 linhas.