Buscar

Modelos de Linguagem de Programação-Aula1 - Introdução - Conceitos Básicos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

�PAGE �
�PAGE �11�
Modelos de Linguagens de Programação - Aula 1
Introdução a Teoria de Linguagens de Programação
 
Uma LP (Linguagem de Programação) é uma linguagem destinada a ser usada por usuários para expressar um processo através do qual um computador pode resolver um problema. 
Porque estudar Linguagens de Programação?
Maior habilidade em resolver problemas: uma maior compreensão de uma LP pode aumentar nossa habilidade em pensar em como resolver problemas. Tanto melhor se dominarmos os vários modelos de LP. 
Melhor uso de uma LP: compreensão das funções e implementação das estruturas de uma LP nos levam a usar a LP de modo a extrair o máximo de sua funcionalidade e eficiência. 
Melhor escolha de uma LP: adequação ao problema.
Maior facilidade em aprender novas LPs: conceitos chaves comuns às LPs. 
Melhor designer de LPs: linguagens de interfaces de sistemas, extensão de LP via operadores e tipos de dados. 
Por que diferentes Linguagens de Programação?
Propósitos diferentes
Avanços tecnológicos
Interesses comerciais
Cultura e background científico
Breve histórico das linguagens de programação
Aplicações Científicas: as primeiras linguagens de programação tinham uma aplicação puramente científica. FORTRAN e ALGOL 60, por exemplo, se destinaram a atender implementações de cálculos científicos com sistemas numéricos.
 - Fortran (FORmula TRANslating)
 Desenvolvida em 1956 por John Backus, foi proposta visando a resolução de problemas científicos, para isto utilizando a notação algébrica. 
 Criada inicialmente para o IBM 704.
 Primeira Linguagem de “alto nível” amplamente utilizada.
 Um dos motivos pelos quais o FORTRAN é ainda utilizado é a disponibilidade de uma vasta biblioteca de software contendo rotinas freqüentemente utilizadas, tais como rotinas para cálculo de funções trigonométricas, equações algébricas polinomiais, etc., o que permite uma redução dos custos e tempo de desenvolvimento dos programas.
 Contribuições de FORTRAN para futuras linguagens:
variáveis 
comando de atribuição 
conceito de tipos 
modularidade (com o uso de subprogramas) 
E/S formatadas 
Exemplo de programa FORTRAN
�
*     Programa que converte um valor decimal, maior ou igual a zero,
*     lido através do console do sistema, em seu correspondente valor
*     binário, imprmindo este valor na tela do console.
*     Autores: J. C. Maldonado
*              R.L.Dias Cereda
*     Data: Abril/87
*     - Programa Principal -
*     Declaracao de variaveis, constantes simbolicas e iniciializacoes
      INTEGER CONT, J, LIMITE,NUMERO, VETRES(8)
      PARAMETER (LIMITE = 255)
      DATA VETRES/8*0/
