Caros,
Uma empresa como a Macromedia, quando lança um produto, não o faz ao acaso. Existe toda uma pesquisa envolvida e fatores como tendências e demanda de mercado são, certamente, levados em consideração. Estes podem ser alguns fatores que determinam o preço estabelecido de um produto. Considero que a comparação que vem sendo feita entre Flex e Flash é simplista demais. Se é que podemos compará-los, é preciso fazê-lo dentro do contexto das RIAs e do desenvolvimento de aplicativos coorporativos. A seguir, tentarei mostrar "Por que Flex?". APLICATION MODEL FAMILIAR E PROGRAMAÇÃO BASEADA EM PADRÕES Um dos principais objetivos da Macromedia ao desenvolver o Flex era permitir que os desenvolvedores Web J2EE e .NET utilizem os seus conhecimentos para programar para a Flash Virtual Machine (Plug-in do Flash). Como, então, programam estes desenvolvedores Web? Resumidamente falando, eles utilizam uma linguagem de programação (Java, C#, Visual Basic .NET, etc) para a parte lógica e uma linguagem de marcação para definir a interface (o HTML que é gerado pelo JSP ou ASP .NET). Estes programadores também trabalham basicamente com arquivos texto e podem utilizar o IDE de sua preferência. Quando é necessário alterar algo na camada de apresentação, basta editar um arquivo texto (JSP, ou ASP .NET) que se encontra no servidor de aplicativos Web. Digno de nota aqui é o fato de que esta maneira de trabalhar independe de ser J2EE ou .NET. Não é difícil perceber que a modo de desenvolver um aplicativo no IDE do Flash foge muito disto. Além do esquema de Deployment ser diferente você está restrito a um único IDE pelo fato do FLA ser um arquivo de dados binário e não um arquivo texto como a maioria das tecnologias de desenvolvimento Web. Isso sem falar da timeline, que para um programador Web tradicional é o equivalente a um bicho de sete cabeças. No Flex você usa uma linguagem de marcação (MXML) para definir a interface e uma lingaugem de programação para fazer a parte lógica (ActionScript 2.0). Ambas as linguagens são baseadas em padrões - a primeira nada mais é do que uma aplicação XML e a segunda é baseada no ECMAScript. O Flex também trabalha com os padrões SOAP, CSS e HTTP. É verdade que com exceção à utilização de uma linguagem de marcação para definir a interface, o Flash também contempla estes padrões. Além disto, levados por experiências frustrantes com o HTML (que é uma linguagem de marcação) as pessoas poderiam dizer que "preferem" construir a interface do aplicativo em um IDE como o Flash. De fato, já ouvi muita gente falando que "esse papo de usar XML para definir a interface não pega". Porém, aqui entra o que eu falei no início com relação às tendências. É uma tendência utilizar uma linguagem de marcação para definir a interface dos aplicativos. Um exemplo claro disso é o que a Microsoft está preparando (http://www.ondotnet.com/pub/a/dotnet/2004/01/19/longhorn.html). E não foi só a Microsoft que percebeu esta tendência (http://xul.sourceforge.net/counter.html). Não entrarei no mérito da questão sobre o fato de ser desejável ou não definir uma interface programaticamente. O meu objetivo é apenas mostrar porque uma linguagem de marcação é conveniente para definir interfaces ao invés de uma linguagem de programação tradicional. Ao contrário da moda, as tendências tecnológicas não são ditadas por gostos subjetivos, mas sim pelo que prova funcionar ou não. O fato do HTML ter se mostrado ruim para uma série de coisas não implica que as linguagens de marcação são ruins para definir a interface. Uma demonstração de que as linguagens de marcação são boas para definir a interface pode ser vista no exemplo que segue. Os dois trechos de código abaixo resultam na mesma interface. Qual deles é o mais legível? Este? import mx.controls.Label; import mx.controls.TextInput; import mx.controls.Button; import mx.containers.Panel; public var btnSubmit:Button = null; public var txtFirst:TextInput = null; public function initApp( Void ):Void { var pnlHello:Panel = null; var init:Object = null; init = new Object(); init.verticalAlign = "middle"; init.direction = "horizontal"; init.title = "Hello World"; pnlHello = Panel( createChild( Panel, "pnlHello", init ) ); init = new Object(); init.text = "First name:"; pnlHello.createChild( Label, "lblFirst", init ); init = new Object(); init.text = "Macromedia"; txtFirst = TextInput( pnlHello.createChild( TextInput, "txtFirst", init ) ); init = new Object(); init.label = "Submit"; btnSubmit = Button( pnlHello.createChild( Button, "btnSubmit", init ) ); btnSubmit.addEventListener( "click", this ); } Ou Este? <mx:Panel title="Hello World" direction="horizontal"> <mx:Label text="First Name"/> <mx:TextInput id="txtFirst" text="Macromedia"/> <mx:Button id="btnSubmit" label="Submit"/> </mx:Panel> A comparação chaga a ser covardia. Creio não ser preciso provar que a legibilidade é importantíssima para o desenvolvimento de software, mas devo mencionar apenas que, do contrário, as linguagens de programação ainda teriam duas ou três letras para todas as palavras reservadas. É conveniente, portanto, utilizar uma LINGUAGEM DE MARCAÇÃO para definir a interface. Porém, as LINGUAGENS DE MARCAÇÃO não são boas para fazer a parte lógica do aplicativo. Desvios condicionais, laços de repetição e definição de classes com hierarquias complexas são melhores codificados em LINGUAGENS DE PROGRAMAÇÃO tradicionais. Por isto existe uma linguagem de programação e outra de marcação no Flex. PRODUTIVIDADE Diversos fatores fazem do Flex uma ferramenta muito mais produtiva que o Flash. Tente, por exemplo, desenvolver um aplicativo em Flash capaz de reorganizar o layout dos componentes de interface de acordo com o tamanho da janela do Browser eu disse reorganizar o layout e não "esticar" os componentes. O Flex trabalha com Containers para gerenciar o layout do aplicativo, possuí um elegante sistema de Data Binding, possuí um recurso denominado Validators para auxiliar na validação dos dados de entrada, possuí um esquema de gerenciamento de dados (Data Management) no cliente que lhe permite implementar as melhores práticas de Orientação a Objetos, possuí uma "abordagem padrão" para comunicação com o Back-End independente do seu serviço remoto ser um Objeto Java, .NET ou um Webservice , além dos Formatters, Behaviors, etc. Porém, ao invés de simplesmente enumerar as vantagens do Flex com relação a produtividade, creio que conclusões mais úteis poderão ser tiradas se compreendermos como a Macromedia chegou até estas vantagens. Durante a fase de levantamento de requisitos para o desenvolvimento do Flex a Macromedia abordou as empresas que melhor estavam fazendo uso do Flash para o desenvolvimento de RIAs com perguntas do tipo: "O que é mais comum nas RIAs que vocês estão desenvolvendo? O que dá mais trabalho de implementar no Flash e que vocês precisam fazer frequentemente?". Foi assim que a Macromedia chegou ao Flex Application Model, que permite às empresas construir RIAs manuteníveis, escaláveis e seguras dentro de padrões de mercado e sem precisar reinventar a roda. Estender um componente visual no Flex, por exemplo, é simplesmente uma questão de substituir a tag Application por uma outra tag qualquer a qual será a classe pai do novo componente visual que está sendo criado. Componentes em XML? Oras, eu já mostrei que as linguagens de marcação são convenientes para definição da interface, se o componente é visual, então também é conveniente usar uma linguagem de marcação. Sim, você pode também ter componentes não visuais, provavelmente para alguma lógica da interface. Neste caso, use o ActionScript. LOOK AND FEEL Muitos vêem como um ponto negativo o fato dos aplicativos em Flex serem "semelhantes". Eu vejo isto como um ponto forte do Flex. Mais uma vez é preciso fazer a pergunta: Por que a Macromedia fez assim? Certa vez um designer me disse que não gostava muito do Flex porque ele achava que o Flex daria origem a um monte de sites iguais na Web. Oras, isto demonstra que ele não compreendeu o conceito RIA cuja ultima letra do acrônimo significa "Applications". Discutir a diferença entre um site e um aplicativo pode levar a um outro debate, por isso, concentro meus esforços em mostrar porque os aplicativos Flex possuem a aparência "default" que possuem. A Macromedia tem uma equipe focada em pesquisas na área de Interação Homem-Máquina. Embora este seja um assunto frequentemente ignorado nos cursos de Ciências da Computação, sua importância tem ganhado força com a popularização da Usabilidade. O ponto de partida desta equipe com relação às RIAs é que uma RIA não é uma Web Application, tampouco é um aplicativo desktop. Ou seja, trata-se de uma nova geração de aplicativos que precisa ser "padronizada". Para alguns designers, isto pode soar como uma limitação à sua infinita criatividade. Não gostaria de perder muito tempo argumentando contra isto, mas gostaria de deixar algumas perguntas no ar: por que os aplicativos de desktop são, de certa forma, semelhantes? Por que o botão salvar dos aplicativos do Office se localizam na mesma posição? Ou seja, qual a importância da consistência no Design de Interface? Voltando a falar do trabalho da equipe de Design da Macromedia, o fruto de alguns destes estudos é algo que eles denominaram Halo Experience Model (http://www.macromedia.com/devnet/flex/articles/halo.html), que podemos imaginar como um conjunto de boas práticas de design para as Rich Internet Applications. O fato é que quando você desenvolve um aplicativo em Flex é provável que este aplicativo resulte em uma boa experiência para o usuário. Isto porque os componentes do Flex são como são baseados nos estudo de Interação Homem-Máquina e não no gosto subjetivo de algum designer cujo ego é maior que a sua capacidade de compreender algumas coisas. Um bom exemplo disto é o componente Panel. A idéia de ter um componente destes não é arbitrária. O componente é embasado em um dos princípios da Gestalt (http://en.wikipedia.org/wiki/Gestalt_psychology), o agrupamento: dados agrupados podem permitir uma melhor organização da informação com resultados positivos para quem vê. O componente Panel, também tem uma outra parte denominada "Control Bar" que tem por objetivo separar o conteúdo e os controles de interface. Se você não entendeu nada do que acabei de falar, tenha em mente apenas que as decisões da Macromedia de desenvolver os componentes do Flex com aquele Look And Feel são baseadas em pesquisas. Deste modo, se você usar bem, estará tirando proveito delas. Agora, se você ACHA que o usuário ACHA melhor outra coisa é melhor começar a rezar para que você esteja certo. Eu não estou dizendo que você não deve mudar nada com relação ao Look and Feel. De fato, o nível de personalização que é possível conseguir só com o uso de CSS no Flex é impressionante. Porém, não é difícil alguém sugerir que o componente Panel, por exemplo, deve ser 3D porque vai ficar mais "bonitinho". Enfim, se você estiver querendo fazer algo completamente diferente sugiro que pense bem se isto vale o esforço. Estamos falando de APLICATIVOS e não de obras de arte. A beleza é importante, mas se ela for muito mais um objetivo do que uma conseqüência o resultado final pode ser o equivalente a uma Ferrari com motor de Fusca. FLEXIBILIDADE Um argumento comum de um desenvolvedor em Flash é que o Flash é mais flexível e por isso ele é melhor que o Flex. Mas sempre o que é flexível é melhor? Será que não existe um ponto onde flexibilidade demais atrapalha? Para responder esta pergunta posso mencionar o caso "Go to". Nos anos 70 muito se debateu se a instrução "Go to" era benéfica ou prejudicial às linguagens de programação. Quem teve a oportunidade de programar em uma linguagem com o "Go to" sabe que é possível representar qualquer laço de repetição (for, while, do while, repeat) apenas com esta instrução. Ou seja, o "Go to" oferece uma grande flexibilidade ao programador. Mas o problema da flexibilidade é o abuso. Constatou-se que os programas que usavam o "Go to" davam origem a um código ilegível, terrível de manter. Por isto o "Go to" foi abolido da maioria das linguagens - embora, em nível de máquina, os laços de repetição têm a sua semântica traduzida para um "Go to" equivalente. Creio que algo parecido nós podemos dizer com relação à flexibilidade do Flash. Certa vez um designer me fez perder algumas horas programando um "Accordion Horizontal" por que ele achou mais bonito. Depois de pronto ele ainda quis adicionar algumas outras funcionalidades. Como eu não havia previsto que ele iria querer mais funcionalidades houve uma hora que nem eu entendia o meu código. Perdemos muito tempo fazendo algo que o designer ACHOU que ia ficar mais bonito quando poderíamos usar o Accordion que já existia e dedicar o restante do tempo para criar outras funcionalidades que podem realmente melhorar a experiência do usuário. No Flash, este tipo de "viagem" acontece com freqüência. Todos sabem que dá para fazer muita coisa e muitos não resistem à tentação de fazer algo diferente mesmo que isso no futuro prove não ser tão eficiente quanto o que já existe. Gostaria de saber por que as pessoas insistem em ignorar os efeitos colaterais do "achismo". Enfim, eu diria que o Flash tem o nível de flexibilidade desejável para trabalhar as RIAs em baixo nível criar coisas que fogem dos padrões de interface já identificados nas RIAs e prontos para serem usados no Flex. Já o Flex, tem o nível de flexibilidade desejável para o desenvolvimento de RIAs coorporativas, manuteníveis, extensíveis e escaláveis. PREÇO O benefício de uma RIA pode ser muito grande. Elas permitem que o potencial da Web seja finalmente aproveitado para o desenvolvimento de aplicativos. O Flex não tem como objetivo pequenos projetos cujo retorno sobre o investimento não é capaz de cobrir o preço de uma licença. Muitas empresas já compreenderam isto e estão saindo na frente (http://www.macromedia.com/software/flex/customers/). Não houve um Happy Hour na Macromedia onde um Zé Mané qualquer disse que o produto deveria custar X. Houve uma pesquisa do valor agregado e da demanda no mercado. Sabemos que há uma tendência de um produto novo baixar de preço conforme ele deixa de ser novidade. Porém, muitas empresas não se importam com esta diferença quando ela é compensada pela vantagem competitiva de estar na vanguarda. Além disso, um "projeto de Flex" que for feito em Flash provavelmente vai estourar no prazo, vai ser difícil de manter e vai ter mais bugs, de modo que todos estes problemas medidos em homem-hora pagariam perfeitamente uma licença de Flex. OUÇA A VOZ DA EXPERIÊNCIA Eu não gosto muito de argumentos por autoridade. Porém, devo abrir uma exceção neste caso. A IterationTwo (http://www.iterationtwo.com) é, em minha opinião, uma das empresas que melhor desenvolve RIAs no mundo. Por que será que eles adotaram o Flex? (http://www.iterationtwo.com/interactive_technologies.html) Quem gosta de programação de verdade tem que dar uma olhada no Cairngorm (http://www.richinternetapps.com/archives/000094.html), um conjunto de Design Patterns para RIAs que tornam o sonho da OO para a Web uma realidade. CONSIDERAÇÕES FINAIS A palavra Rich do acrônimo RIA bem que poderia ser um indicativo de quão Rico é o assunto. Alguns pensam que as RIAs aposentam o HTML. Outros acreditam que as RIAs jamais serão realidade. Eu sempre digo que nenhuma tecnologia resolve todos os problemas e aquela que se propuser a tamanha empreitada será extensa demais para este mundo tão especialista. Umberto Eco foi brilhante em uma apresentação (http://www.inf.ufsc.br/~jbosco/InternetPort.html) no MIT onde ele mostra que o surgimento do novo não implica necessariamente na extinção do velho. Novo e velho podem coexistir mesmo que funcionando de modo diferente. Um exemplo disto é que os livros digitais dificilmente substituirão por completo os livros em papel. É verdade que um manual de referência é bem melhor em sua versão digital (você pode localizar as informações mais rapidamente e pode haver hiperlinks entre elas), mas experimente ler um romance em frente ao computador. Acredito que algo parecido pode ser dito com relação às RIAs e também com relação ao Flex e o Flash. Nada aqui é excludente. Só precisamos compreender onde entra cada um deles. Para isto devemos abandonar alguns pré-conceitos e ter uma visão mais horizontal da tecnologia. Espero ter contribuído de alguma forma para a discussão. []'s Beck Novaes --- Em [email protected], Jan Cássio <[EMAIL PROTECTED]> escreveu > > Bruno obrigado pela resposta. > > Em um ponto eu concordo com vc, estive observando alguns dos recursos > do Flex e vi que ele realmente tem essa vantagem do raid, mais não > vejo tanta vantagem por ele ter mais componentes que o Flash > simplesmente porque primeiro, os componentes da Macromedia são bem > pesados, algumas vezes não muito funcionais (são poucos), por isso, > vejo que o Flash hoje não é só uma ferramenta de animação mais também > é uma ferramenta de desenvolvimento. Segundo, eu acredito que se você > desenvolve um conteúdo RIA com a integração Flash & ColdFusion você > obterá resultados bem mais favoráveis e confiáveis, e uma coisa muito > importante, não precisa ser nenhum expert para conseguir isso como > Flash e ColdFusion concorda? > > Então não vejo motivos para a Macromedia querer o Flex acima do Flash > & ColdFusion para desenvolvimento de aplicações RIA, até porque você > precisa de um servidor de aplicação rodando por tras (sem maldade :p) > do Flex para interagir com base de dados e acho isso uma falha > grave!(pelo menos foi isso que eu vi, se eu tiver enganado ignore esta > colocação). Claro tem o J2EE rodando no back-end mas veja só, o preço > que você paga pela licença do Flex você consegue adiquirir umas 3 > licenças do Flash (eu acho pq o preço dessas coisas nunca está > estável) e a licença do ColdFusion Server é free para desenvolvimento, > então seria bem melhor vc adiquirir o uma do Flash e com o troco vc > investiria em um treinamento para você ou para seu desenvolvedor por > exemplo. > > Então no meu ponto de vista acho que o Flex tem muito a dar ainda para > estar a frente do Flash (e do ColdFusion tamém) para desenvolvimento > de aplicações RIA ou outro tipo de aplicações que envolva essas > ferramentas, é isso! > > E por favor, não pensem que estou metendo pau no Flex ou na MM, estou > apenas fazendo comparações. > > --- Em [email protected], Bruno Martins <[EMAIL PROTECTED]> > escreveu > > Olá jancassio, > > > > O lance da macromedia é concorrer com ela mesma, ela lança varia > > ferramentas para desenvolver a mesma coisa so que de modo diferente. > > Mas oque eu acho mesmo é que ela ta querendo deixar o flash para oque > > ele sempre foi, como uma ferramenta de animação, e o flex como uma > > ferramenta de desenvolvimento, pois como vc mesmo viu o flex eh > > extremamente estruturado e otimizado para o desenvolvimento de > > aplicações. Outra vantagem que vi no flex é que alem de aprensentar > > diversos componentes que o flash nao possui eu vi em um artigo que > > futuramente o flex implementara componentes que possibilita criar > > sistemas que rodem semi-online, ele ira rodar no cliente sem a > > necessidade de estar o tempo todo online, e acredito que eh uma grande > > vantagem. > > > > Bem essa eh minha opnião. Aceito outras ideias sobre esse tema... > > > > > > On Apr 4, 2005 5:28 PM, Jan Cássio <[EMAIL PROTECTED]> wrote: > > > > > > Olá galera tudo bom? Acho que é a primeira vez que publico algo neste > > > forum pois realmente não sou usuário nem desenvolvi nd com o Flex. > > > > > > Eu trabalho com programação há algum tempo e geralmente o Flash e o > > > ColdFusion fazem parte dos meus trabalhos. Quando o Flex foi lançado > > > eu achei que seria uma revolução no conceito RIA mas, eu pensei o > > > seguinte, se eu posso desenvolver conteúdo rico com mais qualidade, > > > desempenho e segurança para o cliente com o "casal Flash e ColdFusion" > > > pra que então usar Flex??? > > > > > > Claro, o Flex é uma alternativa ao RIA mas não vejo vantagens, a não > > > ser o tempo de desenvolvimento pois achei o código dele bem > > > simplificado (coisa que o ColdFusion ja tem há muitos anos). > > > > > > Não quero que interpretem mal o que eu estou publicando, apenas quero > > > saber quais são as vantagens do Flex comparando aos produtos Flash e > > > ColdFusion. > > > > > > Obrigado, até mais! > > > > > > > > > > > > > > > > > > Esse grupo faz parte da Comunidade Brasileira Flex > > > Sente confortavelmente e bem vindo ao Flex-Brasil > > > > > > > > > Yahoo! Grupos, um serviço oferecido por: > > > > > > > > > > > > > > > ________________________________ > > > Links do Yahoo! Grupos > > > > > > Para visitar o site do seu grupo na web, acesse: > > > http://br.groups.yahoo.com/group/flex-brasil/ > > > > > > Para sair deste grupo, envie um e-mail para: > > > [EMAIL PROTECTED] > > > > > > O uso que você faz do Yahoo! Grupos está sujeito aos Termos do > Serviço do > > > Yahoo!. Esse grupo faz parte da Comunidade Brasileira Flex Sente confortavelmente e bem vindo ao Flex-Brasil Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/flex-brasil/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html

