7
Professora Isabel Harb Manssour Paradigmas de Linguagens I 1 1. INTRODUÇÃO A primeira Linguagem de Programação (LP) de alto nível foi projetada durante a década de 50. Desde então, LP têm sido uma área de estudo fascinante e produtiva. Simplificadamente, uma LP pode ser definida como uma notação formal para descrever a execução de algoritmos em computador. Sendo assim, as LP não podem ser encaradas como entidades isoladas, pois elas são ferramentas utilizadas no desenvolvimento de software e com esse objetivo é que devem ser analisadas e estudadas. Por isso, é necessário entender a organização das LP, com ênfase na compreensão dos seus conceitos abstratos e dos elementos de sua representação durante o processo de execução [SIL 88, WAT 90]. Entretanto, para entender o relacionamento entre uma linguagem de programação e um método de projeto, também é importante compreender que as linguagens de programação podem forçar um certo estilo de programação, geralmente chamado “paradigma de programação”. Por exemplo, como será visto nos próximos capítulos, Smalltalk é uma linguagem orientada a objetos. Ela força o desenvolvimento de programas baseados em classes de objetos como a unidade de modularização. Similarmente, Fortran e Pascal são linguagens procedurais, obrigando o desenvolvimento de programas baseados em rotinas como a unidade de modularização. Linguagens que forçam um paradigma de programação específico podem ser chamadas “orientadas a paradigma”. Em geral não há necessidade de um relacionamento um para um entre paradigmas e linguagens de programação. Algumas linguagens, de fato, são “neutras” e suportam diferentes paradigmas. Por exemplo, C++ suporta o desenvolvimento de programas procedurais e orientados a objetos. Os paradigmas de linguagens de programação mais proeminentes, com ênfase no estilo de decomposição de programas que eles promovem, são: § Programação Procedural: estilo de programação convencional onde os programas são decompostos em “passos” de processamento que executam operações complexas. Rotinas são usadas como unidades de modularização para definir tais “passos” de processamento. Exemplos de linguagens com este paradigma são Pascal e C. § Programação Funcional: estilo de programação que tem origem na teoria das funções matemáticas. Enfatiza o processamento de valores através do uso de expressões e funções. As funções são os blocos de construção primários do programa; elas podem ser passadas livremente como parâmetro e podem ser construídas e retornadas como parâmetros resultantes de outras funções. Algumas LP que suportam este paradigma são ML, Scheme e LISP. § Programação 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. § Programação Orientada a Objetos: enfatiza a definição de classes de objetos. Instâncias de classes são criadas através do programa conforme a necessidade, durante a execução dos programas. Este estilo é baseado na definição de hierarquias de classes e seleções em tempo de execução de unidades para executar. Smalltalk, Eiffel e Java são linguagens representativas desta classe. C++ e Ada também suportam este paradigma. § Programação Declarativa: enfatiza a descrição declarativa de um problema, ao invés da decomposição do problema em uma implementação algorítmica. Tais programas são mais próximos de uma especificação do que a implementação tradicional. Linguagens lógicas, como PROLOG, e linguagens baseadas em regras, como OPS5 e CLIPS, são representativas desta classe de linguagens [GHE 97]. Sendo assim, após uma introdução aos tópicos sobre classificação das LP e sobre seus elementos sintáticos e semânticos, feita nas próximas seções, alguns paradigmas de LP serão descritos. No capítulo 2 são apresentadas as características das linguagens imperativas (programação procedural). Na seqüência são introduzidos os conceitos do paradigma de orientação a objetos e suas propriedades. Os paradigmas concorrente e funcional são discutidos nos capítulos 4 e 5, respectivamente. Finalmente, o último capítulo aborda um estudo de caso que visa possibilitar a compreensão em detalhe das características das linguagens concorrentes e das linguagens funcionais de programação.

paradigmas de linguagem de programação

  • Upload
    lucas

  • View
    26

  • Download
    2

Embed Size (px)

DESCRIPTION

Trabalho sobre Paradigmas de Linguagem de Programação - Ciencia da Computação

