segunda-feira, 11 de agosto de 2014

Paradigmas de Linguagens de Programação

Comparação entre os Paradigmas Imperativo e Orientado a Objetos

Resumo
O que determina a visão que um programador tem  sobre a estruturação e execução de um programa é um  paradigma de programação. No paradigma orientado a  objetos o programador tem a possibilidade de abstrair o  programa como uma coleção de objetos que interagem  entre si, já no paradigma imperativo ele basicamente  descreve comandos que mudam o estado do programa. Utilizando o paradigma imperativo para codificação de  programas notou-se que partes do código se repetiam ao  longo dele. No paradigma orientado a objetos isso é  reduzido de forma drástica. Esse artigo descreve as  principais características desses paradigmas, e as suas  vantagens e desvantagens

1. Introdução
Um paradigma é, basicamente, um modelo  interpretativo de certa realidade. Ele possibilita a 
organização de idéias com o objetivo de entender essa  realidade, ou estabelecer a melhor maneira de agir sobre  ela. Existem vários paradigmas de programação, e a  maioria deles pode ser considerado como formador de um  desenvolvimento ao longo de um mesmo padrão de  idéias. Esse padrão é assinalado pela arquitetura Von  Neumann, que dita as principais características desse  modelo de idéias. O desempenho de execução de um  programa é determinado pelo seu desempenho em um  computador Von Neumann. Dessa forma, essa arquitetura  deu suporte para projetos de linguagens de programação.
Nasce, assim, o primeiro paradigma de programação,  o convencional, que abrange o imperativo e o 
procedimental, como apresenta Barbosa [1]. O paradigma  imperativo consiste na criação de sistemas através de  comandos ou instruções imperativas. Alguns exemplos de  linguagens que se baseiam nessa modelagem  computacional são: Basic, C, Cobol, Fortran e Pascal. Mais tarde, emergiram paradigmas não convencionais. Os quais pertencem as linguagens criadas com o objetivo  de facilitar a solução de problemas específicos. Os  paradigmas funcional, lógico, orientado a objetos e  orientado a agentes são não convencionais. O paradigma  orientado a objetos propõe a aproximação entre a modelagem computacional e o mundo real. Alguns  exemplos de linguagens que se baseiam nessa modelagem  computacional são: Smalltalk, C++, Java e C#.

É muito importante não confundir um paradigma de  programação com a linguagem. Um paradigma é um 
estilo fundamental de programação, a linguagem é um método padronizado para expressar instruções para o  computador. Uma linguagem de programação pode  suportar múltiplos paradigmas, por exemplos, programas  escritos em C++ podem ser puramente imperativos, ou somente orientado a objetos. E ainda podem conter elementos de ambos os paradigmas. Quem decide como  empregar as configurações de cada paradigma são os projetistas de software.

Algumas linguagens de programação são criadas para  suportar paradigmas específicos, como Smalltalk que é  destinada a programação orientada a objetos e Haskell, aplicada a programação funcional. Enquanto outras  linguagens de programação sustentam múltiplos  paradigmas, tais como: Object Pascal, C++, Java, C#,  Visual Basic, Common Lisp e Python. 

2. Paradigma Imperativo
O paradigma imperativo descreve a computação como  ações, comandos, que mudam o estado, variáveis, do  programa. Ele é bastante parecido com o comportamento  das linguagens naturais que expressão ordens. Programas  escritos no modo imperativo são seqüências de comandos  para o computador executar. Algumas de suas  desvantagens são: focalizar o “como” e não “o quê”, e ter  um relacionamento indireto com E/S, o que induz a erros.  A sua eficiência, o fato de ser o paradigma dominante,  bem estabelecido, natural e flexível são algumas de suas  vantagens. 

Uma linguagem de programação bastante conhecida  que usa esses conceitos é o C. Essa linguagem é de  propósito geral, estruturada, imperativa, procedural, de  alto e baixo nível. Foi criada em 1972, por Dennis 
Ritchie, no AT&T Bell Labs, para o desenvolvimento do  sistema operacional Unix. Abaixo, na ilustração 1, é dado  um exemplo de codificação usando o paradigma  imperativo e a linguagem C. A execução desse programa gera um simples HelloWorld escrito na tela.

 /* Programa Hello World */ #include<stdio.h> /* 

