• Nenhum resultado encontrado

1LM-Introdução

N/A
N/A
Protected

Academic year: 2021

Share "1LM-Introdução"

Copied!
108
0
0

Texto

(1)

1 - Introdução

Linguagens de Programação

Prof. Laurence Rodrigues do

(2)

Introdução

• Porque estudar os conceitos de

linguagens de programação?

• Quais são os benefícios potenciais

relativos ao estudo de conceitos de

linguagens de programação?

(3)

Introdução

1. Aumento na capacidade de expressar idéias

2. Maior embasamento na escolha de linguagens de programação

3. Aumento na capacidade de aprendizado de novas linguagens

4. Melhor entendimento da importância da implementação

5. Aumento na capacidade de projetar novas linguagens

(4)

1- Aumento na capacidade

de expressar idéias

• As linguagens de programação na qual

nós desenvolvemos software os impõe

limites

– Tipos de estruturas de controle

• For, while, do while, foreach, repeat until, etc

– Estruturas de dados

• Structs, records, class, etc

– Abstrações

(5)

1- Aumento na capacidade

de expressar idéias

• O conhecimento de uma variedade mais ampla de recursos dentro das linguagens de

programação reduz estas limitações

• Os desenvolvedores podem expandir o seu conhecimento em determinada linguagem de programação aprendendo novas construções • O estudo dos conceitos das linguagens de

programação encoraja os desenvolvedores a conhecer e aplicar os recursos das linguagens de programação

(6)

2 - Maior embasamento na escolha

de linguagens de programação

• Muitos programadores quando lhes é

dada a possibilidade de escolha das

linguagens para um novo projeto

• Continuam a usar aquela com a qual

estão mais familiarizados, mesmo que ela

seja pouco adequada

• Se tais desenvolvedores conhecessem

outras linguagens de programação, estes

poderiam fazer melhores escolhas

(7)

3 - Aumento na capacidade

de aprendizado de novas linguagens

• O processo de aprender uma nova linguagem de programação pode ser extenso e difícil,

principalmente para desenvolvedores que conhecem uma ou duas linguagens de

programação

• Assim que for adquirida uma completa

compreensão dos conceitos fundamentais das linguagens de programação, será mais fácil o aprendizado da nova linguagem de

(8)

4 - Melhor entendimento da

importância da implementação

• Em alguns casos, a compreensão das

questões de implementação leva a um

entendimento do porquê das linguagens

de programação serem projetas daquela

maneira

• Se entendermos estas escolhas,

utilizaremos os recursos presentes nas

linguagens de programação de modo mais

inteligente

(9)

5 - Aumento na capacidade

de projetar novas linguagens

• Para um estudante a possibilidade de vir a

projetar uma nova linguagem de

programação no futuro pode parecer

remota

• Linguagens de programação voltadas

para dispositivos específicos

– Impressoras - PPFA (Page Printer Format Aid) – IBM

– Celulares e tablets – iOS (Apple)

(10)

6 - Avanço global

da Computação

• Nem sempre as linguagens de

programação mais populares são as

melhores

• Algumas linguagens de programação se

tornaram popular porque aqueles com

capacidade de decisão as tinham como

preferidas, desconhecendo características

de outras linguagens de programação,

(11)

Introdução

• Domínios de Programação

– Os computadores são usados em uma infinidade de diferentes áreas, desde o controle de usinas elétricas e nucleares à armazenagem de registros de cheques pessoais

– Por causa desta grande diversidade,

linguagens de programação com objetivos muito diferentes tem sido desenvolvidas

(12)

Introdução

• Domínios de Programação

– Aplicações científicas – Aplicações comerciais – Inteligência artificial – Programação de sistemas – Linguagens de scripting

(13)

Domínios de Programação

• Aplicações científicas

– Usam estruturas de dados simples (vetores e matrizes)

– Exigem um grande número de computações aritméticas em números reais

– São geralmente linguagens de alto nível

• Principal concorrente é a Assembly (linguagem de montagem)

– A eficiência (velocidade) é a principal preocupação – A primeira linguagem para aplicações científicas foi o

(14)

Aplicações científicas

