Classes, propriedades e construtores
ResumoUma classe modela um conceito com dados (propriedades) e comportamento (métodos). Construtores garantem que um objeto nasça em estado válido; propriedades controlam o acesso aos dados.
1. Objetivos de Aprendizagem#
- Declarar classes com propriedades e construtores.
- Controlar acesso com modificadores e propriedades auto-implementadas.
- Aplicar encapsulamento.
2. Pré-requisitos#
- Value vs reference (Módulo 04).
3. Conceito#
Uma classe é o molde; um objeto é uma instância desse molde. Ela combina:
- Propriedades: dados com
get/setcontrolados. - Construtores: inicializam o objeto em estado válido.
- Encapsulamento: esconder detalhes internos, expor só o necessário.
O porquê de propriedades (em vez de campos públicos): permitem validação, somente-leitura e evolução sem quebrar quem consome.
4. Mão na Massa#
4.1. Setup#
dotnet new console -n Catalog.Oop
cd Catalog.Oop
4.2. Implementação Passo a Passo#
- Classe com propriedades e construtor:
public class Produto
{
public Guid Id { get; } // só leitura (definido no construtor)
public string Nome { get; set; }
public decimal Preco { get; private set; } // set restrito à classe
public Produto(string nome, decimal preco)
{
if (string.IsNullOrWhiteSpace(nome))
throw new ArgumentException("Nome é obrigatório.", nameof(nome));
Id = Guid.NewGuid();
Nome = nome;
Preco = preco;
}
public void Reajustar(decimal percentual) =>
Preco *= (1 + percentual);
}
- Uso:
var p = new Produto("Teclado", 120m);
p.Reajustar(0.1m);
Console.WriteLine($"{p.Nome}: {p.Preco:C}");
4.3. Executando#
dotnet run
5. Exemplo Completo#
O Produto acima nasce sempre válido (nome obrigatório, Id gerado) e só permite alterar o preço via método Reajustar — encapsulamento na prática.
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
| Validar no construtor para garantir estado válido | Campos públicos mutáveis sem controle |
Usar private set/só-leitura quando fizer sentido | Expor set público para tudo |
| Métodos que representam operações do domínio | Objetos anêmicos manipulados por fora |
Atençãopropriedade auto-implementada (
{ get; set; }) gera um campo de apoio oculto. Só escreva um campo explícito quando precisar de lógica no getter/setter.
7. Segurança e Produção#
- Encapsular invariantes no construtor/métodos evita estados inválidos que viram bugs difíceis em produção.
8. Exercícios#
- Fácil: crie uma classe
CategoriacomIdeNome. - Médio: adicione validação de nome no construtor.
- Desafio: modele
Produtocom preço que nunca pode ficar negativo, mesmo após reajuste.
9. Resumo#
Classes combinam propriedades e comportamento; construtores garantem estado válido e propriedades controlam acesso. Encapsule invariantes dentro do objeto.
10. Próximos Passos#
A seguir, reutilização por herança e polimorfismo.
11. Referências#
- Microsoft Learn — Classes
- Microsoft Learn — Propriedades
- Microsoft Learn — Construtores