O que é uma Classe?
No universo da Programação Orientada a Objetos (OOP), a classe é, sem dúvida, o conceito mais fundamental. Pense nela como uma planta baixa ou um molde. Uma planta baixa de uma casa define todas as suas características: quantos quartos terá, a localização da cozinha, o número de banheiros, e assim por diante. No entanto, a planta baixa em si não é a casa; ela é apenas o projeto para construir casas. Cada casa construída a partir daquela planta é um objeto.
Em C#, uma class é exatamente isso: um modelo para criar objetos. Ela é uma estrutura que agrupa dados (informações sobre o estado) e comportamentos (ações que podem ser executadas) em uma única unidade lógica e coesa.
Ao definir uma classe, estamos criando um novo tipo de dado em nosso programa. Assim como temos tipos primitivos como int para números inteiros e string para textos, podemos criar um tipo Customer, Product ou Invoice que representa uma entidade do mundo real ou um conceito do nosso sistema.
Estrutura Fundamental de uma Classe
Uma classe encapsula seus membros, que podem ser campos, propriedades, métodos e eventos. Vamos visualizar a estrutura de uma classe Customer (Cliente) de um sistema de e-commerce usando um diagrama PlantUML.
Este diagrama nos mostra de forma clara:
O nome da classe:
Customer.Seus campos (representados com
-, indicando que sãoprivate), que guardam o estado interno do objeto.Suas propriediedades (representadas com
+, indicando que sãopublic), que expõem os dados de forma controlada.Seu construtor, um método especial para criar o objeto.
Seus métodos (também com
+parapublice-paraprivate), que definem o que o objeto pode fazer.
Anatomia de uma Classe em C#
Vamos traduzir o diagrama acima em código C# e dissecar cada parte.
Dissecando o Código
Modificadores de Acesso (
public): A palavra-chavepublicdetermina a "visibilidade" da classe.publicsignifica que qualquer outra parte do seu código pode criar e usar objetosCustomer. Outros modificadores inclueminternal(visível apenas dentro do mesmo projeto/assembly) eprivate(visível apenas dentro de outra classe, no caso de classes aninhadas).Campos (
Fields): São as variáveis internas da classe. A boa prática, ligada ao pilar do Encapsulamento, dita que os campos devem serprivate. Isso protege o estado interno do objeto de ser modificado de forma inesperada e inconsistente. A convenção de usar um underscore (_) no início do nome (_firstName) ajuda a diferenciar visualmente os campos privados das variáveis locais.Propriedades (
Properties): Se os campos são o cofre, as propriedades são a porta do cofre. Elas expõem publicamente os dados dos campos de uma maneira controlada. Uma propriedade tem dois blocos:get: É executado quando o valor da propriedade é lido. Ele retorna o valor do campo correspondente.set: É executado quando um valor é atribuído à propriedade. A palavra-chavevaluerepresenta o valor que está sendo atribuído.
No exemplo
public Guid Id => _id;, usamos uma sintaxe mais curta, chamada expression-bodied property, que é útil para propriedades que são somente leitura (read-only) e apenas retornam o valor de um campo.Construtor (
Constructor): É um método especial que não tem tipo de retorno e possui o mesmo nome da classe. Sua função é inicializar um objeto, garantindo que ele nasça em um estado válido e consistente. No nosso exemplo, o construtor exige que um novoCustomerseja criado já com nome, sobrenome e email, além de gerar automaticamente umIde a data de criação.Métodos (
Methods): Representam os comportamentos e ações.GetFullName()é um método que calcula e retorna uma informação derivada do estado do objeto.UpdateEmail(string newEmail)é um método que modifica o estado do objeto, mas de forma controlada, validando a informação antes de aplicá-la.
Instanciando e Usando um Objeto
Definir a classe é como desenhar a planta. Para ter a casa, precisamos construí-la. Em C#, "construir" um objeto a partir de uma classe é chamado de instanciação. Usamos a palavra-chave new para isso.
Neste exemplo, customer1 é a nossa "casa". É uma entidade na memória que foi construída a partir do molde Customer. Ela tem sua própria cópia dos dados (_firstName, _lastName, etc.) e pode executar os comportamentos definidos na classe.
Conclusão
A classe é o pilar central da Programação Orientada a Objetos em C#. Ela nos permite modelar conceitos do mundo real ou abstratos de forma organizada, segura e reutilizável. Ao agrupar estado (dados) e comportamento (métodos) em uma única unidade, as classes nos ajudam a construir sistemas complexos de maneira mais gerenciável e lógica. Dominar o conceito de classes, incluindo encapsulamento, propriedades, construtores e métodos, é o passo mais crucial para se tornar um desenvolvedor C# proficiente.