(15)

Aplicações científicas

(16)

Domínios de Programação

• Aplicações comerciais

– Primeira linguagem comercial bem sucedida foi o Cobol (foi criada em 1960)

– São caracterizadas por

• Facilidades na construção de relatórios elaborados

• Maneiras precisas de descrever

• Armazenamento de números decimais e textos • Capacidade de especificar operações aritméticas

(17)

Domínios de Programação

• Inteligência Artificial (IA)

– É uma área abrangente das aplicações de

computador caracterizada pelo uso de computações simbólicas (CS)

• CS: manipulamos símbolos ao invés de manipular números • Usa-se mais listas encadeadas ao invés de matrizes

– Primeira linguagem: Lisp (paradigma funcional) – Atualmente usa-se extensamente a linguagem de

(18)

Domínios de Programação

• Programação de Sistemas

– É formado pelo sistema operacional e todas as ferramentas de suporte à programação de um computador

• Drivers, APIs, etc

– Tem que oferecer uma execução rápida – Deve ter recursos de baixo nível que

permitam ao software fazer interface com os dispositivos externos

(19)

Domínios de Programação

• Programação de Sistemas

– O sistema operacional UNIX foi escrito quase que inteiramente em C

– O que tornou relativamente fácil a portabilidade deste SO para máquinas diferentes

• Máquinas com arquiteturas diferentes!

– C é uma boa linguagem para se desenvolver software para SO

• Consegue-se desenvolver em baixo nível

• Sua execução é eficiente (ela é muito rápida)

• Não sobrecarrega o desenvolvedor com muitas restrições de segurança

– Acesso a certas regiões de memória – Não inicializa variáveis, etc

(20)

Domínios de Programação

• Linguagens de Scripting

– Se desenvolveu lentamente nos últimos 25 anos – São usadas colocando-se uma lista de comandos,

chamados de script, em um arquivo para serem executados

– Ex: Ksh (korn shell), Awk, Tcl/Tk, Perl e JavaScript, etc

– Perl desenvolveu significativamente e tornou-se uma linguagem de programação poderosa, ainda que um tanto primitiva

(21)

Domínios de Programação

• Linguagens de Propósitos Especiais

– Uma grande variedade de linguagens para propósitos especiais surgiram no decorrer dos últimos 40 anos

– RPG: produzir relatórios comerciais – APT: programação de máquinas

programáveis

(22)

Linguagens de

(23)

Linguagens de

(24)

Linguagens de

(25)

Critérios para Avaliação

- Linguagem de Programação

• Examinar os conceitos fundamentais das várias construções e das capacidades das linguagens de programação

• Concentrando nos impactos sobre o processo de desenvolvimento de software, incluindo até a manutenção

(26)

Critérios para Avaliação

- Linguagem de Programação

• Legibilidade

– Simplicidade global, Ortogonalidade, Instruções de controle, Tipos de dados e estruturas e

Considerações sobre a sintaxe

• Capacidade de escrita (Writability)

– Simplicidade e ortogonalidade, Suporte para abstração e Expressividade

• Confiabilidade

– Verificação de tipos, Manipulação de exceções, Apelidos e Legibilidade e capacidade de escrita

(27)

Critérios para Avaliação

- Linguagem de Programação

• Legibilidade

– É um dos critérios mais importantes para julgar uma linguagem de programação

– Mede a facilidade com que os programas podem ser lidos e entendidos

– Deve ser considerada no contexto do domínio do problema

• Simplicidade Global • Ortogonalidade

• Instruções de Controle

• Tipos de Dados e Estruturas • Considerações sobre a Sintaxe

(28)

Legibilidade

• Simplicidade Global

– Quão simples é uma linguagem de programação – Afeta fortemente a legibilidade

– Uma linguagem de programação com um grande

número de componentes básicos é mais difícil de ser aprendida do que uma com poucos desses

componentes

– Desenvolvedores tendem a usar um subconjunto destes componentes e ignoram os demais

– Surgirá um problema de legibilidade sempre que o autor do programa tiver aprendido um subconjunto diferente daquele que o leitor está familiarizado

(29)

Legibilidade

