Dinasty RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dinasty RPG

Fórum para interessados em Rpgs, Indie Games, RPG Maker e afins
 
InícioPortalProcurarÚltimas imagensRegistarEntrar

 

 [RGSS]Lição 11:Programação: Herança, Alias e modelagem de Procedimentos

Ir para baixo 
AutorMensagem
Zendion
Cordenador
Cordenador
Zendion


Mensagens : 372
Data de inscrição : 31/07/2011
Idade : 27
Localização : Leme

[RGSS]Lição 11:Programação: Herança, Alias e modelagem de Procedimentos Empty
MensagemAssunto: [RGSS]Lição 11:Programação: Herança, Alias e modelagem de Procedimentos   [RGSS]Lição 11:Programação: Herança, Alias e modelagem de Procedimentos I_icon_minitimeDom Ago 14, 2011 3:36 pm

Lição 11 - Programação: Herança, Alias e modelagem de Procedimentos

OLÁ AMIGOS MAKERS !!

Fiquei muito tempo afastado do RMXP. Me aprofundei no estudo do Game Maker, enquanto estudava DotNet pra entrar num novo emprego. Entrei no emprego, e agora tudo mudou. Tô tendo que estudar programação 16 horas por dia e tudo que antes era divertido passou a ser "Pra hora que der". Acabei descobrindo algumas coisas interessantes sobre programação que apenas o Ruby possui, e resolvi compartilhar, já que é algo que muitos perguntam.... Vamos lá.

Nas primeiras aulas eu disse que o RMXP é uma linguagem orientada a objeto que suporta herança.

O que isso significa??

Significa que as Classes "Filho" herdam das Classes "Pai" seus métodos, procedimentos, funções e variáveis. Por exemplo:

Todas as Classes de Janela, em suas declarações, seus nomes vem precedidos de um sinal de <(menor) e o nome da Classe da qual ela está herdando. Veja:

Código:
class Window_Selectable < Window_Base


Veja que a classe Window_Selectable é filha de Window_Base. Isso significa que todos os filhos de Window_Selectable também herdarão a Classe Window_Base. Isso é algo simples de ver na Classe Window_MenuStatus. Ela é Filha de Window_Selectable, porém ela invoca o método draw_actor_name, proveniente da Classe Window_Base.

Sim, mas e dae??

A programação orientada a objeto foi feita para que escrevamos menos código, pois, usando a herança, podemos apenas invocar métodos e funções das classes pai sem ter que reescrevê-los. Porém, algumas linguagens como C, C++ e Java(e agora Ruby) permitem que você complemente um método/procedimento/função sem ter que reconstruí-lo(claro que depende da necessidade, se o metódo fará algo completamente diferente do original, você tem que reconstruir) e sem ter que "alcançar" a Classe pai. ou seja, as modificações podem ser Globais(atingir a Classe pai) ou locais(Atingir apenas a Classe atual). Para isso usamos um método muito visto nos scripts MADE-IN-USA, o método Alias.

O método Alias remomeia método/procedimento/função em tempo de execução, de forma a não mais direcionar as chamadas para o original, e sim para o novo método/procedimento/função que será escrito para complementar o antigo. Vamos ver um exemplo simples?

Abra um projeto no RMXP, Abra o Editor de Scripts e insira uma nova sessão antes do Main. Dentro dela declare isto:

Código:
class Window_Base < Window
  alias draw_actor_name_old draw_actor_name
  def draw_actor_name(actor, x, y)
    self.contents.font.color = disabled_color
    self.contents.draw_text(x + 2, y + 2, 120, 32, actor.name)
    draw_actor_name_old(actor, x, y)
  end
end


Observe que eu estou direcionando para a Classe Window_Base. Com isso, esta modificação alcançará todas as classes que forem "filhas" dela(no nosso caso, Todas as classes Window_).

Rode o projeto e abra o menu. Observe como ficou o efeito de "sombra" no nome dos heróis. Passeie pelo menu e olhe todas as janelas que mostram o nome dos heróis. Em todas, o efeito de "sombra" aparece.
Aparece pois modificamos a Classe MOR, de onde todas as outras classes são filhas. Modifique agora o Script que escrevemos para este:

Código:
class Window_MenuStatus < Window_Selectable
  alias draw_actor_name_old draw_actor_name
  def draw_actor_name(actor, x, y)
    self.contents.font.color = disabled_color
    self.contents.draw_text(x + 2, y + 2, 120, 32, actor.name)
    draw_actor_name_old(actor, x, y)
  end
end

Rode o jogo. Observe que, apenas a tela principal, a MenuStatus, possui o efeito, e todas as outras não.

Mas e dae, pra quê isso vai me servir??

Bem, o exemplo mostra tudo, se você desejar fazer uma alteração global, voce pode iniciar novamente a classe, como foi feito no exemplo, remomear o método/procedimento/função usando o método alias como foi usado no exemplo, e modificá-lo a vontade.
Vale lembrar que o Ruby, assim como outras linguagens OOP, não permite dois método/procedimento/função com o mesmo nome, então quando usar Alias, lembre-se de dar a ele um nome que não exite ainda no seu projeto, ou você receberá a mensagem Stack level to deep, indicando que o método/procedimento/função está duplicado.

A sintaxe do método alias é essa:

alias nome_novo nome_antigo

Um método pode ser renomeado várias vezes dentro do mesmo projeto, desde que seguidas as normas acima citadas.
Algumas programações OOP, como o DotNet(minha linguagem de trabalho agora) permite o polimorfismo, ou seja, eu posso ter vários métodos dentro de uma classe com o mesmo nome, diferenciando-os pelos parametros passados ou pelo tipo de parametro. Neste caso, a Engine da linguagem se encarrega de descobrir qual dos metodos será chamado.

Acho que por hoje é só. Deu pra esclarecer o que é e como funciona o método alias e como podemos tirar proveito do que já existe no RMXP pra criarmos nossos proprios scripts.

Espero que eu tenha mais tempo para escrever mais aulas, pois o assunto RGSS é realmente muito extenso.

Até a proxíma.

Créditos a João Neto por produzir o curso
FUI
Ir para o topo Ir para baixo
https://www.youtube.com/user/Zendionx
 
[RGSS]Lição 11:Programação: Herança, Alias e modelagem de Procedimentos
Ir para o topo 
Página 1 de 1
 Tópicos semelhantes
-
» [RGSS]Lição 2:Classes, Procedimentos e Herança
» [RGSS]Lição 7:Estruturas de repetição
» [RGSS]Lição 8.0:Scenes - A Estrutura
» [RGSS]Lição 1:Fundamentos basicos
» [RGSS]Lição 9:Janelas - Um pouco sobre a Window_Selectable

Permissões neste sub-fórumNão podes responder a tópicos
Dinasty RPG  :: Centro de Aprendizagem :: Curso de RGSS/RGSS2-
Ir para: