|
||
|
|
|
Avaliação:
![]() ![]() ![]() ![]() | Publicado em: 20/11/2006Flash 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
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"); } }
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:
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
Artigos relacionados
Links relacionados
simone <sirizo@hotmail.com>
Ajudou muito!!!
![]() ![]() ![]() ![]() ![]() JPaulo <fotopatos@yahoo.com.br>
Deixe mais ums pra colabolar c o pessual.. veja umas idéias minhas também. preciso de interação. www.fotopatos.com.br
![]() ![]() ![]() ![]() ![]() ![]() |
|
|
|