• Simplicidade Global

– Um outro problema é a multiplicidade de recursos

• Mais de uma maneira de realizar uma operação em particular

(30)

Legibilidade

• Simplicidade Global

– Um terceiro problema potencial é a sobrecarga de operador (overloading)

– Na qual um único símbolo tem mais de um significado

• + - utilizado para somar números inteiros e ponto flutuante

– Não há problema quanto a simplicidade global!

• + - aplicado para somar todos os elementos de matrizes unidimensionais

(31)

Legibilidade

• Ortogonalidade

– Significa que um conjunto relativamente

pequeno de construções primitivas pode ser combinado em um número relativamente

pequeno de maneiras para construir as estruturas de controle e de dados da linguagem

– Parte de uma simetria de relações entre primitivas

– Os ponteiros devem ser capazes de apontar para qualquer tipo de variável ou estrutura de dados

(32)

Legibilidade

• Ortogonalidade

– Está estreitamente relacionada à simplicidade

• Quanto mais ortogonal é o projeto de uma linguagem, menos exceções as regras de linguagem existirão

• Menos exceções significam um grau mais elevado de regularidade no projeto, o que torna a

linguagem mais fácil de ser aprendida, lida e entendida

(33)

Legibilidade

• Ortogonalidade

– Como exemplo a falta de ortogonalidade em uma linguagem de programação podemos citar a linguagem C

• Embora C possua dois tipos de dados estruturados, matrizes e structs

• Structs podem ser retornados de funções

(passados como valor), mas matrizes não (tendo que ser passados como referência)

(34)

Legibilidade

• Ortogonalidade

– Simplicidade em uma linguagem é o

resultado de uma combinação de um número relativamente pequeno de construções

primitivas e do uso limitado do conceito de ortogonalidade

– Os melhores exemplos são as linguagens funcionais

• Podem realizar tudo com uma única construção (função)

(35)

Legibilidade

• Instruções de Controle

– Reconheceu-se amplamente que o uso indiscriminado das instruções goto reduz drasticamente a legibilidade do programa

– Um programa que pode ser lido de cima a baixo é

muito mais fácil de entender do que o que exige pular de uma instrução a outra não-adjacente

– Restrições relativas ao uso de goto

• Elas devem preceder seus alvos

• Seus alvos nunca devem estar distantes • Seu número devem ser limitado

(36)

Legibilidade

• Instruções de Controle

– Reconheceu-se amplamente que o uso indiscriminado das instruções goto reduz drasticamente a legibilidade do programa

(37)

Legibilidade

• Tipos de Dados e Estruturas

– Presença de adequações presentes na

linguagem de programação para definir tipos de dados e estruturas de dados é um auxílio significativo para a legibilidade

C vs. Pascal

(38)

Legibilidade

• Tipos de Dados e Estruturas

CHARACTER (LEN = 30) NOME

INTEGER IDADE, NUMERO_EMPREGADO

FORTRAN 77 Acessar cada vetor individualmente! C

(39)

Legibilidade

• Considerações sobre a sintaxe

– A sintaxe ou a forma dos elementos de uma linguagem de programação tem efeito

significativo sobre a legibilidade – Temos que nos atentar

• Formas identificadoras • Palavras especiais

(40)

Considerações sobre

a sintaxe

• Formas identificadoras

– Restringir os identificadores a tamanhos muito pequenos prejudica a legibilidade – Se os identificadores puderem ter 6

caracteres no máximo (FORTRAN 77), muitas vezes não é possível usar nomes conotativos para as variáveis

– Exemplo extremo: BASIC (ANSI)

• Somente uma letra ou de uma única letra seguida de um dígito

(41)

Considerações sobre

a sintaxe

• Palavras especiais

– A legibilidade são fortemente influenciadas pelas formas das palavras especiais

• while, for, class, etc

– O método para formar instruções compostas ou grupos de instrução são muito importantes

• Pascal – “begin” e “end” • C – “{“ e “}”

– Ambas as linguagens sofrem porque os grupos de instrução são sempre encerrados da mesma maneira

(42)

Considerações sobre

a sintaxe - Palavras especiais

