Visualizar - Polis Educacional
Transcrição
Visualizar - Polis Educacional
TIAGO JOSÉ GRILLO 0300744 AVALIAÇÃO COMPARATIVA DE PLATAFORMAS DE DESENVOLVIMENTO DE APLICAÇÕES WEB. Jaguariúna 2008 TIAGO JOSÉ GRILLO 0300744 AVALIAÇÃO COMPARATIVA DE PLATAFORMAS DE DESENVOLVIMENTO DE APLICAÇÕES WEB. Relatório parcial apresentado à disciplina Trabalho de Graduação III, do curso de Ciência da Computação da Faculdade de Jaguariúna, sob orientação do Prof. Ms. Peter Jandl Junior, como exigência parcial para conclusão do curso de graduação. Jaguariúna 2008 ii Folha de Aprovação GRILLO, Tiago José. Avaliação comparativa de plataformas de desenvolvimento de aplicações. 2008. Monografia defendida e aprovada na FAJ em quarta-feira, 10 de dezembro de 2008 pela banca examinadora constituída pelos professores. _____________________________ Nome: Prof. Ms. Peter Jandl Jr. _________________________ Nome: Prof. Ademário Araújo Jr. _________________________ Nome: Prof. Ms. Fernando Augusto Zancheta iii A meus pais pela confiança e incentivo que me motivaram a concluir mais esta etapa e a todos que de alguma forma colaboraram para a realização deste projeto. iv Agradecimentos Primeiramente agradeço a Deus por me dar saúde e perseverança nas horas difíceis. Agradeço também a minha família e minha namorada pela compreensão e apoio que deram, a todos os professores e amigos, pela orientação e apoio quando solicitado. E em particular: Ao Prof. Ms. Peter Jandl Jr., pela orientação e paciência infindáveis no decorrer deste projeto. Aos meus amigos André, Diego, Regis e Rodrigo pelo apoio direto e nas discussões técnicas que, em muito, enriqueceram a realização desta pesquisa. v “A ciência de hoje é a tecnologia de amanhã.” (Teller, Edward) vi GRILLO, Tiago José. Avaliação comparativa de plataformas de desenvolvimento de aplicações. 2008. Monografia (Bacharelado em Ciência da Computação) – Curso de Ciência da Computação da Faculdade de Jaguariúna. RESUMO Esta monografia propõe um estudo comparativo entre três plataformas de desenvolvimento focadas na internet. O critério utilizado na escolha destas foi uma pesquisa em rankings. Buscando as dez mais utilizadas pelos profissionais no setor de desenvolvimento de software no mundo. Após esta análise as plataformas selecionadas, foram o C# da .Net Framework SDK, o PHP 5 e o Java mais precisamente sua especificação Java EE (Java Enterprise Edition) da Sun Microsystens. Com um protótipo simples, mas que contenha as principais características de um Sistema web como, manipulação de dados (inserção, alteração e consulta), gerenciamento de seção e navegabilidade, e de iguais características, desenvolvido nas três plataformas, se pretende mostrar as vantagens e desvantagens de cada uma delas, além de suas características e peculiaridades e apontar qual a melhor solução a um determinado problema, auxiliando os desenvolvedores na escolha da melhor plataforma, evitando problemas e transtornos neste caminho tão diversificado que é hoje o desenvolvimento de sistemas web. Palavras-chave: internet, C#, .Net, PHP, Java, Java EE. vii SUMÁRIO 1. INTRODUÇÃO ................................................................................................................................................. 1 2. SISTEMAS WEB .............................................................................................................................................. 2 2.1 HISTÓRICO ..................................................................................................................................................... 2 2.2 ARQUITETURA E ORGANIZAÇÃO WEB ............................................................................................................ 2 2.3 PLATAFORMAS DE DESENVOLVIMENTO ......................................................................................................... 4 2.3.1 Java....................................................................................................................................................... 4 2.3.2 PHP....................................................................................................................................................... 4 2.3.3 C#.......................................................................................................................................................... 5 3. JAVA .................................................................................................................................................................. 6 3.1 HISTÓRICO ..................................................................................................................................................... 6 3.2 PRINCIPAIS CARACTERÍSTICAS ....................................................................................................................... 6 3.3 ESPECIFICAÇÕES DO JAVA ............................................................................................................................. 8 3.4 SERVLET CONTÊINER..................................................................................................................................... 8 3.5 SERVLET ........................................................................................................................................................ 9 3.6 JSP – JAVASERVER PAGES .......................................................................................................................... 11 3.7 JSTL – JAVASERVER PAGES TAG LIBRARY ................................................................................................. 13 3.8 BEANS ......................................................................................................................................................... 14 3.8 JSF – JAVASERVER FACES........................................................................................................................... 14 4. PHP................................................................................................................................................................... 16 4.1 HISTÓRICO ................................................................................................................................................... 16 4.2 PRINCIPAIS CARACTERÍSTICAS ..................................................................................................................... 16 4.3 ESPECIFICAÇÕES .......................................................................................................................................... 17 4.4 A LINGUAGEM PHP ..................................................................................................................................... 17 5. C# (C SHARP) ................................................................................................................................................. 19 5.1 HISTÓRICO ................................................................................................................................................... 19 5.2 A PLATAFORMA .NET .................................................................................................................................. 19 5.2.1 Common Language Runtime (CLR) .................................................................................................... 20 5.3 PRINCIPAIS CARACTERÍSTICAS DO C# .......................................................................................................... 20 5.5 A LINGUAGEM C# ........................................................................................................................................ 21 6. PROTOTIPO ................................................................................................................................................... 22 6.1 DESCRIÇÃO .................................................................................................................................................. 22 6.2 PROTÓTIPO EM JAVA.................................................................................................................................... 24 6.2.1 Tecnologias utilizadas ........................................................................................................................ 24 6.2.2 Processo de desenvolvimento.............................................................................................................. 25 6.3 PROTÓTIPO PHP .......................................................................................................................................... 27 6.3.1 Tecnologias utilizadas ........................................................................................................................ 27 6.3.2 Processo de desenvolvimento.............................................................................................................. 28 6.4 PROTÓTIPO .NET .......................................................................................................................................... 31 6.4.1 Tecnologias utilizadas ........................................................................................................................ 31 6.4.2 Processo de desenvolvimento.............................................................................................................. 32 7. ANÁLISE DOS RESULTADOS .................................................................................................................... 35 7.1 AVALIAÇÃO OBJETIVA ................................................................................................................................. 35 7.2 AVALIAÇÃO SUBJETIVA ............................................................................................................................... 37 7.3 DIFICULDADES ENCONTRADAS .................................................................................................................... 38 7.4 QUADRO COMPARATIVO ............................................................................................................................. 38 7.5 ANÁLISE ...................................................................................................................................................... 39 8. CONCLUSÕES ............................................................................................................................................... 40 9. REFERÊNCIAS BIBLIOGRÁFICAS........................................................................................................... 41 viii LISTA DE SIGLAS API ARPANET C# CGI CLR COM COM+ CORBA EJB FTP GTK HTML HTTP IMAP IP JAVAEE JAXR JIT JMS JSF JSP JSTI JTA JVM LDAP MSIL NNTP ODBC PDF PERL PHP POO POP3 RPC SDK SNMP TCP UDP XML Application Programming Interface Advanced Research Projects Agency Network C Sharp Common Gateway Interfaces Common Language Runtime Component Services Application Component Services Application Plus Common Object Request Broker Architecture Enterprise JavaBeans Components File Transfer Protocol Graphical User Interface Toolkit Hypertext Markup Language Hypertext Transfer Protocol Internet Message Access Protocol Internet Protocol Java Enterprise Edition Java API for Xml Registries Just In Time Java Message Service Java Server Faces Java Server Page Pages Standard Tag Library Java Transaction API Java Virtual Machine Lightweight Directory Access Protocol Microsoft Intermediate Language Network News Transfor Protocol Open Database Connection Portable Document Format Pratical Extraction And Report Language PHP Hypertext Preprocessor Programação Orientada A Objetos Post Office Protocol Remote Procedure Call Software Development Kit Simple Network Management Protocol Transmission Control Protocol User Datagram Protocol Extensible Markup Language ix LISTA DE FIGURAS FIGURA 1 – ARQUITETURA WEB ............................................................................................................................... 3 FIGURA 2 – REQUISIÇÃO E RESPOSTA ...................................................................................................................... 3 FIGURA 3 – AMBIENTE JAVA .................................................................................................................................... 7 FIGURA 4 – ESTRUTURA DE COMPILAÇÃO ................................................................................................................ 7 FIGURA 5 – REPRESENTAÇÃO APPLICATION SERVER ............................................................................................... 9 FIGURA 6 – IMPRIMIR RESPOSTA ............................................................................................................................ 11 FIGURA 7 – JSP TRADUZIDO PARA SERVLET .......................................................................................................... 12 FIGURA 8 – ESTRUTURA DE DESENVOLVIMENTO .................................................................................................... 15 FIGURA 9 – VISÃO GERAL TELA DE LANÇAMENTO ................................................................................................. 22 FIGURA 10 – DIAGRAMA DE CASO DE USO ........................................................................................................... 23 FIGURA 11 – LANCAPEDIDO.JSP ............................................................................................................................ 25 FIGURA 12 – TRECHO DO CÓDIGO QUE TRATA A EXIBIÇÃO DE MENSAGENS DE ERRO ............................................. 27 FIGURA 13 – OPÇÕES DE TELAS DISPONÍVEIS ...................................................................................................... 28 FIGURA 14 – CONFIGURAÇÃO MESTRE/DETALHE ................................................................................................ 29 FIGURA 15 – CONFIGURAÇÕES TELA DE LOG IN ................................................................................................... 30 FIGURA 16 – LOGIN.PHP ABERTO EM OUTRO EDITOR PARA VISUALIZAÇÃO E MANIPULAÇÃO DO CÓDIGO............ 31 FIGURA 17 – DEFAULT.ASPX, TELA DE LOG IN ........................................................................................................ 32 FIGURA 18 – POSSIBILIDADES DE CRIAÇÃO DE ESTILOS .......................................................................................... 33 FIGURA 19 – EXEMPLO PEDIDOSBLL.CS E A PÁGINA COM O GRIDVIEW ................................................................ 34 FIGURA 20 – EXEMPLO TABELA EM ASP .NET ........................................................................................................ 35 FIGURA 21 – EXEMPLO TABELA EM JSF JAVA ........................................................................................................ 36 FIGURA 22 – EXEMPLO TABELA EM PHP................................................................................................................ 36 x LISTA DE LISTAGENS LISTAGEM 1 – INICIALIZAÇÃO DE UMA SERVLET ................................................................................................... 10 LISTAGEM 2 – FINALIZAÇÃO DE UMA SERVLET ...................................................................................................... 10 LISTAGEM 3 – IMPLEMENTAÇÃO DO MÉTODO DE SERVICE ..................................................................................... 10 LISTAGEM 4 – EXEMPLO VÁLIDO DE PAGINA.JSP .................................................................................................... 11 LISTAGEM 5 – CÓDIGO JAVA EM PAGINA.JSP .......................................................................................................... 12 LISTAGEM 6 – FORMULÁRIO ENVIANDO REQUISIÇÃO ............................................................................................. 13 LISTAGEM 7 – EXPRESSION LANGUAGE PARAM ...................................................................................................... 13 LISTAGEM 8 – EXEMPLO DE TAGLIB ....................................................................................................................... 13 LISTAGEM 9 – EXEMPLO DE BEAN .......................................................................................................................... 14 LISTAGEM 10 – EXEMPLO BEAN ............................................................................................................................. 14 LISTAGEM 11 – TAGLIB DE CABEÇARIO.................................................................................................................. 15 LISTAGEM 12 – USO DE TAGLIB E BEAN ................................................................................................................. 15 LISTAGEM 13 – TAGS DELIMITADORAS DO SCRIPT PHP ........................................................................................... 17 LISTAGEM 14 – DECLARAÇÃO DE VARIÁVEL EM PHP ............................................................................................. 17 LISTAGEM 15 – SIMPLES PÁGINA EM PHP ............................................................................................................... 18 LISTAGEM 16 – CLASSE EM PHP ............................................................................................................................. 18 LISTAGEM 17 – UTILIZANDO OBJETO EM PHP ......................................................................................................... 18 LISTAGEM 18 – SINTAXE SIMPLES EM C# ............................................................................................................... 21 LISTAGEM 19 – COMPILADOR .NET VIA LINHA DE COMANDO ................................................................................ 21 LISTAGEM 20– DATABALE DO TOMAHAWK ............................................................................................................ 26 LISTAGEM 21 – FACES-CONFIG.XML ....................................................................................................................... 26 LISTA DE TABELAS Tabela 1 – Quadro Comparativo.............................................................................................................................38 xi 1. INTRODUÇÃO A internet com o passar dos anos tem ficado cada vez mais rápida e com esta mesma velocidade tem se popularizado, tanto para o uso doméstico, quanto para criar e agilizar alguns meios de negócio, ainda como DEITEL (2005) afirma “Com certeza, a internet e a World Wide Web são as criações mais importantes e profundas que já ocorreram na área de tecnologia.”. Isto graças ao seu alcance e versatilidade, suprindo a necessidade da troca de informação de maneira rápida, forçando os sistemas a serem distribuídos. É nesta velocidade também que os profissionais que trabalham com o desenvolvimento de sistemas tem que evoluir, adaptando-se a diversidade de plataformas que surgiram para acompanhar este novo modelo de informação, que é tão vasta que chega a confundir os profissionais da área na hora de definir suas aplicações e quais tecnologias utilizar. Dentre elas há plataformas de desenvolvimento que rodam sobre infra-estrutura proprietária e/ou livre e neste ponto como MORAZ (2005) lembra “...é importante apontar o exemplo de muitas empresas que, para reduzir os gastos com licença de software, migraram toda a infra-estrutura web para plataformas livre...”, centradas na web ou de uso geral e ainda a de avaliar critérios portabilidade, em qual paradigma de programação trabalha, performance, entre outros. Este trabalho surge da necessidade de apontar os pontos fortes e fracos de três tecnologias mais usadas pelos desenvolvedores do mundo todo nos dias atuais e implementá-las, testá-las e compará-las. Para a escolha das plataformas que compõe o trabalho foi utilizado o ranking divulgado pelo site Tiobe Software (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html, março, 2008). Desenvolvendo um protótipo que possua as principais características dos sistemas encontrados na internet, tais como, usabilidade, manipulação de dados (consultas, alteração e inserção) e interface para interação com o usuário de iguais especificações e características em cada uma das plataformas escolhidas, salvo peculiaridades que cada uma das tecnologias venha a possuir. Com a análise dos testes no protótipo pretende-se mostrar qual a melhor, ou mais viável, plataforma para a solução de um determinado problema e auxiliar os profissionais da área a conhecer melhor estas plataformas trazendo mais garantias ao projeto final e minimizando os riscos. 1 2. SISTEMAS WEB A internet, uma rede global de computadores, desenvolvida há quase quatro décadas e originalmente projetada para conectar os principais sistemas de computadores hoje conecta milhões. 2.1 Histórico As pesquisas de CONER (2007) contam que nas décadas de sessenta e setenta durante a guerra fria entre EUA (Estados Unidos da América) e a extinta União Soviética. Os EUA necessitavam de comunicação entre uma base militar e outra, surgindo assim a ARPANET (Advanced Research Projects Agency Network). Em pouco tempo e com algumas mudanças já estava nas universidades. O sucesso foi tanto que novos e grandes investimentos foram feitos pelos governos e empresas privadas, tecnologias foram criadas e a internet tornou-se o que conhecemos hoje. Uma rede de computadores conectados em toda a extensão do globo que oferece diversos serviços a seus usuários como podem ser o correio eletrônico, o chat, a web ou as mais recentes investidas as aplicações web. Lenta no início, mas a cada dia mais rápida e versátil, estando em praticamente todos os lares, não dá para imaginar se sentar à frente de um micro computador sem acesso a rede mundial de computadores. 2.2 Arquitetura e organização web Todos os serviços oferecidos pela internet são realizados por milhares de computadores que estão permanentemente ligados e conectados, esperando que os usuários lhes solicitem serviços e servindo-os uma vez solicitados. Em especificações CONER (2007) diz que por este motivo a internet tem que ser um sistema heterogêneo, para que possa funcionar em qualquer uma das várias plataformas de hardware e software realizando as mais diversas tarefas e as diferentes necessidades das pessoas. Para isto foi criado um complexo e eficiente sistema de protocolos, tais como, http (Hyper Text Transfer Protocol), que por finalidade tem a transferência de dados e comunicação entre cliente e servidor na web, TCP/IP, UDP, FTP, POP3, SMTP, entre outros, cuja as definições são abertas para aqueles desejem utilizá-los, estes são os responsáveis por garantir que um computador na rede “entenda” e “converse” com outros dispositivos que estejam nela. O protocolo http opera sobre o protocolo TCP/IP, os dois principais protocolos, como um mecanismo de estrutura requisição/resposta, onde faz a comunicação entre o cliente e o servidor através de mensagens. O cliente envia uma mensagem de requisição de um recurso e o servidor envia uma mensagem de resposta ao cliente com a solicitação. Geralmente este protocolo utiliza a porta 80 da arquitetura TCP/IP e é usado para a comunicação de sites. O recurso mais comum é a página escrita na linguagem HTML (Hipertext Markup Language). Como ilustra a figura 1. 2 Figura 1 – Arquitetura web De maneira grosseira a internet é dividida em três segmentos, em uma com o lado do cliente onde se concentra as interações, o design e as solicitações, do outro lado com os servidores e ai o processamento é feito e tudo aquilo que o usuário passou é transformado e retorna a ele. E gerenciando todas as requisições e solicitações está a internet. As linguagens de programação também se dividem em suas especializações, as próprias para o lado cliente como o HTML, JavaScript, Flash e as voltadas para o lado servidor como Java, PHP, C#, Ruby e outras tantas, com representado pela figura 2. Figura 2 – Requisição e Resposta 3 2.3 Plataformas de Desenvolvimento Foram relacionadas por serem as tecnologias em desenvolvimento mais utilizadas no mundo pelos programados e empresas de software e também por possuírem várias características em comum como, por exemplo, têm segmentos voltados para a web, são orientadas a objetos e outras que serão analisadas neste trabalho. São elas o Java, o PHP e o .Net mais especificamente o C#. 2.3.1 Java Além de ser o primeiro no ranking das tecnologias mais usadas, conforme divulgado no site Tiobe Software (março, 2008), tem ganhado adeptos nesta nova fase da web, onde o objetivo não é mais apenas levar conteúdo de entretenimento, conhecimento e ligação entre pessoas, mas também sistemas inteiros centrados na web. Para este fim, o Java oferece APIs (application programming interfaces) que trazem confiabilidade e dinamismo aos profissionais da área. O desenvolvimento web no começo era feito com Servlet que funciona como um pequeno servidor (o nome vem do inglês servidorzinho) que recebe chamadas de diversos clientes e trabalha estas requisições conforme DEITEL (2005) “Os servlets são eficazes para desenvolver soluções baseadas na Web que interagem com bancos de dados em favor dos clientes...”, hoje é muito utilizado nos teclados virtuais que os bancos utilizam para segurança de seus clientes. A maior parte das páginas dinâmicas escritas em Java são feitas com o JSP (JavaServer Pages) que afinal na definição de TEMPLE (2004) é uma página HTML comum que contem também código Java, ou seja, ele permite que seja inserido código servidor junto com código cliente, deixando os arquivos difíceis para leitura e manutenção. Para melhorar o resultado gerado pelo JSP e conseqüentemente a vida do programador, a Sun sugeriu o uso do JSTL (JavaServer Pages Standard Tag Library) esta foi a forma encontrada de padronizar, através da simplificação e normalização das tags, o trabalho de milhares de programadores de páginas JSP. GEARY at al (2007) “...programas para a web com Servlets e páginas JavaServer Pages (JSP), é uma técnica um tanto contra-intuitiva e tediosa.” O JSF (JavaServer Faces) vai dar a agilidade que faltava na criação de páginas e gerando tags mais sofisticadas para criação de interfaces com o usuário. 2.3.2 PHP Já consagrado ao longo dos anos o PHP (um acrônimo recursivo para "PHP: Hypertext Preprocessor") surge na quarta posição como a plataforma mais utilizada no mundo, visto na pesquisa do site Tiobe software (março, 2008), com recursos sofisticados, é uma linguagem interpretada e não compilada, tem comunicação com os principais bancos de dados disponíveis no mercado e permitem fazer uso de todas as habilitações oferecidas pela orientação a objetos, presentes nas melhores linguagens de programação. É uma linguagem específica, ou seja, totalmente voltada ao desenvolvimento web, assim como o Java e na colocação de MORAZ (2005) “...temos a liberdade de escolher o sistema operacional e o servidor web que se deseja utilizar...”, o mesmo código roda em qualquer plataforma, possui tipagem fraca, ou seja, o tipo de uma variável não precisa ser definido previamente e sintaxe similar ao C/C++ e ao PERL, foram os fatores que fizeram o sucesso do PHP. 4 2.3.3 C# Baseado no C++ e no Java e conforme LOTAR (2007) “Aproveitar o conhecimento do programador em diferentes tipos de aplicações, como aplicações Windows ou web.”, a Microsoft cria a plataforma .NET (iniciativa que visa uma plataforma única para desenvolvimento e execução de sistemas e aplicações) e com ela a primeira linguagem totalmente baseada neste novo conceito o C# (lê-se C Sharp) que é orientado a objetos, foi criado praticamente do zero e por este motivo é a linguagem símbolo do .Net, embora outras linguagens sejam, oficialmente, suportadas pela plataforma. Também é a linguagem mais integrada com o framework, por que seu compilador foi o primeiro a ser desenvolvido e muitas das suas classes ou funções são altamente vinculadas com o .Net Framework, que é o responsável por executar o código gerado pela máquina virtual do .Net o CLR (Common Language Runtime) que interpreta o código do desenvolvedor e compila para o código nativo do sistema, idéia parecida com o da plataforma Java. 5 3. JAVA Orientado a objetos e de grande portabilidade o Java vem evoluindo para a internet, com o Java EE e suas APIs que se complementam começando pelos Servlets, depois o JSP normalizado pelo JSTL e simplificado no JSF. 3.1 Histórico Segundo JANDL (2002) e DEITEL (2005) em 1992 a Sun Microsystems criou um time (conhecido como Green Team) para desenvolver inovações tecnológicas. Esse time foi liderado por James Gosling, considerado o pai do Java, a idéia era de criar um interpretador (uma máquina virtual) para pequenos dispositivos, facilitando a reescrita de software para aparelhos eletrônicos. A idéia não deu certo, tentaram fechar diversos contratos, mas não houve êxito, hoje sabemos que o Java domina o mercado de aplicações para celulares, talvez naquela época fosse prematuro ainda. Com a web nasce à oportunidade de utilizar a idéia e poder rodar pequenas aplicações dentro do browser. A semelhança era que na Internet havia uma grande quantidade de sistemas operacionais e browser, com isso seria uma vantagem poder programar numa única linguagem, independente da plataforma. Foi ai que o Java 1.0 foi lançado: focado em deixar o browser não apenas um thin client1, fazendo com que ele possa também realizar operações, não apenas renderizar HTML. Sabemos que hoje os applets realmente não são o foco do Java. A tecnologia Java nasceu com um objetivo em mente, foi lançado com outro, mas no final decolou mesmo no desenvolvimento de aplicações do lado do servidor. 3.2 Principais características Nas características apontadas por JANDL (2002) se destaca o fato de ser criada para ser orientada a objetos, por que salvo seus tipos primitivos, tudo em Java são classes ou instâncias delas e atende assim aos requisitos deste paradigma de programação. Não trabalha com a manipulação direta da memória livrando o programador de tarefas mais complexas, houve um tempo em que se existia um preconceito com Java por ele ser mais lento, isto não existe mais devido a grande evolução da JVM e também do hardware existente nos dias de hoje. O Java prevê também um nível de segurança que garante, no caso das applets, que os programas não executem operações no sistema cliente. A principal característica do Java é realmente sua máquina virtual que diferente das outras linguagens onde o código fonte, escrita que o programador utiliza na criação de programas é diretamente compilado para linguagem de máquina ou código binário, causando o problema de se ter que escrever um programa para cada sistema operacional. O ambiente Java é demonstrado pela figura 3. 1 Termo em inglês para cliente magro, ou que não apresenta nenhum processamento. 6 Figura 3 – Ambiente Java Com a Java escreve-se o código fonte apenas uma vez e este pode ser executado em qualquer sistema operacional que possua uma JVM. Sendo parte interpretado, parte compilado o programador escreve seu código e este é compilado (com o programa disponibilizado junto ao kit de desenvolvimento o javac) e transformado em bytecode2 os “binários”, a JVM por sua vez interpreta estes arquivos class3 para os binários do sistema operacional que se esta rodando. Porém a definição de Java Virtual Machine é bem mais ampla que um simples interpretador é um computador simulado, ou seja, é neste nível que é controlado e gerenciado o acesso a memória, gerencia threads, a pilha de execução, etc. A aplicação rodando sem nenhum envolvimento do sistema operacional ou ainda na definição de JANDL (2002) “As aplicações e os (applets) miniaplicativos Java são executados sobre a plataforma Java e, portanto, sob um ambiente uniforme”. A estrutura de como é compilado o fonte Java segue na figura 4. Figura 4 – Estrutura de compilação 2 3 Nome dado a linguagem gerada após a compilação e que a JVM utiliza. Extensão dos arquivos gerados após a compilação do código fonte. 7 Conforme especifica DEITEL (2005) e JANDL (2002), mesmo que não seja uma boa prática e nem recomendado o Java pode ser compilado diretamente em código nativo de máquina, com isto se perde a questão de portabilidade um dos princípios do Java, a JVM também pode gerar código nativo caso perceba que determinado trecho esteja sendo muito utilizado esta tecnologia é chamada de Hostpot e o compilador é o JIT (Just inTime Compiler), o compilador que aparece “bem na hora” que você precisa. Compilar dinamicamente, a medida do necessário, pode gerar um desempenho melhor. Uma vez que na compilação estática o código já foi otimizado baseado em heurísticas e o compilador pode ter tomado uma decisão não tão boa. Já a JVM, por estar compilando dinamicamente durante a execução, pode perceber que um determinado código não está com performance adequada e otimizar mais um pouco aquele trecho, ou ainda mudar a estratégia de otimização. É por esse motivo que as JVMs mais recentes (como a do Mustang, Java 6), em alguns casos, chega a ganhar de códigos C compilados com o GCC 3.x, se rodados durante um certo tempo. No início havia ainda o preconceito de que o Java seria lento, hoje isto não é considerado, as JVM evoluíram muito e o processamento das máquinas também, além de que um profissional que faça um bom programa em Java é bem mais fácil de se encontrar, do que um profissional que faça um mesmo código em C++, por exemplo, que tenha uma diferença considerável de desempenho. 3.3 Especificações do Java Seguindo GEARY at al (2007) a arquitetura Java ainda define em sua API (bibliotecas com as classes Java que dispões de funcionalidades da plataforma). O Java EE (Java Enterprise Edition) e é a parte que mais nos interessa no momento, o Java EE é uma série de especificações bem detalhadas mostrando como deve ser implementado um software que faz um determinado serviço. A idéia é criar uma aplicação que utilize estes serviços sem que o programador se preocupe em desenvolver esta parte do sistema, há implementações para estes serviços pagas e algumas muito boas livres de qualquer forma com as especificações se pode mudar de implementação sem modificar a interface da aplicação. Em sua versão 5 o Java EE dispõe das seguintes APIs: • JAX-RPC (Java API for XML-Based RPC), JAXR (Java API for XML Registries), para trabalhar com arquivos XML; • JSP, JSF, voltado a trabalhos web; • EJB (Enterprise Javabeans Components) e Java Persistence API, objetos distribuídos, clusters, acesso remoto a objetos, etc; • JTA (Java Transaction API), responsável pelo controle de transações no contêiner; • JMS (Java Message Service) troca de mensagens síncronas ou não. Estes são apenas alguns exemplos existem várias outras, aqui o centro dos estudos será na parte web. 3.4 Servlet Contêiner TEMPLE at al (2004) explica que com a necessidade de gerar conteúdo dinâmico, sugiram os primeiros programas CGI (Common Gatway Interface). Através 8 de linguagens como C, C++, Perl, ASP, PHP e outras foi possível gerar este tipo de conteúdo. Para melhorar o desempenho deste, surgiu o que viria a ser um Servlet, uma nova forma de trabalhar com requisições clientes via web economizando o tempo de processamento de uma chamada e memória usada no processo, além de ser orientado a objetos e portável. O contêiner é o responsável por dar suporte para as APIs de Servlet e JSP. Uma representação simbólica é exibida na figura 5. Figura 5 – Representação Application Server 3.5 Servlet Trabalha como um pequeno servidor que recebe chamadas (request) de diversos clientes e retorna algo (response), HTML, gif, jpeg, etc. Como o Java é orientado a objetos, podemos dizer que uma Servlet é representada como um objeto. Conforme TEMPLE at al (2004) diversas requisições podem ser feitas a uma mesma Servlet tornando-a mais rápida que um programa CGI, por exemplo. O comportamento das Servlets pode ser definido pela classe HttpServlet do pacote javax.servlet, que se aplicam as Servlets que trabalham através do protocolo http, a interface servlet é que define exatamente como uma Servlet funciona possibilitando o uso de qualquer protocolo baseado em requisição e resposta. Toda Servlet deve possuir um construtor sem argumentos para que o contêiner possa criá-la e inicializá-la com o método init conforme a listagem 1, e a usa durante todo o seu período ativo, até que irá desativá-las através do método destroy de acordo com a listagem 2, para depois liberar o objeto. Na inicialização de uma Servlet, quando parâmetros podem ser lidos e variáveis comuns a todas as requisições devem ser inicializadas, conexão com o banco de dados. 9 Listagem 1 – Inicialização de uma Servlet void init (ServletConfig config); Na finalização é quando estes recursos são liberados. Listagem 2 – Finalização de uma Servlet void destroy(); O funcionamento básico de uma Servlet se resume a inicialização, chamadas a métodos de serviço (essas chamadas passam dois argumentos para o método service, a requisição que o cliente e a resposta que permite enviar dados a este) e finalização. O exemplo a seguir, listagem 3, mostra uma Servlet implementando o método service. Listagem 3 – Implementação do método de service protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Recebe o writer PrintWriter out = response.getWriter(); // Escreve o texto out.println("<html>"); out.println("Ola Mundo"); out.println("</html>"); } O código mostra o método service que não executa nada e mostra uma mensagem ao usuário, para isto foi “alterado” a resposta que o Servlet envia ao cliente. O writer de saída do cliente pode ser obtido através do método getWriter da variável response e então fica simples utilizar um PrintWriter para imprimir algo como resposta, como é ilustrado na figura 6. 10 Figura 6 – Imprimir Resposta Toda requisição pode vir acompanhada de parâmetros que são de fundamental importância no desenvolvimento para a web. No método get é comum ter uma url que termine com “?parametro=valor” enquanto no método post se envia parâmetros através de um formulário ou escondidos da url. Independente disto estes parâmetros podem ser lidos pelo método getParameter. Por causa da arquitetura da API das Servlets, o método service é o ponto de partida de uma requisição e delega o processo para o representante adequado, de acordo com a requisição. As boas práticas de programação com Servlets diz que se deve implementar sempre o método service e não um dos métodos como doGet, doPost, doHeader, etc. 3.6 JSP – JavaServer Pages Tecnologia para criação de páginas com conteúdo dinâmico e estático. Uma página HTML comum para gerar texto estático, contêm também elementos JSP (código Java) que produzem conteúdo dinâmico e possui a extensão .jsp, basicamente é como na listagem 4 que se define o JSP. Listagem 4 – Exemplo válido de pagina.jsp <HTML>Ola Mundo</HTML> 11 Seria um código válido. Também poderia conter um código Java que declarasse uma variável, como na listagem 5. Listagem 5 – Código java em pagina.jsp <% String mensagem = “Ola Mundo”; %> As tags <% e %> delimitam o que é código Java, este código é chamado de scriptlet. Esta não é uma idéia nova, já vem sendo usada por várias linguagens. Na primeira vez que o JSP é chamado ele é interpretado, sendo transformado em um Servlet, em seguida é compilado. Figura 7 – JSP traduzido para Servlet Porém não é uma prática muito boa misturar código servidor com código HTML, além de dificultar a leitura imagine a situação onde o designer tem que fazer alguma alteração na página, ele terá que aprender Java para isto ou poderá ter um resultado não esperado. De acordo com TEMPLE (2004) analisou para eliminar um pouco disto a Sun criou uma linguagem chamada Expression Language que é uma linguagem de domínio nascida para facilitar a apresentação dos dados e que é interpretada pelo Servlet contêiner. Para por exemplo mostrar parâmetros que o cliente envia através de sua requisição, ou seja, passar um parâmetro de uma página para outra. Existe uma variável chamada param que na Expression Language é responsável pelos parâmetros enviados pelo cliente e para ler basta usar ${param.nome_do_param}. 12 Listagem 6 – Formulário enviando requisição <html> <form action="parametro.jsp"> Id: <input name="id"/> <input type="submit"/> </form> </html> Envia parâmetro fornecido pelo cliente, exemplificada na listagem 6. Listagem 7 – Expression language param <html> ID: ${param.id} </html> Recebendo parâmetro que o cliente passou através do formulário, visto na listagem 7. Existem ainda várias outras expressões com outras finalidades para facilitar o trabalho do programador tanto de funcionalidade quanto de design. 3.7 JSTL – JavaServer Pages Tag Library A SUN (2005) define a JSTL como um conjunto de marcações (tags) que encapsulam funcionalidades comuns a muitas aplicações JSP, como laços, controle de fluxos, internacionalização e manipulação de dados XML e na intenção de melhorar o processo de criação de páginas reduzindo ou até eliminando o uso de scriptlets e para padronizar algo que o mercado via como útil surge o JSTL (JavaServer Pages Standard Tag Library), o conjunto básico de tags é composto por: • Core: http://java.sun.com/jsp/core • XML: http://java.sun.com/jsp/jstl/xml • Internationalization: http://java.sun.com/jsp/jstl/fmt • SQL: http://java.sun.com/jsp/jstl/sql • Functions: http://java.sun.com/jsp/jstl/functions Facilitando e padronizando o trabalho dos programadores, tornando o código gerado mais fácil de ser compreendido. A implementação mais famosa do JSTL é a feita pelo grupo Jakarta em jakarta.apache.org para utilizá-la primeiro se faz necessário extrair os arquivos para a pasta lib do projeto, depois temos que escrever um cabeçalho com a tag jsp que define qual taglib será utilizada e um nome (prefixo) para este. O prefixo pode ter qualquer valor, mas por padrão da Sun para a taglib core é a letra c. Um exemplo de cabeçalho fica ficaria como o da listagem 8 Listagem 8 – Exemplo de taglib <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> A url não é uma requisição ao protocolo http e sim em uma busca entre os arquivos .jar no diretório lib. 13 3.8 Beans Na análise de GEARY at al (2002) um bean Java é uma classe que expõe propriedades e eventos a um ambiente como o JSF. Uma propriedade é um valor nomeado de um determinado tipo que pode ser lido/escrito, get/set, são as convenções para isto. Por exemplo, uma classe UserBean tem duas propriedades, name e password ambas do tipo String conforme listagem 11 e listagem 12. Listagem 9 – Exemplo de bean public class UserBean { public String getName() {. . .} public void setName(String newValue) {. . .} public String getPassword() {. . .} public void setPassword(String newValue) {. . .} ... } Listagem 10 – Exemplo bean public class UserBean { public String getName() {. . .} public void setName(String newValue) {. . .} public String getPassword() {. . .} public void setPassword(String newValue) {. . .} ... } Estes métodos podem executar ações arbitrárias, em muitos casos eles apenas obtêm e definem o campo de uma ocorrência, mas podem executar tarefas mais sofisticadas. De acordo com a especificação é possível omitir um deles, tornando a propriedade apenas de escrita ou leitura. No entanto, o JSF lida com essa situação de forma insatisfatória e gera uma exceção, ao invés de executar uma ação default, por este motivo é melhor sempre ter ambas as propriedades do beans. 3.8 JSF – JavaServer Faces Nos estudos de GEARY at al (2007) o JSF é construído por cima dos Servlets e do JSP mas, do ponto de vista do desenvolvedor o JSF coloca uma face amistosa por cima da aplicação web, permitindo aos programadores pensar sobre campos de texto e menus em vez de se preocupar com mudanças de páginas e parâmetros de requisições, além de conter todos os códigos necessários para manipular eventos e organizar componentes, muito embora o programador possa abstrair isto e preocupar-se apenas com a lógica de programação. No contexto do JSF, os códigos das aplicações estão localizados nos beans e o design está nas páginas web. Em aplicações JSF, usam-se beans para todos os dados que devem ser acessíveis a partir de uma página. É preciso haver uma página JSF para cada tela do navegador, dependendo do ambiente de desenvolvimento as páginas normalmente terão a extensão .jsp ou .jsf. As .jsp exigem menos trabalho de configuração. Como nos JSPs os JSFs 14 também exigem a definição das taglibs (bibliotecas de tags) de cabeçalho, sua sintaxe é a seguinte apresentada na listagem 9. Listagem 11 – Taglib de cabeçario <%@ taglib uri=”http://java.sun.com/jsf/core” prefix=”f” %> <%@ taglib uri=”http://java.sun.com/jsf/html” prefix=”h” %> Mais uma vez o prefixo pode ser qualquer um que se escolha. A implementação JSF define dois conjuntos de tags, HTML que geram marcação específica e para sua aplicação web produzir páginas usando uma tecnologia de renderização alternativa basta usar uma biblioteca de tags diferente. As tags principais são independentes da tecnologia. Embora muito familiar ao HTML ela possui suas peculiaridades como, todas as tags JSF estão contidas em uma tag f:view, ao invés de usar uma tag form do HTML usa-se a tag h:form, outro exemplo é a tag input, que fica h:inputText, h:inputSecret e h:commandButton. As propriedades do campo input estão ligados as propriedades do bean de nome user. Listagem 12 – Uso de taglib e bean < h:inputText values=”#{user.name}” /> Na listagem 10 quando a página é exibida o método getName é chamado pelo framework para obter o valor atual da propriedade. Já quando a página é enviada, o método setName é invocado para definir o valor digitado pelo usuário. Figura 8 – Estrutura de desenvolvimento 15 4. PHP Neste capítulo um pouco desta linguagem que é uma das primeiras, específica para web, livre, independente de plataforma, pode ser utiliza com orientação a objetos e amplamente usada no mundo. 4.1 Histórico PHP (Hipertext PreProcessor) é uma linguagem de programação utilizada para criar sites dinâmicos, foi desenvolvido em 1994 por Rasmus Lerdorf em sua home page pessoal. Nas pesquisas de MORAZ (2005), em 1995 saiu a primeira versão que pode ser utilizada por outros a Personal Home Page Tools (Ferramenta para Homepages Pessoais), essa entendia algumas macros especiais mais ainda muito limitada, em seguida o interpretador foi reescrito para entender dados de formulários HTML, depois ganhou suporte a MySQL, com isto pessoas começaram a adicionar-lhe código e seu ritmo de crescimento foi incrível. A base para o PHP3 teve seu interpretador reescrito por Zeev Suraski e Andi Gutmans, que utilizaram muitos dos códigos utilitários da versão anterior e outros tantos foram totalmente reescritos, ganhando ainda mais adeptos pelo mundo todo. 4.2 Principais características Ainda com base nas pesquisas de MORAZ (2005) que menciona o enfoque, principal, na implementação de uma linguagem de script, executada do lado do servidor (server-side). Portanto, permite coletar dados de formulários, gerar páginas com conteúdo dinâmico ou enviar e receber cookies. Pode ser utilizado em script no lado do servidor precisando apenas de um interpretador PHP, um servidor web e um browser. Script de linha de comando necessitando apenas do interpretador, ideal para scripts executados com o agendador de tarefas do sistema operacional Windows e em rotinas de processamento de texto. Aplicações desktop, PHP não é a melhor linguagem para este fim, com alguns recursos avançados do PHP para aplicações do lado do cliente temos o PHP-GTK (extensão do PHP para este fim não disponível na distribuição oficial) para escrever programas neste formato, recurso que habilita a escrever aplicações multiplataformas. No PHP pode-se ainda escolher entre programação estrutural, orientada a objetos ou a mistura de ambas. Embora seja bom frisar que o PHP não possui todos os recursos da POO (Programação Orientada a Objetos). Código HTML não é a única saída gerada pelo PHP, elas incluem ainda, geração de imagens, arquivos PDF e animações Flash criadas dinamicamente, entre outros. Talvez a característica mais significativa do PHP seja seu suporte a uma ampla variedade de bancos de dados, escrever uma página que utilize um banco de dados é muito simples. 16 4.3 Especificações Suportado pela maioria dos sistemas operacionais e também pela maioria dos servidores web existentes hoje, dando liberdade ao desenvolvedor para escolher qual a plataforma melhor para sua aplicação. Em relação ao suporte a banco de dados, além dos suportados nativamente, ele oferece suporte a ODBC (Open Database Connection). Também oferece comunicação com outros protocolos como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (em Windows) e outros. Há a possibilidade de abrir sockets de rede e interagir diretamente com qualquer protocolo. O PHP implementa objetos Java e os utiliza transparentemente como objetos PHP, vale lembrar que é possível usar a extensão CORBA para acessar objetos remotos. Com e-commerce, podemos aplicar funções prontas e específicas para Cybescash, CyberMUT, Verysign Payflow Pro e MCVE, práticos sistemas de pagamento on-line, permitindo que o desenvolvedor abstraia estas implementações. 4.4 A linguagem PHP O código PHP fica dentro da página HTML, o que pode ser ruim uma vez que se os designers terão que entender de PHP para fazer seu trabalho, além de dificultar a diagramação e leitura do código. Não possui nenhuma solução nativa que nos possibilite separar a linguagem cliente da linguagem servidor, ficando a cargo do programador tem muita cautela na geração de seus códigos para que estes não se tornem muito complexos e inviáveis para manutenção futura. É através das tags <? e ?> que o PHP identifica o que será interpretado do que já é HTML, visto na listagem 13. Listagem 13 – Tags delimitadoras do script php <? comandos ?> O PHP utiliza uma checagem dinâmica de tipos, isto é, uma variável pode conter valores de diferentes tipos em diferentes momentos da execução do script, por esta razão, não é preciso declarar o tipo de uma variável para utilizá-la O interpretador é quem decide qual tipo determinada variável irá possuir, verificando seu conteúdo em tempo de execução. Variáveis em tem como prefixo $, ficando sua sintaxe como na listagem 14. Listagem 14 – Declaração de variável em php $variavel1 = 5674; $varialvel2 = “String”; Ainda assim, assim é permitido converter os valores de um tipo para outro, utilizando o typecasting ou a função settype (há também gettype para recuperar o tipo de uma determinada variável). 17 Não existe o tipo boolean em PHP, porém ele é capaz de avaliar expressões e retornar true e false, com valores inteiros. O valor 0 (zero) é utilizado para representar o tipo falso e qualquer outro valor diferente dele (normalmente 1) é considerado como verdadeiro. Um exemplo simples de página com PHP poderia ser visto como na listagem 15. Listagem 15 – Simples página em php <html> <? echo “Ola Mundo” ?> </html> Onde no browsers do usuário seria exibido o texto Ola Mundo, a função echo é a responsável por imprimir do lado cliente aquilo que foi processado no lado servidor. Outro exemplo de página com PHP, porém agora utilizando a notação de objetos, seria montada da seguinte forma, listagem 16. Listagem 16 – Classe em php <? class Texto { function olaMundo () { echo “Ola Mundo”; } } ?> Na página HTML o código ficaria da seguinte forma, listagem 17. Listagem 17 – Utilizando objeto em php <html> <? $msg = new Texto; $msg -> olaMundo(); ?> </html> Gerando o mesmo resultado para o usuário, mas trazendo as facilidades que o paradigma da orientação a objetos possui que facilita na organização, reutilização e na manutenção do código que é comprovadamente superior ao da Estrutural. 18 5. C# (C SHARP) Baseado na plataforma .Net, suporta várias linguagens o C# é a principal por ter sido criado do zero. Muito parecido com Java e por também possuir uma espécie de máquina virtual, traz muitas vantagens ao programador, além de ser orientada a objetos. 5.1 Histórico Conforme LOTAR (2007), surgiu junto com a Plataforma Microsoft .Net em uma iniciativa da Microsoft buscando com um conjunto de tecnologias para melhorar seus sistemas operativos, seu modelo de componentes COM+ em uma plataforma única para desenvolvimento e execução de sistemas e aplicações baseadas em serviços, que podem ser publicados e acessados através da internet. A idéia é que se desenvolva e publique conteúdo independente de modelo de objetos, sistema operacional e hardware. Para desenvolvimento e execução de aplicações com esta tecnologia é preciso ter um conjunto de ferramentas disponibilizadas pela Microsoft, gratuitamente em seu site, conhecidas como .Net Framework SDK que possui compiladores para as linguagens que compõem a plataforma como VB.Net, C++, J#, ASP.Net e C#. Muito semelhante ao Java, onde se insere uma “camada” entre o sistema ou dispositivo especifico que executará o código nativo e a linguagem utilizada pelo desenvolvedor, tornando o código mais portável. Anders Hejlsberg coordenou o time da Microsoft e é quem leva os méritos pela linguagem, embora vários desenvolvedores o auxiliassem, ele também foi o responsável pelas linguagens Turbo Pascal e o Delphi. A linguagem C# foi criada junto a arquitetura .Net e por esta razão é a que mais se integra a ela. Criado do zero e sem preocupações com compatibilidades de sistemas legados de outras versões, seu compilador foi o primeiro a ser implementado e também grande parte das classes do .Net Framework foram desenvolvidas em C# tornando sua execução natural ao framework. 5.2 A Plataforma .Net É executada sobre uma CLR (Common Language Runtime), semelhante a uma máquina virtual, interagindo com uma Coleção de Bibliotecas Unificadas, que juntas são o próprio framework. São oferecidos a estas aplicações diversos serviços que facilitam o desenvolvimento e manutenção trazendo maior confiabilidade e segurança. Completamente orientado a objetos, paradigma amplamente utilizado nos dias atuais, resolve o problema de incompatibilidade entre DLLs, programas desenvolvidos em .Net são multiplataforma e multilinguagem, chegando ao ponto de se poder capturar em um programa escrito em C# uma execução escrita em VB.Net que por sua vez herda de um tipo de execução escrita em COBOL.Net. Hoje já podemos encontrar terceiros desenvolvendo versões adaptadas do .Net que disponibilizam muitas outras linguagens a plataforma como APL, CAML, Fortran, Java, Perl e várias outras. 19 A compilação de códigos produzidos em .Net são compilados duas vezes, na distribuição e outra na execução, se baseando em um dos princípios da tecnologia Java (compiladores JIT). Por exemplo, um programa é escrito em qualquer uma das linguagens de programação disponíveis é compilado pelo framework gerando um código intermediário em uma linguagem chamada MSIL (Microsoft Intermediate Language), este por sua vez gera o código binário especifico para o sistema ou dispositivo que se esta trabalhando. Segundo LOTAR (2003), “Ela foi criada para resolver uma série de problemas que surgem quando se desenvolve software para a Internet. Basicamente o que se pretende com a plataforma .NET é uma maior integração entre os diferentes tipos de dispositivos que existem hoje em dia”, a intenção da Microsoft era entrar em um mercado em crescente expansão que até então ela estava fora, com executáveis pequenos, seguros e possuem vários dos recursos presentes no Windows, como arrastar e soltar, clique com o botão direito, entre outros a plataforma .Net firmou-se entre os desenvolvedores e usuários de suas tecnologias. 5.2.1 Common Language Runtime (CLR) É o aplicativo responsável pela execução das aplicações .Net, uma máquina virtual, fornecendo e gerenciando os recursos do sistema operacional que executa por baixo dela. Por esta razão o código gerado pelo compilador é chamado de gerenciado. A CLR é capaz de executar, atualmente, mais de vinte diferentes linguagens de programação, interagindo entre si como se fosse uma única linguagem. Com um nível de segurança avançado é possível limitar as permissões de execução do código em função de sua procedência (internet, rede local, etc), o usuário que a executa ou a empresa que o criou, além deste outros benefícios são oferecidos como suporte a multilinha gestão ao acesso de objetos remotos que permite o desenvolvimento de aplicações distribuídas de forma transparente, coleta de lixo (garbage collector), adequação automática da eficiência das aplicações às características da máquina onde está sendo executada. 5.3 Principais características do C# Prosseguindo com os estudos de LOTAR (2007). Sendo a linguagem que, de certa forma, mais identifica a plataforma .Net é também a mais usada pelos desenvolvedores da tecnologia. O C# esta de tão ligado a plataforma, que não existe o conceito de código não-gerenciado (unmanaged code), suas estruturas de dados primários são objetos correspondentes ao do framework, além de classes, interfaces, exceções e outras características que entram na mesma definição. Melhorada em comparação ao C e C++ e como a plataforma totalmente voltada ao paradigma da orientação a objetos, tirando o trabalho mais complexo do programador. Ponteiros e aritmética sem checagem só podem ser utilizados em uma modalidade especial denominada modo inseguro, ou unsafe mode, de normal objetos são referenciados de maneira segura e operações aritmética são checadas contra sobrecarga (overflow), liberação de objetos por coleta de lixo (garbage collector) quando não há mais referência ao mesmo, não é permitida a múltipla herança de classes, mas se pode implementar diversas classes abstratas. Segurança quanto às conversões de tipos, permitindo apenas os tipos seguros como ampliação de inteiros e conversões de tipos derivados para tipos base são feitas de 20 forma implícitas, para os outros tipos é preciso que o programador explicitamente as marque. Muito comparada ao Java, vale lembrar que as cada uma tem suas peculiaridades que podem confundir o desenvolvedor, como por exemplo, C# implementa propriedades, possui o goto como estrutura de controle, XML para gerar documentação, indexadores e a mais marcante C# pode apenas ser compilado para a plataforma Windows. 5.5 A linguagem C# É uma linguagem simples e poderosa voltada para o desenvolvimento de aplicativos orientados a serviços, internet, Webservices, etc, entretanto, nada impede se produzir aplicações desktop com ele. Suas classes podem ser utilizadas por outras linguagens de programação, como Visual Basic. É possível ainda utilizar componentes COM, facilitando a migração de sistemas antigos para a nova tecnologia. Todos os programas gerados em C# necessariamente são compilados gerando um arquivo exe e dll. Os fãs e autores especializados em .Net e C# afirmam também que “Isso torna a execução dos programas mais rápida se comparados com as linguagens de script (VBScript, JavaScript) que atualmente utilizamos na internet.” Alfredo LOTAR (2007). Existem elementos básicos que todos os programas executáveis do C# necessitam ter, com esta informação um primeiro programa em C# seria o exemplo da listagem 18. Listagem 18 – Sintaxe simples em C# using System; class HelloWord { static void main() { Console.WriteLine(“Hello Word!!”); } } O código acima tem 4 elementos, um namespace declaração, uma classe, um método principal e um programa declaração. Ele pode ser compilado com a seguinte linha de comando. Listagem 19. Listagem 19 – Compilador .Net via linha de comando csc.exe Hello.cs É claro que existe IDEs que fazem este trabalho, isso produz um arquivo chamado Hello.exe, que pode então ser executado. Outros programas podem ser compilados similarmente, substituindo seu nome do arquivo, em vez de Hello.cs. Digitando o comando "csc-ajuda" na linha de comando, se tem a ajuda do compilador com os parâmetros que são aceitos. O nome do arquivo e nome da classe pode ser totalmente diferente. 21 6. PROTOTIPO Sistema de Pedidos, onde revendedores lançaram os produtos vendidos a seus clientes para entrega da Distribuidora. 6.1 Descrição Para fins de estudo será desenvolvido um Sistema de Pedidos cuja a definição segue: O sistema tem a finalidade de receber os pedidos de revendedores espalhados pelo Brasil. Através de um usuário e senha eles farão o log in no sistema. Lá podem lançar seu pedido que será composto de código do vendedor (capturado pelo sistema na hora do logon), código do produto, forma de pagamento, quantidade e um desconto por item (estes estão previamente cadastrados pela distribuidora, não sendo possível sua alteração pelo usuário do sistema). Este desconto será informado através do relatório tabela de preços que o revendedor pode tirar e imprimir quando quiser. Também terá o relatório de comissões por período que informará o quanto ele tem a receber junto a distribuidora. Ao termino do lançamento do pedido este poderá ser impresso pelo representante. Para isto serão criadas telas de logon, tela de lançamento de pedidos e a tela dos relatórios. Figura 9 – Visão geral tela de lançamento 22 Figura 10 – Diagrama de Caso de Uso Como as figuras 9 e 10 mostram é um protótipo simples com o intuito acadêmico e para completar o entendimento deste segue a descrição dos casos de uso. Caso 1: especificação textual do caso de uso “Logar no Sistema”. Nome: “Logar no Sistema”. Cenário principal: o caso de uso tem início quando o sistema apresenta uma tela que pede ao representante o seu nome de usuário e sua senha. Note que o usuário pode limpar a introdução das informações solicitadas na tela inúmeras vezes e introduzi-la antes de pressionar o botão Entrar. O usuário ativa o botão Entrar para confirmar. O sistema lê o usuário, a respectiva senha e verifica se são válidos. Se ambos forem válidos, o sistema aceita a entrada e o caso de uso termina. Cenário alternativo 1 (usuário/senha inválida): se o usuário introduz um nome de usuário e/ou uma senha inválidos, o usuário é informado através de uma mensagem visual e tem a chance de tentar novamente. Cenário alternativo 2 (esqueceu a senha): caso o usuário não lembre sua senha pode solicitar o envio dela para seu e-mail, se este e-mail fornecido pelo usuário estiver cadastrado na base de dados, então será enviado um e-mail com a senha do usuário. Caso 2: especificação textual do caso de uso “Selecionar Ação”. Nome: “Selecionar ação”. Cenário principal: o caso de uso tem início quando o sistema apresenta uma tela com as opções das ações que o usuário pode executar no sistema, são elas: “Incluir Pedido”, “Pesquisar Pedidos”, “Relatório de Comissão” e “Relatório de Preços e Descontos”. Caso 3: especificação textual do caso de uso “Lançar Pedidos”. Nome: “Lançar Pedidos” Cenário principal: o caso de uso tem início quando o sistema apresenta uma tela para a inclusão do pedido, que é composto dos campos: Condição de Pagamento, Produto, Quantidade, Desconto, Valor Unitário, Valor Total do Item, Comissão e Valor Total do Pedido. Destes campos os que o usuário pode alterar são Condição de Pagamento, Produto, Quantidade, Desconto e Comissão, sendo que os campos Condição de Pagamento e Produto são fornecidos pelo sistema e os campos Desconto e Comissão podem ser variados dentro do limite fornecido pelo sistema. Ao final da inclusão do pedido é exibido o numero do respectivo pedido e o usuário pode imprimir o pedido. 23 Caso 4: especificação textual do caso de uso “Listar Comissões a Receber”. Nome: “Listar Comissões a Receber”. Cenário principal: o caso de uso tem início quando o sistema apresenta uma tela que solicita o período que o usuário deseja saber o quanto de comissão tem para receber, com isto é exibido um relatório com os valores que pode ser impresso pelo usuário. Caso 5: especificação textual do caso de uso “Listar Preços e Descontos de Venda”. Nome: “Listar Preços e Descontos de Venda”. Cenário principal: o caso de uso tem início quando o sistema apresenta uma tela com a relação dos produtos, seus preços, o máximo de desconto que pode daquele produto e quando de comissão sua venda rende. Caso 6: especificação textual do caso de uso “Imprimir Pedido”. Nome: “Imprimir Pedido”. Cenário principal: o caso de uso tem início quando o representante termina de lançar o pedido, então é exibido uma mensagem na tela com a possibilidade deste pedido ser impresso. 6.2 Protótipo em Java Aqui serão abordados as tecnologias utilizadas e o processo de desenvolvimento do protótipo dentro da plataforma Java. 6.2.1 Tecnologias utilizadas Utilizando a plataforma Java EE que é parte do Java e é voltada para aplicações multicamadas, baseadas em componentes que são executados em um servidor de aplicações (Tomcat neste caso). E as especificações desta plataforma que foram utilizadas no sistema foram o Servlet, JSP, JSTL e JSF apoiadas por suas APIs básicas e também de terceiros como a Tomahawk e a Trinidad do projeto MyFaces do grupo Apache Software Foundation, que fizeram-se necessárias por possuírem funções que automatizam algumas tarefas e fornecem outras não existentes nas APIs padrão. No suporte ao desenvolvimento foi utilizado o servidor Tomcat também do grupo Apache, como servidor de aplicações que implementa o Java EE, permitindo assim que o desenvolvedor abstraia diversas especificações e concentre-se no que lhe interessa, o banco de dados foi o MySql que é distribuído livremente para aplicações não comerciais e para mapear os atributos entre a base tradicional de dados e o modelo objeto da aplicação de forma que esta tarefa fosse a mais simples possível, utilizou-se o framework Hibernate. A IDE adotada para o projeto foi o Eclipse que embora possua menos recursos visuais do que a ferramenta inicialmente escolhida, o Netbeans, a curva de aprendizagem no Eclipse se mostrou mais fácil e rápida exigindo de seu usuário maior conhecimento na linguagem que na IDE. Já o Netbeans mostrou-se muito ágil no processo de criação de páginas web. Tornando a experiência muito semelhante ao desenvolvimento para desktop, em contrapartida quando se faz necessário uma funcionalidade mais sofisticada ou um ajuste mais refinado o conhecimento na IDE é exigido. 24 6.2.2 Processo de desenvolvimento O desenvolvimento teve início pela a criação das classes beans (objetos que representam os dados no modelo da orientação a objetos) até aqui nada muito novo e nem específico para a web, pelo contrário é algo tão banal que as principais plataformas de desenvolvimento automatizam esta tarefa. Em seguida foi criado o arquivo XML de configuração do Hibernate é ele o responsável por dizer ao framework como interligar os dados com as classes que os representam a documentação disponível no site do projeto traz bons exemplos de como proceder. Com a estrutura básica montada a principal tela, a de lançamento de pedidos, começou a ser criada. Um exemplo mínimo de página JSF pode ser conferida na figura 11, lembrando que dentro de um elemento f:view só podemos ter elementos JSF. Figura 11 – lancapedido.jsp A princípio no processo de desenvolvimento a principal dificuldade foi dada ao produzir grande quantidade de código antes de compilar e testar o que se fazia, por haver vários frameworks envolvidos no projeto as vezes um “engole” a exceção do outro e gera uma mensagem de erro não muito significativa o que dificulta e muito encontrar o real problema no código e prejudica a produtividade. Notada esta dificuldade se partiu para a estratégia de desenvolver em pequenas etapas, ou seja, ao final de pequenas tarefas estas já eram compiladas e testadas. Outro ponto que foi um obstáculo, leve, é saber quando se deve perder mais tempo com uma funcionalidade um pouco mais sofisticada utilizando os componentes da core e quando recorrer a bibliotecas de terceiros. Uma boa dica aqui é sempre que uma funcionalidade se mostrar complicada, procure através de sites de busca, listas de discussão por outras bibliotecas que já implementaram em componentes tais funcionalidades. Esta foi uma prática sempre presente em todo o desenvolvimento, consultar a referência depois sites de busca em seguida as listas de discussão relacionadas, este último é um ponto forte da linguagem Java com uma comunidade grande e ativa, pois quando uma dúvida surgiu e precisou ser levada à lista todos lá, foram sempre muito prestativos e auxiliaram até a solução do problema, o que facilitou muito o trabalho. Como foi mencionado, os componentes facilitam o trabalho simplificando o código e fornecendo funcionalidades prontas, como por exemplo o datatable da biblioteca do Tomahawk que gera uma tabela no navegador e de forma simples para o programador dispõe de colunas ordenadas, paginação, eventos e outros recursos como mostra a listagem a seguir. 25 Listagem 20– databale do Tomahawk <t:dataTable id="listaProdutos" value="#{lancaPedidoBBean.produtos}"> <t:column sortable="true" sortPropertyName="codigo" > <f:facet name="header"> <h:outputText value="Cod."></h:outputText> </f:facet> <h:outputText value="#{produto.codigo}"></h:outputText> </t:column> <t:column sortable="true" sortPropertyName="descricao"> <f:facet name="header"> <h:outputText value="Descrição"></h:outputText> </f:facet> <h:outputText value="#{produto.descricao}"></h:outputText> </t:column> </t:dataTable> Outro ponto que deve ser observado na listagem anterior são os códigos #{lancaPedidoBBean}, #{produto.codigo} e #{produto.descricao} que são os chamados backing Beans, classes Java convencionais que são declaradas no faces-config.xml (arquivo de configuração e mapeamento dos elementos utilizados no JSF) e alguns de seus métodos ou propriedades são utilizados por uma página JSF, na prática é quem possui a regra de negócios um exemplo de faces-config é observado na listagem 21. Listagem 21 – faces-config.xml <?xml version="1.0" encoding="UTF-8"?> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <managed-bean> <managed-bean-name>lancaPedidoBBean</managed-bean-name> <managed-bean-class> br.grillo.pedido.controller.LancaPedidoBackingBean </managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> </faces-config> Todo Backing Bean é um Managed Bean, na verdade a diferença é conceitual o primeiro é quando um de seus métodos estão associados a uma página JSF, o segundo é isolado, ou seja, não é associado a nenhuma página, mas a tag é a mesma para qualquer um dos casos <managed-bean>. Descrevendo de forma rápida seus atributos, o managed-bean-name é o nome do mapeamento é por este nome que a página irá chamar os métodos da classe, o managed-bean-class é a classe que se quer utilizar, managed-bean-scope é o escopo desta classe, ou o 26 tempo de vida dela, estas não são as únicas propriedades há outras para um maior refinamento do código. Esta amarração funciona da seguinte forma, durante a execução da aplicação, sempre que uma página utilizar uma chamada ao bean o JSF vai checar o arquivo de configuração e ver que existe um managed bean declarado para determinada chamada e vai instanciar este objeto a todas as requisições que o utilizarem. Outro detalhe importante é que na versão 1.2 do JSF para utilizar diretamente uma tag HTML não é mais necessário utilizar o elemento verbatim, simplificando o código, aqui foi utilizada uma biblioteca de terceiro (encontrada em http://jsftutorials.net/htmLib) para adicionar código HTML por que por algum motivo, talvez um bug, utilizando diretamente o código div o atributo style (estilo) não era aplicado. Voltando ao verbatim vale lembrar que a maneira antiga ainda funciona mantendo a compatibilidade. Os próprios componentes JSF possui algumas validações e de forma simples podemos capturar estas mensagens e exibi-las para o usuário como é visto na figura 12. Figura 12 – Trecho do código que trata a exibição de mensagens de erro Com o JSF utilizar padrões de projetos como MVC (Model-View-Controller), se torna tão natural que é fácil até para quem não tem um grande conhecimento sobre o assunto. Esta abordagem torna a organização do projeto muito mais clara e eficiente, trazendo entre outras vantagens maior escalabilidade ao sistema e reaproveitamento de código para outros projetos garantida pela Orientação a Objetos. 6.3 Protótipo PHP Aqui serão abordados as tecnologias utilizadas desenvolvimento do protótipo dentro da plataforma PHP. e o processo de 6.3.1 Tecnologias utilizadas Com o servidor http da Apache que é livre rodando a instalação do PHP é bem simples basta descompactar o arquivo fornecido no site do projeto e com algumas poucas linhas de configuração já esta tudo funcionando. O banco de dados 27 utilizado foi o MySQL projeto amplamente conhecido e muito utilizado entre os programadores PHP. A IDE de desenvolvimento foi um ponto de dúvida. Das plataformas abordadas neste estudo, sem dúvida o PHP é que a possui a mais vasta quantidade de ferramentas para trabalhar com ele. Entre IDEs livres e proprietárias, a principio a idéia era escolher uma ferramenta distribuída livremente, então foram testadas as IDEs Eclipse for PHP que combina toda a experiência do grupo Eclipse com a familiaridade para quem já o utiliza em outras linguagens e como é característico desta ferramenta o domínio da plataforma é necessário. Em seguida foi avaliado o Netbeans com sua extensão para PHP e notou-se algumas facilidades como, por exemplo, gerar parte do código a partir da fonte de dados, mas nesta breve análise nada muito significativo em relação a outra IDE livre. Nas ferramentas proprietárias a abordagem do Delphi for PHP da CodeGear é sem dúvida muito atraente, porque promete um desenvolvimento similar ao feito em desktop, com componentes visuais utilizando a estratégia drag-and-drop (arrastar e largar). A facilidade ainda aumenta se o programador já possuir experiência com o tradicional Delphi para Object Pascal, talvez o grande problema desta IDE seja a qualidade do código gerado, quanto mais se altera o projeto mais poluído o código vai ficando, tornando necessária uma “faxina” em algum momento do trabalho e também alguns bugs que precisam ser corrigidos em relação ao design. Devido ao protótipo se tratar de uma aplicação pequena e sem muita navegabilidade e interatividade, a ferramenta escolhida para esta parte do projeto foi o PHPMaker, uma IDE que tem como abordagem a geração de código PHP a partir da base de dados (MySQL), para uma aplicação onde as tabelas estão bem modelas e não há um grande nível de complexidade, com alguns cliques já se pode ter uma aplicação completa com tela de log in com controle de sessão, telas para visualização, edição e inserção de dados. As ferramentas proprietárias utilizadas no estudo foram as versões trial, ou seja, versões para avaliação. 6.3.2 Processo de desenvolvimento Em função da IDE escolhida, que torna o desenvolvedor muito dependente dela, o primeiro passo no desenvolvimento foi justamente o aprendizado da ferramenta fazendo alguns testes e lendo o arquivo de ajuda fornecido com ela. Uma vez conectado a base de dados, basta selecionar as tabelas que farão parte da aplicação, em seguida quais as telas ela terá (inserção, alteração, visualização e pesquisa entre outras) como mostra a figura 13. Figura 13 – Opções de telas disponíveis 28 No passo seguinte como a aplicação tem uma tela com tabelas que possuem a característica Mestre/Detalhe, ou seja, tem o relacionamento conhecido por 1 para N (1 para muitos), uma tabela (Pedido) contendo os campos que fazem parte do cabeçalho de um pedido e este cabeçalho pode ter muitos itens. Para esta finalidade também esta disponível uma configuração específica como é observado na figura 14. Figura 14 – Configuração Mestre/Detalhe Facilmente é criado um campo totalizador que exibirá em tempo de execução o total do pedido conforme seus itens são inseridos. Como a aplicação exige segurança através do uso de sessão, e o usuário só pode utilizá-la iniciando e efetuando o log in no sistema, fornecendo seu usuário e senha já cadastrados na tabela representante, se faz necessário a configuração de mais esta funcionalidade. Neste ponto vale ressaltar que a ferramenta tem muitas e boas opções para esta finalidade e como o foco principal deste estudo não é a segurança, foram escolhidas as opções mais básicas, sem criptografia ou limite de tentativas no log in e outras, a figura 15 ilustra parte do processo. 29 Figura 15 – Configurações tela de log in Com as configurações feitas basta clicar no botão generate que as páginas são geradas já no diretório root do servidor, a partir daí é só ir ao navegador e digitar o endereço da aplicação e navegar. Caso ao navegar pelas páginas algum ajuste se faça necessário, basta voltar a IDE, fazer as alterações que deseja e, gerar o código novamente. Um grande ponto fraco desta ferramenta é o fraco suporte a Java Script tendo apenas algumas validações simples e não disponibilizando em sua interface algum lugar onde possa ser gerado algo novo ou melhorado o que já existe. Isto tem que ser feito por fora, ou seja, através de outra ferramenta para este fim. O que dificulta e muito para quem está desenvolvendo, porque até este ponto nada de código foi visto e agora o programador se vê obrigado a entender o código fonte gerado para identificar onde a lógica a mais será implementada. Devido a proposta da IDE que é gerar código PHP, não se teve o cuidado de separar o máximo possível o código de visualização das páginas geradas (html, css, etc..) com o código de regra de negócios, tudo fica junto no mesmo arquivo PHP, como a figura 16 que possui o trecho de código da página login.php exemplifica. 30 Figura 16 – login.php aberto em outro editor para visualização e manipulação do código Em resumo as dificuldades surgirão quando será preciso fazer algo mais sofisticado e específico que o “wizard” da ferramenta não disponibiliza, porque será necessário ver e alterar no código fonte, que embora esteja bem organizado com arquivos de nomes sugestivos e até bem estruturados, não foi o programador quem o gerou, então se perde um bom tempo para encontrar as coisas e entendê-las. Também não há nenhum comentário ou documentação sobre aqueles fontes, o que para um projeto de médio ou grande porte pode até inviabilizar a evolução e manutenção da aplicação. 6.4 Protótipo .Net Aqui serão abordados as tecnologias utilizadas desenvolvimento do protótipo dentro da plataforma .Net. e o processo de 6.4.1 Tecnologias utilizadas Como o .Net é da Microsoft as tecnologias que o cercam também são proprietárias, pelo menos as mais conceituadas e utilizadas, por esta razão talvez ele já inicie com uma certa desvantagem em relação as demais plataformas avaliadas neste estudo. Há um custo na aquisição de licenças que inevitavelmente será repassado para o cliente encarecendo o produto final. 31 O servidor utilizado foi o IIS (Internet Information Services) da própria Microsoft, ele já vem com a distribuição do Windows basta ativá-lo. Das três plataformas esta foi a única onde escolher a IDE não gerou dúvida, o Visual Studio é unânime entre os desenvolvedores .Net. Há uma outra IDE, o MonoDevelop, mas este tem o foco para o desenvolvimento utilizando a plataforma em Linux ou Mac OS, embora seja possível utilizá-lo no Windows, ele surgiu devido ao projeto Mono uma implementação livre e multiplataforma do .Net, o objetivo desse projeto é criar um framework de desenvolvimento opensource. O banco de dados também é o MySQL uma distribuição livre, mas que não é tão difundido em projetos desta plataforma. 6.4.2 Processo de desenvolvimento O Visual Studio possui alguns templates que o acompanham e que facilitam o trabalho do desenvolvedor .Net como por exemplo upload, calendário, menu, treeview, log in e outros. A tela de log in do projeto foi feita a partir deste template como é exibido na figura 17, que também mostra alguns dos componentes que a ferramenta oferece que são utilizados no estilo drag-and-drop. Figura 17 – Default.aspx, tela de log in Ainda na tela de log in, para que seja alcançada a execução desejada que é, só usuários logados podem navegar pelo sistema, se faz necessário editar o web.config que é o arquivo onde ficam as configurações da aplicação, tais como, 32 cultura, string de conexão, páginas de erro e outras. O ferramenta se revelou também a que mais, ou pelo menos mais facilmente, fornece opções que visam melhoria na aparência da página também com sugestões pré definidas ou com um bom suporte à CSS (Cascading Style Sheets) como a figura 18 exemplifica. Figura 18 – Possibilidades de criação de estilos Os templates são realmente uma facilidade principalmente para quem não tem tanto conhecimento na plataforma .Net, através de wizards se consegue criar recursos avançados sem precisar conhecer tanto da linguagem. Para quem domina a sintaxe da linguagem nada impede que as páginas sejam diretamente codificadas sem ajuda da IDE. Foi utilizando um destes templates que a tela de lançamento de pedido foi desenvolvida. Primeiro se insere um GridView, que é uma tabela já com propriedades prontas para serem relacionadas a um ObjectDataSource, responsável por obter os dados através das classes de lógica de negócios (Business Logic Layer) disponibilizado no exemplo, conforme figura 19. 33 Figura 19 – Exemplo PedidosBLL.cs e a página com o GridView Outra vantagem do .Net é a boa divisão entre o código gerado com as regras de negócio do lado servidor neste caso C#, e o código ASP para as páginas do lado do cliente, o que facilita quando se quer alterar apenas o visual da página ou somente a regra de negócio. Lembrando que o .Net é orientado a objeto suportando vários padrões de projetos que facilitam o desenvolvimento. 34 7. ANÁLISE DOS RESULTADOS Será apresentada uma comparação de forma objetiva, subjetiva e as dificuldades entre as plataformas estudadas. Estes resultados serão apresentados também através de um quadro comparativo, concluindo com uma análise dos resultados. 7.1 Avaliação objetiva Material para consulta, produtividade, modularidade, qualidade e fácil manutenção são pontos exigidos e importantes para um projeto e escolha da plataforma. E estes foram os pontos observados durante o estudo. Nem sempre que um projeto é aceito se tem uma equipe inteira com total domínio sobre as tecnologias necessárias, então rapidez e eficiência na busca por soluções de problemas, sanar dúvidas ou até opinião de profissionais com tal experiência é, muitas vezes, crucial para bom andamento do projeto e neste ponto as plataformas Java e PHP levam vantagem em relação ao .Net. Isto baseado na gigantesca comunidade (como são intitulados) que estas duas plataformas possuem, é fato que grande parte está em inglês, mas também há muita coisa em português. Já em .Net além do fator do inglês o que se encontra facilmente é bastante conteúdo básico produzido pelo grupo de desenvolvedores certificados pela própria Microsoft o msdn (Microsoft Developer Network), pecando quando se precisa de um material mais sofisticado. Orientação a objetos é um paradigma que naturalmente favorece a reutilização de código e aqui as três plataformas oferecem esta metodologia. Porém o PHP não é baseado em orientação a objetos, isto faz com que às vezes se acabe deixando a orientação a objeto de lado e prejudicando a modularidade do sistema, isto é uma desvantagem para o PHP. No quesito organização do código o Java e o .Net são muito semelhantes pois possuem uma linguagem para a lógica de negócios e outra para gerar página. O Java com o JSF por exemplo e o .Net com o Asp, dessa maneira fica fácil a visualização e compreensão do fonte como ilustra as figuras 20 e 21. Figura 20 – Exemplo tabela em Asp .Net 35 Figura 21 – Exemplo tabela em JSF Java Como os trechos de código acima mostram, tanto um quanto o outro possuem tags próprias, evitando assim que o fonte fique poluído com a mistura de código servidor e código cliente. O Java ainda necessita de algum código de lógica de negócios como é observado na figura 21, dentro das tags value, por exemplo. Já o PHP não tem esta abordagem obrigando o programador a unir ambas as linguagens em algum momento para gerar as páginas, a figura 22 tem um exemplo de uma tabela com esta situação. Figura 22 – Exemplo tabela em PHP Veja no exemplo acima como se é obrigado a misturar o HTML com o código PHP para mostrar conteúdo dinâmico para o usuário. Neste exemplo simples é fácil visualizar o que o código faz, porém quanto maior a complexidade do código, maior a dificuldade de visualização. A manutenção talvez seja tão importante quanto o próprio desenvolvimento em alguns projetos, por esta razão há sempre uma atenção especial sobre este ponto pelos gerentes, pois esta não depende unicamente da plataforma utilizada, mas também da forma como é utilizada. Avaliando as abordagens de desenvolvimento aplicadas durante o estudo é difícil dizer qual plataforma se destaca. O .Net leva uma certa vantagem pela melhor divisão entre o código lógico e o código de visualização. Em seguida o Java com JSF que torna natural a implementação de padrões de projetos, neste caso principalmente o MVC. O PHP é 36 uma plataforma muito robusta e talvez com uma abordagem mais elaborada tenha um resultado melhor para este quesito, porém aqui a falta de distinção entre o código lógico e o de visualização e a quantidade de código necessário para realizar algumas funções que outras plataformas abstraem do programador, são pontos negativos para o PHP. 7.2 Avaliação subjetiva Durante o desenvolvimento um fator que foi crucial para as facilidades e dificuldades é sem dúvida a experiência ou a falta dela. Então se pode afirmar que os motivos apontados durante o estudo oscilem para mais ou menos, ou até se alterem, dependendo da equipe e sua experiência. Outro ponto não diretamente ligado às plataformas que se mostrou predominante em todo o processo para uma melhor produtividade é a interatividade com a IDE, porque independente da plataforma o principal contato do programador é com a ferramenta que utiliza para produzir seu trabalho. E quanto mais esta disponibilize funcionalidade que automatizem o trabalho melhor é o rendimento de quem a utiliza. Ainda sobre a ferramenta outro ponto que marcou o estudo foi a escolha desta. Algumas plataformas tem tantas ferramentas que até confundem, é claro que a escolha passa por gosto pessoal ou determinação da instituição a qual se presta o serviço, mas caso a escolha seja necessária alguns passos a considerar podem facilitar este processo. • • • Defina bem suas necessidades: se é um projeto simples ou mais sofisticado e se terá funcionalidades bem específicas, estes pontos podem ajudar entre escolher uma ferramenta que automatizem mais ou menos o código gerado. Se o conhecimento da plataforma é maior, a escolha de uma IDE que lhe prenda mais a ela talvez seja um problema, no entanto normalmente as IDEs que mais exigem aprendizado são as que mais geram código de forma automática ajudando quem não tem tanto conhecimento na plataforma. Popularidade também deve ser levada em consideração na escolha, porque quanto mais usuários já utilizam a ferramenta melhor será seu suporte em caso de dúvidas. Quando se fala em aplicação para web alguns pontos são quase que obrigatórios, como o controle de sessão, controle de usuário e navegabilidade. Nestes pontos a abstração que o Java e o .Net proporcionam torna ágil e simples implementar estas funcionalidades, coisa que no PHP tem de ser feita de forma mais manual. Uma desvantagem para o Java é o fato de existirem muitos frameworks para ele, o que torna sua escolha mais complicada, porque além de escolher a plataforma Java tem que escolher o que dentro dela se vai utilizar. Feito isto há ainda várias decisões de arquitetura que devem ser tomadas como, por exemplo, Java com JSF e os componentes de um determinado grupo, ou de vários grupos, esta diversidade de escolha que não é comum às demais plataformas avaliadas tem que ser vista com cuidado no início do projeto porque pode atrasar ou inviabilizar o mesmo. 37 7.3 Dificuldades encontradas No PHP a maior dificuldade foi encontrar uma ferramenta que desse suporte a plataforma de uma maneira prática e intuitiva, embora esta seja uma escolha com vários parâmetros, entre eles alguns não tão objetivos, o problema foi a quantidade e a enorme diferença entre cada um. Superado isto, outro fator é o conhecimento necessário para gerar funcionalidades que outras plataformas mostraram dispor com tamanha facilidade, controle de sessão, por exemplo. Para o Java o que pesa contra é a grande diversidade dentro da própria plataforma, o que sugere um estudo mais aprofundado, tornando um pouco confuso a decisão pelo o que utilizar. Dúvidas e dificuldades são comuns ao decorrer de qualquer projeto, então uma plataforma com um bom grupo de usuários ou com boas informações disponíveis na internet são de grande importância para o fluxo do projeto, e nisto o .Net deixa a desejar com exemplos simples e há dificuldade em se obter uma resposta com rapidez e facilidade. 7.4 Quadro Comparativo Tabela 1 – Quadro comparativo Java PHP .Net Ótimo Ótimo Razoável Bom Ótimo Bom IDE Bom Bom Bom Funcionalidades transparentes Ótimo Razoável Ótimo Produtividade Ótimo Bom Ótimo Modularidade Bom Bom Bom Suporte a resolução de dúvidas Conhecimento necessário durante o desenvolvimento 38 O quadro apresenta poucas diferenças entre as plataformas, pesando a favor de uma ou outra, detalhes como a experiência da equipe, o projeto em questão e pontos mais objetivos como as funcionalidades que a plataforma dispõe de maneira transparente ao desenvolvedor. Nele quem se destaca é o Java que tem a seu favor a grande comunidade que possui, enquanto segue empatado com o .Net nos demais quesitos e o PHP com o contra da falta de funcionalidades pré-prontas para o programador. 7.5 Análise O PHP é amplamente utilizado em grandes projetos e possui bons geradores de código desenvolvidos para ele, mas isto surge como uma forma de driblar a não evolução da plataforma em relação as demais, o que o torna muito eficaz se a necessidade for algo que alguma destas inúmeras (e para praticamente todas as necessidades) ferramentas fornece. Agora para fazer algo específico é necessário um grande conhecimento da plataforma e ainda escrever muito código, pois pouca coisa é transparente ao programador. O Java é realmente muito robusto, mas exige um cuidado especial porque possui diversos meios para um mesmo, ou aparentemente o mesmo, resultado, o que ocorre menos nas outras plataformas. Este foi então o maior ponto de dificuldade para o Java, a enorme quantidade de decisões de arquitetura e implementações que se tem que tomar ao decorrer do projeto, demandando tempo para quando não há um bom conhecimento de causa. A similaridade na sintaxe do .Net com o Java é tão grande que para alguém que trabalha com um e migra para o outro só tem que se adaptar com a forma de trabalhar que se altera em poucos detalhes. Mesmo com as semelhanças, não existe no .Net a dificuldade de muitas implementações para uma mesma funcionalidade. Portanto o ponto fraco desta plataforma que se sobressai em relação às demais parece ser o fato de ele pertencer a um mundo cheio de licenças tornando o preço final do produto gerado com ele mais caro. 39 8. CONCLUSÕES No decorrer deste estudo se mostrou alguns dos pontos fortes e fracos de cada plataforma aqui avaliada, e também sugerindo como superar os obstáculos que são encontrados ao desenvolver um sistema para a web. Outro objetivo era apontar a melhor plataforma para a resolução de um determinado problema, que neste caso foi um protótipo de um sistema de lançamento de pedido pela internet. Este objetivo se mostrou mais complexo do que se previa, devido às inúmeras variáveis que cercam esta questão. Para o sistema proposto, que é relativamente simples, afinal é um protótipo, o .Net fica com a escolha de melhor opção devido a seus templates facilitarem em muito o processo de criação. Com a ressalva de que para um projeto mais específico seus templates, embora ainda ajudem, não são um grande diferencial. E o principal objetivo deste estudo foi facilitar a escolha de uma plataforma em projetos futuros. As plataformas se mostraram mais eficazes em situações distintas, que podem ser dividas em duas categorias. Uma são projetos mais gerais, ou seja, aplicações que não necessitam de funcionalidades muito específicas e para estas o PHP e o .Net são as melhores escolhas, porque facilitam muito a vida do programador, seja na geração de código de forma automatizada que é o caso do .Net ou com boas ferramentas que é o que ocorre com o PHP, tirando do programador muitas das responsabilidades sobre a regra de negócio. Vantagem que é perdida se o projeto exigir algo mais sofisticado. O Java é a escolha para projetos mais elaborados com requisitos que exijam uma maior confiabilidade e robustez, isto por que tem especificações bem definidas o que diminui a possibilidade de erro por parte do programador no resultado final, que se vê “obrigado” a gerar um código de melhor qualidade trazendo garantias para o resultado final. Há também os frameworks que dão suporte ao programador implementando estas especificações, deixando para o programador o trabalho de utilizar as funcionalidades, não o preocupando de como elas são feitas. Este estudo alcançou seu objetivo, mas fica em aberto uma pesquisa mais aprofundada sobre as diversas implementações existentes dentro do próprio Java, pois foi um ponto de dúvida constante durante este trabalho. Apontar qual é melhor para cada problema, a dificuldade em misturar diferentes implementações ou ainda se é uma boa prática fazê-las. Outro estudo seria uma avaliação das tendências de mercado para as plataformas respondendo, para qual finalidade cada uma é mais utilizada, qual tem o profissional mais valorizado e ainda qual tem um maior percentual de projetos considerados bem sucedidos pelas empresas. 40 9. REFERÊNCIAS BIBLIOGRÁFICAS ARMSTRONG, Eric; BALL, Jennifer; BODOFF, Stephanie; CARSON, Debbie B.; EVANS, Ian; GREEN, Dale; HAASE, Kim; JENDORCK, Eric. The J2EE™ 1.4 Tutorial. SUN Microsystems, 2005. 1542p. CONER, Douglas E. Rede de Computadores e Internet. São Paulo: Bookman, 2007. 632p. DEITEL, Harvey M.; DEITEL, Paul J. Java Como Programar. Tradução Edson Furmanklewicz. São Paulo: Prentice Hall, 2005. 1152p. GEARY, David; HORSTMANN, Cay. Core JavaServer Faces. Tradução Patrícia Azeredo e Fausto Magalhçães. Rio de Janeiro: Alta Books, 2007. 522p. JANDL JUNIOR, Peter. Introdução ao JAVA. São Paulo: Berkeley, 2002. 518p. LOTAR, Alfredo. ASP.NET com C# Curso Prático. São Paulo: Novatec, 2003. 384p. LOTAR, Alfredo. Como programar com ASP.NET e C#. São Paulo: Novatec, 2007. 608p. MORAZ, Eduardo. Treinamento Prático em PHP. São Paulo: Digerat Books, 2005. 191p. RAMOS, Ricardo Argenton. Treinamento Prático em UML. São Paulo: Digerat Books, 2006. 144p. TEMPLE, André; MELLO, Rodrigo F. de; CALEGARI, Danival T.; SCHIEZARO, Maurício. Jsp, Servlets e J2EE. 2004. 267p. VARGAS, Elton da Silva; SILVA, Camila Ceccatto da. HTML – Construindo a Internet. São Paulo: Viena, 2007. 189p. 41