» Início » Desenvolvimento » Flash » Flash e Orientação a Objetos
 
Avaliação: | Publicado em: 20/11/2006
Flash e Orientação a Objetos
André Ponce Webdeveloper, conhecimentos em actionscript, php, sql, java, rails, ajax, entre outros. Interesses em programação para jogos e simulação de fisicas.


Olá comunidade flash e usuários do plugmasters, este é meu primeiro artigo no plugmasters. Para começar irei abordar um assunto muito interessante que é a programação orientada a objetos no flash, que é muito pouco utilizada pelos usuários do flash.

Orientação a objetos

         Mas o que vem a ser orientação a objetos? A orientação a objetos é um paradigma de programação baseado na composição e interação entre diversas unidades de software chamadas de objetos. Um dos focos principais deste tipo de programação é a manutenção e reutilização de código.

Os pontos principais que caracterizam a OOP (Object-oriented programming) são os seguintes elementos:

- Classes

- Objetos

- Métodos

- Atributos

- Modificadores de acesso

- Herança

- Interfaces



Classes

        Uma classe pode ser definida como um template, ou um projeto único, e este projeto único contem suas características únicas que são suas propriedades e métodos. Estas características são isoladas de códigos externos, isto ajuda a manter os códigos mais organizados e reutilizáveis.

        Quando uma classe é instanciada, suas propriedades e métodos passam a ser acessíveis através desta instancia. As classes são únicas no actionscript 2.0 e so podem ser definidas em arquivos externos com a extensão *.as, diferentemente do actionscript 1.0. Veja uma comparação abaixo.

 

- Actionscript 1.0

        As classes podem ser declaradas e instanciadas no próprio keyframe.

//declaração da classe

Classe = function(){

         //método da classe

         this.metodo = function(){

                   //imprime uma frase no output

                   trace("testando classes com actionscript 1.0");

         }

}


//Instanciação da classe

a = new Classe();

//chama o método interno da classe

a.metodo();

 

- Actionscript 2.0

         No as 2.0 as classes são declaradas em arquivos externos com extensão *.as. Existe uma grande evolução na orientação a objetos do AS 1.0 para o AS 2.0. Repare que o nome da classe deve ter o mesmo no do arquivo .as, para definirmos uma classe usamos a keyword class, é necessário definir o tipo de retorno do método, no nosso caso ele não retorna nada (Void).

 

- Crie um arquivo chamado Classe.as e insira o seguinte código;

 

//Declaração da classe

class Classe {

         //método interno da classe

         function metodo():Void{

                   trace("testando classes com actionscript 2.0");

         }

}

 

- crie um arquivo chamado action.fla e insira o seguinte código;

 

//Instanciação da classe

var a:Classe = new Classe();

//chama o método da classe

a.metodo();

 

 

Objetos

         Objetos são instancias de uma classe, ou mesmo copias de uma classe. Cada instancia carrega todas as propriedades e métodos separados de outras instancias. Este conceito pode ser comparados a objetos da bibliotecas do flash, quando você arrasta vários objetos para o palco, na verdade você esta criando copias desse objeto, mas cada um tem suas propriedades independentes dos outros. Vamos a um exemplo.

 

- crie um arquivo chamado Classe.as e insira o seguinte código;

 

//Declaração da classe

class Classe {

         //método da classe

         function metodo(texto:String):Void{

                   trace(texto);

         }

}

 

 

- crie um arquivo chamado action.fla e insira o seguinte código;

//instanciação da classe

var a:Classe = new Classe();

//outra instanciação da classe

var b:Classe = new Classe();

 

//chama o método da classe

a.metodo("Este é o texto da instancia 'a'");

//chama o método da classe

b.metodo("Este é o texto da instancia 'b'");

 

Métodos

         Método é qualquer função definida dentro de uma classe. Métodos definem as ações de uma classe, são através de métodos que podemos realizar todas as tarefas de uma classe. Neste exemplo criamos um método que recebe um numero e imprime no output do flash a sua raiz quadrada.

 

- crie um arquivo chamado Classe.as e insira o seguinte código;

 

//Declaração da classe

class Classe{

         //método da classe

         function raiz(numero:Number):Void{

                   trace(Math.sqrt(numero));

         }

}

 

- crie um arquivo chamado action.fla e insira o seguinte código;

 

//inetanciação da classe

var a:Classe = new Classe();

//chama o método da classe

a.raiz(36);

 

 

Atributos

São variáveis que definem a estrutura de uma classe. Cada variável ao ser declarada fica alocada na memória, ate que sejam removidas através do comando delete ou seja removida automaticamente quando não estava mais sendo utilizada, neste caso tratam-se de variáveis temporárias.

No actionscript 2.0 existe a possibilidade de tipar as variáveis, não é obrigatório, mas é recomendável visto que isso ajuda a evitar muitos erros de tipos, e proporciona um melhor controle sobre as variáveis;

 

Veja o exemplo:

 

- crie um novo arquivo e insira o seguinte código;

 

//a variavel numero é declarada e recebe o valor 5

numero = 5;

trace(numero);

 

//como a variavel numero nao tem tipagem, ela pode receber qualquer valor, agora estamos atribuindo uma string

numero = "b";

trace(numero);

 

- Agora substitua o código anterior por este;

 

//variavel declarada com o tipo Number

var numero:Number;

numero = 5; // funciona

trace(numero);

 

//ao tentar atribuir uma string a variavel do tipo number um erro é gerado

numero = "b"; //não funciona

trace(numero);

 

