O Essencial sobre
Linguagens de Programação
Luís Caires
Maio 2005
O Essencial sobre
Linguagens de Programação
 O que é uma linguagem de programação?
 O que é comum a todas as linguagens de
programação?
 Que géneros de linguagens de
programação existem?
 Que linguagens de programação são mais
usadas?
Processos, Algoritmos e
Programas
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
2
+
8
10
Obtenção de resultados (saída) a partir de dados (entrada)
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
0
Diálogo interactivo com o ambiente
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
0
Diálogo interactivo com o ambiente
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
10
Diálogo interactivo com o ambiente
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
10
Diálogo interactivo com o ambiente
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
8
Diálogo interactivo com o ambiente
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
8
Diálogo interactivo com o ambiente
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
20
Diálogo interactivo com o ambiente
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
Obtenção de resultados (saída) a partir de dados (entrada)
Diálogo interactivo com o ambiente
 Automático
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
Obtenção de resultados (saída) a partir de dados (entrada)
Diálogo interactivo com o ambiente
 Automático
Realizável por uma máquina (o computador)
Processos, Algoritmos e
Programas
 Informática
Estuda processamento automático da informação.
 Processamento (2 sabores)
Obtenção de resultados (saída) a partir de dados (entrada)
Diálogo interactivo com o ambiente
 Automático
Realizável por uma máquina (o computador)
Logo: Requer uma especificação rigorosa
Como descrever processos?
 Processo
Começar por ler um número. Se esse valor fôr par,
escrever “PAR”, caso contrário, escrever “INPAR”.
Terminar.
Processos e Programas
 Processo
Começar por ler um número. Se esse valor fôr par,
escrever “PAR”, caso contrário, escrever “INPAR”.
Terminar.
 Programa
read X;
if (X mod 2 = O)
then MSG := “par!”
else MSG := “ínpar!”;
write MSG
Processos e Programas
Programa
um texto correctamente escrito numa
linguagem de programação (Visual Basic,
Java, etc.)
 Um programa não é um algoritmo /
processo!
 Um programa é uma descrição
possível de um algoritmo / processo
Processos e Programas
 Infelizmente, nem todos os programas
descrevem processos interessantes ou
relevantes :-)
 Por outro lado, pense na sua linguagem
preferida (Java?). Será que é
garantidamente possível descrever
qualquer algoritmo/processo imaginável na
linguagem Java?
Expressividade
 Todas as linguagens de programação são
igualmente expressivas
 Facto: se um algoritmo / processo pode
ser implementado numa certa linguagem,
então também pode ser implementado
noutra linguagem qualquer
 Quer isto dizer que as linguagens de
programação são todas equivalentes?
Expressividade
 A expressividade teórica não é tudo (é
“impossível” perceber programas escritos
para a máquina de Turing)
 A facilidade de expressão disponibilizada
é muito muito muito importante!
 A expressividade de uma linguagem de
programação depende dos conceitos
primitivos por esta disponibilizados
Muitas aspectos a considerar
Que modelos de computação suportados?
 Fazer cálculos (operações matemáticas?)
 Fazer cálculos intensivos (paralelismo?)
 Manter bases de dados (sincronização?)
 Gerir um computador (hardware)
 Controlar um dispositivo (ex: nave espacial)
 Suportar aplicações na internet
Muitas aspectos a considerar
Que tipos de dados são manipuláveis?
 Números
 Texto
 Aglomerados (informação estruturada)
 Objectos (programas em execução)
 Que entidades são“cidadãs de primeira
classe”?
Muitas aspectos a considerar
Que mecanismos de abstracção existem?
 Cada linguagem fornece um conjunto de
ingredientes básicos, mas
 É possível definir NOVOS ingredientes por
combinação dos ingredientes básicos?
 Uma linguagem com mecanismos de
abstracção poderosos é muito flexível
porque é uma linguagem extensível!
Muitas aspectos a considerar
É fácil produzir programas grandes ?
 É possível escrever um programa por
partes, para melhor o estruturar e
compreender, tal como um livro pode ser
dividido em capítulos, secções, etc?
 É fácil substituir certas partes por outras
(talvez melhores ...) no futuro?
Muitas aspectos a considerar
Programas são fáceis de modificar no futuro?
 É fácil compreender a funcionalidade de
um programa, muito depois (um ano) de
este ter sido escrito?
 É fácil compreender programas escritos
por outras pessoas?
 Alteração pontual pode ter repercussões
graves noutro “sítio” do programa?
Muitas aspectos a considerar
Como são os programas executados?
 De forma eficiente?
 Interpretados (Visual Basic) ?
 Compilados (C++) ?
 ou Semi-Interpretados (Java) ?
