Criando suas próprias classes
Uma classe descreve as características de um objeto, ou seja, seus métodos e propriedades. Classes personalizadas devem ser armazenadas em um arquivo Actionscript externo, que são importados ao compilar o FLA.
Criar suas próprias classes é realmente útil quando se esta desenvolvendo um grande aplicativo Flash, onde armazenar e estruturas partes do código em classes simplificam e organizam o trabalho, além de proteger partes do código, para que estes não sejam alterados, e ainda contar com a grande vantagem de poder reutilizar o código.
Para que você possa entender melhor, um objeto do mundo real, uma pessoa, suas propriedades poderiam ser a idade, sexo e nome; que também possuem comportamentos (métodos), como andar, comer e dormir.
Criando um classe
Crie um arquivo Actionscript e o salve como Pessoa.as. Para criar o arquivo, abra um editor de textos de sua preferência, ou no Flash, menu File > New > Actionscript File.
class Pessoa{ }
Use a palavra-chave class para declarar a classe, e repare que o nome da classe é o mesmo que o nome do arquivo, isto é muito importante, pois caso os nomes não sejam iguais, o arquivo não será compilado corretamente. O conteúdo que fica entre as chaves, é chamado de Corpo da Classe, é onde são definidos os métodos e propriedades da classe.
As propriedades (nome, idade e sexo) são representadas por variáveis, e métodos (andar, comer e dormir) são representadas através de funções.
A última função é um função especial, do tipo construtora. A função construtora deve ter o mesmo nome da classe, esta função é responsável por indicar as instâncias da classe.
class Pessoa{ //propriedades var nome:String; var idade:Number; //método que retorna informações na janela Output function exibirInfo(){ trace(nome + ", tem " + idade + " anos de idade."); } //função construtora function Pessoa(meuNome:String, minhaIdade:Number){ nome = meuNome; idade = minhaIdade; } }
Abra um novo arquivo no Flash, e o salve como “Pessoa-teste.fla”, junto a classe “Pessoa.as”, e adicione o código abaixo ao primeiro quadro na timeline.
var usuario:Pessoa = new Pessoa("Erick", 19); usuario.exibirInfo();
Foi declarado um novo objeto Pessoa a variável usuario, na ultima linha foi chamado o método exibirInfo() da classe Pessoa.
Não foi preciso utilizar o comando import para importar a classe, pois quando é criado uma instância que chama a função construtora, o Flash procura um arquivo AS de nome igual ao da função construtora no Caminho de Classe, que é um conjunto de pastas predeterminadas. Os Caminhos de Classe são divididos em dois:
- Globais: podem estar em duas pastas, um caminho relativo que aponta para a pasta do arquivo atual, e a pasta de Classe, localizada na pastas de configurações do usuário, “C:\Documents and Settings\[USUARIO]\Configurações locais\Dados de aplicativos\Macromedia\Flash 8\en\Configuration\Classes”. Para configurá-lo vá até o menu “Edit > Preferences > Actionscript”, clique em “Actionscript 2.0 Setting”.
- Em nível de documento: definido para um arquivo Flash específico, menu “File > Publish Settings”, clique na aba “Flash”, em seguida em “Setting”.
Criando uma Subclasse
Uma subclasse pode herdar as propriedades e métodos de uma outra classe, a superclasse. Não é possível estender classes estáticas como Math, Mouse, Key.
Para criar uma subclasse, é utilizada a cláusula extends da palavra-chave class. A sintaxe de uma subclasse é a seguinte:
class Subclasse extends Superclasse {}
Poderíamos criar uma classe Adobe, e uma subclasse Flash, a subclasse (Flash) herdará os métodos e propriedades da superclasse (Adobe).
class Flash extends Adobe {}
Métodos e Arquivos públicos, privados e estáticos
No Actionscript 2.0 existem três palavras-chave que definem o acesso de métodos e propriedades.
-
Public:
disponíveis a qualquer chamada. Por padrão qualquer método e propriedades são públicos.class Exemplo{ public var nome:String; }
-
Private: disponíveis apenas na própria classe em que as define, ou em subclasses dessa classe.
class Exemplo{ private var nome:String; }
-
Static: disponíveis apenas através da própria classe, e não mais de uma instância da classe.
class Exemplo{ static var nome:String; }
Os métodos da classe Math são estáticos, portanto não é possível acessar o método random através de uma instância da classe Math, como foi feito no exemplo abaixo.
var rand:Math; rand.random()*3.6; trace(rand);
O correto seria do seguinte modo:
var rand:Number = Math.random()*3.6; trace(rand);
Getter e Setter
Os métodos getter e setter permitem o acesso público a membros privados de uma classe. Quando estiver escrevendo uma classe, é recomendável definir o maior número possível de variáveis de instância como privadas, e adicionar métodos getter e setter quando for preciso.
O método Getter não possui parâmetro algum e sempre retorna um valor, enquanto que o método Setter possui um parâmetro e nunca retorna um valor.
Salve o código abaixo em um novo arquivo AS como “Exemplo.as”.
class Exemplo{ private var nome:String; public function Exemplo(_nome:String){ nome = _nome; } public function getMeuNome():String{ return nome; } public function setMeuNome(valor:String):Void{ nome = valor; } }
Em um novo arquivo Flash, aplique o seguinte código:
var usuario:Exemplo = new Exemplo("Ryu"); var nomeUsuario:String = usuario.getMeuNome(); trace(nomeUsuario); usuario.setMeuNome("Ken") trace(usuario.getMeuNome());
Ainda há como optar por uma sintaxe mais curta e direta, e ainda seguir as boas práticas da OOP. Basta adicionar o atributo de método get e set antes do nome do método, como no exemplo abaixo.
class Exemplo{ private var nome:String; public function Exemplo(_nome:String){ nome = _nome; } public function get meuNome():String{ return nome; } public function set meuNome(valor:String):Void{ nome = valor; } }
Desta forma não é preciso utilizar parênteses ou parâmetros ao chamar os métodos, passando a serem chamados como uma propriedade.
var usuario:Exemplo = new Exemplo("Ryu"); var nomeUsuario:String = usuario.meuNome; trace(nomeUsuario); usuario.meuNome = "Ken"; trace(usuario.meuNome);
Classes Dinâmicas
Por padrão, propriedades e métodos são fixos, portanto, não é possível através de uma instância de classe, criar ou acessar métodos ou propriedades que não foram declarados ou definidos primeiramente na classe. Por exemplo, observe a seguinte classe:
class Usuario{ private var nome:String; private var senha:Number; }
Se tentarmos através do Flash definir a propriedade idade como o valor 19, por ela não existir, esta operação não será concluída.
var usuarioTeste:Usuario = new Usuario(); usuarioTeste.idade = 29;
Ao compilar o código acima, uma mensagem de erro é exibida na janela Output, é o que normalmente deve acontecer, pois quando erramos em alguma parte do código, o Flash nos dá esta resposta, todavia, em alguns casos em que seja necessário criar e acessar métodos e propriedades que não existam em uma classe, durante sua execução, definir a classe como dinâmica torna possível este tipo de operação.
dynamic class Usuario{ private var nome:String; private var senha:Number; }
var usuarioTeste:Usuario = new Usuario(); usuarioTeste.idade = 29; trace(usuarioTeste.idade);
Usando Pacotes
Uma forma efetiva de se organizar classes é utilizando pacotes. Pacote é um diretório, onde existem um ou mais classes, geralmente relacionadas. Um pacote também pode conter subpacotes.
Suponha que tenhamos três classes: Flash, Flex e Photoshop.
class Flash{} class Flex{} class Photoshop{}
Poderíamos armazenar estas classe em um pacote Adobe, e a declaração da classe sofreria uma pequena alteração.
class Adobe.Flash{} class Adobe.Flex{} class Adobe.Photoshop{}
No Flash utilize o comando import, para importar cada classe.
import Adobe.Flash; import Adobe.Flex; import Adobe.Photoshop;
Não é preciso importar uma classe por vez, pode-se utilizar o caractere curinga, o asterisco (*), para importar todo o Pacote, e não é preciso se preocupar com o tamanho do arquivo caso existam muitas classes, pois o Flash importará apenas as classes usadas. Os subpacotes não serão importados.
import Adobe.*;
Os subpacotes seguem o mesmo raciocínio, imagine que a classe Flash, tenha um subpacote Actionscript.
//na classe class Adobe.Flash.Actionscript{}
//no Flash import Adobe.Flash.Actionscript; //ou import Adobe.Flash.*;
A Classe Tween, por exemplo, utiliza tanto pacotes, como subpacotes, e normalmente os desenvolvedores importam o pacote todo. Primeiramente a classe Tween, e em seguidas o pacote easing, através do caractere curinga.
import mx.transitions.Tween; import mx.transitions.easing.*;

December 20th, 2007 at 9:24
Bom post, foi esclarecedor.
Obrigado.
January 17th, 2008 at 9:17
Mas e quando eu agrego as classes ao filme e ao movieclip? e não preciso fazer um “new” no fla?
January 27th, 2008 at 18:41
[...] PLAIN TEXT [...]
June 12th, 2008 at 14:12
Muito bom post!
Parabéns.
June 17th, 2008 at 15:24
Cara muito bom e bem explicadinho, valeu mesmo por disponibilizar este material pra gente ..
Grato.
Alexandre Lambertini
November 14th, 2008 at 0:15
Material de ótima qualidade. Não conhecia e agora vou passar a frequentar o site.
Muito obrigado pelo material.
Abraços
November 14th, 2008 at 9:09
Parabéns Erick!
Pela primeira vez leio algo sobre classes que entendo 100% o conteudo.
Abraço!
November 23rd, 2008 at 19:14
Parabens pelo tutorial, de primeira qualidade.
November 25th, 2008 at 9:59
Parabens, bem esclarecedor…
fã de street fighter neh? XD