CURSO DE EXTENSÃO: Desenvolvimento de Aplicativos WEB com Ruby on Rails

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

Download "CURSO DE EXTENSÃO: Desenvolvimento de Aplicativos WEB com Ruby on Rails"

Transcrição

1 CURSO DE EXTENSÃO: Desenvolvimento de Aplicativos WEB com Ruby on Rails Jackson Pires de O. S. Júnior Abril de 2008

2 2ª Semana Classes, Objetos, Variáveis, Tipos, Métodos, Exceções, Entrada / Saída

3 Introdução Olá seja bem vindo à segunda aula do curso de extensão de Desenvolvimento de Aplicativos Web com Ruby on Rails. Todo conteúdo do curso está baseado em livros, tutoriais e cursos, a maioria disponíveis na internet, portanto, você pode ampliar ainda mais seu conhecimento procurando mais informações em ferramentas de busca e sites específicos sobre a tecnologia citada. Mais à frente darei algumas referências para que você possa continuar estudando sobre o assunto. Nesta aula faremos uma breve introdução à linguagem Ruby tocando os pontos que facilitarão o desenvolvimento de aplicações Web com o Ruby on Rails. Abaixo temos o conteúdo programático que seguiremos nessa segunda semana: Ruby o Linguagem Classes, Objetos, Variáveis Tipos Métodos Exceções Entrada / Saída

4 Linguagem Dando continuidade ao nosso curso, não poderíamos deixar de nos aprofundar um pouco mais na linguagem que é a base para todo o entimento do framework Ruby on Rails. So assim, tentaremos trazer os conceitos mais importantes da linguagem para que mais à frente possamos desfrutar de suas facilidades no desenvolvimento dos aplicativos WEB. É bom lembrar que não falaremos de conceitos básicos de programação e algorítimo, esse passo já deve ter sido visto em sala de aula. Então mãos à obra!

5 Classes, Objetos e Variáveis Considerando que o Ruby é completamente orientado a objetos, nada mais apropriado que começar nossa exploração do mesmo por essa parte. A primeira coisa que precisamos no nosso processo de compreensão do Ruby é enter como variáveis funcionam. No Ruby, como na maior parte das linguagens orientadas a objeto, as variáveis são simplesmente referências a objetos. Veja o exemplo abaixo: ~$ irb irb(main):001:0> a = 1 => 1 irb(main):002:0> a = "1" => "1" No exemplo acima, atribuímos a valor inteiro 1 à variável a e depois atribuímos à mesma variável, o valor 1, que é uma seqüência de caracteres. Isso, e o fato de que nenhum erro ocorreu, demonstram duas coisas sobre o Ruby. Primeiro, variáveis simplesmente apontam para os valores atribuídos à mesma, e, por causa disso, podem ser re-atribuídas de acordo com necessidade; segundo, variáveis não precisam ser declaradas. Um exemplo posterior poderia ser: ~$ irb irb(main):001:0> a = 1 => 1 irb(main):002:0> a.class => Fixnum irb(main):003:0> a = "1 " => "1 " irb(main):004:0> a.class => String Note que mesmo tipos primitivos como o número inteiro 1 são membros de uma classe no caso Fixnum, que é a classe que define números com representação fixa. Considere agora o seguinte trecho de código: ~$ irb irb(main):001:0> 1.class

6 => Fixnum irb(main):002:0> 1.class.class => Class irb(main):003:0> 1.class.superclass => Integer irb(main):004:0> Note que 1 é uma instância da classe Fixnum. A classe Fixnum, por sua vez, é também um objeto, uma instância da classe Class, que define todas as classes em Ruby. Class é chamada a metaclasse de Fixnum, ou seja, é uma classe que descreve uma classe. Na terceira linha temos outro conceito de orientação a objetos que é a superclasse de uma classe, ou seja, a classe da qual a mesma é derivada. No caso de Fixnum, temos a seguinte hierarquia: Object => Numeric => Integer => Fixnum. Esses dois conceitos, metaclasses e superclasses, são importantes em qualquer linguagem orientada a objeto e precisam ser compreidos por qualquer programador. Outro aspecto com o qual os programadores estão acostumados é ter uma separação muito distinta entre tipos primitivos e objetos. Em Java, 3 é um inteiro, uma estrutura primitiva de 32-bits. Se precisamos de um objeto em torno desse primitivo, embrulhamos em torno uma instância da classe Integer. Em Ruby 3 é um objeto, tipo Fixnum. Como tal, tem diversos métodos. Por Exemplo: ~$ irb irb(main):001:0> 1.to_s => "1" irb(main):002:0> => 2 irb(main):003:0> 1.+(1) => 2 irb(main):004:0> -1.abs => 1 irb(main):005:0> "123".length => 3 No exemplo acima, temos várias invocações de métodos de determinados objetos. O primeiro método invocado, to_s, converte um valor numérico em

7 uma string correspondente. O segundo exemplo é ainda mais interessante. Note que fizemos uma operações, somando dois números. Mas, como podemos ver logo abaixo, a operação é simplesmente uma invocação de um método do objeto. Obviamente que, para uso diário, utilizaremos à primeira sintaxe. É importante, porém, compreer que isso é válido para basicamente todos os métodos do Ruby e que isso pode ser usado em suas próprias classes. Uma maneira fácil de visualizar os métodos que uma classe possui é chamar o seu método methods, como pode ser visto abaixo: ~$ irb irb(main):001:0> 1.methods => ["%", "inspect", "<<", "singleton_method_added", "&", "clone", ">>", "ceil", "public_methods", "instance_variable_defined?", "div", "equal?", "freeze", "times", "*", "+", "to_i", "methods", "respond_to?", "-", "upto", "between?", "prec", "round", "/", "method", "dup", "instance_variables", " id ", "divmod", "chr", "succ", " ", "eql?", "integer?", "~", "id", "to_f", "singleton_methods", "s", "prec_i", "taint", "truncate", "to_int", "frozen?", "instance_variable_get", " s ", "^", "instance_of?", "modulo", "to_a", "object_id", "+@", "zero?", "-@", "type", "**", "<", "protected_methods", "<=>", "instance_eval", "==", "prec_f", "quo", ">", "===", "step", "id2name", "size", "instance_variable_set", "kind_of?", "remainder", "ext", ">=", "nonzero?", "next", "to_s", "<=", "coerce", "hash", "floor", "class", "tainted?", "=~", "private_methods", "display", "fdiv", "nil?", "untaint", "downto", "to_sym", "[]", "is_a?", "abs"] Esses são todos os métodos públicos compartilhados pelas instâncias da classe Fixnum. Como classes podem possuir métodos públicos, protegidos e privados, a distinção pode ser obtida invocando os métodos public_methods, protected_methods e private_methods de uma instância qualquer. Incidentemente, classes são objetos também, com seus próprios métodos. Você pode observar isso invocando o método acima em uma classe, usando, por exemplo: ~$ irb irb(main):001:0> String.public_methods

