O Essencial sobre Linguagens de Programação Luís Caires Maio 2005
description
Transcript of O Essencial sobre Linguagens de Programação Luís Caires Maio 2005
O Essencial sobreO Essencial sobreLinguagens de ProgramaçãoLinguagens de Programação
Luís CairesLuís Caires
Maio 2005Maio 2005
O Essencial sobreO Essencial sobreLinguagens de ProgramaçãoLinguagens de Programação
O que é uma linguagem de programação?O que é uma linguagem de programação? O que é comum a todas as linguagens de O que é comum a todas as linguagens de
programação?programação? Que géneros de linguagens de Que géneros de linguagens de
programação existem? programação existem? Que linguagens de programação são mais Que linguagens de programação são mais
usadas?usadas?
Processos, Algoritmos e Programas
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processamento (2 sabores)
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processamento (2 sabores)
Obtenção de resultados (saída) a partir de dados (entrada)
+2
810
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processamento (2 sabores)
Diálogo interactivo com o ambiente
0
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processamento (2 sabores)
Diálogo interactivo com o ambiente
0
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processamento (2 sabores)
Diálogo interactivo com o ambiente
10
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processamento (2 sabores)
Diálogo interactivo com o ambiente
10
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processamento (2 sabores)
Diálogo interactivo com o ambiente
8
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processamento (2 sabores)
Diálogo interactivo com o ambiente
8
Processos, Algoritmos e Programas
InformáticaEstuda processamento automático da informação.
Processamento (2 sabores)
Diálogo interactivo com o ambiente
20
Processos, Algoritmos e Programas
InformáticaEstuda 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áticaEstuda 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áticoRealizável por uma máquina (o computador)
Processos, Algoritmos e Programas
InformáticaEstuda 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áticoRealizável por uma máquina (o computador)Logo: Requer uma especificação rigorosa
Como descrever processos?
ProcessoComeçar por ler um número. Se esse valor fôr par, escrever “PAR”, caso contrário, escrever “INPAR”. Terminar.
Processos e Programas
ProcessoComeçar por ler um número. Se esse valor fôr par, escrever “PAR”, caso contrário, escrever “INPAR”. Terminar.
Programaread 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 considerarMuitas aspectos a considerar
Que Que tipos de dadostipos de dados são manipuláveis? são manipuláveis?
NúmerosNúmeros
TextoTexto
Aglomerados (Aglomerados (informaçãoinformação estruturada) estruturada) ObjectosObjectos (programas em execução) (programas em execução) Que entidades são“cidadãs de primeira Que entidades são“cidadãs de primeira
classe”?classe”?
Muitas aspectos a considerarMuitas aspectos a considerar
Que Que mecanismos de abstracçãomecanismos de abstracção existem? existem?
Cada linguagem fornece um conjunto de Cada linguagem fornece um conjunto de ingredientes básicos, masingredientes básicos, mas
É possível definir É possível definir NOVOSNOVOS ingredientes por ingredientes por combinação dos ingredientes básicos?combinação dos ingredientes básicos?
Uma linguagem com mecanismos de Uma linguagem com mecanismos de abstracção poderosos é muito flexível abstracção poderosos é muito flexível porque é uma linguagem porque é uma linguagem extensívelextensível!!
Muitas aspectos a considerarMuitas 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 considerarMuitas aspectos a considerar
Programas são fáceis de modificar no futuro?Programas são fáceis de modificar no futuro? É fácil compreender a funcionalidade de É fácil compreender a funcionalidade de
um programa, muito depois (um ano) de um programa, muito depois (um ano) de este ter sido escrito?este ter sido escrito?
É fácil compreender programas escritos É fácil compreender programas escritos por outras pessoas?por outras pessoas?
Alteração pontual pode ter repercussões Alteração pontual pode ter repercussões graves noutro “sítio” do programa?graves noutro “sítio” do programa?
Muitas aspectos a considerarMuitas aspectos a considerar
Como são os programas executados?Como são os programas executados?
De forma eficiente?De forma eficiente? Interpretados (Visual Basic) ?Interpretados (Visual Basic) ? Compilados (C++) ?Compilados (C++) ? ou Semi-Interpretados (Java) ?ou Semi-Interpretados (Java) ?
Execução de ProgramasExecução de Programas
Programas interpretadosProgramas interpretados
InterpretadorInterpretador
Programa fontePrograma fonte
ProcessadorProcessador
O processador executa um O processador executa um programa especial:programa especial:
o o interpretadorinterpretadora função do interpretador é a função do interpretador é
interpretar passo a passo o interpretar passo a passo o programa fonte (escrito em programa fonte (escrito em JavaScript, por exemplo)JavaScript, por exemplo)
Execução de ProgramasExecução de Programas
Programas compiladosProgramas compilados
CompiladorCompilador
Programa fontePrograma fonte
Programa objectoPrograma objecto
ProcessadorProcessador
O O compiladorcompilador traduz o programa traduz o programa fonte (em C, por exemplo) num fonte (em C, por exemplo) num outro programa (o programa outro programa (o programa objecto) objecto)
O programa objecto é directamente O programa objecto é directamente executável pelo processador executável pelo processador hardwarehardware
Execução de ProgramasExecução de Programas
Programas semi-interpretadosProgramas semi-interpretados
CompiladorCompilador
Programa fontePrograma fonte
Código intermédioCódigo intermédio
Máquina VirtualMáquina Virtual
O O compiladorcompilador traduz o programa fonte traduz o programa fonte (em Java, por exemplo) num (em Java, por exemplo) num programa (o código intermédio) programa (o código intermédio) para uma máquina virtualpara uma máquina virtual
A A máquina virtualmáquina virtual é um interpretador é um interpretador que simula um processador que simula um processador poderoso mas eficiente!poderoso mas eficiente!
ProcessadorProcessador
Muitas aspectos a considerarMuitas aspectos a considerar
Que garantias dá a linguagem?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 Muitas linguagens, no passado e no presenteno presente
FORTRANFORTRAN (para fazer contas, um (para fazer contas, um recordrecord de longevidade) de longevidade)ALGOLALGOL (uma boa ideia antes do tempo)(uma boa ideia antes do tempo)SMALLTALKSMALLTALK (a ideia de programar (a ideia de programar sósó com com objectosobjectos))LISPLISP (a ideia de programar (a ideia de programar sósó com com funçõesfunções))PROLOGPROLOG (a ideia de programar (a ideia de programar sósó com com relaçõesrelações))MLML (programação funcional “at it´s best”)(programação funcional “at it´s best”)CC (programar um sistema Operativo: UNIX)(programar um sistema Operativo: UNIX)JAVAJAVA (programar com objectos, no fim do séc. XX )(programar com objectos, no fim do séc. XX )C#C# (Java, à moda da Microsoft)(Java, à moda da Microsoft)
Muitas linguagens, no passado e Muitas linguagens, no passado e no presenteno presente
FORTRANFORTRAN (para fazer contas, um (para fazer contas, um recordrecord de longevidade) de longevidade)
São assim São assim tãotão diferentes? Sim, mas ... diferentes? Sim, mas ...
““The next 700 programming languages”The next 700 programming languages”vão ser muito muito parecidas ;-)vão ser muito muito parecidas ;-)
JAVAJAVA (programar com objectos, no fim do século)(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 Expressões VV sobre númerossobre números
(2+3, 2.0*3.14)(2+3, 2.0*3.14) sobre sequências de caracteres sobre sequências de caracteres ((“luis”“luis”@ @ “maria”“maria”))
Definições
As definições dão nomes a entidadesAs definições dão nomes a entidades
declaredeclare
numero_de_contanumero_de_conta = 10 = 10inin < corpo da definição> < corpo da definição>
nomenome
Valor inteiroValor inteiro
Definições
Uma definição só é válida num certo Uma definição só é válida num certo âmbitoâmbito
declare numero_de_conta = 10
in < corpo da definição>
nome
âmbito
Valor inteiro
Manipulação de “estado”
Células de memória Células de memória MM podem ser podem ser reservadasreservadas X = X = newnew
podem ser podem ser escritasescritas XX := E := E
podem ser podem ser lidaslidas ? ? XX
Manipulação de “estado”
Usando definições podemos dar nomes às Usando definições podemos dar nomes às células de memóriacélulas de memória
declare
numero_de_conta = 10saldo = new
in { saldo := 0 ; saldo := ?saldo + 100 }
Parametrização
Parametrizando um programa num nome Parametrizando um programa num nome obtém-se generalidadeobtém-se generalidade
Acumular o valor inteiro 100 ao saldoAcumular o valor inteiro 100 ao saldosaldosaldo := ? := ?saldosaldo + 100 + 100
Acumular o valor Acumular o valor VALVAL ao saldo ao saldosaldosaldo := ? := ?saldosaldo + + VALVAL
Função que incrementa o saldo com um valor qq Função que incrementa o saldo com um valor qq funfun((VALVAL) { ) { saldosaldo := ? := ?saldosaldo + + VAL VAL }
Parametrização
Parametrizando um programa num nome Parametrizando um programa num nome obtém-se generalidadeobtém-se generalidade
Acumular o valor inteiro 100 ao saldoAcumular o valor inteiro 100 ao saldosaldosaldo := ? := ?saldosaldo + 100 + 100
Acumular VAL ao saldoAcumular VAL ao saldosaldosaldo := ? := ?saldosaldo + + VALVAL
Função que incrementa o saldo com um valor qq Função que incrementa o saldo com um valor qq funfun((VALVAL) ) saldosaldo := ? := ?saldosaldo + + VALVAL
Parametrização em VAL
Definição de funções
Usando definições podemos dar também Usando definições podemos dar também nomes a funções:nomes a funções:
declare
numero_de_conta = 10saldo = newacum = fun (x) saldo := ?saldo + x
in { saldo := 0 ; acum(10); }
Definição de funções
Da mesma forma, podemos dar nomes a Da mesma forma, podemos dar nomes a programasprogramas
declare Conta = declare
numero_de_conta = 10saldo = newacum = fun (x) saldo := ?saldo + x
in { saldo := 0 ;} in ...
Definição de funções
Quais são os elementos definidos no Quais são os elementos definidos no programa programa ContaConta??
declare Conta = declare
numero_de_conta = 10saldo = newacum = fun (x) saldo := ?saldo + x
in { saldo := 0 ;} in ....
Definição de funções
Quais são os elementos definidos no Quais são os elementos definidos no programa programa ContaConta??
declare Conta = declare
numero_de_conta = 10saldo = newacum = fun (x) saldo := ?saldo + x
in { saldo := 0 ;} in ....
nomes locais
Alargando o âmbito das definições
Objectos: encapsulam dados e funçõesObjectos: encapsulam dados e funções declare Conta =
object private numero_de_conta = 10
private saldo = newpublic acum = fun (x) saldo := ?saldo + xpublic val = fun () ?saldo
in { saldo := 0 ;} in ...
Alargando o âmbito das definições
Objectos: encapsulam dados e funçõesObjectos: encapsulam dados e funções declare Conta =
object private numero_de_conta = 10
private saldo = newpublic acum = fun (x) saldo := ?saldo + xpublic val = fun () ?saldo
in { saldo := 0 ;} in ...
nomes locais
Alargando o âmbito das definições
Objectos: encapsulam dados e funçõesObjectos: encapsulam dados e funções declare Conta =
object private numero_de_conta = 10
private saldo = newpublic acum = fun (x) saldo := ?saldo + xpublic val = fun () ?saldo
in { saldo := 0 ;} in ...
nomes públicos
Classes e Objectos
Objectos agregam dados e funçõesObjectos 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 AgentesObjectos como Agentes
ObjectosObjectosMensagensMensagens
ContaAluno
ServidorWEB
BD
Fim