Trabalho com o objetos

O ActionScript é conhecido como uma linguagem de programação orientada a objetos. A programação orientada a objetos é simplesmente uma abordagem a essa programação. Na verdade, não é nada além de uma forma de organizar o código em um programa, usando objetos.

Antes o termo "programa de computador" era definido como uma série de etapas ou instruções que o computador realiza. De forma conceitual, então, você pode imaginar um programa de computador como uma longa lista de instruções. No entanto, na programação orientada a objetos, as instruções do programa são divididas entre objetos diferentes. O código é agrupado em pedaços de funcionalidade; por isso, os tipos relacionados de funcionalidade ou as informações relacionadas são agrupados em um contêiner.

Adobe Flash Professional

Se você já trabalhou com símbolos no Flash Professional, então está acostumado a trabalhar com objetos. Imagine que você definiu um símbolo de clipe de filme, como o desenho de um retângulo, e colocou uma cópia dele no Palco. Esse símbolo de clipe de filme também é (literalmente) um objeto no ActionScript; é uma ocorrência da classe MovieClip.

Há diversas características do clipe de filme que você pode modificar. Quando está selecionado, você pode trocar os valores no inspetor de propriedades, como a coordenada x ou sua largura. Você também pode fazer vários ajustes de cor, como trocar o alfa (transparência) ou aplicar um filtro de sombra projetada. Outras ferramentas do Flash Professional permitem fazer mais alterações, como usar a ferramenta Transformação livre para girar o retângulo. Todas essas formas por meio das quais você pode modificar um símbolo de clipe de filme no Flash Professional também estão disponíveis no ActionScript. Você modifica o clipe de filme no ActionScript alterando os dados que são colocados juntos em um único pacote chamado objeto MovieClip.

Na programação orientada a objetos do ActionScript, há três tipos de características que qualquer classe pode incluir:

  • Propriedades

  • Métodos

  • Eventos

Esses elementos ajudam a gerenciar as partes dos dados usadas pelo programa e a decidir quais ações são executadas em uma determinada ordem.

Propriedades

Uma propriedade representa uma das partes dos dados que são compactados em um objeto. Um exemplo de objeto de música pode ter propriedades chamadas artist e title ; a classe MovieClip tem propriedades como rotation , x , width e alpha . Você trabalha com propriedades como variáveis individuais. Na verdade, você pode pensar nas propriedades como simplesmente as variáveis "filho" contidas em um objeto.

A seguir, apresentamos alguns exemplos de código do ActionScript que usa propriedades. Esta linha de código move o MovieClip chamado square para 100 pixels na coordenada x:

square.x = 100;

Este código usa a propriedade de rotação fazendo com que o MovieClip square gire para corresponder à rotação do MovieClip triangle :

square.rotation = triangle.rotation;

Este código altera a escala horizontal do MovieClip square para que ele fique uma vez e meia maior do que antes:

square.scaleX = 1.5;

Observe a estrutura comum: você usa uma variável ( square , triangle ) como o nome do objeto, seguido de um ponto ( . ) e, depois, o nome da propriedade ( x , rotation , scaleX ). O ponto, conhecido como operador ponto , é usado para indicar que você está acessando um dos elementos filho de um objeto. A estrutura inteira reunida, "nome da variável-ponto-nome da propriedade", é usada como uma única variável, como um nome para um único valor na memória do computador.

Métodos

Um método é uma ação que um objeto pode realizar. Por exemplo, suponhamos que você tenha feito um símbolo de clipe de filme no Flash Professional com vários quadros-chave e animação em sua linha de tempo. Esse clipe de filme pode reproduzir, ou parar, ou ser instruído a mover o indicador de reprodução para um quadro em particular.

Este código instrui o MovieClip chamado shortFilm a iniciar a reprodução:

shortFilm.play();

Esta linha faz o MovieClip chamado shortFilm parar a reprodução (o indicador de reprodução pára; é como pausar um vídeo):

shortFilm.stop();

Este código faz um MovieClip chamado shortFilm mover o indicador de reprodução para o Quadro 1 e parar a reprodução (é como retroceder um vídeo):

shortFilm.gotoAndStop(1);

