Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Programação
Aula 1
• Introdução
• Implementação de LP’s
• Domínios de Programação
• Paradigmas de LP’s
2
Motivação
• Razões para se estudar linguagens de programação
▫ Para melhorar o entendimento da linguagem que está
sendo utilizada
▫ Para fazer um uso melhor da linguagem de
programação
▫ Para permitir uma melhor escolha da linguagem de
programação
▫ Para facilitar o aprendizado de uma nova linguagem
▫ Para tornar mais fácil o projeto de uma nova
linguagem
7
Conceito de Linguagem de
Programação
• Expressar um processo através do qual um
computador pode resolver um problema
• A descrição de uma linguagem é geralmente
dividida em 2 partes
▫ Sintaxe
▫ Semântica
8
Conceito de Linguagem de
Programação
• Características gerais que definem uma boa
linguagem
▫ Simplicidade
▫ Suporte para abstração de dados
▫ Expressividade
▫ Ortogonalidade
▫ Suporte à manutenção e portabilidade
▫ Eficiência
9
Classes e gerações
• Classes de linguagens de programação
Linguagem de
baixo nível
Linguagem
de
máquina
10
Classes e gerações
• Gerações das linguagens de programação
▫ 1ª geração – fortemente dependente da arquitetura do computador
▫ 2ª geração – introdução das estruturas de bloco e controle estruturado;
surgimento da distinção de variáveis locais e globais; permite um melhor
controle do espaço do nome e uma alocação de memória dinâmica e
eficiente
▫ 3ª geração – enfatiza a simplicidade e eficiência; tipo de dados definidos
pelo usuário; troca da ênfase da máquina para a aplicação
▫ 4ª geração – suporte a programação concorrente; fornecimento do
encapsulamento, que suporta a separação da especificação e da definição
e ocultar informações
▫ 5ª geração – surgimento das linguagens funcionais, lógicas e orientadas
ao objeto.
11
Implementação de LPs
Compilação Interpretação Pura Híbrido
Compilação
Compilação
Interpretação
L.M.
Código
L.M.
Intermediário
Dados
Execução
14
Implementação de LPs
• Compilação
▫ Eficiência
▫ Problemas com Portabilidade e Depuração
• Interpretação Pura
▫ Flexibilidade, Portabilidade e Facilidade para Prototipação e
Depuração
▫ Problemas com Eficiência e Maior Consumo de Memória
▫ Raramente Usada
• Híbrido
▫ Une Vantagens dos Outros Métodos
▫ JVM
15
O processo de compilação
Analisador Léxico
tokens
Analisador Sintático
parse trees
cód.
Gerador de código intermediário
ling. máquina - baixo nível
dados de
entrada
Máquina
Resultados
16
Interpretação pura
Sistemas Híbridos
• Perl
• Implementações iniciais de Java
▫ código intermediário de Java = “código de bytes”
▫ portabilidade
▫ cód. bytes + interpretador = Java Virtual Machine
▫ hoje: tradução do cód. bytes p/ cód. máquina
▫ applets Java = são baixados em código de bytes
18
Domínios de Programação
• Aplicações Científicas
• Aplicações Comerciais
• Inteligência Artificial
• Programação de Sistemas
• Linguagens de Scripting
• Linguagens para Propósitos Especiais
19
Domínios de Programação
Aplicações Científicas
• Estruturas de dados simples: matrizes
• Operações aritméticas em ponto flutuante
• FORTRAN, ALGOL 60
• Nenhuma linguagem é significativamente
melhor do que o FORTRAN até hoje
20
Domínios de Programação
Aplicações Comerciais
• Facilidade para produzir relatórios
• Exemplo: COBOL (60)
• Há pouco desenvolvimento nas linguagens de
aplicação comercial, além do que foi feito para
COBOL (usado ainda hoje)
21
Domínios de Programação
Inteligência Artificial
• Computações simbólicas, e não numéricas
• LISP
• PROLOG
22
Domínios de Programação
Programação de Sistemas
• Desenvolvimento de software básico (sistemas
operacionais)
• Linguagens para programação de sistemas
exigem execução rápida
• PL/S (IBM), BLISS (Digital), Extended ALGOL
(Burroughs)
• Unix e C (poucas restrições de segurança)
23
Domínios de Programação
Linguagens de Scripting
• Script é uma lista de comandos em um arquivo,
para serem executados “em lote”
• sh
• ksh (Bell Labs)
• awk (Aho, Wienberger e Kernighan)
• tcl
• Perl
24
Exemplo de um código em C
• #include <stdio.h>
• #include <conio.h>
• /* Este tipo de comentário é utilizado quando
• temos mais de uma linha de texto */
• main()
• {
• int num1,num2,soma; // números inteiros
• printf("Digite o primeiro numero \n");
• scanf("%d",&num1);
• printf("Digite o segundo numero \n");
• scanf("%d",&num2);
• soma = num1+num2;
• printf("A soma eh %d \n",soma);
• getch();
• }
27
• class livro
• {
• private:
• char titulo[50];
• char autor[50];
• int numreg;
• double preco;
• public:
• void novonome();
• void print();
• };
28
Paradigmas de LPs
Paradigmas
Imperativo Declarativo
Paradigmas de LPs
• Imperativo
▫ As variáveis, que modelam as células de memória;
▫ Comandos de atribuição, que são baseados nas
operações de transferência de dados e atribuições;
▫ Execução seqüencial de instruções
34
Paradigmas de LPs
• Estruturado ou procedural
▫ Refinamentos Sucessivos
▫ Blocos Aninhados de Comandos
▫ Desestímulo ao uso de desvio incondicional
▫ Exemplos: PASCAL e C
• Orientado a Objetos
▫ Abstração de Dados
• Concorrente
▫ Processos Executam Simultaneamente e Concorrem
por Recursos
35
Paradigmas de LPs
• Declarativo
▫ Especificações sobre a Tarefa a Ser Realizada
▫ Abstrai-se de Como o Computador é Implementado
36
Paradigmas de LPs
• Funcional
▫ Enfatiza o processamento de valores através do uso de
expressões e funções;
▫ As funções são os blocos de construção primários do
programa
▫ Exemplos: Scheme e LISP
(defun factorial (n)
(if (<= n 1)
1 (* n (factorial (- n 1)))
)
)
37
Paradigmas de LPs
• Lógico
▫ Predicados
▫ Dedução Automática
▫ Exemplos: Prolog
% Fatorial
fat(0,1).
fat(N,F) :- N1 is N-1, fat(N1,F1), F is N*F1.
f_print(N) :-
write('Fatorial de '), write(N), write(' = '),
fat(N,X), write(X), nl, halt.
% Chamada do programa principal
main :-
f_print(30).
main.