8 => ["inspect", "private_class_method", "const_missing", "clone", "public_methods", "public_instance_methods", "instance_variable_defined?", "method_defined?", "superclass", "equal?", "freeze", "included_modules", "const_get", "autoload?", "methods", "respond_to?", "module_eval", "class_variables", "method", "dup", "protected_instance_methods", "instance_variables", "public_method_defined?", " id ", "eql?", "const_set", "id", "singleton_methods", "s", "class_eval", "taint", "frozen?", "instance_variable_get", "include?", "private_instance_methods", " s ", "instance_of?", "private_method_defined?", "to_a", "object_id", "name", "type", "new", "<", "protected_methods", "instance_eval", "<=>", "==", ">", "===", "instance_variable_set", "kind_of?", "ext", "protected_method_defined?", "const_defined?", ">=", "ancestors", "to_s", "<=", "public_class_method", "autoload", "allocate", "hash", "class", "instance_methods", "tainted?", "=~", "private_methods", "class_variable_defined?", "display", "nil?", "instance_method", "untaint", "constants", "is_a?"] Aqui cabe uma explicação sobre uma diferença do Ruby para outras linguagens orientadas a objetos. Métodos públicos são métodos acessíveis a todo o programa. Métodos protegidos são acessíveis somente a instâncias da própria classe e subclasses da mesma. Em Ruby, porém, métodos privados possuem uma distinção sutil: eles somente podem ser chamados com um receptor explícito, ou seja, dentro do próprio objeto. Isso significa que subclasses podem também chamar os métodos privados de sua superclasse, mas somente dentro do seu próprio contexto de execução. Objetos, como instâncias de classes, podem ser criados implicitamente ou explicitamente em Ruby. Acima, vimos alguns exemplos de criação implícita, que é comum a todos os tipos primitivos. A criação explícita, porém, é feita através da invocação do método new: ~$ irb irb(main):001:0> a = "Uma string qualquer" => "Uma string qualquer" irb(main):002:0> b = String.new("Uma string qualquer") => "Uma string qualquer" irb(main):003:0> a == b => true irb(main):004:0> require 'date' => true

9 irb(main):005:0> d = Date.new(2007, 1, 1) => #<Date: /2,0, > irb(main):006:0> d.day => 1 irb(main):007:0> d.year => 2007 Note que nas primeiras declarações criamos uma string de maneira implícita e de maneira explícita. Uma comparação entre as duas revela que não há diferença na criação, ou seja, a criação implícita é essencialmente o mesmo que uma chamada ao método new seguida de uma atribuição. No exemplo seguinte, temos a criação de um objeto que não possui criação implícita. Note também que o objeto não faz parte do núcleo do Ruby, mas é implementado em uma biblioteca externa que é adquirida para o contexto atual através do método require. Esse método, embora seja invocado aparentemente sem um objeto receptor, é na verdade um método do módulo Kernel, incluindo na classe Object, que provê uma série de métodos comuns para o ambiente de execução Ruby. Veremos mais sobre módulos em seções seguintes. Como podemos notar de tudo o que foi visto acima, o Ruby é realmente uma linguagem orientada a objetos em toda a sua extensão. Todo valor criado é uma instância de uma classe qualquer, mesmo as próprias classes. Desafio 1.O Ruby possui um método chamado id, comum a todas as classes e objetos. O que esse método faz? 2.Faça um teste, criando duas variáveis inteiras. Compare os ids das mesmas. Qual é o resultado? 3.Faça o mesmo teste com duas variáveis String. Qual é o resultado agora? 4.Por que você acha que isso acontece?

10 Mas o que são Símbolos no Ruby? Bom, esse trechinho da apostila entra pra deixar você ainda mais à vontade com a linguagem Ruby. Mais à frente vamos nos deparar com trechos de códigos mais ou menos assim: a = :teste Vamos notar então que existe : (dois pontos) na frente do nome teste, não se preocupe, não é erro de digitação, isto meu caro amigo é um símbolo ou se preferir um symbol. Bom, para começarmos a enter símbolos no Ruby é interessante ler um post que o Fabio Akita deixou em seu blog < esse post faz demonstrações muito boas para o entimento do assunto, não deixem de visitá-lo. Por hora, basta termos em mente o seguinte. Pense em símbolos como Strings Leves. Eles representam nomes e algumas String dentro do interpretador Ruby, e são sempre o mesmo objeto durante a execução de um programa. Ou ainda dizemos que são representações eficientes de um valor qualquer, não muito diferentes de constantes Um exemplo prático seria: ~$ irb irb(main):001:0> s1 = :fasete => :fasete irb(main):002:0> s2 = :fasete => :fasete irb(main):003:0> s3 = :fasete => :fasete irb(main):004:0> s1.object_id => irb(main):005:0> s2.object_id => irb(main):006:0> s3.object_id =>