Os métodos, assim como as propriedades, são acessados escrevendo-se o nome do objeto (uma variável), um ponto e o nome do método seguido de parênteses. Os parênteses são uma forma de indicar que você está chamando o método ou, em outras palavras, instruindo o objeto a executar aquela ação. Às vezes, os valores (ou as variáveis) são colocados entre parênteses, como uma forma de passar adiante informações adicionais necessárias para executar a ação. Esses valores são conhecidos como parâmetros de método. Por exemplo, o método gotoAndStop() precisa de informações sobre para qual quadro ir, e por isso requer um único parâmetro entre parênteses. Outros métodos, como play() e stop() , são auto-explicativos, por isso não requerem informações extras. No entanto, eles ainda são escritos com parênteses.

Diferentemente das propriedades (e variáveis), os métodos não são usados como alocadores de espaço de valor. Entretanto, alguns métodos podem executar cálculos e retornar um resultado que pode ser usado como uma variável. Por exemplo, o método toString() da classe Number converte o valor em sua representação de texto:

var numericData:Number = 9; 
var textData:String = numericData.toString();

Por exemplo, você usaria o método toString() se quisesse exibir o valor de uma variável Number em um campo de texto na tela. A propriedade text da classe TextField é definida como um String, por isso pode conter apenas valores de texto. (A propriedade do texto representa o conteúdo de texto real exibido na tela.) Essa linha de código converte o valor numérico na variável numericData para texto. Então, ela cria o valor apresentado na tela no objeto TextField, chamado calculatorDisplay :

calculatorDisplay.text = numericData.toString();

Eventos

Um programa de computador é uma série de instruções que o computador executa em etapas. Alguns programas de computador simples consistem em nada mais do que algumas etapas que ele executa e depois é encerrado. Entretanto, os programas do ActionScript são criados para continuar a execução e esperar a entrada do usuário ou a ocorrência de outras coisas. Os eventos são mecanismos que determinam quais instruções o computador executa em um determinado momento.

Basicamente, os eventos são fenômenos que acontecem, sobre os quais o ActionScript é informado e aos quais pode responder. Muitos eventos estão relacionados com a interação do usuário, como o usuário clicar em um botão ou pressionar uma tecla no teclado. Também há outros tipos de eventos. Por exemplo, se você usar o ActionScript para carregar uma imagem externa, há um evento que poderá avisá-lo quando o carregamento da imagem for concluído. Quando um programa ActionScript está sendo executado, conceitualmente ele apenas "senta" e espera que certas coisas aconteçam. Quando essas coisas acontecem, o código específico do ActionScript que você especificou para esses eventos é executado.

Tratamento de eventos básico

A técnica para especificar determinadas ações que devem ser executadas em resposta a eventos específicos é conhecida como tratamento de eventos . Durante a escrita do código do ActionScript para executar o tratamento de eventos, há três elementos importantes a serem identificados:

  • A origem do evento: para qual objeto o evento deverá ocorrer? Por exemplo, em qual botão se clicou, ou qual objeto Loader está carregando a imagem? A origem do evento também é conhecida como destino do evento . Tem esse nome porque é o objeto no qual o computador focaliza o evento (ou seja, onde o evento realmente acontece).

  • O evento: o que vai acontecer, a qual fenômeno você deseja responder? É importante identificar o evento específico, porque muitos objetos acionam diversos eventos.

  • A resposta: quais etapas você deseja executar quando o evento acontecer?

Em qualquer momento no qual você grava o código ActionScript para manipular eventos, ele exige esses três elementos. O código segue esta estrutura básica (os elementos em negrito são espaços reservados que você preencheria para o seu caso específico):

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
  
eventSource.addEventListener(EventType.EVENT_NAME, eventResponse);

Esse código faz duas coisas. Primeiro, ele define uma função, que é a forma de especificar as ações que você deseja executar em resposta ao evento. Em seguida, ele chama o método addEventListener() do objeto de origem. Chamar addEventListener() essencialmente "inscreve" a função no evento especificado. Quando o evento acontece, são realizadas as ações da função. Pensemos em cada uma dessas partes com mais detalhes.

Uma função fornece um meio de agrupar as ações, com um único nome, que é como um nome de atalho, para executar as ações. Uma função é idêntica a um método, com a diferença de que não está necessariamente associada com uma classe específica. (Na verdade, o termo "método" poderia ser definido como uma função que está associada com uma classe em particular.) Durante a criação de uma função para tratamento de eventos, você escolhe o nome da função (chamada de eventResponse neste caso). Você também especifica um parâmetro (chamado eventObject neste exemplo). A especificação de um parâmetro de função é como declarar uma variável, por isso você também deve indicar o tipo de dados do parâmetro. (Neste exemplo, o tipo de dados do parâmetro é EventType .)

