Anda di halaman 1dari 16

Introduo

Paradigmas de Linguagens de Programao


Heloisa de Arruda Camargo
Motivos para estudar os conceitos de linguagens de programao
Aumento da capacidade de expressar idias
difcil para as pessoas conceberem estruturas que no podem descrever, verbalmente ou por escrito. Uma LP impe limites quanto s estruturas de controle, de dados e abstraes, limitando tambm as formas de algoritmos possveis. Conhecer vrias linguagens diminui essas limitaes.
1 2

Maior conhecimento para a escolha de linguagens apropriadas


programadores que conhecem uma ou duas linguagens tendem a usar sempre a mesma, com a qual esto familiarizados Isso impede a escolha de linguagens mais adequadas para cada projeto Impede tambm a obteno de vantagens como clareza, facilidade de correo, etc...

Maior capacidade para aprender novas linguagens


LP e ferramentas esto em contnua evoluo O aprendizado constante necessrio Quanto mais se conhece sobre linguagens de programao mais fcil aprender linguagens novas

Melhor entendimento da importncia da implementao


Entender questes de compilao ajuda compreender como certas construes da linguagem so executadas Isso ajuda compreender questes de eficincia relativa (eficincia X versatilidade)

Diminuio da resistncia ao uso de linguagens novas ( e eventualmente melhores)


Nem sempre as linguagens mais populares so as melhores As vezes, linguagens ruins continuam sendo usadas porque programadores e gerentes de desenvolvimento de software, que podem tomas decises sobre qual linguagem utilizar no entendem as vantagens de linguagens diferentes

Aumento da capacidade de projetar novas linguagens


(ou partes de um sistema cujo desenvolvimento siga os mesmos princpios)
5

Alguns conceitos adotados para o estudo dos paradigmas


Domnios de Aplicao Influncias no projeto da linguagem
arquitetura de mquina metodologia de desenvolvimento

Propriedades desejveis das LPs Legibilidade Redigibilidade Confiabilidade Eficincia Ortogonalidade Reusabilidade Modificabilidade Portabilidade

Mtodo de implementao Interpretada, Compilada, Hbrida

Domnios de aplicao
Aplicaes comerciais Aplicaes cientficas
Computadores foram projetados inicialmente para aplicaes cientficas (1940) Caractersticas da aplicao:
Estruturas de dados simples Exigem grande nmero de clculos com ponto flutuante

Estruturas de dados mais comuns: vetores e matrizes Estruturas de controle mais comuns: iterao e seleo Caracterstica desejvel: eficincia Exemplos: FORTRAN, ALGOL60, PASCAL

Linguagens e computadores especiais foram desenvolvidos com esse propsito Caractersticas: recursos para produzir relatrios elaborados, maneiras precisas de descrever e armazenar nmeros decimais e caracteres e habilidade para especificar operaes aritmticas decimais Com o surgimento dos micros, aplicaes de negcios passaram a ser feitas com sistemas de planilhas e de banco de dados Exemplo: COBOL (1960) (no so estudadas no curso)
9 10

Programao de sistemas Aplicaes de Inteligncia Artificial


Caractersticas da aplicao: computaes simblicas ao invs de numricas Estruturas de dados mais comuns: listas Estruturas de controle mais comuns: recurso e unificao Caracterstica desejvel: versatilidade (meta-programao) Exemplos: LISP (funcional) PROLOG ( lgica) Algumas linguagens foram projetadas para desenvolvimento de software bsico: sistemas operacionais e ferramentas de suporte programao. Caractersticas da aplicao: ser rpida e ter recursos de baixo nvel Exemplos: Para mainframes IBM: PL/S, dialeto do PL/I Para digital: BLISS Para Burroughs: ALGOL estendido C (usada para escrever o sistema UNIX)

11

12

Influncias no projeto da linguagem


Linguagens de script
So usadas colocando-se uma lista de comandos (script) em um arquivo para serem executados Eram ferramentas comuns nos primeiros SO, controlados por linha de comando Tm muitos recursos para processamento de textos So interpretadas Tornaram-se mais populares com o advento da WWW Exemplos: awk, tcl, Perl Arquitetura de Computadores A maioria das linguagens populares nos ltimos anos foi projetada com base na arquitetura existente: Von Neumann So chamadas linguagens imperativas Caractersticas da arquitetura:
Dados e programas armazenados na mesma memria CPU separada da memria, que realiza operaes Dados e instrues so canalizados para a CPU Resultados voltam para memria