Execução de Programas
Programas interpretados
Programa fonte
Interpretador
Processador
O processador executa um
programa especial:
o interpretador
a função do interpretador é
interpretar passo a passo o
programa fonte (escrito em
JavaScript, por exemplo)
Execução de Programas
Programas compilados
Programa fonte
Compilador
Programa objecto
Processador
O compilador traduz o programa
fonte (em C, por exemplo)
num outro programa (o
programa objecto)
O programa objecto é
directamente executável pelo
processador hardware
Execução de Programas
Programas semi-interpretados
Programa fonte
Compilador
Código intermédio
Máquina Virtual
Processador
O compilador traduz o programa
fonte (em Java, por exemplo)
num programa (o código
intermédio) para uma
máquina virtual
A máquina virtual é um
interpretador que simula um
processador poderoso mas
eficiente!
Muitas aspectos a considerar
Que garantias dá a linguagem?
 Que género de erros são detectáveis?
 Que género de erros são detectados?
 Quando são detectados?
 O ideal é serem detectados o mais cedo
possível, ou seja, antes do programa ser
executado!
Muitas linguagens, no
passado e no presente
FORTRAN
ALGOL
SMALLTALK
LISP
PROLOG
ML
C
JAVA
C#
(para fazer contas, um record de longevidade)
(uma boa ideia antes do tempo)
(a ideia de programar só com objectos)
(a ideia de programar só com funções)
(a ideia de programar só com relações)
(programação funcional “at it´s best”)
(programar um sistema Operativo: UNIX)
(programar com objectos, no fim do séc. XX )
(Java, à moda da Microsoft)
Muitas linguagens, no
passado e no presente
FORTRAN
(para fazer contas, um record de longevidade)
São assim tão diferentes? Sim, mas ...
“The next 700 programming languages”
vão ser muito muito parecidas ;-)
JAVA
(programar com objectos, no fim do século)
Ingredientes básicos
Valores básicos V
 números
(0, 1, 2.92)
 sequências de caracteres
(“luis”, “maria”)
Ingredientes básicos
Expressões V
 sobre números
(2+3, 2.0*3.14)
 sobre sequências de caracteres
(“luis”@ “maria”)
Definições
As definições dão nomes a entidades
declare
numero_de_conta = 10
in < corpo da definição>
nome
Valor inteiro
Definições
Uma definição só é válida num certo âmbito
nome
declare
numero_de_conta = 10
in < corpo da definição>
Valor inteiro
âmbito
Manipulação de “estado”
Células de memória M
 podem ser reservadas
 podem ser escritas
 podem ser lidas
X = new
X := E
?X
Manipulação de “estado”
Usando definições podemos dar nomes às
células de memória
declare
numero_de_conta = 10
saldo = new
in { saldo := 0 ; saldo := ?saldo + 100 }
Parametrização
Parametrizando um programa num nome
obtém-se generalidade
 Acumular o valor inteiro 100 ao saldo
saldo := ?saldo + 100
 Acumular o valor VAL ao saldo
saldo := ?saldo + VAL
 Função que incrementa o saldo com um valor qq
fun(VAL) { saldo := ?saldo + VAL }
Parametrização
Parametrizando um programa num nome
obtém-se generalidade
 Acumular o valor inteiro 100 ao saldo
saldo := ?saldo + 100
Parametrização em VAL
 Acumular VAL ao saldo
saldo := ?saldo + VAL
 Função que incrementa o saldo com um valor qq
fun(VAL) saldo := ?saldo + VAL
Definição de funções
Usando definições podemos dar também
nomes a funções:
declare
numero_de_conta = 10
saldo = new
acum = fun (x) saldo := ?saldo + x
in { saldo := 0 ; acum(10); }
Definição de funções
Da mesma forma, podemos dar nomes a
programas
declare Conta =
declare
numero_de_conta = 10
saldo = new
acum = fun (x) saldo := ?saldo + x
in { saldo := 0 ;}
in ...
Definição de funções
Quais são os elementos definidos no
programa Conta?
declare Conta =
declare
numero_de_conta = 10
saldo = new
acum = fun (x) saldo := ?saldo + x
in { saldo := 0 ;}
in ....
Definição de funções
Quais são os elementos definidos no
programa Conta?
declare Conta =
nomes locais
declare
numero_de_conta = 10
saldo = new
acum = fun (x) saldo := ?saldo + x
in { saldo := 0 ;}
in ....
Alargando o âmbito das
definições
Objectos: encapsulam dados e funções
declare Conta =
object
private numero_de_conta = 10
private saldo = new
public acum = fun (x) saldo := ?saldo + x
public val = fun () ?saldo
in { saldo := 0 ;}
in ...
Alargando o âmbito das
definições
Objectos: encapsulam dados e funções
declare Conta =
nomes locais
object
private numero_de_conta = 10
private saldo = new
public acum = fun (x) saldo := ?saldo + x
public val = fun () ?saldo
in { saldo := 0 ;}
in ...
Alargando o âmbito das
definições
Objectos: encapsulam dados e funções
declare Conta =
object
private numero_de_conta = 10
private saldo = new
public acum = fun (x) saldo := ?saldo + x
public val = fun () ?saldo
in { saldo := 0 ;}
nomes públicos
in ...
Classes e Objectos
Objectos agregam dados e funções
declare Conta =
object
...
in declare
cc = new Conta
in { cc.acum(10);
cc.acum(29);
write cc.val(); }
Objectos como Agentes
Objectos
Mensagens
Aluno
Conta
Servidor
WEB
BD
Fim
Download

Apresentação "Linguagens de Programação"