Você acha Action Script 3 realmente orientado à objetos?

Olá galera,

Abro essa discussão pelo seguinte motivo, existem certos principios de OO e um deles é sobrecarga de método.

Bem, não é possível fazer sobrecarga de método em AS3. Logo, fura esse princípio. E furando um princípio eu acho que já torna a coisa “meio”. Logo, eu acho AS3 meio orientada a objetos (mas se for olhar o as3 gerado por qualquer projeto dá pra achar que orientacao a objetos é quase uma simulacao dentro do Flex). E outra coisa, alguém sabe me dizer arquiteturalmente porque diabos as3 nao suporta sobrecarga?

E vocês, o que acham?

Grato.

Não tem mesmo. O porquê disso, eu não sei… Mas lembro que estudei uma linguagem que não tinha o overload. Acho que era C++. O que tem em AS é aquela coisa de 2 métodos de mesmo nome com parâmetros diferentes… acho que é o mais próximo de um ‘overload’ que o AS consegue proporcionar.

Na minha opinião, continua OO (assim como C++).

O PHP5 que dizem ser OO também não tem Sobrecarga de métodos.

Realmente, no AS3 não tem sobrecarga de métodos. Se isso vai te causar algum problema ou não, aí depende muito. Pelo que sei, o AS3 não tem sobrecarga porque o AS2 não tinha. E para fazer as coisas funcionarem corretamente no Flash Player, eles teriam que mudar muita coisa, o que não valia apena. No Flex, existem algumas coisas assim, que podem parecer “gambiarra”, mas são feitas da forma que são por estar tudo muito ligado ao Flash Player. Mas na boa, não acho que isso é o que vai fazer a diferença na hora de escolher entre o Flex ou outra tecnologia de front end. Existem muitos outros pontos e serem considerados, muitas vantagens que fazem com que sobrecarga seja apenas um simples detalhe.

Caso você quera muito, ainda pode fazer as coisas com valor padrão no AS3. Um exemplo bobo (acabei de acordar, não consigo pensar em algo melhor :stuck_out_tongue: ):

private function toUpper(value:String, trim:Boolean = false):String
{
	var newValue:String = value;

	if (trim)
	{
		newValue = StringUtil.trim(value);
	}

	return newValue.toUpperCase();
}

Como você setou um valor padrão para o parâmetro “trim”, você pode chamar ele assim:

// as duas linhas abaixo retornam o mesmo
toUpper("bla bla ");
toUpper("bla bla ", false);

Que vai retornar tudo em caixa alta, mas sem o trim. Ou pode chamar assim

toUpper("bla bla ", true);

Uma outra coisa que pode te ajudar, que existe no AS3, é isso:

private function doSomething(param:*):void
{
	trace("Test: " + param);
}

Como você deu o tipo * para o parâmetro, você pode chamar assim:

// isso
doSomething("123");
// ou isso
doSomething(123);

E você pode ainda usar os parâmetros rest no AS3, sem problemas, assim:

private function doSomething(... params):void
{
	var count:int;

	for each (var param:*in params)
	{
		trace((count++) + " : " + param);
	}
}

E chamar assim:

// um parametro
doSomething("123");
// dois os mais, com tipos diferentes
doSomething(456, "789");

Agora, considerando que o AS3 suporta os “valores padrão” para os métodos desde antes do AS3, imagina como seria para os engenheiros da Adobe implementarem a sobrecarga no Flash Player. Hehehe :wink:

Mas já disse e repito: Acho que essas questões são a última coisa que você deve se preocupar antes de escolher uma tecnologia ou outra para interface. Teoricamente, toda sua regra de negócio deve ficar no backend (Java?), então isso realmente não faz muita diferença. Você deve levaer muito mais em conta o que o Flex te proporciona para ajudar na experiência do usuário, do que se ele suporta sobrecarga ou se é fácil de integrar com o PHP, ou qualquer outra coisa técnica.

[]'s

Sobrecarga (overload) de um método é vc ter varios metodos com o mesmo nome mas assinaturas diferentes.

Vc pode ter sobrecarga de funções em um contexto não oo (como funcional, procedural) e ate aonde eu saiba sobrecarga não é mandatorio para OO, tanto que muitas linguagens não suportam (Ruby e Eiffel, por exemplo, não suportam).

Primeiro, gostaria de deixar claro que não odeio AS3.

  • AS3 não tem sobrecarga;
  • AS3 não tem classe abstrata (pra fazer parecer tem que gambiar e não adianta tentar argumentar, tem que gambiar mesmo;
  • AS3 não permite construtor privado (tava querendo fazer uma classe singleton e tive que gambiar para que não pudessem instanciá-la)
  • AS3 não tem multipla herança (mas isso nem o JAVA tem, porém seria muito bom);

Não acho que AS3 seja orientado a objeto, eles tentaram mas não deu muito certo.
Fora isso é bem legal =]

E eu concordo plenamente contigo.

Realmente alguns conceitos de OO não estão presentes na linguagem, mas temos recursos suficientes para elaborar bons projetos. Isso é o mais importante.

Mas que um construtor privado faz falta, isso faz :wink:

Recursos suficientes para fazer bons projetos? Eu discordo. Começando pela IDE que é horrível e toda bugada…

[]'s

Então,

quando falei “recursos” estava me referindo a recursos da OO. Mas concordo quando você diz que a IDE esta bugada.
Coisas estranhas acontecem, mas acredite, os frutos que tenho colhido com a utilização do Flex me fazem encarar isso tudo
com muita paciência.

[]´s