segunda-feira, 18 de março de 2013

Aprendendo RGSS do zero - Aula 05

Resolução do exercício anterior

def maior_elemento
    a = [5,20,50,98,68,120]
    indice = 0
    for i in 0...a.size # size é igual a length
        if a[i] > a[indice]
        indice = i
    end
    return a[indice]
end


- Introdução

Classes são elementos da programação orientada a objeto, imagine-as como um pai ou mãe que terão um ou vários filhos, estes chamados de instâncias.
A principal característica das classes é a herança, as suas instâncias terão os mesmos métodos e variáveis (somente as de classe).

Assim como definimos métodos, se define classes com uma palavra reservada.

class Nome_da_classe
end


Por conveniência se utiliza inicial maiúscula em classes e minúsculas em métodos.
Para iniciar-se uma classe não basta apenas declarar uma variável, temos que "ativá-la".

class A
    def initialize
        msgbox "Fui criada"
    end
end


A.new # Fui criada

O método initialize é comum em todas as classes, ele é o primeiro método a ser executado quando a classe é criada, porém não é necessário criá-lo.

- Herança

Agora vem a parte interessante, vamos entender este conceito. Veja o exemplo:

class Animal
    attr_accessor :nome
end

class Cachorro < Animal
    def initialize
        @nome = "Cachorro"
    end
end

class Gato < Animal
    def initialize
        @nome = "Gato"
    end
end

msgbox Cachorro.new.nome # Cachorro
msgbox Gato.new.nome     # Gato


Primeira coisa, o método attr_accessor cria um atributo da classe, no caso a variável de classe nome.
Perceba que nome é um símbolo, que é um pouco diferente das variáveis, não vou me aprofundar agora nisso, mas toda vez que for criar um atributo utilize-o desta forma.

Há três tipos de atributos:

attr_reader   => somente de leitura/consulta
attr_writer   => somente de escrita
attr_accessor => leitura e escrita


Segunda coisa, notou o operador ponto? Usamos ele também para nos referirmos à atributos, poderíamos escrever as últimas duas linhas da seguinte forma:

cachorro = Cachorro.new()
msgbox(cachorro.nome)

gato = Gato.new()
msgbox(gato.nome)


Terceira coisa, o operador < nesse caso indica herança, a classe da esquerda herda os métodos e variáveis da classe a direita.

- Métodos de classe e instância

Há dois tipos de métodos em classes, o primeiro é o de classe. Não podemos criar uma instância nele.

class Matematica
    def self.pi
        3.1415
    end
end

Matematica.new.pi # errado
Matematica.pi     # correto


Quando usamos o new, criamos uma instância dessa classe, porém nos métodos de classe não é criada uma instância, o método é simplesmente lido diretamente da classe.

Usamos o self para substituir o nome da classe, assim se mudarmos o seu nome, não será necessário mudar o nome do método, veja como é mais conveniente:

def self.pi
    3.1415
end

def Matematica.pi
    3.1415
end


Já os métodos de instância necessitam que a classe seja criada.

class Matematica
    def pi
        3.1415
    end
end


Matematica.new.pi # 3.1415

- Módulos

Os módulos são basicamente classes, porém não são criadas instâncias pois eles são somente para consulta, devem ser iniciado com letra maiúscula.
Geralmente todas as variáveis são constantes.

module Teste
    VAR = 10
    def self.m
        return VAR+VAR
    end
end

Teste::VAR  # 10
Teste.m     # 20


O operador de módulo é o ::, funciona do mesmo jeito que o . dos attr_x.
Note não é criada uma instância com o uso do new.


Acabamos a primeira parte das aulas, o nível básico. Agora entraremos no nível intermediário.
Não exite em voltar ao começo para ver o que esqueceu e pratique muito, pois não é fácil aprender algo novo, principalmente a programar.

2 comentários:

  1. Muito boa as aulas espero que não pare no meio do caminho igual as outras pessoas que iniciaram tutoriais de rgss e pararam

    ResponderExcluir
    Respostas
    1. Desculpa a demora, obrigado pelo comentário, estive ocupado nessas útlimas semanas.
      Em breve retornarei com mais aulas.

      Excluir