terça-feira, 13 de julho de 2010

Dica: Licença gratuita do Flash Builder 4 (Standard)

Para quem não sabe, a Adobe oferece gratuitamente a licença do Flash Builder 4 (Standard) para estudantes, professores e profissionais desempregados.

Para solicitar a licença, basta preencher esse formulário. No caso da licença estudantil, também será preciso anexar o comprovante de matrícula da instituição de ensino.

quinta-feira, 29 de abril de 2010

O padrão de projetos "Singleton"

Bom, com esse post, vou começar uma série de posts sobre padrões de projetos de software (do inglês, Design Patterns) - envolvendo padrões utilizados com o action script 3, de uma forma geral, ou, especificamente, com o framework Flex. Dessa forma, nada melhor que começar por um dos padrões mais utilizados e que possui uma implementação bem simples: o "Singleton".

- Descrição geral: O Singleton é um padrão que garante a existência de apenas uma instância de uma determinada classe em todo o sistema.

- Motivação: Muitos projetos necessitam que algumas classes tenham apenas uma instância no sistema, mantendo um ponto global de acesso a esse objeto. Por exemplo, uma aplicação que precisa de uma infraestrutura para log de dados, poderia ser modelada de forma que exista apenas um objeto responsável em fazer os logs em toda a aplicação (garantindo uma melhor consistência do log gerado). Outro caso em que o Singleton é bastante utilizado é nos modelos de dados das aplicações baseadas em MVC (garantindo a integridade e consistência dos dados em toda a aplicação).

- Implementação:

a) Em JAVA:

Na linguagem JAVA, como existem construtores privados, pode-se implementar um Singleton facilmente.

A forma mais simples e tradicional de implementação é a seguinte:
public class Singleton {
	private static final Singleton INSTANCE = new Singleton();

	//O construtor privado previne a instanciação a partir de outras classes
	private Singleton() {}
 
	public static Singleton getInstance() {
		return INSTANCE;
	}
}
 

A única desvantagem dessa abordagem é que a instância Singleton vai ser criada logo que a classe for inicializada, pois a construção da mesma está em um atributo estático, e isso nem sempre é desejável nas aplicações - pode-se querer retardar esse processo e controlar exatamente o ponto em que instanciação ocorrerá (fazendo uma espécie de "lazing loading", ou inicialização sob demanda).

Dessa forma, foi proposta outra abordagem que contorna esse problema: a chamada solução de Bill Pugh. Nessa abordagem, a classe aninhada não é referenciada em nenhum momento antes do método "getInstance", não sendo, portanto, carregada pelo class loader antes da invocação desse método.

public class Singleton {
	//O construtor privado previne a instanciação a partir de outras classes
	private Singleton() {}
 
	/**
	* O SingletonHolder é carregado na primeira execução do Singleton.getInstance() 
	* ou no primeiro acesso ao SingletonHolder.INSTANCE, nunca antes.
	*/
	private static class SingletonHolder { 
		private static final Singleton INSTANCE = new Singleton();
	}
 
	public static Singleton getInstance() {
		return SingletonHolder.INSTANCE;
	}
 }

Obs.: As duas abordagens apresentadas são "thread-safe", não requerendo nenhum constructo especial da linguagem (por exemplo, "volatile" ou "synchronized").


b) Em Action Script 3:

Em action script, como não existe construtor privado, algumas adequações têm que ser feitas. Assim, uma forma utilizada é a utilização de uma inner class (chamada no exemplo de "SingletonEnforcer") como argumento do construtor da classe Singleton - dessa forma, mesmo esse construtor sendo público, não há possibilidade de instanciar um objeto da classe principal (por não ser possível instanciar um objeto SingletonEnforcer fora dessa classe, para passá-lo como parâmetro).

Assim, a única forma de acessar uma instância da classe principal - a única instância - é através de métodos estáticos do tipo "getInstance()". Na primeira execução desse método, em qualquer ponto do programa, como ainda não foi feita nenhuma instanciação da classe ("instance == null"), vai ser feito a criação de um objeto que vai ser atribuído na variável estática "instance". Nas próximas chamadas ao método getInstance, essa variável já estará atribuída, e o objeto que está armazenado nela será reutilizado ("return instance").

package{ 
	public class ExemploSingleton { 
		private static var instance:ExemploSingleton; 

		public function ExemploSingleton(enforcer:SingletonEnforcer): void { 
			if (enforcer == null) throw new Error("Só pode haver uma instância de ExemploSingleton"); 
		} 

		public static function getInstance() : ExemploSingleton { 
			if (instance == null) 
					instance = new ExemploSingleton( new SingletonEnforcer );
			return instance; 
		} 

	} 

}

//Para bloquear o acesso ao constructor. 
class SingletonEnforcer { }


Obs.: O "if (enforcer == null) throw new Error("Só pode haver uma instância de ExemploSingleton")", dentro do construtor, é só para garantir que não será passado um "null" como parâmetro do mesmo, o que burlaria todo o artifício proposto.


Referências:
http://en.wikipedia.org/wiki/Singleton_pattern
http://pt.wikipedia.org/wiki/Singleton
http://sourcemaking.com/design_patterns/singleton

segunda-feira, 22 de março de 2010

Liberadas as versões finais do Flex 4 SDK e do Flash Builder 4

Uma grande notícia: a Adobe acaba de anunciar a liberação das tão aguardadas versões finais do SDK do Flex 4 (conhecido por Gumbo) e do Flash Builder 4!!!

Os downloads podem ser feitos diretamente na página oficial do Flex.

Para saber mais sobre o Flex 4, o Flash Builder 4 e a arquitetura Spark (utilizada nessa versão), visite a página do Flex Developer Center, que tem muito material.

Datavisualization é gratuito e open source

Uma notícia que eu ouvi esses dias, da qual até então eu não tinha conhecimento, e que me deixou bem animado, foi a de que os componentes do pacote "data visualization" agora são free e open source.

A Adobe anunciou que que esses componentes (advanced data grid, olap data grid e a biblioteca de gráficos) agora fazem parte da distribuição padrão, gratuita e open source do SDK do Flex.

Dessa forma, agora não é mais necessário ter a licença do Flex Builder Professional para utilizar esses componentes, barateando aqueles projetos de menor porte.

sábado, 6 de fevereiro de 2010

Flex SDK 3.5a Released

Foi lançada nessa semana, a versão 3.5a do SDK (software development kit) do Flex. Essa versão é uma espécie de patch, que corrige um defeito inserido na versão 3.5. O defeito envolve a classe ApplicationUpdaterUI, que está relacionada à atualização automática em aplicações AIR.

O download pode ser feito na página oficial, ou diretamente por esse link.

quarta-feira, 13 de janeiro de 2010

Flex for Kids


No dia 6 de Fevereiro, acontecerá um evento de caráter beneficente, o "Flex for Kids", que terá 10 palestras on-line com grandes nomes da comunidade Flex brasileira.

A inscrição, no valor R$30,00, é na verdade uma doação para a entidade "Cotolengo", do Mato Grosso do Sul. Após inscrever-se, o participante terá acesso ao conteúdo das palestras on-line e futuramente poderá baixar o material da gravação das mesmas.

Maiores informações podem ser encontradas no site oficial do evento.