Académique Documents
Professionnel Documents
Culture Documents
Paradigmas de Linguagens I
1. INTRODUO
A primeira Linguagem de Programao (LP) de alto nvel foi projetada durante a dcada de 50. Desde
ento, LP tm sido uma rea de estudo fascinante e produtiva. Simplificadamente, uma LP pode ser definida como
uma notao formal para descrever a execuo de algoritmos em computador. Sendo assim, as LP no podem ser
encaradas como entidades isoladas, pois elas so ferramentas utilizadas no desenvolvimento de software e com esse
objetivo que devem ser analisadas e estudadas. Por isso, necessrio entender a organizao das LP, com nfase
na compreenso dos seus conceitos abstratos e dos elementos de sua representao durante o processo de execuo
[SIL 88, WAT 90].
Entretanto, para entender o relacionamento entre uma linguagem de programao e um mtodo de projeto,
tambm importante compreender que as linguagens de programao podem forar um certo estilo de
programao, geralmente chamado paradigma de programao. Por exemplo, como ser visto nos prximos
captulos, Smalltalk uma linguagem orientada a objetos. Ela fora o desenvolvimento de programas baseados em
classes de objetos como a unidade de modularizao. Similarmente, Fortran e Pascal so linguagens procedurais,
obrigando o desenvolvimento de programas baseados em rotinas como a unidade de modularizao. Linguagens
que foram um paradigma de programao especfico podem ser chamadas orientadas a paradigma. Em geral no
h necessidade de um relacionamento um para um entre paradigmas e linguagens de programao. Algumas
linguagens, de fato, so neutras e suportam diferentes paradigmas. Por exemplo, C++ suporta o desenvolvimento
de programas procedurais e orientados a objetos.
Os paradigmas de linguagens de programao mais proeminentes, com nfase no estilo de decomposio
de programas que eles promovem, so:
Programao Funcional: estilo de programao que tem origem na teoria das funes matemticas. Enfatiza o
processamento de valores atravs do uso de expresses e funes. As funes so os blocos de construo
primrios do programa; elas podem ser passadas livremente como parmetro e podem ser construdas e
retornadas como parmetros resultantes de outras funes. Algumas LP que suportam este paradigma so ML,
Scheme e LISP.
Programao de Tipos Abstratos de Dados: reconhece tipos abstratos de dados como a unidade da
modularidade do programa. CLU foi a primeira linguagem projetada para suportar este paradigma.
Programao Orientada a Objetos: enfatiza a definio de classes de objetos. Instncias de classes so criadas
atravs do programa conforme a necessidade, durante a execuo dos programas. Este estilo baseado na
definio de hierarquias de classes e selees em tempo de execuo de unidades para executar. Smalltalk,
Eiffel e Java so linguagens representativas desta classe. C++ e Ada tambm suportam este paradigma.
Sendo assim, aps uma introduo aos tpicos sobre classificao das LP e sobre seus elementos sintticos
e semnticos, feita nas prximas sees, alguns paradigmas de LP sero descritos. No captulo 2 so apresentadas
as caractersticas das linguagens imperativas (programao procedural). Na seqncia so introduzidos os conceitos
do paradigma de orientao a objetos e suas propriedades. Os paradigmas concorrente e funcional so discutidos
nos captulos 4 e 5, respectivamente. Finalmente, o ltimo captulo aborda um estudo de caso que visa possibilitar a
compreenso em detalhe das caractersticas das linguagens concorrentes e das linguagens funcionais de
programao.
1.1. Motivao
As linguagens de programao fazem parte do corao da Cincia da Computao, pois correspondem s
ferramentas que so utilizadas para comunicao, no apenas com os computadores, mas tambm entre as pessoas,
e que so indispensveis para programao do computador. O desafio de projetar caractersticas de uma LP que
suportem uma declarao clara, a complexidade de colocar juntas diferentes caractersticas para construir uma
linguagem til, e o desafio de usar apropriadamente estas caractersticas para facilitar a construo dos algoritmos
fazem parte do estudo de linguagens de programao [GHE 97].
Na verdade existem muitas razes para se estudar linguagens de programao, desde que se considere mais
do que as caractersticas das linguagens e procure-se pesquisar os conceitos bsicos de projeto de LP e seus efeitos
na implementao da linguagem. Sendo assim, cinco razes principais podem ser identificadas rapidamente:
Para melhorar o entendimento da linguagem que est sendo utilizada: muitas linguagens oferecem recursos que
quando usados adequadamente trazem muitos benefcios ao programador, mas quando utilizados de maneira
incorreta podem levar a um grande e desnecessrio aumento do tempo de processamento ou gerao de erros
lgicos [PRA 75].
Para fazer um uso melhor da linguagem de programao: o estudo das estruturas das LP facilitar o
entendimento da funo e implementao de tais estruturas. Ento, quando o usurio for programar, ele estar
mais apto a usar a linguagem no grau mximo de sua funcionalidade de uma maneira eficiente. O entendimento
do poder de uma linguagem permite que se utilize este poder. Em outras palavras, quando um programador
busca dados e estruturas de programa adequados para a soluo de um problema, existe a tendncia dele pensar
apenas em estruturas que so expressas nas linguagens com as quais ele est familiarizado. Porm, estudandose as construes fornecidas por um grande nmero de linguagens, e a maneira na qual estas construes so
implementadas, um programador aumenta o seu vocabulrio de programao. O entendimento da
implementao de tais construes tambm muito importante, pois para usar uma determinada construo
enquanto se est trabalhando com uma linguagem que no a fornea diretamente, necessrio que o
programador a implemente utilizando os elementos disponveis na linguagem [PRA 75, DER 90].
Para permitir uma melhor escolha da linguagem de programao: a partir do conhecimento de uma variedade
de linguagens de programao possvel escolher a linguagem certa para um projeto particular, reduzindo
desta maneira a quantidade de cdigo necessria.
Para facilitar o aprendizado de uma nova linguagem: o conhecimento de uma variedade de construes de
linguagens de programao e tcnicas de implementao possibilita que o programador aprenda a trabalhar
com uma nova linguagem de programao mais facilmente. Alm disso, o programador rapidamente consegue
ver com maior clareza como a linguagem apropriadamente usada, quais construes so mais custosas para
usar e quais so relativamente baratas [PRA 75].
Para tornar mais fcil o projeto de uma nova linguagem: este benefcio mais importante do que parece
inicialmente. Poucas pessoas quiseram ou tiveram a oportunidade de projetar suas prprias LP. Entretanto,
considerando-se que a linguagem um meio de comunicao entre uma pessoa e um computador, ento cada
sistema de computador que desenvolvido deve ter uma linguagem incorporada para fornecer uma interao
homemmquina. Um bom entendimento dos princpios da LP pode auxiliar no projeto desta interface. Alm
disso, muitas LP modernas possuem a propriedade de serem extensveis de vrias maneiras. Isto significa que o
programador pode aperfeioar a linguagem atravs da adio de novos tipos de dados e operadores. Nestas
linguagens, cada programa, na verdade, consiste no projeto de uma nova linguagem no sentido de que o
programador tem o poder de aumentar a linguagem original [DER 90].
O estudo de LP importante para qualquer programador, uma vez que este aprender a entender e utilizar
mais eficientemente as facilidades encontradas nas LP atuais. Projetistas de LP, bem como projetistas de hardware
e gerenciadores de software, tambm beneficiam-se deste estudo. Ao entender as necessidades de implementao
de uma LP, projetistas de hardware podem aperfeioar a maneira na qual as mquinas suportam as linguagens. J
os gerenciadores podero tomar diferentes decises de acordo com as caractersticas da LP utilizada [MAC 87].
A partir do que foi descrito, deduz-se que h muito mais para se estudar em LP do que simplesmente
compreender as caractersticas fornecidas por uma variedade de linguagens. Na verdade, muitas caractersticas
semelhantes das linguagens enganam, uma vez que a mesma caracterstica em duas linguagens diferentes pode ser
implementada de duas maneiras diferentes, e, consequentemente, as duas verses podem diferir grandemente no
custo de uso [PRA 75]. Assim, estudando-se paradigmas de linguagens, possvel se tornar um usurio inteligente
de LP. Isto inclui a habilidade de: escolher linguagens apropriadas para diferentes aplicaes, fazer uso efetivo e
eficiente de uma linguagem no desenvolvimento de software, e aprender rapidamente novas linguagens [DER 90].
Outra definio usual : Linguagem de programao um conjunto de termos e de regras que permitem a
formulao de instrues a um computador. Desta forma, a LP composta por dois elementos: Vocabulrio, que
consiste num conjunto de smbolos, e Gramtica, que o conjunto de regras para usar o vocabulrio.
A descrio de uma linguagem geralmente dividida em duas partes, descritas detalhadamente na seo
1.5, que so:
Sintaxe: o conjunto de regras que determina quais construes so corretas para formao dos programas e
quais no so; em outras palavras, preocupa-se com a forma dos programas (como expresses, comandos,
declaraes, etc. so colocados juntos para formar programas).
Torna-se interessante comentar que o principal objetivo de uma LP dar suporte ao programador no
desenvolvimento dos sistemas. Isto inclui assistncia no projeto, implementao, teste, verificao e manuteno
do software. Existe uma srie de caractersticas numa linguagem que contribuem para este objetivo. Entre as
caractersticas gerais que definem uma boa linguagem pode-se destacar:
Simplicidade: clareza e conciso semntica (linguagem com um mnimo nmero de conceitos e estruturas), e
clareza sinttica (sintaxe deve representar cada conceito de uma maneira apenas).
Suporte para abstrao de dados: representao de um objeto deve incluir somente os atributos relevantes.
Expressividade: refere-se a facilidade com que um objeto pode ser representado; a linguagem deve oferecer
estruturas de dados e de controle apropriadas.
Ortogonalidade: refere-se a interao entre conceitos, isto , o grau com que diferentes conceitos podem ser
combinados uns com os outros de uma maneira consistente; ortogonalidade reduz o nmero de excees das
regras de uma linguagem, tornando mais fcil o seu aprendizado e memorizao.
Suporte manuteno e portabilidade: habilidade de manter programas que devem ser fceis de entender e
alterar; afetada pelas caractersticas anteriores.
Linguagem de Mquina: uma linguagem usualmente baseada num cdigo binrio, especfico para cada tipo
de computador (ou microprocessador). Como a codificao das instrues feita na forma final de execuo
(endereos e opcode em binrio), esta linguagem pode ser usada diretamente pela mquina
Linguagem de Baixo Nvel: aqui comea a ser introduzida a abstrao, pois os cdigos binrios so
substitudos por mnemnicos. Neste caso necessrio usar um montador (assembler), que consiste num
programa que l o programa em baixo nvel e converte os cdigos mnemnicos para opcodes. O assembly,
como chamada a linguagem de baixo nvel, caracterstico para cada equipamento, podendo no entanto ser
manipulado com certa facilidade pelos programadores.
Para entender melhor as LP tambm interessante estudar um pouco da sua histria. Dershem e Jipping
[DER 90], ento, estruturaram o histrico das LP em trs perodos. O primeiro perodo que durou
aproximadamente uma dcada, iniciou em 1955 e abrangeu o desenvolvimento das linguagens de programao de
primeira gerao. O segundo perodo, de 1965 a 1971, foi um tempo de consolidao em torno do modelo de uma
linguagem, ALGOL 60, com o desenvolvimento de um grande nmero de linguagens derivadas dela, mas com
novas extenses atravs da adio de novas caractersticas importantes. No perodo final, 1972 em diante, os
resultados das pesquisas preliminares foram colocados juntos para introduzir novos modelos e abordagens para
linguagens de programao.
Linguagem de Alto
Nvel
Linguagem de Baixo
Nvel
Linguagem
de
Mquina
terceira gerao, porm alguns problemas, tal como a passagem de parmetros de vetores, foram corrigidos. As
estruturas de dados primitivas tendem a ser mais complicadas do que antes, devido ao controle e preciso de tipos
numricos. Finalmente, as estruturas sintticas da quarta gerao so mais abrangentes, tendo como exceo a
preferncia por estruturas completamente agrupadas entre parnteses. Exemplos de linguagens desta gerao so
Ada, Modula-2, e Clu.
Na quinta gerao, marcada pela execuo de vrios experimentos, no foi identificada uma idia
predominante de programao. Entretanto, trs paradigmas em especial so identificados: linguagens funcionais,
lgicas e orientadas a objetos. As linguagens funcionais enfatizam o uso de funes puras e a reduo de operaes
de atribuio. Isto leva ao uso da recurso como mtodo de iterao e da notao polonesa como estrutura sinttica
bsica. Sua estrutura de dados principal a lista, e as estruturas de controle bsicas so as expresses condicionais
e a recurso. Estas linguagens possuem um alto nvel de abstrao, permitem a avaliao dos programas em vrias
ordens diferentes, o que as tornam adequadas para uso em computadores paralelos, e so adequadas para aplicaes
matemticas. Um exemplo deste tipo de linguagem LISP. As linguagens lgicas, por sua vez, so de alto nvel e
orientadas a aplicao. A programao com este tipo de linguagem clara, rpida, precisa e simples, pois os
programas so descritos em termos de predicados e h uma separao da lgica e do controle durante a
programao. Prolog um exemplo de linguagem lgica. J a programao orientada a objetos fornece um modelo
de programao diferente, onde os objetos possuem propriedades semelhantes aos objetos do mundo real.
Linguagens orientadas a objetos concentram-se diretamente no comportamento dos objetos no tempo. Um exemplo
deste tipo de linguagem o Smalltalk [MAC 87].
Implementao: Refere-se ao tradutor da linguagem que utilizado. Neste caso, existem duas consideraes
importantes relacionadas implementao, sua disponibilidade e sua eficincia. A disponibilidade tem impacto
na deciso de quando usar a LP dada uma aplicao e a plataforma onde ele dever ser utilizada. A eficincia
refere-se velocidade de execuo de programas objetos criados pelo tradutor. Por exemplo, Fortran muito
utilizado porque o seu compilador contm vrias caractersticas de otimizao e produz um cdigo objeto
extremamente eficiente.
Conhecimento do Programador: Apesar de ser interessante assumir que todos os programadores esto
igualmente aptos a programar em qualquer linguagem, na prtica no funciona bem assim. Primeiramente,
como resultado da educao e experincia do programador, ele/ela tem uma maior facilidade para uma ou duas
linguagens e mais eficiente quando usa estas linguagens. Apesar de que aprender a usar uma nova e mais
apropriada linguagem para uma determinada aplicao uma tima experincia, o empregador raramente est
disposto a dar o suporte financeiro, principalmente porque tambm envolve o treinamento de vrios
programadores que iro fazer a validao, teste e manuteno dos programas. Para exemplificar, por isso que,
apesar da disponibilidade de muitas linguagens mais eficientes, ainda encontram-se vrios programas
desenvolvidos em Cobol.
implementaes so dependentes da mquina e resultam em mais tempo e custo quando portadas para um novo
sistema.
Sintaxe: algumas aplicaes adaptam-se melhor sintaxe de uma linguagem do que as outras. Por exemplo, a
sintaxe de Fortran foi projetada para atender s exigncias de programas matemticos, enquanto linguagens
mais novas como Pascal e Ada possuem uma sintaxe que facilita a declarao de estruturas de controle.
Semntica: pode ser um fator significativo na escolha da linguagem dada uma aplicao especfica, pois se uma
aplicao requer ou facilitada por uma certa caracterstica da linguagem, ento a linguagem que fornece
esta(s) caracterstica(s) deve ser escolhida. Por exemplo, se a programao concorrente necessria, deve-se
escolher uma LP concorrente, como Ada.
Watt [WAT 90] tambm fez um levantamento das questes que devem ser levadas em considerao na
escolha da LP, dividindo-as em questes estratgicas e tticas. As questes estratgicas, que envolvem projeto e
integrao de software, so:
Abstrao: o quanto a linguagem d suporte ao conceito de abstrao, que permite separar o que um mdulo
deve fazer de como ele ser implementado;
Desenvolvimento de grandes programas: se a linguagem permite que programas sejam construdos a partir de
mdulos escritos e verificados separadamente;
Reutilizao de software: se a linguagem permite a reutilizao de cdigo, e o quanto isto pode acelerar o
desenvolvimento de novos projetos.
As questes tticas, que referem-se a detalhes de programao na linguagem proposta, so:
Modelagem: se a linguagem fornece tipos e operaes associadas que so adequadas para modelagem de
objetos na rea de aplicao do projeto;
Nvel: o quanto uma linguagem alto ou baixo nvel, encorajando o programador a pensar em termos
relacionados rea de aplicao, ou a pensar em detalhes de cdigo;
Segurana: se a linguagem foi projetada de tal maneira que facilita a deteco de erros de programao,
preferencialmente em tempo de compilao;
interessante comentar que nenhuma destas questes so especficas para uma rea de aplicao
particular. Isto indica que qualquer linguagem razovel que passa por estas questes pode ser bem aceita na maioria
das reas de aplicaes. Isto tambm explica porque Pascal to satisfatrio (e insatisfatrio) em uma grande
variedade de aplicaes [WAT 90].