11 Observe que todos apontam para o mesmo objeto, diferentemente da utilização de Strings comuns. Continuando... Agora que trabalhamos um pouco com os conceitos básicos de classes, objetos e variáveis, é hora de criar as nossas próprias classes, experimentando um pouco mais com o sistema de objetos do Ruby. Criar uma classe é bem simples em Ruby. Basta fazer o seguinte: class Carro def initialize(marca, = = modelo O código acima define uma classe chamada Carro que possui um método chamado initialize. Esse método possui uma conotação especial em Ruby, so o método que é invocado quando a instância de uma classe é criada. Vejamos isso em um exemplo: irb(main):007:0> gol = Carro.new("Volkswagem", "Gol") irb(main):008:0> O código acima cria uma instância da classe Carro, atribuindo os parâmetros a variáveis de instância da classe (identificadas pelo na frente dos seus nomes). Note que new é usado e não initialize, so que este último é invocado automaticamente. Esse é um detalhe de implementação do Ruby, so que o método initialize é automaticamente marcado com private.

12 Dica: Segundo convenções Ruby, nos nomes dos métodos devem-se usar letras minúsculas separando as palavras com um sublinhado (_), porém no nome das classes é utilizado camel case, da mesma maneira que no Java, com maiúsculas separando dois ou mais nomes da classe. Exemplos: MinhaClasse MeuTeste CarroPersonalizado. Dica: Caso você não queira ficar colando o código a todo momento, salve um arquivo com um nome qualquer e a extensão.rb e use o método load para carregar esse arquivo, lembrando que load requer o nome completo do arquivo a carregar, incluindo a extensão. Note que se você tentar extrair o valor de uma variável de instância acima, você verá um erro. Por exemplo: irb(main):009:0> gol.marca NoMethodError: undefined method `marca' from (irb):9 Variáveis de instância são automaticamente internas e você só pode extrair o valor das mesmas publicamente criando um método específico para isso. Falando em métodos, podemos criar um método para a nossa classe para ver como os mesmos funcionam. Antes vejamos a próxima linha: irb(main):010:0> gol.to_s => "#<Carro:0x2af9068>" Vamos aproveitar para substituir a inconveniente representação textual acima por uma de nosso interesse. Isso é feito criando um método chamado to_s, que já mencionamos anteriormente. Esse método converte um objeto qualquer em sua representação textual.

13 Todos objetos em Ruby possuem esse método, embora sua implementação inicial seja bem limitada. Podemos sobrescrever o método assim: class Carro def initialize(marca, = = modelo def to_s marca: #{@marca}, modelo #{@modelo} O código acima apresenta algumas características interessantes. Primeiro, ele retorna a representação textual do objeto, mas sem invocar qualquer expressão de retorno. Ruby possui, realmente, uma expressão return, mas a mesmo não precisa ser usada na maior parte dos casos. Isso acontece porque qualquer expressão em Ruby retorna automaticamente um valor. Se o valor não é explicitamente retornado, o valor nil é usado implicitamente. Isso significa que um método retorna o resultado de sua última expressão, sem necessidade de chamar return. No método acima, estamos retornando também uma string, usando o que é chamado de interpolação de valores. Qualquer expressão entre os delimitadores #{} dentro de uma string será executada e seu valor representacional retornado isto é o método to_s do valor resultante é invocado automaticamente. Veja o resultado do método acima: irb(main):010:0> gol = Carro.new("Volkswagem", "Gol") irb(main):011:0> gol irb(main):012:0> gol.to_s => "marca: Volksvagem, modelo Gol" Voltando à questão dos atributos, se quisermos torná-los manipuláveis, podemos usar a seguinte implementação:

14 class Carro def initialize(marca, = = modelo def to_s marca: #{@marca}, modelo #{@modelo} def def Isso permite o seguinte código: irb(main):016:0> gol = Carro.new("Volkswagem","Gol") irb(main):017:0> gol.marca => "Volkswagem" irb(main):018:0> gol.marca = "Nova Volks" => "Nova Volks" irb(main):019:0> gol.marca => "Nova Volks" Note que agora temos métodos que podemos usar para obter ou mudar o valor de um atributo do objeto. Os métodos que mudam o valor possuem um sinal de igual (=) em seu nome e são usados automaticamente pelo Ruby em caso de atribuição como o exemplo demonstra. Para encurtar ainda mais, Ruby permite que declaremos métodos de acesso à essas variáveis de uma forma diferente, observe o código: class Carro attr_reader :marca attr_writer :modelo def initialize(marca, = marca

15 @modelo = modelo def to_s marca: #{@marca}, modelo #{@modelo} ou ainda: class Carro attr_accessor :marca attr_reader :modelo def initialize(marca, = = modelo def to_s marca: #{@marca}, modelo #{@modelo} Note o início de cada código temos readers, writers e accessors e que eles usam símbolos para fazerem referências à variáveis de classe. Estes funcionam como um atalho para a operação tediosa que fizemos anteriormente. Resumindo, o attr_reader permite apenas leitura, o attr_writer permite apenas escrita e o attr_accessor permite escrita e leitura. Observe: irb(main):012:0> gol = Carro.new("Volkswagem", "Gol") irb(main):013:0> gol.marca => "Volkswagem" irb(main):014:0> gol.modelo NoMethodError: undefined method `modelo' from (irb):14 irb(main):015:0> gol.marca = "Nova Volks" NoMethodError: undefined method `marca=' from (irb):15 irb(main):016:0> gol.modelo = "Novo Gol" => "Novo Gol"

16 Pra fechar essa parte, como seriam feitas heranças em Ruby? Herança simples em Ruby é bastante trivial: class B < A A declaração acima indica que a classe B herda os métodos da classe A. Variáveis de classe, variáveis de instância, e variáveis de instância de classe seguem as regras descritas anteriormente. Ou seja o exts utilizado no Java, fica assim classe filha < classe pai, no Ruby. Veremos isso com mais detalhes em nossas andanças pelo Rails.

17 Tipos Considerando o fato de que o Ruby é completamente orientado a objetos, todos os seus tipos são representados por classes e uso dos mesmos é bem objetivo e direto. Ainda assim, é bom enter quais são os tipos básicos, quais são os seus detalhes de implementação, e, acima de tudo, quais são as suas limitações. O Ruby possui uma hierarquia relativamente extensa até mesmo para os tipos primitivos. Conhecer essa hierarquia é interessante como uma forma de enter mais como o Ruby funciona e serve como um bom exercício. O tipo mais básico do Ruby é o tipo numérico, em suas duas variantes: inteiro e de ponto flutuante. Os tipos são implementados por classes diferentes, mas a interoperabilidade dos mesmos é similar ao que se vê em outras linguagens de programação. ~$ irb irb(main):001:0> 1.class => Fixnum irb(main):002:0> 1.0.class => Float irb(main):003:0> 1_000_000.class => Fixnum Como o exemplo acima mostra, o Ruby é inteligente o bastante para conseguir operar com métodos mesmo no caso de números de ponto flutuante. A forma exemplificada na terceira linha de código é uma maneira de representar números com mais clareza, e pode ser usada em opção à maneira usual de declaração de números. Um detalhe interessante é que a exemplo do Smalltalk, Lisp e outras linguagens similares o Ruby permite o uso de número inteiros de tamanho arbitrário. Inclusive, há uma conversão automática quando o número excede a capacidade de representação dos inteiros. Veja o exemplo abaixo:

18 ~$ irb irb(main):001:0> 1_000_000_000 * 1_000_000_000 => irb(main):001:2> (1_000_000_000 * 1_000_000_000).class => Bignum A classe Bignum é capaz de representar número com precisão infinita, restrita somente à memória e processamento da máquina hospedeira. O próximo tipo primitivo do Ruby descreve a representação de valores booleanos. O Ruby possui duas pseudo-variáveis que representam esses valores, so essas variáveis as únicas instâncias das suas respectivas classes. Veja o exemplo abaixo: ~$ irb irb(main):001:0> true => true irb(main):002:0> false => false irb(main):003:0> true.class => TrueClass irb(main):004:0> false.class => FalseClass irb(main):005:0> true.class.superclass => Object irb(main):006:0> false.class.superclass => Object irb(main):007:0> TrueClass.new NoMethodError: undefined method `new' for TrueClass:Class from (irb):7 from :0 Note que uma tentativa de instanciar qualquer das duas classes booleanas resulta em um erro. O Ruby remove a definição do método new dessas classes para evitar qualquer problema. Além dessas duas variáveis, existe outra pseudo-variável especial que é o valor nil, que representa nulo. A exemplo das variáveis booleanas, esse valor é a única instância da classe NilClass.. Prosseguindo, temos o tipo que representa seqüências de caracteres, tipo este que é definido pela classe String:

19 ~$ irb irb(main):001:0> "123".length => 3 Considerando que o Ruby é muito voltado para processamento de texto inspirado sem dúvida por sua herança Perl a classe String foi desenhada com uma enorme gama de métodos que podem ser utilizados para esse tipo de trabalho. Além disso, há várias bibliotecas completando o que a classe não apresenta por padrão um tributo à flexibilidade do Ruby. Dois detalhes devem ser considerados quando se trabalha com textos em Ruby. O primeiro é que não existe um tipo para caracteres. Isso leva à situação abaixo: ~$ irb irb(main):001:0> "123"[0] => 49 irb(main):002:0> "123"[0].chr => "1" irb(main):003:0> "123"[0, 1] => "1" Acessar diretamente uma posição de uma String retorna o valor inteiro que representa aquele caractere. As duas outras linhas mostram a forma de obter o valor como uma String de tamanho um: você pode usar o método chr, ou pode obter um pedaço posicionado da String, do tamanho desejado. O segundo detalhe é que o Ruby não suporta Unicode ou UTF-8 por padrão. Veja o exemplo abaixo: ~$ irb irb(main):001:0> "Sábado"[0,2] => "S\303" irb(main):002:0> "Sábado"[0,3] => "S\303\241" irb(main):003:0> "Sábado"[0,4] => "S\303\241b" irb(main):004:0> "Sábado"[1].chr => "\303" irb(main):005:0> "Sábado"[2].chr

20 => "\241" irb(main):006:0> "Sábado"[3].chr => "b" irb(main):007:0> "Sábado".length => 7 Note que pelo fato do a acentuado ocupar dois bytes em uma representação não-ascii, o Ruby falha em suas funções mais elementares. Existem bibliotecas que procuram resolver o problema em graus variados, com inclusive uma delas estando embutida no próprio Rails. Os planos são de que a próxima versão do Ruby suporte Unicode nativamente. Uma característica da manipulação de texto em Ruby é que as strings geradas no mesmo são mutáveis, isto é, qualquer operação normal em uma string aloca uma nova string automaticamente. Por isso, é possível encontrar vários métodos com duas versões: uma que retorna um novo objeto e uma que modifica o objeto existente. Veja o exemplo abaixo: irb(main):001:0> s1 = "abc" => "abc" irb(main):002:0> s2 = s1 => "abc" irb(main):003:0> s2.object_id == s1.object_id => true irb(main):004:0> s2 = s1.upcase => "ABC" irb(main):005:0> s2 => "ABC" irb(main):006:0> s2.object_id => irb(main):007:0> s1 => "abc" irb(main):008:0> s1.object_id => irb(main):009:0> s1.upcase! => "ABC" irb(main):010:0> s1.object_id =>

21 O exemplo mostra que existem métodos que retornam uma nova string com as modificações e métodos que modificam a string sem alocar nova memória. Esses métodos destrutivos geralmente possuem o sufixo! (upcase!, gsub!, etc) para distingui-los dos métodos não-destrutivos (upcase, gsub, etc). Essa característica do Ruby pode causar algumas diferenças de performance em loops se o programador não for cuidadoso. Considere a seguinte situação: um loop em que uma variável string é concatenada repetidamente. O exemplo abaixo mostra essa diferença: ~$ irb irb(main):001:0> s = "" => "" irb(main):005:0> for a in [1, 2, 3] irb(main):006:1> s = s + a.to_s irb(main):007:1> puts s.object_id irb(main):008:1> => [1, 2, 3] irb(main):009:0> for a in [1, 2, 3] irb(main):010:1> s << a.to_s irb(main):011:1> puts s.object_id irb(main):012:1> => [1, 2, 3] irb(main):013:0> s => "123123" O exemplo mostra claramente que, no primeiro caso, um objeto novo é gerado a cada iteração do loop; no segundo caso, entretanto, isso não acontece: a string é meramente re-alocada de maneira eficiente. Isso pode significar uma boa diferença de performance quando se trabalha com textos de tamanho razoável. Existem várias formas de declarar strings em Ruby. Veja o exemplo abaixo:

22 ~$ irb irb(main):001:0> a = "valor" => "valor" irb(main):002:0> 'string com aspas simples: #{a}' => "string com aspas simples: \#{a}" irb(main):003:0> "string com aspas duplas: #{a}" => "string com aspas duplas: valor" irb(main):004:0> %(string com marcadores especiais: #{a}) => "string com marcadores especiais: valor" irb(main):005:0> s = <<EOF irb(main):006:0" uma string com irb(main):007:0" quebra de linha irb(main):008:0" e espacamento irb(main):009:0" EOF => "uma string com\n quebra de linha\n e espacamento\n" Com exceção da aspas simples, todas as outras formas de declaração de strings aceitam interpolação, isto é, a inserção de valores por meio de marcadores especiais em uma string usando #{expressão}. O Ruby aceita essa gama de declarações de strings com o objetivo de facilitar o uso de caracteres especiais. A lista abaixo é um resumo dessas formas de declaração. 'sem interpolacao,' interpolacao e contra-barras %q(sem interpolacao) %Q(interpolacao e contra-barras) %(interpolacao e contra-barras) Um outro tipo interessante do Ruby é o range, que define uma faixa de valores. Ele é muito útil para loops e muito fácil de ser usado: ~$ irb irb(main):001:0> (1..10) => irb(main):002:0> ('A'..'Z') => "A".."Z" irb(main):003:0> 'A'..'Z' => "A".."Z" irb(main):004:0> for i in ('A'..'C')

23 irb(main):005:1> puts i irb(main):006:1> A B C Dois outros tipos básicos que vamos explorar são Array e Hash, que possuem muitas similaridades. Um Array é uma vetor numericamente indexado, enquanto um Hash é um vetor associativo, que permite acesso randômico com maior eficiência. Veja os exemplos abaixo: ~$ irb irb(main):001:0> a = [1, 2, 3] => [1, 2, 3] irb(main):002:0> b = { :a => "Valor 1", :b => "Valor 2" } => {:b=>"valor 2", :a=>"valor 1"} irb(main):003:0> a[0] => 1 irb(main):004:0> a[:b] TypeError: Symbol as array index from(irb):4:in `[]' from (irb):4 from :0 irb(main):005:0> b[:a] => "Valor 1" irb(main):006:0> b[0] => nil irb(main):007:0> b.default = "Valor Default" => "Valor Default" irb(main):008:0> b[0] => "Valor Default" Note que o Array somente permite acesso por índices numéricos, enquanto Hash aceita qualquer objeto, retornando o valor nil se nenhuma chave correspondente for encontrada. Um valor padrão pode ser dado ao Hash para facilitar o retorno se necessário.

24 Métodos Até o momento já usamos bastante os vários métodos das classes primitivas do Ruby, mas ainda não utilizamos plenamente as características dos mesmos. Um método é simplesmente uma mensagem que um objeto pode executar. Se dois objetos respondem à mesma mensagem, eles podem ser trabalhados pelo mesmo código, indepentemente das classes em questão. Essa é uma das maiores vantagens de linguagens dinâmicas com Ruby, Python e Smalltalk e embora possa parecer que isso dá origem a mais erros no desenvolvimento, o inverso é verdadeiro: a flexibilidade da linguagem propicia um código mais limpo com menor incidência de erros. O uso simples de métodos é bem trivial: ~$ irb irb(main):001:0> def metodo(param1, param2) irb(main):002:1> param1 + param2 irb(main):003:1> => nil irb(main):004:0> metodo(1, 2) => 3 irb(main):005:0> metodo 1, 2 => 3 Note que não é necessário usar parênteses a menos que você precise desambiguar algum parâmetro. O mesmo é válido para a própria declaração do método, embora isso não esteja demonstrado acima. E embora seja possível ignorá-los em muitos casos, usar parênteses confere uma legibilidade melhor ao código e é mais desejável na maioria dos casos. O exemplo abaixo, mostra uma outra característica dos métodos Ruby: a possibilidade de receber uma quantidade de parâmetros arbitrária:

25 ~$ irb irb(main):001:0> def metodo(*args) irb(main):002:1> for a in args irb(main):003:2> puts a irb(main):004:2> irb(main):005:1> => nil irb(main):006:0> metodo(1) 1 => [1] irb(main):007:0> metodo(1, 2, 3) => [1, 2, 3] irb(main):008:0> metodo((1..3)) 1..3 => [1..3] irb(main):009:0> metodo(*(1..3)) No exemplo acima, criamos um método que simplesmente imprime todos os valores que lhe foram passados. O sinal de * é conhecido como splat operator e possui dois propósitos: primeiro, na declaração de um método, como na primeira linha, ele especifica que o Ruby deve pegar todos os parâmetros e passá-los em um array para o método. Segundo, como na última linha, ele tem o efeito contrário, ele pede ao Ruby que expanda uma seqüência qualquer em um array. Essas duas aplicações são igualmente importantes e devem ser entidas com clareza. Por fim, métodos podem receber blocos como parâmetros, tanto para execução interna como para retorno parcial de valores. Vamos mostrar no momento somente o uso simples de blocos e retornar ao assunto mais adiante, quando necessário:

26 ~$ irb irb(main):001:0> def metodo(s) irb(main):002:1> yield(s) irb(main):003:1> => nil irb(main):004:0> metodo(2) { i i + i } => 4 irb(main):005:0> metodo("2") { i i + i } => "22" Esse é um exemplo muito simples, mas mostra que blocos de código são variáveis de primeira classe, capaz de interagir com o ambiente como qualquer outro objeto. Aqui notamos o uso dos blocos associadas a código do Ruby, que existem na seguinte forma: do parametros { parametros } O exemplo acima poderia ser reescrito na outra variante: ~$ irb irb(main):001:0> def metodo(s) irb(main):002:1> yield(s) irb(main):003:1> => nil irb(main):004:0> metodo(2) do i irb(main):005:1* i + i irb(main):006:1> => 4irb(main):007:0> metodo("2") do i irb(main):008:1* i + i irb(main):009:1> => "22" Não existe diferença funcional entre os dois estilos, mas a forma { } é geralmente usada mais quando o resultado é importante, e do quando o resultado pode ser descartado, principalmente em loops mais extensos.

27 Expressões Agora que experimentamos um pouco com métodos e tipos em Ruby, podemos partir para a verificação das expressões possíveis na linguagem. Essa verificação é interessante, inclusive, por nos permitir comparar as possibilidades que o Ruby oferece em termos de construções sintáticas versus métodos de primeira classe presentes em sua hierarquia de objetos. A maior diferença entre o Ruby e a maioria das outras linguagens é que basicamente tudo o que pode retornar um valor em Ruby, retorna. Isso permite encadear expressões de uma maneira bem eficiente e prática. Por exemplo: ~$ irb irb(main):001:0> a = b = c = 0 => 0 irb(main):002:0> Class.superclass.superclass Isso se aplica também ao que seriam meras declarações em outras linguagens. Por exemplo: rating = if value == 0 "Terrible" elsif value < 2 "Passable" elseif value < 4 "Nice" else "Superb" Basicamente toda expressão em Ruby pode ser usada dessa forma. A sintaxe das principais expressões é a seguinte:

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Bruno Jurkovski Lucas Fialho Zawacki Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Recapitulando... Escopos Constantes Tipagem Métodos Input Estruturas de Controle e Repetição Classes Nativas Blocos

Leia mais

Começando com Ruby on Rails @gibsongabriel

Começando com Ruby on Rails @gibsongabriel Começando com Ruby on Rails @gibsongabriel Yukiriho 'Matz' Matsumoto http://ruby-lang.org/pt/ Ruby é uma linguagem de programação interpretada, com tipagem forte e dinâmica, que tem como foco a simplicidade

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Bruno Jurkovski Lucas Fialho Zawacki Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Por que Ruby? Sintaxe limpa e intuitiva: Por que Ruby? Fortemente orientada à objetos Note que não temos os tipos primitivos,

Leia mais

2 echo "PHP e outros.";

2 echo PHP e outros.; PHP (Hypertext Preprocessor) Antes de qualquer coisa, precisamos entender o que é o PHP: O PHP(Hypertext Preprocessor) é uma linguagem interpretada gratuita, usada originalmente apenas para o desenvolvimento

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

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 1.1 Introdução... 2 1.2 Estrutura do IP... 3 1.3 Tipos de IP... 3 1.4 Classes de IP... 4 1.5 Máscara de Sub-Rede... 6 1.6 Atribuindo um IP ao computador... 7 2

Leia mais

NOVIDADES DO JAVA PARA PROGRAMADORES C

NOVIDADES DO JAVA PARA PROGRAMADORES C PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB NOVIDADES DO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o Conceito de Classes e Objetos Capacitar para a criação de objetos simples

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

Introdução à Linguagem

Introdução à Linguagem Introdução à Linguagem Curso de Nivelamento do PPGMNE Janeiro / 2011 Juliano J. Scremin jjscremin@jjscremin.t5.com.br Um pouco de história Um pouco de história: Nascimento do Python Um pouco de história:

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

Validando dados de páginas WEB

Validando dados de páginas WEB Validando dados de páginas WEB Para que validar os dados? Validar os dados informados pelo usuário garante que sua aplicação funcione corretamente e as informações contidas nela tenha algum sentido. Outro

Leia mais

Tutorial de Matlab Francesco Franco

Tutorial de Matlab Francesco Franco Tutorial de Matlab Francesco Franco Matlab é um pacote de software que facilita a inserção de matrizes e vetores, além de facilitar a manipulação deles. A interface segue uma linguagem que é projetada

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho O que é um Programa? Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais

Leia mais

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 2-1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S) As metas gerais do software de entrada e saída é organizar o software como uma série de camadas, com as mais baixas preocupadas em esconder as