Pacotes com funções de entrada e  saída 
*/ int main(void)
{
 printf("Hello World");
 return 0; /* Retorna 0, pois main retorna um int */
}
Ilustração 1: Exemplo de código usando o 
paradigma imperativo.


3. Paradigma Orientado a objetos
No mundo real, objetos são entidades que possuem  ma identificação. Eles podem tanto representar um  entidade concreta, um arquivo no meu computador, um  carro, como podem representar um entidade conceitual,  uma estratégia de jogo, uma política de escalonamento em  um sistema operacional. Mesmo que mais de um objeto  possua características idênticas, eles são distintos pelo  fato de cada um ter a sua identidade. 

Diferente do mundo real, os objetos em função de uma  linguagem de programação precisam de um mecanismo  de identificação. A identificação deve ser única, uniforme  e independente do conteúdo do objeto, para possibilitar a  criação de uma coleção de objetos.  O conjunto de operações que pode ser executados  sobre o objeto define o seu comportamento, e a sua  estrutura é representada em termos dos atributos.  Agrupamos em classes os objetos que tem a mesma  estrutura e comportamento. Segundo Ricarte [2], uma  classe é uma abstração que descreve propriedades  importantes para uma aplicação e simplesmente ignora o  resto dela.  Uma classe, basicamente, descreve um conjunto de  objetos individuais, os quais podem ser infinitos  teoricamente. Porém, na prática as limitações de memória  tornam isso impossível. Podemos chamar um determinado  objeto de instância de certa classe. Cada instância de  classe, ou objeto, tem valores próprios para seus atributos,  mas compartilham os seus nomes, além disso, elas  dividem os mesmos métodos. Os métodos são  implementações específicas de uma operação para certa 
classe.

O fato de uma mesma operação poder se comportar de  forma diferente em classes diferentes é o que chamamos  de polimorfismo. Um exemplo é o método move, que  quando aplicado a um carro tem um comportamento  diferente de quando aplicado a uma janela de um sistema  de interfaces gráficas. 
A herança é um recurso que possibilita o  compartilhamento de atributos e operações entre as classes e é baseada em um relacionamento hierárquico.  Ela nos permite definir uma classe de forma genérica e  depois refiná-la sucessivamente em subclasses. As  subclasses herdam as propriedades da classe mãe e  adicionam as suas. Fazendo isso, as propriedades da  classe base não precisam ser repetidas nas classes  derivadas. A capacidade de agrupar as características  comuns de várias classes em uma genérica pode diminuir  radicalmente a repetição de código em um programa,  sendo uma das principais vantagens da utilização de 
orientação a objetos. A linguagem de programação Java utiliza todos os  conceitos de orientação a objetos. Porém ela não é  totalmente orientada a objetos, sendo possível programar  nessa linguagem usando somente o paradigma imperativo.  Algo que não seria uma boa prática, pois não estaríamos  utilizando todo o potencial da linguagem e do paradigma. 


4. Conclusão
A principal diferença que o paradigma orientado a  objetos tem em relação ao imperativo é o fato de trabalhar  os dados, e não o estado de funcionalidade da máquina. Ele enfoca a estrutura de dados e seu comportamento, assim gerando uma identidade que chamamos de classe.  Os objetos são resultados de uma implementação dessa  classe. O poder de abstração que o paradigma orientado a  objetos nos oferece, ao suportar heranças e polimorfismo,  é outra diferença em relação ao imperativo.


5. Referências

[1]. J.L.V. Barbosa. Paradigmas de Desenvolvimento de  Sistemas Computacionais. Porto Alegre. PGCC da UFRGS.  1998. Trabalho Individual II.

[2]. Ivan Luiz Marques Ricarte 2001-06-01



Conteúdo removido de "http://professor.unisinos.br/barbosa/grefe/atividades/at1/joao_1.pdf". Elaborado por João Henrique da Rosa.

Nenhum comentário:

Postar um comentário