O primeiro post chegou e nada mais justo que falar de Programação Orientada a Objetos (POO). Mas afinal, o que é OO?
“Orientação a objetos significa organizar o mundo real como uma coleção de objetos que incorporam estrutura de dados e um conjunto de operações que manipulam estes dados”
Mas qual a vantagem de utilizar OO? Sendo extremamente sincero, a maior vantagem é ganho de tempo e dinheiro (afinal tempo é dinheiro, hehehe). Isso tudo se deve ao fato de que, para quem não utiliza POO já se viu tendo que copiar e colar código similar devido à falta de recursos. Isso remete a manutenções extensas e demoradas. A orientação a objetos trás vários recursos para produzir componentes Independentes, facilitando o baixo acoplamento, a manutenção e resultando em menos código.
Classe e Objeto
A Programação Orientada a Objetos (POO), surgiu com o intuito de aproximar o mundo real do mundo virtual. Para que isso seja possível, nada melhor que utilizar objetos, afinal, o mundo está cheio deles. Para simplificar essa ideia vamos tomar como exemplo um carro.
O objeto carro do mundo real pode ser “traduzido” para o mundo virtual através do que chamamos de classe. Classe seria uma espécie de gabarito na qual objetos se concretizam. Se analisarmos a classe carro, o mesmo possui atributos (dados) como cor, valor, modelo, placa, ano de fabricação e também Métodos (funções ou ações que um objeto pode executar) como buzinar, ligar, acelerar, frear.
Para exemplificar o conceito de classe iremos utilizar o código abaixo:

Uma classe pode ser utilizada para qualquer tipo de programação, em qualquer aspecto de um sistema e por isso podemos criar classes para:
- Modelar as Entidades de um sistema (como a classe carro);
- Conectar e acessar banco de dados;
- Definir regras de negócio;
- Validações;
- Etc.
Construtores
Construtores nada mais são que métodos da classe que são executados automaticamente quando um objeto é criado. O código no construtor é sempre executado antes de qualquer outro código em uma classe.

Através do construtor um objeto é criado (instanciado, alocando espaço de memória)

Destruidores
Destruidores são usados para destruir instâncias de classes. No .NET Framework, o Garbage Collector gerencia automaticamente a alocação e a liberação de memória para os objetos. Porém você pode precisar de destruidores para limpar os recursos antes que o Garbage Collector o faça. Pode haver apenas um destrutor para uma classe.
Modificadores de acesso
Toda classe e/ou membros (atributos/métodos) de classe podem especificar o nível de acesso que eles fornecem a outras classes usando modificadores de acesso. Os modificadores de acesso a seguir estão disponíveis:
- public: pode ser acessado por qualquer outro código na mesma classe ou em outra que faça referência a ele;
- private: só pode ser acessado por código na mesma classe;
- protected: só pode ser acessado por código na mesma classe ou em uma classe derivada;
- internal: só pode ser acessado por qualquer código na mesma classe;
Os Pilares de Orientação a Objetos
Abstração
Abstração nada mais é do que a capacidade de representar cenários complexos usando termos simples. Em outras palavras, é criar modelos de classes abstratas para definição de classes a serem construídas e tem como características:
- não ser completamente implementada;
- deve ter o modificador “abstract”;
- métodos não implementados (abstratos) recebem o modificador “abstract”;
- a definição do método na classe derivada deve ter o modificador “override”;
- não pode ser instanciada diretamente;
Como exemplo temos a classe Pessoa que é uma abstração de PessoaFisica e PessoaJurídica:

Herança
Através da herança é possível criar uma nova classe que reutiliza, estende e altera o comportamento definido na classe pai. A classe que tem seus atributos e métodos herdados é chamada de classe base, já a classe que herda da classe base é chamada de classe derivada. Vale lembrar que toda classe em C# herdam da classe Object e portanto herdam os métodos Equals(object obj), ToString() e GetHashCode().
Tomemos a classe Pessoa como exemplo. Toda pessoa possui um nome, idade, peso. Mas pessoa pode ser física (que possui CPF) ou jurídica (que possui CNPJ). Para não termos que replicar código, utilizamos a herança como no exemplo Abaixo:


Encapsulamento

Polimorfismo
Polimorfismo vem do grego “várias formas”. É o princípio pelo qual duas ou mais classes derivadas de uma mesma classe base podem utilizar métodos com a mesma assinatura porém com comportamentos distintos, especializados para cada classe derivada.
Existem dois tipos de polimorfismo:
- Sobrecarga (Overloading);
- Sobrescrita (Overriding);
Sobrecarga de Métodos (Overloading)
É um recurso das linguagens OO que permite declarar em uma classe métodos com o mesmo nome porém com entrada de argumentos diferentes. abaixo podemos ver que a classe Calcular com dois métodos Soma, porém com entrada de parâmetros diferentes:

Sobrescrita de Métodos (Overriding)
Resumidamente, sobrescrever um método significa utilizar um método herdado de uma classe base alterando a sua saída. Como vimos anteriormente toda classe herda da classe base Object.

Fique atento pois somente os métodos declarados como virtual na classe base podem ser sobrescritos. E por isso uma classe pode sobrescrever seus métodos alterando o resultado do método, bastando utilizar a palavra “override“.

Encontrou algum erro ou quer colaborar? mande e-mail para cristian.kruger@live.com
Um comentário em “Entendendo Programação Orientada a Objetos com C#”