Leia mais

2. Representação Numérica

2. Representação Numérica 2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos

Leia mais

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

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos TUTORIAL Memória Flash Autor: Tiago Lone Nível: Básico Criação: 11/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

Entendendo como funciona o NAT

Entendendo como funciona o NAT Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços

Leia mais

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem

Leia mais

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP AULA 4 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.

Leia mais

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 5. Tratamento de Exceções Introdução e conceitos Capturando exceção usando

Leia mais

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo. Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto

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 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

Parte I. Demoiselle Mail

Parte I. Demoiselle Mail Parte I. Demoiselle Mail Para o envio e recebimento de e-s em aplicativos Java, a solução mais natural é usar a API JavaMail [http:// www.oracle.com/technetwork/java/java/index.html]. Ela provê um framework

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

Algoritmos em Javascript

Algoritmos em Javascript Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays

Leia mais

Programação WEB I Estruturas de controle e repetição

Programação WEB I Estruturas de controle e repetição Programação WEB I Estruturas de controle e repetição Operadores de Incremento Operadores de incremento servem como expressões de atalho para realizar incrementos em variáveis Operadores de Incremento Vamos

Leia mais

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

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

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

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

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

Componentes da linguagem C++

Componentes da linguagem C++ Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras

Leia mais

Python Funções. Introdução à Programação SI1

Python Funções. Introdução à Programação SI1 Python Funções Introdução à Programação SI1 Conteúdo Funções Conceitos Objetivos Modularização Exemplos Exercícios 2 Funções O que são? Qual a função de uma função? 3 Imagine o código 4 Imagine o código

Leia mais

Organização de programas em Python. Vanessa Braganholo vanessa@ic.uff.br

Organização de programas em Python. Vanessa Braganholo vanessa@ic.uff.br Organização de programas em Python Vanessa Braganholo vanessa@ic.uff.br Vamos programar em Python! Mas... } Como um programa é organizado? } Quais são os tipos de dados disponíveis? } Como variáveis podem

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

