115
FCT/UNESP 25/04/2017 Prof. Dr. Rogério Eduardo Garcia 1 Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 01 Rogério Eduardo Garcia ([email protected]) 25/04/2017 Rogério Eduardo Garcia 2 Metodologia Aulas expositivas teórico-práticas; Exercícios práticos; Projetos individuais e/ou em grupo; Seminários, individuais e em grupo, sobre tópicos abordados e relacionados.

Conceitos de Linguagens de Programação - fct.unesp.br · Os Paradigmas: Paradigma Imperativo, Orientado a Objeto, Funcional e Lógico; principais representantes de cada um dos paradigmas

Embed Size (px)

Citation preview

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �1

Faculdade de Ciências e Tecnologia

Departamento de Matemática e Computação

Bacharelado em Ciência da Computação

Conceitos de Linguagens de Programação

Aula 01

Rogério Eduardo Garcia([email protected])

25/0

4/20

17R

ogér

io E

duar

do G

arci

a2

Metodologia

� Aulas expositivas teórico-práticas;

� Exercícios práticos;

� Projetos individuais e/ou em grupo;

� Seminários, individuais e em grupo, sobretópicos abordados e relacionados.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �2

25/0

4/20

17R

ogér

io E

duar

do G

arci

a3

Bibliografia Básica

� SEBESTA, R. W. Conceitos de Linguagensde Programação, 5ª ed., Bookman, 2003.

� GHEZZI, C. e JAZEYERI, M. Conceitos delinguagens de programação, Campus, 1987.

� VAREJÃO, F. M. Linguagem deProgramação: conceitos e técnicas, Rio deJaneiro: Elsevier (Campus), 2004.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a4

Avaliação

� As notas de todas as atividades – entre 0 (zero) e 10,0 (dez) – serão atribuídasindividualmente, mesmo em atividades em grupo;

� A média final será calculada da seguinte maneira:– MA = (NP1 + 2*NP2)/3– Mt = (NT1 + NT2 +...+ NTn) / n– MT = (7 * NPJ + 3 * Mt)

� Média Final:– MF = (MA + MT)/2 SE E SOMENTE SE (MA>=5 E MT>=5)

� Caso contrário (MA<5 OU MT<5)– MF = Menor Nota (MA ou MT)

� Onde:– MF = Média Final.– MA = Média de Provas– MP = Média de Trabalhos e Projeto– Mt = Média de Trabalho (Listas de Exercícios)– NPJ = Nota Projeto (Seminário)– MT = Média final dos trabalhos (parte prática)

� Caso o aluno não obtenha a nota mínima para aprovação, será oferecida umaterceira avaliação (EXAME) e a Média Final passa a ser obtida pela expressão:

– MFnova = (MFanterior + EXAME)/2

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �3

25/0

4/20

17R

ogér

io E

duar

do G

arci

a5

Tópicos da Disciplina

� Histórico da Evolução das Linguagens de Programação: tradução (interpretação ecompilação); Paradigma Imperativo, Orientado a Objeto, Funcional e Lógico; principaisrepresentantes de cada um dos paradigmas; Revisão do Processo de Compilação(Compilação versus Interpretação); Programação Imperativa: Vantagens e desvantagens daprogramação imperativa;

� Linguagens de Programação Lógicas: Apresentação de uma linguagem lógica; cálculo depredicados; resolução de problemas e aplicações usando programação lógica; análise deindependência e reusabilidade de programas lógicos.

� Aspectos Sintáticos e Semânticos: Descrição Sintática, Métodos Formais, DescriçãoSemântica;

� Tipos de Dados: Definição de dados; Representação Interna; Escopo de Definições;Bindings

� Expressões e instruções de atribuição; operadores sobrecarregados; conversões de tipo;Expressões Relacionais e Booleanas;

� Estruturas de Controle; Instrução de Seleção; Instruções Iterativas;� Subprogramas; Questões de Projeto; Ambientes de Referência; Métodos de Passagem de

Parâmetros; Compilação Separada;� Alocação Dinâmica: Gerenciamento de Memória� Suporte a Programação Orientada a Objetos: Aspectos sintáticos e semânticos de objetos e

classes, classes derivadas e heranças, polimorfismo, controles de acesso; funçõesmembros e sobrecarga.

� Linguagens de Programação Funcionais: Apresentação de uma linguagem funcional;funções como valores de primeira ordem; recursão simples e recursão de cauda usandoprogramação funcional; Resolução de problemas e aplicações usando programaçãofuncional; análise da independência e reusabilidade de programas funcionais.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a6

Planejamento

� Ver na página da

disciplina

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �4

25/0

4/20

17R

ogér

io E

duar

do G

arci

a7

Linguagens de Programação

� Processo de Compilação (Compilação versus Interpretação)

� Conceitos de LP; Domínios de Programação; Critérios deAvaliação; Categorias de LP e Classificação de LP

� A Histórico da Evolução das Linguagens de Programação:tradução (interpretação e compilação)

� Os Paradigmas: Paradigma Imperativo, Orientado a Objeto,Funcional e Lógico; principais representantes de cada um dosparadigmas

25/0

4/20

17R

ogér

io E

duar

do G

arci

a8

Linguagens Formais

� Formalmente as gramáticas, sãocaracterizadas como quádruplas ordenadas

G = ( Vn, Vt, P, S)

onde:

� Vn representa o vocabulário não terminal dagramática. Este vocabulário corresponde aoconjunto de todos os símbolos dos quais agramática se vale para definir as leis deformação das sentenças da linguagem.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �5

25/0

4/20

17R

ogér

io E

duar

do G

arci

a9

Linguagens Formais

� Vt é o vocabulário terminal, contendo os símbolos queconstituem as sentenças da linguagem. Dá-se o nomede terminais aos elementos de Vt.

� P representa o conjunto de todas as leis de formaçãoutilizadas pela gramática para definir a linguagem.Para tanto, cada construção parcial, representada porum não-terminal, é definida como um conjunto deregras de formação relativas à definição do não-terminal a ela referente. A cada uma destas regras deformação que compõem o conjunto P dá-se o nome deprodução da gramática.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

Linguagens Formais

� Cada produção P tem a forma:

α ⇒ β α ∈ (Vn ∪ Vt)+; β ∈ (Vn ∪ Vt)*

� S є Vn denota a principal categoria gramaticalde G; é dito o símbolo inicial ou o axioma dagramática. Indica onde se inicia o processo degeração de sentenças.

� Exemplo:– G = ({S, A, B}, {a, b}, P, S)

� P: S ⇒ AB

� A ⇒ a

� B ⇒ b

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �6

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

Compiladores e Linguagens

� Um Compilador C é um programa que tem a finalidade de traduzirou converter um programa Pf (fonte) escrito numa linguagem Lf –linguagem fonte - para um programa Po (objeto) escrito numaoutra linguagem Lo - linguagem objeto; Po é o resultado datradução. Lm , a linguagem na qual o compilador é escrito, é emgeral, a linguagem de máquina do computador onde ele éprocessado. Na maioria das vezes, C não é programado em Lm,sendo convertido para ela por meio de uma compilação.

Computador

C/Lm Po/Lo

Compilador Prog. Objeto

Saída

Pf/Lf

Prog. Fonte

Entrada

Lo = Lm

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

Compiladores e Linguagens

� Em geral, Lf é uma linguagem de alto nível comoALGOL, COBOL, PASCAL, etc. Lo não énecessariamente uma linguagem de máquina. Porexemplo, Lo pode ser uma Linguagem de Montagem("Assembler") La.Nesse caso, é necessário ter-se maisuma fase de tradução de La para a linguagem demáquina Lm do computador a ser utilizado paraprocessar o programa objeto.

C/Lm Po/La

Compilador Prog. Objeto

Compilador

Pf/Lf

Prog. Fonte

C/Lm Po/Lm

Montador Prog. Objeto

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �7

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

Tradução de uma LP

� A tradução pode ser:– Interpretação

– Compilação

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �8

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

Interpretador

� Traduz uma linha de comando por vez echama uma rotina para execução;

� Os interpretadores servem para umaprototipação rápida;

� Tem como desvantagem certa lentidão naexecução;

� Não geram código executável, mantendodependência quanto ao ambiente paraexecução;

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

Compilador

� Traduz o programa fonte inteiro, produzindoum outro programa equivalente, em linguagemexecutável.

� Traduz um comando apenas uma única vez,não importando quantas vezes ele seráexecutado.

� Gera código definitivo (eficiente) de umprograma.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �9

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

Tradutores, em geral

� Há outros tipos importantes de tradutores:– se a Lf é uma linguagem montadora e a Lo é uma

linguagem de máquina, então o tradutor é chamadoassembler

– se a Lf é uma linguagem de alto nível e a Lo étambém de alto nível, então o tradutor é chamadopré-processador. Por exemplo, há muitos pré-processadores Fortran que mapeiam versões deFortran "estruturado" em Fortran Convencional

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

Aspectos Considerados

Blá

Blá

BláFonte

Quanto à identificação

correta das construções

Quanto ao significado a ser

refletido em código de máquina

Quanto à integração com o

computador hospedeiro

SINTÁTICO

SEMÂNTICO

PRAGMÁTICO

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �10

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �11

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

Análise Léxica

� Seu objetivo é analisar a entrada dada(programa fonte) e dividi-la em seqüênciasconsiderando os tokens da linguagem,definidos por expressões regulares. Cadatoken é normalmente formado por seu tipo (seé um operador lógico, um identificador, umnúmero inteiro, etc.) e pelo seu valor. Estevalor vai depender do tipo do token enormalmente corresponde à seqüência decaracteres realmente lida da entrada.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

Analisador Léxico

� Deve, a partir do código fonte, fragmentá-lo emseus componentes básicos, identificandotrechos elementares completos e comidentidade própria, porém individuais paraefeito de análise.

� Cada partícula deve ser classificada, pois oanalisador sintático não refere-se diretamenteao fonte.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �12

25/0

4/20

17R

ogér

io E

duar

do G

arci

a23

Analisador Léxico

� Às partículas classificadas dá-se o nome deátomo

� Os átomos, extraídos do código fonte, sãorepresentados na metalinguagem, quedescreve a linguagem-fonte, na mesma ordemque aparecem no texto do código-fonte

25/0

4/20

17R

ogér

io E

duar

do G

arci

a24

Exemplo

2 * 8 / 1 2 =

<dígito> <operador> <dígito> <operador> <dígito> <dígito> |

<semsinal> | <semsinal> | | <semsinal> |

<número> | <número> | <semsinal> |

<valor> | <valor> | <número> |

| | | | <valor> |

| | | | <expressão |

| | <expressão> |

<expressão> |

<cálculo>

Validação de 2*8/12:

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �13

25/0

4/20

17R

ogér

io E

duar

do G

arci

a25

Funções do Analisador Léxico

� Extração e Classificação de Átomos

� Eliminação de comentários

� Conversão Numérica

� Tratamento de Identificadores

� Identificação de Palavras Reservadas

� Recuperação de Erros

25/0

4/20

17R

ogér

io E

duar

do G

arci

a26

Funções do Analisador Léxico

� Listagens

� Geração de Tabelas de Referências Cruzadas

� Definição e Expansão de Macros

� Interação com o Sistema de Arquivos

� Compilação Condicional

� Controle de listagens

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �14

25/0

4/20

17R

ogér

io E

duar

do G

arci

a27

Analisador Léxico

� Deve, a partir do código fonte, fragmentá-lo emseus componentes básicos, identificandotrechos elementares completos e comidentidade própria, porém individuais paraefeito de análise.

