Pesquisa
Por Bruno Martins Costa
Estudante de Engenharia de Telecomunicaes - Uff
ndice
1. Introduo................................................................................................................................................................................1
2. Pesquisa Inicial.......................................................................................................................................................................2
2.1. Ferramentas de desenvolvimento Web..............................................................................................................2
2.1.1. HTML......................................................................................................................................................................2
2.1.2. PHP..........................................................................................................................................................................3
2.1.3. Form.......................................................................................................................................................................4
2.2. Banco de Dados.............................................................................................................................................................4
2.2.1. Definio...............................................................................................................................................................4
2.2.2. Sistema de Gerenciamento de Banco de Dados...................................................................................4
2.2.2.1.
Definio............................................................................................................................................5
2.2.2.2.
Modelos de Dados..........................................................................................................................5
2.2.2.3.
A linguagem......................................................................................................................................5
2.2.2.4.
A linguagem SQL............................................................................................................................5
2.2.2.5.
MySQL.................................................................................................................................................6
2.3. Linguagem de programao Lua............................................................................................................................7
2.3.1.Definio e Aplicaes......................................................................................................................................7
3. Pesquisa Final.........................................................................................................................................................................7
3.1. Uma introduo a Lua.................................................................................................................................................7
3.2. Caractersticas Bsicas...............................................................................................................................................8
3.2.1. Linguagem de Scripting..................................................................................................................................8
3.2.2. Linguagem dinmica........................................................................................................................................8
3.2.2.1.
Interpretao dinmica...............................................................................................................8
3.2.2.2.
Tipagem dinmica forte..............................................................................................................8
3.2.2.3.
Gerncia automtica de memria dinmica.......................................................................8
3.2.3.Comentrios..........................................................................................................................................................8
3.3. Diferenciais de Lua.......................................................................................................................................................9
3.3.1. Portabilidade.......................................................................................................................................................9
3.3.2. Simplicidade........................................................................................................................................................9
3.3.3. Pequeno Tamanho............................................................................................................................................9
3.3.4. Acoplabilidade....................................................................................................................................................9
3.4. Variveis e Tipos...........................................................................................................................................................9
3.4.1.Variveis.................................................................................................................................................................9
3.4.1.1.
variveis locais.................................................................................................................................9
3.4.1.2.
variveis globais..............................................................................................................................9
3.4.2.Tipo de dados.......................................................................................................................................................9
3.4.2.1.
Nil...........................................................................................................................................................9
3.4.2.2.
Booleano............................................................................................................................................10
3.4.2.3.
Number..............................................................................................................................................10
3.4.2.4.
String...................................................................................................................................................10
3.4.2.5.
Tabela.................................................................................................................................................10
3.4.2.6.
Function.............................................................................................................................................10
3.4.2.7.
Userdata.............................................................................................................................................10
3.4.2.8.
Thread.................................................................................................................................................10
3.5. Operadores......................................................................................................................................................................11
3.5.1.Aritmticos...........................................................................................................................................................11
3.5.2.Operadores Relacionais..................................................................................................................................11
3.5.3. Operadores Lgicos.........................................................................................................................................11
3.5.4.Operador de Concatenao............................................................................................................................11
3.5.5. Precedncia de operadores..........................................................................................................................12
3.6. Estrutura de controle de fluxo................................................................................................................................12
3.6.1.if.................................................................................................................................................................................12
3.6.2. While.......................................................................................................................................................................12
3.6.3. Repeat.....................................................................................................................................................................12
3.6.4. For............................................................................................................................................................................13
3.7. Tabelas...............................................................................................................................................................................13
3.7.1.Definio.................................................................................................................................................................13
3.7.2. Construtores........................................................................................................................................................14
3.7.3.Iteradores ipairs e pairs...................................................................................................................................15
3.8. Funes..............................................................................................................................................................................16
3.8.1.Definio.................................................................................................................................................................16
3.8.2. Trabalhando com um nmero varivel de argumentos....................................................................16
3.8.3. Passagem de parmetros por referncia.................................................................................................17
3.8.4. Retorno...................................................................................................................................................................17
3.8.5.Chamada..................................................................................................................................................................18
3.9. Metatabelas......................................................................................................................................................................18
3.9.1. Definio................................................................................................................................................................18
3.10. Programao Orientada a Objetos em Lua......................................................................................................19
3.10.1. Objetos.................................................................................................................................................................19
3.11. Co-rotinas........................................................................................................................................................................21
3.11.1. Definio..............................................................................................................................................................21
4. Projeto.........................................................................................................................................................................................22
5. Concluso...................................................................................................................................................................................27
6. Bibliografia................................................................................................................................................................................28
1. Introduo
O presente trabalho se prope a apresentar o resultado das pesquisas realizadas por mim visando o
cumprimento da atividade solicitada pelo grupo PET-TELE como ultima etapa do processo de seleo para o
ingresso no mesmo. Apresento tambm aqui os resultados obtidos no desenvolvimento de um dos projetos
propostos pelo grupo aos candidatos, o Jogo escrito na linguagem de programao Lua.
Inicialmente foi realizada uma pesquisa de forma que eu pudesse conhecer melhor a respeito dos trs temas
propostos: Ferramentas de desenvolvimento Web, Banco de Dados, Linguagem de programao Lua. Os trs
temas foram resumidos no tpico que se segue.
No terceiro tpico foi realizada uma abordagem mais detalhada da linguagem de programao Lua, pois me
responsabilizei por este tema. Foi apresentado o histrico da linguagem, suas aplicaes, caractersticas e
diferenciais que fizeram desta linguagem (desenvolvida no Brasil) a mais usada atualmente para scripting
em jogos.
Devido a sua leveza, praticidade, e outras caractersticas, Lua muito utilizada em plataformas pouco
convencionais. importante destacar que a linguagem participa do padro Ginga para o Sistema Brasileiro
de TV Digital.
No tpico quatro eu apresento resultados do projeto realizado.
2. Pesquisa Inicial
Nesta seo apresento a pesquisa que inicialmente foi realizada para a definio de qual tema proposto seria
escolhido.
Onde cada <comando> definido como uma etiqueta ou tag, e tem como objetivo indicar uma ao que deve
ser realizada. A maioria das etiquetas tem sua correspondente de fechamento:
<etiqueta>...</etiqueta>
2.1.1.1 Etiquetas
As etiquetas bsicas de HTML so:
<html>: define o incio de um documento HTML e indica ao navegador que todo contedo posterior deve ser
tratado como uma srie de cdigos HTML
<head>: define o cabealho de um documento HTML, que traz informaes sobre o documento que est
sendo aberto
<body>: define o contedo principal, o corpo do documento. Esta a parte do documento HTML que
exibida no navegador. No corpo podem-se definir propriedades comuns a toda a pgina, como cor de fundo,
margens, e outras formataes
2.1.2 PHP
1.1.2.1 Definio
PHP uma sigla recursiva que significa PHP HyperText Preprocessor. O PHP uma linguagem de
programao de ampla utilizao, interpretada, que especialmente interessante para desenvolvimento
para a Web e pode ser mesclada dentro do cdigo HTML.
O que distingui o PHP de algo como Javascript no lado do cliente que o cdigo executado no servidor,
gerando HTML que ento enviado para o cliente. O cliente receberia os resultados da execuo desse script,
mas no saberia como o cdigo fonte.
1.1.2.2 Aplicaes
O PHP focado para ser uma linguagem de script do lado do servidor, portanto, voc pode fazer qualquer
coisa que outro programa CGI (Common Gateway Interface) possa fazer, como: coletar dados de formulrios,
gerar pginas com contedo dinmico ou enviar e receber cookies. Mas o PHP tem diversas outras
utilidades. Esses so os maiores campos onde os scripts PHP podem se utilizados:
i) Script no lado do servidor (server-side).
Este o mais tradicional e principal campo de atuao do PHP. necessrio trs coisas para o trabalho. O
interpretador do PHP (como CGI ou mdulo), um servidor web e um browser. Basta rodar o servidor web
conectado a um PHP instalado. Voc pode acessar os resultados de seu programa PHP com um browser
visualizando a pgina PHP atravs do servidor web.
3
*O "cron" um programa de "agendamento de tarefas". Cron permite aos usurios agendar tarefas
(comandos ou scripts shell) para serem executados periodicamente em determinados momentos ou datas.
2.1.3 FORM
1.1.3.1 Definio
Um form uma seo de um documento HTML que contm contedo normal, marcao, elementos especiais
chamados de controls (botes de rdio, menus, etc.), e os rtulos sobre os controls. Usurios em
geral "completam", um form, modificando tais controls (digitar o texto, selecionar itens do menu, etc.), antes
que o form seja apresentado a um agente que executar o processamento (por exemplo, para um
servidor Web, um servidor de email, etc.).
1.1.3.2 Controles
Os usurios interagem com um form por meio da chamada de controls, que podem ser dos seguintes tipos:
- botes
-checkbox
-botes de rdio
-menus
- entradas de texto
-seleo de arquivo
-controles ocultos
-controles de objetos
2.2.2.1 Definio
Um sistema de gerenciamento de banco de dados no nada mais do que um conjunto de programas que
permitem armazenar, modificar e extrair informaes de um banco de dados. H muitos tipos diferentes de
SGBD. Desde pequenos sistemas que funcionam em computadores pessoais a sistemas enormes que esto
associados a mainframes.
Um sistema de gerenciamento de banco de dados implica a criao e manuteno de bases de dados, elimina
a necessidade de especificao de definio de dados, age como interface entre os programas de aplicao e
os ficheiros de dados fsicos e separa as vises lgica e de concepo dos dados. Assim sendo, so
basicamente trs os componentes de um SGBD:
i) Linguagem de definio de dados
Especifica contedos, estrutura a base de dados e define os elementos de dados.
ii) Linguagem de manipulao de dados
Possibilita a alterao os dados na base.
iii) Dicionrio de dados
Guarda definies de elementos de dados e respectivas caractersticas descreve os dados, quem os acede,
etc.
2.2.2.2 Modelos de Dados
O Modelo de Dados basicamente um conjunto de conceitos utilizados para descrever um Banco de Dados.
No existe uma nica forma de representao deste modelo, porm qualquer forma que permita a correta
compreenso das estruturas de dados compreendidas no Banco de Dados pode ser considerada adequada.
Tipos de modelos de dados
hierrquico;
em rede;
relacional;
orientado a objetos;
2.2.2.3 A linguagem
Geralmente dividida em trs partes:
i) Linguagem de definio de dados ou LDD (ou DDL, do ingls), com comandos como CREATE TABLE;
ii) Linguagem de manipulao de dados, ou LMD (ou DML, do ingls), com comandos como UPDATE e SELECT;
iii) Linguagem de controle de dados, ou LCD, com comandos para controle de acesso dos usurios do sistema,
como GRANT e REVOKE em SQL.
Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, uma linguagem de pesquisa
declarativa para banco de dados relacional (base de dados relacional). Muitas das caractersticas originais do
SQL foram inspiradas na lgebra relacional.
O SQL foi desenvolvido originalmente no incio dos anos 70 nos laboratrios da IBM em San Jose (Califrnia),
dentro do projeto System R, que tinha por objetivo demonstrar a viabilidade da implementao do modelo
relacional proposto por E. F. Codd.
A linguagem SQL um grande padro de banco de dados. Isto decorre da sua simplicidade e facilidade de
uso. Ela se diferencia de outras linguagens de consulta a banco de dados no sentido em que uma consulta
SQL especifica a forma do resultado e no o caminho para chegar a ele. Ela uma linguagem declarativa em
oposio a outras linguagens procedurais. Isto reduz o ciclo de aprendizado daqueles que se iniciam na
linguagem.
2.2.2.5 MySQL
O MySQL um sistema de gerenciamento de banco de dados (SGBD), que utiliza a
linguagem SQL (Linguagem de Consulta Estruturada, do ingls Structured Query Language) como interface.
atualmente um dos bancos de dados mais populares, com mais de 10 milhes de instalaes pelo mundo.
Entre suas caractersticas, podemos destacar:
i) Portabilidade (suporta praticamente qualquer plataforma atual);
ii) Compatibilidade (existem drivers ODBC, JDBC e.NET e mdulos de interface para
diversas linguagens de programao, como Delphi, Java, C/C++, Python, Perl, PHP,
ASP e Ruby)
iii) Excelente desempenho e estabilidade;
iv) Pouco exigente quanto a recursos de hardware;
v) Facilidade de uso;
vi) um Software Livre com base na GPL;
vii) Contempla a utilizao de vrios Storage Engines como MyISAM, InnoDB, Falcon,
BDB, Archive, Federated, CSV, Solid...
viii) Suporta controle transacional;
ix) Suporta Triggers;
x) Suporta Cursors (Non-Scrollable e Non-Updatable);
xi) Suporta Stored Procedures e Functions;
xii)Replicao facilmente configurvel;
xiii)Interfaces grficas (MySQL Toolkit) de fcil utilizao cedidos pela MySQL Inc.
3. Pesquisa Final
3.1 Uma Introduo a Lua
Em 1992, em um projeto entre a PUC - Rio (Pontifica Universidade Catlica do Rio de Janeiro) e a Petrobrs,
surgiu o Tecgraf (grupo de Tecnologia em Computao Grfica), cujo objetivo a princpio baseava-se na
construo de interfaces grficas para programas de simulao. Para tal era utilizada a linguagem DEL
(Linguagem para Especificao de Dilogos), que apresentava algumas limitaes. Um ano depois foi criado
o PGM (Programa Grfico Mestre), utilizado para visualizaes de perfis geolgicos. A linguagem SOL
(Simple Object Language) estava sendo utilizada, mas tambm se limitava.
Foi evidenciada a necessidade crescente de que as aplicaes desenvolvidas no Tecgraf fossem configurveis
externamente pelos usurios. Isso quer dizer que diversos aspectos essenciais das aplicaes podem ser
modificados sem recompilar a aplicao. Desde o incio do desenvolvimento de tais aplicaes esse tipo de
configurao era muito mais do que simplesmente poder escolher a cor da janela ou o tipo de fonte de texto:
era necessrio poder tomar decises em tempo de execuo que somente os usurios sabiam quais
eram. Sendo assim, era necessrio fornecer algum tipo de programao para os usurios finais. Outro tipo
de configurao era a descrio de complexos relatrios e analises feita pela Petrobras por encomenda ao
Tecgraf. Mais uma vez, essa descrio no podia estar congelada dentro da aplicao, pois cada usurio tinha
uma necessidade diferente e que mudava a cada tarefa. O Tecgraf tinha, portanto forte demanda para
aplicaes que fossem configurveis externamente, tanto descrevendo que decises deveriam ser tomadas
quanto descrevendo quais dados seriam usados e como eles seriam usados.
Foi ento que Roberto Ierusalimschy, Luiz Henrique Figueredo e Waldemar Celes se reuniram para
encontrar uma linguagem nica que pudesse atender a todas as necessidades de configurao das suas
aplicaes, de tal forma que fosse uma linguagem de configurao genrica, facilmente acoplvel, porttil e
7
com uma sintaxe simples, de forma que os usurios finais (engenheiros, gelogos, etc.) pudessem utiliz-la
confortavelmente. Ento, em julho de 1993, foi lanada a primeira verso pblica (1.0) de LUA, como uma
alternativa para o desenvolvimento de tais projetos. A primeira verso pblica (1.1) de julho de 1994.
Nos dias atuais a utilizao de LUA no se limita apenas aos projetos desenvolvidos no Tecgraf. Lua
empregada tambm para implementar softwares embutidos em equipamentos de rede (switches ethernet),
aplicaes de simulao em laboratrios de fsica (tendo sido esta uma de suas primeiras utilizaes fora da
PUC - Rio, no Observatrio Astrofsico de Smithsonian) e, notavelmente, no desenvolvimento de jogos.
Uma pesquisa realizada em setembro de 2003 pela gamedev.net que a grande maioria dos jogos (72%)
desenvolvida com o auxlio de uma linguagem de script. Desse total, 20% utilizam Lua (primeira colocao),
e 7% utilizam Python (segunda colocao).
3.2.3 Comentrios
Em Lua os comentrios so iniciados por dois traos seguidos (--) e vo at o final da linha onde estes foram
inseridos.
8
3.3.2 Simplicidade
A linguagem Lua tem apenas um nico tipo de estrutura de dados, a tabela, e um nico tipo numrico, o
number, caractersticas que, dentre outras, tornam a linguagem de fcil entendimento.
3.3.4 Acoplabilidade
Lua uma biblioteca em C, rpida e pequena, pode ser facilmente embutida em aplicaes. Apresenta API
simples e bem definida, com operaes primitivas e modelo de pilha. possvel estender programas, no s
em C e C++, quanto em Java, Fortran, C#, Ada e at mesmo em outras linguagens de script. Como Perl e Ruby.
3.5 Operadores
Em Lua so encontrados os seguintes operadores:
3.5.1 Aritmticos
So operadores aritmticos de Lua:
Soma (+)
Subtrao (-)
Multiplicao (*)
Diviso (/)
Operador unrio de negativo (-)
Parnteses podem alterar precedncia de operadores.
Somente podem ser aplicados a valores do tipo number ou a valores do tipo string que possam ser
convertidos para number.
3.6.2 While
O while uma das estruturas de repetio. Se a condio do lao for satisfeita, o bloco de comandos
executado repetidas vezes, at que a condio ao seja mais satisfeita.
Construo:
3.6.3 Repeat
Tambm uma estrutura de tomada de repetio, porm difere do while porque a condio testada no fim.
Construo
12
3.6.4 For
O For uma estrutura de repetio que estabelece o valor inicial do parmetro, o seu valor final, e o seu
incremento a cada repetio. Existem dois tipos de for: o for numrico e o for genrico
3.6.4.1 For numrico
Onde
- expr_inicial = valor inicial do parmetro
- expr_final = valor final do parmetro
- expr_incremento = incremento
3.6.4.2 For genrico
O for genrico usado para percorrer valores retornados por uma funo iteradora. Os principais iteradores
so o ipairs (percorre os ndices de um ar Ray), o pairs (percorre as chaves de uma tabela) e o io.lines
(percorre as linhas de um arquivo).
A execuo de laos while, repeat e for pode ser interrompida usando o comando break.
3.7 Tabelas
3.7.1 Definio
A tabela o nico mecanismo de estruturao de dados oferecido por Lua. Todas as estruturas de dados
comumente encontradas em programao podem ser facilmente implementadas com o uso de tabelas.
O comando a seguir cria uma tabela e armazena na varivel (que poderia ser global ou local) t:
t = {}
A tabela, a princpio, est vazia, ou seja, armazena o valor nil.
Podemos armazenar qualquer tipo de dado na tabela, associado a ndices sejam numricos, caracteres
elementos de outra tabela, ou at mesmo outras tabelas (o que possibilita a criao de arrays
multidimensionais). Por exemplo:
13
3.7.2 Construtores
3.7.2.1 definio
Os mecanismos utilizados para inicializarmos uma tabela so chamados de construtores. A expresso t = {}
um caso particular de construtor. Existem basicamente trs tipos de construtores: um para listas, um para
estruturas e um genrico.
14
Essa expresso cria uma tabela associando o valor da exp1 ao nome1, o valor da exp2 ao nome 2, e assim
sucessivamente. Sendo assim, a expresso
notas = {bruno = 10, marcelo = 7, daniel = 9,5, jos = 8}
print (notas.bruno)
imprime na tela o valor associado a bruno na tabela notas, ou seja, 10.
3.7.2.4 Construtor genrico
O construtor genrico, como o nome sugere, pode ser utilizado para construir qualquer tipo de estrutura
utilizada em Lua e tem a seguinte forma:
{[e1] = exp1, [e2] = exp2, [e3] = exp3, ...}
Essa expresso cria uma tabela com o valor de exp1 associado ao valor da expresso e1, exp2 associado ao
valor da expresso e2, e assim por diante. Em particular, qualquer construtor de listas pode ser reescrito na
forma a seguir:
{ [1] = exp1, [2] = exp2, [3] = exp3, ...}
De forma similar, construtores de estruturas tambm podem ser reescritos usando-se o construtor genrico:
{ ["nome1"] = exp1, ["nome2"] = exp2, ...}
Algumas chaves do tipo string s podem ser criadas com o uso do construtor genrico, como demonstrado a
seguir:
m = {or = 1, += 2} --> expresso invlida pois a palavra or e o smbolo + so reservados em Lua
m = {[or] = 1, [+] = 2} --> expresso vlida
op = {["+"] = "add", ["-"] = "sub", ["*"] = "mul", ["/"] = "div"} --> expresso vlida.
3.7.2.5 Inicializao mista
Podemos inicializar uma tabela utilizando os trs construtores apresentados anteriormente de uma forma
mista, como por exemplo:
conjunto = {1, 22, 43, rio de janeiro, valor = 100, [for] = para}
print (conjunto[4]) --> imprime rio de janeiro
print (conjunto.valor) --> imprime 100
print (conjunto.for) --> expresso invlida em Lua
print (conjunto[for] --> imprime para
15
itera sobre os pares (1,t[1]), (2,t[2]), . . . , ate que o primeiro ndice com valor associado igual a nil seja
encontrado. A funo pairs permite iterar sobre todos os pares armazenados na tabela, independente do tipo
associado `a chave:
for k,v in pairs(t) do ... end
Nesse caso, a ordem em que os pares k,v so reportados e indefinida.
3.8 Funes
3.8.1 Definio
Funes em Lua so valores de primeira classe. Isso significa que, como qualquer outro valor, uma funo
pode ser criada, armazenada em uma varivel (local ou global) ou campo de tabela e passada adiante como
parmetro ou valor de retorno de outra funo. Uma funo pode receber zero ou mais valores. A lista de
parmetros e especificada da maneira usual: entre os parnteses que seguem o nome da funo.
Funes em Lua so valores dinmicos ou seja, so criadas dinamicamente, durante a execuo de um
programa.
Podemos criar uma funo das seguintes formas:
function f (lista-de-parmetros)
bloco
end
Ou:
f = function(lista-de-parmetros)
bloco
end
Se adicionarmos ao final da lista de argumentos o sinal ...(trs pontos seguidos) poderemos criar uma funo
cujo numero total de argumentos varivel. Os argumentos extras so colocados na tabela implcita arg.
Ex: function func1(a, b, )
bloco
end
-- chamada da funo:
func1(1, 2, 3, 4, 5)
-- dentro da funo: a = 1, b = 2, arg = {3, 4, 5}
-- ou seja, arg[1] = 3, arg[2] = 4, arg[3] = 5
3.8.4 Retorno
O Comando return efetua o retorno da funo imediatamente. Ele deve ser o ltimo comando do bloco e
pode retornar zero, um ou mais valores (mltiplo retorno).
Ex: function func1(param1)
if (not param1) then
return
end
print(param1)
end
-- somente imprimir o valor de param1 se no for nil
Ex: function func1()
return 1, 2, teste
end
x, y, z = func1()
-- resulta em: x = 1, y = 2 e z = teste
Lua faz ajuste no nmero de parmetros retornados da funo, completando com nil os parmetros faltantes.
Ex: function func1()
return 1, 2
end
-- chamada da funo:
a, b, c, d = func1()
-- resulta em: a = 1, b = 2, c = d = nil
-- chamada da funo:
17
a = func1()
-- resulta em: a = 1
-- o valor 2 retornado ignorado
8.6 Chamada
As funes em Lua so chamadas pelo nome da funo seguido dos argumentos entre parntesis, separados
por vrgulas:
Ex: func1(1, 2, 3)
3.9 Metatabelas
3.9.1 Definio
Uma metatabela uma tabela Lua comum que define o comportamento do valor original, sob
certas operaes especiais.
As metatabelas nos permitem alterar o comportamento de uma tabela. Por exemplo, usando metatabelas,
podemos definir como Lua calcula a expresso a + b, onde a e b so tabelas. Lua, sempre que tenta
adicionar duas tabelas, verifica se qualquer uma delas possui uma metatabela e se esta possui um
campo __add. Se Lua encontra nesse campo, ele chama o valor correspondente (o metamtodo chamado, que
deve ser uma funo) para calcular a soma.
Na metatabela, podemos programar a ao que deve ser tomada quando ocorre um determinado evento. Por
exemplo, a operao de soma no especificada para tabelas; no entanto, podemos fazer com que duas
tabelas possam ser somadas, gerando uma terceiro novo tabela. Para isso, devemos primeiro criar uma
metatabela com o comportamento da operao de soma definido:
local mt = {
__add = function (a,b)
return {a[1] + b[1], a[2] + b[2]}
end }
Devemos ento definir mt como a metatabela de pelo menos uma das tabelas envolvida na operao de soma
atravs do comando setmetatable:
setmetatable (x, mt)
Assim ento, poderemos validar a seguinte expresso:
x = {1,2}
y = {7,3}
z = x+y
print (z[1], z[2]) --> imprime 8 , 5
Alem de add, podemos (re-)definir o comportamento quando da ocorrncia dos seguintes eventos de
operao aritmtica:
sub (subtrao)
mul (multiplicao)
18
div (diviso)
pow (exponenciao)u
nm (negao)
concat (concatenao)
eq (igualdade)
lt (menor que)
le (menor ou igual que)
Basta criar o campo adequado na metatabela. (O nome do campo e o nome do evento precedido de __.)
Existem ainda dois eventos especiais cujos comportamentos podem ser programados: index, gerado quando
tentamos acessar um indice no existente na tabela, e newindex, gerado quando tentamos atribuir um valor a
um ndice ainda no existente na tabela. Esses eventos podem ser usados para programar diferentes
comportamentos. Por exemplo, podemos usar o evento ndex para delegar a outra tabela a busca do valor
associado ao ndice. Dessa forma, podemos programar nosso prprio mecanismo de herana. Se o objeto no
tem o campo, retornamos o campo associado `a sua classe:
function circulo:area ()
return math.pi * self.raio^2
end
Nesse caso, o operador insere automaticamente um primeiro argumento adicional na definio do mtodo,
com o nome self. Para criarmos novos objetos dentro dessa classe precisamos nos utilizar das metatabelas.
As metatabelas em Lua nos permitem utilizar o mecanismo da delegao.
Delegao permite que uma tabela herde campos de outra tabela. Mais especificamente, suponha que uma
tabela A delega sua indexao para outra tabela B. Se indexamos A com uma chave presente, o valor
associado retornado normalmente. Mas se indexamos A com uma chave ausente, Lua automaticamente ir
procurar essa chave na tabela B. (Uma Introduo programao em Lua. Ierusalimschy, Roberto)
X = {a = 100}
Y = {a = 200, b = 300}
mt = {__index = Y} --> metatabela
print(X.a, X.b) --> 10 nil
setmetatable(X, mt)
print(X.a, X.b) --> 10 30
O comando setmetatable(X, mt) define mt como a metatabela de X. Quando o programa solicita um campo
que no existe em X, o mesmo verifica se X possui uma metatabela e se esta possui um campo indexado por
__index. Ento, o programa retorna o ndice solicitado relativo tabela que est armazenada em __index.
Poderamos reescrever o cdigo acima sem o uso de mt:
X = {a = 100}
Y = {a = 200, b = 300}
Y[__index] = Y
print(X.a, X.b) --> 10 nil
setmetatable(X, Y)
print(X.a, X.b) --> 10 30
Podemos agora escrever uma funo para gerar novos objetos associados classe crculo.
circulo = {x = 1, y = 2 , cor = "azul", raio = 10}
circulo.__index = circulo
function circulo:area ()
return math.pi * self.raio^2
end
function circulo:novo(t)
setmetatable (t, self)
return t
end
c = circulo:novo({x = 200, y = 100, cor = vermelho, raio = 10}) --> atribui os mtodos relativos a --circulo a c
20
3.11 Co-rotinas
3.11.1 Definio
O termo co-rotina se refere a um mecanismo que permite que um procedimento suspenda temporariamente
sua execuo e continue mais tarde. Em Lua, co-rotinas so valores de primeira clase e, ou seja, podem ser
armazenadas em funes e invocadas em qualquer ponto do programa. Alm disso, podem ser suspensas
durante a execuo de outras funes (com pilha) ou apenas enquanto executando a sua funo principal.
21
4. Projeto
Segue abaixo o cdigo-fonte do programa.
22
23
24
25
5. Concluso
A linguagem Lua uma linguagem leve e poderosa. Possui sinttica simples, uma nica estrutura de dados (a
tabela), porm possibilita a realizao de programas complexos, tanto em programao procedural quanto
em orientao a objetos, devido ao seu mecanismo de delegao usando metatabelas.
Parte desse poder de Lua vem da versatilidade das tabelas, que podem ser usadas para construir arrays ou
matrizes, descrever objetos (caractersticas e mtodos), armazenar funes entre outras aplicaes.
A linguagem Lua tem sido amplamente utilizada no desenvolvimento de jogos. A Lucasarts, por exemplo,
usou a verso 3.1 de Lua para desenvolver os ttulos Grim Fandango e Scape fromMonkey Island. A
verso 3.1 de Lua foi por eles modificada para tratar co-rotinas. Hoje, como vimos suporte para co-rotinas
esta presena na verso 5.0. Double Fine utilizou Lua em Psychonauts para controlar toda a lgica do jogo.
Basicamente, a engine carrega um mundo esttico e os scripts em Lua tomam o controle, dando vida e
interatividade `as cenas. Em Baldurs Gate, Bioware usou Lua para prover uma ferramenta de depuracao
em tempo-real. Relic utilizou Lua em Impossible Creatures para controlar a IA, as aparncias dos objetos e
personagens, para definir as regras do jogo e tambm como ferramenta de depurao em tempo-real. Em
FarCry, Crytek tambm utilizou Lua para controlar diversos aspectos do jogo e para permitir a criao de
modificadores atravs da codificao de scripts Lua.
27
6. Bibliografia
http://pt-br.html.net/tutorials/html/ . Acessado em 01/10/2011
http://www.w3.org/TR/html4/interact/forms.html#h-17.3. Acessado em 01/11/2011
http://pt.wikipedia.org/wiki/Sistema_de_gerenciamento_de_banco_de_dados. Acessado em 01/10/2011
http://pt.wikipedia.org/wiki/MySQL. Acessado em 01/10/2011
http://pt.wikipedia.org/wiki/SQL. Acessado em 01/10/2011
http://www.lua.org/pil/. Acessado de 08/10/2011 a 01/11/2011
http://www.lua.org/manual/5.1/pt/manual.html. Acessado de 08/10/2011 a 01/11/2011
http://www.lua.org/manual/5.1/. Acessado de 08/10/2011 a 01/11/2011
http://www.youblisher.com/p/74341-Linguagem-Lua/. Acessado em 19/10/2011
http://www.lua.org/doc/jai2009.pdf. Acessado em 08/10/2011
28