Citation preview

  • Professora Isabel Harb Manssour Paradigmas de Linguagens I 1

    1. INTRODUO

    A primeira Linguagem de Programao (LP) de alto nvel foi projetada durante a dcada de 50. Desdeento, LP tm sido uma rea de estudo fascinante e produtiva. Simplificadamente, uma LP pode ser definida comouma notao formal para descrever a execuo de algoritmos em computador. Sendo assim, as LP no podem serencaradas como entidades isoladas, pois elas so ferramentas utilizadas no desenvolvimento de software e com esseobjetivo que devem ser analisadas e estudadas. Por isso, necessrio entender a organizao das LP, com nfasena 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 deprogramao, geralmente chamado paradigma de programao. Por exemplo, como ser visto nos prximoscaptulos, Smalltalk uma linguagem orientada a objetos. Ela fora o desenvolvimento de programas baseados emclasses 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. Linguagensque foram um paradigma de programao especfico podem ser chamadas orientadas a paradigma. Em geral noh necessidade de um relacionamento um para um entre paradigmas e linguagens de programao. Algumaslinguagens, de fato, so neutras e suportam diferentes paradigmas. Por exemplo, C++ suporta o desenvolvimentode programas procedurais e orientados a objetos.

    Os paradigmas de linguagens de programao mais proeminentes, com nfase no estilo de decomposiode programas que eles promovem, so:

    Programao Procedural: estilo de programao convencional onde os programas so decompostos empassos de processamento que executam operaes complexas. Rotinas so usadas como unidades demodularizao para definir tais passos de processamento. Exemplos de linguagens com este paradigma soPascal e C.

    Programao Funcional: estilo de programao que tem origem na teoria das funes matemticas. Enfatiza oprocessamento de valores atravs do uso de expresses e funes. As funes so os blocos de construoprimrios do programa; elas podem ser passadas livremente como parmetro e podem ser construdas eretornadas 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 damodularidade 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 criadasatravs do programa conforme a necessidade, durante a execuo dos programas. Este estilo baseado nadefinio 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.

    Programao Declarativa: enfatiza a descrio declarativa de um problema, ao invs da decomposio doproblema em uma implementao algortmica. Tais programas so mais prximos de uma especificao do quea implementao tradicional. Linguagens lgicas, como PROLOG, e linguagens baseadas em regras, comoOPS5 e CLIPS, so representativas desta classe de linguagens [GHE 97].

    Sendo assim, aps uma introduo aos tpicos sobre classificao das LP e sobre seus elementos sintticose semnticos, feita nas prximas sees, alguns paradigmas de LP sero descritos. No captulo 2 so apresentadasas caractersticas das linguagens imperativas (programao procedural). Na seqncia so introduzidos os conceitosdo paradigma de orientao a objetos e suas propriedades. Os paradigmas concorrente e funcional so discutidosnos captulos 4 e 5, respectivamente. Finalmente, o ltimo captulo aborda um estudo de caso que visa possibilitar acompreenso em detalhe das caractersticas das linguagens concorrentes e das linguagens funcionais deprogramao.

  • Professora Isabel Harb Manssour Paradigmas de Linguagens I 2

    1.1. Motivao

    As linguagens de programao fazem parte do corao da Cincia da Computao, pois correspondem sferramentas 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 quesuportem uma declarao clara, a complexidade de colocar juntas diferentes caractersticas para construir umalinguagem til, e o desafio de usar apropriadamente estas caractersticas para facilitar a construo dos algoritmosfazem parte do estudo de linguagens de programao [GHE 97].

    Na verdade existem muitas razes para se estudar linguagens de programao, desde que se considere maisdo que as caractersticas das linguagens e procure-se pesquisar os conceitos bsicos de projeto de LP e seus efeitosna 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 quequando usados adequadamente trazem muitos benefcios ao programador, mas quando utilizados de maneiraincorreta podem levar a um grande e desnecessrio aumento do tempo de processamento ou gerao de erroslgicos [PRA 75].

    Para fazer um uso melhor da linguagem de programao: o estudo das estruturas das LP facilitar oentendimento da funo e implementao de tais estruturas. Ento, quando o usurio for programar, ele estarmais apto a usar a linguagem no grau mximo de sua funcionalidade de uma maneira eficiente. O entendimentodo poder de uma linguagem permite que se utilize este poder. Em outras palavras, quando um programadorbusca dados e estruturas de programa adequados para a soluo de um problema, existe a tendncia dele pensarapenas em estruturas que so expressas nas linguagens com as quais ele est familiarizado. Porm, estudando-se as construes fornecidas por um grande nmero de linguagens, e a maneira na qual estas construes soimplementadas, um programador aumenta o seu vocabulrio de programao. O entendimento daimplementao de tais construes tambm muito importante, pois para usar uma determinada construoenquanto se est trabalhando com uma linguagem que no a fornea diretamente, necessrio que oprogramador 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 variedadede linguagens de programao possvel escolher a linguagem certa para um projeto particular, reduzindodesta maneira a quantidade de cdigo necessria.

    Para facilitar o aprendizado de uma nova linguagem: o conhecimento de uma variedade de construes delinguagens de programao e tcnicas de implementao possibilita que o programador aprenda a trabalharcom uma nova linguagem de programao mais facilmente. Alm disso, o programador rapidamente conseguever com maior clareza como a linguagem apropriadamente usada, quais construes so mais custosas parausar e quais so relativamente baratas [PRA 75].

    Para tornar mais fcil o projeto de uma nova linguagem: este benefcio mais importante do que pareceinicialmente. 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 cadasistema de computador que desenvolvido deve ter uma linguagem incorporada para fornecer uma interaohomemmquina. Um bom entendimento dos princpios da LP pode auxiliar no projeto desta interface. Almdisso, muitas LP modernas possuem a propriedade de serem extensveis de vrias maneiras. Isto significa que oprogramador pode aperfeioar a linguagem atravs da adio de novos tipos de dados e operadores. Nestaslinguagens, cada programa, na verdade, consiste no projeto de uma nova linguagem no sentido de que oprogramador 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 utilizarmais eficientemente as facilidades encontradas nas LP atuais. Projetistas de LP, bem como projetistas de hardwaree gerenciadores de software, tambm beneficiam-se deste estudo. Ao entender as necessidades de implementaode uma LP, projetistas de hardware podem aperfeioar a maneira na qual as mquinas suportam as linguagens. Jos gerenciadores podero tomar diferentes decises de acordo com as caractersticas da LP utilizada [MAC 87].

  • Professora Isabel Harb Manssour Paradigmas de Linguagens I 3

    A partir do que foi descrito, deduz-se que h muito mais para se estudar em LP do que simplesmentecompreender as caractersticas fornecidas por uma variedade de linguagens. Na verdade, muitas caractersticassemelhantes das linguagens enganam, uma vez que a mesma caracterstica em duas linguagens diferentes pode serimplementada de duas maneiras diferentes, e, consequentemente, as duas verses podem diferir grandemente nocusto de uso [PRA 75]. Assim, estudando-se paradigmas de linguagens, possvel se tornar um usurio inteligentede LP. Isto inclui a habilidade de: escolher linguagens apropriadas para diferentes aplicaes, fazer uso efetivo eeficiente de uma linguagem no desenvolvimento de software, e aprender rapidamente novas linguagens [DER 90].

    1.2. Conceito de Linguagem de Programao

    O meio mais eficaz de comunicao entre pessoas a linguagem (lngua ou idioma), que consiste numconjunto de convenes e regras sistemtico para comunicao de idias ou troca de informaes. Com umalinguagem natural, como portugus, esta comunicao ocorre entre pessoas e a linguagem usada tanto na formafalada, como na forma escrita. Linguagens de programao, por sua vez, diferem das linguagens naturais de vriasmaneiras. Primeiro, a comunicao ocorre entre uma pessoa e uma mquina (computador). A segunda maiordiferena o contedo da comunicao, que, no caso da LP, conhecido como programa. Programas soseqncias de instrues que descrevem as tarefas a serem realizadas para alcanar a soluo de um determinadoproblema, e devem ser escritos numa LP para que possam ser executados num computador. Um terceiro exemplode caracterstica de comunicao atravs de uma LP, o meio utilizado. Desde que o computador o futuroreceptor, isto significa que os programas so representados simbolicamente como conjuntos de caracteres, emoposio, por exemplo, aos sons.

    Uma definio de trabalho para uma linguagem de programao : Uma linguagem de programao umalinguagem com o objetivo de ser usada por uma pessoa para expressar um processo atravs do qual um computadorpode resolver um problema [DER 90]. Em outras palavras, a LP faz a ligao entre o pensamento humano (muitasvezes de natureza no estruturada) e a preciso requerida para o processamento pela mquina. Os quatrocomponentes chave nesta definio de linguagem de programao so:

    Computador: a mquina que executar o processo descrito atravs do programa; Pessoa: o programador que serve como a origem da comunicao; Processo: a atividade que est sendo descrita atravs do programa; Problema: o sistema atual ou ambiente onde o problema surgiu.

    Outra definio usual : Linguagem de programao um conjunto de termos e de regras que permitem aformulao de instrues a um computador. Desta forma, a LP composta por dois elementos: Vocabulrio, queconsiste 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 seo1.5, que so:

    Sintaxe: o conjunto de regras que determina quais construes so corretas para formao dos programas equais no so; em outras palavras, preocupa-se com a forma dos programas (como expresses, comandos,declaraes, etc. so colocados juntos para formar programas).

    Semntica: a descrio da maneira que um programa sintaticamente correto interpretado ou executado; emoutras palavras, preocupa-se com o significado dos programas (como o programa vai se comportar quandoexecutado no computador) [DER 90, WAT 90].

    Torna-se interessante comentar que o principal objetivo de uma LP dar suporte ao programador nodesenvolvimento dos sistemas. Isto inclui assistncia no projeto, implementao, teste, verificao e manutenodo software. Existe uma srie de caractersticas numa linguagem que contribuem para este objetivo. Entre ascaractersticas gerais que definem uma boa linguagem pode-se destacar:

    Simplicidade: clareza e conciso semntica (linguagem com um mnimo nmero de conceitos e estruturas), eclareza sinttica (sintaxe deve representar cada conceito de uma maneira apenas).

  • Professora Isabel Harb Manssour Paradigmas de Linguagens I 4

    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 sercombinados uns com os outros de uma maneira consistente; ortogonalidade reduz o nmero de excees dasregras 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 ealterar; afetada pelas caractersticas anteriores.

    Eficincia: a avaliao precisa de uma linguagem, baseada em critrios pr-definidos, extremamenteimportante; as medidas mais comuns so a eficincia da execuo do programa, da traduo do programa, e dacriao, teste e uso do programa [DER 90, PRA 75, SIL 88].

    1.3. Classes e Geraes

    possvel afirmar que um programa de computador uma abstrao da realidade, onde abstrao (seo1.5.2) consiste no processo de identificar as qualidades ou propriedades importantes do fenmeno que est sendomodelado, e ignorar todas as propriedades irrelevantes. Levando em considerao o nvel de abstrao, torna-sepossvel identificar trs classes de linguagens de programao, descritas a seguir e ilustradas na figura 1.1.

    Linguagem de Mquina: uma linguagem usualmente baseada num cdigo binrio, especfico para cada tipode 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 sosubstitudos por mnemnicos. Neste caso necessrio usar um montador (assembler), que consiste numprograma 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 sermanipulado com certa facilidade pelos programadores.

    Linguagem de Alto Nvel: a LP mais prxima da linguagem do homem, no requer conhecimento daarquitetura da mquina e portvel, isto , independente da mquina. Neste caso, o programa ou cdigo fonteprecisa ser traduzido para linguagem de mquina para poder ser executado. O cdigo ou programa objeto oresultado da traduo quando utilizado um compilador ou interpretador (seo 1.7).

    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 durouaproximadamente uma dcada, iniciou em 1955 e abrangeu o desenvolvimento das linguagens de programao deprimeira gerao. O segundo perodo, de 1965 a 1971, foi um tempo de consolidao em torno do modelo de umalinguagem, ALGOL 60, com o desenvolvimento de um grande nmero de linguagens derivadas dela, mas comnovas extenses atravs da adio de novas caractersticas importantes. No perodo final, 1972 em diante, osresultados das pesquisas preliminares foram colocados juntos para introduzir novos modelos e abordagens paralinguagens de programao.

    Figura 1.1 - Classes de linguagens de programao

    Linguagem de Alto Nvel

    Linguagemde

    Mquina

    Linguagem de BaixoNvel

  • Professora Isabel Harb Manssour Paradigmas de Linguagens I 5

    Entretanto, cronologicamente, as LP so usualmente classificadas em cinco geraes, que sero descritas apartir de agora. A estrutura das linguagens de primeira gerao so baseadas na estrutura dos computadores doincio da dcada de 60. Isto notrio especialmente nas estruturas de controle, que correspondem s instrues demquina. As instrues condicionais no so aninhadas e dependem fortemente do goto para construir qualquerestrutura de controle. Uma exceo o comando de iterao definida, como por exemplo o lao do do Fortran,que hierrquico nesta primeira gerao. Procedimentos recursivos no so permitidos na maioria das linguagens,Basic uma exceo, e h geralmente s um modo de passagem de parmetro, tipicamente por referncia.

    Tambm pode-se observar que esta gerao de LP orientada para mquina nos tipos de estrutura de dadosfornecidos. As estruturas de dados primitivas encontradas so nmeros de ponto flutuante e fixo de vriasprecises, caracteres e valores lgicos. Os construtores de estruturas de dados so vetores e registros. Assim comonas estruturas de controle, h pouca facilidade para organizao de dados hierrquica, isto , as estruturas de dadosno podem ser aninhadas, sendo a estrutura de registro do Cobol uma exceo. Nomes de variveis, por sua vez,so amarradas diretamente e estaticamente s localizaes de memria, pois no h gerenciamento dinmico dememria. As estruturas sintticas so caracterizadas atravs de comandos lineares, orientados a carto. Alm disso,a maioria destas linguagens de primeira gerao possui labels numricos que sugerem endereos de mquina. Asconvenes lxicas usuais, so ignorar espaos em branco e reconhecer palavras chave no contexto. Resumindo, ascaractersticas marcantes so a orientao para mquina e as estruturas lineares.

    A primeira linguagem da segunda gerao foi o Algol-60, e suas caractersticas so tpicas de todagerao. Inicialmente pode-se dizer que as estruturas desta gerao constituem aperfeioamentos e generalizaesdas equivalentes na primeira gerao. As estruturas de dados so muito prximas da primeira gerao, tendoalgumas generalizaes, tais como vetores dinmicos, porm continuam lineares. As linguagens de segundagerao geralmente no possibilitam tipos definidos pelo usurio, e uma das suas grandes contribuies so asestruturas de nome, que so hierarquicamente aninhadas. Isto permite um melhor controle do espao do nome euma alocao de memria dinmica e eficiente. Outra caracterstica a introduo das estruturas de bloco e decontrole estruturado, que eliminam a necessidade do uso de goto. Vrias estruturas de controle tambm foramaperfeioadas, permitindo o uso de procedimentos recursivos e a opo de escolha do modo de passagem deparmetro. Nesta gerao surgiu a distino entre variveis locais e globais e nas suas estruturas sintticas houve oavano em direo s linguagens livre de formatos, com convenes lxicas independentes de mquina.Construes caras e no muito eficientes tambm proliferaram na segunda gerao. Um exemplo de linguagem PL/I.

    A terceira gerao caracterizada por compensar os excessos da segunda gerao, enfatizando asimplicidade e a eficincia, e simbolizada pelo Pascal. As estruturas de dados mostram a troca da nfase damquina para a aplicao. Isto pode ser observado atravs do fornecimento de tipos de dados definidos pelousurio, que permitem que programadores criem os tipos de dados necessrios para as suas aplicaes, e atravsdos construtores de tipos orientados aplicao, tais como conjuntos e enumeraes. A terceira gerao tambm caracterizada por permitir que estruturas de dados sejam aninhadas, isto , organizadas hierarquicamente. Asestruturas de nome constituem uma simplificao do Algol-60, e as linguagens desta gerao geralmente possuemnovas amarraes e construtores de tipos compostos, tais como conjuntos. Estruturas de controle so simplificadas,como pode-se observar no lao for do Pascal, e criadas com nfase nas aplicaes, como por exemplo o casedo Pascal.

    Algumas caractersticas da quarta gerao constituem apenas uma consolidao e correo dascaractersticas da terceira gerao. Entretanto, novas facilidades importantes, tal como o suporte para programaoconcorrente, tambm so fornecidas. A contribuio mais importante desta gerao est no domnio das estruturasde nome, cuja principal caracterstica o fornecimento do encapsulamento, que suporta a separao daespecificao e da definio e ocultar informaes (abstrao de dados). A maioria das linguagens de quartagerao permitem que mdulos encapsulados sejam genricos (ou usem polimorfismo). Outra contribuiosignificativa est nas estruturas de controle, desde que h o suporte a programao concorrente. Vrias linguagensusam alguma forma de troca de mensagens como meio de sincronizao e comunicao entre tarefas concorrentes,e possuem um mecanismo de tratamento de excees para gerenciar erros do sistema e do usurio. Por outro lado, oframework bsico destas linguagens ainda seqencial. Os construtores de estruturas de dados so similares

  • Professora Isabel Harb Manssour Paradigmas de Linguagens I 6

    terceira gerao, porm alguns problemas, tal como a passagem de parmetros de vetores, foram corrigidos. Asestruturas de dados primitivas tendem a ser mais complicadas do que antes, devido ao controle e preciso de tiposnumricos. Finalmente, as estruturas sintticas da quarta gerao so mais abrangentes, tendo como exceo apreferncia por estruturas completamente agrupadas entre parnteses. Exemplos de linguagens desta gerao soAda, Modula-2, e Clu.

    Na quinta gerao, marcada pela execuo de vrios experimentos, no foi identificada uma idiapredominante 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 operaesde atribuio. Isto leva ao uso da recurso como mtodo de iterao e da notao polonesa como estrutura sintticabsica. Sua estrutura de dados principal a lista, e as estruturas de controle bsicas so as expresses condicionaise a recurso. Estas linguagens possuem um alto nvel de abstrao, permitem a avaliao dos programas em vriasordens diferentes, o que as tornam adequadas para uso em computadores paralelos, e so adequadas para aplicaesmatemticas. Um exemplo deste tipo de linguagem LISP. As linguagens lgicas, por sua vez, so de alto nvel eorientadas a aplicao. A programao com este tipo de linguagem clara, rpida, precisa e simples, pois osprogramas so descritos em termos de predicados e h uma separao da lgica e do controle durante aprogramao. Prolog um exemplo de linguagem lgica. J a programao orientada a objetos fornece um modelode 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 exemplodeste tipo de linguagem o Smalltalk [MAC 87].

    1.4. Escolha de uma Linguagem de Programao

    Devido a existncia de um grande nmero de LP o programador deve escolher qual a mais adequada paraele usar em cada aplicao. Existem vrias consideraes que devem ser levadas em conta, tcnicas e no tcnicas,estratgicas e tticas. Resumidamente, pode-se dizer que a escolha da linguagem mais adequada est intimamenteligada a trs fatores: complexidade do sistema a ser desenvolvido; caractersticas peculiares da aplicao (porexemplo, sistemas de tempo real); e facilidades que as linguagens oferecem ao suporte de metodologias dedesenvolvimento [SIL 88, WAT 90].

    Para pequenos programas, feitos e mantidos por uma pessoa, provvel que a linguagem mais adequadaseja aquela melhor dominada pela pessoa. No entanto, para grandes sistemas com programao em tempo real,vrios tipos de excees a serem tratadas e muitas pessoas envolvidas, a escolha da linguagem mais adequada deveser feita criteriosamente [SIL 88]. Assim, Dershem e Jipping [DER 90] apresentaram sete critrios importantes quedevem considerados quando se est decidindo qual LP utilizar. Estes critrios so:

    Implementao: Refere-se ao tradutor da linguagem que utilizado. Neste caso, existem duas consideraesimportantes relacionadas implementao, sua disponibilidade e sua eficincia. A disponibilidade tem impactona deciso de quando usar a LP dada uma aplicao e a plataforma onde ele dever ser utilizada. A eficinciarefere-se velocidade de execuo de programas objetos criados pelo tradutor. Por exemplo, Fortran muitoutilizado porque o seu compilador contm vrias caractersticas de otimizao e produz um cdigo objetoextremamente eficiente.

    Conhecimento do Programador: Apesar de ser interessante assumir que todos os programadores estoigualmente 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 duaslinguagens e mais eficiente quando usa estas linguagens. Apesar de que aprender a usar uma nova e maisapropriada linguagem para uma determinada aplicao uma tima experincia, o empregador raramente estdisposto a dar o suporte financeiro, principalmente porque tambm envolve o treinamento de vriosprogramadores 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 programasdesenvolvidos em Cobol.

    Portabilidade: se a possibilidade de executar uma aplicao em uma grande variedade de computadores importante, ento a portabilidade um critrio significativo na escolha da linguagem. Linguagens que aderem apadres, como Fortran, Cobol e Ada, so escolhas mais seguras em situaes onde h linguagens cujas

  • Professora Isabel Harb Manssour Paradigmas de Linguagens I 7

    implementaes so dependentes da mquina e resultam em mais tempo e custo quando portadas para um novosistema.

    Sintaxe: algumas aplicaes adaptam-se melhor sintaxe de uma linguagem do que as outras. Por exemplo, asintaxe de Fortran foi projetada para atender s exigncias de programas matemticos, enquanto linguagensmais 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 umaaplicao requer ou facilitada por uma certa caracterstica da linguagem, ento a linguagem que forneceesta(s) caracterstica(s) deve ser escolhida. Por exemplo, se a programao concorrente necessria, deve-seescolher uma LP concorrente, como Ada.

    Ambiente de Programao: a disponibilidade de um rico ambiente de programao para suportar odesenvolvimento de sistemas pode influenciar na escolha da linguagem. Se a linguagem est disponvel em umambiente que fornece um bom editor, um debugger simblico, um sistema de controle de cdigo fonte, janelas,ou outras ferramentas de desenvolvimento, o esforo necessrio para produzir sistemas pode sersignificativamente reduzido. Apesar de algumas destas ferramentas estarem disponveis em ambientesindependentes da linguagem, tal como o sistema operacional, freqentemente elas so especficas implementao de uma linguagem. A disponibilidade de bibliotecas tambm um fator que deve serconsiderado.

    Modelo de Processamento: Uma considerao final na seleo de uma LP o modelo de processamento noqual a linguagem baseada. For exemplo, se uma aplicao requer uma quantidade significativa de buscaheurstica, uma linguagem que segue o modelo orientado a lgica seria apropriada. Simulaes, por sua vez,so geralmente mais facilmente implementadas usando uma LP orientada a objetos.

    Watt [WAT 90] tambm fez um levantamento das questes que devem ser levadas em considerao naescolha da LP, dividindo-as em questes estratgicas e tticas. As questes estratgicas, que envolvem projeto eintegrao de software, so:

    Abstrao: o quanto a linguagem d suporte ao conceito de abstrao, que permite separar o que um mdulodeve fazer de como ele ser implementado;

    Desenvolvimento de grandes programas: se a linguagem permite que programas sejam construdos a partir demdulos escritos e verificados separadamente;

    Reutilizao de software: se a linguagem permite a reutilizao de cdigo, e o quanto isto pode acelerar odesenvolvimento 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 deobjetos na rea de aplicao do projeto;

    Nvel: o quanto uma linguagem alto ou baixo nvel, encorajando o programador a pensar em termosrelacionados 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;

    Eficincia: se a linguagem capaz de ser implementada eficientemente; Compilador: se existe um compilador de boa qualidade disponvel para a linguagem; Familiaridade: o quanto o programador est familiarizado com a linguagem, ou se tem disponvel um

    treinamento adequado.

    interessante comentar que nenhuma destas questes so especficas para uma rea de aplicaoparticular. Isto indica que qualquer linguagem razovel que passa por estas questes pode ser bem aceita na maioriadas reas de aplicaes. Isto tambm explica porque Pascal to satisfatrio (e insatisfatrio) em uma grandevariedade de aplicaes [WAT 90].