� Cada partícula deve ser classificada, pois oanalisador sintático não refere-se diretamenteao fonte.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a28

Extração e Classificação de Átomos

� Classes de átomos mais comuns:– identificadores;

– palavras reservadas;

– números inteiros sem sinal;

– números reais;

– cadeias de caracteres;

– sinais de pontuação e de operação;

– caracteres especiais;

– símbolos compostos de dois ou mais caracteres especiais;

– comentários;

– etc.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �15

25/0

4/20

17R

ogér

io E

duar

do G

arci

a29

Eliminação de Comentários

� O analisador léxico desconsidera o trecho docódigo fonte que encontra-se entredelimitadores de comentários.

� Além disso, ele desconsidera espaços embranco colocados pelos programadores a fimde melhorar a legibilidade do código fonte(endentação).

25/0

4/20

17R

ogér

io E

duar

do G

arci

a30

Conversão Numérica

� Cadeias de caracteres que representamnúmeros são convertidas em valoresnuméricos seguindo as notações possíveis.

� A cadeia de caracteres é convertida em umnúmero de tamanho fixo a ser tratado pelosoutros componentes do compilador ou utiliza-se de uma tabela de constantes numéricas,armazenando no átomo o índice do número.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �16

25/0

4/20

17R

ogér

io E

duar

do G

arci

a31

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

25/0

4/20

17R

ogér

io E

duar

do G

arci

a32

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �17

25/0

4/20

17R

ogér

io E

duar

do G

arci

a33

Análise Sintática

� Esta é responsável por verificar se a entradadada está ou não de acordo com as regrasdefinidas pela gramática da linguagem,implementando o conceito de autômato depilha, por exemplo. Para realizar talreconhecimento, esta fase busca montar aárvore de derivação que gerou a entrada dada,a partir das regras definidas.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a34

Funções do Analisador Sintático

� Identificação de Sentenças

� Detecção de Erros de Sintaxe

� Recuperação de Erros

� Correção de Erros

� Montagem da Árvore Abstrata da Sentença

� Ativação do Analisador Léxico

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �18

25/0

4/20

17R

ogér

io E

duar

do G

arci

a35

Funções do Analisador Sintático

� Identificação de Sentenças

� Detecção de Erros de Sintaxe

� Recuperação de Erros

� Correção de Erros

� Montagem da Árvore Abstrata da Sentença

� Ativação do Analisador Léxico

Identificação de cadeias, cujo conjunto

forma a linguagem a que se refere o

analisador.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a36

Funções do Analisador Sintático

� Identificação de Sentenças

� Detecção de Erros de Sintaxe

� Recuperação de Erros

� Correção de Erros

� Montagem da Árvore Abstrata da Sentença

� Ativação do Analisador Léxico

Dada uma de cadeia que não pertence à

linguagem a que se refere, o analisador sintático

deve acusar a presença de erros de sintaxe, de

preferência identificando o tipo de erro e a

possível causa.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �19

25/0

4/20

17R

ogér

io E

duar

do G

arci

a37

Funções do Analisador Sintático

� Identificação de Sentenças

� Detecção de Erros de Sintaxe

� Recuperação de Erros

� Correção de Erros

� Montagem da Árvore Abstrata da Sentença

� Ativação do Analisador Léxico

A partir do ponto em que ocorre erro em umacadeia deve-se restabelecer um novo ponto departida para o analisador. Dessa forma, énecessário a incorporação de meios pararessincronizar o reconhecedor,permitindo que orestante do texto-fonte seja analisado.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a38

Funções do Analisador Sintático

� Identificação de Sentenças

� Detecção de Erros de Sintaxe

� Recuperação de Erros

� Correção de Erros

� Montagem da Árvore Abstrata da Sentença

� Ativação do Analisador LéxicoCompiladores mais sofisticados, em seumecanismo de recuperação de erros, incluemrecursos que sugerem ou até mesmo modificamo texto-fonte, para que os mesmos se tornemsintaticamente corretos.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �20

25/0

4/20

17R

ogér

io E

duar

do G

arci

a39

Funções do Analisador Sintático

� Identificação de Sentenças

� Detecção de Erros de Sintaxe

� Recuperação de Erros

� Correção de Erros

� Montagem da Árvore Abstrata da Sentença

� Ativação do Analisador LéxicoConceitualmente, o analisador sintáticodeveria, com base na gramática, levantar, paraa cadeia de entrada, sua respectiva seqüênciade derivação. Existem outras atividades queequivalentes e menos onerosas.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a40

Funções do Analisador Sintático

� Identificação de Sentenças

� Detecção de Erros de Sintaxe

� Recuperação de Erros

� Correção de Erros

� Montagem da Árvore Abstrata da Sentença

� Ativação do Analisador Léxico

Em muitas implementações, devido aoprogresso do reconhecimento do fonte, oanalisador sintático detecta a necessidade denovos átomos e ativa o analisador léxico,comandando dessa maneira, em função dasintaxe, a operação da análise léxica.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �21

25/0

4/20

17R

ogér

io E

duar

do G

arci

a41

Funções do Analisador Sintático

� Comando de Operação do Analisador Léxico

� Ativação de Rotinas da Análise Referente àsDependências de Contexto da Linguagem

� Ativação das Rotinas da Análise Semântica

� Ativação das Rotinas de Síntese do CódigoObjeto

25/0

4/20

17R

ogér

io E

duar

do G

arci

a42

Funções do Analisador Sintático

� Comando de Operação do Analisador Léxico

� Ativação de Rotinas da Análise Referente àsDependências de Contexto da Linguagem

� Ativação das Rotinas da Análise Semântica

� Ativação das Rotinas de Síntese do CódigoObjeto

Quando os átomos não se apresenta emformato uniforme, existindo regrasdiferentes para sua identificação, conformeo contexto em que são encontrados, cabe aoAS decidir sobre eventuais parametrizaçõespara adequar a extração de átomos àsnecessidades do contexto.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �22

25/0

4/20

17R

ogér

io E

duar

do G

arci

a43

Funções do Analisador Sintático

� Comando de Operação do Analisador Léxico

� Ativação de Rotinas da Análise Referente àsDependências de Contexto da Linguagem

� Ativação das Rotinas da Análise Semântica

� Ativação das Rotinas de Síntese do CódigoObjeto

Como complemento da análise livre decontexto, em geral são necessárias análisesdependentes do contexto. Ex: verificação doescopo de variáveis, da coerência de tiposde dados em expressões, do relacionamentoentre as declarações e os comandosexecutáveis, etc.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a44

Funções do Analisador Sintático

� Comando de Operação do Analisador Léxico

� Ativação de Rotinas da Análise Referente àsDependências de Contexto da Linguagem

� Ativação das Rotinas da Análise Semântica

� Ativação das Rotinas de Síntese do CódigoObjetoEstas rotinas encarregam-se de produzir ocódigo-objeto correspondente ao texto-fonte cuja tradução se deseja.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �23

25/0

4/20

17R

ogér

io E

duar

do G

arci

a45

Funções do Analisador Sintático

� Comando de Operação do Analisador Léxico

� Ativação de Rotinas da Análise Referente àsDependências de Contexto da Linguagem

� Ativação das Rotinas da Análise Semântica

� Ativação das Rotinas de Síntese do CódigoObjetoTais rotinas são responsáveis pelogerenciamento dos objetos da linguagem,alocação das áreas para os mesmos, ligaçãoentre os objetos e os comandos que osmanipulam. Esse gerenciamento é efetuadoem tempo de compilação.

25/0

4/20

1746

Exemplo: Gramática de uma linguagem de calcular em

BNF (Backus Naur Form):

P:

<cálculo> ::= <expressão> =

<expressão> ::= <valor> | <valor><operador><expressão>

<valor> ::= <número> | <sinal><número>

<número> ::= <semsinal> | <semsinal>.<semsinal>

<semsinal> ::= <dígito> | <dígito><semsinal>

<dígito>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<sinal> ::= + | -

<operador> ::= + | - | / | *

Definição Regular

Rog

ério

Edu

ardo

Gar

cia

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �24

25/0

4/20

1747

Autômato Finito(Para reconhecimento de números reais)

Rog

ério

Edu

ardo

Gar

cia

25/0

4/20

1748

Diagrama de Transição

12 15 *13dígito

dígito

14.

E

dígito

dígito

16E 1817+ ou -

dígito

dígito

dígito

19outro

Rog

ério

Edu

ardo

Gar

cia

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �25

25/0

4/20

17R

ogér

io E

duar

do G

arci

a49

Exemplo do Resultado do Analisador Sintático

MIN(A,B+C*SEN(K*PI/2))

Em notação Polonesa!!!

PI 2 / K *

*

SEN

C B + A MIN

25/0

4/20

17R

ogér

io E

duar

do G

arci

a50

Exemplo do Resultado do Analisador Sintático

Tabela de Símbolos:

PI(constante, 3.14)

K(int,...)

....

PI 2 / K *

*

SEN

C B + A MIN

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �26

25/0

4/20

17R

ogér

io E

duar

do G

arci

a51

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

25/0

4/20

17R

ogér

io E

duar

do G

arci

a52

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �27

25/0

4/20

17R

ogér

io E

duar

do G

arci

a53

Analisador Semântico

� A árvore de derivação é “decorada” naAnálise Semântica, que é responsável porrealizar as verificações semânticas sobre aentrada dada, tratando os pontos de umalinguagem de programação que não podemser cobertos pela definição formal de umaGramática Livre de Contexto. Ela inclui naárvore de derivação os atributos de terminais enão-terminais, realiza verificações econversões de tipo, além de controlardeclarações de variáveis, entre outras funções.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a54

Funções de um Analisador Semântico

� Criação e manutenção de tabelas de símbolos

� Associar aos símbolos os correspondentesatributos

� Manter informações sobre o escopo dosidentificadores

� Representar tipos de Dados

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �28

25/0

4/20

17R

ogér

io E

duar

do G

arci

a55

Funções de um Analisador Semântico

� Criação e manutenção de tabelas desímbolos

� Associar aos símbolos os correspondentesatributos

� Manter informações sobre o escopo dosidentificadores

� Representar tipos de Dados

Tarefa geralmente executada pelo analisadorléxico, porém em alguns compiladores osanalisadores léxicos fazem o estritamentenecessário, ficando para o analisadorsemântico essa tarefa, dentre outras.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a56

Funções de um Analisador Semântico

� Criação e manutenção de tabelas desímbolos

� Associar aos símbolos os correspondentesatributos

� Manter informações sobre o escopo dosidentificadores

� Representar tipos de Dados

Uma tabela de símbolos é apenas uma coleção dosidentificadores que aparecem no texto-fonte. Assim,torna-se necessário acrescentar, para cada um deles,um conjunto de informações que seja suficientepara caracterizá-lo como sendo correspondente aum determinado objeto. Deve-se identificar todas ascaracterísticas necessárias à geração de código.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �29

25/0

4/20

17R

ogér

io E

duar

do G

arci

a57

Funções de um Analisador Semântico

� Criação e manutenção de tabelas desímbolos

� Associar aos símbolos os correspondentesatributos

� Manter informações sobre o escopo dosidentificadores

� Representar tipos de DadosPara que o compilador associe os identificadores aos escoposcorrespondentes, atribuindo-lhes o significado correto em todos ospontos do texto-fonte, torna-se necessário que o compilador organizea tabela de símbolos conforme uma hierarquia a que pertencem osidentificadores nela registrados. Em alguns compiladores, encontrara fronteira de um identificador é uma tarefa do analisador sintático,que passa ao analisador léxico tal informação. Em outros, as açõessemânticas associadas às mudanças de escopo promovem a execuçãode tais operações.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a58