Visual Basic 6 Pascal

(43)

Considerações sobre

a sintaxe

• Palavras especiais

– Se as palavras especiais podem ser usadas como nomes para variáveis de programa

– Se puderem, os programas resultantes podem ser muito confusos

– Ex: FORTRAN 90 podemos usar as palavras especiais DO e END como nomes de

(44)

Considerações sobre

a sintaxe

• Forma e significado

– Projetar instruções a fim de que sua aparência

indique, ao menos parcialmente, sua finalidade é um auxílio evidente para a legibilidade

– A semântica (significado) deve seguir diretamente da sintaxe ou da forma

– Ex: em C o significado da palavra reservada static depende do contexto de aparecimento

• Definição de uma variável dentro de uma função, significa que a variável é criada no momento de compilação

• Se for usada fora de todas as funções, significa que esta variável é visível apenas no arquivo onde está a definição (não é exportada desse arquivo)

(45)

Considerações sobre

a sintaxe

• Forma e significado

– O comando grep em Unix pode ser decifrado apenas pelo seu conhecimento prévio

– Procura pela ocorrência de uma string no arquivo especificado. Ele exibe apenas as linhas que possuem a string

(46)

Capacidade de escrita

- Writability

• Capacidade de escrita é uma medida de

quão facilmente uma linguagem pode ser

usada para criar programas para um

domínio de problema escolhido

• A maioria das características que afetam a

legibilidade, afetam também a capacidade

de escrita

– Está relacionado ao fato de que para se escrever um programa, exige releituras da parte que já foi escrita

(47)

Capacidade de escrita

- Writability

• Deve ser considerada no contexto do

domínio do problema

• Não é adequado comparar linguagens que

foram desenvolvidas para propósitos

distintos

– Ex: Cobol (comercial) vs. Lisp (IA)

• Criação de relatórios – Cobol será sempre melhor que Lips

• Manipulação de símbolos – Lisp será sempre melhor que Cobol

(48)

Capacidade de escrita

- Writability

• Fatores mais importantes que influenciam

a capacidade de escrita de uma

linguagem de programação

– Simplicidade e Ortogonalidade – Suporte para abstração

(49)

Capacidade de escrita

- Writability

• Simplicidade e Ortogonalidade

– Um conjunto muito extenso de construções pode

levar ao uso inadequado de alguns destes recursos e ao desuso de outros

– Desta forma, um número menor de construções primitivas e um conjunto consistente de regras é

muito melhor do que, simplesmente, ter um grande número de primitivas

– Um desenvolvedor por projetar uma solução para um problema complexo depois de aprender somente um conjunto simples de construções primitivas

(50)

Capacidade de escrita

- Writability

• Suporte para abstração

– Abstração significa a capacidade de definir, e depois, usar estruturas ou operações

complicadas de uma maneira que permita ignorar muitos detalhes

– As linguagens de programação podem suportar duas categorias distintas de abstração

• Processo • Dados

(51)

Capacidade de escrita

- Writability

• Suporte para abstração

– Processo

• Uso de um subprograma para implementar um algoritmo de classificação exigido diversas vezes em um programa

(52)

Capacidade de escrita

- Writability

• Suporte para abstração

– Dados

• Árvore binária que armazena dados inteiros em seus vértices

*

+ f + a

*

* *

+

*

b c Fortran 77

*

+ f

*

C++/Java a

*

+

(53)

Capacidade de escrita

- Writability

• Expressividade

– Significa que uma linguagem de programação tem formas relativamente convenientes de

especificar computações – Ex:

• C – “cont++” é mais conveniente do que usar “cont = cont + 1”

(54)

Confiabilidade

• Diz-se que um programa é confiável se ele se comportar de acordo com suas especificações sob todas as condições

• Recursos de linguagem que exercem um efeito significativo sobre a confiabilidade de

programas

– Verificação de Tipos

– Manipulação de Exceções – Apelidos

(55)

Confiabilidade

• Verificação de Tipos

– Testar se existem erros de tipo em

determinado programa, ou pelo compilador, ou durante a execução do programa

– É um fator importante na confiabilidade da linguagem de programação