Linguagens especficas Linguagens para web


13

14

Caractersticas das linguagens imperativas em funo da arquitetura:


Variveis como clulas de memria Comando de atribuio Repetio iterativa

Metodologias de Programao movimento de programao estruturada: final dos anos 60, incio dos 70
Motivo: custo maior da computao mudou de hardware para software.

Iterao rpida, porque as instrues esto em seqncia. Desencoraja o uso de recurso, apesar da recurso ser muitas vezes mais natural. Em LISP e PROLOG a essncia da programao diferente, no necessita o uso de variveis e atribuies. So menos eficientes.

Como decorrncia desse movimento surgiram:


Metodologias de desenvolvimento de software:
Projeto top-down Refinamento passo a passo Assim foram identificadas as primeiras deficincias das linguagens: Incompleteza na verificao de tipos Comandos de controle inadequados
16

15

Mudana de enfoque:
Programao dirigida por processos Programao dirigida por dados

A evoluo da programao dirigida por dados originou no incio dos anos 80 a metodologia orientada a objetos, que inclui:
Abstrao de dados (encapsulamento) Herana Vinculao dinmica de tipos Exemplos: Smalltalk, Ada, Java, C++, CLOS, Prolog ++

nfase no projeto de dados Uso de tipos abstratos de dados


17

18

Mtodos de Implementao de Linguagens


a forma como uma linguagem de programao se comunica ( entendida e executada) com o computador
O computador possui uma linguagem de mquina de nvel baixo que oferece operaes primitivas O software de sistema deve criar uma interface com os programas de nvel mais alto.
Compilador Pascal Compilador FORTRAN Sistema Operacional Compilador C Interpretador de macro instrues Interpretador Lisp

O sistema operacional e as implementaes de linguagens so dispostos em camadas sobre a interface de linguagem de mquina de um computador.

Ncleo da mquina
Compilador ADA

19

20

Mtodos de implementao de linguagens:

Compilao
Programas so traduzidos para linguagem de mquina e so executados diretamente no computador Envolve dois processos distintos:
Traduo (compilao) Execuo

Compilao Interpretao Implementao hbrida

A execuo iniciada depois que a traduo concluda A execuo no tem acesso ao programa fonte Vantagem: execuo rpida

Programa fonte
21

traduo

Programa objeto
22

Interpretao
O interpretador executa diretamente as instrues do programa fonte, sem traduzir Programa fonte para linguagem de mquina Simula, por software, uma mquina virtual Dados de entrada onde o ciclo de execuo entende os comandos da linguagem de alto nvel Desvantagem: execuo de 10 a 100 vezes Interpretador mais lenta, devido ao passo de decodificao da instruo de alto nvel, que mais complexa Tem acesso ao programa fonte, para Resultados depurao ou mesmo para alterar o cdigo sendo executado
23

Implementao Hbrida
Mescla compilao com interpretao Programas fonte so traduzidos para uma linguagem intermediria que interpretada Tem maior portabilidade que uma linguagem compilada So mais rpidas que uma linguagem interpretada - instrues intermedirias so projetadas para serem interpretadas facilmente

24

Linguagens imperativas X Linguagens Declarativas


Exemplo:
Pearl Java (primeiras verses) Cdigo intermedirio :bytecodes Algumas implementaes usam compilao JIT Alguns sistemas implementam compilao de bytecodes
Programa fonte traduo Cdigo intermedirio
Dados de entrada Interpretador

Linguagens imperativas Fundamentadas na idia de computao como um processo que realiza mudanas de estados Foco da programao: especificar COMO um processamento deve ser feito no computador Forte influncia da arquitetura de mquina Variveis so vistas como clulas de memria Conceitos fundamentais: varivel, valor e atribuio

Resultados

OBS: Algumas linguagens tm verses interpretadas e compiladas

25

26

Alguns conceitos adotados para o estudo dos paradigmas


Linguagens declarativas Foco da programao: especificar O QUE deve ser feito, sem detalhes de operaes da arquitetura da mquina Variveis so vistas como incgnitas e no como clulas da memria No existe operao de atribuio Programas so tipicamente especificaes de relaes ou funes
Domnios de Aplicao Influncia da arquitetura de mquina Imperativa X Declarativa Influncia da metodologia de desenvolvimento Flexvel X Eficiente Mtodo de implementao Interpretada, Compilada, Hbrida

