Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Classificações de paradigmas de linguagens de programação Paradigma Imperativo Ou Procedural Visão: “ O computador é uma calculadora programável” A maioria das linguagens, de alto nível, existentes até a década de 80 seguiam o paradigma imperativo, caracterizado basicamente por seguir as características da arquitetura de Von Neumann , que tem formado a base para o projeto de muitas linguagens de programação. Tais linguagens têm um forte compromisso com a eficiência. As LPs incluídas nesse paradigma especificam como a computação é realizada por uma sequencia de alterações no estado da memória do computador. Os conceitos fundamentais são: Variável, valor e atribuição, ou seja o tempo todo atribui-se valor a variáveis. Essa classe de LPs é caracterizada pelo desenvolvimento do programa através de refinamentos sucessivos (top down), incentivando a organização do programa em subprogramas (partes), construídos com 3 tipos de processamento: sequencial, condicional e iterativo (repetitivo). Ou seja o paradigma imperativo esta intimamente relacionado com as técnicas e linguagens estruturadas. Esta classe de linguagens contendo membros tão díspares como FORTRAN, COBOL, PASCAL, CLU e ADA, deve seu nome ao papel dominante desempenhado pelos comandos ou instruções iterativas. Nestas linguagens a unidade de trabalho é o comando. Os efeitos de comandos individuais são combinados para a obtenção dos resultados desejados em um programa. Com forte influência da arquitetura de Von Neumann , 3 características permeiam tal classe de linguagens : Variáveis – a memória é um componente vital de tal arquitetura sistêmica, sendo composta por um conjunto de unidades, denominadas células, onde os dados ficam armazenados. Para acessar tais dados na memória necessitamos saber o endereço de cada célula. Como programar, referenciando os endereços físicos de memória é uma tarefa extremamente complexa, as linguagens de programação dispuseram aos programadores o conceito de variável, permitindo a eles abstraírem-se do conhecimento de que dado estaria armazenado em que célula (com endereço específico) de memória. Assim uma variável é em última análise, uma célula de memória, onde se armazenam dados, e que possuem um nome (identificador). 2 Operação de Atribuição – cada dado que precisa ser processado deve estar previamente armazenado na memória, isto é seu valor deve ser atribuído a uma célula de memória. O comando de atribuição tem alto grau de importância nas linguagens imperativas, forçando ao programador a um estilo de pensamento que é moldado pela arquitetura de Von Neumann. Repetição (iteração) – um programa, nesta classe de linguagens, geralmente cumpre seu objetivo, executando repetidamente uma seqüência de passos (comandos) elementares. Isto é uma conseqüência da arquitetura de Von Neumann, posto que as instruções também precisam estar previamente armazenadas na memória antes de sua execução. A única maneira de fazer algo mais complexo é repetindo uma seqüência de instruções. As linguagens imperativas permitem descrever a resolução de problemas através de uma série de tarefas elementares (comandos) que o computador pode executar. A seqüência de comandos define o procedimento A fim de ilustrar a interação destas características e seus efeitos, consideremos o programa abaixo, escrito em PASCAL, que mostra os números primos compreendidos entre 2 e Num, sendo Num um valor lido do dispositivo de entrada DEFAULT (teclado). Program Primo; Var Num,I,J : Integer; Primo : Boolean; Begin Readln (Num); For I:=2 to Num do Begin J:=2; Primo:=True; While (Primo) and (J <= I div 2) do If (I mod J) <> 0 Then J:=J+1 Else Primo:=False; If Primo Then writeln (´O número ´, I , ´e primo´) End; End. Considerações sobre o programa : Baseia-se em duas malhas de repetição, uma dentro da outra. A repetição mais externa(For I:=1 to Num) percorre os valores no intervalo de interesse 3 (2 a Num), ao passo que a mais interna (While...) testa cada um destes números quanto a ser primo ou não. A malha mais interna depende – de maneira não tão simples – da malha mais externa. A malha mais externa também depende – na instrução If Primo Then..... – da atribuição feita na malha mais interna (primo:=false). O programa não é hierárquico no sentido de cada componente ser composto de outros componentes (de nível mais baixo). Ao contrário cada componente usa efeito dos outros. Um componente é usado não para produzir (calcular) um valor, mas para produzir um efeito, especificamente o efeito de atribuir valores a variáveis. As estruturas de controle são usadas para ordenar as instruções de maneira que os efeitos combinados atinjam o fim desejado Vantegens das LPs Imperativas Desvantagens das LPs Imperativas Os programas tendem a ser eficientes, pois essas LPs simulam o funcionamento da arquitetura do hardware Inadequado a computação em paralelo Dificulta a escrita de programas complexos, pelas características das linguagens no que se refere a seguir a Maquina de Von Neumann. Dificuldade em corrigir programas, já que essa atividade decorre da dependência do conteúdo de cada célula de memória. Requer acompanhamento passo a passo do estado de cada variável. Paradigma Orientado a Objetos Na medida em que os programas tornam-se maiores e mais complexos, cresce a dificuldade não só em desenvolvê-los, mas sobretudo mantê-los ao longo do tempo. As LPs desse paradigma oferecem recursos para tornar o desenvolvimento de software mais rápido e confiável. A diferença básica entre as LPs desse paradigma e das LPs do paradigma estruturado é que enquanto essas focam nas abstrações de controle de execução dos programas, aquelas estão fundamentadas nas abstrações de dados 4 Classes, nesse paradigma, são abstrações que definem uma estrutura de dados e um conjunto de operações, os chamados métodos, que podem ser realizadas sobre elas. Na implementação dos métodos das classes são usados os conceitos do paradigma estruturado, daí dizermos que o paradigma OO é uma evolução do paradigma estruturado. Uma linguagem é dita orientada à objetos quando ela dá suporte lingüístico para objetos, e requer que estes objetos sejam instâncias de classes e um mecanismo de herança deve ser permitido. Linguagens Orientada a Objetos = Objetos + Classes + herança Podemos identificar similaridades entre o paradigma imperativo (ou procedural) com o paradigma da orientação a objetos. A Tabela abaixo , traça um paralelo entre estas abordagens. Paradigma Concorrente O paradigma concorrente engloba LPs que oferecem recursos para o desenvolvimento de sistemas concorrentes, cada vez mais usados. A programação concorrente existe quando vários processos executam simultaneamente e concorrem por recursos, o que pode acontecer quando há uma ou mais unidades de processamento. As principais linguagens para essa finalidade são: ADA e JAVA. Paradigma Declarativo Em contrates com o paradigma interativo, onde os programas especificam exatamente como o computador deve realizar a tarefa, nesse paradigma declara-se (descrição) o que é a tarefa, de forma abstrata. Essas LPs especificam as relações ou funções, não tendo atribuição de valores a posições de memória. As variáveis são incógnitas e não células de memória. Paradigma Imperativo Paradigma de Objetos Tipos de dados Classes / Tipos abstratos de dados VariávelObjeto / Instância Função / Procedimento Operação / Serviços Chamada de procedimento / função Envio de mensagens 5 O paradigma declarativo é subdividido em: Paradigma funcional é lógico, que são abaixo descritos. Paradigma Funcional Visão : “ O computador calcula funções matemáticas complexasl” O paradigma funcional contemplam linguagens que basicamente operam funções ou seja recebem um conjunto de valores e retornam um valor, como resposta ao problema. Exemplos dessas LPs são: LISP e HASKELL. O paradigma funcional focaliza o processo de resolução de problemas. A visão funcional resulta num programa que descreve as operações que devem ser efetuadas para resolver o problema. O programa é uma função, ou grupo de funções composto por funções simples. A relação entre as funções é simples : uma função pode chamar outra, ou o resultado de uma função pode ser utilizado como argumento para outra função. A tendência são programas menores, com menos código, nas linguagens funcionais. Exemplo: Considere a seguinte função para calcular o fatorial de um número, dada em uma linguagem imperativa C. Int Fatorial (int n) { Int Fat=1; While (n > 0) { fat=fat*n n— } return fat } Podemos usar a mesma função sem utilizar a variável local fat para armazenar os valores. Para tal faremos uso da recursividade: Int Fatorial (int n, inf f) { If (n > 0) Factorial (n-1,f*n) Else Return f; } Se quisermos calcular o fatorial de 5, basta chamar Fatorial (5,1). 6 A linguagem funcional mais conhecida é LISP, muito usada na área de Inteligência Artificial (especificamente para a construção de sistemas especialistas, processamento de linguagem natural e representação do conhecimento), devido a facilidade de interpretação recursiva. A linguagem APL embora tenha comando de atribuição (por atender ao paradigma imperativo) também é considerada uma linguagem funcional e pode ser usada para vários tipos de aplicações, desde controle de hardware e dispositivos até sistemas de informação gerencial. Paradigma Lógico Visão : “ O computador entende a lógica formal (fatos e regras)” A mais conhecida linguagem desse paradigma chama-se Prolog e como as demais LPs desse grupo estão baseadas em um conjunto de predicados. Um predicado define uma relação entre constantes ou variáveis. No paradigma lógico, os programas são declarativos: declara-se os resultados e não os procedimentos e à partir daí o programa encontra o caminho. O paradigma lógico está relacionado à perspectiva da pessoa: ele encara o problema de uma perspectiva lógica. Um programa lógico é equivalente à descrição do problema expresso de maneira formal, similar à maneira como o ser humano raciocina sobre ele : de posse de vários fatos, derivam-se conclusões e novos fatos. Assim quando uma questão é formulada, um mecanismo de inferência tenta deduzir novos fatos a partir dos existentes para verificar a veracidade da questão. A principal característica do paradigma lógico é que a execução dos programas corresponde a um processo de dedução automática. A linguagem lógica mais conhecida é PROLOG. Tal paradigma é bastante utilizado na construção de linguagens de acesso a banco de dados, sistemas especialistas (IA), tutores inteligentes e etc.
Compartilhar