Orientação a Objetos
Published: 2021-02-25 12:22:39

##Introdução à Orientação a Objeto

A orientação a objetos é um paradigma fundamentado em trazer os objetos da vida real para a representar uma entidade na aplicação através de um tipo bem definido.

Os objetos propriamente ditos são instancias de uma classe.

A **classe**, o principal símbolo da orientação a objetos, é um modelo que representa uma entidade, ou seja, a estrutura de um objeto é baseado em uma classe.

Por exemplo, uma classe Pessoa é um modelo para um ou mais objetos, sendo que cada um desses tem uma área na memória.

Uma classe é formada por membros, sendo os principais os  **atributos (variáveis)** e as **operações (funções)**.

**Atributos**
- Determinam o estado do objeto, por exemplo, os campos Nome e Idade da classe Pessoa representam o nome e idade da pessoa respectivamente.
- Características que um objeto pode assumir.

**Operações**
- Funcionalidades que um objeto pode exercer: a função Falar da classe Pessoa, por exemplo, representa o ato de falar da pessoa.
- Ações que acontecem a um objeto.

As principais características da orientação a objetos são: **herança, polimorfismo, abstração e encapsulamento**.

##Herança

A herança define um relacionamento **pai/filho** entre tipos, o que origina a hierarquia das classes.

C# suporta dois tipos de herança: a herança de implementação e a herança de interface.

**Herança de Implementação**
- Pressupõe que a classe derivada (filho) seja baseada em uma classe existente.
- Ela é chamada de classe base (pai), onde os membros visíveis são compartilhados.
- As classes, tanto base quanto derivadas, são declaradas com a palavra-chave class.
- Um exemplo são os objetos do .NET Framework: todos são herdados da classe System.Object, ou seja, o método ToString de um objeto da classe System.Int32 é, na verdade, originado pelo System.Object.

**Herança de Interface**
- Pressupõe que uma classe derivada seja baseada em uma interface existente, onde as operações são pressupostas.
- Porém, a classe derivada é obrigada a implementar cada operação da interface.
- As interfaces são declaradas com a palavra-chave interface.
- Um exemplo é o objeto System.Collections.ArrayList do .NET Framework, que suporta as interfaces IList, ICollection, IEnumerable e ICloneable.

Em C#, a classe derivada somente poderá assumir uma classe base na herança de implementação e uma ou mais ‘interfaces’ na herança de ‘interface’.

Para uma classe herdar de outra na declaração da classe, são colocados dois-pontos (:), seguidos da classe base e/ou das ‘interfaces’ separadas por vírgulas (,).

Trabalhar com herança permite a criação de hierarquia de classes.

##Polimorfismo

O polimorfismo é a habilidade de suportar uma ou mais formas.

Ele possibilita a capacidade de escrever classes como unidades adicionando-as ou removendo-as conforme a necessidade.

O principal objetivo do polimorfismo é diminuir a quantidade de código escrito, aumentando a clareza e a facilidade de manutenção.

##Abstração

A abstração define as características essenciais de um objeto que o distingue de outros objetos quaisquer.

Por meio da abstração, obtemos uma separação do que é essencial para o comportamento do objeto de sua implementação.

Quando definimos uma hierarquia de classes, partimos das classes básicas para as específicas. Portanto, ao implementarmos uma hierarquia de classes,  devemos ter em mente a abstração, ou seja,  criar uma classe base com os comportamentos básicos de um objeto, implementando-a de forma especializada por meio das classes concretas.

A palavra-chave ‘abstract’ é usada para indicar esse comportamento.

##Encapsulamento

O encapsulamento consiste em esconder os detalhes de implementação de um objeto, principalmente se esses detalhes não fizerem parte das características essenciais do objeto.


**Referencias:**
GALUPPO, F.; MATHEUS, V.; SANTOS, W. Desenvolvendo com C#. Porto Alegre: Bookman, 2003. 496p.