Motivação para 2008

souweb Deixe um comentário »

Viva um 2008 sem restrições! Viva melhor! Seja melhor!

Escrevendo ActionScript 3.0

ActionScript 3.0, Adobe AIR, Adobe Flash, Adobe Flex 4 Comentários »

Acredito que finalmente chegamos a uma versão do ActionScript de “respeito”, oferecendo um modelo de programação robusta, familiar a desenvolvedores com um conhecimento básico de programação orientada a objetos. Para desenvolver desde simples animações gráficas até complexos sistemas cliente-servidor.

Ao aprendermos ActionScript 3.0, podemos desenvolver em 3 diferentes tecnologias da Adobe: Flash, Flex e AIR, com pequenas variações.

Estaremos aprendendo todo o potencial desta linguagem, da sua sintaxe a vários exemplos práticos, muito do qual estarei extraindo, traduzindo e modificando da documentação da Adobe.

Sobre o ActionScript

  • ActionScript é uma linguagem de programação que roda no Flash Player.
  • É executado pela ActionScript Virtual Machine, que é parte do Flash Player.
  • É tipicamente compilado no formato bytecode por um compilador, tais como o Flex Builder, o Flex SDK e o Flex Data Services. O bytecode é anexado em arquivos SWF, que são executados pelo Flash Player.

Onde escrever o código

Dependendo do tipo de aplicação que você estará desenvolvendo, você pode preferir usar uma ou mais destas diferentes maneiras de incluir ActionScript no seu projeto.

Escrevendo código em frames da timeline do Flash

No ambiente de desenvolvimento do Flash, você pode adicionar o código ActionScript em qualquer frame da timeline. Esse código pode ser executado enquanto o movie é reproduzido.

Colocando o código ActionScript em frames é um caminho simples para adicionar comportamentos para aplicações desenvolvidas pelo Flash. Você pode adicionar ActionScript na timeline principal ou em frames de qualquer MovieClip. Contudo, esta flexibilidade tem um custo. Quando você desenvolve grandes aplicações, se torna fácil esquecer em qual frame o código foi escrito, o que pode tornar a aplicação mais difícil de manter ao longo do tempo.

Muitos desenvolvedores simplificam a organização do seu código ActionScript no Flash colocando código somente no primeiro frame de uma timeline, ou em uma layer especifica, a qual recomendo. Isto facilita a organização do seu código em arquivos Flash, mas ainda é pouco flexível, se quiser usar o mesmo código em outros arquivos do Flash ou em projetos do Flex. A melhor opção é ter todo o código ActionScript em um arquivo separado, com a extensão .as, que pode ser escrito em qualquer editor de texto, no Flash, no Flex, ou mesmo no Dreamweaver.

Escrevendo ActionScript em arquivos MXML do Flex

No ambiente de desenvolvimento do Flex, você pode inserir código ActionScript dentro da tag <mx:Script> em arquivos MXML. Código ActionScript Inline (inserido dentro de uma página pertencente a outro código) tem o mesmo inconveniente de inserir código ActionScript em frames do Flash, perdendo o poder de reutilização do código sem ter que cortar e colar em um novo arquivo.

Escrevendo em arquivos ActionScript

Se seu projeto envolve significantemente código ActionScript, a melhor maneira de organizar seu código é em arquivos ActionScript separados. Um arquivo ActionScript pode ser estruturado de uma de duas maneiras, dependendo de como você prentende usar na sua aplicação:

Código ActionScript não estruturado

Linhas de código ActionScript, incluindo declarações ou definições de funções, escrevendo como se estivessem inseridos diretamente em uma timeline, arquivo MXML, etc.

ActionScript escrito desta maneira pode ser acessado usando uma declaração include em ActionScript, ou na tag <mx:Script> do Flex. A declaração include do ActionScript faz com que o conteúdo de um arquivo ActionScript externo seja inserido no escopo do script, como se estivesse escrito diretamente naquele ponto da aplicação. Na linguagem MXML, a tag <mx:Script> permite que você especifique no atributo source a localização do arquivo ActionScript externo que será carregado e seu código será inserido no local especificado, por exemplo:

MXML:

<mx:Script source=“Preloader.as” />

Flash ActionScript:

include “Preloader.as” (sem ponto-e-vírgula)

Observação:

O código inserido desta maneira não pode ser escrito como classe, o que prejudica a sua reusabilidade.

Definicão de classe

