Tutorial Action Script 3 – 013


En continuação a série de tutoriais sobre AS3…

Hoje vamos tomar especial atenção à possibilidade de alterar uma classe “pai” para que possamos controlar, modificar ou até substituir os dados de determinada função dessa mesma class. No action script este tipo de operação pode ser feito usando a palavra override, é dela que vamos falar hoje.

5.4. Re-Escrever métodos em classes.

Outro ponto muito util é no caso de já termos uma class totalmente feita, mas necessitamos de outra igual mas que substitua ou invalide uma ou outra função da class pai. Este método chama-se override, quem em português será parecido com re-escrever, ou seja, escrever por cima / substituir determinados pontos. De notar que só é possivel utilizar este método override em funções que tenham sido declaradas como public, por exemplo:

public function info():void{
 
}

Para demonstrar este método, teremos que fazer algumas alterações na nossa classe que criamos anteriormente, já que é esse exemplo que será usado.

Vamos inicar com o exemplo da nossa ultima class criada e vamos escrever o simples código:

public  function painelInfo():String {
return PANEL_DATE + " - " + PANEL_H + "-" + PANEL_W + "-" + PANEL_TITLE;
}

Adicionando esta função a nossa class devolveria uma suposta string de informação do nosso painel.

Ficando a class assim:

package  teste
{
public class fullDef extends def
{
public const PANEL_DATE:String = "20/09/2008";
 
public function fullDef()
{
 
}
 
public function painelInfo():String {
return PANEL_DATE + " - " + PANEL_H + "-" + PANEL_W + "-" + PANEL_TITLE;
}
}
}

O meu objectivo vai ser criar uma class que irá extender esta anterior e evitar que ela devolva qualquer valor quando for chamada a função painelInfo() ou que devolva um valor por mim definido. Para efectuar esta acção exste um método chamado override que vou passar a explicar.

Criando uma nova class que irá extender esta, ficamos asism:

package  teste
{
public class customFullDef extends fullDef
{
public function customFullDef()
{
super();
}
}
}

aqui a class apenas se encontra extendida, e se a função painelInfo() está disponivel nela e vai devolver:

PANEL_DATE + " - " + PANEL_H + "-" + PANEL_W + "-" + PANEL_TITLE;

podem testar da seguinte forma:

var cfdef:customFullDef = new customFullDeff();
 
trace  ("->"+cfdef.painelInfo());
//o resultado será "->20/09/2008 - 300 - 400 - Painel personalizado

Quando esta função for chamada, o que eu quero é evitar que esta se comporte da mesma maneira, para isso adiciono:

override protected function painelInfo():String {
return "Painel Protegido / sem definições";
}

à class, ficando assim:

package  teste
{
public class customFullDef extends fullDef
{
public function customFullDef()
{
super();
}
 
override protected function painelInfo():String {
return "Painel Protegido / sem definições";
}
}
}

se agora chamar a class:

var cfdef:customFullDef = new customFullDeff();
 
trace  ("->"+cfdef.painelInfo());
 
//o resultado será "-> Painel Protegido / sem definições"

como podem ver podemos interceptar, substituir, incrementar ou até eliminar por completo a utilidade de uma função / metodos normais, mas devem ter em especial atenção que o override não funciona em nenhum dos seguintes tipos/objetos:

  • Variaveis
  • Constantes
  • Objetos/Métodos static (estaticos)
  • Métodos que implementam uma interface
  • Métodos que sejam marcados como final.

No caso em cima foi substituida a resposta normal da nossa class de origem e atribuida uma nova resposta quando essa função for chamada.

Bom, por hoje é tudo, e não se esqueçam que podem ter acesso a todos os tutoriais até aqui escritos aqui.

Duvidas? Use o fórum.

Abraço.

Deixe um comentário ou um Trackback
   

Um Comentário

  1. Dezembro 4, 2009 às 1:29 pm | Permalink

    Sem dúvida mais um otimo trabalho importante pra gente.
    Parabens

Um Trackback

  1. [...] alguns truques que podem ser muito úteis em qualquer linguagem OOP, no caso anterior estávamos a usar variáveis e dados da class estendida (fullDef), mas com esta extensão podemos [...]

Deixe um comentário

O seu email nunca será publicado ou partilhado. Campos obrigatórios estão marcados com um *

*
*