Olá pessoal.
A ideia deste post não é mostrar o conceito de classe (ou mesmo da Orientação a Objetos), e sim como criar classes na linguagem C#.
Numa aplicação desenvolvida com uma linguagem orientada a objetos o uso de classe é bem comum. Mesmo aplicações pequenas em C# necessitam da elaboração de uma ou mais classes, cada uma com suas propriedades e métodos usados para executar as tarefas relativas ao objeto.
Mas o que é uma classe? Uma classe pode ser definida como um gabarito de um objeto. Acho que agora piorou, certo?
Primeiro vamos entender o que é um objeto. Um objeto na programação OO é qualquer coisa que seja um único item que se queira identificar num programa, como por exemplo uma pessoa, um carro, um computador, uma caneta, um usuário, etc. Mas o que seria a classe? A classe define como esse objeto deve ser, por isso é um gabarito de um objeto.
A classe gera o objeto de acordo com sua estrutura, e esse processo de criação do objeto é chamado de instanciação da classe.
Em C#, podemos ter dentro de uma classe os seguintes membros: atributos, construtores, destrutores, domínios, métodos, propriedades, indexadores, delegates, eventos e classe aninhadas. As classes são declaradas usando a palavra reservada class e precedida de um modificador de acesso, conforme mostrado no exemplo a seguir
public class Pessoa
{
}
Os modificadores de acesso dizem ao compilador da linguagem como classe será acessada externamente. Os moficadores são para classe são:
public: Permite que a classe seja acessada por qualquer outra classe.
selead: Não permite que a classe seja herdada.
partial: Permite que a classe tenha seu escopo dividido em vários arquivos.
static: Especifica que a classe somente tem membros estáticos. Não pode ser instanciada.
abstract: Define moldes para classes filhas. Não pode ser instanciada.
Atributos, Métodos, Propriedades e Construtores
Atributos
Atributo são declarados dentro da classe e são os elementos que definem sua estrutura. São como variáveis da classe.
public class Pessoa
{
int _id;
string _nome;
DateTime _dataNascimento;
}
Métodos
Os métodos são as ações que a classe ou uma instância da classe realização. A declaração de um método contempla um modificador de acesso, um tipo de retorno, o nome do método e opcionalmente parâmetros.
public class Pessoa
{
int _id;
string _nome;
DateTime _dataNascimento;
public int CalcularIdade()
{
int idade = DateTime.Now.Year - this._dataNascimento.Year;
return (idade);
}
public int CalcularIdade(DateTime dataReferencia)
{
int idade = dataReferencia.Year - this._dataNascimento.Year;
return (idade);
}
}
É possível ter métodos com o mesmos nomes, sendo suas assinaturas diferentes, isso é chamado de sobrecarga de métodos. E ainda é possível criar métodos que não tenham um retorno específico usando a palavra reservada void.
protected void FazAlgumaCoisa()
{
//Faz alguma coisa e não retorna...
}
Um método é classificado em “Contexto de Ação”, quando é centrado nos processos e atividades realizadas. Ex.: impressão de um cabeçalho padrão, mudança de configuração de tela, mudança de um status, etc. Normalmente não possuem retorno. É classificado como “Contexto de Resultado”, quando o objetivo é calcular ou obter algum valor em especial. Ex.: validação, resultado de um cálculo, etc. Normalmente retorna um valor.
Propriedades
Algumas linguagens de programação implementam o conceito Propriedades em suas características de Orientação a Objetos. Alguns puristas não concordam com uso, pois alegam que fere alguns conceitos tradicionais da OO.
A linguagem C# promove o uso de Propriedades, que são métodos que protegem (encapsulam) o acesso a membros da classe, ou seja, separa os elementos visíveis de um objeto dos invisíveis. As propriedades podem ser substituidas pelo clássico uso dos métodos set e get.
public class Pessoa
{
int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
string _nome;
public string Nome
{
get { return _nome; }
set { _nome = value; }
}
DateTime _dataNascimento;
public DateTime DataNascimento
{
get { return _dataNascimento; }
set { _dataNascimento = value; }
}
}
Na classe acima todos atributos foram encapsulados por propriedades, por exemplo o atributo int _id foi encapsulado pela propriedade public int Id. A propriedade Id poderia ter sido substituída sem problemas por um método set e get.
int _id;
public int GetId
{
return _id;
}
public int SetId
{
_id = value;
}
Modificações de acesso para atributos, métodos e propriedades
Atributos, métodos e propriedades necessitam de moficadores de acesso. Os principais para estes recursos são:
Public: Permite que os membros das classes sejam acessados por qualquer outro escopo
Protected: Permite que membros sejam usados apenas pela classe que o contém e permite que estes sejam “herdados” para classes derivadas da original.
Private: O membro é de uso exclusivo da classe onde é declarado.
Internal: Permite acesso somente por classes do mesmo assemblie.
Static: Permite acesso, sem necessidade do objeto ser instanciado.
Abstract: São métodos de classes Abstract que não possuem implementação (sem codificação).
Virtual: Permite que os métodos sejam sobrescritos por classes filhas.
Readonly:Limita acesso a somente leitura aos atributos da classe
Construtores
As classes podem apresentar métodos de inicialização chamados de construtores. São métodos responsáveis por inicializar os objetos das classes (instâncias das classes). E são identificados por um método com o mesmo nome da classe e sem retorno.
public class Pessoa
{
public Pessoa()
{
}
public Pessoa(int id, string nome, DateTime dataNascimento)
{
_id = id;
_nome = nome;
_dataNascimento = dataNascimento;
}
...
Acima foram criados dois construtores, o primeiro não faz nada (construtor padrão) e o segundo recebendo valores para inicializar os atributos da classe.
Instanciando classes
A instanciação da classe ocorre através da palavra reservada new. Se uma classe é estática (static) ela tem um comportamente diferente, não sendo necessário fazer sua instanciação para uso.
Pessoa pessoa1 = new Pessoa();
Pessoa pessoa2 = new Pessoa(1,"Filogonio Silva",dataNasc);
Pessoa pessoa3 = new Pessoa(2,"Fippildo Silva",dataNasc);
Existe outros conceitos (mais avançados) envolvendo classes. Aqui é só um “aquece”.
Até mais.