Funções de um Analisador Semântico

� Criação e manutenção de tabelas desímbolos

� Associar aos símbolos os correspondentesatributos

� Manter informações sobre o escopo dosidentificadores

� Representar tipos de Dados

O compilador deve registrar as especificações dediversos tipos de dados, utilizados peloprograma. Vale ressaltar que diferenteslinguagens possuem tipos de dados diferentes eainda, permitem que o programador definanovos tipo homogêneos ou heterogêneos.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �30

25/0

4/20

17R

ogér

io E

duar

do G

arci

a59

Funções de um Analisador Semântico

� Analisar restrições quanto à utilização deidentificadores

� Verificar o escopo dos identificadores

� Identificar declarações contextuais

� Verificar a compatibilidade de tipos

� Efetuar o gerenciamento de memória

� Representar o ambiente de execução dosprocedimentos

25/0

4/20

17R

ogér

io E

duar

do G

arci

a60

Funções de um Analisador Semântico

� Analisar restrições quanto à utilização deidentificadores

� Verificar o escopo dos identificadores

� Identificar declarações contextuais

� Verificar a compatibilidade de tipos

� Efetuar o gerenciamento de memória

� Representar o ambiente de execução dosprocedimentos

Dependendo do contexto em que sãoempregados, os identificadores devem ounão exibir certos atributos. Cabe aocompilador, através de ações semânticas,verificar a coerência de utilização de cadaidentificador.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �31

25/0

4/20

17R

ogér

io E

duar

do G

arci

a61

Funções de um Analisador Semântico

� Analisar restrições quanto à utilização deidentificadores

� Verificar o escopo dos identificadores

� Identificar declarações contextuais

� Verificar a compatibilidade de tipos

� Efetuar o gerenciamento de memória

� Representar o ambiente de execução dosprocedimentos

Deve-se garantir que todos os identificadoresutilizados no texto-fonte correspondam aobjetos definidos nos pontos dos programasem que seus identificadores ocorreram.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a62

Funções de um Analisador Semântico

� Analisar restrições quanto à utilização deidentificadores

� Verificar o escopo dos identificadores

� Identificar declarações contextuais

� Verificar a compatibilidade de tipos

� Efetuar o gerenciamento de memória

� Representar o ambiente de execução dosprocedimentos

Algumas linguagens permitem que adeclaração seja feita de modo implícito. Ocompilador deve localizar taisidentificadores e situá-lo em seu contextosintático.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �32

25/0

4/20

17R

ogér

io E

duar

do G

arci

a63

Funções de um Analisador Semântico

� Analisar restrições quanto à utilização deidentificadores

� Verificar o escopo dos identificadores

� Identificar declarações contextuais

� Verificar a compatibilidade de tipos

� Efetuar o gerenciamento de memória

� Representar o ambiente de execução dosprocedimentos

A verificação de tipo é importante para ageração de código pois identifica apossibilidade de necessidade deconversões.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a64

Funções de um Analisador Semântico

� Analisar restrições quanto à utilização deidentificadores

� Verificar o escopo dos identificadores

� Identificar declarações contextuais

� Verificar a compatibilidade de tipos

� Efetuar o gerenciamento de memória

� Representar o ambiente de execução dosprocedimentos

O compilador deve incorporar os mecanismosnecessários para a alocação de memória emtempo de execução. Os requisitos podem serestáticos (independente da execução) oudinâmicos (dependente dos dados e da execução- recursividade, gerenciamento do heap, etc)

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �33

25/0

4/20

17R

ogér

io E

duar

do G

arci

a65

Funções de um Analisador Semântico

� Analisar restrições quanto à utilização deidentificadores

� Verificar o escopo dos identificadores

� Identificar declarações contextuais

� Verificar a compatibilidade de tipos

� Efetuar o gerenciamento de memória

� Representar o ambiente de execução dosprocedimentos

O compilador deve interpretar corretamente ocontexto de execução. Para isso, o mecanismo depassagem de parâmetro (por nome , valor,referência) e de retorno do(s) resultado(s) deexecução ao contexto chamador é importante, alémde outros programas, S.O., módulos compiladosseparadamente, etc.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a66

Funções de um Analisador Semântico

� Efetuar a tradução do programa

� Implementação de um ambiente de execução

� Comunicação entre dois ambientes deexecução

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �34

25/0

4/20

17R

ogér

io E

duar

do G

arci

a67

Funções de um Analisador Semântico

� Efetuar a tradução do programa

� Implementação de um ambiente deexecução

� Comunicação entre dois ambientes deexecução

Criar uma interpretação do texto-fonteexpresso em alguma notação adequada,não obrigatoriamente em algumalinguagem de máquina. Em geralutiliza-se de uma linguagemintermediária.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a68

Funções de um Analisador Semântico

� Efetuar a tradução do programa

� Implementação de um ambiente deexecução

� Comunicação entre dois ambientes deexecuçãoTrata dos recursos necessários à criaçãode procedimentos que se comuniquementre si, pela passagem de parâmetros,mesmo pertencentes a escoposdiferentes, podendo coexistir (processosparalelo), comunicando-se através detroca de mensagens.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �35

25/0

4/20

17R

ogér

io E

duar

do G

arci

a69

Funções de um Analisador Semântico

� Efetuar a tradução do programa

� Implementação de um ambiente deexecução

� Comunicação entre dois ambientes deexecuçãoTrata dos recursos necessários à criação deprocedimentos que se comuniquem entre si,pela passagem de parâmetros, mesmopertencentes a escopos diferentes, podendocoexistir (processos paralelos), comunicando-seatravés de troca de mensagens.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a70

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �36

25/0

4/20

17R

ogér

io E

duar

do G

arci

a71

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

25/0

4/20

17R

ogér

io E

duar

do G

arci

a72

Otimização Global

� Procura introduzir melhorias que independemda linguagem de máquina, como por exemploeliminação de cálculos repetidos, eliminaçãode sub-expressões comuns, a fatoração docálculo de sub- expressões, etc.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �37

25/0

4/20

17R

ogér

io E

duar

do G

arci

a73

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

25/0

4/20

17R

ogér

io E

duar

do G

arci

a74

Geração de Código

� Tradução do programa que está em linguagemintermediária em código-objeto. Via de regra, ocódigo-objeto gerado é relocável, para queseja possível a ligação com outros módulosdesenvolvidos em separado.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �38

25/0

4/20

17R

ogér

io E

duar

do G

arci

a75

Geração de Código

int a,b;

a=20;

b=10;

a=a+b;

a int ...

b int ...

;Obter endereço de a

;Atribuir 20 ao endereço de a

mov [BX+Desl_A], 20

add [BX+Desl_A], [BX+Desl_B]

25/0

4/20

17R

ogér

io E

duar

do G

arci

a76

Arquitetura Básica de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Análise

Otimização Global

Geração de Código

Otimização Local

Tabelas

Tratamento

de Erros

Síntese

Análise Sintática

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �39

25/0

4/20

17R

ogér

io E

duar

do G

arci

a77

Otimização Local

� Refere-se, em geral, a melhorias de código-objeto que aproveitam o “repertório” deinstruções de um dado computadorhospedeiro.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a78

Linguagens de Programação (lembra?)

� Processo de Compilação (Compilação versus Interpretação)

� Conceitos de LP; Domínios de Programação; Critérios deAvaliação; Categorias de LP e Classificação de LP

� A Histórico da Evolução das Linguagens de Programação:tradução (interpretação e compilação)

� Os Paradigmas: Paradigma Imperativo, Orientado a Objeto,Funcional e Lógico; principais representantes de cada um dosparadigmas

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �40

25/0

4/20

17R

ogér

io E

duar

do G

arci

a79

Métodos de Implementação

� Compilada

� Interpretada

� Híbrida

25/0

4/20

17R

ogér

io E

duar

do G

arci

a80

Linguagens de Programação

� Na programação de computadores, uma linguagem deprogramação serve como meio de comunicação entre o indivíduoque deseja resolver um determinado problema e o computadorescolhido para ajuda-lo na solução.

Formalização de Idéias

� A linguagem de programação deve fazer a ligação entre opensamento humano (muitas vezes de natureza não estruturada)e a precisão requerida para o processamento pela máquina.

LP

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �41

25/0

4/20

17R

ogér

io E

duar

do G

arci

a81

Objetivos de uma LP

� Auxiliar o programador no processo dedesenvolvimento de software. Isso incluiauxílio no:– Projeto,

– Implementação,

– Teste,

– Verificação e

– Manutenção do software

� Algumas características contribuem para isso

25/0

4/20

17R

ogér

io E

duar

do G

arci

a82

Definição

Uma LP (Linguagem de Programação) é umalinguagem destinada a ser usada por umapessoa para expressar um processo atravésdo qual um computador pode resolver umproblema. Os quatro modelos (paradigmas)de LP correspondem aos pontos de vista dosquatro componentes citados. A eficiência naconstrução e execução de programas dependeda combinação dos quatro pontos de vista.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �42

25/0

4/20

17R

ogér

io E

duar

do G

arci

a83

Linguagens de Programação

� Para que se tornem operacionais, os programasescritos em linguagens de alto nível devem sertraduzidos para linguagem de máquina.

� Essa conversão é realizada através de sistemasespecializados – compiladores ou interpretadores –que aceitam (como entrada) uma representaçãotextual da solução de um problema, expresso em umalinguagem fonte, e produzem uma representação domesmo algoritmo expresso em outra linguagem, ditalinguagem objeto.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a84

Linguagens de Programação

Razões para se estudar os conceitos de LP:� Aumento da capacidade de expressar idéias

� Maior conhecimento para escolha de linguagensapropriadas

� Entender melhor a importância da implementação

� Maior capacidade para aprender novas linguagens

� Aumento da capacidade de projetar novas linguagens

� Avanço global da comunicação

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �43

25/0

4/20

17R

ogér

io E

duar

do G

arci

a85

Razões para se estudar os conceitos de LP

Aumento da capacidade de expressar idéias:

� Capacidade intelectual pode ser influenciada pelo poderexpressivo da linguagem

� Uma maior compreensão de uma LP pode aumentar nossahabilidade em pensar em como atacar os problemas. Tantomelhor se dominarmos os vários modelos de LP

� Conhecimento amplo dos recursos de linguagem reduz aslimitações no desenvolvimento de softwares

� A melhor compreensão das funções e implementação dasestruturas de uma LP nos leva a usar a LP de modo a extrair omáximo de sua funcionalidade e eficiência

� Recursos ou facilidades podem ser simulados

25/0

4/20

17R

ogér

io E

duar

do G

arci

a86

Razões para se estudar os conceitos de LP

Maior conhecimento para escolha de linguagensapropriadas:

� Escolher a melhor linguagem para umproblema específico devido ao conhecimentode novos recursos é difícil para:– Programadores antigos

– Desenvolvedores sem educação formal

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �44

25/0

4/20

17R

ogér

io E

duar

do G

arci

a87

Razões para se estudar os conceitos de LP

Entender melhor a importância daimplementação:

� Leva um entendimento do PORQUÊ daslinguagens serem projetadas de determinadamaneira.

� Melhora as escolhas que podemos fazer entreas construções de LP e as conseqüências dasopções.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a88

Razões para se estudar os conceitos de LP

Maior capacidade para aprender novaslinguagens:

� Aprendizado contínuo é fundamental, acomputação é uma ciência nova