Resumo da Matéria de Linguagem de Programação. Linguagem C

Resumo da Matéria de Linguagem de Programação. Linguagem C Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis

Leia mais

5 Equacionando os problemas

5 Equacionando os problemas A UA UL LA Equacionando os problemas Introdução Nossa aula começará com um quebra- cabeça de mesa de bar - para você tentar resolver agora. Observe esta figura feita com palitos de fósforo. Mova de lugar

Leia mais

20 Caracteres - Tipo char

20 Caracteres - Tipo char 0 Caracteres - Tipo char Ronaldo F. Hashimoto e Carlos H. Morimoto Até agora vimos como o computador pode ser utilizado para processar informação que pode ser quantificada de forma numérica. No entanto,

Leia mais

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo TUTORIAL DO ACCESS PASSO A PASSO I. Criar um Novo Banco de Dados Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo 3. Clicar em Banco de Dados em Branco 4. Escrever um nome na caixa de diálogo

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

História. Nasceu em 1993, numa discussão entre Yuhikiro Matsumoto e um colega.

História. Nasceu em 1993, numa discussão entre Yuhikiro Matsumoto e um colega. 1 1. Overview 2 História Nasceu em 1993, numa discussão entre Yuhikiro Matsumoto e um colega. Matz procurava por uma linguagem de script orientada a objetos. A primeira versão estável de Ruby (1.2) foi

