Parte II
Programao em Linguagens Estruturadas
Estrutura de dados
So formas de armazenar e organizar dados para facilitar o acesso e possveis modificaes
Programa computacional
um algoritmo expresso em uma linguagem de programao
Nvel de abstrao
Linguagens de mquina
ADD 3,W
STORE 3,Z
1A 3 0C1A0
50 3 0C1A4
ADD 3,W
STORE 3,Z
1A 3 0C1A0
50 3 0C1A4
Correspondncia 1 para 1
Programa Montador
Responsvel por converter o programa na linguagem de mquina correspondente
Programa na Linguagem de Montagem X Mquina X Programa equivalente na Linguagem de Mquina X
Montador
Mquina X
Entrada de execuo
Sada de execuo
Programa Montador
Responsvel por converter o programa na linguagem de mquina correspondente
Programa na Linguagem de Montagem X Mquina X Programa equivalente na Linguagem de Mquina X
Montador
Mquina X
Entrada de execuo
Sada de execuo
Programa Compilador
Mquina X Compilador
Mquina X
Entrada de execuo
Sada de execuo
Programa Interpretador
Programa na Linguagem de Alto nvel Y
Mquina X
Interpretador
Entrada de execuo
Sada de execuo
Programao Imperativa
Chamada tambm de programao algortmica Descreve a computao em detalhes em termos de sentenas que mudam o estado do programa
Define sequncias de comandos para o computador executar
Semelhante a uma linguagem oral imperativa:
Chefe: - Some dois nmeros! Chefe: - Exiba o resultado! Chefe: - Volte ao seu trabalho anterior! Chefe: - etc.
Sentenas
Menor elemento em uma linguagem de programao imperativa capaz de realizar mudana de estado
Sentena simples
Atribuio: a = a + 1 Chamada: funcao() Retorno: return 0 Desvio: goto 1 Assero: assert(a == 0)
Sentenas
Menor elemento em uma linguagem de programao imperativa capaz de realizar mudana de estado
Sentena composta
Bloco: begin
write(Y');
else
write('N');
end
Sentenas
Menor elemento em uma linguagem de programao imperativa capaz de realizar mudana de estado
Sentena composta
Chaveamento: switch (c) case 'a':
alert(); break;
case 'q':
quit(); break;
end
Sentenas
Diferenas nas sintaxes
Separao de sentenas Trmino de sentenas
Linguagem Separao/Terminao de Sentena
Cobol C e C++
Java, Perl Python
Lua
Programao No-estruturada
Programao Estruturada
Programao Noestruturada
Tipo de programao imperativa
Cdigo caracterizado pela presena de sentenas do tipo goto
Cada sentenas ou linha de cdigo identificada por um rtulo ou um nmero
Chefe: 10 - Imprimir resultado Chefe: 20 - Se A+B for maior que C Chefe: 30 - V para 10 Chefe: 40 Se A+B for menor que C Chefe: 50 - Some mais 1
Programao Noestruturada
Tipo de programao imperativa
Cdigo caracterizado pela presena de sentenas do tipo goto
Cada sentenas ou linha de cdigo identificada por um rtulo ou um nmero
Chefe: 10 - Imprimir resultado Chefe: 20 - Se A+B for maior que C O goto e o if, por Chefe: 30 - V para 10 algum tempo, eram as Chefe: 40 Se A+B for menor que C nicas estruturas de Chefe: 50 - Some mais 1 controle das
Programao Estruturada
Tipo de programao imperativa
Basicamente no utiliza sentenas do tipo goto
Dispensa os rtulos
Chefe: - Se A+B for maior que C Chefe: - Imprimir resultado Chefe: - Caso contrrio Chefe: - Some mais 1
Programao No-estruturada
Programao Estruturada
Programao Procedural
Programao Procedural
Tipo de programao imperativa e estruturada baseada em procedimentos
Procedimentos so sinnimos de funes, mtodos ou sub-rotinas
Ex.: Linguagem C
Chefe: - somar(a, b) Chefe: - imprimir(terminado!) Chefe: - voltar
Programao Procedural
Tipo de programao imperativa e estruturada baseada em procedimentos
Procedimentos so sinnimos de funes, mtodos ou sub-rotinas
Ex.: Linguagem C
Chefe: - somar(a, b) Chefe: - imprimir(terminado!) Chefe: - voltar
Resolve o problema por partes, subdividindo-o at que a subdiviso seja simples o suficiente para ser resolvida por apenas um procedimento.
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Programao Procedural
Uso de procedimentos permite:
Reuso de procedimentos em diferentes partes do cdigo
Chefe: r = somar(a,b) Chefe: imprimir(r) Chefe: r = somar(a,r)
Programao Procedural
Uso de procedimentos permite:
Reuso de procedimentos em diferentes partes do cdigo!
Aumenta a eficincia da programao
Chefe: r = somar(a,b) Chefe: imprimir(r) Chefe: r = somar(a,r)
Procedural
main() { define_carro(); entra_carro(); sair_carro(); }
Linguagens de Programao DEL-Poli/UFRJ
Orientada a objetos
main() { Carro carro; carro.entrar(); carro.sair(); }
Prof. Miguel Campista
Processador de dbito
Apesar da motivao inicial de desenvolvimento, com o passar do tempo, as linguagens se tornaram mais versteis e completas. Ex.: C++, Lua e Python
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Delineamento
Capacidade da linguagem no apresentar ambiguidades
Modularidade
Suporte subprogramao e extenso
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Portabilidade
Dependncia de mquinas especficas
Eficincia
Velocidade de compilao/traduo e execuo
Generalidade
Capacidade de uso em diferentes aplicaes
Simplicidade de aprendizado
Primeiras Linguagens
Lua Perl
Linguagem Lua
Criada em 1993 na PUC-Rio Linguagem de script dinmica
Semelhante a Python, PHP e Ruby
Possui simplicidade de codificao, eficincia e portabilidade Possui possibilidade de embutir o interpretador em uma aplicao C Tamanho pequeno
Ncleo da linguagem mais bibliotecas ocupa menos de 200k
Importante para arquiteturas com recursos limitados
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Linguagem Lua
uma linguagem dinmica...
Interpretao dinmica
Linguagem capaz de executar trechos de cdigo criados dinamicamente no mesmo ambiente de execuo
Ex.: funo loadstring
Linguagem Lua
uma linguagem dinmica...
Tipagem dinmica forte
Linguagem faz verificao de tipos em tempo de execuo e no em tempo de compilao Linguagem no aplica uma operao a um tipo incorreto
Linguagem Lua
Possui propsito geral
Pode ser utilizada em...
Pequenos scripts e sistemas complexos
Principais aplicaes
Desenvolvimento de jogos Ex.: World of Warcraft e The Sims Middleware do Sistema Brasileiro de TV Digital
Ex.: Projeto Ginga
Software comercial Ex.: Adobe Photoshop Lightroom Software para Web Ex.: Publique!
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Linguagem Lua
Trecho
Pedao de cdigo em Lua
Compila cdigos para mquina virtual (MV) Depois de compilado, Lua executa o cdigo com o interpretador para a MV
Interpretador: lua
Compila e executa o cdigo
lua <arq-codigo>
Compilador: luac
Apenas compila
luac o <nome-arq-compilado> <arq-codigo>
shell>$
Hello, world!
shell>$
Hello, world!
shell>$ Distribuio de Lua para Windows: Lua for windows http://code.google.com/p/luaforwindows/
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Variveis em Lua
Escopo
Por padro, as variveis so sempre globais (Escopo lxico)
Para indicar variveis locais, usa-se a palavra-chave: local
Tipos
Determinados dinamicamente, dependendo do valor que est sendo armazenado
Variveis podem armazenar qualquer um dos tipos bsicos de Lua
nil, boolean, number, string, function, userdata, thread e table
Variveis em Lua
Escopo
Por padro, as variveis so sempre globais (Escopo lxico)
Para indicar variveis locais, usa-se a palavra-chave: local
Tipos
Determinados dinamicamente, dependendo do valor que est sendo armazenado
Variveis podem armazenar qualquer um dos tipos bsicos de Lua
nil, boolean, number, string, function e table
Variveis em Lua
Escopo
Por padro, as variveis so sempre globais (Escopo lxico)
Para indicar variveis locais, usa-se a palavra-chave: local
Tipos
Determinados dinamicamente, dependendo do valor que est sendo armazenado
Variveis podem armazenar qualquer um dos tipos bsicos de Lua
nil, boolean, number, string, function e table
Varivel booleana
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Variveis em Lua
Escopo
Por padro, as variveis so sempre globais (Escopo lxico)
Para indicar variveis locais, usa-se a palavra-chave: local
Tipos
Determinados dinamicamente, dependendo do valor que est sendo armazenado
Variveis podem armazenar qualquer um dos tipos bsicos de Lua
nil, boolean, number, string, function e table
Ponto flutuante (pode ser usada para representar umCampista inteiro) Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel
Variveis em Lua
Escopo
Por padro, as variveis so sempre globais (Escopo lxico)
Para indicar variveis locais, usa-se a palavra-chave: local
Tipos
Determinados dinamicamente, dependendo do valor que est sendo armazenado
Variveis podem armazenar qualquer um dos tipos bsicos de Lua
nil, boolean, number, string, function e table
Variveis em Lua
Escopo
Por padro, as variveis so sempre globais (Escopo lxico)
Para indicar variveis locais, usa-se a palavra-chave: local
Tipos
Determinados dinamicamente, dependendo do valor que est sendo armazenado
Variveis podem armazenar qualquer um dos tipos bsicos de Lua
nil, boolean, number, string, function e table
Representa funes
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Variveis em Lua
Escopo
Por padro, as variveis so sempre globais (Escopo lxico)
Para indicar variveis locais, usa-se a palavra-chave: local
Tipos
Determinados dinamicamente, dependendo do valor que est sendo armazenado
Variveis podem armazenar qualquer um dos tipos bsicos de Lua
nil, boolean, number, string, function e table
Variveis em Lua
Escopo
Por padro, as variveis so sempre globais (Escopo lxico)
Para indicar variveis locais, usa-se a palavra-chave: local
Tipos
Determinados dinamicamente, dependendo do valor que est sendo armazenado
Variveis podem armazenar qualquer um dos tipos bsicos de Lua
nil, boolean, number, string, function e table
Function e table armazenam uma referncia
Comentrio
Inicializao de Variveis
Programa: initvar.lua
shell>$ lua initvar.lua bola nil 1 2 nil bola casa casa bola shell>$
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Operadores em Lua
Relacionais
<, >, <=, >=, ==, ~=
Operadores retornam true ou false (0 tipo number) Negao da igualdade: ~=
Lgicos
and, or, not
Operadores em Lua
Relacionais
<, >, <=, >=, ==, ~=
Operadores retornam true ou false Negao da igualdade: ~=
Lgicos
and, or, not
Arquivo: var.lua
Operadores em Lua
Relacionais
<, >, <=, >=, ==, ~=
Operadores retornam true ou false Negao da igualdade: ~=
Lgicos
and, or, not
Arquivo: var.lua
shell>$ lua var.lua 34 false 0 true lua 34 100 shell>$
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Operadores em Lua
Pra que eu poderia usar a funo abaixo em Lua?
function initx (v) x = v or 100 end
Operadores em Lua
Pra que eu poderia usar a funo abaixo em Lua?
function initx (v) x = v or 100 end
Funo para inicializar x com valor padro (100) caso v no seja atribudo.
Operadores em Lua
Arquivo: defaultInit.lua
Tabelas em Lua
Uso do operador {}
Tabela vazia: t = {} Tabela com trs elementos: t = {4, lua, false} Tabela associativa (chave e valor): t = {x=4, y=l,z=false}
Tabelas em Lua
Uso do operador {}
Tabela vazia: t = {} Tabela com trs elementos: t = {4, lua, false} Tabela associativa (chave e valor): t = {x=4, y=l,z=false}
Arquivo: tabela.lua
Tabelas em Lua
Uso do operador {}
Tabela vazia: t = {} Tabela com trs elementos: t = {4, lua, false} Tabela associativa (chave e valor): t = {x=4, y=l,z=false}
Arquivo: tabela.lua
shell>$ lua tabela.lua 4 lua false number string boolean nil nil nil 4 lua false 4 lua false
shell>$
Tabelas em Lua
Programa: tabela2.lua (Variveis do tipo table armazenam referncias)
Tabelas em Lua
Insero em tabelas
Arquivo: insereTable.lua
Lao
while x < 10 do x=x+1 end
shell>$
Funes em Lua
Declarao de funes
function
function nome-da-funcao (arg1, arg2, ..., argn) Corpo da funo end
Funes em Lua
Bibliotecas Padro
As bibliotecas padro de Lua oferecem funes teis
So implementadas diretamente atravs da API C
Algumas dessas funes oferecem servios essenciais para a linguagem (ex. type) Outras oferecem acesso a servios "externos" (ex. E/S)
Exemplo 1: Fatorial
Escreva um programa em Lua para calcular o nmero fatorial de um inteiro passado pelo usurio
?
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Exemplo 1: Fatorial
Exemplo 2: Fibonacci
Escreva um programa em Lua para calcular o ensimo nmero da srie de Fibonacci.
O ensimo nmero passado pelo usurio
?
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Exemplo 2: Fibonacci
?
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
?
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Linguagem Perl
Criada em 1987 por Larry Wall na Unisys
Baseada em C, shell script, AWK e sed
Possui simplicidade de codificao, eficincia e portabilidade Possui possibilidade de embutir o interpretador em uma aplicao C
Linguagem Perl
Possui propsito geral
Pode ser utilizada em...
Pequenos scripts e sistemas complexos
Principais aplicaes
Processamento de texto
Aplicao original
Web
Amazon.com, BBC Online, Ticketmaster
Desenvolvimento de software
Twiki
Comunicaes
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Linguagem Perl
Perl uma linguagem interpretada
Interpretador: perl
Interpreta e executa o cdigo
perl <arq-codigo>
shell>$
shell>$
Variveis em Perl
Escopo
Por padro, as variveis so sempre globais
Para indicar variveis locais, usa-se a palavra-chave: my
Tipos
Perl possui trs tipos principais
scalar
Representa um nico valor
array
Representa uma lista de valores
hash
Representa um conjunto de pares chave/valor
Variveis em Perl
Escopo
Por padro, as variveis so sempre globais
Para indicar variveis locais, usa-se a palavra-chave: my
Tipos
Perl possui trs tipos principais
scalar
ser strings, inteiros array e pontos flutuantes. O Perl Representa uma lista de valores automaticamente converte hash entre os tipos. Essas Representa um conjunto de pares devem ser sempre variveis chave/valor precedidas por $
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Variveis em Perl
Escopo
Por padro, as variveis so sempre globais
Para indicar variveis locais, usa-se a palavra-chave: my
Tipos
Perl possui trs tipos principais
scalar
Representa uma lista de array valores que podem ser Representa uma lista de valores escalares. Essas variveis hash devem ser sempre Representa um conjunto de pares chave/valor precedidas por @
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Variveis em Perl
Escopo
Por padro, as variveis so sempre globais
Para indicar variveis locais, usa-se a palavra-chave: my
Tipos
Perl possui trs tipos principais
scalar
um conjunto de array chaves e valores Representa uma lista de valores associados. Essas variveis hash devem ser sempre Representa um conjunto de pares chave/valor por % precedidas
Linguagens de Programao DEL-Poli/UFRJ
Comentrio
shell>$ perl vetores.pl camel llama 1.23 camelllama camelllamaowl llamaowl shell>$
Operadores em Perl
Relacionais numricos
<, >, <=, >=, ==, !=
Relacionais strings
eq, ne, lt, gt, le, ge
Lgicos
&& (and), || (or), ! (not)
# precisa das chaves mesmo se houver apenas uma linha no bloco unless ($x == 10) { print x != 10; } # Mesmo que if ($x != 10) {...}
# valor inicial, cond. de contorno e passo for ($x=1, $x<10, $x++) { print $x; } foreach (@vetor) { #Varre o vetor print Elemento $_; # $_ var. padro } foreach (keys %hash) { print Chaves $_; } foreach my $k (keys %hash) { print Chaves $k; # Sem a var. padro } Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Sub-rotinas em Perl
Declarao de sub-rotinas
sub
sub nome-da-funcao { corpo da funo; }
Entrada e Sada
Uso das funes open () e close ()
Abertura e fechamento de arquivos, respectivamente
# Entrada open (my $in, <, input.txt) or die Cant open input.txt: $!; #Sada open (my $in, >, output.txt) or die Cant open output.txt: $!; #Concatenao open (my $in, >>, log.txt) or die Cant open log.txt: $!;
Mdulos
A linguagem Perl rica em mdulos
Carregados com o uso do use
Mdulos
A linguagem Perl rica em mdulos
Carregados com o uso do use
shell>$ perl modulo.pl Name "main::hash" used only once: possible typo at modulo.pl line 9. 546 shell>$
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Mdulos
A linguagem Perl rica em mdulos
Carregados com o uso do use
shell>$ perl modulo.pl Global symbol "@hash" requires explicit package name at modulo.pl line 9. Execution of modulo.pl aborted due to compilation errors. shell>$
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Exemplo 1: Fatorial
Escreva um programa em Perl para calcular o nmero fatorial de um inteiro passado pelo usurio
?
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Exemplo 1: Fatorial
Exemplo 2: Fibonacci
Escreva um programa em Perl para calcular o ensimo nmero da srie de Fibonacci.
O ensimo nmero passado pelo usurio
?
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Exemplo 2: Fibonacci
?
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista
Expresses Regulares
Avaliao de presena de expresses regulares Simples match
Se a varivel for $_
if (/foo/) {...}
Caso contrrio...
Expresses Regulares
Arquivo: expReg.pl
Expresses Regulares
\S caractere diferente de espao em branco e \s Arquivo: expReg.pl caractere de espao em branco
Diretrio lib
Instalao
Criao do Makefile Compilao Cpia dos arquivos compilados para os diretrios padro
interface
Criao da funo oi
funo
Criao da funo oi
funo
shell>$ h2xs n testeModule ... shell>$ cd testeModule shell/testeModule>$ perl Makefile.PL INSTALL_BASE=/home/mydir shell/testeModule>$ make shell/testeModule>$ make install
Linguagens de Programao DEL-Poli/UFRJ
perl V::ld:
Verifica o ligador
Funes e Macros
PERL_SYS_INIT3 e PERL_SYS_TERM
Macros para inicializar e finalizar, respectivamente, tarefas necessrias para criar e remover o interpretador Perl em um cdigo C S devem ser utilizados uma vez, independente do nmero de interpretadores utilizados
Funes e Macros
PL_EXIT_DESTRUCT_END e PL_exit_flags
Flags necessrias para que o interpretador execute o bloco de trmino
perl_parse
Configura o interpretador usando opes de linhas de comando
args
Lista de argumentos a ser passada para as rotinas individuais
Lista de strings terminadas por NULL
Exerccio
Escrever uma agenda em Lua ou Perl
Implementar procedimentos de insero, remoo e consulta
Leitura Recomendada
Captulo 1 do livro
Allen B. Tucker, Programming Languages", Editora McGrawHill, 2 Edio, 1985
LabLua, Lua: Conceitos Bsicos e API C, 2008, acessado em http://www.lua.org/portugues.html Roberto Ierusalimschy, Uma Introduo Programao em Lua, Jornadas de Atualizao em Informtica (JAI), 2009 Kirrily "Skud" Robert, A brief introduction, 2010, acessado em http://www.perl.org/learn.html
Linguagens de Programao DEL-Poli/UFRJ Prof. Miguel Campista