Estudo sobre a linguagem de programação Lua *

Tamanho: px
Começar a partir da página:

Download "Estudo sobre a linguagem de programação Lua *"

Transcrição

1 Estudo sobre a linguagem de programação Lua * Bruno Lopes Dalmazo 1, Francisco Tiago Avelar 1 1 Curso de Ciência da Computação Universidade Federal de Santa Maria (UFSM) Santa Maria, RS Brasil {dalmazo, avelar}@inf.ufsm.br Resumo. Este trabalho apresenta funcionalidades da linguagem brasileira de programacão Lua através de uma abordagem simples e informativa. Noções gerais de histórico demonstram seu propósito e seus domínios de aplicação exemplificam a aceitação do trabalho perante os outros países. Além disso, detalhes mais específicos são explicados de modo a apresentar ao profissional de computação a grande facilidade de programação sob a abordagem envolvo os conceitos de linguagens de programação. 1. História do surgimento da linguagem A Petrobrás, parceira da TeCGraf, grupo de Tecnologia em Computação gráfica da PUC RJ, formado pelos professores Roberto Ierusalimschy, Waldemar Celes e Luiz Henrique Figueiredo, necessitava traçar um perfil de um poço de petróleo. Durante uma perfuração, junto com a broca, vários sensores descem em conjunto, para que os geólogos acompanhem o processo. Estes sensores recebem as informações à medida que o poço é perfurado. Os valores capturados pelos sensores eram colocados em um gráfico na tela do computador, com dados diversos, como temperatura, condutividade do material naquela profundidade, resistência e pressão. Os programas coletam estas informações e as manipulam para que o gráfico seja montado. Contudo, existem vários fatores complexos de configuração que o geólogo pode desejar visualizar. Às vezes, é preciso ver uma coluna do lado da outra; outras; há necessidade de verificar outro tipo de informação, mudar a cor ou a escala. A complexidade de realizar esse trabalhado era grande com o uso de uma única interface gráfica, pois sempre fica faltando algum detalhe. So assim, quando o geólogo necessitava de mais comandos, era obrigado a contatar os desenvolvedores da aplicação para que o software fosse alterado ou para que fosse criado um novo programa, enviando em seguida para a plataforma. Desta forma foi criado o Lua, para colocar um final para esse problema. Com esta linguagem, alguém que tenha uma pequena formação técnica pode fazer, ele mesmo, essa configuração. A linguagem é simples o suficiente para que a pessoa possa modificar e * Trabalho Conceitos de Linguagem de Programação (ELC1007) primeiro semestre 2007.

2 adaptar às suas necessidades. Assim, o programa é um pouco de linguagem de programação C, que cria a parte gráfica, e um pouco de Lua, que pode estar gravada em um arquivo texto, encarregado de dizer para o C como as informações são apresentadas. 2. Domínios de aplicação A linguagem de programação Lua possui grande uso no domínio corporativo voltado para o mercado de jogos de computadores [WoW] e consoles de video game [Psychonauts]. Além disso, é bastante empregada em aplicações Web e no desenvolvimento de ferramentas para auxiliar a pesquisa científica, como a Biologia Molecular [GUPPY]. Lua foi projetada para ester aplicações, so freqüentemente utilizada como uma linguagem de propósito geral. Dessa forma, diversos casos de uso podem ter Lua como parte da implementação de uma solução, seja para o domínio empresarial, científico e industrial. A comunidade de desenvolvimento em linguagem Lua é de domínio geral. Assim, qualquer interessado pode ter acesso a documentação e o códigofonte da implementação da linguagem, pois Lua é software livre de código aberto. Demais exemplos de uso da linguagem Lua de forma a descrever seus domínios de aplicação podem ser vistos da Internet, através do website oficial, nas referências finais deste trabalho. 3. Variáveis e tipos de dados As variáveis globais de Lua não precisam ser declaradas. Assim, é possível escrever o comando a = 2.3 sem necessidade prévia de declarar a variável global a. Uma característica fundamental de Lua é que as variáveis não têm tipo: os tipos estão associados aos dados armazenados na variável. Assim, o código acima armazena em a um dado do tipo numérico, com valor 2.3, enquanto, após o comando a = "Linguagem Lua" a variável a passa a armazenar um dado do tipo cadeia de caracteres (string). Os dados em Lua podem ser de oito tipos básicos: nil, lógico, number, string, function, userdata, thread e table Tipo nil O tipo nil representa o valor indefinido. Todas as variáveis ainda não inicializadas assumem o valor nil. Assim, se o código: a = b

3 for encontrado antes de qualquer atribuição à variável b, então esta é assumida como conto o valor nil, significando que a também passa a armazenar nil, indepentemente do valor anteriormente armazenado em a. A palavra reservada nil pode ser usada na programação para expressar o valor do tipo nil. Com isto, pode se escrever: a = nil que atribui o valor nil à variável a (a partir deste ponto, é como se a variável a ainda não tivesse sido atribuída). Pode se testar se uma variável foi inicializada comparando o seu valor com nil: a == nil 3.2. Tipo lógico O tipo lógico, também conhecido como tipo booleano, pode assumir somente dois valores: verdadeiro (true) ou falso (false) Tipo number O tipo number representa valores numéricos. Lua não faz distinção entre valores numéricos com valores inteiros e reais. Todos os valores numéricos são tratados como so do tipo number. Assim, o código a = 4 b = 4.0 c = 0.4e1 d = 40e 1 armazena o valor numérico quatro nas variáveis a, b, c e d Tipo string O tipo string representa cadeia de caracteres. Uma cadeia de caracateres em Lua é definida por uma seqüência de caracteres delimitadas por aspas simples (' ') ou duplas (" "). A seqüência de caracteres deve estar numa mesma linha de código. Por simplicidade, quando a cadeia de caracteres é delimitada por aspas duplas, pode se usar aspas simples no seu conteúdo, sem necessidade de tratá las como seqüências de escape. Entretanto, para reproduzir na cadeia de caracteres as aspas usadas como delimitadoras, é necessário usar os caracteres de escape. Assim, são válidas e equivalentes as seguintes atribuições: s = "Marca d'agua" s = 'Marca d\'agua' Colchetes duplos ([[ ]]) também podem ser utilizados como delimitadores de

4 strings. Diferentemente dos delimitadores aspas simples e aspas duplas, esse delimitador não interpreta sequências de escape e tolera que a string tenha quebras de linhas e pode conter strings com delimitadores aninhados. Exemplo: s = [[Esse é um texto que atravessa mais de uma linha e contém uma string aninhada: [[aninhada]] no final!]] 3.5. Tipo function Funções em Lua são consideradas valores de primeira classe. Isto significa que funções podem ser armazenadas em variáveis, passadas como parâmetros para outras funções, ou retornadas como resultados. A definição de uma função equivale a atribuir a uma variável global o valor do código que executa a função (ver definição de escopo). Esta variável global passa a armazenar um dado do tipo function. Assim, adiantando um pouco a sintaxe de definição de funções, o trecho ilustrativo de código abaixo armazena na variável func1 um valor do tipo function: function func1 (...)... que pode posteriormente ser executada através de uma chamada de função: func1(...) 3.6. Tipo userdata O tipo userdata permite armazenar numa variável de Lua um ponteiro qualquer de C. Este tipo corresponde ao tipo void* de C e somente pode ser atribuído ou comparado para igualdade a outro valor de mesmo tipo em Lua. Este tipo é muito útil para programadores de aplicação que fazem a ligação Lua C, mas não é manipulado por usuários que programam somente em Lua, pois não é possível criar dados deste tipo diretamente em Lua. O próposito de oferecer esse tipo de dado na linguagem Lua é oferecer integração com as demais linguagens, pois assim mantem o ideal de ser uma linguagem simples, facilmente estensível e de propósito geral Tipo thread O tipo thread representa diferentes fluxos de execução, so utilizado para implementar subrotinas (coroutines). Não confundir Lua threads com as do sistema operacional. Lua suporta subrotinas em todos os sistemas, mesmo os que não possuem suporte a threads.

