Capítulo 10: Construtores e Propriedades 🤖🛠️

Neste capítulo, vamos aprender a proteger os dados dos nossos objetos e a usar os Construtores e Propriedades do C#, com o tema do Homem de Ferro!


📖 O que é Encapsulamento?

É a prática de esconder os detalhes internos de como um objeto funciona e proteger suas variáveis para que não sejam alteradas de forma errada. No C#, usamos Propriedades (com get e set) para fazer isso de forma elegante!


📖 O que é um Construtor?

É um método especial que é chamado automaticamente quando criamos o objeto (new). Ele serve para garantir que o objeto comece com os dados corretos!


📖 Exemplo Guiado: Construindo a Armadura

Vamos criar uma classe Armadura que usa um construtor para definir o modelo e uma propriedade que não deixa a energia ficar negativa.

  1. Crie o arquivo armadura.cs na pasta src/:
using System;
 
// Código principal
Armadura mark5 = new Armadura("Mark V", 100);
mark5.ExibirStatus();
 
Console.WriteLine("\nTentando descarregar a armadura...");
mark5.Energia = -50; // A propriedade vai barrar e colocar 0!
mark5.ExibirStatus();
 
public class Armadura {
    // Propriedade auto-implementada
    public string Modelo { get; private set; } 
 
    private int _energia; // Campo privado
 
    // Propriedade com lógica personalizada
    public int Energia {
        get { return _energia; }
        set {
            if (value < 0) {
                _energia = 0; // Proteção: energia não pode ser negativa
            } else if (value > 100) {
                _energia = 100;
            } else {
                _energia = value;
            }
        }
    }
 
    // Construtor
    public Armadura(string modelo, int energiaInicial) {
        Modelo = modelo;
        Energia = energiaInicial; // Usa a propriedade para validar!
    }
 
    public void ExibirStatus() {
        Console.WriteLine($"Armadura: {Modelo} | Energia: {Energia}%");
    }
}

🕹️ Como Executar e Testar no VS Code

  1. Execute o projeto usando dotnet run.

Resultado Esperado:

Armadura: Mark V | Energia: 100%
 
Tentando descarregar a armadura...
Armadura: Mark V | Energia: 0%

📊 Ilustração Visual: Encapsulamento

A propriedade serve como um guarda:

graph TD
    A[Código Externo] -->|"Tenta definir Energia = -50"| B((Propriedade Energia))
    B -->|"Valida e ajusta para 0"| C["Variável Privada: _energia"]

🛠️ Prática Obrigatória 1: Reator Arc

Crie uma classe ReatorArc que tenha uma propriedade Potencia (int). Use a lógica no set para que a potência nunca ultrapasse 1000. Crie um construtor que receba a potência inicial. Teste na main tentando criar um reator com 2000 de potência!


🔑 Gabarito de Código

Prática 1: reator_arc.cs

using System;
 
ReatorArc reator = new ReatorArc(2000);
reator.Exibir(); // Deve mostrar 1000
 
public class ReatorArc {
    private int _potencia;
 
    public int Potencia {
        get { return _potencia; }
        set {
            if (value > 1000) {
                _potencia = 1000;
            } else {
                _potencia = value;
            }
        }
    }
 
    public ReatorArc(int potenciaInicial) {
        Potencia = potenciaInicial;
    }
 
    public void Exibir() {
        Console.WriteLine($"Reator Arc ativado! Potencia: {Potencia} GW");
    }
}

Capitulo Anterior | Proximo Capitulo