52
O Essencial sobre O Essencial sobre Linguagens de Programação Linguagens de Programação Luís Caires Luís Caires Maio 2005 Maio 2005

O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Embed Size (px)

Citation preview

Page 1: 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

Page 2: O Essencial sobre Linguagens de Programação Luís Caires Maio 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?

Page 3: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

Page 4: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

InformáticaEstuda processamento automático da informação.

Page 5: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

InformáticaEstuda processamento automático da informação.

Processamento (2 sabores)

Page 6: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 7: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

InformáticaEstuda processamento automático da informação.

Processamento (2 sabores)

Diálogo interactivo com o ambiente

0

Page 8: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

InformáticaEstuda processamento automático da informação.

Processamento (2 sabores)

Diálogo interactivo com o ambiente

0

Page 9: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

InformáticaEstuda processamento automático da informação.

Processamento (2 sabores)

Diálogo interactivo com o ambiente

10

Page 10: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

InformáticaEstuda processamento automático da informação.

Processamento (2 sabores)

Diálogo interactivo com o ambiente

10

Page 11: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

InformáticaEstuda processamento automático da informação.

Processamento (2 sabores)

Diálogo interactivo com o ambiente

8

Page 12: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

InformáticaEstuda processamento automático da informação.

Processamento (2 sabores)

Diálogo interactivo com o ambiente

8

Page 13: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Processos, Algoritmos e Programas

InformáticaEstuda processamento automático da informação.

Processamento (2 sabores)

Diálogo interactivo com o ambiente

20

Page 14: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 15: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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)

Page 16: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 17: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Como descrever processos?

ProcessoComeçar por ler um número. Se esse valor fôr par, escrever “PAR”, caso contrário, escrever “INPAR”. Terminar.

Page 18: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 19: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 20: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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?

Page 21: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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?

Page 22: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 23: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 24: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 25: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 26: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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?

Page 27: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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?

Page 28: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 29: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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)

Page 30: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 31: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 32: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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!

Page 33: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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)

Page 34: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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)

Page 35: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Ingredientes básicos

Valores básicos V números (0, 1, 2.92) sequências de caracteres (“luis”, “maria”)

Page 36: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 37: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 38: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 39: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 40: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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 }

Page 41: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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 }

Page 42: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 43: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 44: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 45: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 46: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 47: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 48: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 49: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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

Page 50: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

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(); }

Page 51: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Objectos como AgentesObjectos como Agentes

ObjectosObjectosMensagensMensagens

ContaAluno

ServidorWEB

BD

Page 52: O Essencial sobre Linguagens de Programação Luís Caires Maio 2005

Fim