*     Leitura e impressão do valor decimal
      WRITE(*,*) 'DIGITE O VALOR DECIMAL'
      READ(*,*) NUMERO
      WRITE(*,10) NUMERO
  10  FORMAT(1X,//,1X,'VALOR DECIMAL FORNECIDO: ',I3)
*     Verificacao do limite
      IF (NUMERO.GT.LIMITE)
     $THEN
        WRITE(*,*) 'NUMERO MUITO GRANDE
      ELSE
*     Chamada da rotina para conversao e impressao dos resultados
      CONT = 0
      CALL CONV(NUMERO, VETRES, CONT)
 WRITE(*,20) (VETRES(J), J=CONT, 1, -1)
  20  FORMAT(1X, 'VALOR BINARIO CORRESPONDENTE: ', 8I2)
      ENDIF
      STOP
 END
*     Sub-rotina que faz a conversao de um numero decimal, maior
*     ou igual a zero, em um numero binario
*     Parametro de entrada
*          NUM: valor a ser convertido
*     Parametros de saida
*          VETRES: vetor que contem o resultado
*          PONT: numero de bits do resultado
 SUBROUTINE CONV(NUM, VETRES, PONT)
*     Declaracao dos parametros
 INTEGER NUM, PONT, VETRES(8)
*     Declaracao de variavel local
 INTEGER AUX
*     conversao
 100  IF (NUM.GE.2) THEN
*     inicio do enquanto
      PONT = PONT + 1
      AUX = NUM/2
      VETRES(PONT) = NUM - AUX*2
      NUM = AUX
      GOTO 100
*     fim do enquanto
      ENDIF
      PONT = PONT + 1
      VETRES(PONT) = NUM
      RETURN
      END
- Algol (ALGOrithmic Language)
 
Linguagem algébrica de origem européia (1960 - Zurique), desenvolvida pelo comitê Internacional popular, destinada à resolução de problemas científicos. 
Influenciou o projeto de quase todas as linguagens projetadas a partir de 1960. Descrita em BNF (Backus-Naur Form), foi projetada independente da implementação, o que permite uma maior criatividade, porém de implementação mais difícil.
 É pouco usada em aplicações comerciais devido à ausência de facilidades de E/S na descrição e pelo pouco interesse de vendedores. Além disso, tornou-se padrão para a publicação de algoritmos.
Contribuições de Algol para futuras linguagens:
estrutura de blocos: habilidade de se criar blocos de comandos para o escopo de variáveis e extensão de influência de comandos de controle 
comandos de controle estruturados: if-then-else e uso de uma condição geral para controle de iteração 
recursividade: habilidade de um procedimento chamar a si próprio 
Exemplo de programa ALGOL 60
�
Procedimento que calcula raiz quadrada. 
procedure EQ2OR (A, B, C, z1r, z1i, z2r, z2i, INDETERMINATE);
value A, B, C; real A, B, C, z1r, z1i, z2r, z2i; label INDETERMINATE;
begin real discriminant;
     if A  0 then go to normal;
     ir B = 0 then go to INDETERMINATE;
     z1r := z2r := -C/B; go to set zero;
normal:        discriminant := B  2 - 4 x A x C;
               if discriminant > 0 then go to real solution;
complex:       z1r := z2r := -B/2/A;
               z1i := sqrt(-discriminant)/2/A;
               z2i := - z1i; go to finis;
real solution: z1r := (-B+(if B > 0 then -1  else 1)xsqrt(discriminant))/2/A;
               z2r := C/A/z1r;
set zero:      z1i := z2i := 0;
finis:
end EQ2OR
Aplicações Comerciais: após as aplicações científicas, veio COBOL que teve aplicação em sistemas comerciais e bancários. As aplicações comerciais abriram as portas para o emprego da computação para vários outros fins.
 - COBOL
 
A linguagem COBOL, desenvolvida em 1959 pelo Departamento de Defesa dos EUA e fabricantes de computadores (Comissão CODASYL),
Foi padrão para as aplicações comerciais e ainda utilizada hoje. 
Seu desenvolvimento se deu de forma independente da máquina. O código é "English-like" e é excelente para a manipulação de arquivos.
 
Contribuições de Cobol para futuras linguagens:
código mais legível 
estrutura de dados heterogênea (record) 
Exemplo de programa COBOL
�
Organização de um programa COBOL: 
    Um programa COBOL possui quatro divisões que devem ser colocadas na ordem adequada. A sua estrutura completa é: 
IDENTIFICATION DIVISION 
PROGRAM-ID. nome-do-programa 
[AUTHOR. [comentários] ...] 
[INSTALLATION. [comentários] ...] 
[INSTALLATION. [comentários] ...] 
[DATE-WRITTEN. [comentários] ...] 
[DATE-COMPILED. [comentários] ...] 
[SECURITY. [comentários] ...] 
[REMARKS. [comentários] ...] 
ENVIRONMENT DIVISION 
[CONFIGURATION SECTION. 
SOURCE-COMPUTER. 
OBJECT-COMPUTER. 
[SPECIAL-NAMES. ]]. 
[INPUT-OUTPUT SECTION. 
FILE-CONTROL. 
[I-O-CONTROL. ENTRADA.]]. 
DATA DIVISION. 
[FILE SECTION. 
{ Descrição dos arquivos 
{ Descrição dos registros } ... } ... ].
[WORKING-STORAGE SECTION. 
[Descrição dos itens de dados] ... 
[Descrição de registros] ... ].
[LINKAGE SECTION. 
[Descrição dos itens de dados] ... 
[Descrição de registros] ... ].
[COMMUNICATION SECTION. 
{Descrição das Entradas de Comunicação. 
[Descrição das Entradas de Registros] ... } ... ].
[REPORT SECTION. 
{Descrição de relatórios} 
{Descrição dos grupos de relatórios} ... } ... ].
PROCEDURE DIVISION. [USING identificador-1 [identificador-2] ...] 
[DECLARATIVES. 
{nome-da-seção SECTION. USE SENTENCE. 
{nome-de-parágrafo. {sentença} ... } ... } ...
END DECLARATIVES.] 
{nome-da-seçãoSECTION [prioridade] - ] 
{nome-de-parágrafo. {sentença} ... } ... } ...
Exemplo: 
001 010 IDENTIFICATION DIVISION.
001 020 PROGRAM-ID. TABSORT.
001 030 AUTHOR. ALEX BASTOS.
001 040 INSTALLATION. RDC-DIV USUARIOS.
001 050 DATE-WRITEN. 18/12/72.
001 060 DATE-COMPILED. 20/12/72.
001 070 REMARKS. Este programa grava arquivo sequencial em ordem
        crescente e classifica-o apos em ordem decrescente.
