jan-29-2010

ActionScript 3.0 – Módulo 1 Introdução

Módulo 1 – Indrodução ao Action Script 3.0

Introdução

O ActionScript é a linguagem de programação das plataformas Adobe® Flash® Player e Adobe® AIR™. Sua execução é dada através da AVM (ActionScript Virtual Machine). Seu código em geral é compilado no formato bytecode por um compilador, que é incorporado aos arquivos SWF e executado pelo Flash Player ou pelo AIR.

Os compiladors podem ser encontrados nos editores proprietários da Adobe, tais como Flash Builder e Flash CS4, ou em qualquer outra IDE que utilize o Flex SDK.

Como o ActionScript 3.0 foi criado sobre versões anteriores do ActionScript, achei interessante fazer primeiramente uma análise de como o modelo de objeto da linguagem evoluiu.

Histórico do ActionScript

O ActionScript começou como um mecanismo de script simples, com comandos como play e stop, para versões anteriores da ferramenta de autoria conhecida hoje como Flash.

Com a popularização da plataforma no início do século, programadores começaram utilizar todo o potencial da linguagem, criando aplicativos cada vez mais complexos para a internet, entre eles, os web games. Em resposta a esta demanda, as novas versões do player, traziam melhorias consideráveis na linguagem, que por sua vez  ficava mais robusta e amigável.

Action Script 1

A primeira versão da linguagem, que durou de 2000 à 2003, já apresentava algumas funcionalidades interessantes. O código a seguir cria uma classe denominada Shape e define uma propriedade denominada visible que, por padrão, é definida como true:

// base class
function Shape() {}
// Create a property named visible.
Shape.prototype.visible = true;

Essa função construtora define uma classe Shape que pode ser instanciada com o operador new da seguinte maneira:

myShape = new Shape();

E como funcionava a herança? Bom, tínhamos que usar de um pouco de imaginação. Seria algo assim:

// classe filha
function Circle(id, radius)
{
  this.id = id;
  this.radius = radius;
}

// Fazer de Circle uma subclasse de Shape.
Circle.prototype = new Shape();

Observe na figura abaixo a cadeia de protótipos utilizada por esta versão da linguagem:

A classe base no final de cada cadeia de protótipos é a classe Object. Ela contém uma propriedade estática denominada Object.prototype que aponta para o objeto de protótipo base de todos os objetos criados no ActionScript 1.0. O próximo objeto em nossa cadeia de protótipos de exemplo é o objeto Shape. Isso ocorre porque a propriedade Shape.prototype nunca foi definida explicitamente, portanto ela ainda mantém um objeto genérico (uma ocorrência da classe Object). O link final nessa cadeia é a classe Circle que está vinculada a seu protótipo, a classe Shape (a propriedade Circle.prototype mantém um objeto Shape).

Se criarmos uma ocorrência da classe Circle, como no exemplo, ela herdará a cadeia de protótipos da classe Shape:

// Criando uma instancia da classe Circle.
myCircle = new Circle();

Você recorda que linhas acima criamos uma propriedade denominada visible em Shape, correto? Mas eu posso dizer que neste nosso exemplo, a propriedade visible não existe como parte do objeto myCircle, apesar da linha seguinte do código produzir true:

trace(myCircle.visible); // output: true

Mas como isto ocorre? Não é tão complicado como pode parecer. O Flash Player pode verificar se o objeto myCircle herda a propriedade visible percorrendo a cadeia de protótipos.
Ao executar este código, o Flash Player primeiro analisa o objeto myCircle a procura da propriedade denominada visible, mas não encontra essa propriedade. Em seguida, o Flash Player verifica a propriedade Circle.prototype, mas ainda não encontra uma propriedade denominada visible. Continuando na cadeia de protótipos, o Flash Player finalmente encontra a propriedade visible definida no objeto Shape.prototype e fornece o valor daquela propriedade.

Obviamente, simplificamos aqui o funcionamento, pois nosso objetivo não seria analisar afundo o AS1, mas sim conhecer um pouco sobre a cadeia de protótipos que ajudará a compreender o modelo de objeto do ActionScript 3.0.

Action Script 2

O ActionScript 2.0 introduziu novas palavras-chave, como o Class, extends, public e private. Elas permitiram definir classes de uma maneira que seja familiar a qualquer pessoa que trabalhe com linguagens baseadas em classes como Java e C++. É importante compreender que o mecanismo da herança não foi alterado entre o ActionScript 1.0 e o ActionScript 2.0. A segunda versão simplesmente adicionou uma nova sintaxe para definir classes. A cadeia de protótipos funciona da mesma maneira nas duas versões da linguagem.

A nova sintaxe introduzida pelo ActionScript 2.0, mostrada no trecho a seguir, permite definir classes de uma maneira que é considerada intuitiva por muitos programadores:

// base class
class Shape
{
 var visible:Boolean = true;
}

Observe que o ActionScript 2.0 também introduziu verificação de tipos em tempo de compilação. Isso permite declarar que a propriedade visible, no exemplo anterior, deve conter apenas um valor Boolean. A nova palavra-chave extends também simplifica o processo de criação de uma subclasse. Analise o exemplo a seguir:

// Classe Filha
class Circle extends Shape
{
 var id:Number;
 var radius:Number;
 function Circle(id, radius)
 {
   this.id = id;
   this.radius = radius;
 }
}

O construtor está agora declarado como parte da definição da classe e as propriedades de classes, id e radius, também devem ser declaradas explicitamente.

O ActionScript 2.0 também adicionou suporte para a definição de interfaces, o que permite refinar ainda mais os programas orientados a objetos.

Action Script 3

ActionScript 3 é atualmente a linguagem base para os programas Flash CS, Flex e Adobe AIR. Esta é a versão mais significativa desde ActionScript 1.0. Seu core possui os seguintes objetivos:

  • Aumento de performance de 10x até 100x mais rápido;
  • Consistência (organização,  API´s,  comportamentos, etc);
  • Segue o padrão ECMAScript 4, DOM 3.

Uma nova máquina virtual foi elaborada para AS3, ela contempla a compilação Just in Time do ActionScript Byte Code (ABC) para o código nativo da máquina. Outras significativas adições como runtime types, errors, traits, etc. resultam em uma performance e uso de memória muito mais evoluído do que a AVM1. Estas melhorias causaram um incompatibilidade com conteúdos antigos, que agora quando lidos dentro da AVM2, são encapsulados, e podem ser acessados apenas via local Connection.

Abaixo algumas das maiores mudanças desta versão:

  • Run time errors
  • Estrutura de classes
  • Mudanças e organização da API
  • Modificadores de Acesso (comportamento private)
  • Void / void
  • Requisição de parâmetros
  • Escopo e encapsulamento de métodos
  • Display list
  • Event  model
  • Network / loading
  • Garbage collection
  • Classes Seladas

Bom, agora que já conhecemos o histórico da linguagem, no próximo módulo vamos conhecer como AS3 implementa a Orientação a Objetos.

Postado em Técnico