� Compreender os conceitos gerais daslinguagens torna mais fácil entender como elessão incorporados na linguagem que estásendo aprendida.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �45

25/0

4/20

17R

ogér

io E

duar

do G

arci

a89

Razões para se estudar os conceitos de LP

Aumento da capacidade de projetar novaslinguagens:

� Ajuda no desenvolvimento de sistemascomplexos

25/0

4/20

17R

ogér

io E

duar

do G

arci

a90

Razões para se estudar os conceitos de LP

Avanço global da comunicação:

� Nem sempre as linguagens mais popularessão melhores, por quê?

� Por que existem várias linguagens deprogramação?

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �46

25/0

4/20

17R

ogér

io E

duar

do G

arci

a91

Domínios de Programação – Áreas:

� Aplicações científicas

� Aplicações comerciais

� Inteligência artificial

� Programação de Sistemas

� Aplicações Internet e scripts

� Linguagens para propósitosespeciais

aplicações

usuários

desenvolvedores

GUIS,portabilidade

...

expressiva,

eficiente,

IDEs

expressiva,simples

25/0

4/20

17R

ogér

io E

duar

do G

arci

a92

Domínios de Programação –Aplicações Científicas

� Início: década de 40.

� Foco: eficiência.

� Nesta categoria se enquadram todos os problemasque necessitam um grande volume de processamento,com operações geralmente feitas em ponto flutuante, ecom poucas exigências de entrada e saída.

� As estruturas de dados mais comuns são as matrizese arrays; as estruturas de controle mais comuns sãoos laços de contagem e de seleções

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �47

25/0

4/20

17R

ogér

io E

duar

do G

arci

a93

Domínios de Programação –Aplicações Científicas

� As aplicações científicas incentivaram a criação dealgumas linguagens de alto nível, como por exemplo oFORTRAN

� O ALGOL 60 e a maioria de suas descendentestambém se destinam a serem usadas nessa área,ainda que projetadas para outras áreas relacionadas

� Exemplo: MATHLAB

� Para aplicações científicas cuja eficiência é altamenteprioritária, nenhuma linguagem subseqüente ésignificativamente melhor do que FORTRAN

25/0

4/20

17R

ogér

io E

duar

do G

arci

a94

Domínios de Programação –Aplicações Comerciais

� Iniciou-se na década de 50;

� Foco: produção de relatórios elaborados.

� impulsionou o desenvolvimento deequipamentos especiais.

� A primeira linguagem bem sucedida foi oCOBOL (em 1960).

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �48

25/0

4/20

17R

ogér

io E

duar

do G

arci

a95

Domínios de Programação –Aplicações Comerciais

� As linguagens comerciais se caracterizam pelafacilidade de elaborar relatórios e armazenarnúmeros decimais e dados de caracteres.

� Com o advento dos microcomputadoressurgiram as planilhas e os sistemas de bancode dados amplamente utilizados hoje em dia.

� Exemplos Recentes: Planilhas eletrônicas eSistemas Gerenciadores de Banco de Dados.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a96

Domínios de Programação –Inteligência Artificial

� Início: fim da década de 50

� Foco: manipulação flexível de informações,mesmo em detrimento da eficiência, em muitoscasos.

� Estruturas de dados: listas encadeadas dedados (em oposição a arrays).

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �49

25/0

4/20

17R

ogér

io E

duar

do G

arci

a97

Domínios de Programação –Inteligência Artificial

� Caracterizam-se pelo uso de computaçõessimbólicas em vez de numéricas (sãomanipulados nomes e não números);

� A primeira linguagem desenvolvida para IA foia funcional LISP (1959). No início de 70 surgea programação lógica: PROLOG.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a98

Domínios de Programação –Programação de Sistemas

� Denominados Software básico (SO, utilitários), devempossuir eficiência na execução por propiciar suporte aexecução de outros aplicativos.

� Devem oferecer execução rápida e ter recursos debaixo nível que permitam ao software fazer interfacecom os dispositivos externos.

� Linguagem de Programação: orientada a softwarebásico, para execução rápida, com recursos de baixonível.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �50

25/0

4/20

17R

ogér

io E

duar

do G

arci

a99

Domínios de Programação –Programação de Sistemas

� Nas décadas de 60 e 70 alguns fabricantesdesenvolveram linguagens de alto nívelorientadas as suas máquinas (software deseus equipamentos). IBM (PL/S), Digital(BLISS), Burroughs/UNISYS (ExtendedALGOL).

� O sistema operacional UNIX foi desenvolvidoquase inteiramente em C (tornando-o fácil deportar para diferentes máquinas). C é “baixonível”, execução eficiente e leve.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

0

Domínios de Programação –Propósitos especiais

� Se distinguem por serem criadas para oferecerrecursos de computação para hardwares deuso específico. (tornos CNC, calculadoras HP,etc.)

� Exemplos de linguagem de uso específico:RPG (relatórios comerciais), GPSS (simulaçãode sistemas).

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �51

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

1Domínios de Programação –Linguagens de script

� Início: década de 80.

� Script = lista de comandos em arquivo.

� Execução do arquivo para, p.ex., exercer funções utilitárias dosistema, tais como gerenciamento de arquivos.

� Interfaces de alto nível para controlar e interagir com um conjuntoheterogêneo de softwares (glue languages).

� Nestas linguagens é assumida a existência de um conjunto decomponentes já desenvolvidos em outras linguagens, de formaque o objetivo destas linguagens passa a ser combinarcomponentes e não desenvolver programas a partir de estruturasde dados elementares. Por esta razão, as linguagens de scriptssão também chamadas de linguagens de colagem (gluelanguages) ou de linguagens de integração se sistemas (systemintegration languages).

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

2

Domínios de Programação –Linguagens de script

� Linguagens de script modernas (Perl, Tcl/Tk e Python) suportam:– Manipulação textual simples para interpretação das entradas do

usuário;– Interfaceamento com software já existente;– Acesso a sistemas operacionais, por meio de variáveis de ambiente e

chamadas ao sistema.

� Exemplo: pode-se executar um programa numérico em Fortran,enviar sua saída para plotagem no GNU e criar um arquivoimagem (em formato ppm), convertendo-o em um arquivo gifusando-se o programa utilitário ppmtogif, tudo de uma só vez emum script Perl.

� Aplicação: linguagens de script são muito usadas paraimplementar CGIs (Common Gateway Interfaces), para criarpáginas dinâmicas de Web.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �52

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

3Domínios de Programação –Linguagens de script

# exemplo em TCL/TK

proc Dos2Unix {fileToConvert} {

puts $fileToConvert

if {[file isdirectory $fileToConvert]} {

foreach subFile [glob [file join $fileToConvert *]] {

Dos2Unix $subFile

}

} else {

set inputFile [open $fileToConvert]

set outputFile [open $fileToConvert.new w]

fconfigure $outputFile -translation lf

puts -nonewline $outputFile [read $inputFile]

close $outputFile

close $inputFile

file rename -force $fileToConvert.new $fileToConvert

}

}

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

4

Critérios de Avaliação da Linguagem

1. Legibilidade

2. Capacidade de Escrita

3. Confiabilidade

4. Custo

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �53

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

5Critérios de Avaliação da Linguagem

Critério 1:

� Legibilidade

– Simplicidade Global

– Ortogonalidade

– Instruções de Controle

– Tipos de Dados e estruturas

– Considerações sobre sintaxe

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

6

Critérios de Avaliação da Linguagem Legibilidade

� Um dos critérios mais importantes para julgar uma linguagem deprogramação é a facilidade com que os programas são lidos eentendidos

� Antes de 70 : escrita de código

� Na década de 70: manutenção (o conceito de ciclo de vida desoftware)

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �54

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

7Critérios de Avaliação da LinguagemLegibilidade

� A facilidade de manutenção é determinada em grandeparte, pela legibilidade dos programas, ela se tornouuma medida importante da qualidade dos programas edas linguagens

� A legibilidade deve ser considerada no contexto dodomínio do problema (Ex. um programa escrito emuma linguagem não apropriada se mostra antinatural e“enrolado”, difícil de ser lido)

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

8

Critérios de Avaliação da LinguagemLegibilidade: Simplicidade Global

� A simplicidade global de uma linguagem deprogramação afeta fortemente sua legibilidade.

� Uma linguagem com um grande número decomponentes básicos é mais difícil de ser aprendidodo que uma com poucos desses componentes.

– Os programadores que precisam usar uma linguagem grandetendem a aprender um subconjunto dela e ignorar seus outrosrecursos.

� Esse padrão de aprendizagem pode ocasionarproblemas quando o leitor do programa aprende umconjunto diferente de recursos daquele que o autoraplicou em seu programa.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �55

25/0

4/20

17R

ogér

io E

duar

do G

arci

a10

9Critérios de Avaliação da LinguagemLegibilidade: Simplicidade Global

� Uma segunda característica que complica alegibilidade é a multiplicidade de recursos(mais que uma maneira de realizar umaoperação particular :

i=i+1

i+=1

i++

++i

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

0

Critérios de Avaliação da LinguagemLegibilidade: Simplicidade Global

� Um terceiro problema é a sobrecarga deoperadores, na qual um único símbolo temmais que um significado.– Apesar de ser um recurso útil, pode ser prejudicial a

legibilidade se for permitido aos usuários criar suaspróprias sobrecargas. Ex sobrecarregar o + paraadicionar inteiros, reais, concatenar strings, somarvetores...

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �56

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

1Critérios de Avaliação da LinguagemLegibilidade: Simplicidade Global

� A simplicidade de linguagens, no entanto podeser levada ao extremo, por exemplo a forma eo significado da maioria das instruções emAssembly são modelos de simplicidade,entretanto torna os programas em Assemblymenos legíveis. Uma vez que a falta deinstruções de controle mais complexas, tornanecessário o uso de mais códigos paraexpressar problemas do que os necessário emlinguagens de alto nível.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

2

Critérios de Avaliação da LinguagemLegibilidade: Ortogonalidade

� Possibilidade de combinar entre si, semrestrições, os componentes básicos da LP.

– Exemplo: permitir combinações de estruturas dedados, como arrays de registros

– Contra exemplo: não permitir que um array sejausado como parâmetro de um procedimento

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �57

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

3

Critérios de Avaliação da LinguagemLegibilidade: Ortogonalidade-Exemplos

� Falta de ortogonalidade em C:– A linguagem C possui dois tipos de dados estruturados: arrays e

registros (struct), sendo que :– registros podem ser retornados de funções, arrays não;– um membro de estrutura pode ser qualquer tipo de dado, exceto void

ou uma estrutura do mesmo tipo;– um elemento de array pode ser qualquer tipo de dado, exceto void ou

uma função.– Parâmetros são passados por valor, a menos que sejam arrays –

que obrigatoriamente são passados por referência;

� Falta de ortogonalidade em Pascal:– while a > b do begin .... end;–

– if a > b then begin ... end;

– repeat .... until;

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

4

Critérios de Avaliação da LinguagemLegibilidade: Instruções de Controle

� A revolução da programação estruturada da décadade 70 foi, em parte, uma reação à má legibilidadecausada pelas limitadas instruções de controle daslinguagens das décadas de 50 e 60.

� Uso indiscriminado de goto.– Em certas linguagens, entretanto, instruções goto que seramificam para cima, às vezes, são necessárias; ex: elasconstroem laços whilewhilewhilewhile em FORTRAN 77. Restringir instruçõesgoto das seguintes maneiras pode tornar os programas maislegíveis:– Elas devem preceder seus alvos, exceto quando usadas paraformar laços;– . Seus alvos nunca devem estar tão distantes;– . Seu número deve ser limitado.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �58

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

5

Critérios de Avaliação da LinguagemLegibilidade: Instruções de Controle

� A partir do final de 60, as linguagensprojetadas passaram a ter instruções decontrole suficientes e portanto a necessidadeda instrução goto foi quase eliminada. Oprojeto da estrutura de controle de umalinguagem é agora um fator menor importantena legibilidade do que no passado.– while do...while repeat...until for..next

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

6

Critérios de Avaliação da LinguagemLegibilidade: Tipos de Dados e Estruturas

� A presença de facilidades adequadas para definir tiposde dados e estruturas de dados em uma linguagem éoutro auxílio significativo para a legibilidade. Ex:supõe-se que um tipo numérico seja usado para umsinalizador porque não há nenhum tipo booleano nalinguagem. :

� Terminou=1, não é tão claro como Terminou=true

� Outro exemplo é uso de dados registro (Record) que émais legível que o uso de vetores similares, um paracada item de dados (por exemplo em FORTAN 77)

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �59

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

7Critérios de Avaliação da LinguagemLegibilidade: Considerações sobre a Sintaxe

� A sintaxe ou a forma dos elementos de umalinguagem tem um efeito significativo sobre alegibilidade dos programas. Exemplos deopções de projeto sintático que afetam alegibilidade :– Formas identificadoras. Restringir os identificadores

a tamanhos muitos pequenos prejudica alegibilidade. Tamanhos de identificadores muitopequenos impedem as vezes de nomear variáveiscom nomes conotativos. (Ex: FORTRAN 77,máximo 6 caracteres; BASIC ANSI, uma letra ouuma letra e um número)

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

8

Critérios de Avaliação da LinguagemLegibilidade: Considerações sobre a Sintaxe

� Palavras especiais. A aparência de umprograma e sua conseqüente legibilidade sãofortemente influenciadas pelas formas daspalavras especiais de uma linguagem(ex:begin, end e for).

� O Pascal exige pares de begin/end paraformar grupos em todas as construções decontrole (exceto repeat), a linguagem C usachaves.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �60

25/0

4/20

17R

ogér

io E

duar

do G

arci

a11

9Critérios de Avaliação da LinguagemLegibilidade: Considerações sobre a Sintaxe

� Ambas as linguagens sofrem porque os gruposde instruções são sempre encerrados damesma maneira, o que torna difícil determinarqual grupo está sendo finalizado quando umend ou } aparece

