Tutorial Action Script 3 – 013

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:
[coolcode lang=”actionscript”] public function info():void{

}
[/coolcode] 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:
[coolcode lang=”actionscript”] public  function painelInfo():String {
return PANEL_DATE + ” – ” + PANEL_H + “-” + PANEL_W + “-” + PANEL_TITLE;
}
[/coolcode]

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

Ficando a class assim:

[coolcode lang=”actionscript”] 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;
}
}
}
[/coolcode] 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:

[coolcode lang=”actionscript”] package  teste
{
public class customFullDef extends fullDef
{
public function customFullDef()
{
super();
}
}
}
[/coolcode] aqui a class apenas se encontra extendida, e se a função painelInfo() está disponivel nela e vai devolver:
[coolcode lang=”actionscript”] PANEL_DATE + ” – ” + PANEL_H + “-” + PANEL_W + “-” + PANEL_TITLE;
[/coolcode] podem testar da seguinte forma:
[coolcode lang=”actionscript”] var cfdef:customFullDef = new customFullDeff();

trace  (“->”+cfdef.painelInfo());
//o resultado será “->20/09/2008 – 300 – 400 – Painel personalizado
[/coolcode]

Quando esta função for chamada, o que eu quero é evitar que esta se comporte da mesma maneira, para isso adiciono:
[coolcode lang=”actionscript”] override protected function painelInfo():String {
return “Painel Protegido / sem definições”;
}

[/coolcode] à class, ficando assim:
[coolcode lang=”actionscript”] package  teste
{
public class customFullDef extends fullDef
{
public function customFullDef()
{
super();
}

override protected function painelInfo():String {
return “Painel Protegido / sem definições”;
}
}
}
[/coolcode] se agora chamar a class:
[coolcode lang=”actionscript”] var cfdef:customFullDef = new customFullDeff();

trace  (“->”+cfdef.painelInfo());

//o resultado será “-> Painel Protegido / sem definições”
[/coolcode] 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.


2 comments

add yours

Leave a Comment

Post