5 A forma especial de coroutines na linguagem Lua também é chamada de multithreadings colaborativas, representando um fluxo indepente de execução. Entretanto, diferentemente das threads em sistemas multithreads, uma coroutine somente encerra sua execução através da chamada explícita de função de entrega (yield function). Simplesmente invocando coroutine.create, uma coroutine é criada retornado um objeto do tipo thread de manipulação. A função não inicia sua execução nesse ponto de desenvolvimento do programa. Quando chamado pela primeira vez coroutine.resume, passando o argumento do tipo thread retornado por coroutine.create, a coroutine inicia sua execução na primeira linha da função principal. Os argumentos adicionais são passados juntamente com o tipo thread para a função da coroutine. Depois de iniciar a execução, permanece até terminar ou ocorre uma interrupção yield. Há somente duas maneiras de uma coroutine encerrar: normalmente, quando sua função principal retorna (explicitamente ou implicitamente após a última instrução); ou incorretamente, se há presença de erros. No primeiro caso, coroutine.create retorna true, além das variáveis retornadas pela função principal de coroutine. No caso de erros, coroutine.resume retorna false mais uma mensagem de erro. Ocorre yield através da chamada explícita de coroutine.yield. Aconteco isso, o correspondente coroutine.resume retorna imediatamente, mesmo se um yield ocorre dentro de função aninhada, ou seja, não na função principal, mas na função diretamente ou indiretamente chamada pela função principal. No caso de yield, coroutine.resume também retorna true, além dos valores passados para coroutine.yield. Na próxima vez que a mesma coroutine é retomada, a execução continua do ponto onde ocorreu yield, com a chamada de coroutine.yield retornando quaisquer argumentos extras passados por coroutine.resume. function func_secundaria (a) print("func_secundaria", a) return coroutine.yield(2 * a) co_rotina= coroutine.create( function (a,b) print("co_rotina", a, b) local r = func_secundaria(a + 1) print("co_rotina", r) local r, s = coroutine.yield(a + b, a b) print("co_rotina", r, s) return b, "fim" )

6 print("principal", coroutine.resume(co_rotina, 1, 10)) print("principal", coroutine.resume(co_rotina, r )) print("principal", coroutine.resume(co_rotina, x, y )) print("principal", coroutine.resume(co_rotina, x, y )) A saída da execucão do programa é representado abaixo: co_rotina 1 10 func_sec 2 principal true 4 co_rotina r principal true 11 9 co_rotina x y principal true 10 fim principal false cannot resume dead coroutine 3.8. Tipo table O tipo table (tabela) é o tipo mais expressivo da linguagem. Este tipo implementa os chamados vetores associativos, que permitem indexação por valores de qualquer outro tipo, com exceção do tipo nil. As tabelas em Lua permitem a construção de vetores convencionais, listas e records numa mesma estrutura. Tabelas devem ser explicitamente criadas. Adiantando a sintaxe de criação de uma tabela, o código a = { } cria uma tabela vazia e armazena em a este valor. Novos campos podem ser adicionados posteriormente a esta tabela. A partir de table, é possível implementar diversas estruturas de dados, como arrays comuns, tabela de símbolos, conjuntos, registros, grafos, árvores, etc. 4. Comandos de controle Lua possui os mecanismos usuais para controle de fluxo. Estes controladores agrupam diversos comandos em blocos que podem ou não serem executados uma ou mais vezes. Lua também permite a declaração de variáveis locais. Estas variáveis deixam de existir ao final do bloco onde foram declaradas Estrutura If O comando de decisão básico de Lua é o if, so representado por uma das formas abaixo: ou if expr then bloco

7 ou ainda if expr then bloco1... else bloco2... if expr1 then bloco1 elseif expr2 then bloco2... elseif expr N then bloco N else bloco N+1 Na primeira forma, o bloco de comandos representado por bloco é executado se a expressão expr produzir um valor diferente de nil. Na segunda forma, bloco2 será executado se expr produzir o valor nil. Caso contrário, bloco1 será executado. A terceira forma ilustra a possibilidade de tomada de decisão entre diversas alternativas usando se o comando if then elseif then... else. No código ilustrado, bloco1 é executado se expr1 produzir um valor verdadeiro (diferente de nil), bloco2 é executado de expr2 for verdadeiro,..., e bloco N+1 é executado se todas as expressões forem falsas (i.e., iguais a nil) Estrutura while (tomadas de decisão no início) A instrução while permite que a tomada de decisão (se os comandos do laço devem ou não ser executados) seja feita no início do bloco. Sua forma geral é: while expr do bloco isto é, enquanto a expressão expr produzir um valor verdadeiro (diferente de nil), os comandos do bloco são executados. Para exemplificar, considere o código abaixo que calcula o fatorial de um número (assumido como inteiro positivo) armazenado na variável n: f = 1 valor do fatorial i = n controle do laço while i > 0 do f = f * i i = i 1 Ao final da execução do código acima, f armazena o valor do fatorial de n e i

8 armazena o valor zero (condição de fim de execução do laço) Estrutura repeat (tomadas de decisão no final) A construção de um laço com tomada de decisão no fim pode ser feita através do comando repeat. Sua forma geral é: repeat bloco until expr Nesta construção, o bloco de comandos é executado pelo menos uma vez (pois o teste de decisão só ocorre no final do laço) e é repetido até se alcançar o valor verdadeiro para a expressão. O mesmo exemplo de cálculo de fatorial pode ser escrito: f = 1 valor do fatorial i = 1 controle do laço repeat f = f * i i = i + 1 until i > n 4.4. Estrutura for A estrutura for apresenta duas formas: uma numérica e outra genérica. A forma numérica repete as instruções do bloco numa progressão aritmética definida como primeiro valor a atribuição numérica exp1 em var, com limite máximo exp2 numa razão exp3. No caso da ausência exp3, o incremento padrão é unitário. for var = exp1, exp2 [, exp3] do bloco A declaração do for genérico trabalha sobre funções, conhecidos como iteradores. A cada iteração, a função de iteração é chamada para produzir um novo valor, encerrando quando nil é encontrado. O laço genérico é representado de acordo com a sintaxe for namelist in explist do bloco ou de forma mais representativa, for var_1,, var_n in explist do bloco Conforme foi definido na seção 3.8, a estrutura table é um tipo primitivo em Lua

9 com comportamento dinâmico. O exemplo abaixo implementa um percurso numa tabela para procurar um determinado valor na estrutura, retornando verdadeiro ou falso como resultado na busca de um determinado valor no interior da tabela. Através do código, é simples de perceber como os valores inicializados da tabela representam tipos distintos de dados. devo declarar explicitamente uma tabela local local tabela = {} function func() funcao func() eh uma variavel que sera inserida na tabela tabela = {5, false, 3.14, func, nil, "texto"} function existe_valor(valor) for k, v in pairs(tabela) do if v == valor then return true return false 'for' genérico parametro = "texto" apenas atribui o que será procurado if( existe_valor(parametro) ) then io.write( tostring(parametro).." 'encontrado." ) else io.write( tostring(parametro).." ' NAO encontrado." ) io.write("\n") 5. Subprogramas (funções) Conforme foi dito na seção 3.5, a linguagem Lua trata funções como valores de primeira classe. Quando definimos uma função em Lua, o armazenando é feito na variável global cujo nome corresponde ao nome da função o código de máquina interno da função, que pode posteriormente ser executado através de chamadas para a função. Funções em Lua podem ser definidas em qualquer lugar do ambiente global. A forma básica para definição de funções é function nome ( [lista de parâmetros] ) bloco de comandos onde nome representa a variável global que armazenará a função. Pode se fornecer uma