Leia mais

Javascript 101. Parte 2

Javascript 101. Parte 2 Javascript 101 Parte 2 Recapitulando O Javascript é uma linguagem de programação funcional Os nossos scripts são executados linha a linha à medida que são carregados. O código que está dentro de uma função

Leia mais

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP AGRUPAMENTO DE ESCOLAS DE SANTA COMBA DÃO CURSO PROFISSIONAL DE TÉCNICO DE GESTÃO E PROGRAMAÇÃO DE SISTEMAS INFORMÁTICOS 2012-2015 PROGRAMAÇÃO E SISTEMAS DE INFORMAÇÃO MÓDULO 2 Mecanismos de Controlo de

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

PHP: Formulários e upload de múltiplos arquivos Por Alfred Reinold Baudisch 28 de fevereiro de 2006.

PHP: Formulários e upload de múltiplos arquivos Por Alfred Reinold Baudisch 28 de fevereiro de 2006. PHP: Formulários e upload de múltiplos arquivos Por Alfred Reinold Baudisch 28 de fevereiro de 2006. Veja como montar um formulário para upload de múltiplos arquivos e como processá-lo com o PHP, usando

Leia mais

Trecho retirando do Manual do esocial Versão 1.1

Trecho retirando do Manual do esocial Versão 1.1 Trecho retirando do Manual do esocial Versão 1.1 A rotina de acesso direto ao XML do S-1000, o usuário pode encontrar na opção de cadastro de Empresas do SIP. Sempre que o usuário localizar a figura ao

