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