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.
- Crie o arquivo
armadura.csna pastasrc/:
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
- 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");
}
}