27

28

Propriedades desejveis das LPs Legibilidade Redigibilidade Confiabilidade Eficincia Ortogonalidade Reusabilidade Modificabilidade Portabilidade

Paradigmas de Linguagens de Programao (descrio geral) Lgico Funcional Imperativo Orientado a Objetos Concorrente Linguagens de Marcao

29

30

Paradigma Lgico
Processamento Simblico (usa smbolos e conceitos ao invs de nmeros e expresses) Declarativo Usa clusulas da lgica de Primeira Ordem Estrutura principal: listas So baseadas em regras A ordem de especificao das regras no fundamental A ordem de execuo determinada na prpria execuo Originalmente interpretado rea de aplicao: IA

Paradigma Funcional
Baseada em funes matemticas Combina funes elementares para formar funes mais complexas Estrutura principal: listas Voltada para programao simblica Originalmente interpretado rea de aplicao: IA

31

32

Paradigma Imperativo
Tambm chamado de Estruturado ou procedural Grande influncia da arquitetura de mquina Componentes principais:
Variveis como posies de memria Comandos de atribuio Repetio por iterao e seleo

Paradigma Orientado a Objetos


Enfoque no projeto de dados Prov recursos para:
Encapsulamento Organizao do acesso a dados Mecanismo de herana

Altamente modular e reusvel Programao dirigida por dados rea de aplicao: geral
33 34

Programao dirigida por processos rea de aplicao: cientfica, sistema

Paradigma Concorrente
Facilita a construo de programas para execuo concorrente (simultnea) de vrias tarefas computacionais interativas As tarefas podem ser implementadas como programas separados ou como um conjunto de processos criados por um nico programa. Essas tarefas tambm podem ser executadas por um nico processador, vrios processadores em um nico equipamento ou processadores distribudos por uma rede. Principais focos da programao concorrente:
interao e a comunicao correta entre as diferentes tarefas coordenao do acesso concorrente aos recurso computacionais
35

Linguagens de marcao
Normalmente no so consideradas um paradigma de programao um conjunto de cdigos aplicados a um texto ou a dados, com o fim de adicionar informaes particulares sobre esse texto ou dado, ou sobre trechos especficos. HTML: linguagem de marcao amplamente usada para texto XHTML evoluo da HTML, mais eficiente para separao entre a estrutura e o contedo de uma pgina de forma mais organizada e eficiente. XML: linguagem de marcao de dados. Envolve a codificao simples de seqncias de dados em um arquivo de computador no formato texto-puro, ou seja, capaz de ser lido tanto por pessoas quanto por mquinas.
36

Propriedades desejveis das linguagens de programao


LEGIBILIDADE Facilidade para se ler e entender um programa; Melhora a tarefa de manuteno dos programas; Caractersticas que favorecem a legibilidade:
Simplicidade recursos para estruturao de dados Recursos para estruturao de controle

Efeito Colateral Efeito causado por uma expresso, comando ou procedimento que permanece aps a execuo do mesmo e no o objetivo principal dessa expresso, comando ou procedimento Alguns exemplos:
Alterao de variveis globais no corpo de uma funo Expresso x++ do C++ Predicado corte (!) do prolog

Fatores que prejudicam a legibilidade:


Uso extensivo de gotos permitem a programao noestruturada Estruturas de dados no adequadas, ou muito elementares Sobrecarga de operadores usar o mesmo smbolo com significados diferentes Efeito colateral Marcadores de blocos (begin-end, { - } ) padronizados
37

38

REDIGIBILIDADE Facilidade de escrever o programa, permitindo ao programador se concentrar nos algoritmos centrais do programa sem se preocupar com aspectos no relevantes; Principal diferena entre linguagens de mquina e linguagens de alto nvel; Caractersticas que favorecem a redigibilidade:
Simplicidade suporte para abstrao
Abstrao de processo (ex: subprograma) Abstrao de dados (ex: dados estruturados, classes)

Fatores que prejudicam a redigibilidade:


Construes muito complexas Muitas construes primitivas Falta de recursos para abstrao Falta de estruturas de dados e controle

Expressividade
Uma grande quantidade de computao pode ser realizada em um programa muito pequeno; Construes mais compactas;
39

OBS: LEGIBILIDADE e REDIGIBILIDADE podem ser conflitantes

40

Fatores que prejudicam a confiabilidade:


