• Nenhum resultado encontrado

Concepts of Programming Languages

N/A
N/A
Protected

Academic year: 2022

Share "Concepts of Programming Languages"

Copied!
60
0
0

Texto

(1)

Concepts of Programming Languages

Ano Lectivo 2020

Linguagens de Programação

Pro f. D ou tor Fél ix Sin go

(2)

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.

(3)

Concepts of Programming Languages

(4)

Concepts of Programming Languages

Porquê estudar Linguagens de

Programação?....

(5)

Concepts of Programming Languages

(6)

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.

(7)

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

(8)

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.

(9)

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. …

(10)

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.

(11)

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.

(12)

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 ?

(13)

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.

(14)

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 ?!

(15)

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.

(16)

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.

(17)

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

(18)

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

(19)

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

(20)

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.

(21)

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.

(22)

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

(23)

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

(24)

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

(25)

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

(26)

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

(27)

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

(28)

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

(29)

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

(30)

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.

(31)

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.

(32)

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

(33)

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

(34)

Concepts of Programming Languages

Classes de Linguagens de Programação

(35)

Concepts of Programming Languages

Representação Analógica Representação Discreta Representação Digital

Como funciona o Computador?

(36)

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)

(37)

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

10

bytes = 1024 bytes = 1k

Megabyte = 2

10

x 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.

(38)

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.

(39)

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

(40)

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))

(41)

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.

(42)

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

(43)

Concepts of Programming Languages

(44)

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

(45)

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

(46)

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

(47)

Concepts of Programming Languages

Alocar a memória a palavra ‘curso’:

Curso DB ‘c’

DB ‘u’

DB ‘r’

DB ‘s’

DB ‘o’

Paradigmas

(48)

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 ?

(49)

Concepts of Programming Languages

NÍVEIS DE ABSTRACÇÃO NUM

COMPUTADOR

(50)

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…

(51)

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.

(52)

Concepts of Programming Languages

Tradutores ou conversores de níveis 1. Assemblers

Processo de Montagem Código Fonte

Tradução

Linguagem Máquina

(53)

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.

(54)

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++

(55)

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++

(56)

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

(57)

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

(58)

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?

(59)

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 ?

(60)

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 ?

Referências

Documentos relacionados

Ainda na quinta-feira recebe- mos a representante pessoal do Presidente de Rotary International, a Governadora do Rotary Sueli Noronha Kaiser que veio de São José do Rio Preto para

Portaria n.º 1514/2008 de 24 Dezembro - Procede à actualização do valor do indexante dos apoios sociais e à actualização anual das pensões e de outras prestações

No sentido de reverter tal situação, a realização deste trabalho elaborado na disciplina de Prática enquanto Componente Curricular V (PeCC V), buscou proporcionar as

O resguardar a obra pode re-articular a afinabilidade e, com isso, afinar de modo fundamental as remissões de mundo de um povo, isto é, determina o ser-com, do mesmo

Existem diferentes tipos de linguagens de programação que podem ser usadas para a criação de programas, mas, independente da linguagem utilizada, essas instruções são

Para critério de pontuação de curso de qualificação deverá ser apresentado somente certificado com carga horária mínima de 20 horas, dos últimos quatro anos

Através do estudo da previsão da sua vida útil das superfícies em betão à vista, pretende-se contribuir para que os decisores tenham mais informação relativamente ao

A biblioteca na qual a função de proteção desenvolvida foi inserida pode ser caracterizada como um software desenvolvido em linguagem C++ para ser utilizado em um