– A verificação de tipos em tempo de execução é mais dispendiosa do que a verificação em tempo de compilação

(56)

Confiabilidade

• Verificação de Tipos

– Quanto mais cedo foram detectados os erros em um programa, menos dispendioso será

para fazer os reparos necessários

– Na linguagem de programação Ada exige

verificações dos tipos de dados das variáveis e expressões em tempo de compilação,

exceto quando o desenvolvedor declara

explicitamente que a verificação de tipos deve ser suspensa

(57)

Confiabilidade

• Verificação de Tipos

– Linguagens fortemente tipadas

• São aquelas em que a declaração do tipo é obrigatório • Ex: Java, C, Delphi, etc

– Linguagens fracamente tipadas

• São aquelas em que a declaração do tipo é opcional • Ex: Visual Basic (até a versão 6)

– DIM X (uso a variável para armazenar qualquer tipo)

– Linguagens não tipadas

• São aquelas em que existe apenas um tipo genérico de dados

• A maior parte das linguagens de script são normalmente não tipadas

(58)

Confiabilidade

• Manipulação de Exceções

– A capacidade de um programa de interpretar erros em tempo de execução e por em prática medidas corretivas e depois prosseguir é um grande auxílio para a confiabilidade

– Ex:

• Possuem: Ada, C++, Java, Delphi, etc • Não possuem: C, Fortran, etc

(59)

Confiabilidade

• Apelidos

– É ter dois ou mais métodos ou nomes,

distintos para fazer referência à mesma célula de memória

– É amplamente aceito que os apelidos são recursos perigosos

– Posso ter duas funções alterando uma mesma variável

– Foi proposto para superar algumas deficiências na abstração de dados

(60)

Confiabilidade

• Legibilidade e Capacidade de Escrita

– Ambos influenciam a confiabilidade

– Quanto mais fácil é escrever um programa, mais probabilidade ele tem de estar correto – A legibilidade afeta a confiabilidade tanto nas

fases de escrita como nas de manutenção no ciclo de vida

– Programas de difícil leitura também são difíceis de escrever e de modificar

(61)

Confiabilidade

(62)

Custo

• O custo final de uma linguagem de

programação é uma função de muitas características

• São elas:

– Custo de treinamento de programadores

– Custo para escrever programas na linguagem – Custo para compilar programas na linguagem – Custo de implementação

– Custo de compra da linguagem – Custo da má confiabilidade

(63)

Custo

• Custo de treinamento de programadores

– Está relacionado à simplicidade,

ortogonalidade e da experiência dos programadores

– Exemplos (cursos online)

• C# - R$ 175,00 • J2SE - R$ 175,00 • J2EE - R$ 195,00

• Developer .NET - R$ 250,00 • Visual Basic 2008 - R$ 150,00

(64)

Custo

• Custo para escrever

programas na linguagem

– Está relacionado à

capacidade de escrita, a qual depende da

proximidade de seu

propósito com a aplicação em particular

– Ex: usar uma linguagem de baixo nível para escrever programas comerciais (Assembly)

(65)

Custo

• Custo para compilar programas na

linguagem

– Um grande empecilho para os primeiros usos de Ada era o custo elevado para rodar os

seus compiladores de primeira geração

– Esse problema foi diminuído pelo surgimento de compiladores melhores

(66)

Custo

• Custo de implementação

– Uma linguagem de programação cujo sistema de implementação seja caro, ou rode

somente em hardware caro, terá menos chance de se tornar popular

– Um dos fatores que explicam a rápida aceitação de Java está ligado à sua

portabilidade, isto é, uso da máquina virtual gerando uma independência de sistema

(67)

Custo

• Custo de compra da linguagem

– Refere-se ao custo para se adquirir a linguagem de programação

• Java – gratuito • PHP – gratuito

• Delphi 2007 (Win32) – R$ 3.918,04

(68)

Custo

• Custo da má confiabilidade

– Se o software falhar em um sistema crítico, como uma usina nuclear ou uma máquina de raios X, o custo poderia ser muito elevado

– Falhas em sistemas não-críticos também podem ser muito caras em termos de futuro comercial ou de ações judiciais em função de sistemas de software defeituosos

