05/01/2013

Programação Orientada a Objetos


Pensar em .Net é obrigatório saber OOP porque tudo é baseado em OOP.

O que é um objeto?

Um objeto é nada mais que uma classe, que pode ter propriedades e métodos. Propriedades da classe são as características e os métodos são as ações. Neste exemplo a seguir defini a classe chamada Jogador contendo 3 propriedades, sendo id, nome e modalidade. Cada propriedade tem um tipo (int, string, double, datetime, etc). Já os métodos desta classe são Salvar e Excluir, os quais não estão implementados, mas são as ações desta classe.


public class Jogador
{
    // propriedades
    public int id { get; set; }
    public string nome { get; set; }
    public string modalidade { get; set; }


    // métodos
    public void Salvar() { }


    public void Excluir() { }
}

Como instanciar um objeto e preenche-lo? No código a seguir veja como instanciar o objeto/classe Jogador e preencher com as propriedades definidas na classe. Eu usei a palavra chave var porque o C# atribui o tipo de acordo o conteúdo e como no new está setado o Jogador, então, automaticamente a variável obj passa a ser do tipo Jogador. Uma vez finalizado o preenchimento você tem acesso a tudo da classe, desde que seja pública é claro. Neste exemplo, será mostrado o nome do Jogador através da propriedade obj.nome.

var obj = new Jogador
{
    id = 10,
    nome = "Paulo",
    modalidade = "xadrez"
};
Console.WriteLine(obj.nome);

Construtor da classe

Quando você precisar instanciar uma classe, mas alguma informação deve ser passada logo no início, você pode inserir o campo no construtor da classe. Exemplificando, veja a mesma classe Jogador contendo a propriedade idade. Observe que logo após a declaração da classe é definido o campo idade e no construtor public Jogador (int idade) já é esperado o valor da idade. Neste caso

public class Jogador
{
    public int idade;
    public Jogador(int idade)
    {
        this.idade = idade;
    }
    // propriedades
    public int id { get; set; }
    public string nome { get; set; }
    public string modalidade { get; set; }


    // métodos
    public void Salvar() { }
    public void Excluir() { }
}
Neste caso, quando instanciar a classe Jogador, a idade deverá ser declarada imediatamente entre parênteses.

var obj = new Jogador(25)
{
    id = 10,
    nome = "Paulo",
    modalidade = "xadrez"
};
Console.WriteLine(obj.nome);

Herança de Classe

Um dos melhores conceitos que existem no OOP é a herança. Isto permite criar uma classe base e herda-la quando necessário. Na classe base normalmente colocamos propriedades e métodos básicos, genéricos e nas classes que herdam esta, colocamos as particularidades.

Veja que criei a classe Xadrez e herdei de Jogador. No C# para herdar uma classe use o :. Neste caso, a classe Xadrez tem as propriedades nível e rating. No entanto, veja que o construtor também usa o idade, pois na classe base Jogador, a idade deve ser declarada quando instânciada.

public class Xadrez : Jogador
{
    public Xadrez(int idade):base(10)
    {
        this.idade = idade;
    }
    public string nivel { get; set; }
    public int rating { get; set; }
}

Agora veja como instanciar a classe Xadrez. Observe que as propriedades id, nome e modalidade não existem em Xadrez. Porém, como Xadrez herda de Jogador, você tem acesso a todas estas propriedades de forma transparente. Isto é fantástico, otimiza código, facilita a manutenção e você consegue estender várias funcionalidades.

var objX = new Xadrez(27)
{
    nivel = "avançado",
    rating = 10000,
    id = 20,
    nome = "Alvaro",
    modalidade = "xadrez"
};
Console.WriteLine(objX.rating);

Vale dizer que todas as propriedades e métodos vistos aqui são públicos (public). Caso queira que uma propriedade seja vista apenas de dentro da classe, use private ou protected. Isto vale para métodos também.

Nenhum comentário: