Tem poucas décadas que os telefones celulares passaram a fazer parte de nossas vidas e cerca de duas década desde o lançamento do primeiro smartphone (SAGER, 2012), o Simon, pela empresa IBM, permitindo o desenvolvimento e instalação de aplicativos no aparelho além dos que vinham de fábrica. Mas os smartphones, e o próprio termo, só começaram a se popularizar nos anos 2000 com o advento do uso de Internet móvel com relativa qualidade e as funções de PDA (Personal Digital Assistant) incorporadas aos aparelhos, inovação trazia pela Palm e seu Kyocera 6035 (PALMINFOCENTER, 2001).
Entretanto, ainda existiam muitas barreiras a serem rompidas para tornar o desenvolvimento de aplicativos para smartphones algo popular entre os desenvolvedores de software. O mercado de desenvolvimento para tais plataformas, até então dominado pela Sun e seu J2ME, carecia de concorrentes que impulsionassem esse mercado e que desenvolvessem maneiras de tirar o desenvolvimento de aplicações das mãos das grandes empresas e desse mais poderes aos desenvolvedores comuns. Em 2008 (HEINEN, 2012), a Apple liberou o SDK oficial de desenvolvimento para sua plataforma móvel, bem como o acesso à sua loja virtual iTunes para que qualquer desenvolvedor pudesse distribuir os aplicativos criados para a plataforma, aumentando exponencialmente seus lucros com a plataforma. Esta atitude movimentou toda a indústria em uma mesma direção, fazendo com que seus concorrentes investissem na mesma receita de sucesso, gerando frameworks cada vez mais sofisticados, complexos e numerosos.
Frente às numerosas opções de linguagens de programação disponíveis para o desenvolvimento de aplicativos para dispositivos móveis, foi realizado um estudo, cujo resultado é este artigo, elucidando as principais características, vantagens e desvantagens das três principais linguagens de programação do mercado de dispositivos móveis: Java, Objective-C e C#. Este artigo está estruturado da seguinte forma: a seção 2 apresenta uma breve definição sobre as três linguagens de programação de maior aceitação no mercado de desenvolvimento móvel atual. A seção 3 apresenta o estudo comparativo entre as linguagens. E por fim, algumas conclusões são apresentadas sobre o trabalho e as referências bibliográficas são disponibilizadas no final deste artigo.
Linguagens de programação para Dispositivos Móveis
Inúmeras são as linguagens de programação que se propõem a tornar possível o desenvolvimento de aplicativos para dispositivos móveis. Dentre elas, três estão nos centro das atenções dos desenvolvedores nos últimos anos: Java, Objective-C e C#. Enquanto que a primeira está consolidada como uma grande opção para desenvolvimento móvel desde a década de 90, a segunda é quem elevou o desenvolvimento das ditas “apps” (abreviação para applications) a outro patamar. Por fim, a última, é uma das grandes promessas para o desenvolvimento móvel sobre plataforma Windows nos próximos anos. As três linguagens são descritas brevemente nas próximas seções.
Java
A linguagem Java de James Gosling foi à público na década de 90 (ORACLE, 2012) causando grande alvoroço na comunidade desenvolvedora mundial, devido à sua portabilidade para os mais variados dispositivos. Dentro da plataforma Java, a divisão Java Micro Edition foi a primeira a tornar o desenvolvimento de aplicativos móveis algo mais próximo do dia-a-dia dos desenvolvedores. A linguagem Java possui as seguintes características (LIANG, 2012):
- Orientada à Objetos;
- Permite herança simples e implementação múltipla com interfaces;
- Permite programação multitarefa (multithread);
- Fortemente tipada;
- Genérica (Generics);
- Código-aberto (open-source);
- Multiplataforma (depende de máquina virtual instalada);
- Híbrida (compilada e interpretada);
- Coletor automático de lixo (Garbage Collector);
- Encapsulamento de membros através de métodos;
Para saber mais sobre a linguagem Java, recomendo a leitura deste livro.
C#
A linguagem C# de Anders Hejlsberg tornou-se o carro-chefe da Microsoft em 2000 (HAMILTON, 2008), quando foi desenvolvida especialmente para a plataforma .NET, que atende às exigências de desenvolvimento web, desktop e mobile para ambiente Windows. Com o lançamento do sistema operacional Windows Phone 7 em 2011, a divisão móvel da plataforma ganhou novo fôlego, principalmente com parcerias como com a Nokia, que abandonou sua antiga plataforma, Symbian. A tendência é que nos próximos anos a linguagem C# obtenha uma grande fatia do mercado mobile junto às mais tradicionais Java e Objective-C. A linguagem C# possui as seguintes características (DUSSAD, 2010):
- Orientada à Objetos;
- Permite herança simples e implementação múltipla com interfaces;
- Especificação aberta (ECMA);
- Permite programação multitarefa (multithread), paralela e assíncrona;
- Fortemente tipada, embora permita tipos dinâmicos e inferência de tipos;
- Genérica (Generics);
- Reflexiva (reflection);
- Multiplataforma (depende de máquina virtual instalada);
- Híbrida (compilada e interpretada);
- Coletor automático de lixo (Garbage Collector);
- Encapsulamento de membros através de propriedades;
- Extensão de classes através de Extension Methods.
Objective-C
Objective-C foi criada por Brad Cox e Tom Love em 1980, propondo uma evolução à linguagem C, principalmente no que tange a adição de Orientação à Objetos (TECHOTOPIA, 2012). Mas somente em 2008, com a liberação do SDK oficial da Apple para desenvolvimento para a plataforma iOS é que o Objective-C passou a atrair a atenção de desenvolvedores do mundo inteiro estando hoje entre as linguagens de programação mais utilizadas no mundo. Entre as principais características da linguagem carro-chefe da Apple podemos citar (HEINEN, 2012):
- Orientada à Objetos;
- Permite herança simples e implementação múltipla com protocolos;
- Fortemente tipada;
- Reflexiva (reflection);
- Linguagem compilada;
- Programação baseada em mensagens;
- Coletor automático de lixo (Reference Counter a partir do iOS 5);
- Encapsulamento de membros através de propriedades;
- Extensão de classes através de Categorias;
Comparativo entre as linguagens estudadas
O cenário de desenvolvimento de software para dispositivos móveis é um dos mais vorazes da atualidade, segundo [MCMILLAN, 2010], uma pesquisa demonstrou que 35% das empresas de TI consideram o recrutamento de profissionais para trabalhar em projetos de computação móvel como uma das três prioridades da empresa. Além disso, a mesma pesquisa revelou que 95% das empresas consideram o mercado mobile extremamente competitivo. Um dos motivos, ainda segundo [MCMILLAN, 2010] é o fato de que todos querem versões portáteis de seus softwares desktop.
Em um mercado com crescimento tão vertiginoso é natural que os desenvolvedores tenham dúvidas com relação à quais plataformas devam focar-se para que não percam tempo e tenham acesso às melhores oportunidades disponíveis. Desta maneira, um estudo breve sobre as principais plataformas do mercado pode tornar a escolha mais fácil, dependendo das habilidades prévias do desenvolvedor, de seu gosto pessoal e do potencial de mercado da plataforma.
O Quadro 1 ilustra algumas das principais diferenças entre as três linguagens estudadas, com base nas referências citadas e em experiências de desenvolvimento com as mesmas.
Java | C# | Objective-C | |
Orientada-à-Objetos | Sim | Sim | Sim |
Encapsulamento | Métodos | Propriedades | Propriedades |
Herança | Simples | Simples | Simples |
Implementação Múltipla | Interfaces | Interfaces | Protocols |
Extensão de Classes | Não | Extension Methods | Categories |
Classes Divididas | Não | Partial Classes | Arquivos .m e .h |
Reflexiva | Não | Sim | Sim |
Execução Nativa | Híbrida | Híbrida | Compilada |
Chamadas | Por Referência | Por Referência | Por Mensagens |
Coletor de Lixo Automático | Sim | Sim | Sim (SDK v5) |
Uso Explícito de Ponteiros | Não | Não | Sim |
Alocação de Memória | Dinâmica | Dinâmica | Manual |
Delegation | Não | Sim | Sim |
Forwarding | Não | Não | Sim |
Fast Enumeration | Sim | Sim | Sim |
Namespaces | Não | Sim | Não |
Classes Internas | Sim | Sim | Não |
Objetos Anônimos | Sim | Sim | Sim |
Case-sensitive | Sim | Sim | Sim |
Todas as linguagens citadas têm suas origens em outras linguagens, em especial C e SmallTalk. Desta maneira, é natural que possuam muitas semelhanças. Em especial C# e Java, que possuem inclusive sintaxe idêntica em muitos aspectos, além de arquitetura de execução similar, baseada em máquinas virtuais. Dentre as três, Objective-C é a que mais se diferencia das linguagens estudadas, principalmente devido à chamada de métodos através de mensagens e separação de classes em arquivos distintos (embora C# também permita isso). Ainda assim, a evolução de suas concorrentes trouxe alguns benefícios para a linguagem adotada pela Apple, como o coletor de lixo, presente no Java e C# desde sua criação, que foi incorporado ao Objective-C na versão 5 do SDK.
Conclusões
Muito se evoluiu no desenvolvimento de software móvel desde os primeiros smartphones na década de 90 para cá. A necessidade de aumento de produtividade e qualidade fez com que os grandes players de software do mercado desenvolvessem plataformas de desenvolvimento móvel cada vez mais completas e sofisticadas. Dentre estas, o Java da Sun (hoje Oracle), o C# da Microsoft e o Objective-C da Apple figuram entre as linguagens mais expressivas no cenário de desenvolvimento mobile mundial.
O uso de uma tecnologia específica para o desenvolvimento de sua aplicação é muitas vezes guiado pelas suas necessidades, público-alvo e objetivo final com a aplicação. Conhecer as linguagens predominantes no mercado pode lhe ser muito útil para que use a ferramenta certa para a tarefa certa. Este artigo apresentou de forma breve e resumida as principais linguagens que concorrem hoje pela atenção dos desenvolvedores de aplicativos móveis em âmbito mundial.
Pelos estudos efetuados com três das mais utilizadas linguagens do mercado móvel, pôde-se constatar que uma vez que são voltadas à famílias de dispositivos completamente distintas, não há como definir que a linguagem a é declaradamente melhor que a linguagem b, uma vez que a escolha se dará principalmente pela plataforma que se quer atingir. E embora alguns frameworks alternativos permitam desenvolvimento cross-platform, ainda não se consegue obter resultados tão bons do que com os SDKs oficiais e suas respectivas linguagens nativas.
Referências
SAGER, I.; Before Iphone and Android Came Simon, the First Smartphone, 2012. Disponível em: <http://www.businessweek.com/articles/2012-06-29/before-iphone-and-android-came-simon-the-first-smartphone>. Acesso em: 18 agosto 2012
PALMINFOCENTER; Kyocera QCP 6035 Smartphone Review, 2011. Disponível em: <http://www.palminfocenter.com/view_story.asp?ID=1707>. Acesso em: 18 agosto 2012
HEINEN, F.; Desenvolvimento de Aplicativos para iOS, 2012. Disponível em: <http://www.moodle.unisinos.br/file.php/4633/INTRODUCAO_A_PLATAFORMA_iOS/Farlei_intro_plataforma_iOS_texto.pdf>. Acesso em: 18 agosto 2012
ORACLE; The History of Java Technology, 2012. Disponível em: < http://www.oracle.com/technetwork/java/javase/overview/javahistory-index-198355.html>. Acesso em: 18 agosto 2012
LIANG, D.; Characteristics of Java, 2012. Disponível em: < http://www.cs.armstrong.edu/liang/intro6e/JavaCharacteristics.pdf>. Acesso em: 18 agosto 2012
HAMILTON, N.; The A-Z of Programming Languages: C#, 2008. Disponível em: < http://www.computerworld.com.au/article/261958/a-z_programming_languages_c_/#closeme>. Acesso em: 18 agosto 2012
DUSSAD, V.; Characteristics of C#, 2010. Disponível em: < http://www.indiastudychannel.com/resources/101182-Characteristics-C.aspx>. Acesso em: 18 agosto 2012
TECHOTOPIA; The History of Objective-C, 2012. Disponível em: < http://www.techotopia.com/index.php/The_History_of_Objective-C>. Acesso em: 18 agosto 2012
MCMILLAN, D.; Tech Companies see Dearth of Mobile-Software Developers, 2010. Disponível em: <http://www.businessweek.com/technology/content/oct2010/tc20101020_639668.htm>. Acesso em: 18 agosto 2012
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.