Navigation


Aula Extra 4: Módulos

12:06, Postado por: Anderson Porto, Sem comentários


Introdução
Esta aula pode ser considerada como parte do curso básico, os módulos são um conteúdo básico ao qual eu acabei esquecendo de explicar, mas "antes tarde do que nunca" vamos hoje estudar o que são, pra que servem e como se usam os módulos!

O que são?
Módulos são criados quase como as classes, você pode considerar um módulo como um pacote de informações(métodos, constantes e funções) que poderão ser acessadas a qualquer momento por qualquer classe, são magnificamente úteis para o armazenamento de dados como a configuração utilizada em um script, facilitando a vida de todos os scripters.

Para que servem?
Posso dizer que existem 3 tipos básicos de módulos: Armazenamento, Pacote de Funções e Pacote de Métodos. Os 3 tipos podem ser utilizados em um módulo só, ou seja, cada módulo pode ter 3 partes distintas, uma de cada tipo. Apenas vou lembrar que essa classificação é pessoal e não oficial, vou dividí-los por questões didáticas!

Armazenamento
Como o nome ja diz, servem basicamente para armazenar dados constantes tais como configurações ou um banco de dados para os scripts, são fáceis de manusear e muito fáceis de criar, bastando ao scripter declarar as constantes dentro do bloco de códigos do módulo.

Pacote de Funções
Essa "parte" ou "tipo" de módulo exerce uma função bem parecida com uma classe, mas por ser estático, essas funções podem ser utilizadas a qualquer momento, por exemplo, o módulo Math, esse módulo nada mais é que um conjunto de métodos que fazem operações matemáticas avançadas como raiz, logarítmo e etc. Módulos desse tipo são muito usados por scripter que possuem pacotes de funções próprios como o módulo XRXS, RTH...

Pacote de Métodos
Essa é uma finalidade mais complexa dos módulos, ela serve literalmente para economizar linhas de programação, para o script, nada muda, mas para o scripter, a diferença é grande. Um módulo tem suporte para armazenar métodos que serão emprestados, divididos ou como queira chamar, para outras classes, assim, você pode ter um método só e usá-lo em várias classes diferentes!

Como usar?
Usar um módulo é uma tarefa simples, na declaração, apenas mudamos o ja conhecido class por module, Além disso, muitos preferem criar módulos apenas com letras maiúsculas como APS, RTH, SDK... mas existem exceções como o User_Edit do Net Play! AVISO! Módulos não são instanciados, ou seja, não da pra usar o comando new, você deve usar diretamente o nome do módulo!

Armazenamento
Para armazenar dados constantes em um módulo, basta criá-lo e ir adicionando as infos, veja o exemplo:


module APS
DATA = []
DATA = [1,7,21,23,12]
end

Para acessar a constante DATA, basta por o nome do módulo seguido de :: e o nome da variável, no exemplo fica APS::DATA. Você pode armazenar qualquer tipo de dado primitivo dentro de um módulo.


Pacote de Funções
Os pacotes de funções são métodos que são armazenados em um módulo e podem ser usados a qualquer momento. Para criar um método do tipo função, use def self., dentro do bloco de códigos é tudo na mesma, veja o exemplo:


module Math
def self.hipotenusa(catA, catB)
a = sqrt(catA*catA + catB*catB)
return a
end
end

Para usar esse método, basta chamar Math::hipotenusa(3,4) (como é um método, pode usar Math.hipotenusa(3,4)) por exemplo, o script irá retornar o valor da hipotenusa desse triângulo!

Você pode dividir as funções por classes ou módulos internos, por exemplo
[code]
module RPG
module Cache
def self.picture(name)
<..>

Assim, seu módulo pode ter diversos blocos distintos cada um com suas funções


Pacote de Métodos
Pacotes de métodos nada mais são que um ou mais métodos criados dentro de um módulo, mas que só tem utilidade se forem usados dentro de uma classe, para isso usamos o comando include na classe, Veja o exemplo:


module APS
def count
@n += 1
end
end

class Teste
include APS
def initialize
@n = 0
end
end

Veja que a classe Teste não tem nenhum método, mas como utilizei um include APS, o método count presente no módulo, é importado para o APS, note duas coisas, o método count não tem o "self", isso por que métodos com self só podem ser usados diretamente pelo módulo, eles não são importados como include, métodos sem o self não podem ser usados direto pelo módulo, mas são importados. Além disso, note que usei no método um atributo com o mesmo nome do atributo de Teste, sem isso o script não funciona. Você pode criar uma série de métodos e ir importando eles em todas as classes que os utilizarão, assim não tem que criar um por um!

Módulos de Scripters
É comum que com o tempo e experiência, os scripters mais avançados peguem o hábito de usarem sempre as mesmas funções, para economizar tempo, eles criam módulos próprios, esses módulos servem para armazenar tudo o que eles irão utilizar em seus scripts, daí surgem os modulos ja mencionados, como o meu próprio, o APS, ou os mais requintados como o RTH que são cheios de coisas. Nesses módulos, vocês provavelmente encontrarão os 3 tipos de módulo mencionados juntos, dando ênfase para as funções.

No Comment