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

Preview:

Citation preview

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

Recommended