� O FORTAN 90 e o ADA tornam isso maisclaro, usando uma sintaxe de fechamentodistinta para cada tipo de grupo de instrução.(if...end if / loop...end loop)

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

0

If condição

Then

instruções

[ElseIf

condição Then

instruções]

[Else

instruções]

End If

Select Case

expressão

Case lista

instruções

Case lista

instruções

Case Else

instruções

End Select

Do While|Until

condição

instruções

[Exit Do

instruções]

Loop

Critérios de Avaliação da LinguagemLegibilidade: Conflito!!!

Conflito entre a simplicidade e a Legibilidade em Visual Basic:

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �61

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

1Critérios de Avaliação da Linguagem

Critério 2:

� Capacidade de Escrita

– Simplicidade e Ortogonalidade

– Suporte para Abstração

– Expressividade

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

2

Critérios de Avaliação da LinguagemCapacidade de Escrita (CE)

� É a medida da facilidade em que uma linguagem podeser usada para criar programas para um domínio deproblema escolhido;

� A maioria das características da linguagem que afetama legibilidade também afetam a C.E. ;

� Deve ser considerada no contexto do domínio deproblema-alvo da linguagem;

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �62

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

3Critérios de Avaliação da LinguagemCE: Simplicidade e Ortogonalidade

� Ortogonalidade: um número menor deconstruções primitivas e um conjuntoconsistente de regras para combiná-las;

� Demasiada ortogonalidade pose resultar emprejuízo para a capacidade de escrita.– Se quase todas as combinações de primitivas são

legais, erros podem não ser detectados;

– Combinações absurdas;

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

4

Critérios de Avaliação da LinguagemCE: Suporte para Abstração

� Abstração: capacidade de definir e, depoisusar estruturas ou operações complicadas deuma maneira que permita ignorar muito dosdetalhes.

� Tipos de Abstração:– de Processo: algoritmos de classificação,

elementos de interface gráfica

– de Dados: tipo moeda, tipo string, tipo data

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �63

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

5Critérios de Avaliação da LinguagemCE: Expressividade

� Formas convenientes de especificar computações– Uma expressão representa muitas computações

� Exemplos:– i++, ao invés de i=i+1

– for ao invés do while

– Readln do Pascal ao invés de readLine do Java

(Java) (Pascal)

BufferedReader teclado; linha: string[20]

String linea; readln(linha)

teclado = new BufferedReader(

new InputStreamReader(System.in) );

linea = teclado.readLine();

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

6

Critérios de Avaliação da Linguagem

Critério 3:

� Confiabilidade

– Verificação de Tipos

– Manipulação de Exceções

– Aliasing

– Legibilidade e Capacidade de Escrita

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �64

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

7Critérios de Avaliação da LinguagemConfiabilidade

� Um programa é confiável se ele se comportarde acordo com suas especificações sob todasas condições.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

8

Critérios de Avaliação da LinguagemConfiabilidade: Verificação de Tipos

� Testar se existem erros de tipos em determinadoalgoritmo, ou por meio do compilador ou durante aexecução do programa;

� A verificação de tipos durante a compilação é a maisindicada;

� A verificação de tipos em C é bastante fraca:– float media=5/2;

– int vet[50];

– vet[100]=10.3;

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �65

25/0

4/20

17R

ogér

io E

duar

do G

arci

a12

9

Critérios de Avaliação da LinguagemConfiabilidade: Manipulação de Exceções

� Capacidade de um programa de interceptar erros emtempo de execução, pôr em prática medidas corretivase, depois, prosseguir;

� Exemplos:

Java C++try

{

...

}

catch( Exception e )

{

...

}

try

{

...

}

catch (Exception &exception)

{

...

}

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

0

Critérios de Avaliação da LinguagemConfiabilidade: Aliasing

� É ter dois ou mais métodos, ou nomes, distintos parafazer referência à mesma célula de memória.

� Exemplos em C:char i=`x`;

char *p;

p=&i;

*p=`z`;

union reg

{

long i;

float f;

}r;

...

r.f=1000;

Ponteiros Union

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �66

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

1

Critérios de Avaliação da LinguagemConfiabilidade: Legibilidade e Capacidade de Escrita

� Tanto a legibilidade como a capacidade de escritainfluenciam a confiabilidade;

� Um programa escrito em uma linguagem que nãosuporta maneiras naturais de expressar os algoritmosexigidos usará necessariamente métodos nãonaturais;

� Quanto mais fácil é escrever um programa, maisprobabilidade ele tem de ser correto;

� Programas de difícil leitura complicam também suaescrita e sua modificação;

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

2

Critérios de Avaliação da Linguagem

Critério 4:

� Custo

� “O custo final de uma linguagem deprogramação é uma função de muitas de suascaracterísticas”

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �67

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

3Critérios de Avaliação da LinguagemCusto

� Treinamento– Em função da simplicidade e da ortogonalidade da

linguagem e da experiência dos programadores.

� Custo da Escrita– Em função da capacidade de escrita;

– Os esforços originais para projetar e implementarlinguagens de alto nível foram motivados pelosdesejos de diminuir os custos para criar software.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

4

Critérios de Avaliação da LinguagemCusto

� Sistema de Implementação– LP cujo sistema de implementação seja caro, ou

rode somente em hardware caro, terá muito menoschance de tornar-se popular.

– Sucesso de Java.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �68

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

5Critérios de Avaliação da LinguagemCusto

� Projeto da Linguagem– Se uma LP exigir muitas verificações de tipos

durante a execução, proibirá a execução rápida docódigo.

� Compilação– Problema amenizado com o surgimento de

compiladores otimizados e de processadores maisrápidos.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

6

Critérios de Avaliação da LinguagemCusto

� Má Confiabilidade– Falhas podem ocasionar insucesso o software e

ações judiciais.

� Manutenção– Depende principalmente da legibilidade.

– O custo de manutenção pode atingir de duas aquatro vezes o custo de desenvolvimento.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �69

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

7Fatores que influenciam na Escolha de uma LP

� Implementação

� Competência na LP

� Portabilidade

� Sintaxe

� Semântica

� Ambiente de programação

� Modelo de computação

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

8

Fatores que influenciam na Escolha de uma LP

� Implementação

� Competência na LP

� Portabilidade

� Sintaxe

� Semântica

� Ambiente de programação

� Modelo de computação

√ Disponibilidade quanto à plataforma

√ Eficiência: velocidade de execução do programa objeto

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �70

25/0

4/20

17R

ogér

io E

duar

do G

arci

a13

9Fatores que influenciam na Escolha de uma LP

• Implementação

• Competência na LP

• Portabilidade

• Sintaxe

• Semântica

• Ambiente de programação

• Modelo de computação

√ Experiência do programador

√ Competência do grupo envolvido

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

0

Fatores que influenciam na Escolha de uma LP

• Implementação

• Competência na LP

• Portabilidade

• Sintaxe

• Semântica

• Ambiente de programação

• Modelo de computação

√ Necessidade de executar em várias máquinas.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �71

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

1Fatores que influenciam na Escolha de uma LP

• Implementação

• Competência na LP

• Portabilidade

• Sintaxe

• Semântica

• Ambiente de programação

• Modelo de computação

√ Certos tipos de aplicação acomodam-se melhor

em certas sintaxes

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

2

Fatores que influenciam na Escolha de uma LP

• Implementação

• Competência na LP

• Portabilidade

• Sintaxe

• Semântica

• Ambiente de programação

• Modelo de computação√ Aplicação X Facilidades

√ Por exemplo, para processamento concorrente pode-se

usar ADA, para utilização de recursividade pode-se usar

Pascal.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �72

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

3Fatores que influenciam na Escolha de uma LP

• Implementação

• Competência na LP

• Portabilidade

• Sintaxe

• Semântica

• Ambiente de programação

• Modelo de computação√ Ferramentas para desenvolvimento de software

diminuem o esforço de programação

√ Bibliotecas

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

4

Fatores que influenciam na Escolha de uma LP

• Implementação

• Competência na LP

• Portabilidade

• Sintaxe

• Semântica

• Ambiente de programação

• Modelo de computação

√ Aplicação X modelo de computação

√ Por exemplo, para realização de busca heurística é

adequado o Paradigma Lógico, para simulações, o

Paradigma Orientado a Objeto

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �73

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

5

Histórico (70+)

� Década de 70: engenharia de software– Abstração de dados: definição de tipos

– Abstração de controle: comandos, procedimentos

– Inicia preocupação com programação em largaescala: módulos e programação estruturada

� Exemplos de linguagens populares:– Uso acadêmico:Algol (algoritmos), Pascal (tipos de

dados)

– Uso comercial: Cobol (arquivos), PL/I (uso amplo)

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

6

Histórico (70+)

� Década de 80: modularização

– Ênfase em mecanismos de LP e abstrações

– Correção de programas: verificação de tipos, exceções

– Programação concorrente e distribuída e tempo real

– Programação baseada em objetos (TADs)

– Programação orientada a objetos (herança)

� Exemplos de linguagens

– Uso acadêmico: Pascal / Modula

– Programação de tempo real: Ada 83

– Orientada a objetos: Smalltalk

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �74

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