10 lista de parâmetros que são tratados como variáveis locais da função e inicializados pelos valores dos argumentos na chamada da função. A chamada da função segue a forma básica nome ( [lista de argumentos] ) isto é, o nome da função é seguido de abre e fecha parênteses, que pode ou não conter uma lista de argumentos. Se nome não for uma variável que armazena um valor de função (i.e., do tipo function), Lua reporta um erro de execução (TAG METHODS). Se presente, a lista de argumentos é avaliada antes da chamada da função. Posteriormente, os valores dos argumentos são ajustados para a atribuição dos parâmetros seguindo uma regra de atribuição múltipla na qual os parâmetros recebem os valores dos argumentos. Lua passa parâmetros por valor. Isto quer dizer que quando se altera o valor de um parâmetro dentro de uma função, altera se apenas o valor da variável local correspondente ao parâmetro. O valor da variável passada como argumento na chamada da função permanece inalterado. Funções em Lua podem retornar zero, um ou mais valores através do comando return. A possibilidade de retorno múltiplo evita a necessidade de passagem de parâmetros por referência. Quando, durante a execução de uma função, encontra se o comando return, a execução da função é terminada e o controle volta para o ponto imediatamente posterior à chamada da função. O comando return pode vir seguido de uma lista de expressões; sua forma geral é return [lista de expressões] Por razões sintáticas, o comando return deve sempre ser o último comando de um bloco de comandos. Deste modo, evita se a ocorrência de comandos inalcançáveis (to em vista que comandos após return nunca serão executados). Se return não for o último comando do bloco, Lua reporta um erro de sintaxe. Os valores retornados por uma função são ajustados para a atribuição na linha que faz a chamada. Para exemplificar, supõe se uma função que incrementa os valores de um ponto cartesiano (x, y): function translada (x, y, dx, dy) return x+dx, y+dy Considera se, agora, que a chamada da função é feita por: a, b = translada(20, 30, 1, 2) Assim, a recebe o valor 21 (= ) e b recebe o valor 32 (= ). Se a chamada fosse a = translada(20, 30, 1, 2)

11 então o segundo valor retornado seria desprezado, e a receberia o valor 21. Por outro lado, a atribuição: a, b, c = translada(20, 30, 1, 2) faria a = 21, b = 32 e c = nil. É importante notar que uma chamada de função que retorna múltiplos valores não pode estar no meio de uma lista de expressões. Por razões de ajustes de valores em atribuições múltiplas, se uma função estiver so chamada no meio de uma lista de expressões, só se considera o primeiro valor retornado. Para exemplificar, duas situações sutilmente diferentes são analisadas; considera se inicialmente a chamada de função abaixo: a, b, c = 10, translada(20, 30, 1, 2) que faz com que a receba o valor 10, b o valor 21 e c o valor 32. Neste caso, o funcionamento é o esperado, to em vista que a chamada da função é a última expressão numa lista de expressões. No entanto, se o código fosse a, b, c = translada(20, 30, 1, 2), 10 então teria se resultados incorretos, já que a chamada da função está no meio de uma lista de expressões. Conforme mencionado, indepentemente do número de valores retornados pela função, considera se apenas o primeiro (no caso, o valor 21). O valor 32 retornado pela função é perdido durante o ajuste. Assim, teríamos como resultado o valor 21 armazenado em a e o valor 10 armazenado em b. A variável c, então, receberia o valor nil, pois não se tem outra expressão após a constante 10. É possível definir funções em Lua que aceitem número variável de argumentos. Para tanto é necessário acrescentar à lista de argumentos da definição a indicação... (três pontos seguidos). Uma função definida dessa forma não faz ajuste do número de parâmetros em relação ao número de argumentos. Ao invés disso, quando a função é chamada os argumentos extras são colocados em um parâmetro implícito de nome arg. Esse parâmetro é sempre inicializado como uma tabela, onde o campo n contém o número de argumentos extras e os campos 1, 2,... os valores dos argumentos, seqüencialmente. Para exemplificar, duas diferentes definições de funções são apresentadas: function f(a, b) function g(a, b,...) Os seguintes mapeamentos de argumentos a parâmetros seriam efetuados na chamada dessas funções:

12 Chamada Parâmetros f(3) a = 3, b = nil f(3, 4) a = 3, b = 4 f(3, 4, 5) a = 3, b = 4 g(3) a = 3, b = nil, arg = { n = 0 } g(3, 4) a = 3, b = 4, arg = { n = 0 } g(3, 4, 5, 8) a = 3, b = 4, arg = { 5, 8; n = 2 } 6. Subprogramas sobrecarregados e genéricos. A linguagem Lua não apresenta declaração formal para tipos de dados, conforme mencionado na seção 3. Dessa forma, subprogramas possuem comportamento genérico quando a aceitabilidade de dados de entrada e retorno de valores. Por outro lado, em se tratando de sobrecarga de operadores na linguagem Lua, uma estrutura interessante, chamada metatable, foi criada para permitir maior flexibilidade no desenvolvimento de programas. Elemento presente em qualquer variável na linguagem Lua, um metatable é uma table comum cuja função é definir o comportamento do valor original perante certas operações. É possível efetuar diversas alterações do comportamento das operações sobre o valor através de ajustes dos campos específicos na metatable. Por exemplo, quando um valor não numérico é operando de uma adição, Lua verifica a função no campo " add" na sua metatable. Ao encontrar alguma, ocorre a invocação dessa função para desempenhar a adição. É possível consultar eventos de um metatable e os metamétodos de qualquer valor através da função getmetatable. No caso anterior, o evento é "add" para o metamétodo da função que efetua a adição. No caso de substituir um metatable em tabelas, passa a ser usado a função setmetatable. Tables e userdata possuem metatables individuais (apesar que múltiplas tabelas e userdata compartilham suas metatables), ao passo que todos os outros tipos compartilham um único metatable por tipo. Desse modo, há uma única metatable para todos os numbers, uma para todas as strings, etc. Um metatable pode controlar o comportamento de um objeto em operações aritméticas, comparações, concatenação, cardinalidade, indexação, etc. Além disso, pode definir uma função para ser chamada quando um userdata é coletado para lixo. Para cada uma dessas operações, Lua associa uma chave específica denominado evento. Ao desempenhar uma dessas operações sobre um valor, Lua verifica caso esse valor possui uma metatable com o evento correspondente. Em caso afirmativo, o valor associado com aquela chave (o metamétodo) controla como a linguagem irá efetuar a

13 operação. Cada operação é identifidada pelo nome correspondente. A chave é uma string com o nome prefixado de duas sublinhas, ' ', por exemplo. Desse modo, a chave para a operação de adição é a string " add". A função getbinhandler abaixo define como Lua escolhe um manipulador para uma operação de binária. Primeiramente, o primeiro operando é verificado, caso seu tipo não define um manipulador para a operação, o segundo operando é analisado. function getbinhandler (op1, op2, event) return metatable(op1)[event] or metatable(op2)[event] A tabela segue com a representação string dos operadores em Lua que possuem a capacidade de sobrecarga através de metatables. Nome Descrição Símbolo add adição + sub subtração mul multiplicação * div divisão / mod resto da divisão % pow exponenciação ^ unm unário concat concatenação.. len cardinalidade # eq equivalência == lt 1 menor a < le 2 menor ou igual a <= index acesso indexado table[key] newindex atribuição de indexação table[key] = value call chamada de valor ausente O exemplo abaixo representa o uso de metatable para o operador de adição de forma a ser sobrecarregado através da atribuição de um manipulador m. 1 a>b é equivalente a b<a 2 a>=b é equivalente a b<=a. Notar que, na ausência do metamétodo le, Lua tenta lt, assumindo que a<=b é equivalente a not(b < a)

