🎓 Aulas de Programação Orientada a Objetos

Universo DC - Aprenda POO com exemplos práticos

Objetivo da Aula

Entender o conceito de Classes e Objetos usando o universo DC Comics como exemplo prático.

Aula 01: Classes e Objetos - Universo DC


Conceitos Fundamentais

O que é uma Classe?

Uma classe é um modelo ou molde que define as características (propriedades) e comportamentos (métodos) que os objetos terão.

Analogia: A classe é como uma planta de uma casa. A casa construída é o objeto.

O que é um Objeto?

Um objeto é uma instância (criação) de uma classe. É a materialização da classe.

Analogia: Se a classe é a planta, o objeto é a casa construída.

Exemplo Prático: Universo DC

Hierarquia de Classes

Personagem (Classe Base)
    ├── Herói (Classe Derivada)
    │   ├── Batman (Objeto)
    │   ├── Superman (Objeto)
    │   └── Flash (Objeto)
    │
    └── Vilão (Classe Derivada)
        ├── Coringa (Objeto)
        ├── Lex Luthor (Objeto)
        └── Darkseid (Objeto)

Implementação: Classe Personagem

Versão Completa (Modo Detalhado)

// TÓPICO: Definição de Classe
// Uma classe é definida usando a palavra-chave 'class'
// 'public' significa que a classe pode ser acessada de qualquer lugar
public class Personagem
{
    // TÓPICO: Propriedades (Características)
    // Propriedades definem as características que um objeto terá
    // Cada personagem tem um nome, poder e nível

    // Modo Completo: Propriedade com campo privado
    private string _nome;  // Campo privado (variável interna)

    // Propriedade pública com get e set explícitos
    public string Nome
    {
        get  // Método para OBTER o valor
        {
            return _nome;
        }
        set  // Método para DEFINIR o valor
        {
            _nome = value;  // 'value' é o valor que está sendo atribuído
        }
    }

    // Outra propriedade no modo completo
    private int _nivel;

    public int Nivel
    {
        get
        {
            return _nivel;
        }
        set
        {
            // Validação: nível não pode ser negativo
            if (value >= 0)
            {
                _nivel = value;
            }
        }
    }

    // TÓPICO: Construtor
    // Construtor é um método especial que é chamado quando criamos um objeto
    // Permite inicializar o objeto com valores específicos
    public Personagem(string nome, int nivel)
    {
        // 'this' refere-se ao objeto atual que está sendo criado
        this.Nome = nome;      // Atribui o nome recebido
        this.Nivel = nivel;    // Atribui o nível recebido
    }

    // TÓPICO: Métodos (Comportamentos)
    // Métodos definem o que o objeto pode FAZER

    // Método para o personagem se apresentar
    public void Apresentar()
    {
        // Exibe uma mensagem com o nome e nível do personagem
        Console.WriteLine($"Olá! Eu sou {this.Nome}, nível {this.Nivel}!");
    }

    // Método para aumentar o nível
    public void SubirNivel()
    {
        this.Nivel++;  // Incrementa o nível em 1
        Console.WriteLine($"{this.Nome} subiu para o nível {this.Nivel}!");
    }
}

Versão Abreviada (Modo Simplificado)

// TÓPICO: Propriedades Auto-Implementadas
// C# permite criar propriedades de forma mais simples
// O compilador cria automaticamente o campo privado e os métodos get/set
public class Personagem
{
    // Propriedade auto-implementada (modo abreviado)
    // Equivale ao modo completo acima, mas mais simples
    public string Nome { get; set; }

    // Propriedade auto-implementada com validação
    private int _nivel;
    public int Nivel
    {
        get => _nivel;  // Expressão lambda (modo abreviado de get)
        set => _nivel = value >= 0 ? value : 0;  // Operador ternário para validação
    }

    // Construtor abreviado (usando inicializador de objeto)
    public Personagem(string nome, int nivel)
    {
        Nome = nome;    // Sem 'this', funciona igual
        Nivel = nivel;
    }

    // Métodos podem ser abreviados com expressões lambda (se forem simples)
    public void Apresentar() =>
        Console.WriteLine($"Olá! Eu sou {Nome}, nível {Nivel}!");

    public void SubirNivel()
    {
        Nivel++;
        Console.WriteLine($"{Nome} subiu para o nível {Nivel}!");
    }
}

Comparação: Modo Completo vs Abreviado

AspectoModo CompletoModo Abreviado
Propriedadeprivate string _nome; + get { return _nome; }public string Nome { get; set; }
LegibilidadeMais verboso, mais claroMais conciso, menos linhas
ControleMais controle sobre get/setMenos controle, mas suficiente na maioria dos casos
Quando usarQuando precisa validação/complexidadeQuando é simples atribuição/leitura

Criando Objetos (Instâncias)

Exemplo: Criando Heróis

// TÓPICO: Instanciação de Objetos
// Para criar um objeto, usamos a palavra-chave 'new'
// Seguido do nome da classe e parênteses com os parâmetros do construtor

// Criando o objeto Batman (instância da classe Personagem)
Personagem batman = new Personagem("Batman", 85);

// Criando o objeto Superman
Personagem superman = new Personagem("Superman", 100);

// Criando o objeto Flash
Personagem flash = new Personagem("Flash", 90);

// TÓPICO: Usando os Objetos
// Agora podemos usar os métodos e propriedades de cada objeto

batman.Apresentar();      // Output: "Olá! Eu sou Batman, nível 85!"
superman.Apresentar();    // Output: "Olá! Eu sou Superman, nível 100!"
flash.Apresentar();       // Output: "Olá! Eu sou Flash, nível 90!"

// Modificando propriedades
batman.Nivel = 86;        // Batman subiu de nível
batman.SubirNivel();      // Agora está no nível 87

Exemplo: Criando Vilões

// Criando objetos vilões
Personagem coringa = new Personagem("Coringa", 80);
Personagem lexLuthor = new Personagem("Lex Luthor", 75);
Personagem darkseid = new Personagem("Darkseid", 95);

// Usando os objetos
coringa.Apresentar();     // Output: "Olá! Eu sou Coringa, nível 80!"
lexLuthor.Apresentar();    // Output: "Olá! Eu sou Lex Luthor, nível 75!"
darkseid.Apresentar();     // Output: "Olá! Eu sou Darkseid, nível 95!"

Resumo dos Conceitos

Classe

Objeto

Propriedades

Métodos

Construtor

Exercícios Práticos

  1. Crie uma classe Poder com propriedades: Nome e Intensidade
  2. Crie objetos para diferentes poderes (Super Força, Velocidade, Inteligência)
  3. Adicione um método UsarPoder() na classe Personagem
  4. Crie uma lista de personagens e exiba todos usando um loop

Próxima Aula

Na próxima aula, veremos como criar classes derivadas (Herói e Vilão) a partir da classe Personagem, usando o conceito de Herança.