7

Histórico (70+)

� Década de 90: base na estrutura– Estruturação de dados: encapsulamento

– Estruturação da computação: classe

– Estruturação do programa: classes e objetos

– Programação para Internet: plataforma neutra

� Exemplos de linguagens– Pascal / Object Pascal

– C / C++

– Ada83 / Ada95

– Java

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

8

Quadro Histórico

Ver link na página da disciplina...

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �75

25/0

4/20

17R

ogér

io E

duar

do G

arci

a14

9

Histórico

� 1955 - 1965� FORTRAN (FORmula TRANslation)

� COBOL (COmmon Business Oriented Language)

� ALGOL 60 (ALGorithmic Oriented Language)

� LISP (LISt Processing)

� APL (A Programming Language)

� BASIC (Beginners All-purpose Symbolic Instruction Code)

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

0

Histórico

� 1965 - 1971 (LP's baseadas em ALGOL)� PL/I (Programming Language I)

� SIMULA 67

� ALGOL 68

� PASCAL

� Linguagens dos anos 80 (criadas na década de 70)� PROLOG (PROgramming in LOGic)

(PROgrammación LOGiqué)

� SMALLTALK

� C

� MODULA 2

� ADA

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �76

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

1

Características de Linguagens

� FORTRAN (FORmula TRANslation)� variáveis

� comando de atribuição

� conceito de tipos

� modularidade (com o uso de subprogramas)

� E/S formatadas

� COBOL (COmmon Business OrientedLanguage)

� código mais legível

� estrutura de dados heterogênea (record)

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

2

Características de Linguagens

� ALGOL 60 (ALGorithmic Oriented Language)� estrutura de blocos: habilidade de se criar blocos de

comandos para o escopo de variáveis e extensão deinfluência de comandos de controle

� comandos de controle estruturados: if-then-else e uso deuma condição geral para controle de iteração

� recursividade: habilidade de um procedimento chamar a sipróprio

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �77

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

3

Características de Linguagens

� LISP (LISt Processing)� é pioneira na idéia de computação simbólica ou não-

numérica

� BASIC (Beginners All-purpose SymbolicInstruction Code)

� uma das primeiras LPs a prover um ambiente deprogramação interativo como parte da linguagem

� execução interpretativa de programas

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

4

Características de Linguagens

� PL/I (Programming Language I)� tratamento de interrupção - execução de procedimentos

específicos quando uma condição excepcional ocorre

� multitarefa - especificação de tarefas que podem serexecutadas concorrentemente

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �78

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

5

Características de Linguagens

� PL/I (Programming Language I)– tratamento de interrupção - execução de procedimentos

específicos quando uma condição excepcional ocorre

– multitarefa - especificação de tarefas que podem serexecutadas concorrentemente

•Influências Sofridas:�estrutura de bloco, de controle e recursividade doALGOL 60;

�subprogramas e E/S formatadas do FORTRAN;

�manipulação de arquivos e registros do COBOL;

�alocação dinâmica de memória e estruturas encadeadasdo LISP;

�operações de arrays do APL.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

6

Características de Linguagens

� SIMULA 67– conceito de classe: Uma classe é um

encapsulamento de dados e procedimentos quepodem ser instanciados em um conjunto de objetos.É o conceito predecessor ao tipo abstrato de dados(ADA e Módula 2) e das classes das linguagensorientadas a objeto (Smalltalk e C++)

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �79

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

7

Características de Linguagens

� ALGOL 68– ortogonalidade: uma LP que é ortogonal tem um

número de construtores básicos e um conjunto deregras para combiná-los relativamente pequeno(oposto a PL/I)

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

8

Características de Linguagens

� PASCAL� estruturas de controle flexíveis

� tipos definidos pelo usuário

� arquivos

� records

� conjuntos

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �80

25/0

4/20

17R

ogér

io E

duar

do G

arci

a15

9

Características de Linguagens

� PROLOG (PROgrammación LOGiqué)– É destinada a aplicações de Inteligência Artificial e

se baseia em lógica formal.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

0

Características de Linguagens

� SMALLTALK� primeira LP a utilizar o paradigma de programação

interativa

� introduz o conceito de LP extensível

•Influências Sofridas:•Apresenta um ambiente de programação com menus pop-up,

windows e mouse (modelo para Apple Macintosh).

•Segue o modelo orientado a objetos, possuindo o conceito de

classe do SIMULA 67 mais encapsulamento, herança e

instanciação.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �81

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

1

Características de Linguagens

� C– Desenvolvida pelo Bell Lab no início dos anos 70,

visando a implementação do UNIX. Possui umpadrão feito por Kernighan e Ritchie em 1978. Temfacilidades para a programação em "baixo nível" egera código eficiente. Possui um grande conjuntode operadores, o que permite um código compacto,porém de baixa legibilidade. É excelente paraconstruir programas portáveis.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

2

Características de Linguagens

� MODULA 2– Criada por Niklaus Wirth no final dos anos 70.

– É uma linguagem de propósito geral, baseada emmelhorias no Pascal.

– É boa para projetos de desenvolvimento desoftware de grande porte, sendo utilizada paraensinar programação.

– Módulos podem ser usados para implementar TAD(Tipos Abstratos de Dados)

– tipos de procedimentos

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �82

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

3

Características de Linguagens

� ADA– Desenvolvida no início dos anos 70 pelo Departamento de

Defesa dos Estados Unidos.– É dedicada aos "embedded systems" (operam como parte de

um sistema maior) e se baseia no Pascal.– Teve um padrão em 1983.– Usa conceitos de classe do Simula 67, adota o tratamento de

exceções de PL/I e provê facilidades para processamentoconcorrente.

– Foi projetada para apoiar aplicações numéricas, programaçãode sistemas e aplicações que envolvem considerações detempo real e concorrência.

– Seu nome se deve a ADA Augusta, 1a programadora,colaboradora de Charles Babbage - século 19.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

4

Classificação das Linguagens de Programação

� Quanto ao nível

� Quanto à geração

� Quanto ao paradigma

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �83

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

5

Classificação quanto ao nível

� Baixo nível

� Médio nível

� Alto nível

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

6

Classificação quanto ao nível

Linguagens de Baixo Nível:� As linguagens de Baixo Nível são aquelas voltadas para a

máquina, ou seja as que são escritas utilizando as instruções domicroprocessador do computador. São genericamente chamadasde linguagens Assembly. Os programas escritos com Alto Nívelgeralmente podem ser convertidos com programas especiais paraBaixo Nível.

� MOV BX,0

� CONTINUA:

� MOV DL, [MENSAGEM + BX] ;DL := MENSAGEM[BX]

� CMP DL,0 ;COMPARA DL COM ZERO

� JE TERMINA ;SE IGUAL, PULA PARA TERMINA

� MOV AH,2 ;VAMOS IMPRIMIR O CARACTER

� INT 21H ;INT 21H, SIM, FAÇA ISSO!

� INC BX ;INCREMENTA DESLOCAMENTO

� JMP CONTINUA ;E CONTINUA NO LOOP

� TERMINA:

� INT 20H ;TERMINE ESSE PROGRAMA .COM

registrador

interrupção

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �84

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

7

Classificação quanto ao nível

Linguagens de Baixo Nível:

� Vantagens: Programas são executados com maiorvelocidade de processamento. Os programas ocupammenos espaço na memória.

� Desvantagens: Em geral, programas em Assembly tempouca portabilidade, isto é, um código gerado para umtipo de processador não serve para outro. CódigosAssembly não são estruturados, tornando aprogramação mais difícil.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

8

Classificação quanto ao nível

Linguagens de Médio Nível:

� São linguagens voltadas ao ser humano e a máquina, ou seja,estas linguagens são uma mistura entre as linguagens de AltoNível e as de Baixo Nível.

� Estas linguagens contêm comandos muito simples e outros muitocomplicados, o que torna o seu código não muito difícil e nem tãofácil de entender.

� Vantagens: Geralmente são linguagens com mais poder,permitindo a criação de diversos softwares, desde jogos aprogramas com qualidade profissional.

� Desvantagens: Alguns comandos têm uma sintaxe muito difícil decompreender.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �85

25/0

4/20

17R

ogér

io E

duar

do G

arci

a16

9

Classificação quanto ao nível

Linguagens de Alto Nível:

� São linguagens voltadas para o ser humano. Em geral utilizamsintaxe mais estruturada tornando o seu código mais fácil deentender, e de editar programas.

� Vantagens: Por serem compiladas ou interpretadas, têm maiorportabilidade, podendo ser executados em varias plataformascom pouquíssimas modificações. Em geral, a programação torna-se mais fácil por causa do maior ou menor grau de estruturaçãode suas linguagens.

� Desvantagens: Em geral, as rotinas geradas (em linguagem demáquina) são mais genéricas e, portanto, mais complexas e porisso são mais lentas e ocupam mais memória.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

0

Classificação quanto à geração

� 1ª Geração

� 2ª Geração

� 3ª Geração

� 4ª Geração

� 5ª Geração

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �86

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

1

Classificação quanto à geração

1ª Geração: Linguagens em nível de máquina

� Os primeiros computadores eram programados emlinguagem de máquina, em notação binária.

� A instrução 0010 0001 0110 1100, quando executada,realiza a soma:

� (código de operação 0010) do dado armazenadono registrador 0001, com o dado armazenado naposição de memória 108 (01101100).

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

2

Classificação quanto à geração

1ª Geração: Linguagens em nível de máquina

� Cada instrução de máquina é, em geral, formada por um códigode operação e um ou dois endereços de registradores ou dememória.

� As linguagens de máquina permitem a comunicação direta com ocomputador em termos de “bits”, registradores e operações demáquina bastante primitivas.

� Como um programa em linguagem de máquina nada mais é queuma seqüência de zeros e uns, a programação de um algoritmocomplexo usando esse tipo de linguagem é complexa, cansativa efortemente sujeita a erros.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �87

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

3

Classificação quanto à geração

2ª Geração: Linguagens de Montagem (Assembly)

� Compreende as linguagens simbólicas ou de montagem(Assembly), projetadas para minimizar as dificuldades daprogramação em notação binária.

� Códigos de operação e endereços binários foram substituídos pormnemônicos (abreviações).

mov mul add label goto

� Nas linguagens de montagem, a maioria das instruções sãorepresentações simbólicas de instruções de máquina. Oprocessamento de um programa em linguagem simbólica requertradução para linguagem de máquina antes de ser executado.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

4

Classificação quanto à geração

2ª Geração: Linguagens de Montagem (Assembly)

� Códigos de operação e endereços binários foramsubstituídos por mnemônicos. Assim, a instrução demáquina (0010 0001 0110 1100) evoluiu para:

ADD R1, TOTAL

� R1 representa o registrador 1 e TOTAL é o nomeatribuído ao endereço de memória 108.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �88

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

5

Classificação quanto à geração

2ª Geração: Linguagens de Montagem(Assembly)

� Exemplo em Assembly

mov eax, [ebx+$02E0]mov edx, [eax]call dword ptr [edx+$00B4]cmp al, $01jnz 0044679Bxor edx, edxmov eax, ebx

� * um projeto Delphi com 22 linhas de código revertido paraAssembly, ficou com aproximadamente 15.000 linhas!

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

6

Classificação quanto à geração

3ª geração: Linguagens Orientadas ao usuário

� Surgiram na década de 60.

� Algumas delas são orientadas à solução de problemascientíficos, tais como FORTRAN, PASCAL e ALGOL;outras, tal como COBOL, são usadas para aplicaçõescomerciais.

� Linguagens como PL/I e ADA contêm facilidades paraambos os tipos de computações (científica ecomercial).

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �89

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

7

Classificação quanto à geração

3ª geração: Linguagens Orientadas ao usuário

� As linguagens de 3ª geração podem tambémser classificadas em:

– linguagens procedimentais� também chamadas “procedurais” ou imperativas

– linguagens declarativas

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

8

Classificação quanto à geração

3ª geração: Linguagens Orientadas ao usuário

� Nas linguagens procedimentais, um programaespecifica um procedimento, isto é, uma seqüência depassos a serem seguidos para solucionar umproblema.

� As instruções oferecidas por essas linguagenspertencem, em geral, a três classes:

– instruções entrada/saída,– instruções de cálculos aritméticos ou lógicos– instruções de controle de fluxo de execução (desvios

condicionais, incondicionais e processamento iterativo)

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �90

25/0

4/20

17R

ogér

io E

duar

do G

arci

a17

9

Classificação quanto à geração

3ª geração: Linguagens Orientadas ao usuário

� Exemplos de linguagens procedimentais: BASIC, ALGOL, PL/I,PASCAL, ADA, C,etc.

� Programa em Basic:10 INPUT A,B,C20 LET SOMA = A+B+C30 LET MEDIA = SOMA/340 PRINT MEDIA50 PRINT "DESEJA CONTINUAR (S/N)?"60 INPUT RESPOSTA70 IF RESPOSTA = "S"THEN 1080 END

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

0

Classificação quanto à geração

3ª geração: Linguagens Orientadas ao usuário

� As linguagens declarativas dividem-se, basicamente, em duasclasses:

– funcionais, as quais se baseiam na teoria das funções recursivas– lógicas, cuja base é a lógica matemática.

� A programação funcional envolve, essencialmente, a definição ea chamada de funções. LISP é o exemplo mais difundido delinguagem funcional.

� Nas linguagens lógicas, um programa declara fatos (dados erelações entre eles) e cláusulas lógicas (regras de dedução), quepermitirão deduzir novas verdades a partir dos fatos conhecidos.Ex. PROLOG

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �91

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

1

Classificação quanto à geração

4ª geração: Linguagens Orientadas à Aplicação

� As linguagens de 3ª geração foram projetadas paraprofissionais de processamento de dados e não parausuários finais.

� A depuração de programas escritos nessaslinguagens consome tempo, e a modificação desistemas complexos é relativamente difícil.

� As linguagens de 4ª geração foram projetadas emresposta a esses problemas.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

2

Classificação quanto à geração

4ª geração: Linguagens Orientadas à Aplicação

� Os programas escritos em linguagens de 4ª geraçãonecessitam de menor número de linhas de código doque os programas correspondentes codificados emlinguagens de programação convencionais.

� Ex. mostrar uma imagem bmp em CA-dBFast:

LOAD IMAGE C:\multimid\LAB1.BMP INTO pIMAGE@ 0,28 SAY pIMAGE

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �92

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

3

Classificação quanto à geração

4ª geração: Linguagens Orientadas à Aplicação� Ex. Trecho de cógigo para visualizar uma imagem bmp em C (Borland):

FILE *p;

BITMAPFILEHEADER BF;

BITMAPHEADER BH;

p=fopen(“ARQ.BMP”, "rb");

fread(&BF, sizeof(BF), 1, p);

fread(&BH, sizeof(BH), 1, p);

int xx = x;

int yy = BH.altura + y;

unsigned char buf;

fseek(p, BF.inicio_da_imagem, 0);

for (int i = 1; i <= BH.altura; i++)

{

for (int j = 1; j <= BH.largura; j++)

{

buf = getc(p);

putpixel(xx, yy, buf >> 4);

putpixel(xx+1, yy, (buf << 4) >> 4);

xx += 2;

j++;

}

xx = x; yy--;

}

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

4

Classificação quanto à geração

4ª geração: Linguagens Orientadas à Aplicação

� As linguagens de 4ª geração variam bastante nonúmero de facilidades oferecidas ao usuário.

� Algumas são, meramente, geradores de relatórios oupacotes gráficos;

� Outras são capazes de gerar aplicações completas.

� Em geral, essas linguagens são projetadas paraatender a classes específicas de aplicações.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �93

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

5

Classificação quanto à geração

4ª geração: Linguagens Orientadas à Aplicação

� Principais objetivos:– Facilitar a programação de computadores de

maneira tal que usuários finais possam resolverseus problemas

– Apressar o processo de desenvolvimento deaplicações;

– Facilitar e reduzir o custo de manutenção deaplicações;

– Minimizar problemas de depuração;– Gerar código sem erros a partir de requisitos de

expressões de alto nível.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

6

Classificação quanto à geração

4ª geração: Linguagens Orientadas à Aplicação

� Exemplos de linguagens de 4ª geração:– LOTUS 1-2-3, EXCEL, SQL, SUPERCALC,

VISICALC, DATATRIEVE, VHML, PHP

� Comando em dBase III Plus:– LIST ALL NOME, ENDERECO, TELEFONE

FOR CIDADE = "PRESIDENTEPRUDENTE"

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �94

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

7

Classificação quanto à geração

5ª geração: Linguagens do Conhecimento

� São usadas principalmente na área de Inteligência Artificial.

� Facilitam a representação do conhecimento que é essencial paraa simulação de comportamentos inteligentes.

� O termo 5ª geração refere-se, especialmente, a sistemas queusam mecanismos da área de inteligência artificial (IA), ou seja,sistemas especialistas, processadores de língua natural esistemas com bases de conhecimento.

� Um sistema de 5ª geração armazena conhecimento complexo demodo que a máquina pode obter inferências a partir dainformação codificada.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

8

Classificação quanto ao paradigma

� Imperativo

� Funcional

� Lógico

� Orientado a Objetos

� Concorrente

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �95

25/0

4/20

17R

ogér

io E

duar

do G

arci

a18

9

Definição (lembrando...)

Uma LP (Linguagem de Programação) é umalinguagem destinada a ser usada por umapessoa para expressar um processo atravésdo qual um computador pode resolver umproblema. Os quatro modelos (paradigmas)de LP correspondem aos pontos de vista dosquatro componentes citados. A eficiência naconstrução e execução de programas dependeda combinação dos quatro pontos de vista.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

0

Paradigma

� Paradigma é um modelo interpretativo (ouconceitualização) de uma realidade.

� Permite organizar as idéias com vista:– Ao entendimento dessa realidade.

– À determinação de qual a melhor forma de atuar sobre essarealidade.

� Pode dizer-se que um paradigma é um ponto de vista:um ponto de vista que determina como uma realidadeé entendida e como se atua sobre ela.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �96

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

1

Paradigma

� Exemplos de tipos de paradigma:

– Paradigmas políticos (ideologias) - Liberalismo, Fascismo,Comunismo, Socialismo, etc. (Sabemos que as diferentesideologias interpretam distintamente a realidade social eestabelecem planos de ação distintos..

– Paradigmas econômicos (teorias) - Keynesianismo (Keynes),Monetarismo (Milton Friedman), etc.

– Paradigmas militares - Estratégia Medieval (armas brancas,fortificações), Guerra Fria (armas nucleares,ameaça/contenção), Guerrilha (tentativa de obter máximosresultados com recursos muitos escassos).

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

2

Paradigma na programação

� Algumas linguagens criadas durante a história da evolução daslinguagens introduziram novas formas de se pensar sobreprogramação, resultando em formas distintas de modelagem desoluções para problemas de software.

– FORTRAN (imperativas),– LISP (funcionais),– Simula (orientadas a objetos)– Prolog (lógicas).

� Outras linguagens são o resultado da evolução de linguagensmais antigas, muitas vezes mesclando características dediferentes linguagens existentes. Por exemplo, C++ é umaevolução do C com características de orientação a objetos,importadas de Simula.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �97

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

3

Paradigma na programação (exemplos)

� Paradigma imperativo (estado, atribuição, seqüência)Basic, Pascal, C, Ada, Assembly.

� Paradigma funcional (função, aplicação, avaliação)Lisp, ML, Miranda, Haskell, SCHEME.

� Paradigma lógico (relação, dedução)Prolog.

� Paradigma orientado a objetos (objeto, mensagem)C++, Java, Eiffel, Ocaml.

� Paradigma concorrente (processo, comunicação (síncrona ouassíncrona) )

Ada, Java.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

4

Paradigma na programação (combinação)

� C++Paradigma imperativo + paradigma orientado a objetos.

� JavaParadigma orientado a objetos + paradigma concorrente.

� OcamlParadigma funcional + paradigma orientado a objetos.

� AdaParadigma imperativo + paradigma concorrente.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �98

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

5

Paradigmas

Paradigma Imperativo

� As linguagens imperativas são orientadas aações, onde a computação é vista como umaseqüência de instruções que manipulamvalores de variáveis (leitura e atribuição).

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

6

Paradigma Imperativo

� Programas centrados no conceito de umestado (modelado por variáveis) e ações(comandos) que manipulam o estado.

� Paradigma também denominado deprocedural, por incluir subrotinas ouprocedimentos como mecanismo deestruturação.

� Primeiro paradigma a surgir e ainda muitoimportante.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �99

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

7

Paradigma Imperativo

Modelo computacional

Entrada Programa Saída

Estado

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

8

Paradigma Imperativo

� Foram criadas principalmente pela influênciada arquitetura de computadores preponderanteVon Neumann,– programas e dados são armazenados na mesma

memória. Instruções e dados são transmitidos daCPU para a memória, e vice-versa. Resultados dasoperações executadas na CPU são retornadas paraa memória.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �100

25/0

4/20

17R

ogér

io E

duar

do G

arci

a19

9

Paradigma Imperativo

� Seus conceitos principais:

– variáveis, que representam simbolicamente células(ou posições) de memória.

– declarações de atribuição (Exemplo do Pascal: x :=10), baseadas nas operações de transmissão dedados.

– declarações de repetição (Exemplo do C: while).

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

0

Paradigma Imperativo

Linguagens Imperativas Não Estruturadas

� FORTRAN foi uma das primeiras linguagem de altonível imperativas.

� As versões originais de FORTRAN possuíam ainstrução goto necessária para determinar a repetiçãoe a seleção de execução de instruções, o quedificultava bastante a leitura e o acompanhamento daexecução de um programa escrito em FORTRAN.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �101

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

1

Paradigma Imperativo

Linguagens Imperativas Não Estruturadas

� Assembly e BASIC são outros exemplos de linguagensimperativas que possuem o conceito de goto.

10 INPUT A,B,C

20 LET SOMA = A+B+C

30 LET MEDIA = SOMA/3

40 PRINT MEDIA

50 PRINT "DESEJA CONTINUAR (S/N)?"

60 INPUT RESPOSTA

70 IF RESPOSTA = "S"THEN GOTO 10

80 END

Exemplo em Basic

read(x);

2: if x = 0 then goto 8;

writeln(x);

4: read(next);

if next = x then goto 4;

x := next;

goto 2;

8: ...;

Exemplo em Pascal

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

2

Paradigma Imperativo

Linguagens Imperativas Estruturadas

� Linguagens estruturadas surgiram com o objetivo de facilitar aleitura e acompanhamento da execução de algoritmos egeralmente não fazem uso de comando goto.

� Instruções são agrupadas em blocos, os quais podem serconsiderados como unidades de programa, abstraindo-se dassuas estruturas internas.

� Blocos de instruções podem ser selecionados para execuçãoatravés de declarações de seleção como if...else, ourepetidamente executados através de declarações de repetiçãocomo while.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �102

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

3

Paradigma Imperativo

Linguagens Imperativas Estruturadas

� Linguagens estruturadas procedurais permitem a criação deprocedimentos (e funções), que são blocos de instruções, queformam os elementos básicos de construção de programas.Procedimentos criam um nível de abstração, onde não énecessário conhecer todos os passos de execução de umprocedimento, apenas qual a sua função e quais os seus pré-requisitos para que execute de acordo com o esperado.

� Linguagens estruturadas modulares criam um outro mecanismode abstração, o módulo, que normalmente é composto dedefinições de variáveis e procedimentos, que são agrupados deacordo com critérios específicos.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

4

Paradigma Imperativo

Linguagens Imperativas Estruturadas

� Exemplo de código estruturado, baseado na sintaxe doPascal, correspondente ao mesmo exemplo da seçãoanterior:

read(x);

while x <> 0 do begin

writeln(x);

repeat

read(next);

until next <> x;

x := next;

end;

Exemplo em Pascal

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �103

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

5

Paradigma Imperativo

� Vantagens

– Eficiência (embute modelode Von Neumann)

– Modelagem “natural” deaplicações do mundo real

– Paradigma dominante ebem estabelecido

� Problemas– Relacionamento indireto

entre E/S resulta em:� Difícil legibilidade� Erros introduzidos

durante manutenção� Descrições

demasiadamenteoperacionais

� Focalizam o como enão o que

Visão Crítica do Paradigma Imperativo:

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

6

Paradigma Imperativo

� Exemplos de linguagens imperativas:

FORTRAN

BASIC

COBOL

Pascal

C

Python

ALGOL

Modula

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �104

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

7

Paradigmas

Paradigma Funcional

� Sistemas são construídos através da definição,composição e definição de funções.

� Foco no processo de resolução do problema.A visão funcional resulta num programa quedescreve as operações que devem serefetuadas para resolver o problema.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

8

Paradigma Funcional

� Trata a programação como uma transformação dedados por funções

� Que função deve ser aplicada para transformar minhaentrada na saída desejada?

� Ao invés dos passos sucessivos do paradigmaimperativo, a sintaxe da linguagem é apropriada paradefinição de funções compostas que denotamaplicações sucessivas de funções:

função-n(...função-2(função-1(dados))...)

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �105

25/0

4/20

17R

ogér

io E

duar

do G

arci

a20

9

Paradigma Funcional

Modelo computacional

Entrada Programa Saída

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

0

Paradigma Funcional: Características

� Programas são funções que descrevem uma relaçãoexplícita e precisa entre E/S;

� Estilo declarativo: não há o conceito de estado nemcomandos como atribuição;

� Conceitos sofisticados como polimorfismo, funções dealta ordem e avaliação sob demanda

� Aplicação: prototipação em geral e IA

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �106

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

1

Paradigma Funcional

� Uma função tem três componentes básicos:– Domínio: conjunto de objetos aos quais a função se aplica)– Contra-domínio: conjunto de objetos resultantes da aplicação da

função, e– Definição: especificação de como um objeto do contra-domínio é

determinado a partir do domínio.

� Há um quarto componente opcional: o nome da função.

Função:

f: {domínio} {contra-domínio}

Programa:

p: {possíveis entradas} {possíveis saídas}

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

2

Paradigma Funcional

Exemplo 1: função double

Domínio: Z

Contra-Domíno: Z

Definição: x + x, onde x é elemento do domínio

Nome: double

Notação matemática: double(x) = x + x

double: integer integer

Note que o operador + é usado na definição, e + é uma função

também.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �107

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

3Paradigma Funcional – Exemplos em SCHEME

;;; Função para obtenção do dobro de x, com aplicação do valor 4

(lambda (x) (+ x x)) ==> um procedimento

((lambda (x) (+ x x)) 4) ==> 8

;;;Obtenção de x-y e aplicação com os valores 10 e 7

(define reverse-subtract

(lambda (x y) (- y x)))

(reverse-subtract 7 10) ==> 3

;;; procedimento Fatorial para obtenção do fatorial de um número inteiro não-

negativo

(define fact

(lambda (n)

(if (= n 0)

1 ;Caso básico - resulta no valor 1

(* n (fact (- n 1))))))

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

4

Paradigma Funcional

Exemplos de linguagens funcionais:

� Scheme– Derivada de LISP

� Common LISP– Buscando padronização de LISP

� CLOS (Common LISP Object System)– Dialeto de LISP que incorpora elementos de linguagens

orientadas a objetos

� ML– Linguagem funcional fortemente tipada

� Miranda– Baseada em ML, mas é puramente funcional

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �108

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

5

Paradigma Funcional: Visão Crítica

� Vantagens– Manipulação de

programas mais simples:� Prova de propriedades

� Transformação(exemplo: otimização)

– Concorrência exploradade forma natural

� Problemas– O mundo não é funcional!

– Implementaçõesineficientes

– Mecanismos primitivos deE/S e formatação

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

6

Paradigmas

� Paradigma Lógico

� O modelo Lógico está relacionado à perspectiva dapessoa: ele encara o problema de uma perspectivalógica. Um programa lógico é equivalente à descriçãodo problema expressa de maneira formal, similar àmaneira que o ser humano raciocinaria sobre ele.

� Programação é baseada em fatos, que podem serrelações (associações) entre coisas, e regras, queproduzem fatos deduzidos a partir de outros.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �109

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

7

Paradigma Lógico

� Programação em linguagens declarativas (lógica) requer um estilomais descritivo.

� O programador deve conhecer os relacionamentos entre asentidades e conceitos envolvidos para descrever os fatos(cláusulas).

� Programas descrevem um conjunto de regras que disparamações quando suas premissas são satisfeitas.

� Prolog foi desenvolvida em 1972 para processamento delinguagem natural, na França. O nome vem de PROgrammationen LOGique.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

8

Paradigma Lógico

Modelo computacional

Entrada Programa Saída

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �110

25/0

4/20

17R

ogér

io E

duar

do G

arci

a21

9

Paradigma Lógico: Características

� Programas são relações entre E/S

� Estilo declarativo, como no paradigmafuncional

� Na prática, inclui características imperativas,por questão de eficiência

� Aplicações: sistemas especialistas (IA) ebanco de dados

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

0

Paradigma Lógico

� Exemplos em Prolog:obrigado_a_fazer(R,A):- robô(R),

capaz_de_fazer(R,A),

perigo(B,H),

humano(H),

fazer_afasta(A,B,H),

proibido_fazer(R,A):-robô(R),

capaz_de_fazer(R,A),

machuca(A,H),

humano(H).

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �111

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

1

Paradigma Lógico

pai(antonio, claudio).

pai(antonio, ana).

pai(claudio, flavio).

pai(claudio, jean)?.

pai(jean, julia).

?pai(antonio,carlos). � No

?pai(X,jean). � X=claudio

avo(X,Y):-pai(X,Z),pai(Z,Y).

?-avo(antonio,jean). � yes

Antonio

Cláudio

Flavio

Ana

Jean

Júlia

Programas Prolog consistem em dois tipos de declaração, que são fatos e regras.

Exemplo em Prolog

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

2

Paradigma Lógico – Visão Crítica:

� Vantagens– Em princípio, todas do paradigma funcional

– Permite concepção da aplicação em um alto nívelde abstração (por meio de associações entre E/S)

� Problemas– Em princípio, todos do paradigma funcional

– Linguagens usualmente não possuem tipos, nemsão de alta ordem

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �112

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

3

Paradigma Concorrente

� Múltiplas computações podem ser executadassimultaneamente

� Computações paralelas:– Múltiplos processadores compartilham memória

� Computações distribuídas:– Múltiplos computadores conectados por uma rede

de comunicação

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

4

Paradigmas

Paradigma Orientado a Objetos

� Tratam os elementos e conceitos associadosao problema como objetos.

� Objetos são entidades abstratas que embutemdentro de suas fronteiras, as características eoperações relacionadas com a entidade real.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �113

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

5

Paradigma Orientado a Objeto

� O modelo Orientado a Objeto focaliza mais oproblema. Um programa OO é equivalente aobjetos que mandam mensagens entre si. Osobjetos do programa equivalem aos objetos davida real (problema).

� A abordagem OO é importante para resolvermuitos tipos de problemas através desimulação.

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

6

Paradigma Orientado a Objetos

� Não é um paradigma no sentido estrito: é uma sub-classificação do imperativo. (Será?)

� A diferença é mais de metodologia quanto àconcepção e modelagem do sistema.

� A grosso modo, uma aplicação é estruturada emmódulos (classes) que agrupam um estado eoperações (métodos) sobre este.

� Classes podem ser estendidas e/ou usadas comotipos (cujos elementos são objetos).

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �114

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

7

Paradigma Orientado a Objetos

Modelo computacional

Estado

Entrada Programa Saída

Estado

Entrada Programa Saída

Estado

Entrada Programa Saída

Estado

Entrada Programa Saída

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

8

Paradigma Orientado a Objetos

� O paradigma da orientação a objetos considera objetos e classescomo blocos básicos de construção de um sistema. Sistemas sãovistos como coleções de objetos que se comunicam, enviandomensagens, colaborando para dar o comportamento global dossistemas.

� Uma classe determina o comportamento e a estrutura de objetossimilares (Célula, Mamífero, Réptil, Homo, Sapiens).

� Pode-se dizer que a idéia da orientação a objetos foi importada apartir da observação do comportamento de sistemas complexosdo mundo real (animais, plantas, máquinas, ou até mesmoempresas), onde cada objeto possui um determinado conjunto deresponsabilidades dentro de um sistema, que normalmente estãorelacionadas com a manutenção de conhecimento e com açõesque devem executar.

�FCT/UNESP �25/04/2017

�Prof. Dr. Rogério Eduardo Garcia �115

25/0

4/20

17R

ogér

io E

duar

do G

arci

a22

9

Paradigma Orientado a Objetos

� Sistemas orientados a objetos apresentam hierarquias de classes, ondeclasses mais genéricas são especializadas em classes mais específicas(ex.: mamíferos -> felinos, primatas, canídeos, ...), e hierarquias deobjetos, onde objetos mais genéricos são compostos por objetos maisespecíficos (ex.: planta é composta de órgãos, como o galho, que écomposto de células, ..., que são compostas de átomos, que sãocompostos de prótons, neutrons, ..., que são compostos de quarks...).

� SIMULA 67 foi a primeira linguagem a incorporar estes conceitos,desenvolvida especialmente para a criação de aplicações de simulação.

� Outra linguagem OO importante e pioneira é Smalltalk, originada nadissertação de doutorado de Alan Kay em 1969.

� Outras linguagens OO combinam características de linguagensimperativas e orientadas a objetos: C++, Eiffel, Java, Ada...

25/0

4/20

17R

ogér

io E

duar

do G

arci

a23

0

Paradigma Orientado a Objetos

public class Elipse

{

private int _X, _Y, _raioX, _raioY;

public Elipse(int x, int y, int rx, int ry)

{ _X = x; _Y = y; _raioX = rx; _raioY = ry;

}

public void DefinirRaios(int rx, int ry)

{ _raioX = rx; _raioY = ry;

}

public int InformarRaioX()

{ return _raioX;

}

public int InformarRaioY()

{ return _raioY;

}

public void Desenhar(Graphics area) {

area.drawOval(_X, _Y, _raioX, _raioY);

}

};

Elipse e1;

e1=new Elipse(10,10,20,25);

e1.desenhar(g);