CONFIABILIDADE Programa confivel se ele se comportar de acordo com suas especificaes sob todas as condies Caractersticas que favorecem a confiabilidade:
Verificao de tipos
Em tempo de compilao Em tempo de execuo

Permitir aes perigosas: no verificar intervalos de ndices de arrays, aritmtica de ponteiros, no verificar compatibilidade de tipos; Aliasing dois ou mais mtodos ou nomes que fazem referncia mesma varivel Recursos pobres para escrita do programa

Tratamento de excees
Capacidade do programa interceptar erros durante a execuo tomar medidas corretivas e prosseguir

41

42

ORTOGONALIDADE

EFICINCIA Est relacionada com o tempo de execuo de um programa Algumas aplicaes exigem que a execuo seja rpida Em geral, fatores que melhoram a confiabilidade, abstrao e legibilidade dos programas, diminuem a eficincia
43

Capacidade da LP permitir ao programador combinar seus conceitos bsicos sem que se produzam efeitos anmalos nessa combinao Quanto menor o nmero de excees, maior a ortogonalidade Um recurso ortogonal independente do contexto em que aparece no programa Caractersticas que favorecem a ortogonalidade:
Nmero pequeno de construes primitivas que podem ser combinadas de forma regular

44

Fatores que prejudicam a ortogonalidade:


Nmero alto de excees s regras da linguagem: Operadores que no podem ser aplicados a qualquer tipo de operandos Subprogramas que no podem retornar qualquer tipo de valor

MODIFICABILIDADE Facilidade de alterar o programa sem implicaes em outras partes do programa Caractersticas que favorecem a modificabilidade:

REUSABILIDADE Propriedade de usar o mesmo cdigo para vrias aplicaes Ligada a recursos de abstrao da linguagem: subprogramas com parmetros, bibliotecas de subprogramas, classes. Constantes simblicas Separao entre interface e implementao na construo de subprogramas Tipos abstratos de dados Estrutura homognea das unidades bsicas da linguagem:
Regras do Prolog Funes do LISP
45 46

Evoluo das Principais Linguagens de Programao


FLOW-MATIC 57 FORTRAN I ALGOL 58 58 FORTRAN II LISP 59 APL COBOL ALGOL 60 60 61 62 FORTRAN IV CPL SNOBOL SIMULA I 63 64 BASIC PL/I 65 ALGOL W 66 SIMULA 67 67 ALGOL 68 68 BCPL 69 B 70 C Pascal 71 72 73 74 Scheme 75 76 MODULA-2 77 78 FORTRAN 77 79 SmallTalk-80 80 81 82 ICON Ada 83 83 COMMON 84 C++ 85 LISP 86 87 Oberon QuickBASIC 88 ANSI-C MODULA-3 89 Eiffel VisualBASIC 90 FORTRAN 90 91 92 93 48 94 JAVA Ada 95 95

PORTABILIDADE Propriedade dos programas escritos em uma LP se comportarem da mesma maneira independente do compilador, sistema operacional ou hardware utilizado Caractersticas que favorecem a portabilidade:
Implementao hbrida Padronizao da especificao da linguagem desde o seu projeto (pode prejudicar a eficincia)

47

Evoluo das Principais Linguagens de Programao


FORTRAN
primeira linguagem de alto nvel compilada bem aceita primeiras verses eram fortemente imperativas e a meta principal era da eficincia Fortran 90 inclui modificaes radicais: alocao dinmica de arrays, ponteiros, registros, subprogramas recursivos e outras

ALGOL 60
Tentativa de definir uma linguagem universal introduziu o conceito de estrutura em bloco, passagem de parmetro por valor e por nome, procedimentos recursivos, arrays stack dinmicos. Foi a primeira linguagem descrita formalmente, usando a BNF, que tinha sido proposta recentemente. linguagem muito sofisticada e poderosa, mas no conseguiu um uso generalizado

Programao Funcional LISP


Originou da necessidade de processamento simblico em listas encadeadas, para aplicaes em Inteligncia Artificial A programao realizada por aplicaes de funes a argumentos As primeiras verses eram estritamente funcionais, as outras incluem aspectos imperativos Descendentes: Scheme, Common LISP

COBOL Linguagens Comerciais


Voltada para aplicaes comerciais Muito utilizada mas influenciou pouco outras linguagens Adequada para a gerao de relatrios de contabilidade

49

50