(69)

Custo

• Custo de manutenção de programas

– Inclui correções e modificações

– Depende de uma série de características da linguagem, mas principalmente da legibilidade

– Geralmente a manutenção não é feita pelo autor do programa

– Custos com manutenção (em softwares com tempos de vida longos) podem atingir de duas a quatro vezes os custos de desenvolvimento

(70)

Influências sobre o

Projeto da Linguagem

• Fatores que influenciam o projeto das

linguagens de programação

– Arquitetura do computador

– Metodologias de programação – Categorias de linguagem

– Custo/benefício no projeto da linguagem – Métodos de implementação

(71)

Influências sobre o

Projeto da Linguagem

• Arquitetura do computador

– Exerceu um efeito crucial sobre o projeto das linguagens de programação

– A maioria das mais populares linguagens de programação dos últimos 45 anos foi

projetada em função da arquitetura de von Neumann

(72)

Influências sobre o

Projeto da Linguagem

• Arquitetura do computador

– Dados e programas são armazenados na mesma memória

– A unidade central de processamento (UCP) é separada da memória

– As instruções e os dados devem ser canalizados (piped) ou transmitidos da memória para a UCP

– Os resultados das operações na UCP devem ser novamente transferidos para a memória

(73)

Influências sobre o

Projeto da Linguagem

• Arquitetura do computador

– Quase todos os computadores digitais construídos desde a década de 40 tem se baseado na arquitetura de von Neumann

(74)

Influências sobre o

Projeto da Linguagem

• Arquitetura do computador

– Por causa da arquitetura de von Neumann, os recursos centrais das linguagens imperativas são as variáveis, as quais modelam

• Células de memória

• Instruções de atribuição (baseadas na operação de piping)

(75)

Influências sobre o

Projeto da Linguagem

• Arquitetura do

computador

– Os operandos das expressões são canalizados da memória para a UCP e o resultado da avaliação é canalizado de volta para a célula de memória

representada pelo lado esquerdo da atribuição

(76)

Influências sobre o

Projeto da Linguagem

• Arquitetura do computador

– Funcional

• Principal meio de fazer computações é aplicar funções a determinados parâmetros

• Não há tipos de variáveis (como utilizado nas

imperativas), sem instruções de atribuições e sem iteração

• É improvável que as linguagens imperativas sejam deixadas de lado até que um computador não-von Neumann seja projetado

(77)

Influências sobre o

Projeto da Linguagem

• Metodologias de programação

– Final da década de 60 e o início da década de 70 trouxeram uma análise intensa, do processo de desenvolvimento de software como do projeto de linguagens de

programação

– Uma razão para isso foi a mudança do custo de computação do hardware para o software

(78)

Influências sobre o

Projeto da Linguagem

• Metodologias de programação

– Orientados a processo – Orientados a dados

• Enfatizam o projeto de dados, concentrando-se no uso de tipos de dados abstratos para resolver

problemas

– Orientados a objetos

• Inicia-se com a abstração de dados, a qual

encapsula o processamento com objetos de dados e oculta o acesso a eles, adicionando herança e vinculação dinâmica de métodos

(79)

Influências sobre o

Projeto da Linguagem

• Categorias de linguagem

– As linguagens de programação são categorizadas em

• Imperativas • Funcionais • Lógicas

(80)

Influências sobre o

Projeto da Linguagem

• Custo/benefício no projeto da linguagem

– Critérios conflitantes

• Confiabiliade vs. Custo de execução

– Ada

» Há a validação que o índice ou os índices em matrizes estejam em suas faixas legais

» Aumenta o custo de execução

» Aumenta a confiabilidade dos programas – C

» Não há a validação dos índices das matrizes » Executam mais rapidamente que Ada

(81)

Influências sobre o

Projeto da Linguagem

• Custo/benefício no projeto da linguagem

– Existem diversos exemplos de conflitos entre os critérios de projeto de linguagens de

programação

– A tarefa de escolher construções e recursos ao projetar uma linguagem de programação envolve uma coleção de ponderações

(82)

Influências sobre o