14 function evento_add (op1, op2) local o1, o2 = tonumber(op1), tonumber(op2) if o1 and o2 then ambos operandos são numéricos? return o1 + o2 '+' primitiva 'add' else pelo menos um não é numérico local m = getbinhandler(op1, op2, " add") if m then invoca o manipulador com os dois operandos return m(op1, op2) else não há manipulador: comportamento padrão error( ) 7. Escopo (regras de visibilidade) Lua é uma linguagem com escopo léxico de variáveis, iniciando na primeira especificação após as declarações e permanece até o final do bloco mais interno que inclui a declaração. Considerando o exemplo abaixo, fica simples de deduzir. x = 10 variável global do novo bloco local x = x novo 'x', com valor 10 print(x) imprime 10 x = x+1 do outro bloco local x = x+1 outro 'x' print(x) imprime 12 print(x) imprime 11 print(x) imprime 10 (variável global) Lua permite que se defina explicitamente variáveis de escopo local. A declaração de uma variável local pode ocorrer em qualquer lugar dentro de um bloco de comandos, e seu escopo termina quando termina o bloco no qual foi declarada. A declaração de uma variável local com mesmo nome de uma variável global obscurece temporariamente (i.e., dentro do bloco da declaração local) o acesso à variável global. Quando o programador escrever o nome da variável, estará se referindo à variável local. Variáveis locais podem ser inicializadas na declaração seguindo a sintaxe de atribuições. Para exemplificar, considere o código abaixo:

15 a = 2 variável global igual a 2 if a > 0 then local b = a variável local 'b' com atribuição 2 a = a + 1 incrementa a variável global 'a' de uma unidade local a = b declara se uma variável local 'a' que recebe o valor de 'b' print(a) a refere se a variável local, logo imprime o valor 2 fim do bloco e do escopo de 'a' e 'b' locais print(a) 'a' refere se à variável global, logo imprime o valor 3 Pode se ainda declarar e inicializar várias variáveis locais num mesmo comando: local a, b, c = 2, 5+6, 3 Neste caso, a recebe 2, b recebe 11 e c recebe 3. Variáveis locais não inicializadas assumem o valor nil. 8. Acesso a ambientes não locais Na linguagem Lua, funções são variáveis locais tratadas como qualquer outro tipo de dado. Desse modo, quando ocorre o caso de funções estarem definidas no interior de outras, um mecanismo para acessar variáveis em diferentes níveis de programa criou o conceito de encerramento de variáveis e funções não globais. Nas subseções seguintes, ambos os casos são verificados Closures ( encerramentos ) Quando uma função é escrita no interior de outra, a função incluída passa a ter acesso completo a todas as variáveis locais da função detentora; funcionalidade conhecida como escopo léxico. Embora pareça simples, às vezes não é tão óbvia quanto seja. O pequeno código abaixo ilustra o conceito simples envolvo closures. Suponha uma lista de estudantes e as notas ambos armazenados numa table. O objetivo é ordenar a lista de nomes de acordo com as notas em ordem decrescente. nomes = {"Pablo", "Paula", "Mariana"} notas = {Mariana = 10, Paula = 7, Pablo = 8} table.sort(nomes, function (n1, n2) return notas[n1] > notas[n2] compara as notas ) Agora, suponha que o código que contém a função que desempenha a tarefa de ordenação dos nomes de alunos através da nota maior até a nota menor:

16 function ordena_por_nota(nomes, notas) table.sort(nomes, function (n1, n2) return notas[n1] > notas[n2] compara as notas ) O exemplo demonstra que a função anônima interna a sort acessa o parâmetro notas, o qual é local (parâmetro formal) na função ordena_por_nota. No interior na função anônima, notas não é nem uma variável global e tanto como não é uma variável local. O conceito envolvido é denominado variável local externa, ou upvalue 3. Qual o diferencial dessa idéia? O motivo é devido às funções serem variáveis de primeira classe. Considere o código: function novo_contador() local i = 0 return function() função anônima i = i + 1 return i c1 = novo_contador() print( c1() ) > 1 print( c1() ) > 2 A função anônima utiliza um upvalue, i, para manter seu contador. Entretanto, na ocasião de invocação da função anônima, i está fora de escopo, pois a função que criou a variável (novo_contador) encerrou com o retorno. Apesar disso, Lua gerencia a situação corretamente através do conceito de closures. Em outras palavras, uma closure é uma função incluindo todas as características para acessar upvalues de forma correta. Ao invocar novo_contador novamente, uma nova variável local i será criada, assim como uma nova closure, atuando sobre a nova variável: c2 = novo_contador() print( c2() ) > 1 print( c1() ) > 3 print( c2() ) > 2 Como se pode concluir, c1 e c2 são diferentes closures sobre a mesma função e cada ação atua sob instanciação indepente da variável local i. Mais especificamente, todo valor em Lua é uma closure, não uma função. Por si só, função é apenas um protótipo para closures. 3 O termo "upvalue" é um tanto enganoso, pois notas é uma variável, não um valor. Entretanto, esse termo possui raízes históricas da linguagem Lua e também é uma forma de abreviatura para "variável local externa".

17 Através do mecanismo de closures, programas em Lua incorporam técnicas de programação personalizáveis, como uso de callbacks, muito úteis para aplicativos GUI. Outro uso de closures justifica a grande flexibilidade de Lua, pois funções são variáveis regulares e podem ser facilmente redefinidas. Por exemplo, suponha que queremos redefinir a função seno para operar com ângulos em graus ao invés de arcos em radianos. Essa nova função deve converter seu argumento e então chamar a função seno original para efetuar o trabalho real. Considere o código: seno_velho = math.sin math.sin = function (x) return seno_velho(x * math.pi/180) Um exemplo de uso da função está abaixo : do local seno_velho = math.sin local l = math.pi/180 math.sin = function (x) return seno_velho(x * l) A idéia foi manter a versão antiga numa variável privada. O único caminho e acesso é através da nova versão. A partir do conceito de redefinição de funções, é possível utilizar a mesma característica para criar ambientes seguros, também conhecidos como sandboxes ("caixas de areia"). Segurança é essencial quando há execução de código não confiável, como um trecho de programa recebido através da Internet por um servidor. Por exemplo, para restringir acesso aos arquivos por um programa "desconhecido", a função open, da biblioteca io, pode ser redefinida utilizando closures: do local velho_open = io.open io.open = function (nome_arq, modo) if access_ok(nome_arq, modo) then return velho_open(nome_arq, modo) else return nil, "acesso negado" O que torna esse exemplo interessante é que, após a redefinição, não há mais um

