Guia Linguagem C#

Fundamentos básicos da Orientação a Objetos

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (6)  (0)

Este artigo trata sobre os principais fundamentos da orientação a objetos em C# explicando os conceitos de abstração, herança e polimorfismo.

De que se trata o artigo

Este artigo trata sobre os principais fundamentos da orientação a objetos em C#, explicando os conceitos de abstração, herança, polimorfismo além de falar sobre a implementação de alguns destes fundamentos em C#, assim como palavras reservadas do mesmo que incidem sobre estes conceitos.


Em que situação o tema é útil

Os tópicos abordados neste artigo poderão ser úteis no dia a dia de todo desenvolvedor, pois abordará

Fundamentos básicos de Orientação a Objetos

Neste artigo veremos os principais conceitos e fundamentos da orientação a objetos aplicados no C#. Além disso, veremos o uso das palavras chaves virtual, override, abstarct, sealed, partial e dos modificadores de acesso public, protected, internal, protected internal e private.

Atualmente existem dois paradigmas principais de desenvolvimento de software na mente dos desenvolvedores e no mercado. Temos o paradigma estruturado, que antes dominava o mercado, e o paradigma da orientação a objetos (O.O), que cada vez mais vai tomando conta do mercado.

Normalmente, profissionais mais antigos estão habituados com o paradigma estruturado e os mais novos com o paradigma O.O, mas é claro que isso não é uma regra.

O fato é que a orientação a objetos vem tendo sua adoção numa crescente no mercado, mas é fato também que na maioria das vezes ela é subutilizada. É muito comum vermos equipes de desenvolvimento que desconhecem alguns fundamentos básicos da orientação a objetos, que são os pilares da mesma.

A ideia deste artigo é apresentar alguns dos conceitos mais básicos e fundamentais da orientação a objetos, com exemplos pontuais e aplicados ao C#. Vamos aproveitar também para falar sobre algumas palavras reservadas do C# que estão de certa forma relacionadas aos conceitos que vamos apresentar.

Para começar, vamos traçar um breve comparativo, sobre os paradigmas estruturados e orientado a objetos.

Programação estruturada VS Programação Orientada a Objetos

Antigamente, há algumas décadas atrás, o paradigma que predominava no desenvolvimento de software era o da programação estruturada. Basicamente, a grosso modo, os softwares eram compostos por rotinas e sub-rotinas que chamavam umas às outras, além de variáveis que tinham escopo local (dentro de rotinas / sub-rotinas) ou global. Assim como todo paradigma, o paradigma estruturado tinha seus prós e contras e foi bastante eficiente no que se propôs durante seus anos de domínio no mercado, além de ter sido bastante importante para a evolução da engenharia de desenvolvimento de software.

Com o passar dos anos, surgiu o paradigma da orientação a objetos, que também não é tão novo como muitos pensam, mas que veio a ganhar mais força na última década.

A orientação a objetos surgiu com o objetivo de tornar o desenvolvimento de software menos complexo e mais produtivo. A idéia era termos estruturas de dados, que possuem estado e comportamento e colaboram entre si. Dessa forma, deixaríamos de ter todas as rotinas e sub-rotinas “espalhadas” pelo sistema e passamos a atribuir elas a uma dessas estruturas de dados, de forma coesa, cada qual com sua responsabilidade. Além disso, encapsularíamos as variáveis nestas mesmas estruturas, controlando o acesso às mesmas e tornando público apenas aquilo que for pertinente.

O paradigma da orientação a objetos possui três conceitos fundamentais:

• Encapsula mento – Prevê o isolamento a determinados elementos do objeto (métodos /atributos) de acordo com a necessidade de acesso a eles. Este conceito parte da premissa de que nem todo método e atributo precisam estar visíveis e acessíveis publicamente. Existem elementos que são pertinentes apenas ao próprio objeto, outros pertinentes aos objetos filhos e outros que são pertinentes todos os objetos associados. O encapsula mento se dá através dos modificadores de acesso, que veremos mais a frente.

• Abstração – É a capacidade de focar nos pontos mais importantes do domínio de aplicação do sistema e abstrair os detalhes menos relevantes. Na modelagem de um sistema orientado a objetos, uma classe tende a ser a abstração de entidades existentes no mundo real (domínio da aplicação). Ex.: Cliente, Funcionário, Conta Bancária.

• Polimorfismo – É a capacidade de um elemento ser capaz de assumir diferentes formas. Na orientação a objetos, chamamos de polimorfismo a possibilidade que temos de mudar o comportamento de um mesmo método de um objeto dentro da sua hierarquia.

Além disso, podemos citar os seguinte elementos com sendo os alguns dos principais da orientação a objetos:

• Classe – Uma classe é um tipo de dado que representa tudo aquilo que um objeto deste tipo poderá ter/fazer. Na classe determinamos o que será armazenado em seu estado e quais comportamentos ele terá, ela funciona como uma estrutura de referência para a criação de objetos. Uma classe pode ter vários objetos.

• Objeto – Um objeto é uma instância de uma classe. É a estrutura completa, criada em memória, que irá representar a classe com tudo o que foi definido nela, inclusive com os valores armazenados nos seus respectivos atributos.

• Atributos – Os atributos representam o estado de um objeto. É neles que armazenaremos as informações de nossos objetos. Ex.: Nome, Idade, Endereço etc...

• Métodos – Representam os comportamentos (operações) de nossos objetos, são as operações que o mesmo pode executar.Ex.: ValidarCPF, AprovarCredito, LiberarPagamento etc...

Figura 1. Representação Gráfica de classe com muitos objetos

Na Figura 1, podemos ver que uma classe pode ser instanciada diversas vezes, dando origem a diversos objetos diferentes.

Tipos de Referência x Tipos de Valor

Em C# nós temos duas classificações de tipos de dados. Que são os tipos de referência (References Types) e os tipos de valor (Value Types). A diferença chave entre os dois tipos é a na passagem de valores dos mesmos. No caso dos reference types, os valores dos objetos não são copiados, mas apenas sua referência, enquanto que nos value types os valores são copiados de um objeto para o outro.

Todos os objetos que são do tipo de uma classe ou interface são reference types. Tipos enumerados e tipos primitivos são value types.

Ao atribuirmos uma referência de value type a outra, estamos literalmente copiando o seu valor, replicando o mesmo para o novo elemento. Ao atribuirmos uma referência de um reference type para outro, não há cópia de valores, mas apenas de suas referências.

Listagem 1. Exemplo de Value Types

 
  01     using System;
  02     using System.Collections.Generic;
  03     using System.Linq;
  04     using System.Text;
  05     using ExemplosFundamentos.Modificadores;
  06     using ExemplosFundamentos.AbstractExemplo;
  07     using ExemplosFundamentos.PartialClass;
  08     
  09     namespace ExemplosFundamentos
  10     {
  11         class Program
  12         {
  13             static void Main(string[] args)
  14             {
  15                 double valorA = 10;
  16                 double valorB = 20;
  17                 Console.WriteLine("valorA : " + valorA);
  18                 Console.WriteLine("valorB : " + valorB);
  19                 Console.WriteLine("Copiando valor de A para B...");
  20                 valorB = valorA;
  21                 Console.WriteLine("valorA : " + valorA);
  22                 Console.WriteLine("valorB : " + valorB);
  23                 Console.WriteLine("Alterando valor de A para 50...");
  24                 valorA = 50;
  25                 Console.WriteLine("valorA : " + valorA);
  26                 Console.WriteLine("valorB : " + valorB);
  27                 Console.ReadLine();
  28             }
  29         }
  30     }
"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?