Projeto da Linguagem

• Métodos de implementação

– A linguagem de máquina do computador é seu conjunto de macroinstruções

– A opção de projeto de máquina implementa em hardware uma linguagem de nível muito baixo que oferece as operações primitivas e exige que o SO crie uma interface com os programas de níveis mais elevados

(83)

Influências sobre o

Projeto da Linguagem

• Métodos de implementação

– O SO e as implementações são dispostos em camadas sobre a interface da linguagem de máquina

– Essas camadas podem ser imaginadas como computadores virtuais, que oferecem

interfaces para o usuário em níveis mais altos – Os programas de usuário formam uma outra

camada no topo da camada de máquinas virtuais

(84)
(85)

Influências sobre o

Projeto da Linguagem

• Métodos de implementação

– Na década de 60 esforços foram feitos para compreender e formalizar o processo de

construção de implementações de linguagens de alto nível

– O maior sucesso ocorreu na análise sintática, principalmente porque essa parte do

processo de implementação é uma aplicação da teoria dos autômatos e da teoria da

(86)

Influências sobre o

Projeto da Linguagem

• Métodos de implementação

– As linguagens de programação podem ser implementadas por meio dos seguintes

métodos

• Compilação

• Interpretação pura

(87)

IPL - Métodos de

implementação

• Compilação

– Programas são traduzidos para a linguagem de máquina, a qual pode ser executada

diretamente pelo computador – Vantagem:

• Execução de programa muito rápida, assim que o processo de tradução for concluído

(88)
(89)

IPL - Métodos de

implementação - Compilação

• Analisador léxico

– Input: programa-fonte – Output: unidades léxicas – Reúne os caracteres do programa-fonte em unidades léxicas • Identificadores • Palavras especiais • Operadores • Símbolos de pontuação – Ignora os comentários

(90)

IPL - Métodos de

implementação - Compilação

• Analisador léxico

– Input: unidades léxicas

– Output: árvores de análise – Constrói estruturas

hierárquicas (parse trees)

• Representam a estrutura sintática do programa

(91)

IPL - Métodos de

implementação - Compilação

• Gerador de código

intermediário

– Input: árvores de análise

– Output: código intermediário – Produz um programa em

uma linguagem diferente, entre o programa-fonte e o programa em linguagem de máquina

(92)

IPL - Métodos de

implementação - Compilação

• Otimização

– Input: código intermediário – Output: código intermediário

otimizado

– Melhora os programas tornando-os menores ou mais rápidos

– Velocidade de execução é mais importante do que velocidade de compilação

(93)

IPL - Métodos de

implementação - Compilação

• Gerador de código

– Input: código intermediário – Output: linguagem de

máquina

– Converte código

intermediário em código de máquina

(94)

IPL - Métodos de

implementação - Compilação

• Tabela de símbolos

– Funciona como um BD para o processo de compilação

– Conteúdo

• Informações sobre tipos e atributos de cada nome definido pelo usuário

– É populada pelos analisadores léxico e sintática

– É utilizada pelo analisador semântico e pelo gerador de código

(95)

IPL - Métodos de

implementação

(96)

IPL - Métodos de

implementação

• Interpretação pura

– Os programas podem ser interpretados por outro programa chamado interpretador, sem nenhuma conversão

– O interpretador age como uma simulação de software de uma máquina cujo ciclo buscar-executar lida com instruções de programa em linguagem de alto nível ao invés de

(97)

IPL - Métodos de

implementação

• Interpretação pura

– Vantagem

• Permitir uma fácil implementação de muitas operações de depuração do código-fonte

– Porque todas as mensagens de erro em tempo de execução podem referir-se a unidades de código

– Desvantagem

• A execução é de 10 a 100 vezes mais lenta do que em sistemas compilados

– Devido à complexa decodificação das instruções de linguagem de alto nível

– Bem mais complexas do que instruções em linguagem de máquina

(98)

IPL - Métodos de

implementação

• Interpretação pura

– Desvantagem

• Exige mais espaço, pois tem que armazenar

– Programa-fonte

» Deve ser armazenado em uma forma projetada para permitir fácil acesso e modificação, pois cada