Leia mais

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o

Leia mais

Curso de Programação Computadores

Curso de Programação Computadores 3 O Primeiro Programa em C Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro 3 O Primeiro Programa em C 3.1 - Introdução Depois dos conceitos

Leia mais

2 Orientação a objetos na prática

2 Orientação a objetos na prática 2 Orientação a objetos na prática Aula 04 Sumário Capítulo 1 Introdução e conceitos básicos 1.4 Orientação a Objetos 1.4.1 Classe 1.4.2 Objetos 1.4.3 Métodos e atributos 1.4.4 Encapsulamento 1.4.5 Métodos

Leia mais

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá. INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem

Leia mais

Programação para Android. Aula 07: Persistência de dados Shared Preferences, Internal e External Storage

Programação para Android. Aula 07: Persistência de dados Shared Preferences, Internal e External Storage Programação para Android Aula 07: Persistência de dados Shared Preferences, Internal e External Storage Persistência de dados Na maioria das aplicações precisamos ter algum tipo de persistência de dados.

Leia mais

Introdução ao PHP. Prof. Késsia Marchi

Introdução ao PHP. Prof. Késsia Marchi Introdução ao PHP Prof. Késsia Marchi PHP Originalmente PHP era um assíncrono para Personal Home Page. De acordo com convenções para atribuições de nomes recursivas do GNU foi alterado para PHP Hypertext

Leia mais

3 Dicas MATADORAS Para Escrever Emails Que VENDEM Imóveis

3 Dicas MATADORAS Para Escrever Emails Que VENDEM Imóveis 3 Dicas MATADORAS Para Escrever Emails Que VENDEM Imóveis O que é um e- mail bem sucedido? É aquele e- mail que você recebe o contato, envia o e- mail para o cliente e ele te responde. Nós não estamos

Leia mais

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo. Manual de Instruções ECO Editor de Conteúdo Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo. O ECO é um sistema amigável e intui?vo, mas abaixo você pode?rar eventuais dúvidas e aproveitar

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

Linguagem algorítmica: Portugol

Linguagem algorítmica: Portugol Programação de Computadores I Aula 03 Linguagem algorítmica: Portugol José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/34 Introdução I Lógica A lógica é usada

Leia mais

Criando um script simples

Criando um script simples Criando um script simples As ferramentas de script Diferente de muitas linguagens de programação, você não precisará de quaisquer softwares especiais para criar scripts de JavaScript. A primeira coisa

Leia mais

Minicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani

Minicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani Minicurso de Python Aula 1 Raphael Lupchinski Marcelo Millani Introdução Python é uma linguagem de programação poderosa e fácil de aprender Possui estruturas de dados eficientes e de alto nível, além de

Leia mais

Manual de configuração do sistema

Manual de configuração do sistema Manual de configuração do sistema (v.1.5.x Beta) Rua México, 119 Sala 2004 Centro Rio de Janeiro, RJ www.doctors-solution.com.br www.simdoctor.com.br contato@simdoctor.com.br Sumário 1. Fazendo seu primeiro

Leia mais

JavaScript. JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos.

JavaScript. JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos. JavaScript JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos. Pode ser usada dentro do próprio arquivo HTML ou estruturada em um

Leia mais

Introdução a Java. Hélder Nunes

Introdução a Java. Hélder Nunes Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais

Leia mais

Iniciação à Informática

Iniciação à Informática Meu computador e Windows Explorer Justificativa Toda informação ou dado trabalhado no computador, quando armazenado em uma unidade de disco, transforma-se em um arquivo. Saber manipular os arquivos através

Leia mais

Na Figura a seguir apresento um exemplo de uma "mini-tabela" de roteamento:

Na Figura a seguir apresento um exemplo de uma mini-tabela de roteamento: Tutorial de TCP/IP - Parte 6 - Tabelas de Roteamento Por Júlio Cesar Fabris Battisti Introdução Esta é a sexta parte do Tutorial de TCP/IP. Na Parte 1 tratei dos aspectos básicos do protocolo TCP/IP. Na

Leia mais

02 - Usando o SiteMaster - Informações importantes

02 - Usando o SiteMaster - Informações importantes 01 - Apresentação do SiteMaster - News Edition O SiteMaster foi desenvolvido para ser um sistema simples de gerenciamento de notícias, instalado em seu próprio computador e com configuração simplificada,

Leia mais

Adapti - Technology Solutions www.adapti.net Leonor cardoso nº 331 Fone : (041) 8844-7805 81240-380 Curitiba - PR MANUAL DO USUÁRIO

Adapti - Technology Solutions www.adapti.net Leonor cardoso nº 331 Fone : (041) 8844-7805 81240-380 Curitiba - PR MANUAL DO USUÁRIO MANUAL DO USUÁRIO 1 Índice Administração de Documentos...2 Lista de documentos criados...3 Criando um novo documento...3 Barra de ferramentas do editor...4 Editando um documento...7 Administrando suas