A definição de classes, incluem métodos e definições de propriedades.

Quando você define uma classe, você pode acessar o código ActionScript da classe criando uma instância e usando suas propriedades, métodos e eventos, da mesma forma que faria com qualquer classe original do ActionScript. Isto requer duas partes:

1. Usar a declaração import para especificar o nome completo da classe, incluindo pacotes, para que o compilador saiba onde procurá-la. Por exemplo, quando quiser usar a classe MovieClip em ActionScript:

import flash.display.MovieClip;

ou pode importar todo o pacote ao qual a classe pertence:

import flash.display.*;

A única exceção à regra é quando precisa referir-se a classes que não estão definidas em um pacote.

2. Escrever código referindo-se ao nome da classe (usualmente declarando uma variável com esta classe como tipo de dado, e criando uma instância da classe para armazenar na variável). Por exemplo:

var preloader:Preloader = new Preloader();

Quando o compilador encontra a referência da classe Preloader pela primeira vez, ele irá procurar no código a localização da definição da classe Preloader, ou seja o import.

Aassim damos início ao estudo do ActionScript 3.0, que espero ter sido claro em todos os aspectos citados, se não comentem, mandem e-mails, fiquem a vontade, toda contribuição será bem-vinda para o crescimento do blog souweb e a melhoria do conteúdo para você leitor.

Um abraço e até o próximo post.

Entendendo orientação a objetos

ActionScript 3.0, Orientação a Objetos, PHP, Padrões de projeto 5 Comentários »

Entre tudo o que estudei, de longe o que mais tive dificuldade em assimilar foi a orientação a objetos. Talvez por programar com o ActionScript 1.0 por alguns anos e ter toda lógica de programação voltada para o desenvolvimento estruturado. Bom, continuo estudando este paradigma, e quanto mais o estudado mais percebo a importância desta maneira de trabalhar no desenvolvimento de softwares. Como tendência todas as linguagens modernas seguem este princípio, como o ActionScript 3.0, o PHP 4 e 5, o Java, o VB.Net, o Ruby on Rails, o Python, entre outras.A orientação a objetos é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos. Escrevemos código em torno de objetos e não de funções. Desta maneira, não teremos que controlar todo o processo de funcionamento do software, mas separando em grupos (classes) de responsabilidade, onde cada objeto é responsável por si próprio e tem responsabilidades (métodos) claramente definidas.Podemos entender o que são objetos sob as perspectivas de Fowler:

  • Em nível conceitual - Um objeto é um conjunto de responsabilidades. Neste nível o objeto é projetado de maneira a saber o que realizará e não como realizará.
  • Em nível de especificação - Um objeto é um conjunto de métodos (funções) que podem ser invocados por outros objetos ou por si próprio.
  • Em nível de implementação - Um objeto são código e dados. Ou seja, como realizará suas responsabilidades.

Vamos para um exemplo prático:

  1. Imagine o objeto controle remoto para televisão.
  2. Identifique quais são os objetos que compõem o controle remoto e quais suas responsabilidades:
    1. Botão Power - responsável por ligar e desligar a televisão.
    2. Botão CH+ - responsável por trocar para um canal acima do atual.
    3. Botão CH- - responsável por trocar para um canal abaixo do atual.
    4. Botão VOL+ - responsável por aumentar o volume
    5. Botao VOL- - responsável por diminuir o volume

Podemos perceber como torna-se fácil definir o que são objetos e quais suas responsabilidades dentro de um caso cotidiano e este é o principal objetivo do paradigma de orientação a objetos: tornar-se mais próxima a linguagem humana, principalmente quando falamos em nível conceitual.Mas, digamos que agora nós precisamos desenvolver um controle remoto para um aparelho de som. Poderíamos utilizar vários aspectos comuns do controle remoto para televisão, por serem comuns a todos os controles remotos, como o Botão Power, o Botão VOL + e 0 Botão VOL -. De que maneira poderiamos reutilizar o que já foi programado, agora em nível de implementação?Vamos nos aprofundar no paradigma, inicialmente como existem responsabilidades e dados comuns a qualquer controle remoto, podemos desenvolver um controle remoto geral que disponibilizará métodos associados a todos os controles remotos, podendo utilizá-los ou adaptá-los de acordo com as necessidades individuais de cada controle.Quando falamos sobre orientação a objetos, esse controle remoto geral é denominado classe, a qual deve ser entendida como definição do comportamento de um objeto. Onde teremos:

  • Os elementos de dados que o objeto contém - variáveis
  • Os métodos que o objeto pode utilizar - funções
  • A maneira como esses elementos de dados e métodos podem ser acessado - tipos de acesso