18 modo do programa invocar o open irrestrito, exceto através da nova e restrita versão. O resultado foi manter a versão insegura como uma variável privada numa closure, inacessível ao exterior. Com essa facilidade, é possível construir sandboxes até mesmo em Lua, aproveitando o benefício usual: flexibilidade. Dessa forma, ao invés de soluções únicas gerais, Lua oferece meta mecanismos para que possa adequar o ambiente para necessidades específicas de segurança Funções não globais. Uma evidente conseqüência das funções de primeira classe é que é possível armazenar funções não somente em variáveis globais, mas também em tables e em variáveis locais. Quando uma função é armazenada numa variável local, a função será local, ou seja, restrita a um dado escopo. Tal definição é particularmente útil para pacotes: Lua manipula cada chunk 4 como uma função, uma chunk pode declarar funções locais, as quais são somente visíveis no interior de um chunk. O escopo léxico garante que outras funções no pacote podem usar essas funções locais: local f = function (...)... local g = function (...) igual a local funcion g(...)... f() função externa 'f()' visível aqui... Uma questão importante ocorre na definição de recursividade em funções locais. A abordagem primária abaixo não irá funcionar: local fatorial = function (n) if n == 0 then return 1 else return n * fatorial(n 1) ocorre erro Quando Lua compila a chamada fatorial fatorial(n 1), no corpo da função, o fatorial local ainda não foi definido. Portanto, a expressão do código onde ocorre erro invoca a global fatorial, não a local. Para resolver esse problema, é necessário definir a variável local e então criar a função: 4 Cada porção de código em Lua pode ser chamado de chunk, tal como um arquivo ou uma única linha de comando. Mais especificamente, um chunk é simplesmente uma seqüência de declarações. Veja nas referências para saber mais.

19 local fatorial fatorial = function (n) if n == 0 then return 1 else return n*fatorial(n 1) Agora fatorial no interior da função faz referência a variável local. Seu valor não importa quando a função é definida, pois em tempo de execução, fatorial já possui o valor correto. Uma maneira expansiva para funções locais possui uma forma alternativa para uso de recursividade: local function fatorial (n) if n == 0 then return 1 else return n * fatorial(n 1) Por outro lado, esse recurso não funciona quando ocorre recursividade de forma indireta. Nesses casos, é preciso usar a declaração explícita: local f, g declaração explícita function g ()... f()... function f ()... g() Conclusões O estudo envolvo conceitos de linguagens de programação representa o requisito básico para o compreimento das entidades e elementos de linguagens de forma a diferenciar os diversos própositos da criação de linguagens, visto que não existe uma soluçãoo universalmente utilizada que ata todos os requisitos no desenvolvimento de sistemas em computação. Em termos de evolução, países desenvolvidos iniciaram a pesquisa na criação de linguagens de programação, rego técnicas e paradigmas para desenvolvimento de programas. Resultados consagrados na criação de linguagens de programação são fundamentados na capacidade simplificada no uso e expressão dos mecanismos para desenvolvimento de programas, além de ferramentas envolvo o apoio para correção de erros (debug) e interfaces integradas de desenvolvimento, nos quais são recursos essenciais para qualquer linguagem moderna para programação.

20 A linguagem de programação Lua demonstrou possuir grandes características reunidas de soluções existentes no desenvolvimento de linguagens e sustena os paradigmas de programação estudados formalmente em Ciência da Computação. Além disso, incorpora funcionalidades próprias, como a alta flexibilidade no desenvolvimento de código, gerência automática de memória e a integração com demais sistemas. Em outras palavras, a linguagem não recria os mecanismos existentes das linguagens consagradas de programação. A aceitação de Lua por diversos programadores ao redor do mundo está na simplificidade de código aliado a magnitude para implementação de programas. O presente trabalho comprova que pesquisadores e profissionais brasileiros em Ciência da Computação possuem grande capacidade na criação de linguagens e sistemas de forma a contribuir significativamente para facilitar a solução de muitos problemas do mundo moderno, ofereco meios facilitadores de expressão entre Homem e máquina, além de técnicas que ofereçam desempenho aceitável e clareza no tratamento de erros. Referências WoW World of Warcraft Psychonauts Double Fine Productions GUPPY genetic sequence visualization. Computational Biology Research Center, AIST Tokyo. Aplicações da linguagem Lua: Página oficial da Linguagem Lua: Livro on line: Manual do programador: Lua chunks: Artigo que recebeu o primeiro prêmio (categoria tecnologia) no II Prêmio Compaq de Pesquisa e Desenvolvimento em Ciência da Computação em 1997: Artigo envolvo corotinas em Lua: rio.br/~roberto/docs/corosblp.pdf Página geral de papers sobre Lua:

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada Programação Estruturada Programação Estruturada Paradigmas de Linguagens de Programação As linguagens desse paradigma são muitas vezes chamadas de linguagens convencionais, procedurais ou imperativas.

Leia mais

Conceitos básicos da linguagem C

Conceitos básicos da linguagem C Conceitos básicos da linguagem C 2 Em 1969 Ken Thompson cria o Unix. O C nasceu logo depois, na década de 70. Dennis Ritchie, implementou-o pela primeira vez usando o sistema operacional UNIX criado por

Leia mais

Computação II Orientação a Objetos

Computação II Orientação a Objetos Computação II Orientação a Objetos Fabio Mascarenhas - 2014.1 http://www.dcc.ufrj.br/~fabiom/java Introdução Esse não é um curso de Java! O objetivo é aprender os conceitos da programação orientada a objetos,

Leia mais

INTRODUÇÃO À LINGUAGEM C++

INTRODUÇÃO À LINGUAGEM C++ INTRODUÇÃO À LINGUAGEM C++ 1 - VARIÁVEIS Variáveis espaço de memória reservado para armazenar tipos de dados, com um nome para referenciar seu conteúdo. Observações importantes Todas as variáveis devem

Leia mais

LÓGICA DE PROGRAMAÇÃO. Professor Celso Masotti http://ead.celsomasotti.com.br

LÓGICA DE PROGRAMAÇÃO. Professor Celso Masotti http://ead.celsomasotti.com.br LÓGICA DE PROGRAMAÇÃO Professor Celso Masotti http://ead.celsomasotti.com.br Ano: 2015 1 HTML & PHP em Ambiente Web PARTE II Sumário I Decisão... 4 Operadores de Comparação... 6 II IF ELSEIF ELSE... 7

Leia mais

TÉCNICAS DE PROGRAMAÇÃO

TÉCNICAS DE PROGRAMAÇÃO TÉCNICAS DE PROGRAMAÇÃO (Adaptado do texto do prof. Adair Santa Catarina) ALGORITMOS COM QUALIDADE MÁXIMAS DE PROGRAMAÇÃO 1) Algoritmos devem ser feitos para serem lidos por seres humanos: Tenha em mente

Leia mais

UNIDADE 6 - PROGRAMAÇÃO MODULAR

UNIDADE 6 - PROGRAMAÇÃO MODULAR UNIDADE 6 - PROGRAMAÇÃO MODULAR Até o momento as estruturas de controle (seqüência, seleção e repetição) de um algoritmo definia-o como um bloco lógico (início e fim). À medida que os problemas a serem

Leia mais

JavaScript (ou JScript)

JavaScript (ou JScript) 1. Introdução JavaScript (ou JScript) Uma linguagem como o JavaScript permite criar interfaces interativas na web (permite a interação do usuário). Para desenvolver web sites interativos precisamos de

Leia mais

Resolução da lista de exercícios de casos de uso

Resolução da lista de exercícios de casos de uso Resolução da lista de exercícios de casos de uso 1. Explique quando são criados e utilizados os diagramas de casos de uso no processo de desenvolvimento incremental e iterativo. Na fase de concepção se

Leia mais

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES CAPÍTULO 5 5 VETORES E MATRIZES 5.1 Vetores Um vetor armazena uma determinada quantidade de dados de mesmo tipo. Vamos supor o problema de encontrar a média de idade de 4 pessoas. O programa poderia ser:

Leia mais

Guia de utilização da notação BPMN

Guia de utilização da notação BPMN 1 Guia de utilização da notação BPMN Agosto 2011 2 Sumário de Informações do Documento Documento: Guia_de_utilização_da_notação_BPMN.odt Número de páginas: 31 Versão Data Mudanças Autor 1.0 15/09/11 Criação

Leia mais

Aula 12: Funções. Pré-requisitos: Todas as aulas anteriores deste módulo. 1. Aproveitando Códigos no Programa

