Disciplina:
Paradigmas de
Linguagens de
Programação
Parte 1
2
Influência da Arquitetura de Computadores no
Projeto de uma LP
• A arquitetura básica de computadores exerceu um efeito crucial sobre o projeto de LPs.
• A maior parte dos computadores foi projetada na arquitetura de von Neumann.
• As LPs projetadas sobre essa arquitetura são as chamadas imperativas.
4
Métodos de Implementação de uma LP
• Dois dos principais componentes de um computador são a memória interna e seu processador.
• A memória interna e usada para armazenas programas e dados.
• O processador garante a realização de um conjunto de instruções de máquina (macroinstruções).
• Na maioria dos computadores as macroinstruções são implementadas por um conjunto de níveis mais baixos denominados microinstruções.
• O sistema operacional e as implementações são dispostos em camadas sobre a interface da linguagem de máquina de um computador.
6
Métodos de Implementação de uma LP
• Dois dos principais componentes de um computador são a memória interna e seu processador.
• A memória interna e usada para armazenas programas e dados.
• O processador garante a realização de um conjunto de instruções de máquina (macroinstruções).
• Na maioria dos computadores as macroinstruções são implementadas por um conjunto de níveis mais baixos denominados microinstruções.
• O sistema operacional e as implementações são dispostos em camadas sobre a interface da linguagem de máquina de um computador.
Métodos de Implementação de uma LP
• A figura 1.2 do livro-texto também ilustra a arquitetura em
8
Métodos de Implementação de uma LP
• As linguagens de programação podem ser implementadas por meio de três métodos gerais:
• Compilação
• Interpretação Pura
Compilação
• A linguagem que um compilador traduz é chamada linguagem-fonte.
• O processo de compilação
10
Compilação
• O Analisador Léxico reúne os caracteres do programa-fonte em unidades léxicas:
• Identificadores
• Palavras especiais
• Operadores
Compilação
• O Analisador Sintático pegas as unidades léxicas e cria as estruturas
hierárquicas (árvores de análise – parse trees), que serão vistas quando
12
Compilação
• O Gerador de Código Intermediário produz um programa em uma linguagem
intermediária e
analisa a semântica.
• A Otimização é uma melhoria nos
Compilação
• O Gerador de código converte a versão do código intermediário em linguagem de máquina.
• A Tabela de símbolos é o banco de dados para o
processo de compilação e seu principal conteúdo são as
14
Compilação
• A velocidade de conexão entre a memória de uma computador e seu
processador usualmente determina a velocidade do computador, porque, muitas vezes, as instruções podem ser executadas mais rapidamente do que podem ser transferidas para o processador para serem executadas.
• Essa conexão é chamada de gargalo de von Neumann.
Interpretação Pura
• Programas podem ser interpretados por outro programa chamado interpretador.
• O interpretador age como uma simulação de software de uma máquina com instruções de alto nível em vez de instruções de máquina.
• A interpretação pura exige mais espaço, pois além do programa-fonte, a tabela de símbolos deve estar presente na interpretação.
• A interpretação tem execução de 10 a 100 vezes mais lenta do que a compilação, já que o significado de cada expressão e instrução deve ser determinado diretamente do programa fonte em tempo de execução.
16
Interpretação Pura
• O processo de
Implementação Híbrida
• É o meio termo entre compiladores e interpretadores puros.
• Esse método é mais rápido que a interpretação pura, porque as
instruções da linguagem fonte são decodificadas somente uma vez.
• Em vez de traduzir código em linguagem intermediária para código de máquina, ele
simplesmente interpreta o código de máquina.
18
Evolução das LPs
Fortran (1957)
• Desenvolvida por Backus para a IBM.
• Destinou-se a aplicações numéricas-científicas(poucos dados e muita computação).
• Enfatizava a eficiência em execução e não de armazenamento. • Não havia alocação dinâmica de memória.
• Não focava na eficiência dos programadores.
• Exemplo: Estruturas de controle eram baseadas em goto.
20
Evolução do Fortran
• ó é ! " # ç á $
# % á $
# á !$
• & ç
'" á ( ) ú )
• * ç+ ç $ , á
- . / 0 1
$
"232& 456
7 í
Evolução do Fortran
•2 8 $
• ç 89
$
•# ç - - ç
-$
•& ç
8 á 8 :1
6;< ç *
!;; <;; * ó $
•= * *
- * á- $
"232& 45>
7 í
22
Evolução do Fortran
• * 8 í $
"232& 454
•& ç ç á $
•& ç 8
? 8 $
"232& , 4@
•& ç ç $
•& ç á A0#A$
"232& 66 46>
• ç+ 32& #="#A 1&B,&0 1 ,&0$
• ç 7&#A ç ú $
• ç AB 3
ç ç $
"232& 4; 44;
7 í
24
LISP (1959)
• Fomentada a partir da necessidade e interesse na Inteligência Artificial.
• A primeira versão é chamada LISP pura e gerou dialetos como o COMMON LISP e SCHEME.
• A LISP tem somente dois tipos de estruturas de dados: átomos e listas.
• Átomos: símbolos sob a forma de identificadores e são os elementos das listas.
26
Algol 60 (1960)
• Influenciou fortemente as LPs subseqüentes com enorme importância teórica.
• Criada por um comitê de especialistas.
28
COBOL (1964)
• Primeira LP encomendada pelo DoD (Departamento de Defesa Americano).
• Este nome é a sigla de COmmon Business Oriented Language
(Linguagem Orientada aos Negócios), que define seu objetivo principal em sistemas comerciais, financeiros e administrativos para empresas e governos.
• Destina-se para aplicações comerciais. • Muitos dados e pouca computação.
• Tentou enfatizar a legibilidade (se aproximando do inglês).
Estrutura Básica do COBOL
• O COBOL consiste basicamente em quatro divisões separadas: • IDENTIFICATION DIVISION
• A IDENTIFICATION DIVISION possui informações documentais, como nome do programa, quem o codificou e quando essa codificação foi realizada.
• ENVIRONMENT DIVISION
• A ENVIRONMENT DIVISION descreve o computador e os periféricos que serão utilizados pelo programa.
• DATA DIVISION
• A DATA DIVISION descreve os arquivos de entrada e saída que serão usadas pelo programa. Também define as áreas de trabalho e constantes necessárias para o processamento dos dados.
• PROCEDURE DIVISION
30
Exemplo COBOL
• Programa que monta formato de data.
• Exemplo da saída deste programa :
Basic (1964)
• Foco em estudantes de arte e ciências humanas.
• Beginners All-purpose Symbolic Instruction Code
• Fácil para os iniciantes aprenderem usando pouca memória computacional.
• Deu origem ao QuickBasic (1988) e o Visual Basic (1990).
• Um programa em BASIC tradicional tem suas linhas numeradas, sendo que é quase que padrão usar números de 10 em 10 (o que facilita a posterior introdução de linhas intermediárias, se necessário). Os
32
PL/I (1965)
• Primeira tentativa em grande escala de projetar uma linguagem que poderia ser utilizada para um amplo espectro de áreas de aplicação.
• Ao contrário das demais, já que as LPs anteriores e a maioria das subseqüentes concentravam-se em uma área de aplicação particular.
• Objetivo: Substituir o Fortran IV, Algol 60 e COBOL
• Facilidades:
• Permitiu que os programas criassem tarefas executadas concorrentemente (implementação fraca).
• Tornou possível detectar e manipular 23 tipos de exceções, ou erros em tempos de execução (um recorde para a época).
• Permitiu que procedimentos fossem usados recursivamente.
34
36
Algol(1968)
• Foi fonte de diversas idéias novas no projeto de linguagens.
• Faz uso da ortogonalidade com poucas exceções.
• Possibilidade de inclusão de tipos de dados definidos pelo usuário.
• Introduziu o tipo matriz dinâmica (conhecido como flex), não especificando limites de alocação.
• Exemplo: flex [1:0] int lista
• Lista é uma matriz dinâmica de números inteiros sem alocar espaço de armazenamento.
Pascal (1971)
• Recebeu este nome em homenagem ao matemático Blaise Pascal Foi criada em 1970 pelo suíço Niklaus Wirth, tendo em mente encorajar o uso de código estruturado.
• Projetada para o ensino de programação estruturada.
• Enfocou na simplicidade.
• É provavelmente uma das linguagens mais bem resolvidas entre as
38
C (1972)
• Desenvolvida dentro da AT&T.
• A linguagem C tem instruções de controle adequadas e facilidades de estruturação de dados para permitir seu uso em muitas áreas de
aplicação.
• Acesso de baixo-nível, através de inclusões de código Assembly no meio do programa C.
• Completa ausência de verificação de tipos: 2 grupos os que adoram (flexibilidade) e os que detestam (falta de segurança).
• Coletor de lixo (mais comum em linguagens interpretadas).
• Ausência de vetores que crescem automaticamente.
40
C (1972)
• Algumas variações da linguagem C apareceram, até que em 1989, criou-se a padronização com o ANSI C. Um dos objetivos do processo de
padronização ANSI C era incorporar muitas das características não-oficiais subseqüentemente introduzidas.
• Entretanto, muitos programas tinham sido escritos e que não compilavam em certas plataformas, ou com um certo compilador, devido ao uso de bibliotecas de funções não-padrão e ao fato de alguns compiladores não aderirem ao ANSI C.
• Após o processo da padronização ANSI, as especificações da linguagem C permaneceram relativamente estáticas por algum tempo.
42
Ada (1983)
• Criada pela empresa Cii-Honeywell Bull como vencedora de licitação do Departamento de Defesa Americano.
• Evoluiu a partir do Pascal.
• O nome Ada vem de Ada Lovelace, considerada a primeira mulher programadora da história da computação.
• Foi a LP que mais demandou esforço (cerca de 100 pessoas) e tempo (8 anos).
• Apropriada para programação concorrente e sistemas de tempo real.
Ada (1983)
• Incorpora a maioria dos conceitos de engenharia de software e projeto de linguagens.
• Embora ser considere que a inclusão de muitos recursos tenha sido um exagero, a maioria concorda que os recursos são valiosos.
• Desenvolver um compilador para ADA foi uma tarefa difícil. Apenas 4 anos depois, o compiladores úteis começaram a aparecer.
44
Smalltalk (1972)
• Primeira LP orientada à objetos.
• Introduziu o conceito de interfaces gráficas com o usuário.
• As unidades de programa do Smalltalk são os objetos.
• Estruturas que encapsulam dados e um conjunto de operações (métodos) e que ficam disponíveis à outros objetos.
• Computação feita para invocar objetos. A resposta é um objeto que retorna a informação solicitada ou notifica o remetente que o
46
C++ (1985)
• Evoluiu a partir do C e passou por uma seqüência de modificações para melhorar seus recursos imperativos e suportar POO.
• Batizada inicialmente por “C with classes”.
• Tornou-se rapidamente uma linguagem popular.
• Fator de popularidade: compiladores baratos e úteis logo no começo e similaridade com a Linguagem C.
• É compatível com C (a maioria dos programas em C pode ser compilada como programas C++) e é possível vincular código C na maioria das
implementações.
• Herdou a maioria das inseguranças do C, o que o torna menos confiável que o Java.
Java (1995)
• Início a partir do C++, removendo numerosas construções, alterando algumas e adicionando outras.
• A linguagem resultante oferece grande parte do poder e da flexibilidade do C++, mas em uma linguagem menor, mais simples e mais segura.
• Não é possível escrever subprogramas independentes em JAVA. Todos os subprogramas JAVA são métodos definidos em classes.
• O JAVA usa a desalocação de armazenagem de maneira implícita
48
Java (1995)
• Diferente do C e do C++, o JAVA inclui coerções de tipos (conversões implícitas) somente se elas estiverem ampliando (de um tipo menor para um tipo maior:
• Exemplo:
• int => float é feita coerção.
50
C# (2000) – C sharp
• C# é uma linguagem de programação orientada a objetos criada pela Microsoft, faz parte da sua plataforma .NET. A empresa baseou C# nas linguagens C++ e Java, e ela é considerada a linguagem símbolo do .NET.
• A Microsoft submeteu o C# à ECMA (ECMA (acrônimo para European Computer Manufacturers Association dedicada à padronização de
sistemas de informação) para uma padronização formal.
• Em Dezembro de 2001 a associação liberou a especificação ECMA-334
Especificação da Linguagem C#. Em 2003 tornou-se um padrão ISO
(ISO/IEC 23270).
52
Linguagens de Programação Populares
Trabalho Individual 1 (1º Bimestre)
• Elabore uma peça técnica (máximo 50 linhas) com o seguinte tema:
• Data da entrega: Prova – 1º Bimestre (20/09/2010)
• O template para a peça técnica encontra-se na sala virtual e deverá ser
utilizado.