Leia mais

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo; um objeto; é definido; Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo; class ClasseBase{ é instanciado; $objetobase = new ClasseBase; Caso queira,

Leia mais

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões Prof. MSc. Hugo Souza Se você precisar manter informações sobre seus usuários enquanto eles navegam pelo seu site, ou até quando eles saem

Leia mais

4 O Workflow e a Máquina de Regras

4 O Workflow e a Máquina de Regras 4 O Workflow e a Máquina de Regras O objetivo do workflow e da máquina de regras é definir um conjunto de passos e regras configuráveis. Ao longo de sua execução, um usuário consegue simplificar o seu

Leia mais

1. NÍVEL CONVENCIONAL DE MÁQUINA

1. NÍVEL CONVENCIONAL DE MÁQUINA 1. NÍVEL CONVENCIONAL DE MÁQUINA Relembrando a nossa matéria de Arquitetura de Computadores, a arquitetura de Computadores se divide em vários níveis como já estudamos anteriormente. Ou seja: o Nível 0

Leia mais

1. Instalei o DutotecCAD normalmente no meu computador mas o ícone de inicialização do DutotecCAD não aparece.

1. Instalei o DutotecCAD normalmente no meu computador mas o ícone de inicialização do DutotecCAD não aparece. 1. Instalei o DutotecCAD normalmente no meu computador mas o ícone de inicialização do DutotecCAD não aparece. Para acessar o programa através do comando na barra de prompt, basta digitar dutoteccad e

Leia mais

Polimorfismo. Prof. Leonardo Barreto Campos 1

Polimorfismo. Prof. Leonardo Barreto Campos 1 Polimorfismo Prof. Leonardo Barreto Campos 1 Sumário Introdução; Polimorfismo; Polimorfismo Java; Métodos Abstratos Java Classes Abstratas Java Exercício - Java Polimorfismo C++ Classe Abstrata C++; Funções

Leia mais

Informática I. Aula 6. http://www.ic.uff.br/~bianca/informatica1/ Aula 6-12/09/2007 1

Informática I. Aula 6. http://www.ic.uff.br/~bianca/informatica1/ Aula 6-12/09/2007 1 Informática I Aula 6 http://www.ic.uff.br/~bianca/informatica1/ Aula 6-12/09/2007 1 Ementa Noções Básicas de Computação (Hardware, Software e Internet) HTML e Páginas Web Internet e a Web Javascript e

Leia mais

Manual do Painel Administrativo

Manual do Painel Administrativo Manual do Painel Administrativo versão 1.0 Autores César A Miggiolaro Marcos J Lazarin Índice Índice... 2 Figuras... 3 Inicio... 5 Funcionalidades... 7 Analytics... 9 Cidades... 9 Conteúdo... 10 Referência...

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

APLICAÇÃO REDE APLICAÇÃO APRESENTAÇÃO SESSÃO TRANSPORTE REDE LINK DE DADOS FÍSICA 1/5 PROTOCOLOS DE REDE

APLICAÇÃO REDE APLICAÇÃO APRESENTAÇÃO SESSÃO TRANSPORTE REDE LINK DE DADOS FÍSICA 1/5 PROTOCOLOS DE REDE 1/5 PROTOCOLOS DE O Modelo OSI O OSI é um modelo usado para entender como os protocolos de rede funcionam. Para facilitar a interconexão de sistemas de computadores, a ISO (International Standards Organization)

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

AMBIENTE DE PROGRAMAÇÃO PYTHON

AMBIENTE DE PROGRAMAÇÃO PYTHON Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 1 AMBIENTE DE PROGRAMAÇÃO PYTHON 1.1. Objectivos

Leia mais

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 1 Sumário 1 - Instalação Normal do Despachante Express... 3 2 - Instalação do Despachante Express em Rede... 5 3 - Registrando o Despachante Express...

Leia mais

Série ArcGIS Online I. Aprenda em 20. Módulo 4. Configure pop-ups. www.academiagis.com.br

Série ArcGIS Online I. Aprenda em 20. Módulo 4. Configure pop-ups. www.academiagis.com.br Série ArcGIS Online I Aprenda em 20 Módulo 4 Configure pop-ups Junho/2015 academiagis@img.com.br www.academiagis.com.br 1 Configure pop-ups No módulo 3, você trabalhou com várias propriedades diferentes

Leia mais

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Linguagem e Técnicas de Programação I Operadores, expressões e funções Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Ameliara Freire Operadores básicos Toda linguagem de programação, existem

Leia mais

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB INTRODUÇÃO AO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar a grande semelhança entre Java e C Apresentar a organização diferenciada

Leia mais

Internet e Programação Web

Internet e Programação Web COLÉGIO ESTADUAL PEDRO MACEDO Ensino Profissionalizante Internet e Programação Web 3 Técnico Prof. Cesar 2014 1 SUMÁRIO Criar sites dinâmicos em PHP --------------------------------------------------------

Leia mais

PROGRAMAÇÃO II 4. ÁRVORE

PROGRAMAÇÃO II 4. ÁRVORE 4. ÁRVORE PROGRAMAÇÃO II Prof. Jean Eduardo Glazar Uma árvore impõe uma estrutura hierárquica em uma coleção de itens. Um exemplo familiar é a árvore genealógica. Árvores despontam de forma natural em

Leia mais

COMPILADORES E INTERPRETADORES

COMPILADORES E INTERPRETADORES Aula 16 Arquitetura de Computadores 12/11/2007 Universidade do Contestado UnC/Mafra Curso Sistemas de Informação Prof. Carlos Guerber COMPILADORES E INTERPRETADORES Um compilador transforma o código fonte

Leia mais

Usando o do-file editor Automatizando o Stata

Usando o do-file editor Automatizando o Stata Usando o do-file editor Automatizando o Stata 1 O QUE É O EDITOR DE DO-FILE O Stata vem com um editor de texto integrado, o do-file editor (editor de do-files, em português), que pode ser usado para executar

Leia mais

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza. josineys@inf.ufpr.br

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza. josineys@inf.ufpr.br Fundamentos de Programação Turma CI-240-EST Josiney de Souza josineys@inf.ufpr.br Agenda do Dia Aula 2 (07/08/15) Introdução ao Python História Características Estrutura dos código-fonte Primeiros elementos

Leia mais

EXEMPLO DE COMO FAZER UMA MALA DIRETA

EXEMPLO DE COMO FAZER UMA MALA DIRETA EXEMPLO DE COMO FAZER UMA MALA DIRETA OBS: Para esta nota de aula foi utilizada como referência: Apostila Mala Direta Santos, Jorge Rodrigues dos. Foram adaptados os comando para utilizar mala direta no

Leia mais

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3

Leia mais

Comandos Sequenciais if else, e Switch

Comandos Sequenciais if else, e Switch Introdução à Programação Comandos Sequenciais if else, e Switch 1º ano - ESI e IGE (2011/2012) Engenheiro Anilton Silva Fernandes (afernandes@unipiaget.cv) O computador pensa? Muitas vezes utiliza-se a

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