Aula 12: Funções. Pré-requisitos: Todas as aulas anteriores deste módulo. 1. Aproveitando Códigos no Programa Aula 12: Funções Nesta aula explicaremos o que são e como usar funções nos seus programas em JavaScript. Você aprenderá como elas podem receber e retornar valores à estrutura que as acionou. Entenderá

Leia mais

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery Agenda Regras paravariáveis Identificadores Válidos Convenção de Nomenclatura Palavras-chaves em Java Tipos de Variáveis em

Leia mais

2 Ferramentas Utilizadas

2 Ferramentas Utilizadas 2 Ferramentas Utilizadas Esta dissertação utiliza vários outros trabalhos para implementar os mecanismos de adaptação abordados. Essas ferramentas são descritas nas seções seguintes. 2.1 Lua Lua [7, 8]

Leia mais

Implementando uma Classe e Criando Objetos a partir dela

Implementando uma Classe e Criando Objetos a partir dela Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 04 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 2 Prof. Cristóvão Cunha Implementando uma Classe

Leia mais

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Prof. Bruno Vilela Oliveira bruno@cca.ufes.br http://www.brunovilela.webnode.com.br Aulas 2-3-4-5-6-7-8 Lógica Algoritmos Portugol

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word 2010. Sumário

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word 2010. Sumário CADERNO DE INFORMÁTICA FACITA Faculdade de Itápolis Aplicativos Editores de Texto WORD 2007/2010 Sumário Editor de texto... 3 Iniciando Microsoft Word... 4 Fichários:... 4 Atalhos... 5 Área de Trabalho:

Leia mais

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO Capítulo 2. VARIÁVEIS DO TIPO INTEIRO OBJETIVOS DO CAPÍTULO Conceitos de: variáveis do tipo inteiro, atribuição, avisos e erros de compilação, erros de execução, comentários dentro do programa-fonte Operadores

Leia mais

Testando e Comparando Valores

Testando e Comparando Valores Testando e Comparando Valores A Instrução if Um dos recursos mais importantes de uma linguagem de computador é a capacidade de testar e comparar valores, permitindo que seu programa se comporte diferentemente

Leia mais

5 Apresentando a linguagem C

5 Apresentando a linguagem C 5 Apresentando a linguagem C O criador da linguagem de programação C foi Dennis Ritchie que, na década de 70, programou-a por meio de um computador DEC PDP-11 rodando sistema operacional Unix. Entretanto,

Leia mais

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética

E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética 2 PARADIGMA IMPERATIVO 2.1 CONCEITO As linguagens que pertencem ao paradigma imperativo tomam por base a perspectiva da máquina. Ou seja, no modo como o computador executa programas em linguagem de máquina.

Leia mais

Comandos de repetição while

Comandos de repetição while Programação de Computadores I UFOP DECOM 2014 2 Aula prática 6 Comandos de repetição while Resumo Nesta aula vamos trabalhar com problemas cuja solução envolve realizar um cálculo ou tarefa repetidas vezes,

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

Leia mais

Metadados. 1. Introdução. 2. O que são Metadados? 3. O Valor dos Metadados

Metadados. 1. Introdução. 2. O que são Metadados? 3. O Valor dos Metadados 1. Introdução O governo é um dos maiores detentores de recursos da informação. Consequentemente, tem sido o responsável por assegurar que tais recursos estejam agregando valor para os cidadãos, as empresas,

Leia mais

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior Armazenamento de Dados Prof. Antonio Almeida de Barros Junior 1 Armazenamento de Dados Todos os dados que utilizamos até o momento, ficavam armazenados apenas na memória. Ao final da execução dos programas,

Leia mais

Desenvolvimento OO com Java Orientação a objetos básica

Desenvolvimento OO com Java Orientação a objetos básica Desenvolvimento OO com Java Orientação a objetos básica Vítor E. Silva Souza (vitor.souza@ufes.br) http://www.inf.ufes.br/~vitorsouza Departamento de Informática Centro Tecnológico Universidade Federal

Leia mais

Trabalho 3: Agenda de Tarefas

Trabalho 3: Agenda de Tarefas INF 1620 Estruturas de Dados Semestre 08.2 Trabalho 3: Agenda de Tarefas O objetivo deste trabalho é a implementação de um conjunto de funções para a manipulação de uma agenda de tarefas diárias, de forma

Leia mais

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação Lógica de Programação 3. INTRODUÇÃO À LINGUAGEM C Caro Aluno Vamos iniciar o terceiro capítulo da nossa disciplina. Agora vamos começar a aplicar os conceitos vistos nos capítulos anteriores em uma linguagem

Leia mais

9 Comandos condicionais

9 Comandos condicionais 9 Comandos condicionais Um comando condicional é uma instrução empregada quando se deseja criar um desvio, isto é, a opção de executar-se ou não um determinado trecho de código, segundo uma condição. Em

Leia mais

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos Lógica Aula 2 Técnicas de Programação Criando algoritmos Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos Criando

Leia mais

Linguagens de Programação Aula 10

Linguagens de Programação Aula 10 Linguagens de Programação Aula 10 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada As sentenças de controle das LP imperativas ocorrem em diversas categorias: seleção, seleção múltipla, iteração

Leia mais

Representação de Algoritmos - Linguagens de Programação

Representação de Algoritmos - Linguagens de Programação Representação de Algoritmos - Linguagens de Programação A representação de algoritmos em uma pseudo-linguagem mais próxima às pessoas é bastante útil principalmente quando o problema a ser tratado envolve

Leia mais

Programação: Tipos, Variáveis e Expressões

Programação: Tipos, Variáveis e Expressões Programação de Computadores I Aula 05 Programação: Tipos, Variáveis e Expressões José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/56 Valores Valor é uma entidade

Leia mais

MANUAL DA SECRETARIA

MANUAL DA SECRETARIA MANUAL DA SECRETARIA Conteúdo Tela de acesso... 2 Liberação de acesso ao sistema... 3 Funcionários... 3 Secretaria... 5 Tutores... 7 Autores... 8 Configuração dos cursos da Instituição de Ensino... 9 Novo

Leia mais

compreender a importância de cada estrutura de controle disponível na Linguagem C;

compreender a importância de cada estrutura de controle disponível na Linguagem C; Aula 3 Estruturas de controle Objetivos Esperamos que, ao final desta aula, você seja capaz de: compreender a importância de cada estrutura de controle disponível na Linguagem C; construir programas em

Leia mais

1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO

1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO 1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO Desde o seu surgimento, o manuseio da computação é baseado em linguagens de programação. Ela permite que sejam construídos aplicativos

Leia mais

Java Como Programar, 8/E

Java Como Programar, 8/E Capítulo 5 Instruções de controle: Parte 2 Java Como Programar, 8/E (C) 2010 Pearson Education, Inc. Todos os 5.1 Introdução Instrução de repetição for Instrução de repetição do while Instrução de seleção

Leia mais

Aula de JavaScript 05/03/10

Aula de JavaScript 05/03/10 Objetos Sabe-se que variável são contêiners que podem armazenar um número, uma string de texto ou outro valor. O JavaScript também suporta objetos. Objetos são contêiners que podem armazenar dados e inclusive

Leia mais

Programação: Estruturas de seleção

Programação: Estruturas de seleção Programação de Computadores I Aula 07 Programação: Estruturas de seleção José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/53 Valores booleanos Os valores booleanos

Leia mais

Linguagem de Programação I

Linguagem de Programação I Linguagem de Programação I Curso de Sistemas de Informação Karla Donato Fook karladf@ifma.edu.br DESU / DAI 2016 Linguagem de Programação C 2 1 Linguagem de Programação C Os programas em C consistem em

Leia mais

Manual das planilhas de Obras v2.5

