Hoje vou mostrar uma bom jeito de se implementar uma classe abstrata em Actionscript 3.0. Para quem trabalha em equipe de programadores é uma boa prática, pois ajuda bastante no encapsulamento do código e não engessa a manutenção no futuro.
Um bom exemplo seria de um componente (AbstractLayout) que dispõe elementos na tela horizontalmente e verticalmente, e você teve que implementar o cálculo desse posicionamente baseado numa flag. Então, para deixar explícito esses dois tipos de disposição, você poderia criar a HorizontalLayout e VerticalLayout que estenderiam a AbstractLayout, mudando a flag de disposição internamente. Isso também melhora o encapsulamento, pois se houver algum comportamento específico para alguma das super classes, esse comportamento pode ser implementado sem interfirir na sub classe.
Enfim, vamos ao código. A implementação é muito simples, é feito uma comparação se a instância passada no argumento é o this, senão é lançado um erro.
1: package net.idemax.abstractclass
2: {3: import flash.errors.IllegalOperationError;
4: 5: public class AbstractClass
6: {7: public function AbstractClass( $instance:AbstractClass )
8: {9: if( $instance != this )
10: throw new IllegalOperationError( 'Essa é uma classe abstrata, estenda-a para usá-la.' );
11: } 12: } 13: }E é só usá-la como sub classe, passando o this no super. Por exemplo:
1: package net.idemax.superclass
2: {3: import net.idemax.abstractclass.AbstractClass;
4: 5: public class SuperClass extends AbstractClass
6: {7: public function SuperClass()
8: {9: super( this );
10: } 11: } 12: }Assim, podemos usar todas as funcionalidades da AbstractClass e da SuperClass sem instanciar diretamente a AbstractClass.
1: package
2: {3: import flash.display.Sprite;
4: 5: import net.idemax.superclass.SuperClass;
6: 7: public class SuperClassUsage extends Sprite
8: {9: public function SuperClassUsage()
10: {11: var mySuperClass:SuperClass = new SuperClass();
12: } 13: } 14: }Fonte: http://goo.gl/UG6R9
PS.: Estou usando esse plugin do Windows Live Writer para formatar o código fonte, infelizmente ele não suporta Actionscript. Se souberem de algum, me enviem.