001 100 ENVIRONMENT DIVISION.
001 110 CONFIGURATION SECTION.
001 120 SOURCE-COMPUTER. IBM-370-165.
001 130 OBJECT-COMPUTER. IBM-370-165.
001 140 INPUT-OUTPUT SECTION
001 150 FILE-CONTROL.
001 160     SELECT ARQUIVO ASSIGN TO DA-S-DISCO.
001 170     SELECT TRABALHO ASSIGN TO DA-S-SORTWK01.
001 180 DATA DIVISION.
001 190 FILE SECTION.
001 200 FD ARQUIVO LABEL RECORDS ARE STANDARD
002 010      DATA RECORD IS ENTRADA.
002 020 01 ENTRADA.
002 030      02 X PIC 99.
002 040      02 Y PIC X(10).
002 050      02 FILLER PIC X(20).
002 060 SD TRABALHO LABEL RECORDS ARE STANDARD
002 070      DATA RECORD IS TRAB.
002 080 01 TRAB.
002 090      02 Z PIC 99.
002 100      02 K PIC X(10).
002 110      02 FILLER PIC X(20).
002 120 WORKING-STORAGE SECTION.
002 130 77 I PIC 99 VALUE ZEROS.
002 140 PROCEDURE DIVISION.
002 150      OPEN OUTPUT ARQUIVO.
002 160      MOVE 'TESTE-SORT' TO Y.
002 170 GRAVACAO.
002 180      MOVE I TO X.
002 190      ADD 1 TO I.
002 200      WRITE ENTRADA.
003 010      IF I 100 GO TO GRAVACAO.
003 020      SORT TRABALHO DESCENDING Z USING
003 030      ARQUIVO GIVING ARQUIVO.
003 040      OPEN INPUT ARQUIVO.
003 050 GRAVA.
003 060      READ ARQUIVO AT END GO TO FIN.
003 070      DISPLAY X' Y.
003 080      GO TO GRAVA.
003 090 FIN.
003 100 CLOSE ARQ.
003 110 STOP RUN.
Inteligência Artificial (IA): é uma área abrangente das aplicações de computação caracterizada pelo uso de computações simbólicas em vez de numéricas. A primeira linguagem desenvolvida para aplicações de IA foi LISP.
Programação de Sistemas: linguagens que oferecem recursos de baixo nível que permitem o software fazer interface com os dispositivos externos. Nesta classe de linguagens está a C, BLISS, PL/S, Extended ALGOL.
- BASIC
 Final da década de 70
 Beginner´s All-purpose Simbolic Instruction Code
 Criada para iniciantes em programação
 
 - Pascal
 Década de 60
 Criada por Niklaus Wirth
 Propósito : ensinar programação
 Linguagem segura e robusta
 
- Outras: Assembly, PL/I, APL, Modula-2 e 3, ADA
Linguagens de Scripting: as linguagens de scripting desenvolveram-se lentamente no decorrer dos últimos 25 anos e são usadas colocando-se uma lista de comandos, chamados de script, em um arquivo para serem executados. A Java Script é uma delas desenvolvida pela Netscape para uso tanto de servidores Web como em navegadores. Java Script e Perl são linguagens diferentes das convencionais mas possuem recursos interessantes.
Linguagens de Propósitos Especiais: uma grande quantidade de linguagens para propósitos especiais surgiu no decorrer dos últimos 40 anos. Citamos a RPG, usada para produzir relatórios comerciais, a APT, usada para construir ferramentas de máquinas programáveis e a GPSS, usada para simulação de sistemas.
Um exemplo comparativo entre Linguagens
- Pascal
 VAR NMEDIA : REAL;
 NSOMA : INTEGER;
 NA,NB : INTEGER;
 BEGIN
 CLRSCR;
 WRITELN (‘Calcula a Média Aritmética’);
 WRITE (‘Informe o 1º : ‘);
 READLN (NA);
 WRITE (‘Informe o 2º : ’);
 READLN (NB);
 NSOMA := NA + NB;
 NMEDIA := NSOMA / 2;
 WRITELN (‘A Média entre ’,NA, ‘ e ’, NB, ‘ é ’, NMEDIA);
 END.