BASIC
Prioriza rapidez de programao em vez de eficincia de execuo Muito utilizada mas pouco aceita nos meios cientficos, por apresentar estutruras ruins nos programas fcil de ser aprendida por principiantes e pode ser instalada em computadores com pouca memria Verses contemporneas muito utilizadas: Quick Basic e Visual Basic

APL e SNOBOL
No so baseadas em outras linguagens So linguagens dinmicas: tipificao dinmica e alocao de armazenagem dinmica APL permite que arrays sejam manipulados como variveis escalares SNOBOL visa o processamento de texto

PL/I
Representa a primeira tentativa em grande escala de projetar uma linguagem que poderia ser usada para um amplo espectro de reas de aplicao linguagem muito complexa que inclui recursos de vrias outras apesar de ter sido a primeira a incluir diversas facilidades entre essas os ponteiros, manipulao de excees e a concorrncia hoje essas construes so consideradas mal projetadas
51

SIMULA 67
Marcou a origem da abstrao de dados Derivada do ALGOL 60, projetada para aplicaes de simulao Oferece suporte a corrotinas e estrutura de classes

52

ALGOL 68
incluso dos tipos de dados definidos pelo usurio tinha uma linguagem elegante e concisa para descrever a sintaxe, mas desconhecida. Influenciou todas as linguagens imperativas desenvolvidas depois

Pascal
projetada especificamente para ensinar programao caracteriza-se por combinar simplicidade e expressividade

C
originalmente projetada para programao de sistemas mas adequada a uma ampla variedade de aplicaes projetada e implementada em 1972 tem muitas instrues de controle e facilidades de estruturao de dados tem um rico conjunto de operadores que permitem uma expressividade alta no possui verificao de tipo portanto uma linguagem muito flexvel e ao mesmo tempo insegura
54

Modula-2
Baseada no Pascal e os principais recursos eram os mdulos, que fornecem suporte para tipos abstratos de dados

Modula-3
Adiciona ao Modula 2 classes e objetos para suporte programao orientada a objetos, para manipulao de excees, para coleta de lixo e para suporte concorrncia
53

Oberon
Adicionou o recurso de extenso de tipos a Modula 2 para permitir programao orientada a objetos. Retirou muitos recursos da Modula 2 tornado-se uma linguagem simples e pequena.

Prolog
linguagem de programao predicados de 1a. ordem Linguagem declarativa A programao no baseada em procedimentos, mas sim em declaraes lgicas que estabelecem relaes entre objeto Criada para aplicaes em Inteligncia Artificial baseada na lgica de

Delphi
derivado do Pascal. hbrido, semelhante ao C++, a medida que foi criado pela adio de suporte orientado a objeto a uma linguagem imperativa existente
55

56

ADA
resultado do mais extensivo e dispendioso esforo de projeto de uma linguagem j realizado oferece recursos para encapsular objetos de dados, facilidades para manipulao de excees, unidades de programa genricas e execuo concorrente de unidades, entre outros

SmallTalk
As unidades do programa so objetos, estruturas que encapsulam dados locais e um conjunto de operaes chamados de mtodos tudo so objetos, desde constantes inteiras a grandes sistemas de software complexos tambm um ambiente desenvolvimento de software completo de

ADA 95
Derivou de uma reviso da ADA, baseada nos requisitos: capacidades de interface, suporte para programao orientada a objetos, bibliotecas mais flexveis e melhores mecanismos de controle para dados compartilhados
57

58

C++
constri facilidades de linguagem sobre o C para suportar grande parte daquilo em que o Smalltalk foi pioneiro possui o mecanismo classe/objeto, permite herana simples e herana mltipla, sobrecarga de operadores e funes e vinculao dinmica Linguagem muito popular, herdou as inseguranas do C

Eiffel
Hbrida, com recursos imperativos e orientados a objeto

JAVA
Baseou-se no C++ mas foi especificamente projetado para ser menor, mais simples e mais confivel. No tem ponteiros, mas sim tipo de referncia no possvel escrever subprogramas independentes, possui somente herana simples e interfaces , e coleta de lixo implcita Muito utilizada para programao para web Oferece o mesmo poder que o C++, e mais confivel.

59

60

Sites sobre Histria das Linguagens de Programao:


http://www.levenez.com/lang/ http://www.oreilly.com/pub/a/oreilly/news/langu ageposter_0504.html http://www.digibarn.com/collections/posters/ton gues/
61

Anda mungkin juga menyukai