Concepts of Programming Languages
Ano Lectivo 2020
Linguagens de Programação
Pro f. D ou tor Fél ix Sin go
Concepts of Programming Languages
Introdução
Linguagem de Programação é uma linguagem escrita e formal que especifica um conjunto de instruções e regras usadas para gerar programas (software). Um software pode ser desenvolvido para rodar em um computador, dispositivo móvel ou em qualquer equipamento que permita sua execução. Existem várias linguagens e elas servem para muitos propósitos. Alguns óbvios, como criar um software, outros menos, como
controlar um carro ou uma torradeira.
Um app que roda no seu celular é um tipo de software criado com uma linguagem de programação. Um game, que roda em um PC ou em outros equipamentos, também.
Uma TV smart, que possui a funcionalidade de se conectar na internet e permitir ao consumidor usar um navegador, usa linguagens de programação tanto no hardware quanto no software.
Uma torradeira não tem uma interface digital de comunicação, mas possui um micro- controlador com um software que gere o equipamento. Esse tipo de software,
embarcado em circuitos electrónicos, é chamado de firmware e também é escrito usando uma linguagem de programação. A internet das coisas (IoT) demanda muitas soluções que usam esse tipo de tecnologia.
Concepts of Programming Languages
Concepts of Programming Languages
Porquê estudar Linguagens de
Programação?....
Concepts of Programming Languages
Concepts of Programming Languages
Melhoria na capacidade
de expressar ideias. Melhoria na capacidade
de escolher linguagens apropriadas
Mais habilidade para aprender novas
linguagens
Melhor entendimento da dificuldade de
implementação das construções das LPs
Melhor entendimento da dificuldade de
implementação das construções das LPs Melhor uso das
linguagens conhecidas Avanço da área de
computação de um modo geral.
Concepts of Programming Languages
Não só!
Processamento de linguagem natural é relacionado a
processamento de LP.
Linguagens de
comandos de sistemas operativos têm muito dos conceitos de LP Linguagens de
descrição de hardware têm muito dos
conceitos de LP
Linguagens de consultas a Base de dados têm muito dos conceitos de LP
Programação é central para a
computação
Concepts of Programming Languages Motivos para estudar os conceitos de LP
O estudo das LP é valioso por uma série de importantes razões:
• Aumenta nossa capacidade de usar diferentes construções para escrever programas,
• Possibilita-nos escolher linguagens para projectos de maneira mais inteligente e
• Torna mais fácil a aprendizagem de novas linguagens.
Concepts of Programming Languages
Informática
Técnica Prática Teórica Aplicada
• Componentes de Hardware
• Estrutura e organição do PC
• Circuitos integrados
• Processadores
• Microprogramação
• Circuitos electrónicos
• Redes de computadores
• etc. …
• Algorítmos
• Estrutura de Dados
• Métodos de Programação
• Linguagens de Programação
• Compilers
• Sistemas Operativos
• Software
• Diálogo Homem-Máquina
• Teoria de Autômatos
• Linguagens Formais
• Teoria do cálculo
• Teoria da complexidade
• Análise de Algorítmos
• Programação automática
• Semântica Formal
• etc. …
• Sistemas de Informação
• Computação gráfica
• Inteligência artificial
• Sinais digitais
• Simulação & Modelação
• Burótica
• Medicina, Educação
• etc. …
Concepts of Programming Languages
Informática
•
A Informática é o ramo da ciência que se dedica ao estudo dos computadores e dos processos com eles relacionados:
• Como se desenvolve um computador;
• Como se especifica o trabalho a ser realizado por um computador;
• De que forma se pode tornar mais fácil de utilizar;
• Como se definem as suas limitações;
• Como aumentar as suas capacidades e o seu domínio de aplicação.
Concepts of Programming Languages
Informática
•
Um dos objectivos da informática corresponde ao estudo e desenvolvimento de entidades abstractas geradas durante a execução de programas – os
processos computacionais.
•
Um processo computacional é um ente imaterial que existe dentro de um computador durante a execução de um programa, e cuja evolução ao longo do tempo é
ditada pelo programa.
Concepts of Programming Languages 1. Introdução
Para executar uma tarefa qualquer, o computador precisa receber instruções precisas sobre o que fazer e como fazer. Uma
sequência adequada de instruções de computador, para a realização de uma determinada tarefa, se constitui num PROGRAMA de computador
O que é a Programação ?
Concepts of Programming Languages Processo Computacional
• Existem dois conceitos fundamentais na computação:
• O Algorítmo e a Memória
13
Computação
Algoritmo Memória
... é uma medida do tempo
... É uma medida de espaço
A memória é uma informação lida e alterada pela execução do algoritmo.
Esta informação é essencial porque contém os dados necessários para a resolução do problema.
Um algoritmo é uma sequência finita de
instruções, bem definidas e não ambíguas, cada uma das quais pode ser executada
mecanicamente num intervalo de tempo finito com uma quantidade de esforço finita.
Concepts of Programming Languages
• é uma sequência de instruções a serem seguidas e/ou
executadas, na manipulação, redirecionamento ou modificação de um dado/informação ou acontecimento
• Um programa de computador é um algoritmo escrito numa linguagem que é entendida por um computador, chamada linguagem de programação.
1. Introdução
…Programa ?!
Concepts of Programming Languages
Programa & Algoritmo
•
O conceito de algoritmo é fundamental em informática:
•
[Horowitz & Sahn, 84]
•
Informática como o estudos dos algoritmos:
•
O estudo das máquinas para executar algoritmos
•
O estudo dos fundamentos dos algoritmos e a
análise dos algoritmos.
Concepts of Programming Languages
1. Introdução
…Linguagem ?!
O dicionário define Linguagem como:
"o uso da palavra articulada ou escrita como meio de expressão e comunicação entre pessoas".
Esta definição não é suficientemente precisa para permitir o desenvolvimento matemático de uma teoria sobre linguagens.
Assim, torna-se necessário fazer algumas definições formais para entender bem esta matéria.
Concepts of Programming Languages
A tarefa de descrever qualquer linguagem (natural ou artificial), precisa considerar três elementos principais:
Sintaxe
•
Quais as sentenças e quais as sequências são válidas?
Semântica
•
Qual é o significado de uma expressão?
•
Pragmática
•
Como determinada linguagem é usada na prática?
Sintaxe, Semântica e Pragmática
Concepts of Programming Languages
Sintaxe
•
Quais as sentenças e quais as sequências são válidas em uma linguagem?
• Normalmente é separado em,
• léxico: identifica os elementos básicos e
• Sintático: identifica as sequências, como estes elementos podem ser agrupados.
•
A Sintaxe trata das propriedades livres da linguagem como, por exemplo, a verificação gramatical de
programas.
Sintaxe, Semântica e Pragmática
Concepts of Programming Languages
Sintaxe
Influencia como os programas são escritos pelos
programadores, lidos por outros programadores e pelo computador.
Semântica
• Determina como os programas são compostos pelo programador, entendido por outros programadores e interpretados pelo computador.
•
Pragmática
• Influencia como os programadores projectam e implentam um dado problema na prática, como ele usa os elementos da
linguagem.
Sintaxe, Semântica e Pragmática
Concepts of Programming Languages
Alfabeto
Um Alfabeto é um conjunto finito de Símbolos. Portanto, um conjunto vazio também é considerado um alfabeto.
1. Introdução
Um símbolo (ou caractere) é uma entidade abstracta básica a qual não é definida formalmente. Letras e dígitos são exemplos de símbolos
frequentemente usados.
Concepts of Programming Languages
Uma Linguagem de Programação é uma Linguagem com o
objectivo de ser usada por uma pessoa para expressar um processo através do qual um computador pode resolver um problema.
Mas então o que é uma Linguagem de Programação ?
Linguagens de Programação
Em outras palavras, a Linguagem de programação faz a ligação entre o pensamento humano (muitas vezes de natureza não estruturada) e a precisão requerida para o processamento pela máquina.
Concepts of Programming Languages
Mas então o que é uma Linguagem de Programação ?
• Os quatro componentes desta definição são:
• Computador: a máquina que executará o processo descritivo através do Programa;
• Pessoa: o programador que serve como a origem da comunicação;
• Processo: a actividade que está sendo descrita através do programa;
• Problema: o sistema actual ou ambiente onde o problema surgiu.
Linguagem de Programação
Concepts of Programming Languages
Uma Linguagem de Programação é um conjunto de termos e de regras que permitem a formulação de instruções a um computador.
… outra definição usual é:
• Desta forma, a Linguagem de Programação é composta por dois elementos:
• Vocabulário, que consiste num conjunto de símbolos;
• Gramática, que é o conjunto de regras para usar o vocabulário.
Linguagem de Programação
Concepts of Programming Languages
Uma Linguagem de Programação é um conjunto limitado de
instruções (vocabulário), associado a um conjunto de regras (sintaxe) que define como as instruções podem ser associadas (semântica), ou seja, como se pode compor os programas para a resolução de um determinado problema.
Mas então o que é uma Linguagem de Programação ?
Assim, uma linguagem de programação possui e fica definida por um alfabeto, certas regras de sintaxe e uma semântica
Linguagem de Programação
Concepts of Programming Languages
•
Ada Lovelace é historicamente considerada a primeira
programadora.
•
Ela foi a primeira a desenvolver um algoritmo para implantação em um computador.
•
A máquina analítica de Charles Babbage, em outubro de 1842.
História da Programação
First Computer Programmer
Concepts of Programming Languages
2. Níveis das Linguagens de Programação
As linguagens de programação podem ser classificadas em níveis, sendo que as linguagens de nível mais baixo estão mais próximas da linguagem interpretada pelo processador e mais distante das linguagens naturais.
1. Linguagem Máquina
2. Linguagens de baixo nível e
3. Linguagens de alto nível
Concepts of Programming Languages
2. Classes das Linguagens de Programação
• É uma Linguagem usualmente baseada num código
binário, específico para cada tipo de computador (ou microprocessador).
• LET X = Y + Z
2.1. Linguagem Máquina
Linguagem Máquina Exemplo:
1010 11001 1011 11010 1100 11011
Concepts of Programming Languages
2. Níveis das Linguagens de Programação
• A linguagem de máquina de cada processador é acompanhada de uma versão “legível” da linguagem de máquina que é a chamada linguagem simbólica Assembly
• O Assembly como é chamada a Linguagem de Baixo Nível, é
característico para cada equipamento, podendo no entanto ser manipulado com certa facilidade pelos programadores.
• Ela utiliza palavras abreviadas, chamadas mnemônicos, indicando a operação a ser realizada pelo processador.
2.2. Linguagem de Baixo Nível - Assembly
Concepts of Programming Languages
2. Classes das Linguagens de Programação
• É a Linguagem mais próxima da linguagem do homem, não requer
conhecimento da arquitectura da máquina e é portável, isto é, é independente da máquina.
• Neste caso, o programa ou código fonte precisa ser traduzido para a linguagem máquina para poder ser executado.
• O código ou programa objecto é o resultado da tradução quando é utilizado um compilador ou interpretador.
2.3. Linguagem de Alto Nível
Concepts of Programming Languages Tradutores ou conversores de níveis
2. Compilador
Os compiladores são programas de software especiais que
traduzem e convertem os programas escritos em linguagens de alto nível noutro tipo de programas.
Como resultado da tradução, é criado um novo programa correspondente ao inicial mas escrito agora em linguagem máquina, portanto executável.
Estes programas executáveis (*.exe) podem ser executados
fora dos ambientes de programação, C, Visual Basic, Delphi e Pascal por exemplo.
Concepts of Programming Languages Tradutores ou conversores de níveis
2. Compilador
Processo de Tradução
Linguagem de Baixo
Nível Montagem
Linguagem Máquina Código Objecto Linguagem de
Alto Nível
Compilação
Código Assembly
Código Fonte
Durante a compilação, o código fonte é analisado (análise léxica, sintática e semântica), é gerado um código intermediário e são construídas tabelas de símbolos, alocam-se as áreas de memória para variáveis e atribui-se os registers a serem utilizados, e é facilmente gerado o código objecto em linguagem binária de máquina.
Concepts of Programming Languages
Os interpretadores são programas de software especiais que traduzem e convertem os programas escritos em linguagens de alto nível em código capaz de ser interpretado e executado
pelo processador.
Os interpretadores fazem a interpretação de cada instrução do programa fonte executando-a dentro de um ambiente de
programação, BASIC e AutoLISP por exemplo
No entanto, a interpretação do código implica a presença do interpretador sempre que o programa é corrido (interpretado)
Interpretador
Concepts of Programming Languages
Interpretador
Processo de Interpretação
Código Fonte Interpretação Código Nativo CPU/S.O.
As linguagens de programação tipicamente de usuário, tais como planilhas Excel, o Word Basic (Linguagem de construção de
Macros do Word), o Access, etc, são todas linguagens interpretadas
Concepts of Programming Languages
Classes de Linguagens de Programação
Concepts of Programming Languages
Representação Analógica Representação Discreta Representação Digital
Como funciona o Computador?
Concepts of Programming Languages
Discretização
Digitalização
…. Representação analógica
(através duma grandeza geométrica ou física)
…. Representação analógica discretizada
(através duma grandeza geométrica ou física)
…. Representação digital
(através de números: 0 & 1)
Concepts of Programming Languages
Organização da memória
•
Esquema binário: dois dígitos – Bits – 0 e 1
•
Representam dois estados eléctricos diferentes: “on”
(ligado) e “off” (desligado)
•
Um grupo de 8 Bits é um Byte
•
A memória é referenciada em blocos
•
2
10bytes = 1024 bytes = 1k
•
Megabyte = 2
10x 2
10= 1.048.576 bytes
•
Bytes são agrupados em palavras (do mesmo tamanho que os registadores da CPU – comum: 16, 32 e 64 bits)
•
Cada localização da memória é referenciada pelo seu
endereço.
Concepts of Programming Languages
Execução
•
A máquina entende instruções
•
As instruções são construídas de:
•
Código de operação numérica (OPCODE)
•
Endereço de um operando
•
OPCODE – é a representação numérica de uma operação que a CPU pode desenvolver;
•
Carregar – Multiplicar – Adicionar – Armazenar
•
O endereço e o opcode devem ser representados
na forma binária.
Concepts of Programming Languages
Linguagem Máquina - Exemplo
•
Imagine a execução das seguintes tarefas:
• Buscar o conteúdo da memória na localização 1024 e carregar no registador;
• Buscar o conteúdo da memória na localização 1025 e computar o produto deste valor e o valor do registador;
• Armazenar o conteúdo do registador na localização 1027.
•
Supondo que os opcodes são:
• 16 – Load (para carregar)
• 17 – STO (para armazenar)
• 35 – Add (para adicionar)
• 36 – Mult (para multiplicar)
•
As instruções em Linguagem Máquina seriam:
00010000 000000000000010000000000 00100100 000000000000010000000001 00100011 000000000000010000000010 00010001 000000000000010000000011
Opcode Operando
→ 00010000
→ 00100100
→ 00100011
→ 00010001
Concepts of Programming Languages
Em Assembly
•
O mesmo na Linguagem Assembly ficaria:
MOV A, ACC (mova o valor A (1024) para o register ACC)
MUL B, ACC (multiplique o valor B (1025) pelo conteúdo de ACC) ADD C, ACC (adicione o valor obtido na multiplicação C por ACC) STO ACC, X (armazene o valor de ACC em X (1027))
Concepts of Programming Languages
Assembly
•
A linguagem Assembly usa Mnemônicas para as instruções e nomes de variáveis colocadas no endereço numérico.
•
Assembler: é um sistema de software que traduz as instruções em Assembly para a linguagem máquina.
•
Tradução de um Programa
•
Linguagem de alto nível – Linguagem Assembly –
Linguagem Máquina.
Concepts of Programming Languages
L: 7,A
Carrega (load) A para o registo 7 Add: 7,B
Soma B ao conteúdo do registo 7 → A+B R: 7,C
Subtrai C do registo 7 → A+B-C ACC: 7, X
Armazena o resultado como X
2. Linguagem Assembly (Simbólica ou de Montagem ) Exemplo: - Suponha que se pretendesse calcular
X = A + B - C
Concepts of Programming Languages
Concepts of Programming Languages
•
Assembly é em baixo nível
•
Trabalha com Bits & Bytes
•
DB = Define Byte → aloca 1 byte
•
DW = Define Word → aloca 2 bytes
•
DD = Define Doubleword → aloca 4 bytes
•
DQ = Define Quadword → aloca 8 bytes
•
DT = Define Ten → aloca 10 bytes
•
Sintaxe
•
Nome_da_variavel directiva_define valor
Concepts of Programming Languages
Alocar espaço para o caractere ‘A’
Fazemos:
Letra1 DB ‘A’
Mas ‘A’ em hexadecimal é 41, por isso,
Letra1 DB 41H
Em binário
Letra1 DB 01000001B
Concepts of Programming Languages
Armazenar uma password na variável ‘senha’, ela deverá conter 4 digitos decimais: 1094
Em hexadecimal corresponde a: 466H
Precisamos definir 2 bytes = uma word
Um byte armazena 6H
Outro byte armazena 46H
Alocar a memória à senha:
Senha DW 466H
Concepts of Programming Languages
Alocar a memória a palavra ‘curso’:
Curso DB ‘c’
DB ‘u’
DB ‘r’
DB ‘s’
DB ‘o’
Paradigmas
Concepts of Programming Languages
0011 1011 1100 )
100 110 101 )
10001 01100 10011 0111 )
) 1011 1111
) 1000 111
) 101 :
2 a b c d e f
Base
Questões de estudo
a) (11010)2 para a base 10 b) (33)10 para a base 2 c) (87)10 para a base 2 d) (17)8 para a base 10 e) (54)8 para a base 10 f) (F9)16 para a base 10 g) (13C)16 para a base 10 h) (347)8 para a base 10 i) (5DE)16 para a base 10
j) Em que bases é inaceitável o n° 12305 ?
Concepts of Programming Languages
NÍVEIS DE ABSTRACÇÃO NUM
COMPUTADOR
Concepts of Programming Languages
Níveis de abstracção num computador
Na utilização do computador è possível identificar vários níveis de abstracção, sendo os três mais relevantes os seguintes:
Nível da Linguagem Máquina (em binário): instruções e variáveis
totalmente codificadas em binário, sendo a codificação sempre associada a um dado processador;
Nível da Linguagem Assembly: equivalente ao nível anterior, mas em vez da notação puramente binária, usa mnemónicas para especificar as operações pretendidas, bem como os valores ou localizações dos
operandos e
Nível das Linguagens HLL (High Level Languages), como o Java, C++, Pascal, Fortran, Delphi, Visual Basic, etc…
Concepts of Programming Languages
Tradutores ou conversores de níveis
Uma vez que o Processador apenas « entende » os comandos em linguagem máquina, torna-se necessário converter os programas escritos em
linguagens dos níveis de abstracção superiores para níveis mais baixos, até eventualmente se chegar à linguagem máquina. Estes tradutores são
normalmente designados por:
1. Assemblers
Programas que traduzem os textos escritos em Assembly Language para linguagem máquina, onde cada comando compreendido pelo processador se encontra codificado em binário de acordo com um formato definido pelo fabricante do processador.
Concepts of Programming Languages
Tradutores ou conversores de níveis 1. Assemblers
Processo de Montagem Código Fonte
Tradução
Linguagem Máquina
Concepts of Programming Languages
a execução de uma instrução de Input e Output,
a classificação dos dados de um ficheiro,
o cálculo de funções matemáticas, etc.
4. Bibliotecas
O desenvolvimento de um programa utiliza diversas operações que são comuns a muitos outros programas.
Uma linguagem de alto nível geralmente incorpora diversas rotinas prontas (que fazem parte da linguagem) e que compõem bibliotecas (librarys) de funções pré-programadas que poderão ser utilizadas pelo programador.
Concepts of Programming Languages
•
#INCLUDE <STDIO.H>
• Esta biblioteca é responsável pela entrada e saída padrão
"Standard In/Out".
•
Algumas funções dessa biblioteca:
• fprintf, printf, fscanf, scanf, getchar, putc, getc, fopen e fclose.
•
#INCLUDE <CTYPE.H>
• Esta biblioteca serve para testar caracteres
• testar se é maiúsculo, minúsculo, se é espaço, testar dígito decimal
•
#INCLUDE <STRING.H>
• responsável por disponibilizar funções para trabalhar com conjuntos de caracteres, isto é, "strings"
4. Bibliotecas – exemplo em C++
Concepts of Programming Languages
•
#INCLUDE <MATH.H>
• declara funções matemáticas que podem servir para: achar a raiz quadrada, achar o seno, co-seno, tangente, logaritmo na base 10
•
#INCLUDE <STDLIB.H>
• responsável pela conversões de números, as alocações na memória e outras funções
•
#INCLUDE <TIME.H>
• declara funções para manipulação de data e hora
4. Bibliotecas – exemplo em C++
Concepts of Programming Languages
O código objecto preparado pelo compiler em geral não é imediatamente executável, pois ainda existe código (as rotinas de biblioteca) a ser incorporado ao programa
A tarefa de examinar o código objecto, procurar as referências a rotinas de biblioteca, buscar a rotina da biblioteca, substituir a chamada pelo código (“resolver as referências externas”) e obter os parâmetros para
incluí-los no código objecto é executada por um programa chamado Ligador (LinkEditor)
5. Ligações “
LinkEditor “Concepts of Programming Languages
O resultado da execução do Ligador é o código final pronto para ser executado pelo computador, chamado módulo de carga ou código executável
5. Ligações “ LinkEditor “
Processo de Compilação e Ligação
Linguagem de Alto Nível
Compilação Ligação
Linguagem de
Baixo Nível Montador
Módulo de carga Código Fonte Compiler LinkEditor
Código Assembly Assembler
Código Executável
Concepts of Programming Languages
Gramática e Significado bem definidos;
Implementável (executável) com eficiencia 'aceitável';
Universal: deve ser possivel expressar todo problema computável e
Natural para expressar problemas (em um certo dominio de aplicação)
O que caracteriza uma boa linguagem de programação?
Concepts of Programming Languages
Sintaxe: gramática (forma)
Semântica: Significado
Pragmática: (exemplo Metodologias)
Processadores: Compiladores, interpretadores, editores, ambientes visuais, ...
Quais são os Aspectos do estudo de Linguagens ?
Concepts of Programming Languages
Ambiente de Programação
Natural para a aplicação
Abstrações
Facilidade para verificar se o programa está correcto
Portabilidade
Custo de uso (execução, criação, manutenção)
Clareza, Simplicidade e unidade (integridade conceitual)
Tratamento de erros e excepções.
Quais são Atributos de uma boa linguagem ?