expressão e instrução deve ser determinado diretamente do programa-fonte em tempo de execução

– Tabela de símbolos

– É aplicado à linguagens com estruturas mais simples

(99)

IPL - Métodos de

implementação

• Compilação versus Interpretação

– Gargalo

• Compilação

– Velocidade da conexão entre memória e processador

• Interpretação

(100)

IPL - Métodos de

implementação

• Sistemas de implementação híbridos

– Alguns sistemas de implementação são um meio-termo entre os compiladores e os

interpretadores

– Eles traduzem programas em linguagem de alto nível para uma linguagem intermediária projetada para permitir fácil interpretação

– Esse método é mais rápido do que a

interpretação pura porque as instruções da linguagem fonte são decodificadas somente uma vez

(101)
(102)

IPL - Métodos de

implementação

• Sistemas de implementação híbridos

– Ao invés de traduzir o código em linguagem intermediária para código de máquina, ele simplesmente interpreta o código

intermediário

– Podemos citar como exemplo a linguagem Perl

• Parcialmente compilada para detectar erros antes da interpretação e para simplificar o interpretador

(103)

Influências sobre o

Projeto da Linguagem

• Ambientes de programação

– Conjunto de ferramentas usadas no desenvolvimento de software

– É evidente que a maior parte do

desenvolvimento de software fará uso de ambientes de programação poderosos

– Isso, sem dúvida, aumentará a produtividade no desenvolvimento de software e também do software desenvolvido, elevando assim sua qualidade de produção

(104)

Influências sobre o

Projeto da Linguagem

• Ambientes de programação

Dr.SCHEME

(105)

Pontos importantes

• O estudo das linguagens de programação

é valioso

– Aumenta nossa capacidade de usar diferentes construções para escrever programas

– Possibilita-nos escolher linguagens para projetos de maneira mais inteligente

– Torna mais fácil a aprendizagem de novas idéias

(106)

Pontos importantes

• O projeto e a avaliação de uma linguagem

de programação dependem muito do

domínio em que eles devem ser usados

• Critérios mais importantes de avaliação

– Legibilidade

– Capacidade de escrita – Confiabilidade

(107)

Pontos importantes

• Projetar uma linguagem de programação

é, antes de mais nada, um feito de

engenharia, na qual uma longa lista de

compensações deve ser feita entre os

recursos, as construções e as

(108)

Bibliografia

• SEBESTA, R. W. Conceitos de Linguagens de Programação. Porto Alegre: Bookman, 2003.

• TUCKER, A. B; NOONAN, R. E. Linguagens de Programação – Princípios e Paradigmas. São Paulo: McGraw-Hill, 2008.

• MELO, A. C. V. de; SILVA, F. S. C. da.

Referências

Documentos relacionados

A ideia da pesquisa, de início, era montar um site para a 54ª região da Raça Rubro Negra (Paraíba), mas em conversa com o professor de Projeto de Pesquisa,

Nessa medida, procedeu-se inicialmente à revisão da literatura disponível sobre a resiliência, com especial ênfase na sua relação com a prática desportiva e o suporte social,

A proporçáo de indivíduos que declaram considerar a hipótese de vir a trabalhar no estrangeiro no futuro é maior entle os jovens e jovens adultos do que

Realizar a manipulação, o armazenamento e o processamento dessa massa enorme de dados utilizando os bancos de dados relacionais se mostrou ineficiente, pois o

As rimas, aliterações e assonâncias associadas ao discurso indirecto livre, às frases curtas e simples, ao diálogo engastado na narração, às interjeições, às

Estudos sobre privação de sono sugerem que neurônios da área pré-óptica lateral e do núcleo pré-óptico lateral se- jam também responsáveis pelos mecanismos que regulam o

Os estudos originais encontrados entre janeiro de 2007 e dezembro de 2017 foram selecionados de acordo com os seguintes critérios de inclusão: obtenção de valores de

Cada qual a seu modo, com caraterísticas organizacionais diferentes, CCIR, CONIC, REJU e Koinonia são quatro entidades ecumênicas que vêm tendo certo destaque no país em