Cada tipo de evento que você deseja escutar é associado a uma classe do ActionScript. O tipo de dados que você define para o parâmetro de função é sempre a classe associada ao evento específico ao qual deseja responder. Por exemplo, um evento click (acionado quando o usuário clica em um item) é associado à classe MouseEvent. Para escrever uma função de ouvinte para um evento click , você define essa função com um parâmetro com o tipo de dados MouseEvent. Finalmente, entre chaves ( { ... } ), você escreve as instruções que deseja que o computador execute quando o evento ocorrer.

A função de manipulação de eventos é escrita. Em seguida, você diz para o objeto de origem de evento (o objeto para o qual o evento acontece, por exemplo, o botão) que você deseja que ele chame sua função quando o evento acontecer. Você registra sua função com o objeto de origem de evento chamando o método addEventListener() daquele objeto (todos os objetos que têm eventos também têm um método addEventListener() ). O método addEventListener() usa dois parâmetros:

  • O primeiro é o nome do evento específico ao qual você deseja responder. Cada evento está afiliado com uma classe específica. Todas as classes de evento têm um valor especial, que é como um nome exclusivo, definido para cada um de seus eventos. Você usa esse valor para o primeiro parâmetro.

  • O segundo é o nome da função de resposta do evento. Observe que um nome de função é escrito sem parênteses quando transmitido como um parâmetro.

Processo de tratamento de eventos

Veja a seguir uma descrição passo a passo do processo que acontece durante a criação de um ouvinte de eventos. Neste caso, é um exemplo de criação de uma função de ouvinte que é chamada quando um objeto myButton é clicado.

O código real escrito pelo programador é o seguinte:

function eventResponse(event:MouseEvent):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
myButton.addEventListener(MouseEvent.CLICK, eventResponse);

Apresentaremos a seguir o funcionamento desse código, quando executado:

  1. Quando o arquivo SWF é carregado, o computador registra o fato de que há uma função chamada eventResponse() .

  2. Em seguida, o computador executa o código (especificamente, as linhas de código que não estão contidas em uma função). Neste caso, é apenas uma linha de código: chamar o método addEventListener() no objeto de origem do evento (chamado myButton ) e transmitir a função eventResponse como um parâmetro.

    Internamente, myButton mantém uma lista de funções que estão ouvindo cada um de seus eventos. Quando o método addEventListener() é chamado, myButton armazena a função eventResponse() em sua lista de ouvintes de evento.

  3. Em algum momento, o usuário clica no objeto myButton , acionando o evento click (identificado como MouseEvent.CLICK no código).

    Então, acontece o seguinte:

    1. É criado um objeto que é uma ocorrência da classe associada com o evento em questão (MouseEvent neste exemplo). Para muitos eventos, esse objeto é uma ocorrência da classe Event. Para os eventos de mouse, é uma ocorrência MouseEvent. Para outros eventos, é uma ocorrência da classe que está associada com esse evento. Esse objeto criado é conhecido como o objeto de evento e contém informações específicas sobre o evento que ocorreu: qual é o tipo de evento, onde ele ocorreu e outras informações específicas de evento, se aplicável.

    2. Em seguida, o computador verifica a lista de ouvintes de eventos armazenada por myButton . Ele verifica todas essas funções, chamando uma de cada vez e transmitindo o objeto de evento para a função como um parâmetro. Como a função eventResponse() é um dos ouvintes de myButton , como parte desse processo, o computador chama a função eventResponse() .

    3. Quando a função eventResponse() é chamada, o código nela é executado e as ações especificadas são realizadas.

Exemplos de tratamento de eventos

A seguir há outros exemplos concretos do código de manipulação de evento. Esses exemplos servem para lhe dar uma ideia de alguns elementos de evento comuns e as possíveis variações disponíveis quando você grava o código de manipulação de evento:

  • Clicar em um botão para iniciar a reprodução do clipe de filme atual. No exemplo a seguir, playButton é o nome da ocorrência do botão, e this é um nome especial que significa “o objeto atual”:

    this.stop(); 
     
    function playMovie(event:MouseEvent):void 
    { 
        this.play(); 
    } 
     
    playButton.addEventListener(MouseEvent.CLICK, playMovie);
  • Detectar tipos em um campo de texto: Neste exemplo, entryText é um campo de texto de entrada, e outputText é um campo de texto dinâmico:

    function updateOutput(event:TextEvent):void 
    { 
        var pressedKey:String = event.text; 
        outputText.text = "You typed: " + pressedKey; 
    } 
     
    entryText.addEventListener(TextEvent.TEXT_INPUT, updateOutput);
  • Clicar em um botão para navegar em uma URL. Nesse caso, linkButton é o nome de ocorrência do botão:

    function gotoAdobeSite(event:MouseEvent):void 
    { 
        var adobeURL:URLRequest = new URLRequest("http://www.adobe.com/"); 
        navigateToURL(adobeURL); 
    } 
     
    linkButton.addEventListener(MouseEvent.CLICK, gotoAdobeSite);

