Você está na página 1de 37

Conceitos e Linguagens de

Programação

Aula 1
• Introdução
• Implementação de LP’s
• Domínios de Programação
• Paradigmas de LP’s
2

Se você escrevesse artigos em


linguagens de programação
3

Se você escrevesse artigos em


linguagens de programação
4

Se você escrevesse artigos em


linguagens de programação
5

Se você escrevesse artigos em


linguagens de programação
6

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 alto nível

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

Escolha de uma linguagem de


programação
• Implementação
▫ Disponibilidade
▫ Eficiência
• Conhecimento do programador
• Portabilidade
• Sintaxe
• Semântica
• Ambiente de programação
• Modelo de processamento
12

Escolha de uma linguagem de


programação
• Para [Watt 90], a escolha de uma LP deve ser baseada em questões
estratégicas (projeto e integração de software) e táticas (detalhes de
programação na linguagem proposta)
▫ Estratégicas
 Abstração
 Desenvolvimento de grandes programas
 Reutilização de software
▫ Táticas
 Modelagem
 Nível
 Segurança
 Eficiência
 Compilador
 Familiaridade
13

Implementação de LPs
Compilação Interpretação Pura Híbrido

LP Fonte LP Fonte LP Fonte

Compilação
Compilação
Interpretação
L.M.
Código
L.M.
Intermediário
Dados

Dados Execução Interpretação


L.M.
Execução
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

Programa-fonte alto nível

Analisador Léxico
tokens

Analisador Sintático
parse trees

Tabela de Analisador Semântico


símbolos Gerador de código intermediário Otimização

cód.
Gerador de código intermediário
ling. máquina - baixo nível
dados de
entrada
Máquina

Resultados
16

Interpretação pura

• Programas são interpretados por outro


programa (interpretador), sem conversão
• Interpretador = simulador de software,
máquina virtual cujas instruções são um
programa em ling. alto nível
• vantagem: facilidade de depuração
• desvantagem: lentidão, muito espaço de
memória
• Exemplos: Linguagens de scripting, LISP...
17

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 JAVA


• package matrizes1;
• import javax.swing.JOptionPane;
• public class Main {
• public static void main(String[] args) {
• String s;
• int valor,maior;
• Matriz m,m1;
• m = new Matriz();
• m1 = new Matriz(2,5);
• for (int i=0;i<2;i++){
• for (int j=0;j<2;j++){
• s = JOptionPane.showInputDialog("Entre com o elemento["+(i+1)+","+
• (j+1)+ "]");
• valor = Integer.parseInt(s);
• m.setM(i,j,valor);
• }
• }
• s = "M = \n"+ m.montarStringdeSaída();
• maior = m.MaiorElemento();
• m.MultiplicacaoporX(maior);
• JOptionPane.showMessageDialog(null,s+"R = M x "+maior+" = \n"+
• m.montarStringdeSaída());
• }
• }
25

Exemplo de um código em Matlab


• function [pxA,pxB,pxC,pxD,pxE] = naivebayescombernoulli(input_args)

• xA = load('G:\MATLAB\R2007a\work\Tipo_0.txt');
• xB = load('G:\MATLAB\R2007a\work\Tipo_1.txt');
• xC = load('G:\MATLAB\R2007a\work\Tipo_2.txt');
• xD = load('G:\MATLAB\R2007a\work\Tipo_3.txt');
• xE = load('G:\MATLAB\R2007a\work\Tipo_4.txt');


• xA = xA(:,1:41);
• xB = xB(:,1:41);
• xC = xC(:,1:41);
• xD = xD(:,1:41);
• xE = xE(:,1:41);

• sizetotal = (size(xA,1)+size(xB,1)+size(xC,1)+size(xD,1)+size(xE,1));

26

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

Exemplo de um código em C++


• #include <fstream.h>
• #include <conio.h>
• #include <stdio.h>

• class livro
• {
• private:
• char titulo[50];
• char autor[50];
• int numreg;
• double preco;
• public:
• void novonome();
• void print();
• };
28

Exemplo de um código em C++


• void livro::novonome()
• {
• clrscr();
• cout<<"\n\tDigite o titulo: ";
• gets(titulo);
• cout<<"\tDigite autor: ";
• gets(autor);
• cout<<"\tDigite o numero do registro: ";
• cin>>numreg;
• cout<<"\tDigite o preco: ";
• cin>>preco;
• }
29

Exemplo de um código em C++


• void main()
• {
• fstream fio; //Cria objeto de leitura e gravacao
• livro li; //Cria objeto livro
• fio.open("lista.dat", ios::ate|ios::in|ios::out);
• do
• {
• li.novonome();
• fio.write((char *)&li,sizeof(livro));
• cout<<"\nMais um livro (s/n)? ";
• }while (getche()!='n'); //Fim se 'n'
30

Exemplo de um código em C++


• fio.seekg(0); //movimenta a posicao corrente de leitura do arquivo para
• //uma determinada posicao
• //formato geral: seekg(long pos, seek_dir posicao=ios::beg);
• //O primeiro argumento indica o deslocamento em bytes a
• //partir da posicao escolhida. Qdo a funcao e chamada com
• //um unico argumento, a posicao e assumida como sendo o
• //inicio do arquivo (ios::beg)
• //O segundo argumento, qdo usado, deve ser um dos modos
• //seguintes:
• // ios::beg A partir do inicio do arquivo.
• // ios::cur A partir da posicao corrente.
• // ios::end A partir do fim do arquivo.
• cout<<"\nLISTA DE LIVROS DO ARQUIVO";
• cout<<"\n==========================";

• while (fio.read((char *)&li,sizeof(livro)))


• li.print();
• getch();
• }
31

Exemplo de um código em Cobol


• * Hello World Program
• * GPL Copyleft Jonathan Riddell 2001
▫ IDENTIFICATION DIVISION.
▫ PROGRAM-ID. hello.
▫ ENVIRONMENT DIVISION.
▫ DATA DIVISION.
▫ PROCEDURE DIVISION.
 DISPLAY "hello ," WITH NO ADVANCING
 DISPLAY "world!"
 STOP RUN.
32

Paradigmas de LPs
Paradigmas

Imperativo Declarativo

Estruturado Orientado Concorrente Funcional Lógico


a Objetos
33

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.