Curso AS3

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.*;

17 Responses to “Criando suas próprias classes”

  1. Giovanni Silva Says:

    Bom post, foi esclarecedor.
    Obrigado.

  2. Rubia Says:

    Mas e quando eu agrego as classes ao filme e ao movieclip? e não preciso fazer um “new” no fla?

  3. farley » Blog Archive » Criando suas próprias classes Says:

    [...] PLAIN TEXT [...]

  4. Rômulo Says:

    Muito bom post!
    Parabéns.

  5. Lambertini Says:

    Cara muito bom e bem explicadinho, valeu mesmo por disponibilizar este material pra gente ..
    Grato.

    Alexandre Lambertini

  6. Thiago Rodrigues Says:

    Material de ótima qualidade. Não conhecia e agora vou passar a frequentar o site.
    Muito obrigado pelo material.

    Abraços

  7. kenedy Says:

    Parabéns Erick!
    Pela primeira vez leio algo sobre classes que entendo 100% o conteudo.

    Abraço!

  8. Fernando Aureliano Says:

    Parabens pelo tutorial, de primeira qualidade.

  9. TSonic Says:

    Parabens, bem esclarecedor…
    fã de street fighter neh? XD

  10. Rafael Says:

    Muito bom o post! Bem sucinto e claro! Ajudou mto!
    Obrigado!

  11. Ernani José:EJBYTE Says:

    Muito bom o post, gostei muito do site, bem explicado mesmo!
    valew! vou indicar o site para as pessoas tmbm!

  12. Thiago Says:

    Só eu que testei e deu errado ou alguém mais?

    erro1: 1046: Type was not found or was not a compile-time constant: Pessoa.
    erro2: 1180: Call to a possibly undefined method Pessoa.

    Esses dois erros aconteceram… programo em AS a uns 2 meses e tow migrando pra orientação objetos completo agora, só fiz copiar e colar sua instruções, deu isso.

    Aguardo esclarecimento.

  13. Leo Says:

    Putz, me salvou no AS3, tava apanhando pra isolar totalmente o .fla das classes AS. gostei muito da seguinte parte:
    m nível de documento: definido para um arquivo Flash específico, menu “File > Publish Settings”, clique na aba “Flash”, em seguida em “Setting”.

  14. Everton Says:

    Obrigado ficou show seu tutorial valeu mesmo;

  15. Gabriel Says:

    Excelente post. Ajuda muito.

  16. tiago Says:

    oi, como crio uma classe para usar em um mc como linkage usando on release, loadmovie, gotoandstop, essas coisas, tanto em as2 e em as3, preciso urgente pra um trabalho, muito obrigado

  17. Ale Says:

    porra velho …… ensina certo desgraçado …… ta com pregruiça de escrever o maldito

Leave a Reply