Como os elementos de dados que um objeto contém podem variar, cada objeto do mesmo tipo pode dispor de dados diferentes, mas terá a mesma funcionalidade (conforme definida nos métodos).Para obter um objeto, digo ao programa que desejo um novo objeto desse tipo ( isto é, a classe à qual pertence). Esse novo objeto é denominado como instância da classe. A criação de instâncias de uma classe é denominada instanciação.Denominamos esta classe controle remoto geral, a qual podemos chamar de ControleRemoto, também como uma classe abstrata. Em outras palavras a classe ControleRemoto é a classe-base para desenvolvimento de outras classes, denominadas classes concretas.Este tipo de relacionamento é denominado relacionamento é-um, formalmente chamado de herança. Assim podemos desenvolver a classe ControleRemotoTV e ControleRemotoSom, herdando os métodos e dados da classe abstrata ControleRemoto. Implementando as funcionalidades particulares a cada uma destas classes derivadas o que denominamos como polimorfismo.Polimorfismo, que deriva de poli (muitos) e morfi (forma). Um nome bem apropriado, visto que nos referimos a instâncias especificas de classes derivadas de classes abstratas. Sendo que, no momento que dizemos para aos objetos para fazer, conceitualmente, alguma coisa por meio de referência abstrata, obtenho um comportamento diferente, dependendo do tipo específico do objeto derivado de que disponho. Ou seja, quando pressionamos o Botão Power, dependendo do controle remoto observaremos uma ação diferente.Como os objetos são responsáveis por si próprios, existem muitas coisas que eles necessitam expor a outros objetos. Para isso, podemos implementar tipos de acesso, como principais podemos citar os seguintes:

  • Público - qualquer objeto pode vêlo
  • Protegido - apenas objetos dessa classe e de classes derivadas pdem vê-lo.
  • Privativo - apenas objetos dessa classe podêm vê-lo.

Isso nos leva ao conceito de encapsulamento. Onde os objetos não expõem seus dados, onde a visibilidade destes dados é privativa ou protegida.Como complemento abaixo um pequeno dicionário do que falamos:

  • Classe abstrata -Define os métodos e os atributos comuns a um conjunto de classes que são conceitualmente similares. Nunca são instanciadas.
  • Objeto - Uma entidade que tem responsabilidades. Implemento objetos escrevendo uma classe (em código) que define membros de dados (as variáveis associadas com os objetos) e métodos (as funções associadas com os objetos)
  • Classe - O repositório de métodos. Define os membros de dados de objetos. O código é organizado em torno da classe
  • Construtor - Método especial invocado quando um objeto é criado
  • Destruidor - Método especial invocado quando um objeto é removido
  • Superclasse - Uma classse a partir da qual outras classes são derivadas. Contém definições mestras de atributos e métodos a serem utilizados (e possivelmente redefinidos) por todas as classes derivadas
  • Classe derivada - Uma classe que é especializada a partir de sua superclasse. Contém todos os atributos (variáveis) e métodos (funções) da supeclasse; entretanto, pode conter também outros atributos ou diferentes implementações de métodos
  • Encapsulamento - Tipicamente descrito como ocultação de dados, embora seja melhor definindo como qualquer tipo de ocultação
  • Herança - Uma classe é um tipo especial de uma outra classe. Essas classes especializadas são denominadas derivações da classe-basse (a classe inicial), algumas vezes denominada superclasse; as classes derivadas, por sua vez, são eventualmente chamadas de subclasses.
  • Instância - Um exemplo particular de uma classe (é sempre um objeto)
  • Instanciação - O processo de criar uma instância de uma classe
  • Polimorfismo - Ser capaz de se referir a diferentes derivações de uma classe do mesmo modo, obtendo, porém, o comportamento apropriado da classe derivada a que se está referindo.
  • Perspectivas - Existem três diferentes perspectivas para observação de objetos: a conceitual, a de especificação e a de implementação. Essas distinções são úteis para entender o relacionamento entre classes abstratas e suas derivações. A classe abstrata define como resolver problemas conceitualmente. Ela também provê a especificação para a comunicação com qualquer objeto derivado a partir dela. Cada derivação fornece a implementação especifica necessária.
WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Login