- Veja como funcionam as variáveis em uma classe

 

- crie um arquivo chamado Classe.as e insira o seguinte código;

 

//declara da classe

class Classe{

     

         //declara a variavel com o tipo Number

         var numero:Number;

         //declara a variavel que vai receber o resultado, que tambem será um numero

         var rasultado:Number;

 

         //método que fará a operação

         function raiz():Void{

                   this.rasultado = Math.sqrt(numero);

         }

}

 

- crie um arquivo chamado action.fla e insira o seguinte código;

 

//cria uma instância da classe

var a:Classe = new Classe();

//define um valor para o atributo 'numero' da classe

a.numero = 9;

//chama o método da classe que realiza a operação

a.raiz();

//imprime no output o resultado

trace(a.rasultado);

 

 

MODIFICADORES DE ACESSO

         No actionscript 2.0 existem 2 modificadores de acesso, public e private. Eles servem para controlar o acesso a métodos e atributos.

Por default  todos são public, ou seja, são acessíveis de qualquer lugar, o uso da keyword public é a penas por uma questão de estética e organização.

        Caso você precise restringir o acesso a um método ou atributo de uma classe, use a keyword private, neste caso o seu acesso se restringe apenas dentro da classe especificada.

 

Exemplos:

 

- crie um arquivo chamado Classe.as e insira o seguinte código;

 

//declara da classe

class Classe{

         //declara a variavel com o tipo Number e modificador public

         public var numero:Number = 5;

         //declara a variavel com o tipo String e modificador private

         private var letra:String = "b";

}

 

- crie um arquivo chamado action.fla e insira o seguinte código;

 

//cria uma instância da classe

var a:Classe = new Classe();

//imprime o valor do atributo numero

trace(a.numero);

//tenta imprimir o valor do atributo letra, mas como é um atributo privado, um erro é gerado

trace(a.letra);

 

 

HERANÇA

        É a aquisição de atributos e métodos de uma outra classe por meio da instanciação de um objeto. A classe que herda passa a se tornar filha da classe que extends suas propriedade e métodos. Este recurso é muito importante em OOP.

        Imagine que você precise criar uma classe que terá as mesmas propriedades e métodos de uma classe já existente, mas você queira acrescentar seus próprios métodos e propriedades. Você pode simplesmente usar a keyword extends para recuperar tudo que estiver na classe pai.

 

Vamos ao exemplo:

 

- Neste exemplo vamos criar uma classe que vai herdar todas a propriedades e métodos da classe MovieClip(_x, _y, _alpha e etc ...), e redefinir alguns eventos para que, quando o movieClip seja pressionado possa ser arrastado pelo palco e imprima o output suas coordenadas _x e _y.

 

Para começar crie um novo arquivo .fla, e no palco crie uma figura qualquer e converta em um movieclip. Agora vá na biblioteca e abra o painel de propriedades do seu movieclip criado, a tela é a seguinte:

 


Marque a opção ‘Export For ActionScript’, e no campo ‘AS 1.0 Class’, insira ‘Classe’, que será a classe que vamos criar.

 

Agora crie um arquivo chamado Classe.as e insira o seguinte código:

 

//declara a classe que herda as propriedades e metodos da classe MovieClip

class Classe extends MovieClip{

        

         //reescrvemos o evento onPress

         private function onPress():Void{

                   //começa o drag

                   this.startDrag();

                   //a cada frame ele chamará o método posicao

                   this.onEnterFrame = posicao;

                   /*redefinimos o evento onReleaseOutside para receber o evento onPress

                   esta linha serve para corrigir um pequeno bug, se vc apagar notará que

                   ao clicar no extremo do MovieClip e soltar ele continuará com o drag*/

                   this.onReleaseOutside = onRelease;

         }

        

         //reescrevemos o evento onRelease

         private function onRelease():Void{

                   //para o drag

                   this.stopDrag();

                   //para o evento onEnterFrame

                   this.onEnterFrame = undefined;

         }

        

         //metodo posicao que imprime as coordenadas _x e _y

         private function posicao():Void{

                   trace("Posição X: " + this._x);

                   trace("Posição Y: " + this._y);

         }

}

 

Agora volte para o seu filme .fla e de um ctrl+enter e veja o resultado.

 

 

INTERFACES

         São classes que só podem conter assinaturas de métodos. A primeira idéia que interfaces transmitida é de que serve apenas para uma questão de estética e organização, mas trata-se de um componente importante da engenharia de software que pode resolver e evitar diversos problemas de relacionamentos entre classes. Não mostraremos exemplos, pois seu uso é bastante restrito e precisaria de um artigo especifico apenas para este assunto, mas se quiser saber um pouco mais a respeito acesse este link referente ao FUGPE.

http://br.groups.yahoo.com/group/fugpe/message/2006

 

 

A orientação a objetos é um paradigma de programação, e trata-se de um assunto muito extenso, neste artigo eu pretendo apenas dar uma visão para quem já conhece o actionscript, mas não conhece a orientação a objetos. Caso queria se aprofundar mais no assunto veja os links abaixo.

 

http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto

http://br.groups.yahoo.com/group/fugpe/

http://www.flash-brasil.com.br/?q=node/9

http://www.adobe.com/devnet/flash/actionscript.html

 

Obrigado e ate o próximo.

Abraços!

 

Plugmasters, plugando webmasters de todo o Brasil!
Arquivos anexos ao artigo

Ajudou muito!!!
Deixe mais ums pra colabolar c o pessual.. veja umas idéias minhas também. preciso de interação. www.fotopatos.com.br