Manual das planilhas de Obras v2.5 Manual das planilhas de Obras v2.5 Detalhamento dos principais tópicos para uso das planilhas de obra Elaborado pela Equipe Planilhas de Obra.com Conteúdo 1. Gerando previsão de custos da obra (Módulo

Leia mais

OPERADORES E ESTRUTURAS DE CONTROLE

OPERADORES E ESTRUTURAS DE CONTROLE OPERADORES E ESTRUTURAS DE CONTROLE 3.1 Operadores Os operadores indicam o tipo de operação matemática que será executada gerando novos valores a partir de um ou mais operadores. São muito utilizados em

Leia mais

agility made possible

agility made possible RESUMO DA SOLUÇÃO Utilitário ConfigXpress no CA IdentityMinder a minha solução de gerenciamento de identidades pode se adaptar rapidamente aos requisitos e processos de negócio em constante mudança? agility

Leia mais

- Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções

- Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções 1 - Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções Um programa pode possuir determinados processos realizados repetidas vezes ao longo da execução do programa. Estes processos podem se agrupar

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues Modelo De Desenvolvimento De Software É uma representação abstrata do processo de desenvolvimento que define como as etapas relativas ao desenvolvimento de software serão conduzidas e interrelacionadas

Leia mais

SISTEMA BRENA DE AUTOMAÇÃO COMERCIAL

SISTEMA BRENA DE AUTOMAÇÃO COMERCIAL SISTEMA BRENA DE AUTOMAÇÃO COMERCIAL VERSÃO 359 U N I P A C K NOTA FISCAL ELETRÔNICA CONTENDO ITENS COM CFOP S DISTINTOS RIO DE JANEIRO 25 DE JULHO DE 2013 SUMÁRIO 1- INTRODUÇÃO... 03 2- MOTIVAÇÃO... 03

Leia mais

Especificação do Trabalho Prático

Especificação do Trabalho Prático Especificação do Trabalho Prático O trabalho prático da disciplina consiste em desenvolver um programa utilizando a linguagem de programação C. A seguir, encontram-se a descrição do problema, a forma de

Leia mais

JSP - ORIENTADO A OBJETOS

JSP - ORIENTADO A OBJETOS JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...

Leia mais

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados Prof. Hugo Souza Até agora vimos como é formada a infraestrutura física e lógica das bases de dados com os principais componentes

Leia mais

Estrutura Condicional em Java

Estrutura Condicional em Java Estrutura Condicional em Java Linguagem de Programação 1 O Java contém três tipos de instruções de seleção. A instrução if realiza uma ação se uma condição for verdadeira ou pula a ação se a condição for

Leia mais

Manual do Usuário - ProJuris Web - Biblioteca Jurídica Página 1 de 20

Manual do Usuário - ProJuris Web - Biblioteca Jurídica Página 1 de 20 As informações contidas neste documento estão sujeitas a alterações sem o prévio aviso, o que não representa um compromisso da Virtuem Informática. As pessoas, organizações ou empresas e eventos de exemplos

Leia mais

Introdução a Banco de Dados Aula 03. Prof. Silvestri www.eduardosilvestri.com.br

Introdução a Banco de Dados Aula 03. Prof. Silvestri www.eduardosilvestri.com.br Introdução a Banco de Dados Aula 03 Prof. Silvestri www.eduardosilvestri.com.br Arquiteturas de Banco de Dados Arquiteturas de BD - Introdução Atualmente, devem-se considerar alguns aspectos relevantes

Leia mais

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com Objetivos Compreender os conceitos de lógica de programação e de algoritmos. Conhecer

Leia mais

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova;

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova; Software Básico 2008.2 Trabalho Prático 1: programação de E/S, uso de sinais Prática de programação voltada a eventos Trabalho individual ou em dupla Data de entrega: 01/10/2008 1 O Objetivo Utilizando

Leia mais

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza Software Básico Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly Prof. MSc. Hugo Vieira L. Souza Este documento está sujeito a copyright. Todos os direitos estão reservados para o todo

Leia mais

Potenciação no Conjunto dos Números Inteiros - Z

Potenciação no Conjunto dos Números Inteiros - Z Rua Oto de Alencar nº 5-9, Maracanã/RJ - tel. 04-98/4-98 Potenciação no Conjunto dos Números Inteiros - Z Podemos epressar o produto de quatro fatores iguais a.... por meio de uma potência de base e epoente

Leia mais

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros. Lista de exercícios: Grupo I - programa seqüênciais simples 1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros. 2. Fazer um programa

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel Parte IV Introdução à Programação em C++ (Continuação) Relembrando da Última Aula... Funções Classes de armazenamento

Leia mais

Capítulo 2. Processos de Software. 2011 Pearson Prentice Hall. Todos os direitos reservados. slide 1

Capítulo 2. Processos de Software. 2011 Pearson Prentice Hall. Todos os direitos reservados. slide 1 Capítulo 2 Processos de Software slide 1 Tópicos apresentados Modelos de processo de software. Atividades de processo. Lidando com mudanças. Rational Unified Process (RUP). Um exemplo de um processo de

Leia mais

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m - 2 0 1 3 P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m - 2 0 1 3 P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1: Inteligência É a faculdade de criar objetos artificiais, especialmente ferramentas para fazer ferramentas. Henri Bergson. WHILE Além dos comandos if-else e switch, o controle de fluxo de um programa pode

Leia mais

Exercícios de Revisão Java Básico

Exercícios de Revisão Java Básico Exercícios de Revisão Java Básico (i) Programação básica (estruturada) 1) Faça um programa para calcular o valor das seguintes expressões: S 1 = 1 1 3 2 5 3 7 99... 4 50 S 2 = 21 50 22 49 23 48...250 1

Leia mais

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00 Fundamentos da Programação 32 A. Conceito Variáveis contém dados: VIII. VARIÁVEIS de entrada que o computador precisa manipular; de saída que o computador precisa imprimir; e temporários, utilizados de

Leia mais

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos TUTORIAL Barra de LEDs Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Programação Servidor para Sistemas Web 1 Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Objetivo: Apresentar a teoria por trás dos padrões na construção de aplicações Web. INTRODUÇÃO Nas aulas anteriores

Leia mais

Primeiros passos das Planilhas de Obra v2.6

Primeiros passos das Planilhas de Obra v2.6 Primeiros passos das Planilhas de Obra v2.6 Instalação, configuração e primeiros passos para uso das planilhas de obra Elaborado pela Equipe Planilhas de Obra.com Conteúdo 1. Preparar inicialização das

Leia mais

BC0505 Processamento da Informação

BC0505 Processamento da Informação BC0505 Processamento da Informação Assunto: Modularização de código e passagem de parâmetros Aula Prática: 4 Versão: 0.2 Introdução Modularização No Java, como em outras linguagens de Programação Orientadas

Leia mais

COMO PROGRAMAR SEU TIME

COMO PROGRAMAR SEU TIME COMO PROGRAMAR SEU TIME 1) INSTALAÇÃO: Instale o simulador da categoria SIMUROSOT da FIRA. O simulador é gratuito e está disponível para download no site da FIRA (www.fira.net) ou no site da competição

Leia mais

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Computadores Digitais 2. Prof. Rodrigo de Souza Couto Computadores Digitais 2 Linguagens de Programação DEL-Poli/UFRJ Prof. Miguel Campista Aula de Hoje Cadeias de caracteres (strings) Caracteres Definição e manipulação de strings Vetor de strings Parâmetros

Leia mais

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura UFPI CCN DIE Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura O projeto Desenvolver um compilador de um subconjunto básico da linguagem PORTUGOL.

Leia mais

DESENVOLVIMENTO DE SOFTWARE