Criar ocorrências de objetos

Para que você possa usar um objeto no ActionScript, primeiro, ele deve existir. Uma parte da criação de um objeto é declarar uma variável; porém, a declaração de uma variável só cria um lugar vazio na memória do computador. Sempre atribua um valor real à variável (criar um objeto e armazená-lo na variável), antes de tentar usá-lo ou manipulá-lo. O processo de criar um objeto é conhecido como instanciar o objeto. Em outras palavras, você cria uma ocorrência de uma classe em particular.

Existe uma maneira simples de criar uma ocorrência de objeto que não envolve o ActionScript. No Flash Professional, coloque um símbolo de clipe de filme, símbolo de botão ou campo de texto no Palco e atribua-o a um nome de instância. O Flash Professional automaticamente declara uma variável com esse nome de instância, cria uma instância de objeto e armazena esse objeto na variável. De forma semelhante, no Flex você cria um componente no MXML ou codificando uma tag MXML ou colocando o componente no editor, no modo Flash Builder Design. Ao atribuir um ID a esse componente, este ID se torna o nome de uma variável ActionScript que contém essa ocorrência do componente.

No entanto, nem sempre você deseja criar um objeto visualmente, e para os objetos não-visuais você não pode. Há várias formas adicionais através das quais você pode criar instâncias de objeto usando apenas o ActionScript.

Com vários tipos de dados do ActionScript, você pode criar uma ocorrência usando uma expressão literal , que é um valor escrito diretamente no código do ActionScript. Eis alguns exemplos:

  • Valor numérico literal (insere o número diretamente):

    var someNumber:Number = 17.239; 
    var someNegativeInteger:int = -53; 
    var someUint:uint = 22;
  • Valor da seqüência de caracteres literal (envolve o texto com aspas duplas):

    var firstName:String = "George"; 
    var soliloquy:String = "To be or not to be, that is the question...";
  • Valor booleano literal (usa os valores literais true ou false ):

    var niceWeather:Boolean = true; 
    var playingOutside:Boolean = false;
  • Valor Array literal (envolve uma lista de valores separados por vírgula entre colchetes):

    var seasons:Array = ["spring", "summer", "autumn", "winter"];
  • Valor XML literal (insere o XML diretamente):

    var employee:XML = <employee> 
            <firstName>Harold</firstName> 
            <lastName>Webster</lastName> 
        </employee>;

O ActionScript também define expressões literais para os tipos de dados Array, RegExp, Object e Function.

A forma mais comum de criar uma ocorrência para qualquer tipo de dados é usar o operador new com o nome da classe, como mostrado aqui:

var raceCar:MovieClip = new MovieClip(); 
var birthday:Date = new Date(2006, 7, 9);

O ato de criar de um objeto usando o operador new , muitas vezes, é descrito como “chamar o construtor da classe” Um construtor é um método especial que é chamado como parte do processo de criar uma ocorrência de uma classe. Observe que, ao criar uma ocorrência nesta forma, você coloca parênteses depois do nome da classe. Às vezes, você especifica os valores do parâmetro nos parênteses. Há duas coisas que você pode fazer ao chamar um método.

Mesmo para esses tipos de dados que permitem criar ocorrências usando uma expressão literal, você também pode usar o operador new para criar uma ocorrência de objeto. Por exemplo, as duas linhas de código a seguir fazem a mesma coisa:

var someNumber:Number = 6.33; 
var someNumber:Number = new Number(6.33);

É importante se familiarizar com a forma como o novo ClassName () cria objetos. Muitos tipos de dados ActionScript não têm uma representação visual. Consequentemente, não podem ser criados colocando-se um item no Palco do Flash Professional ou no modo Design do editor MXML do Flash Builder. Você só pode criar uma ocorrência de qualquer um desses tipos de dados no ActionScript usando o operador new .

Adobe Flash Professional

No Flash Professional, o operador new também pode ser usado para criar uma ocorrência de um símbolo de clipe de filme que é definido na Biblioteca mas não é colocado no Palco.