Universo DC - Aprenda POO com exemplos práticos
Entender o conceito de Classes e Objetos usando o universo DC Comics como exemplo prático.
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.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.Personagem (Classe Base)
├── Herói (Classe Derivada)
│ ├── Batman (Objeto)
│ ├── Superman (Objeto)
│ └── Flash (Objeto)
│
└── Vilão (Classe Derivada)
├── Coringa (Objeto)
├── Lex Luthor (Objeto)
└── Darkseid (Objeto)
// 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}!");
}
}
// 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}!");
}
}
| Aspecto | Modo Completo | Modo Abreviado |
|---|---|---|
| Propriedade | private string _nome; + get { return _nome; } | public string Nome { get; set; } |
| Legibilidade | Mais verboso, mais claro | Mais conciso, menos linhas |
| Controle | Mais controle sobre get/set | Menos controle, mas suficiente na maioria dos casos |
| Quando usar | Quando precisa validação/complexidade | Quando é simples atribuição/leitura |
// 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
// 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!"
class Personagem - define o que todo personagem tembatman, superman, coringa - são objetos reais criados a partir da classeNome, Nivel - cada personagem tem seu próprio nome e nívelApresentar(), SubirNivel() - ações que qualquer personagem pode fazerPersonagem(string nome, int nivel) - define valores iniciaisPoder com propriedades: Nome e IntensidadeUsarPoder() na classe PersonagemNa próxima aula, veremos como criar classes derivadas (Herói e Vilão) a partir da classe Personagem, usando o conceito de Herança.