- COBOL
 WORKING-STORAGE SECTION.
 01 NMEDIA PIC 999V99.
 01 NSOMA PIC 999.
 01 NA PIC 99.
 01 NB PIC 99.
 PROCEDURE DIVISION.
 INICIO.
 DISPLAY "Calcula a Média Aritmética "
 DISPLAY "Informe O 1º : "
 ACCEPT NA
 DISPLAY "Informe O 2º : "
 ACCEPT NB
 COMPUTE NSOMA = NA + NB
 COMPUTE NMEDIA = NSOMA / 2
 DISPLAY "A Média entre ",NA," e ",NB," é ",NMEDIA
 STOP RUN.
 FIM.
- Clipper
INICIO
 LOCAL NMEDIA := NSOMA := NA := NB := 0
 CLS
 @ 10,10 SAY "Calcula a Média Aritmética”
 @ 11,10 SAY "Informe o 1º : " GET NA PIC "99"
 @ 12,10 SAY "Informe o 2º : " GET NB PIC "99"
 READ
 NSOMA := NA + NB
 NMEDIA := NSOMA / 2
 @ 13,10 SAY "A Média entre ",NA," e ",NB," é ",NMEDIA
 QUIT
FIM
Critérios da Avaliação das Linguagens
Com avaliar uma linguagem de programação? Usamos alguns critérios:
I- Legibilidade de programas: os programas escritos em uma linguagem de programação devem ser fáceis de serem lidos e entendidos. Como a linguagem influencia nisso?
 - Simplicidade: linguagens complexas permitem construções difíceis de entender. Linguagens muito simples podem requerer programas longos ou construções substitutas pouco claras.
 - Ortogonalidade: os conceitos da linguagem se aplicam a todos os itens da linguagem. Por exemplo: há vetores e eles podem conter dados de qualquer tipo. O excesso de ortogonalidade também pode provocar confusão (pode haver vetores de função?). O importante é haver poucas exceções para se aprender. 
 - Boa definição: envolve clareza na gramática e semântica. As construções da linguagem devem ser baseadas em regras claras.
 - Facilidade de escrita: os programas devem ser fáceis de escrever.
 - Suporte a abstração: deve oferecer criação de tipos abstratos de dados, sub-programas, etc.
II- Confiabilidade: os programas gerados devem ter poucos erros. Os fatores que influenciam na capacidade de escrita e legibilidade também influenciam neste critério. Considera-se também:
 - Verificação de Tipos: com tipos fortes, erros comuns são detectados mais facilmente.
 - Tratamento de Exceções: é a capacidade de um programa de detectar erros em tempo de execução. Facilita a codificação de programas em que certas exceções são esperadas e facilita a detecção de erros inesperados durante a execução.
