Visão geral da linguagem

Os objetos são a base da linguagem do ActionScript 3.0, seus os blocos de construção fundamentais. Cada variável declarada, cada função escrita e cada ocorrência de classe criada é um objeto. Pense em um programa do ActionScript 3.0 como um grupo de objetos que realizam tarefas, respondem a eventos e se comunicam.

Os programadores acostumados à OOP (Programação orientada a objetos) em Java ou C++ podem pensar nos objetos como módulos que contêm dois tipos de membros: dados armazenados em variáveis ou propriedades de membros e comportamento acessível por meio de métodos. O ActionScript 3.0 define objetos de modo similar, com pequenas particularidades. No ActionScript 3.0, os objetos são apenas conjuntos de propriedades. Essas propriedades são contêineres que podem manter não apenas dados, mas também funções ou outros objetos. Se uma função for anexada a um objeto dessa forma, ela será chamada de método.

Embora a definição do ActionScript 3.0 possa parecer um pouco estranha aos programadores com experiência em Java ou C++, na prática, a definição dos tipos de objeto com classes do ActionScript 3.0 é bastante semelhante à forma como as classes são definidas em Java ou C++. A distinção entre as duas definições de objeto é importante ao discutir o modelo de objeto do ActionScript e outros tópicos avançados, mas, na maioria das situações, o termo propriedades significa variáveis de membro de classe, e não métodos. O Adobe ActionScript 3.0 Reference for the Adobe Flash Platform, por exemplo, usa o termo properties para indicar as variáveis ou as propriedades getter-setter. Ela usa o termo métodos para se referir às funções que fazem parte de uma classe.

Uma diferença sutil entre as classes no ActionScript e as classes em Java ou C++ é que, no ActionScript, as classes não são apenas entidades abstratas. As classes do ActionScript são representadas por objetos de classe que armazenam propriedades e métodos da classe. Isso permite o uso de técnicas que podem parecer estranhas aos programadores de Java e C++, como incluir instruções ou código executável no nível superior de uma classe ou um pacote.

Outra diferença entre as classes do ActionScript e as de Java ou C++ é que toda classe do ActionScript tem o que chamamos de objeto deprotótipo. Nas versões anteriores do ActionScript, os objetos de protótipo, vinculados em cadeias de protótipos, serviam coletivamente como a base de toda a hierarquia de herança de classes. No ActionScript 3.0, contudo, os objetos de protótipo desempenham um papel secundário no sistema de herança. Apesar disso, eles poderão ser úteis como uma alternativa às propriedades e aos métodos estáticos se você quiser compartilhar uma propriedade e seu valor com todas as ocorrências de uma classe.

Anteriormente, os programadores de ActionScript avançados podiam manipular diretamente a cadeia de protótipos com elementos de linguagem embutidos especiais. Agora que essa linguagem fornece uma implementação mais madura de uma interface de programação baseada em classes, muitos desses elementos de linguagem especiais, como __proto__ e __resolve, não fazem mais parte da linguagem. Além disso, as otimizações do mecanismo de herança interno que fornece melhorias de desempenho significativas impedem o acesso direto ao mecanismo de herança.