DESENVOLVIMENTO DE SOFTWARE VARIAÁ VEL Antes de iniciarmos os comandos referentes a Banco de Dados, precisamos de uma breve descrição técnica sobre Variáveis que serão uma constante em programação seja qual for sua forma de leitura.

Leia mais

3.1 Definições Uma classe é a descrição de um tipo de objeto.

3.1 Definições Uma classe é a descrição de um tipo de objeto. Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Classes Autoria:Aristófanes Corrêa Silva Adaptação:

Leia mais

ENG1000 Introdução à Engenharia

ENG1000 Introdução à Engenharia ENG1000 Introdução à Engenharia Aula 04 Introdução a Linguagem Lua Edirlei Soares de Lima Linguagem Lua Lua é uma linguagem de programação projetada para dar suporte à programação

Leia mais

Estrutura de Dados Básica

Estrutura de Dados Básica Estrutura de Dados Básica Professor: Osvaldo Kotaro Takai. Aula 4: Tipos de Dados O objetivo desta aula é apresentar os tipos de dados manipulados pela linguagem C, tais como vetores e matrizes, bem como

Leia mais

Estruturas de Repetição

Estruturas de Repetição Estruturas de Repetição Lista de Exercícios - 04 Algoritmos e Linguagens de Programação Professor: Edwar Saliba Júnior Estruturas de Repetição O que são e para que servem? São comandos que são utilizados

Leia mais

Portal do Projeto Tempo de Ser

Portal do Projeto Tempo de Ser Sumário Portal do Projeto Tempo de Ser O que é um Wiki?...2 Documentos...2 Localizando documentos...3 Links...3 Criando um Documento...4 Criando um link...4 Editando um Documento...5 Sintaxe Básica...5

Leia mais

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica Introdução a Programação Ponteiros e Strings, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos a relação entre ponteiros e strings Ponteiros para strings X Vetores de Caracteres Vetores de ponteiros

Leia mais

Criar as tabelas para um banco de dados

Criar as tabelas para um banco de dados Treinamento Criar as tabelas para um banco de dados ANTES DE COMEÇAR O primeiro curso desta série, "Criar as tabelas de um novo banco de dados", forneceu uma lista de tabelas e campos para uso no banco

Leia mais

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela? Exercícios sobre Linguagem PHP: 1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela? 2) Considere a linguagem de programação PHP e seus operadores. A execução da sentença:

Leia mais

Notas da Aula 6 - Fundamentos de Sistemas Operacionais

Notas da Aula 6 - Fundamentos de Sistemas Operacionais 1. Monitores Notas da Aula 6 - Fundamentos de Sistemas Operacionais Embora os semáforos sejam uma boa solução para o problema da exclusão mútua, sua utilização não é trivial. O programador é obrigado a

Leia mais

O ENSINO DE CÁLCULO NUMÉRICO: UMA EXPERIÊNCIA COM ALUNOS DO CURSO DE CIÊNCIA DA COMPUTAÇÃO

O ENSINO DE CÁLCULO NUMÉRICO: UMA EXPERIÊNCIA COM ALUNOS DO CURSO DE CIÊNCIA DA COMPUTAÇÃO O ENSINO DE CÁLCULO NUMÉRICO: UMA EXPERIÊNCIA COM ALUNOS DO CURSO DE CIÊNCIA DA COMPUTAÇÃO Prof. Leugim Corteze Romio Universidade Regional Integrada URI Campus Santiago-RS leugimcr@urisantiago.br Prof.

Leia mais

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento FISP 1/6 15 a Aula Subprogramação /Subalgoritmos Função e Procedimento Objetivo: Simplificação e racionalização na elaboração de algoritmos mais complexos Recursos: Estruturação de algoritmos e modularização

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS

DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS Aluno: Ricardo Gomes Leal Costa Orientadora: Noemi de la Rocque Rodriguez Introdução A biblioteca DALua [1], fruto do projeto anterior, tem por objetivo oferecer

Leia mais

Unidade 5: Sistemas de Representação

Unidade 5: Sistemas de Representação Arquitetura e Organização de Computadores Atualização: 9/8/ Unidade 5: Sistemas de Representação Números de Ponto Flutuante IEEE 754/8 e Caracteres ASCII Prof. Daniel Caetano Objetivo: Compreender a representação

Leia mais

Mantis. Solicitando suporte. Manual do Cliente

Mantis. Solicitando suporte. Manual do Cliente Mantis Solicitando suporte Manual do Cliente Telefones: 3355-1594, 3350-6917, 4053 9165 - WWW.intelidata.inf.br Página 1 2012 Sumário USANDO O MANTIS PARA SOLICITAR SUPORTE... 3 Tela de Login... 3 Minha

Leia mais

Laboratório de Programação I

Laboratório de Programação I Laboratório de Programação I Estruturas de Controle: Parte I Fabricio Breve Objetivos Entender as técnicas básicas de solução de problemas Desenvolver algoritmos por meio do processo de refinamento top-down

Leia mais

A Linguagem Lua Lua Puc-Rio

A Linguagem Lua Lua Puc-Rio A Linguagem Lua Lua foi projetada e implementada por uma equipe no Tecgraf, o Grupo de Computação Gráfica da Puc-Rio (Pontifícia Universidade Católica do Rio de Janeiro). 1 Exemplos de linguagens de scripts

Leia mais

Bem vindo Joe Ramone!

Bem vindo Joe Ramone! AULA 4 Concatenação O objetivo da concatenação é juntar textos, sejam eles números, textos, variáveis ou constantes: Como não é possível escrever um texto junto à uma variável como $variavelmaisumtexto,

Leia mais

Exercícios Teóricos Resolvidos

Exercícios Teóricos Resolvidos Universidade Federal de Minas Gerais Instituto de Ciências Exatas Departamento de Matemática Exercícios Teóricos Resolvidos O propósito deste texto é tentar mostrar aos alunos várias maneiras de raciocinar

Leia mais

Arquitetura de processadores: RISC e CISC

Arquitetura de processadores: RISC e CISC Arquitetura de processadores: RISC e CISC A arquitetura de processador descreve o processador que foi usado em um computador. Grande parte dos computadores vêm com identificação e literatura descrevendo

Leia mais

c. Técnica de Estrutura de Controle Teste do Caminho Básico

c. Técnica de Estrutura de Controle Teste do Caminho Básico 1) Defina: a. Fluxo de controle A análise de fluxo de controle é a técnica estática em que o fluxo de controle através de um programa é analisado, quer com um gráfico, quer com uma ferramenta de fluxo

Leia mais

ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE

ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE Fabiana Gomes Marinho Faculdade Lourenço Filho Resumo: Na UML, a modelagem conceitual dos dados é descrita pelo diagrama de classes, que através

Leia mais

ALGORITMOS E FLUXOGRAMAS

ALGORITMOS E FLUXOGRAMAS ALGORITMOS E FLUXOGRAMAS Prof. André Backes INTRODUÇÃO Computadores = cérebros eletrônicos? Computadores são máquinas e, por si sós, não podem ser inteligentes. Alguém as projetou e deu a ela todas as

Leia mais

Informática de Gestão 1º ano / 1º semestre Ano letivo: 2014/2015. Visual Basic VBA

Informática de Gestão 1º ano / 1º semestre Ano letivo: 2014/2015. Visual Basic VBA Informática de Gestão 1º ano / 1º semestre Ano letivo: 2014/2015 Visual Basic VBA Macros Funções Conjunto de instruções que são executadas sempre que se desejar e pela ordem apresentada As funções são

Leia mais

Algoritmos e Técnicas de

Algoritmos e Técnicas de INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE Algoritmos e Técnicas de Programação Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@ifrn.edu.br

Leia mais