III- Custos: os custos incluem gastos com a compra de compiladores e ferramentas, treinamento e manutenção, tempo de desenvolvimento, compilação e execução. A viabilidade de custos é também um critério decisivo a ser considerado.
As linguagens de programação e o processo de desenvolvimento de software
Alterações significativas se processaram na história da computação, e, com o barateamento dos custos dos equipamentos de computação, hoje grande parte da importância inicialmente atribuída ao hardware passou para o software. Máquinas mais complexas e poderosas exigem programação mais sofisticada, para que o seu potencial possa se realizar, e a produção de software é hoje fundamental para virtualmente qualquer espécie de atividade humana.
O "ciclo de vida" a seguir é um dos diversos modelos que nos auxiliam a compreender essa complexa atividade e descreve, de modo bem simplificado, as fases da história de um programa:
· especificação de requisitos: Nesta fase se procura definir com clareza qual é o problema considerado, e que características deve ter uma solução computacional (um sistema de hardware e software adequados), para que essa solução seja satisfatória para a aplicação e o usuário.
· projeto global: Nesta fase se procura definir, em linhas gerais, como deve ser o software a ser construído, para estabelecer a viabilidade de sua construção e de sua utilização nas condições reais. É nesta fase que deve ser escolhida a linguagem (ou possivelmente as linguagens) de programação a utilizar.
· codificação: Nesta fase o softwareé efetivamente escrito em uma ou mais linguagens escolhidas para isso.
· validação: Nesta fase o sistema é testado, ou de alguma outra forma examinado, para que se tenha uma garantia de seu funcionamento satisfatório.
· utilização e evolução: Nesta fase o sistema finalmente preenche seus objetivos. Se existem, são então descobertos erros e problemas que, de alguma forma, tornam o sistema inadequado para o uso pretendido. São também examinadas possibilidades de alteração e extensão do sistema que visam torná-lo mais adequado para a aplicação, cujas necessidades já podem ser diferentes daquelas consideradas na fase de especificação de requisitos. As alterações a serem feitas constituem o que se chama de manutenção ou evolução do
software.
Naturalmente, cada uma das fases mencionadas pode ser várias vezes repetida, até que o produto final seja considerado satisfatório. Quanto mais cedo um erro é descoberto, mais simples e barata é sua correção, e por essa razão, é importante que os erros sejam descobertos o mais cedo possível, nas fases iniciais do ciclo de vida.
Note-se que a escolha da linguagem de programação influi, decisivamente, apenas em duas das fases do ciclo apresentado: a fase de codificação, onde o programa é escrito na linguagem, e a fase de evolução/manutenção, em que o programa é alterado, através da introdução ou substituição de trechos de código escritos na linguagem. Nestas fases, portanto, é que defeitos e qualidades de uma linguagem de programação se tornam aparentes.
São características muito importantes a serem consideradas em linguagens de programação: 
1) Legibilidade:
a linguagem não deve induzir o programador a erros, em particular erros que não possam ser descobertos com facilidade. Naturalmente, erros descobertos durante a compilação criam problemas menores que erros descobertos posteriormente (às vezes chamados de "erros de lógica").
a linguagem deve ajudar o programador a corrigir os erros, facilitando sua identificação e a determinação da ação de correção, seja qual for a causa original do erro.
Por essas razões, podemos considerar que a principal virtude de uma linguagem é a sua legibilidade, isto é, a facilidade que a linguagem oferece para que um programador leia e compreenda um programa, com o grau de confiança necessário para alterá-lo. Um programa em processo de alteração pode ter sido escrito há algum tempo, ou por outra pessoa que não se encontra disponível para consulta, e por isso boa documentação e boa utilização de comentários são importantes, por mais legível que seja o texto de um programa.
Por outro lado, também é desejável que a linguagem ofereça facilidade de escrita de programas.
 Na prática, a forma mais comum de garantir a legibilidade é através de marcas acrescentadas ao texto do programa para caracterizar de maneira mais direta sua estrutura e, portanto, sua forma de execução. Essas marcas (palavras reservadas, sinais de pontuação etc.) facilitam a localização dos pontos importantes do programa mas.
2) eficiência do programa compilado: a estrutura da linguagem facilita o processo de geração e otimização de código, permitindo a construção de compiladores que gerem código objeto que faça uso eficiente dos recursos de máquina disponíveis.
3) eficiência do processo de compilação: a estrutura da linguagem facilita o processo de compilação, permitindo a construção de compiladores e ambientes de programação em que seja mais eficiente o processo de desenvolvimento de software na linguagem.
4) disponibilidade de ferramentas: existem compiladores, interpretadores, ambientes de programação e de desenvolvimento amigáveis, adequados para a linguagem nas máquinas em que a implementação deve ser realizada. Além disso, essas ferramentas devem poder ser adaptadas a casos particulares, permitindo a máxima eficiência em cada caso. Por exemplo, os compiladores devem ter opções de compilação que permitam gerar o melhor tipo de código objeto para cada aplicação.
5) disponibilidade de bibliotecas: existem bibliotecas de software de uso geral e de uso específico para a aplicação, que permitem a utilização de software já escrito, dispensando a necessidade de sua construção. Essas bibliotecas podem ser de texto fonte na linguagem, ou de código pré-compilado, escrito em qualquer linguagem, mas que possa ser ligado ao código escrito na linguagem.
6) portabilidade: é fundamental no desenvolvimento de projetos. Um projeto desenvolvido com uma LP deve ser possível de execução em variadas plataformas, sem a necessidade de reescrever ou adaptá-lo.
7) Reusabilidade: o reaproveitamento do código-fonte economiza tempo e custos.

Outros materiais