Um estudo teórico sobre a plataforma .NET
Transcrição
Um estudo teórico sobre a plataforma .NET
1.0- INTRODUÇÃO No início dos anos 60, surgiram os primeiros grandes projetos de software, como os sistemas operacionais: CTSS, desenvolvido pelo MIT, e o OS 360 para a família de computadores IBM 360. Atualmente o software é o principal componente de um sistema de computação. O software está cada vez mais integrado à sociedade, sendo usado para controlar sistemas críticos como: sistemas financeiros, gerenciamento de comércio eletrônico, controle de tráfego aéreo, controle de sistemas telefônicos, equipamentos médicos etc. A construção de sistemas de software desenvolveu-se com a produção de programas voltados para o ambiente empresarial. Inicialmente, para proporcionar à empresa o controle de todos os seus dados operacionais, surgiram os sistemas de banco de dados. Hoje em dia, esses sistemas evoluíram ao ponto de aproveitarem a tecnologia da Internet para se tornarem poderosos servidores de aplicações e de arquivos que aprenderam a "falar" Java e XML. Portanto, os bancos de dados além de guardar e gerenciar um enorme volume de informações, permitem que os dados sejam acessados a partir de um browser e trazem recursos que ajudam as empresas a criar aplicações para a Web, sejam simples sites corporativos ou complexas operações de comércio eletrônico. O ponto inicial para se pensar em aplicações orientadas a Web foi a possibilidade de atingir acessibilidade praticamente ilimitada. Exemplificando: um sistema, desenvolvido sob medida para uma empresa, visando disponibilizar o acesso a todos os seus fornecedores, parceiros e clientes. Para ampliar as capacidades de desenvolvimento de software foi projetada a plataforma .NET. Esta plataforma foi lançada em julho de 2001, como a primeira atualização importante da plataforma de desenvolvimento de software da Microsoft desde que a API1 Win32 apareceu no Windows NT 3.0 em julho de 1 API é a sigla em inglês para Interface de Programação de Aplicativos. 9 1993. Ao contrário da Win32, que oferecia APIs mais poderosas do que a Win16, mas não mudava ferramentas ou técnicas, a plataforma .NET faz alterações fundamentais nas ferramentas e técnicas usadas pelos desenvolvedores para criar aplicativos [CHERRY, 2001]. A Microsoft garante que a .NET foi construída sobre três pilares: Segurança: a plataforma Microsoft .NET atende aos padrões mais modernos de segurança. Através de um ambiente de execução seguro e desenhado tendo em mente a hostilidade natural de ambientes de computação altamente distribuídos. As ferramentas de desenvolvimento da plataforma Microsoft .NET induzem a adoção de práticas melhores de programação, resultando em software com menos erros. Finalmente, a plataforma Microsoft .NET inclui ferramentas e serviços que dão a indivíduos e organizações controle total sobre como e quando suas informações podem ser acessadas e utilizadas. Padrões de mercado: a Microsoft tem o firme compromisso de agir em parceria com o resto da indústria de tecnologia para assegurar que os padrões usados para a criação e fornecimento de Web Services XML permaneçam íntegros e abertos a todas as empresas, inclusive suas concorrentes, submetendose a entidades de padronização como o World Wide Web Consortium (W3C) e a European Manufactures Association (ECMA). Isso assegurará que todos os Web Services XML serão compatíveis, independentemente de que ferramentas tenham sido utilizadas para criá-los e que empresas as forneceu. Tudo conectado: os produtos e serviços da plataforma .NET transformam as “ilhas de informação” isoladas e fechadas em sistemas proprietários ou inadequados à colaboração em um mundo em que tudo é conectado. PCs, PDAs, telefones celulares, consoles de videogame, sites Internet, aplicativos e serviços podem ser compartilhados através de protocolos comuns, de maneira transparente e segura. 10 Com a plataforma .NET, o desenvolvedor pode criar aplicativos Web para executar no servidor Internet Information Server (IIS) com mais facilidade. Ela também facilita a criação de aplicativos estáveis, confiáveis e seguros para Windows desktop. A plataforma de desenvolvimento .NET contém: O .NET Framework, que inclui o Common Language Runtime (CLR), um componente de software para carregar e executar aplicativos; e novas bibliotecas de classe, coleções de código organizadas hierarquicamente e usadas pelos desenvolvedores em seus aplicativos para criar interfaces gráficas com usuário, acessar bancos de dados e arquivos e comunicar-se através da Web. As ferramentas de desenvolvimento .NET, incluindo o ambiente integrado de desenvolvimento (IDE) do Visual Studio.NET para desenvolver e testar aplicativos, as linguagens de programação .NET (como Visual Basic .NET e o novo Visual C#) que executam sob o CLR e usam as bibliotecas de classe. ASP.NET, uma biblioteca de classe especializada que substitui o antigo Active Server Pages (ASP) para criar tanto conteúdo Web dinâmico quanto aplicativos para servidores Web que usam protocolos da Internet e formatos de dados como HTML, XML e Simple Object Access Protocol (SOAP). A plataforma .NET proporciona o desenvolvimento de software com base na tecnologia de objetos e componentes. Esta abordagem tem se revelado com inúmeros benefícios. Dentre estes, pode-se destacar a modularidade, a flexibilidade e a reusabilidade, características essenciais para a qualidade e a produtividade do desenvolvimento de software. 11 O principal objetivo deste trabalho é apresentar esta plataforma através de seus principais componentes, seu novo modelo de programação e execução de aplicativos e principais vantagens e problemas. Além de mostrar uma visão geral da estratégia de mercado da Microsoft para a plataforma .NET. Faz-se também uma comparação com a plataforma concorrente da Sun Microsystems Java Enterprise Edition: a J2EE. 12 2.0- REVISÃO DE LITERATURA 2.1- Computador digital: a evolução das engrenagens mecânicas Em 1642, o francês Blase Pascal construiu uma máquina de calcular, o ábaco, que utilizava engrenagens mecânicas. Esta máquina podia apenas somar e subtrair, mas pelo seu impacto na computação o nome Pascal foi dado a uma moderna linguagem de programação. Passados 30 anos, o matemático alemão Leibniz construiu uma máquina mecânica que podia, além de somar e subtrair, multiplicar e dividir. Podemos dizer que Leibniz construiu uma máquina equivalente a uma calculadora de bolso com quatro funções, três séculos atrás. Passaram-se 150 anos até que, em 1822, o matemático Charles Babbage, na Universidade de Cambridge, construiu uma máquina de calcular que perfurava os resultados em uma placa de metal. Essa forma de escrita foi a precursora da escrita em cartões perfurados e em discos ópticos. A coroa inglesa investiu no projeto dessa máquina e Babbage construiu a máquina analítica. Como esta era programável em uma linguagem, ela precisava de um software. Nesse ponto da história Ada Lovelace construiu a primeira linguagem de programação, além de ser a primeira pessoa a programar uma máquina. A moderna linguagem de programação Ada® foi assim chamada em sua homenagem. Nos anos de 1930, John Atanasoff e George Stibbitz, no Bell Labs, construíram uma máquina com relês eletromagnéticos surpreendentemente avançada para sua época: com aritmética binária e circuitos de memória. E em 1944, na Universidade de Harvard, Aiken apresentou o primeiro computador eletrônico: o Mark II. Na Segunda Guerra Mundial, as mensagens enviadas pelos alemães aos seus submarinos eram captadas pelos ingleses. Como essas mensagens eram 13 criptografadas, o ex-presidente dos Estados Unidos Thomas Jefferson construiu o Enigma, um computador eletrônico para descriptografar essas mensagens. Os Estados Unidos então resolveram investir em computadores eletrônicos e em 1946 surgiu o ENIAC (Eletronic Numerical, Integrator Calculator). Ocupava uma sala inteira e tinha centenas de botões e cabos entrelaçados. John Von Neumann, um dos projetistas do ENIAC, organizou uma equipe que projetou um novo computador: composto por memória, processador e unidades de entrada e saída. Os computadores atuais são baseados na arquitetura de Von Neumann. O prêmio Nobel de Física de 1956 foi dado aos inventores dos transitores. Esta invenção do Bell Labs proporcionou um avanço aos computadores, tanto que no final dos anos 60 surgiam os projetos voltados para o software. Nesta época foi desenvolvida a linguagem Algol 60, precursora da linguagem Pascal. No início dos anos 60 os circuitos integrados possibilitaram a produção de computadores muito mais rápidos e menores a um custo muito menor. A tecnologia dos computadores foi incrementada com a multiprogramação e com o time-sharing, que proporciona a execução de múltiplas tarefas simultaneamente. Nessa época, o MIT desenvolveu sistemas operacionais que permitiam que terminais remotos fossem conectados a um computador central por meio de linhas telefônicas. A partir de 1980 a VLSI (Very Large Scale Integration) possibilitou a colocação de centenas de milhares de transistores em uma pastilha (circuito integrado). Os minicomputadores, com capacidade de processamento superior aos primeiros mainframes se tornaram amplamente utilizados em escritórios, escolas e até em ambientes domésticos. Informações detalhadas sobre a evolução dos computadores podem ser vistas em [TANEMBAU, 1995]. 14 2.2 A história do software Nas décadas de 1940 a 1970 o principal objetivo da computação era desenvolver um hardware que ampliasse as capacidades de processamento e memória. Nos anos 80, avanços na microeletrônica proporcionaram computadores digitais com altíssimo poder computacional a um custo relativamente baixo. No início dos anos 90 a computação passou o foco para soluções implementadas em software. Afinal, a capacidade de processamento de um mainframe lançado no mercado em 1980 estava disponível em nossas casas. No início da computação os problemas implementados pelos programadores eram simples: por exemplo: calcular uma equação diferencial. Não eram problemas surpreendentes como implementar um sistema de tempo real para controle de vôos ou sistemas de segurança para Internet Bankings. Os problemas se relacionavam com o usuário e o programador; não haviam pessoas envolvidas. Mas os computadores eram cada vez mais utilizados e mais pessoas estavam envolvidas. As linguagens de alto nível começavam a ser inventadas no início dos anos 50 para facilitar a comunicação com a máquina. Mas os programas eram desenvolvidos para tarefas bem definidas. A partir da década de 1970, a multiprogramação e os sistemas multiusuários foram a base para a implementação de aplicações muito mais sofisticadas; como sistemas de tempo real controlando grandes quantidades de dados em milisegundos e sistemas sistemas de gerenciamento de banco de dados com suporte a transações on-line. No final dos anos 70 surgiram também novas empresas da área de informática: as software houses, que se concentravam na produção de software em escala. Nessa época universidades e empresas alocavam seus recursos para pesquisa e desenvolvimento de pacotes de software. Em meados dos anos 80, sistemas distribuídos em que múltiplos 15 computadores executavam tarefas de forma concorrente e comunicavam-se entre si ampliaram a complexidade dos sistemas de computação. Também nessa época o microprocessador permitiu o lançamento de produtos inteligentes: do automóvel aos fornos de microondas, de robôs no chão de fábrica a equipamentos hospitalares. O software estava sendo integrado ao hardware. Em 1990 o conceito de redes de computadores se tornou popular e começava o sucesso do computador pessoal. Em 1994 algumas pessoas falavam em Internet e em 1999 centenas de milhões de pessoas navegavam na Web diariamente, esse fenômeno social implicou no crescimento, em escala exponencial, da demanda mundial por software. Na perspectiva industrial, [PAULA FILHO, 2001] explica que se voltássemos em 1969, veríamos que a grande maioria dos profissionais de informática trabalhava em computadores de grande porte. Equipamentos de milhões de dólares! Seguindo sua linha de raciocínio, o custo de desenvolvimento dos aplicativos possíveis com a tecnologia da época era relativamente pequeno, se comparado com o custo do hardware. Surpreendentemente, o projeto de desenvolvimento de um sistema de telefonia móvel, sob a coordenação da UFMG, há poucos anos, foi implementado em uma plataforma de hardware que custou alguns milhares de dólares. A plataforma de software custou algumas centenas de milhares de dólares. A economia que esse sistema trouxe para o cliente foi de alguns milhares de dólares. Em três décadas houve uma inversão radical na economia da informática: o software se tornou o ponto principal no projeto de sistemas de computação. Tanto que atualmente, o software é a chave para sistemas de computação e, mais ainda, é um fator de diferenciação para uma empresa em relação às suas concorrentes. 2.3 Engenharia de Software: projeto e análise de software No início dos anos 60, surgiram os grandes projetos de software 16 desenvolvidos pelos pioneiros da computação. Por exemplo, o Sistema Operacional CTSS desenvolvido pelo MIT foi um grande projeto desenvolvido em equipe. Já em 1965, foram lançados os primeiros softwares comerciais. O melhor exemplo é o Sistema Operacional OS 360 para a família de computadores IBM 360. Nesta época as equipes de desenvolvimento começavam a questionar os problemas relacionados a construção dos softwares. Já se começava a perceber que projetos de software exigem previsão de custos e um plano de produção. Mas na grande maioria das vezes o software era desenvolvido como uma arte. As estimativas feitas pela equipe de desenvolvimento freqüentemente estavam incorretas. Os programas tinham muitos erros e a tentativa de correção desses erros produzia mais erros. Em 1979, uma pesquisa realizada nos Estados Unidos revelou que 2% dos softwares atingiam a funcionalidade exigida pelo cliente. Essa estatística se explicava pela inexistência ou a não aplicação de métodos, técnicas e ferramentas para auxiliar e padronizar o processo de desenvolvimento de software. Então foi inventado o termo: Crise de Software para sintetizar os problemas: softwares grandes não funcionavam adequadamente; estimativas de custo e tempo de desenvolvimento eram imprecisas; os computadores se tornavam cada vez mais rápidos, fáceis de usar e acessíveis. Isto implicava em uma demanda crescente por software cada vez maior e mais complexo, enquanto a capacidade de produção não estava tão acelerada quanto esta demanda. Informações detalhadas sobre a crise de software podem ser encontradas em [PRESSMAN, 1995]. No contexto da crise do software e do declínio dos custos de hardware paralelo a ampliação dos custos de software (ampliação causada pela demanda crescente) foi inventada a Engenharia de Software. [PRESSMAN, 1995] usa a definição de [BAUER, 1969] que explica: a Engenharia de Software é a aplicação de metodologias e técnicas de engenharia 17 visando obter economicamente softwares confiáveis e que funcionem com eficiência em máquinas reais. Segundo [VASCONCELOS, 1999]: a Engenharia de Software é a aplicação de ciência e matemática visando tornar as capacidades do equipamento úteis para o ser humano através de programas, procedimentos e documentação. O principal objetivo da Engenharia de Software é construir software de qualidade com a mínima alocação de recursos possível. É fácil notar que o software está se integrando à sociedade. Cada vez mais, o software é usado para controlar sistemas críticos como: sistemas financeiros, gerenciamento de comércio eletrônico, controle de tráfego aéreo, controle de sistemas telefônicos, equipamentos médicos etc. Isto garante o interesse crescente da sociedade em depender de software e, principalmente, mostra a importância crescente em se aprender a construir um software melhor. A Engenharia de Software define as fases de desenvolvimento de software: 1. Concepção: entrevista com o cliente/usário para se criar uma lista de atividades e/ou tarefas realizadas diariamente, semanalmente, mensalmente, anualmente e esporadicamente pelo cliente/usuário. Depois de listadas as atividades é essencial dividi-las em grupos e escrever um documento que mostre como a empresa funciona, quais as atividades e serviços realizados por ela. Este documento é chamado escopo. Nesta fase de concepção também se faz a modelagem. Um modelo é uma simplificação da realidade. Modelos são construídos para se entender o problema e as necessidades do cliente e servir como base para projetar o que ele realmente precisa. Além disso, auxiliam no planejamento e na determinação do produto final a ser desenvolvido; das fases, etapas e tarefas; de um planejamento e um cronograma de 18 execução; das ferramentas e matéria prima; das equipes de desenvolvimento. A modelagem é uma parte central de todas as atividades que levam à implantação de um bom software e à criação de uma documentação completa. É importante destacar os problemas relacionados à modelagem que se refletem na qualidade final do software: alocar os profissionais ideais para uma determinada tarefa não é uma tarefa trivial, visto que a limitação financeira se contrapõe ao fato de esses profissionais serem mais caros; o cliente muda de idéia ao longo do tempo de desenvolvimento; os desenvolvedores nem sempre tem conhecimento e iniciativa suficientes para resolver problemas inesperados; o cronograma não é cumprido porque o problema se mostra mais complexo do que o esperado; o cliente não consegue definir exatamente as suas necessidades e expectativas. 2. Análise: nesta fase são construídos os diagramas de Caso de Uso, de Sequencia e de Classe. Informações detalhadas sobre esses diagramas podem ser encontradas em [PAULA FILHO, 2001]. Além de determinar as informações que serão guardadas no computador e como elas serão agrupadas de forma que o software possa realizar corretamente suas tarefas com eficiência. 3. Projeto: nesta fase faz-se um dicionário de dados e diagramas extras que podem ser necessários dependendo dos objetivos e da complexidade da aplicação. 4. Implementação: com base no projeto, os programadores implementam as estruturas de dados, as funções e os procedimentos concretizando o que se tem a nível abstrato e conceitual. 5. Teste: é matematicamente impossível testar um sistema por completo então nesta fase aplicam-se técnicas para se construir uma base de dados para testar a maior parte do sistema possível. 19 6. Manutenção: esta fase é iniciada com a implantação do sistema em ambientes organizados. A manutenção pode ser de correção, adaptação e atualização. Do ponto de vista de [VASCONCELOS, 1999], é comun ouvirmos falar em "crise de software". Mas nem todos os projetos são exemplos de falhas de gerenciamento ou de engenharia. Existem produtos com sucesso espetacular. Sem sucessos tão grandes, o software não seria integrado à sociedade. Na verdade estes sucessos é que tem causado a explosiva demanda por software. Além disso, o crescimento rápido na demanda por software, combinado com os esforços requeridos na manutenção do software existente, cria um grande backlog entre as aplicações de software que precisam ser desenvolvidas e a capacidade de desenvolvimento. Isto é, graficamente a curva que descreve o crescimento da demanda é muito mais acentuada que a curva que descreve a capacidade de produção de software. Este é um problema que está bloqueando o sucesso de muitas empresas: novos produtos não podem ser lançados no mercado, e às vezes não saem das pranchetas dos projetistas, e novos serviços não podem ser oferecidos porque o software que é necessário não pode ser desenvolvido com a rapidez suficiente. Nesse contexto, [VASCONCELOS, 1999] destaca que a reutilização é um fator essencial na produção de software. A reutilização do conhecimento e de projetos anteriores é uma prática padrão em outras engenharias e está se tornando cada vez mais utilizada em projetos de software desenvolvidos em ambientes organizados. Existe uma demanda crescente por software que exige que se encontre o melhor caminho para se desenvolver software rápido, confiável e seguro com a mínima alocação de recursos possível. Essa é exatamente a meta da Engenharia de Software. 20 2.4 Processos: a produção do software 2.4.1 O ciclo de vida do software Um processo é um conjunto de passos parcialmente ordenados, constituídos por atividades, métodos, práticas e transformações, usado para atingir uma meta. Esta meta geralmente está associada a um ou mais resultados concretos finais, que são os produtos da execução do processo [PAULA FILHO, 2001]. Do ponto de vista deste mesmo autor, o software é visto como um produto e como todo produto industrial, o software tem um ciclo de vida. Além disso, em um processo de desenvolvimento de software, o ponto de partida é a escolha de um modelo de ciclo de vida. O autor define os modelos: 1. Modelo de ciclo de vida em Cascata: são executados passos sequenciais que podem ser demarcados como pontos de controle que podem facilitar a gestão dos projetos. A primeira vista esse modelo parece totalmente confiável e utilizável em projetos de qualquer escala. Por outro lado, pode se visto como um modelo rígido e inflexível, em que as atividades de análise e projeto tem que ser muito bem dominadas. Isso porque erros nessas fases serão refletidos no produto final. Um outro ponto negativo é que o modelo em cascata puro é de baixa visibilidade para o cliente, que vê exclusivamente o resultado final do projeto. 2. Modelo de ciclo de vida em Sashimi: na prática é essencial permitir que, em fases posteriores, haja revisão e alteração de resultados das fases anteriores. Por exemplo, os modelos e documentos de análise e projeto podem ser alterados durante a fase 21 de implementação, na medida em que os problemas surgem. Este modelo é uma variação do modelo em cascata que permite a superposição entre as fases e a realimentação de correções. O ponto negativo é que esta superposição das fases é difícil de se gerenciar. 3. Modelo de ciclo de vida em Espiral: nesse modelo o produto é desenvolvido em uma série de iterações. Cada nova iteração corresponde a uma volta na espiral. Isso permite construir produtos em prazos curtos, com novas características e recursos que são acrescentados na medida em que a experiência descobre sua necessidade. As atividades de manutenção são usadas para identificar problemas; seus registros fornecem dados para definir os requisitos das próximas iterações. O principal problema do ciclo de vida em espiral é que ele exige gerenciamento sofsticado para garantir sua precisão e confiabilidade. 4. Modelo de ciclo de vida de Prototipagem Evolutiva: variação do modelo em espiral é usado para desenvolver o produto completo, mas construindo uma série de versões provisórias chamadas protótipos. Esses protótipos cobrem cada vez mais requisitos, até que se atinja o produto desejado. A Prototipagem Evolutiva permite que os requisitos sejam definidos progressivamente, e apresenta alta flexibilidade e visibilidade para os clientes. Os pontos negativos: gerenciamento sofisticado e a análise e o projeto devem ter excelente precisão para que o produto não se degenere ao longo dos protótipos. 5. Modelo de ciclo de vida por Estágios: uma variação do modelo em cascata em que o cliente recebe entregas de liberações parciais do produto. Isso amplia a visibilidade do projeto para o cliente. Mas continua com os outros pontos negativos do modelo em cascata puro. 6. Modelo de ciclo de vida de Entrega Evolutiva: combinação dos 22 modelos em Cascata e Prototipagem Evolutiva que permite que, em pontos bem definidos, os usuários possam avaliar partes do produto e fornecer realimentação quanto às decisões tomadas. Facilita também o acompanhamento do progresso de cada projeto, tanto por parte de seus gerentes como dos clientes. O ponto negativo continua fixado na análise e no projeto: devem produzir uma arquitetura robusta que mantenha a integridade ao longo dos ciclos de desenvolvimento. 7. Modelo de ciclo de vida Dirigido por Prazo: o produto é aquele desenvolvido em um prazo pré-determinado. Esse modelo é razoável quando se consegue definir um conjunto de requisitos em que se tem certeza que o prazo estabelecido é suficiente e as folgas são usadas para implementar requisitos opcionais. 8. Modelo de ciclo de vida Dirigido por Ferramenta: as ferramentas CASE (Engenharia de Software Auxiliada por Computador) impõe processos rígidos, que podem ser adequados para tipos bem específicos de produtos. A qualidade destes processos depende de forma fundamental da qualidade da ferramenta e do fato do uso do processo ser restrito ao domínio da aplicação. Uma solução alternativa ao desenvolvimento de software é comprá-lo. Quando se encontra um pacote de software que atende aos requisitos desejados, essa pode ser uma solução. [PAULA FILHO, 2001] explica que nesse caso, não há processo de desenvolvimento, mas processos de compra, de implantação e, possivelmente, de adaptação e integração com outros sistemas. E alerta que, dependendo do caso, isso pode ser mais complexo e caro que um processo de desenvolvimento. 23 2.4.2 A produção industrial de software Inicialmente um produto é construído por uma pessoa ou por uma equipe, mas na medida em que atinge sucesso no mercado, passa a evoluir. A partir daí, um número crescente de pessoas participa de sua manutenção e evolução. Por isso, quase todas as atividades de produção de software são empreendidas por organizações. Essa linha de raciocínio é de [PAULA FILHO, 2001]. Continuando nessa mesma linha, a maturidade de uma organização mede o grau de competência técnica e gerencial na produção de produtos de boa qualidade, dentro de prazos e custos razoáveis e previsíveis. A existência de processos definidos proporciona um nível operacional padronizado e reprodutível. Isso viabiliza a capacitação das pessoas de forma que se dependa menos de determinados indivíduos. A medida do êxito dos processos de produção é a medida de quanto eles contribuem para que os produtos sejam entregues aos clientes e usuários com melhor qualidade, pelo menor custo e no menor prazo possíveis. Diversas organizações no mundo conseguiram propor paradigmas do tipo modelos de capacitação. Em síntese, um modelo de capacitação tem o objetivo de avaliar a maturidade dos processos de produção. Um modelo de capacitação particularmente importante para a área de software é o CMM (Capability Maturity Model), do Software Engineering Institute. O CMM é patrocinado pelo Departamento de Defesa Americano, que o utiliza para a avaliação da capacidade de seus fornecedores de software. Esse modelo é amplamente aplicado na indústria americana de software, além de indústrias em todo o planeta. Partindo do princípio de que, para atingir os níveis superiores de maturidade, era necessário melhorar a prática dos processos em nível dos desenvolvedores individuais, Watts Humphrey propôs, em 1995, uma série de processos pessoais chamada de PSP, do inglês Personal Software Process 24 (Processo Pessoal de Software). Como conseqüência natural do PSP, Humphrey lançou uma publicação em 1999 com o TSP, do inglês Team Software Process (Processo de Software para times). O TSP usa um modelo em espiral. Os participantes do "time" de desenvolvedores são organizados de tal forma que cada desenvolvedor desenpenhe um ou dois papéis gerenciais bem definidos, além de dividir a carga de desenvolvimento. Os papéis suportados pelo processo são os de gerente de desenvolvimento, gerente de planejamento, gerente de qualidade, gerente de processos e gerente de suporte, além do líder do "time". 2.4.3- Copyleft: a nova perspectiva para o software2 No Instituto de Ciências Nucleares da Universidade Nacional Autônoma do México, o administrador de rede Miguel de Icaza em suas horas vagas coordena o projeto Gnome. Esse projeto mundial é um esforço mundial para desenvolver um sistema operacional para desktop que supere as múltiplas versões do Windows, a base do império Microsoft. Os programadores do Gnome dizem que este sistema será mais rápido, mais poderoso e terá menos probabilidades de quedas do que qualquer outro sistema criado em Redmond (cidade americana onde está instalada a matriz da Microsoft). É importante destacar que o Gnome é grátis, poderá ser obtido a custo zero da Internet. O objetivo principal do Gnome é reconquistar o comando dos sistemas operacionais das mãos da Microsoft. Eric S. Raymond, um defensor do software livre e editor do New Hacker's Dictionary diz: "o Gnome tem a chance de levar o mundo do software a um lugar muito diferente e melhor". Por que o Gnome obteria sucesso onde companhias maiores e mais ricas, como a Apple, fracassaram? Por dois motivos, de acordo com os defensores do 25 sistema. Primeiro: o Gnome foi criado para operar junto com o sistema operacional Linux. Famoso por sua velocidade, confiabilidade e eficiência, o Linux é operado em cerca de 17 milhões de sistemas de computadores em todo o mundo (estatística vista em www.olinux.com.br), de redes pequenas nos setores de computação de universidades a provedores de acesso à Internet e laboratórios de computação, passando por empresas de porte imenso como o Correio dos Estados Unidos. Com sua base de usuários crescendo à razão estimada de 40% ao ano (estatística: www.olinux.com.br), o Linux é o único sistema não criado pela Microsoft a expandir sua fatia de mercado. Os defensores do Linux dizem ainda que este sistema oferece, às pessoas, a oportunidade de conhecer o que é um "bom software" e estas, então, jamais voltarão a usar o Windows. A segunda e mais importante razão para que o Gnome tenha sucesso é que, como o Linux trata-se de um produto do movimento conhecido como software livre, ou de código fonte aberto. Não só o Gnome pode ser obtido grátis, como seu código fonte (as instruções básicas que a maior parte das empresas de software encara como as jóias de sua coroa) estará disponível para cópia e modificação. Ao liberar os códigos fonte do controle de uma única companhia, projetos como o Gnome podem contar com a contribuição de milhares de programadores. Porque nem mesmo a gigante Microsoft tem a capacidade de sobrepujar o talento unido de todo o mundo, alegam os defensores do software livre, o software de código fonte aberto sempre supera a competição. O Gnome, o Linux e o movimento do software livre têm uma origem única em 1979, quando a Xerox doou uma das primeiras impressoras a laser ao Laboratório de Inteligência Artificial do MIT. A máquina parava todo hora, o que induziu o programador Richard Stallman, do laboratório, a pedir à Xerox o código que controlava a máquina. Stallman planejava modificar o programa para 2 Da MIT'S MAGAZINE OF INNOVATION TECHNOLOGY REVIEW. 26 que ele respondesse a defeitos com a emissão de um alerta que chegaria às telas de todas as pessoas que estivessem esperando por impressão. Ou seja, todos teriam um incentivo para consertar a impressora imediatamente. Para fazer essa modificação, Stallman precisava do código fonte para o programa da impressora. Para ele tratava-se de um pedido corriqueiro. Na atmosfera de liberdade acadêmica do laboratório, os programadores trabalhavam em conjunto uns com os outros. Além do mais, a Xerox havia dado a Stallman o código fonte de uma impressora anterior, também problemática. Dessa vez, porém, a Xerox se recusou, pois adquiria copyright sobre o código fonte. Stallman achava que o copyright o impedia de melhorar o programa. A Xerox não estava sozinha. À medida que o software se transforma em um negócio de grande porte, o Vale do Silício começou a atrair muitos dos melhores programadores do laboratório de Inteligência Artificial. Quando esses programadores começaram a trabalhar para essas empresas de software, descobriu Stallman, os códigos que escreviam tornavam-se exclusivos e não mais podiam ser melhorados ou compartilhados. Copyright, conclui o idealista Stallman, estava destruindo a comunidade do software. Em 1984, Stallman fundou a Free Software Foundation. Sua meta principal era desenvolver um sistema operacional melhorado que fosse parecido com o Unix, mas que não usasse seu código fonte. Inventado em 1969 por dois pesquisadores do Bell Labs, o Unix agora está disponível em muitas versões diferentes, criadas por companhias com IBM, Compaq e Sun. Stallman batizou sua versão de GNU, um acrônimo para "GNU não é Unix". Numa espécie de homenagem a Stallman, o Gnome, quer dizer GNU Network Object Model Environment. O desafio GNU era enorme. Um sistema operacional define que tarefas os programadores podem solicitar de um computador (adicionar dois números, transferir dados a um disco rígido etc) e dirige os pedidos ao hardware (teclado, monitor, processador, e assim por diante). Mas o sistema é inútil sem centenas 27 de programas subsidiários para executar tarefas específicas, como administração de janelas e comunicação com impressora e outros periféricos. Para produzir um sistema funcional, o projeto GNU tinha de criar todos esses programas. Miguel de Icaza brincava: "É como construir um avião a jato a partir do zero em sua garagem". Em 1990, dezenas de programas haviam sido criados e estavam em uso em todo o mundo, mas o coração do sistema operacional GNU ainda não havia sido produzido. Parte da razão era que Stallman optara por não duplicar o kernel do Unix, mas basear o sistema GNU num kernel avançado e experimental desenvolvido pela Universidade Carnegie Mellon. Único programador a receber um fellowship MacArthur, láurea reservada a gênios, Stallman era uma das poucas pessoas no mundo com a capacidade de enfrentar a tarefa de desenvolver um kernel radicalmente novo, e possivelmente a única com a capacidade de fazê-lo por conta própria. Mas então suas mãos, esgotadas com a digitação de tantos códigos, começaram a lhe dar problemas e a dor o impedia de trabalhar com o teclado. Depois de Stallman, foi a vez de Linus Torvalds, que tinha 21 anos e estudava na Universidade de Helsink em 1991. Torvalds estava longe de ser um especialista em programação. Mas detestava o MS-DOS e ao comprar um 386 com 4 MB de memória percebeu que era uma máquina muito pequena para operar em Unix. Ignorando o DOS e classificando-o como software de "máqualidade", Torvalds mudou o kernel do projeto GNU para poder usá-lo. Eis que ele havia criado um sistema operacional completo. Pela primeira vez a potência do Unix estava disponível para pequenos computadores em um sistema operacional batizado pelos seus amigos de Linux. Torvalds registrou o Linux com o copyleft de Stallman e permitiu que quem o quisesse o obtivesse on-line; quando as pessoas melhoravam o código, ele colocava as versões aperfeiçoadas à disposição na Internet. Isso foi viabilizado porque como os preços dos 28 computadores pessoais, nessa época, caiu e usa potência aumentou, as pessoas dos paízes pobres podiam comprar um 486 ou pelo menos um 386. Essa nova leva de "micreiros" queria testar seus poderes na vanguarda da Ciência da Computação. Com pouca demanda por seus talentos nos países em desenvolvimento, eles aproveitaram a chance de poder participar do desenvolvimento do Linux via Internet. Iniciado em 1991 como um sistema operacional para chips Intel e um único usuário, em 1995 o Linux havia sido modificado para operar em máquinas da Digital e da HP e tinha meio milhão de usuários, muitos deles em países desenvolvidos. Para Raymond, o defensor do software livre, o desenvolvimento do Linux pressagia uma mudança total no mundo do software. O Linux nunca pára. Os usuários comuns trabalhavam com instantâneos bem sucedidos do sistema operacional, mas os programadores sempre estão consertando ou acrescentando alguma coisa. Escrever software numa atmosfera de mercado persa é mais fácil, eficiente e tem maior probabilidade de sucesso, acredita Raymond. Porque o código fonte está aberto a todos, diz, "raramente temos de resolver problemas duas vezes". Os criadores de software comercial, em contraste, são muitas vezes forçados a reinventar a roda, um desperdício quase criminoso de recursos. Quando uma empresa inventa uma maneira de enviar email diretamente de um programa, por exemplo, os concorrentes não podem aproveitar e melhorar esse trabalho; devem, em lugar disso, começar do zero e descobrir uma maneira completamente diferente de fazê-lo. O resultado, alegam os defensores do código fonte aberto, não precisam se preocupar com a possibilidade de que consertar um bug possa quebrar centenas de programas que dependam dele. Os bugs de programas livre podem ser consertados rapidamente, porque o código fonte está disponível para todos. Os defensores do código fonte aberto para todos dizem que o GNU e o Linux têm vantagens para os usuários. No lugar de serem forçados a aceitar os recursos que grandes fornecedores como 29 a Microsoft optam por tornar disponíveis, as companhias podem criar softwares que atendam às suas necessidades. Em parte devido a sua facilidade de personalização, o software livre está se espalhando pelo mundo dos negócios (ainda que em algumas empresas os gerentes de informática escondam o uso desses sistemas dos seus chefões). A Sega usa Linux para desenvolver videogames; a Digital Domain, de James Cameron, usou para produzir os efeitos especiais de Titanic. Netscape e Intel estão investindo na Red Hat, a maior distribuidora de Linux. 2.5 Algoritmos, linguagens de programação e software Programar é compreender. - Kristen Nygaard "Na década de 40 quando surgiram os primeiros computadores, a programação era feita por hardware. Os engenheiros que desenvolveram os primeiros computadores criavam os programas mudando fisicamente suas conexões. Eram utilizados grandes painéis com centenas de conectores, semelhantes às antigas mesas telefônicas. A programação era alterada plugando-se os fios em diferentes conectores. O processo era complicado e com muitas chances de erro. Além disso, o programa era armazenado em diagramas impressos em papel, assim, para cada vez que fosse utilizado, o software precisava ser (re)criado". Jornal O Estado de S. Paulo, 17 de Julho de 1996 A Ciência da Computação surgiu na antiga Grécia, no século III a.C. com o desenho de algoritmos por Euclides e com os estudos sobre complexidade e redutibilidade de problemas na Babilônia. No início do século XX, diversas pesquisas foram desenvolvidas com o objetivo de definir um modelo 30 computacional suficientemente genérico para implementar qualquer "função computável". Em 1936, Alan Turing apresentou a Máquina de Turing. Um modelo para a formalização de um procedimento efetivo (algoritmo), ou seja, uma sequencia finita de instruções, realizadas mecanicamente em um tempo finito. No entanto, menos de 20 anos depois surgiu uma nova forma de expressar algoritmos: as linguagens de programação. [DEITEL, 2001] explica as linguagens de alto nível clássicas: FORTRAN (FORmula TRANslator) desenvolvida pela IBM Corporation, entre 1954 e 1957, para ser usada no desenvolvimento de aplicativos científicos e de engenharia que exigem computações matemáticas complexas. FORTRAN é ainda amplamente usada, especialmente em aplicativos de engenharia. COBOL (COmmon Business Oriented Language), desenvolvida em 1959 por fabricantes de computadores, usuários do governo e usuários industriais de computadores. COBOL é principalmente utilizada para aplicativos comerciais que exigem manipulação precisa e eficiente de grandes quantidades de dados. Hoje em dia, mais da metade de todo o software para aplicações comerciais ainda é programado em COBOL [DEITEL, 2001]. A linguagem de programação Pascal foi criada por Niklaus Wirth em 1971. Pascal foi planejada para uso acadêmico e projetada para ensinar programação estruturada em ambientes acadêmicos, e se tornou rapidamente a linguagem de programação preferida no ambiente universitário. A linguagem C foi criada por Dennis Ritchie no Bell Laboratories e foi originalmente implementada em um computador 31 DEC PDP-11 em 1972. C se tornou inicialmente conhecida como a linguagem de desenvolvimento do sistema operacional Unix. Hoje em dia, a maioria dos sistemas operacionais são escritos em C e /ou C++. C está atualmente disponível para a maioria dos computadores, além de ser independente do hardware. C++ é uma extensão de C e foi desenvolvida por Bjarne Stroustrup no início dos anos 80 no Bell Laboratories. C++ apresenta várias características que melhoram a linguagem C, mas o mais importante é que fornece recursos para a programação orientada a objetos. A Sun Microsystems em 1995 desenvolveu o projeto a linguagem Java. Baseada em C/C++, Java é usada para criar páginas Web com conteúdo dinâmico. A tecnologia Java, portanto, está presente em páginas Web com conteúdo dinâmico e interativo, em aplicativos empresariais de grande porte, em servidores Web, em produtos eletrônicos (celulares, pagers, assistentes pessoais) e muito mais. A programação de sistema desenvolveu-se com a produção de programas voltados para o ambiente empresarial. À medida que a computação se tornava imprescindível no dia a dia das empresas, ficou evidente que o sistema de banco de dados proporcionava à empresa o controle de todos os seus dados operacionais. A linguagem SQL (Structured Query Language) foi criada pela IBM para definir, modificar e consultar dados contidos em um banco de dados relacional. A primeira linguagem para páginas Web foi a HTML (Hipertext Markup Language), mas a nova linguagem para a Web é muito mais flexível e fácil de se 32 aprender: o XML (eXtensivel Markup Language), que se integra totalmente ao HTML. Além disso, as duas linguagens tem uma origem em comun, o SGML (Standard Generalized Markup Language), um padrão internacional genérico para a descrição da estrutura de diversos tipos de documentos eletrônicos. Ao contrário do HTML, no entanto, o XML não estabelece como um determinado elemento deve ser visualizado. Seu objetivo é armazenar as informações de forma organizada. Um arquivo XML é apresentado em mídias diferentes, dessa forma um mesmo material pode receber determinado tratamento gráfico para a Web e outra formatação para ser impresso. Os bancos de dados corporativos como o Oracle 8i, por exemplo, aproveitam a tecnologia da Internet para se transformarem em poderosos servidores de aplicações e de arquivos que aprenderam a "falar" Java, afinal o mercado volta-se cada vez mais para linguagens de padrões abertos que facilitam a vida dos desenvolvedores de aplicações e dos usuários. Com isso, além de guardar e gerenciar um enorme volume de informações, permitem que os dados sejam acessados a partir de um browser e trazem recursos que ajudam as empresas a criar aplicações para a Web, sejam simples sites coorporativos ou complexas operações de comércio eletrônico. 2.6- Software na Internet 2.6.1- Visão Geral O ponto inicial para se pensar em aplicações orientadas a Web foi a possibilidade de atingir acessibilidade praticamente ilimitada. Um sistema desenvolvido sob medida para uma empresa pode agora ser desenvolvido visando disponibilizar o acesso a todos os distribuidores dessa empresa. Estendendo a solução, é possível disponibilizar acesso a todos os consumidores. No passado, atingir essa acessibilidade era o principal obstáculo. Com as 33 tecnologias orientadas à Web, prover acesso externo a sistemas internos é tão fácil quanto publicar uma URL. Sem dúvida, a Web foi significativamente influenciada pelos usuários de sistemas de computadores, mas qual a influência ela tem sobre os designers de aplicações empresariais? Esta é exatamente a nova questão explorada pela Engenharia de Software. Que coisas continuam as mesmas? Que coisas são novas? E que coisas tem mudado sutilmente, mas que são interessantes do ponto de vista dos modelos e processos de desenvolvimento de software? As atividades que as pessoas precisam realizar para construir um software para a Web não são diferentes daquelas realizadas para desenvolver um software qualquer. É essencial fazer análise de requerimentos, design, implementação, teste e implantação. Mas para se construir software para uma aplicação Web adiciona algumas novas variações a esta sequencia de atividades tradicionais. Essas modificações são compactas, mas suficientes para apontarem novas direções. 2.6.2- Qualidade, escalabilidade, usabilidade e manutenibilidade Na programação para aplicações Internet, o ponto de partida é explorar os atributos de qualidade para sistemas orientados à Web. A Internet não introduziu, necessariamente, novas regras de qualidade, mas as aplicações Web lançaram mais desafios que as primeiras gerações de aplicações. Além disso, as capacidades da Web introduzem novos conceitos às idéias tradicionais de qualidade. A Web também destaca a questão sobre a escalabilidade. Enquanto um sistema provavelmente tinha alguns poucos milhares de usuários uma década atrás, os projetistas de sistemas Web, hoje em dia, precisam considerar a possibilidade de centenas de milhares de usuários estarem acessando a aplicação ao mesmo tempo. 34 Adicionalmente, muitos usuários da Web são potenciais consumidores, isso faz com que as aplicações empresariais apresentem uma demanda por altos índices de usabilidade. Portanto, esse problema deve ser tratado com técnicas para projetar a interface com o usuário, através de modelos de interface, modelos de tarefas e modelos de conteúdo. As aplicações Web precisam ser modificadas no mesmo ritmo em que os negócios se modificam, e sempre o site com melhor usabilidade pode ter problemas se o projeto da interface é difícil de ser modificado e ampliado. Portanto, a manutenibilidade é um outro fator essencial em ambientes orientados à Web. 2.6.3- Agilidade, alcance mundial e lições de aprendizado Aplicações Web precisam ter altos índices de qualidade, usabilidade, velocidade de acesso e, ao mesmo tempo, serem rapidamente criadas. Mas existe um dilema: alta qualidade não é compatível com rapidez de desenvolvimento. Especialistas apontam que começar os testes antes da fase de implementação não produz apenas um produto mais sólido, mas também com muito mais rapidez. Métodos de agilidade na produção de software são abordados pela nova área da engenharia de software: a Extreme Programming. Aplicações Web em particular exigem ênfase em agilidade de processos, ênfase na qualidade e na velocidade. Uma característica de métodos que visam agilidade, é a ênfase na modelagem. No entanto, especialistas afirmam que em projetos de aplicações para Internet, a ênfase dada à documentação e às ferramentas deve ser muito menor que a ênfase dada à comunicação e à qualidade. O alcance mundial da Internet é impedido porque pensa-se que em todo o mundo as pessoas conseguem ler e compreender o inglês. As pessoas que falam inglês com naturalidade, navegam pela Web com muito mais facilidade e 35 tem acesso a muito mais informações úteis se comparadas com as pessoas que não dominam o inglês. Esta situação lança um novo desafio: as aplicações Web tem que direcionar o foco para métodos e regras que visam a "internacionalização". Essa mudança de foco é um passo em direção a implementação de aplicações Web que atinjam alcance global. O principal desafio para a comunidade de software, tanto em desenvolvimento Web quanto no desenvolvimento tradicional de software, é entender melhor e aplicar com eficiência, as novas lições aprendidas sobre os processos de criação do software. 36 3.0- MATERIAL E MÉTODOS Este trabalho, voltado para a área de Tecnologia da Informação, tem como foco a tecnologia .NET e foi desenvolvido, no período de Maio de 2002 a Novembro de 2002, com base em pesquisa bibliográfica e documental. Foram consultadas publicações dos mais diversos tipos: livros, revistas especializadas e artigos disponibilizados na Internet. Espera-se que o trabalho apresente os principais pontos desta tecnologia e da estratégia da Microsoft .NET. 37 4.0- A PLATAFORMA .NET 4.1- Estratégia .NET A computação caminha para um cenário que sobrepõe o modelo desktop. Este novo cenário implica em notebooks, celulares e palmtops conectados à Internet. Neste novo modelo de computação a informação e os recursos de software não estarão exclusivamente em discos, mas distribuídos em intranets, extranets e até mesmo na Internet. O ponto máximo é que o usuário acessa todos os recursos (informações e aplicativos) em computadores móveis. Do ponto de vista do software empresarial, os aplicativos serão implementados visando acessibilidade praticamente ilimitada, isto é, todos os departamentos da empresa, parceiros e clientes acessam o sistema pelo browser. A plataforma .NET foi projetada para atender à visão corporativa da Microsoft, que consiste em dar autonomia às pessoas “através do uso de software a qualquer hora, em qualquer lugar e em qualquer dispositivo”. Portanto, as tecnologias .NET abrangem clientes PC e móveis. Quando a Microsoft formulou a estratégia .NET, no final dos anos 90, a empresa não passava exatamente bom período: O Java ganhava terreno rapidamente do lado servidor e se tornava uma alternativa viável para a arquitetura de servidor Microsoft. Os analistas da indústria de computação previam a substituição do modelo tradicional de desktop PC da Microsoft (com Office executando em Windows) pelo modelo de computação orientado a Internet (em que predominam os clientes de rede). As vendas de PC caíram, enquanto as vendas de dispositivos pós-PC cresceram em ritmo acelerado. 38 O mercado de software passava pelo crescimento exponencial de produtos de arquitetura aberta e gratuitos para sistemas operacionais, servidores Web, sistemas de gerenciamento de banco de dados e aplicativos de produtividade em desktop. Atualmente esses modelos alternativos incluem Linux, Samba, Apache, PostgreeSQL, Star Office e Open Office. À época, todos esses sistemas, a plataforma Java e o Open Source ameaçavam transformar áreas chave do desenvolvimento de software em serviços gratuitos, compensando o valor da criação do software com os serviços de suporte e manutenção. A Microsoft traçou a estratégia .NET para responder a esses desafios, presumindo que as arquiteturas de todos os aplicativos futuros serão baseadas em Extensible Markup Language (XML) e Web Services3. A plataforma .NET está diretamente ligada a XML e a Web Services que levam, necessariamente, ao uso de um modelo computacional baseado em padrões Internet, comunicação entre aplicativos e independência de tecnologia. Pontos principais da plataforma .NET: O padrão XML tem a capacidade de troca de mensagens entre sistemas, com base nesta linguagem muitas empresas conseguem a 3 Web Services: componentes de software que se comunicam com outros aplicativos codificando mensagens em XML e as enviando através de protocolos padrão da Internet (como HTTP, SMTP, FTP etc). Intuitivamente, um Web Service é como um site Web sem interface com o usuário, servindo aplicativos ao invés de pessoas. Em vez de receber pedidos de navegadores e devolver páginas Web como resposta, um Web Service recebe um pedido através de uma mensagem formatada em XML de um aplicativo, realiza uma tarefa e devolve uma mensagem de resposta também formatada em XML para o aplicativo. 39 integração entre sistemas implementados em diferentes plataformas de hardware e software. Todas as ferramentas Microsoft .NET foram construídas com base em XML, possibilitando a implementação e o suporte a sistemas orientados a Web. Nesses sistemas, sites e serviços permitem a interação altamente transparente com quaisquer outros serviços. Tem-se facilidade para transformar os dados XML em diferentes formatos para exibição, como HTML para os mais diversos browsers, WML para celulares WAP, além de outros padrões específicos disponíveis no mercado. Dessa forma, um dado XML, produzido por uma empresa ou por um serviço, disponível na Web poderá ser visualizado e editado pelos mais diferentes dispositivos como celulares, palms, agendas eletrônicas e, é claro, pelo browser. A Microsoft promove a plataforma de desenvolvimento .NET para uma nova classe de aplicativos: os Web Services, ou aplicativos para servidores que trocam dados formatados em XML com outros aplicativos através da Web. Isso porque a empresa considera os Web Services uma forma de baixo custo para a integração de aplicativos entre empresas. Além disso, ela espera que os Web Services sejam o novo tipo de aplicativo “obrigatório” que leve os profissionais a desenvolverem soluções baseadas na plataforma .NET; da mesma forma que os aplicativos para desktop com interface gráfica de usuário os levaram a desenvolver produtos com base nas primeiras versões do Windows. Com a plataforma .NET, a Microsoft espera manter sua enorme base de desenvolvedores em Windows, que poderiam, de outra forma, migrar para outras plataformas, atraídos pela promessa de independência de hardwares e de sistemas operacionais, feita pela plataforma Java. [CHERRY, 2001] explica que os desenvolvedores não produzem lucros para a Microsoft ou para qualquer 40 outra empresa, entretanto, os desenvolvedores Windows são importantes defensores dos produtos Microsoft (como o próprio Windows) dentro das empresas e os desenvolvedores de software comerciais constituem uma importante interface para a oferta de produtos Microsoft aos consumidores. A plataforma .NET exige que programadores e gerentes de projeto dominem APIs e linguagens de programação essencialmente novas e com curvas de aprendizado acentuadas. Além disso, a migração para a plataforma .NET tem o risco de estar usando tecnologias recém-lançadas em sistemas de produção críticos. Portanto é essencial pensar nas formas de usar as capacidades da .NET para traçar um caminho de migração gradativo. Mas o principal risco para as empresas é que a plataforma .NET pode atá-las ao sistema operacional Windows e aos produtos para servidores Microsoft .NET. 4.2- A programação na Plataforma .NET 4.2.1- Um novo modelo de programação Todos os aplicativos criados na Plataforma .NET precisam de dois componentes principais para serem executados. O CLR (Common Language Runtime): um conjunto de rotinas que carrega aplicativos, confirma que eles podem ser executados sem erros, verifica as condições de segurança apropriadas, executa aplicativos e faz a “coleta de lixo” depois de terminado o processo. As bibliotecas de classe do .NET Framework que oferecem aos programadores os componentes de software de que necessitam para escrever programas que rodem sob o controle do CLR (o chamado “código gerenciado”). 41 Esses dois componentes oferecem uma enorme gama de funções (de sistemas de arquivos e acesso a redes até funcionalidades XML) em uma única hierarquia organizada logicamente. Os aplicativos Web para servidores podem usar o ASP.NET, uma biblioteca de classe especializada para criar esses aplicativos, além de conteúdo Web dinâmico. O ASP.NET não é necessário para aplicativos desktop. O CLR tem dois objetivos principais: Melhorar a confiabilidade e a segurança dos aplicativos; Reduzir o volume de códigos de baixo nível, tediosos e sujeitos a erros, que os desenvolvedores de aplicativos precisam escrever. Esses objetivos são semelhantes aos problemas que empresas como Sun e IBM estão tentando atacar com a plataforma Java em Unix e mainframes [CHERRY, 2001]. Para resolver esses problemas no Windows, o CLR faz modificações fundamentais no modelo de programação e na forma de carregamento e execução de aplicativos. Um aplicativo chega ao CLR como um arquivo ou conjunto de arquivos chamado assembly. A parte principal do assembly é o código escrito em MSIL (Microsoft Intermediate Language), que o CLR traduz em código nativo executável. O controle na tradução de aplicativos de MSIL para o código nativo permite ao CLR gerenciar a execução do aplicativo e impedir muitos tipos de problemas, daí o nome código gerenciado. Além do código MSIL, um assembly contém metadados que descrevem em detalhes os tipos e componentes relevantes que o código MSIL exige para ser corretamente executado. Finalmente, um assembly contém um manifesto, documento que lista todos os arquivos e componentes de software contidos no 42 assembly, e indica onde o CLR deverá procurar outros assemblies com componentes que o aplicativo necessita para execução. Para carregar um aplicativo, o CLR usa o manifesto do assembly para localizar a versão correta dos assemblies que o aplicativo necessita. O CLR examina, então, todo o assembly do aplicativo (isto é, o próprio código MSIL e os metadados que o descrevem) para confirmar que o código é “type-safe”, o que significa que ele executa apenas as operações apropriadas em certos tipos de dados (não permite que o programador use um número inteiro para um ponteiro de função, por exemplo) e que vai acessar apenas as posições da memória que está autorizado a acessar. O CLR então carrega o MSIL do assembly do aplicativo e, ao faze-lo, coleta “evidências” sobre o assembly, como: De onde foi baixado e instalado; Que funções ele precisa executar (se ele precisa gravar arquivos em disco ou enviar e-mail, por exemplo); Que usuário está tentando executa-lo; Se o assembly possui uma assinatura digital válida de um desenvolvedor autorizado, e se o assembly foi alterado desde que assinado digitalmente. Essas evidências são a base para a segurança no .NET Framework, o que permite ao CLR determinar se deve executar o aplicativo e que permissões ele deve ter enquanto roda. Em seguida, o CLR traduz o código MSIL em código nativo que pode ser executado pelo processador. (A Microsoft se refere a isso como “código nativo gerenciado”, diferentemente de “código nativo não-gerenciado”, escrito em uma linguagem mais antiga como C++ e sobre o qual o CLR não tem 43 controle.) Um recurso chamado compilação JIT (Just-in-Time) permite que o CLR adie o processo de tradução até que ele seja realmente necessário, o que lhe permite evitar traduzir códigos usados esporadicamente. (Para uma representação gráfica desse processo, veja a ilustração em anexo “Executando código gerenciado”.) Finalmente, o CLR monitora o código traduzido durante a execução e limpa periodicamente a memória quando o aplicativo a libera (um processo conhecido como “coleta de lixo”). Uma outra função muito importante realizada pelo CLR é fazer a mediação entre o código gerenciado e o código não-gerenciado (isto é, o código condicional do Windows que roda fora do CLR). Portanto, o CLR permite aos programadores combinar novos programas .NET com bibliotecas do Windows e componentes já existentes, movendo um aplicativo gradualmente da antiga para a nova plataforma. (Veja, em anexo, a ilustração “Misturando código gerenciado e não-gerenciado”. ) Mas é importante notar que o código não-gerenciado é executado fora do controle do CLR e, portanto, pode causar falhas no aplicativo, escape de memória ou abrir brechas de segurança através de estouros de buffer. Um aplicativo .NET é, no máximo, tão forte quanto seu elo mais fraco (seu código não-gerenciado) [CHERRY, 2001]. Mudando o foco para as bibliotecas de classe do .NET Framework, elas fornecem o código básico exigido por quase todos os aplicativos. Como as bibliotecas de código fornecidas no Windows e em seus SDKs, as bibliotecas de classe permitem que os desenvolvedores se concentrem em escrever os códigos exclusivos de seus aplicativos, ao invés de escrever código repetidamente para funções freqüentes como ler arquivos [CHERRY, 2001]. As bibliotecas de classe também solucionam um problema sério com as bibliotecas de código atuais do Windows: o excesso de interfaces de 44 programação de aplicativos (APIs) e SDKs que foram surgindo à medida que a Microsoft foi adicionando funcionalidades ao Windows [CHERRY, 2001]. As bibliotecas de Java, em suas várias “edições”, tentam atacar um problema semelhante e talvez mais grave nos sistemas operacionais não Windows, ou seja, a incrível variedade de APIs de vários fornecedores para funções básicas como entrada e saída de arquivos e mensagens [CHERRY, 2001]. Todo código gerenciado é organizado em grupos lógicos denominados classes (daí o nome bibliotecas de classe), arranjadas em hierarquias chamadas namespaces. As bibliotecas de classe do .NET Framework caem no namespace System. Para simplificar a tarefa de encontrar a classe de que um desenvolvedor precisa, esse namespace é arranjado em uma hierarquia conforme sua função. Por exemplo, dentro de System fica System.Data, que contém classes para API de acesso a dados ADO.NET. O próprio System.Data inclui um conjunto de classes chamado System.Data.Oledb, que suporta o acesso a banco de dados e outras fontes de dados que têm um provedor de dados .NET OLE DB do Windows, e System.Data.SQLClient, que suporta acesso ao SQL Server. Algumas classes System fornecem funcionalidades anteriormente disponíveis através da API do Windows ou funções específicas de linguagens, mas outras classes são totalmente novas, como System.Reflection, que permite ao código gerenciado obter informações do assembly, como seus metadados. Os desenvolvedores podem definir classes personalizadas, estendendo as das bibliotecas base. Também podem definir namespaces proprietários que sejam globalmente exclusivos, fazendo com que suas classes não entrem em conflito com as da Microsoft ou de outras organizações. Finalmente, as bibliotecas de classe tem a vantagem de incluir as funções mais freqüentemente usadas da principal API do Win32 e de inúmeros SDKs adicionais em um pacote unificado. 45 A meta principal da CLR é simplificar o processo de implementação de componentes e aplicações a partir de qualquer linguagem de programação, tendo como alvo qualquer plataforma de hardware [GUTIERREZ, 2001]. Para atingir essa meta, no Framework .NET, os compiladores não geram código nativo, dependente de plataforma. Eles simplesmente fazem a conversão do códigofonte da linguagem de programação em um conjunto de instruções da linguagem MSIL. Os arquivos resultantes não são os velhos executáveis (.exe) do Windows. A Microsoft os chama arquivos PE (Portable Executable), já que são independentes da plataforma de hardware. Então, o primeiro serviço prestado pelo CLR é a tradução do código intermediário MSIL gerado pelos compiladores das linguagens de programação em código nativo executável. A tradução não é feita instrução a instrução, como nos interpretadores, mas de uma única vez, em tempo de start-up. Código-fonte em uma dada linguagem de programação Compilador Código Intermediário MSIL CLR Figura 1: Compilação e execução de um aplicativo .NET Esse processo garante que os programas desenvolvidos na plataforma .NET executem sobre qualquer plataforma de hardware e possam interagir entre 46 si, mesmo quando desenvolvidas em linguagens de programação diferentes. Além disso, este processo possibilita a otimização para cada plataforma de hardware. Naturalmente, o processo de tradução em tempo de execução, exige alta disponibilidade de recursos (memória e capacidade de processamento) para ser realizado com eficiência. Visando reduzir esse consumo de recursos, a Microsoft projetou o OptIL (Optimized Intermediate Language), um subconjunto de instruções MSIL, convertido em código nativo com muito mais velocidade. É importante lembrar que a estratégia da Microsoft é atingir também a computação móvel (PDAs, handhelds, telefones etc). Nestes ambientes, as capacidades de memória e processamento são muito limitados. Além disso, [GUTIERREZ, 2001] lembra que as limitações naturais dos dispositivos implicam na redução de funcionalidades. (Para que serve uma interface de janelas e botões em um telefone celular, se não há um display suficientemente visível?) Essa redução natural de funcionalidades implica que um conjunto razoável de instruções pode ser simplesmente removido da MSIL, para se formar o OptIL. A MSIL tem suporte a um conjunto de instruções completo e foi projetada para atender tanto aos requisitos da CLR quanto os requisitos das linguagens e ambientes de programação existentes. É claro que especial atenção foi dada aos produtos da Microsoft, a começar pelo Visual Basic; no entanto, as abstrações MSIL possibilitam que a grande maioria das linguagens existentes possa ser estendida e seus compiladores adaptados a gerar código MSIL. Existem projetos, já em estágio avançado, para implementar compiladores COBOL, Pascal, Eiffel, Haskell e Pearl. As empresas normalmente precisam dividir projetos em partes, fazendo com que algumas delas sejam desenvolvidas por programadores em C++ e outras por programadores em VB, por exemplo [CHERRY, 2001]. A falta de 47 programadores para uma dessas linguagens é um impacto negativo para os planos da empresa. O .NET Framework combate o problema das linguagens de duas formas: Tipos de dados padrão: Em primeiro lugar, o .NET Framework oferece operações e representações internas padrão para os tipos de dados mais usados (como números inteiros, números reais e strings). Esse conjunto de tipos de dados padrão (chamado de Common Type System – CTS) elimina a necessidade de cada linguagem implementar tipos de dados em sua própria forma exclusiva e incompatível. Formato de aplicativos padrão: O .NET Framework implementa um formato de aplicativos padrão (o assembly contendo o MSIL, metadados e o manifesto). Os compiladores de todas as linguagens de programação .NET geram este formato. Extraindo informações sobre o MSIL nos metadados, ferramentas como compiladores, depuradores e geradores de perfil podem analisar e trabalhar com os dados independentemente da linguagem de programação original. Os formatos de aplicativos e tipos de dados padrão permitem aos desenvolvedores criarem bibliotecas de classe que funcionam com qualquer linguagem de programação que entenda formatos e tipos de dados; isso inclui todas as linguagens de programação .NET da Microsoft, assim como várias outras linguagens. Em particular, as bibliotecas de classe do .NET Framework usam apenas tipos de dados CTS e são distribuídos no formato padrão de aplicativo. Como resultado, essas bibliotecas de classe podem ser usadas por aplicativos em qualquer linguagem de programação .NET. (Veja a ilustração “Desenvolvendo código gerenciado” em anexo.) 48 Concluindo, o CLR e as bibliotecas de classe dão à Microsoft uma plataforma de execução única, que suporta múltiplas linguagens de programação. Além disso, as bibliotecas de classe oferecem a todas as linguagens de programação .NET aproximadamente o mesmo conjunto de funções básicas, o que permite aos programadores trabalharem com a linguagem com a qual se sentem mais confortáveis. 4.2.2- As linguagens de programação na plataforma .NET Ao contrário da mudança da API de Win16 para Win32 em 1993, a mudança de Win32 para a plataforma .NET inclui alterações em linguagens e ferramentas existentes, e linguagens inteiramente novas. Como conseqüência, as organizações que decidirem usar a plataforma .NET terão não só de mudar a estratégia de plataforma, mas também repensar a estratégia de linguagens e ferramentas. Três novas versões das linguagens de programação da Microsoft darão suporte ao CLR e às bibliotecas de classe: Visual Basic .NET, Visual C++ e JScript .NET. Eles contarão com duas novas linguagens: Visual C# (C-Sharp) e Visual J#, que permite aos desenvolvedores em Visual J++ criar código gerenciado usando a sintaxe já conhecida: Java. Para suportar diferentes linguagens, diferentes programadores com conjuntos de conhecimentos diferentes criam componentes usando a linguagem que conhecem melhor. Na plataforma .NET todos esses componentes funcionam perfeitamente uns com os outros. Mas isso dá margem à pergunta: Como os gerentes de desenvolvimento e projeto escolhem a linguagem a ser usada em seus aplicativos? (Para um guia rápido para escolher uma linguagem para desenvolvimento em .NET, leia “Regras práticas para a seleção de uma linguagem .NET”, em anexo). 49 O MSIL é o denominador comum de todas as linguagens de programação da .NET e, na teoria, construções equivalentes em duas linguagens diferentes deveriam produzir um IL idêntico. Como resultado, todas as linguagens de programação são idênticas no desempenho e na alocação de recursos. Visual Basic .NET: Linguagem com sintaxe muito próxima à linguagem do VB, foi projetada para promover a migração dos desenvolvedores em VB para a plataforma .NET. Mas o VB .NET significa uma grande alteração em relação a versões anteriores de VB, e não é compatível com aquelas. A Microsoft disponibiliza uma ferramenta para a migração de programas fonte de VB para VB .NET incluída no Visual Studio .NET, mas esse processo não pode ser totalmente automatizado. Os desenvolvedores terão de inspecionar manualmente o código migrado, reescrever algumas seções e testar cuidadosamente os resultados. A Microsoft afirma que desenvolvedores em VB com experiência principalmente em componentes VB devem usar o VB .NET para novos aplicativos ao invés de migrar para C#. Ao passo que programadores em VB avançados que provavelmente criarão componentes que serão usados por outros programadores da equipe (que talvez continuem usando VB .NET), devem considerar os benefícios de migrar para C#. Visual C++: Linguagem de programação existente para a criação de código de baixo nível e programadores para Windows (código não-gerenciado), continuará a existir e será atualizado para suportar a plataforma de desenvolvimento .NET (código gerenciado). O C++ tem uma posição única no mundo .NET. Todas as outras linguagens da Microsoft requerem uma migração completa para a 50 plataforma .NET. Por exemplo, não é possível usar o VB .NET para criar um componente ao estilo VB que execute no velho ambiente do VB, nem é possível compilar diretamente um aplicativo em C# para instruções nativas da Intel. O Visual C++, no entanto, continua tendo um compilador nativo. Esse fato, somado com a capacidade do CLR de conectar novos códigos gerenciados a códigos não-gerenciados existentes, implica que os programadores em C++ continuam a usar exatamente a mesma linguagem e o mesmo ambiente que usavam no passado. Mesmo com as extensões gerenciadas, a criação de código nãogerenciado no Visual C++ será difícil e com erros em potencial, devido às diferenças entre os tipos de dados da plataforma .NET e os do C++. Isso significa que os desenvolvedores deverão usar o Visual C++ como usam o C++ hoje, para escrever código não-gerenciado, como drivers de dispositivo, além de usar as extensões gerenciadas para permitir que esse código opere em conjunto ou incorpore código gerenciado de outras fontes. JScript .NET: Mais atraente para os desenvolvedores Web para a criação de scripts de clientes em navegadores Web. Visual C#: Devido a dificuldade para se criar código gerenciado em Visual C++, a Microsoft criou uma linguagem similar: Visual C#, especificamente para criar código gerenciado. C# é uma linguagem da Microsoft que foi criada a partir do zero para ser usada especificamente com o CLR; a própria empresa está usando C# para criar código gerenciado em subsistemas como as bibliotecas de classe e o ambiente ASP.NET de desenvolvimento para Web. De fato, enquanto dar suporte a múltiplas linguagens era a principal meta de design do CLR, é razoável dizer que o C# e o CLR foram efetivamente projetados juntos, e que o projeto de cada um teve impacto no outro [CHERRY, 2001]. O 51 C# é bem mais simples que o C++, mas ele ainda está firmemente enraizado na família “C” de linguagens de programação. Isso significa que ele herda certas características que as linguagens como VB não possuem. Por exemplo, o C# é case sensitive, exige que os programadores façam conversão explícita entre os tipos de dados, enquanto o VB faz conversões automaticamente. O C# inclui suporte para criar código gerenciado que tem acesso mais direto à infra-estrutura da plataforma .NET, por exemplo, os desenvolvedores podem acessar a memória de um buffer usando ponteiros. A Microsoft preferiu não incluir esses recursos no VB.NET, pois faze-lo complicaria a linguagem VB para o benefício de um grupo muito pequeno de programadores avançados em VB. Portanto, o C# será mais atraente para os programadores que já trabalham em Visual C++ ou Java, ou para programadores avançados em VB que desenvolvem componentes e precisam de uma linguagem de fácil assimilação que explora o CLR e as bibliotecas de classe. O C# combina a potência do C++ com a facilidade do VB6, oferecendo um código tipo C++ legível e compatível com o CLR. Além disso o C# é uma linguagem puramente orientada a objetos e permite que o programador escreva um código compreensível e reutilizável. Visual J# .NET: Uma nova linguagem que dá aos programadores um caminho de migração do ambiente Java existente no Visual J++ para a nova plataforma .NET. Permite aos programadores criarem aplicativos usando a sintaxe Java, mas os aplicativos resultantes usam as bibliotecas de classe do .NET Framework e o CLR ao invés das APIs Java 2 da Sun e da JVM. É importante destacar que o Visual J# .NET não usa a tecnologia Java da Sun, e os aplicativos poderão não ser facilmente portáveis para esta. 52 4.2.3- Visual Studio .NET: ambiente de programação na plataforma .NET Em fevereiro de 2002, a Microsoft lançou a versão final do Visual Studio .NET, seu conjunto oficial de ferramentas de desenvolvimento de software para a criação de aplicativos .NET. O VS.NET oferece aos desenvolvedores a primeira visão detalhada das mudanças revolucionárias que a Microsoft está fazendo em suas linguagens e resolve simultaneamente muitos problemas que impediram os desenvolvedores envolvidos na criação de aplicativos de usar as ferramentas da Microsoft no passado [LOWY, 2002]. Com as melhorias incluídas na depuração e a forte integração das ferramentas de que os desenvolvedores precisam em um único ambiente, o VS.NET terá um impacto significativo no desenvolvimento de aplicativos Web [DREWANZ, 2002]. O VS.NET oferece ferramentas gráficas que facilitam localizar componentes de código, acompanhar tarefas, editar e compilar códigos, conduzir depurações e organizar o trabalho de desenvolvimento. Empacotando novas ferramentas, assistentes, recursos e enfoques de desenvolvimento em um ambiente de arrastar-e-soltar já conhecido, o VS.NET exigirá um aprendizado substancial para dominar todas as suas vantagens, mas deve servir ao propósito de atrair a base de desenvolvedores da Microsoft existente para a plataforma .NET. O conceito principal do VS.NET é a integração. O mesmo ambiente de desenvolvimento é usado por todas as linguagens .NET, e o IDE pode exibir praticamente qualquer informação relacionada a desenvolvimento, como processos de sistema, threads, filas de mensagens, contadores de desempenho, serviços de sistema, Web Services, applets de painel de controle, tabelas de 53 banco de dados e resultados de pesquisas. Um recurso interessante do VS.NET é que ele verifica constantemente o que foi digitado, se encontrar um problema de compilação, ele sublinhará o código da mesma forma que o verificador automático de um editor de textos faz quando digita-se uma palavra incorreta. Uma outra funcionalidade, também importante, é uma janela de ajuda especial que mantém um registro das atividades desenvolvidas e sugere links de ajuda relevantes. 4.2.4- Programação Web: ASP.NET Facilita a criação de conteúdo Web dinâmico e de aplicativos Web mais elaborados e confiáveis, como os Web Services. O ASP.NET é uma parte essencial da plataforma de desenvolvimento .NET da Microsoft e para que a estratégia da empresa seja atingida com sucesso ela precisa convencer os desenvolvedores a adotarem a plataforma .NET, incluindo o ASP.NET [CHERRY, 2001]. Ainda que os programadores que adotaram o ASP.NET estejam relatando benefícios substanciais, os desenvolvedores terão de levar em conta as diferenças no modelo de programação e o suporte a linguagens para migrar do Active Server Pages (ASP) para o ASP.NET [CHERRY, 2001]. O ASP.NET implementa um modelo de programação “orientada a eventos” no qual os desenvolvedores adicionam controles a um formulário e escrevem código para manipular os eventos (como a entrada de dados em uma caixa de textos ou o clique em um botão) associados a esses controles. Também torna mais fácil para os desenvolvedores criarem serviços que trocam dados em XML, permitindo a eles basearem-se no suporte a XML exposto pelas bibliotecas de classe do .NET Framework. O ASP.NET é a parte da plataforma .NET voltada à criação de aplicativos Web hospedados no Microsoft IIS, e usa protocolos da Internet como 54 HTTP e SOAP. O ASP.NET facilita o desenvolvimento e a implantação de dois tipos de aplicativos Web: Aplicativos Web Form, incluindo páginas Web geradas a partir de scripts para conteúdo dinâmico e páginas Web que expõem o formulário a um cliente como o navegador. Web Services que expõem funcionalidades a outros aplicativos e a clientes “inteligentes” e permitem aos aplicativos trocar informações. Ambos os tipos de aplicativos Web têm em comum uma vantagem principal em relação aos aplicativos tradicionais: usam protocolos baseados na Internet para permitir que as informações se movimentem tão facilmente através das fronteiras organizacionais (e firewalls) quanto se movimentam dentro da organização [GUTIERREZ, 2001]. Com o ASP, lançado pela Microsoft em 1996, um programador com experiência em HTML e em criação de scripts podia desenvolver conteúdo Web dinâmico com facilidade. Mas o desenvolvimento de um serviço de formulário Web poderoso e estável continuava muito difícil devido ao modelo de objeto limitado, aos recursos limitados das linguagens de script, às ferramentas limitadas para depuração de aplicativos e ao requisito para fazer chamadas no nível da API para analisadores (parsers) e kits XML externos. Incorporando o ASP.NET à plataforma .NET, a Microsoft oferece aos desenvolvedores as vantagens da CLR e das bibliotecas de classe [GATES, 2001]. O ASP.NET usa o CLR para compilar o código e gerenciar a execução, criando aplicativos Web que rodam com melhor performance e são mais confiáveis [LOWY, 2002]. Além disso, o ASP.NET usa as bibliotecas de classe para facilitar aos desenvolvedores incorporar dados formatados em XML em 55 aplicativos Web e adicionar código para manipular exceções, criar elementos da interface com o usuário e oferecer funcionalidades de programação [CHERRY, 2001]. O ASP.NET usa a tecnologia de acesso a dados do ADO.NET (Access Data Object), uma biblioteca de classes com funcionalidades para acesso a fontes de dados como arquivos e bancos de dados. O ADO.NET é baseado em um modelo de objetos orientado e otimizado para acesso remoto desconectado a fontes de dados na Internet. Isso é possível porque o ADO.NET armazena em cache partes inteiras de um banco de dados e executa a sincronização depois que as alterações forem efetuadas. É importante destacar que as páginas Web desenvolvidas em ASP.NET tem muito mais desempenho se comparadas às páginas em ASP, afinal o ASP.NET é compilado. 4.2.5- Visão geral dos Servidores .NET A plataforma .NET é orientada por uma visão estendida e de longo prazo do software como serviço. Essa visão descreve como o software deve ser projetado, desenvolvido e distribuído. É uma combinação de tecnologias e padrões Web, tecnologias inteligentes de cliente e de cliente/servidor tradicionais, todas interligadas ao XML. A visão da .NET apresenta um mundo onde as informações pessoais e corporativas encontram-se disponíveis a qualquer momento, de qualquer lugar, num formato aberto e seguro [GATES, 2001]. Os Servidores Corporativos .NET são totalmente integrados ao Windows, ao mesmo tempo, compatíveis com XML. Portanto fornecem um conjunto abrangente de serviços que serão utilizados na criação de aplicativos no .NET Framework. 56 O Commerce Server inclui tabelas SQL para criar aplicativos com serviços de autenticação, autorização, personalização, busca, gerenciamento de carrinhos de compras, perfil de usuário, gerenciamento de produtos, marketing e processamento de transações. Contém também um conjunto de modelos de páginas Web que o desenvolvedor pode personalizar a medida que cria seu aplicativo. O Host Integration Server possibilita a integração dos aplicativos .NET com os dados e aplicativos de computadores e mainframes. O Internet Security and Acceleration Server fornece uma combinação de servidor proxy Internet e cache da Web. O Móbile Information Server (MI) é um servidor de aplicativos que proporciona aos usuários acesso a dados corporativos e a e-mails a partir de seus dispositivos sem fio. O SharePoint Portal Server proporciona mais controle sobre o compartilhamento de documentos e outras informações em toda a organização. O BizTalk Server é usado principalmente para aceitar documentos de dados de outros aplicativos ou empresas e traduzi-los para o XML. Em contrapartida é possível fornecer dados a outros aplicativos ou empresas em vários formatos. O SQL 2000 Server é um servidor de banco de dados relacional que possui muitos de alguns dos melhores índices de desempenho. Tem recursos de data warehouse, análise de dados e processamento analítico on-line (OLAP) para utilizar de forma eficiente os dados armazenados no banco de dados. Passando o foco para os sistemas operacionais, tanto o Solaris como o HP/UX são sistemas operacionais “abertos” executados em hardware proprietário. Historicamente, esse status lhes deu vantagem no quesito estabilidade, pois os fornecedores de sistemas operacionais não precisam se preocupar com memória RAM, com placas de vídeo, de fax, de rede e outros 57 componentes de hardware. O Windows, por outro lado, é um sistema operacional proprietário executado em hardware “aberto”; isso significa que a Microsoft precisa garantir suporte a máquinas com combinações completamente aleatórias de placas-mãe, memória e periféricos. Muitos dos servidores .NET tem licença para executar exclusivamente em configurações de hardware conhecidas e testadas. Isso nivela o campo, quando esse sistema é comparado com sistemas Solaris e HP/UX, pois todos eles são executados em configurações de hardware conhecidas. 4.2.6- Web Services e SOAP: a interoperabilidade entre plataformas Muitas empresas tentam conciliar tempo e esforço na tentativa de adquirir independência de plataformas ou compatibilidade entre plataformas. Para conseguir isso, é preciso escolher entre lidar com os problemas relacionados ao desempenho e a dificuldade de tentar escrever um código totalmente independente de plataforma ou escrever um código para uma plataforma de cada vez e aplicar outra tecnologia para conseguir a interoperabilidade entre sistemas. Para escrever um código independente de plataforma, é preciso usar uma combinação de linguagens como Java ou C++ (portáveis em qualquer plataforma) e CORBA4 (ou tecnologias similares para uma solução de objetos distribuídos5). Mas [GUTIERREZ, 2001], ressalta que essa combinação proporciona menos suporte integrado na área de ferramentas de desenvolvimento e apresenta muitos problemas de interoperabilidade. 4 Common Object Request Broker Architecture (CORBA). Uma arquitetura definida pelo Object Management Group (OMG) para dar suporte ao desenvolvimento de aplicações distribuídas implementadas em diferentes plataformas e linguagens. 5 Objetos distribuídos: compreendem tecnologias que possibilitam a comunicação remota entre objetos instalados em diferentes sistemas. 58 O protocolo SOAP e dos Web Services abrem um novo campo para a interoperabilidade entre plataformas, enquanto tira proveito das melhores tecnologias e ferramentas de cada plataforma. Na plataforma .NET podem ser criados aplicativos clientes para sistemas residentes em plataformas Windows que se comunicam com software escrito em outros sistemas ou que utilizam arquiteturas e linguagens diferentes. O SOAP é o elo de ligação entre esses sistemas. Empresa Fornecedores Interoperabilidade entre sistemas e plataformas Parceiros Clientes Figura 2: Integração entre vários sistemas e plataformas diferentes através de objetos distribuídos que, atualmente, pode ser conseguida com a tecnologia de Web Services. A solução de integração entre sistemas tradicional é implementá-los em uma linguagem portável com C++ ou Java e aplicar serviços CORBA. Seguir por esse caminho, no entanto, exige muito tempo de desenvolvimento e uma equipe de desenvolvedores que compreendam a complexidade de aplicações distribuídas. Portanto é uma solução de alto custo. Os Web Services e o protocolo SOAP apresentam uma solução muito mais simples e econômica para a interoperabilidade entre plataformas. É suficiente ligar um Web Service .NET a um cliente Java ou de qualquer outra plataforma ou, ao contrário, consumir um Web Service em um aplicativo .NET independente das plataformas de hardware e software e da linguagem de programação em que foi implementado esse Web Service. 59 Client SOAP HTTP request ASP.NET Mensagem SOAP HTTP response Objeto .NET Figura 3: Esquema geral da chamada remota de um Web Service. 4.2.7- XML e SOAP Um sistema bancário é totalmente online para a troca de informações entre agências e o Banco Central. Do ponto de vista de [GUTIERREZ, 2001], esse é um problema complexo, visto que são milhares de agências com sistemas e plataformas de hardware e software totalmente diferentes. Com o modelo tradicional de construção de aplicações essa é uma tarefa impossível, porque implica na construção de um único sistema gigante, totalmente online, que contém a interface entre agências e todos os sistemas internos [GUTIERREZ, 2001]. Para uma solução simples é preciso especificar um protocolo de comunicação. Para tanto é necessário um formato específico de mensagem para que todos os sistemas distribuídos envolvidos possam interpretá-lo corretamente. Com XML é possível definir um documento que descreve a troca de mensagens entre as agências. Como documentos XML são produzidos no formato texto, 60 qualquer aplicação executando em qualquer sistema operacional consegue processá-lo, desde que conheça sua sintaxe. Além disso, como o documento XML pode ser transportado por qualquer protocolo de comunicação de alto nível, os meios de transmiti-lo são praticamente universais. Data base Rela tion Table Field Name Target Table Name Source Table Name Data Type Figura 4: Representação de um documento XML como uma árvore de elementos (e atributos). A ilustração representa os elementos como nós contra um fundo cinza e os atributos como nós contra um fundo branco. Nesta árvore, um programa que precisasse obter o valor do elemento SourceTable deveria percorrer o caminho Database\Relation\SourceTable para acessá-lo. Um exemplo da aplicabilidade do XML no mundo real é o Sistema de Pagamentos Brasileiro (SPB). Com base na troca de documentos XML, esse sistema está em desenvolvimento acelerado. Além disso, analistas afirmam que o XML se tornará, em pouco tempo, o padrão universal para a troca de dados entre aplicações distribuídas. 61 Cardi nality Uma possível aplicação usando XML, como exemplo, é um serviço de busca de notícias. Se todas as notícias estivessem em formato XML e se tais documentos transportassem a informação e alguns metadados (contendo o assunto da notícia, data da publicação, fonte etc.): seria possível implementar uma aplicação para buscar, selecionar e exibir exclusivamente notícias de interesse exclusivo do internauta. Isso com base em uma lista de sites previamente definida, é claro. (As plataformas .NET e J2EE tem como meta produzir infra-estrutura para a implementação de aplicações desse tipo). Com o protocolo SOAP, é possível a uma aplicação chamar um método de um objeto remoto utilizando um documento XML enviado através de um dos protocolos de comunicação da Internet (HTTP, SMTP, FTP etc). Além disso, é importante destacar, que uma aplicação com a capacidade de criar e interpretar documentos SOAP tem a capacidade de chamar ou exportar métodos remotos, independente da plataforma de hardware, sistema operacional ou linguagem de programação utilizada. 62 HTTP SOAP document SOAP header Delivery Info SOAP body Payload Figura 5: Representação esquemática de uma mensagem SOAP. As mensagens SOAP são enviadas em um pacote HTTP a partir do comando POST e consiste simplesmente de um envelope (documento XML) e dois elementos fundamentais: um Header, elemento opcional, e um Body, onde são passadas as informações necessárias à chamada do método (seu nome e argumentos eventualmente necessários). No mundo orientado à Internet, a informação está distribuída em milhares de computadores por todo o mundo, que utilizam plataformas de hardware e software completamente diferentes. Uma parte substancial dessa informação está publicamente disponível. No entanto, praticamente toda essa informação aparece sob a forma de documentos HTML, linguagem ideal para formatar e exibir textos, mas insuficiente para a comunicação entre aplicações. A crescente demanda por soluções B2B e B2C assinala a exigência de aplicações que localizem informações na Web. Se estas informações estiverem disponíveis também sob a forma de serviços para outros computadores (e não apenas aos leitores) então um novo patamar de aplicações e soluções Internet estará disponível [GUTIERREZ, 2001]. Portanto tem-se, para as aplicações Internet, o problema de viabilizar a comunicação entre as aplicações, para solicitar serviços e trocar informações. As tecnologias mais importantes para essa finalidade são Distributed Component Object Model (DCOM), Common Object Request Broker Architecture 63 (CORBA) e Remote Method Invocation (RMI). [GUTIERREZ, 2001], destaca que o problema dessas tecnologias é que dependem fortemente da plataforma (é o caso de DCOM), da linguagem de programação (é o caso de RMI que depende da linguagem Java) ou de uma infra-estrutura complexa de software de suporte e da implementação de protocolos próprios para transporte (é o caso de CORBA). Considerando a densidade de plataformas computacionais e de linguagens de programação disponíveis atualmente, a concepção de uma aplicação deve levar em conta a possibilidade de utilização de componentes (ou objetos) concebidos nas diferentes linguagens e com a capacidade de executar em diferentes ambientes [SOUZA, 1999]. Visando a integração das aplicações atuais, as plataformas .NET e J2EE proporcionam a implementação de Web Services. Estes totalmente ligados a XML e SOAP. 4.3- Comparação entre a plataforma .NET e o J2EE Como plataformas de aplicativos concorrentes, a plataforma de desenvolvimento .NET da Microsoft e o Java 2 Enterprise Edition (J2EE) da Sun são muito similares nas metas e na arquitetura, mas completamente diferentes em suas implementações. Tanto a plataforma .NET, quanto a J2EE não tem domínio fácil, o que significa que os desenvolvedores de software terão que escolher entre as duas alternativas. A plataforma .NET e o J2EE foram criadas com objetivos similares: Melhorar a produtividade dos programadores oferecendo a eles componentes pré-existentes que eliminam a necessidade de escrever rotinas de baixo nível junto com um modelo de programação que facilita a reutilização de componentes de código criados por outros programadores. 64 Aumentar a confiabilidade eliminando ou reduzindo o uso de algumas das construções mais sujeitas a erros de linguagens de programação como C (como ponteiros para acesso direto à memória), e usando modelos de programação que forçam todos os pontos de interação entre componentes de código a serem claramente definidos, o que isola o impacto dos erros e facilita sua identificação. Melhorar a segurança através do controle do que os aplicativos podem e não podem fazer (como permissão para ler ou gravar em disco) e o uso de assinaturas digitais durante a execução para confirmar que o código foi criado por uma entidade confiável e que permanece inalterado. Simplificar a instalação e a implantação incorporando as descrições de componentes (incluindo informações sobre versão) no próprio código. Isso descarta a noção de obrigar os desenvolvedores a "registrar" seus códigos no momento da instalação (a principal causa da complexidade e da instabilidade das instalações) e possibilita a instalação automática do software aplicativo, sob demanda, com pouca ou nenhuma intervenção do usuário ou administrador. No caso da plataforma .NET, isso também permite que diferentes versões do mesmo componente coexistam em um sistema sem interferir um com o outro ou com outros aplicativos. Devido a essas metas análogas, as plataformas .NET e J2EE têm uma arquitetura também similar. Os recursos de arquitetura correspondentes incluem: Uma máquina virtual: projetada para inspencionar, carregar e executar programas em um ambiente restrito (sandbox) estritamente controlado. Colocando fortes limites sobre as ações que o código do programa pode e não 65 pode executar, esse ambiente restrito reduz as ameaças constituídas por programas maliciosos (como vírus) e pelas ações inadvertidas de programas confiáveis. Para permitir essa arquitetura de ambiente restrito, todos os programas são compilados a partir de seu código original para uma linguagem intermediária independente de processador (MSIL) ou bytecode Java. Esses módulos de código intermediário são, então, traduzidos para código nativo por um componente da máquina virtual denominado compilador JIT (Just-in-Time), direcionado a um tipo específico de CPU e sistema operacional. A máquina virtual também fornece aos programas serviços básicos como gerenciamento de memória. A máquina virtual do .NET é a CLR. O J2EE usa a Java Virtual Machine (JVM). Bibliotecas de classe: oferecem aos desenvolvedores de aplicativos funções pré-escritas, incluindo serviços de codificação (como manipulação de strings e processamento de transações); serviços de conexão de rede (tradução de protocolos); serviços de gerenciamento de sistema (permissões de segurança e pool de componentes); serviços de servidor (serviços de páginas web e conexão a email); e serviços para a conexão com fontes externas (sistemas de bancos de dados ou streams de dados). Linguagens de programação especialmente projetadas: baseadas em C/C++, incluem avanços como tipos de dados fortes e coleta de lixo, que aumentam a produtividade do programador e reduzem a probabilidade de bugs. Para escrever programas nessas linguagens (C# para .NET e Java para J2EE), é preciso que um compilador esteja disponível para traduzir o código fonte original para o código intermediário entendido pela máquina virtual. O CLR suporta C#, C++, Visual Basic, JScript, COBOL, Fortran, Haskell, Pascal, Eiffel e Pearl. Ambiente de desenvolvimento para páginas web dinâmicas rodando em um servidor web: o que permite aos desenvolvedores usarem a mesma 66 plataforma para criar aplicativos para desktop e para a Web. O .NET usa ASP.NET e o J2EE usa Java Server Pages (JSP). Como o .NET Framework e o J2EE oferecem arquiteturas e recursos muito similares, a decisão de adotar qualquer das plataformas (ou migrar de uma para a outra) exige que os gerentes considerem problemas que extrapolam o contexto técnico. As organizações devem considerar as três áreas principais a seguir: Maturidade versus tecnologias mais atuais. Embora os principais aplicativos baseados em J2EE estejam começando a aparecer, o núcleo da plataforma Java (a JVM e as bibliotecas de classe da "edição padrão") foi usado em tantos cenários reais que a maioria dos bugs realmente negativos foram descobertos e corrigidos e as principais brechas foram preenchidas, pela Sun ou por terceiros. Além disso, os desenvolvedores tiveram tempo suficiente para aprender sobre ela e contam com uma ampla base de ferramentas e aplicativos para suportá-la. Esses fatores podem levar a um processo de desenvolvimento mais suave e previsível. Ao mesmo tempo, por ser mais recente, o .NET tem aprimoramentos que faltam ao Java. Por exemplo, o ASP.NET permite aos desenvolvedores implementar Web Services com menos código do que os desenvolvedores em Java poderiam fazer usando a plataforma J2EE. Disponibilidade de desenvolvedores. Muitas organizações hoje contam com programadores em VB em seu pessoal. Mesmo que o VB.NET envolva algumas mudanças significativas, o retreinamento dos desenvolvedores em VB deve ser bem menos complexo e caro do que o treinamento total dos novos programadores em Java. Disponibilidade de conjuntos de ferramentas. Como parte de seus esforços gerais no .NET, a Microsoft também promoveu alterações significativas em sua linha de produtos Visual Studio. O VS tem tradicionalmente forte 67 aceitação entre a comunidade de desenvolvedores, e a Microsoft espera usar esses seguidores para tornar o .NET ainda mais atraente. A Sun não tem histórico de criação de ferramentas para desenvolvedores. A principal ferramenta para Java da Sun é o Forte for Java, e outras empresas lançam ferramentas adicionais, como Visual Age for Java, da IBM. Portabilidade e interoperabilidade. O Java recebeu boas notas por portabilidade entre plataformas, trazendo-lhe sucesso em ambientes de grande porte e múltiplos servidores (embora o código escrito em J2EE seja menos portável do que o código escrito apenas para a JVM). O código gerenciado do .NET, por outro lado, é portável apenas entre as várias plataformas Windows. Porém, o CLR do .NET oferece melhor interoperabilidade entre o código .NET e o código escrito para a plataforma Windows existente do que o Java pode oferecer quando roda em Windows. Além disso, o foco do .NET no Windows não é tão limitante quanto pode parecer. O Windows 2000 e seus sucessores irão suportar o .NET no servidor e no desktop, enquanto o Windows CE dará suporte ao .NET em uma variedade de dispositivos portáteis, como handhelds, telefones inteligentes e consoles de TV. 4.4- O .NET Framework em múltiplos Sistemas Operacionais Em uma tentativa de tornar o .NET Framework o padrão para o desenvolvimento de aplicativos, a Microsoft submeteu especificações da linguagem C# e da Common Language Infrastructure, a CLI, baseadas no .NET Framework, à European Computer Manufactures Association (ECMA), uma associação internacional de padronização. Em princípio, essas especificações poderiam permitir aos desenvolvedores escrever aplicativos na plataforma .NET que roda em qualquer sistema operacional e hardware. Uma análise mais 68 profunda das especificações, no entanto, revela problemas que irão limitar a maior parte do desenvolvimento em .NET ao Windows para o futuro previsível. Em dezembro de 2001, a ECMA aprovou o padrão ECMA-334 que especifica a forma e estabelece a interpretação de programas escritos na linguagem de programação C#. Especifica, entre outros: A sintaxe e as restrições da linguagem C# A semântica dos programas em C# As restrições e os limites impostos por uma implementação que atende aos requisitos da C#. Também em dezembro de 2001, a ECMA liberou o padrão ECMA-335, que define o CLI. O CLI é um ambiente de execução que permite que aplicativos escritos em uma linguagem de alto nível, como C#, sejam executados em diferentes sistemas operacionais e hardwares sem exigir que os desenvolvedores reescrevam o aplicativo visando as características específicas de cada ambiente. O CLI define: Um formato de arquivos para aplicativos Um conjunto de tipos de dados para uso nos aplicativos Um formato extensível para metadados de aplicativos Uma linguagem intermediária baseada em MSIL para código de aplicativos Uma biblioteca de classes básica como às classes básicas do .NET Framework. Em 2001, a ECMA, a Microsoft e a Corel anunciaram que iriam trabalhar juntas e usar esses padrões para criar uma implementação de C# e do 69 CLI para FreeBSD, e oferecer essa implementação sob licença do Shared Source Code (código fonte compartilhado) da Microsoft. A Ximian, um desenvolvedor de código aberto do ambiente GNOME para Linux, também anunciou que irá usar as mesmas especificações da ECMA para implementar o .NET Framework no Linux. As informações submetidas à ECMA para padronização incluem elementos que parecem mapear para partes do .NET Framework, incluindo o Common Type System (CTS), que define os tipos de dados comuns (como números inteiros e strings) para o CLI e um ambiente de execução virtual semelhante ao Common Language Runtime (CLR). Em princípio, os desenvolvedores podem criar aplicativos portáveis capazes de rodar em qualquer sistema operacional e hardware que tenha uma plataforma de desenvolvimento que atenda a ECMA. Por exemplo, um desenvolvedor pode criar um aplicativo na plataforma .NET que roda sem alterações no FreeBSD usando a implementação da CLI da Corel. Mas a portabilidade dos aplicativos será realmente determinada pela capacidade de perfeito mapeamento das bibliotecas de classe da ECMA através dos ambientes: se um programador escreve um programa em Windows usando o .NET Framework será que todas as funcionalidades expostas nas bibliotecas de classe da Microsoft estarão disponíveis na implementação FreeBSD da especificação da ECMA? A especificação da ECMA descreve um conjunto de bibliotecas de classe básicas, incluindo classes que mapeiam para as classes System, System.NET, System.Reflection (que permite aos programas obter a descrição ou os metadados do código gerenciado) e System.XML do .NET Framework. Porém, a especificação não parece ter nenhuma classe que mapeie para as bibliotecas de interface de usuário (UI) do Windows ou da Web; portanto a portabilidade pode ficar limitada a aplicativos de console não-gráficos ou a Web Services sem 70 interface do usuário. Da mesma forma, a especificação da ECMA não inclui nenhuma biblioteca análoga às bibliotecas de acesso a dados do ADO.NET; portanto, os aplicativos escritos com base nessa especificação também não teriam capacidade portável de trabalhar com bancos de dados. Finalmente, há a questão do licenciamento. A ECMA não considera direitos de propriedade intelectual, como patentes, pertencentes a uma empresa como a Microsoft, que propõe um padrão. Apenas exige que um proprietário dos direitos de propriedade intelectual ofereça alguma forma de licenciamento a qualquer entidade que deseje implementar um padrão ECMA. Assim, embora o padrão ECMA assegure que qualquer um que deseje implementar uma versão não-Windows do .NET não tenha sua licença negada sem motivos "razoáveis", os termos de licença podem ser tão caros que a distribuição ficará, na prática impedida. 71 5.0- CONSIDERAÇÕES FINAIS Hoje em dia a construção simples e rápida de sites de comércio eletrônico é a força propulsora para elevar a economia digital a novos patamares. Com a crescente capacidade de processamento e ampliação acelerada da largura de banda, essa elevação se torna perfeitamente possível. Nesse contexto, as tecnologias .NET e J2EE tem como objetivos dar suporte a novos cenários do Business to Business (B2B) e do Business to Consumer (B2C) que estão sendo exigidos das aplicações Internet. Os profissionais de TI encontram-se diante de um desafio: promover a interoperabilidade entre sistemas e entre sites de diferentes organizações. Para vencer esse desafio, a Microsoft está investindo alto na implementação de ferramentas com padrões abertos: XML e SOAP. [GUTIERREZ, 2001], explica que ao fornecer uma infra-estrutura completa para dar suporte a esses padrões e ao fornecer serviços implementados com base nesses padrões, a Microsoft está impulsionando a comunicação entre sites. A plataforma .NET é avaliada por [CHERRY, 2001] de acordo com os fatores: confiabilidade e segurança; custo de desenvolvimento e desempenho. A confiabilidade e a segurança são itens garantidos pelo CLR, que previne erros de código básicos (como estouros de buffer) e impõe restrições de segurança definidas pelo administrador. No entanto, um aplicativo é tão forte quanto seu elo mais fraco: um aplicativo .NET que contém código Windows não-gerenciado é tão confiável e seguro quanto esse código. Os sofisticados assistentes e editores gráficos do Visual Studio.NET ampliam a produtividade dos programadores. Ampliação esta que reduz o custo final. As bibliotecas de classe simplificam o treinamento de programadores, a criação e a manutenção de código. Organizações que investiram pesadamente 72 em Windows podem reutilizar esses códigos, o que lhes permite migrar gradualmente para a nova plataforma. Mas a plataforma .NET é suficientemente diferente da plataforma Windows atual para que as empresas precisem treinar desenvolvedores nas bibliotecas e linguagens de programação. Além disso, as empresas terão de revisar e rescrever o código fonte existente do Windows, para rodá-lo com pleno gerenciamento no CLR. Um dos pontos mais importantes em um sistema de computação é o desempenho. A plataforma .NET é comparável ou superior a plataforma J2EE da Sun [CHERRY, 2001]. Comparativos entre ASP.NET e ASP indicaram fortemente que o ASP.NET é superior ao ASP na plataforma Windows. Por outro lado, os custos de conversões entre códigos gerenciados e códigos não gerenciados, da tradução entre o código intermediário em código nativo tornam a plataforma .NET menos atraente para aplicativos que dependem do desempenho, como jogos e serviços de rede de baixo nível. A nova plataforma de desenvolvimento da Microsoft fará mais sentido para empresas que estão criando novos aplicativos Web baseados em Web Services e aplicativos que usam códigos Windows já existentes. Faz menos sentido para organizações que já estão usando produtos de outros fornecedores de software, principalmente aplicativos Windows para desktops e aplicativos empacotados para servidores (como os produtos da SAP na área de ERP), que precisam rodar em sistemas operacionais de mainframe e Unix. As organizações terão de enfrentar uma espera considerável por uma versão .NET desses aplicativos [CHERRY, 2001]. Finalmente, o modelo .NET é aplicável a todos os integrantes da cadeia de produção, independente do tamanho e pode se tornar também uma fonte de bons negócios. 73 6.0- TRABALHOS FUTUROS Já existem muitos Web Services implementados na Web. Como exemplos, tem-se: Um serviço de tradução do site de busca Google: o cliente envia uma frase e recebe como resposta a tradução para a língua escolhida. A Adobe: que está criando serviços para usar Web Services como uma ferramenta para geração de PDFs pela rede. O site Google disponibiliza também uma API que permite o acesso a diversos métodos de busca por meio de chamadas usando-se o protocolo SOAP, isso torna possível que uma funcionalidade de busca por páginas sobre um assunto seja embutida dentro de uma aplicação desktop ou Web. E uma pesquisa realizada em junho de 2002 pelo IDC identificou demanda para o mercado de Web Services de US$ 1,6 bilhão, em 2004, e para 2007 de US$ 34 bilhões. Com isso, este trabalho pode ser estendido, para cobrir os tópicos: Pesquisar o projeto e a implementação de sistemas distribuídos com foco em Web Services. Esta pesquisa inclui mapear as principais ferramentas para a construção de Web Services, além de mostrar o histórico das aplicações Web até os Web Services. Realizar uma comparação entre as plataformas .NET e J2EE: principais ambientes para a implementação de Web Services. Projetar um sistema integrado para uma cadeia de produção específica. Afinal os Web Services foram especialmente projetados 74 para facilitar a integração entre sistemas de diferentes empresas, via Internet, através de padrões abertos como XML e SOAP. 75 7.0- BIBLIOGRAFIA CHERRY, Michael e Greg Demichillie A Plataforma de Desenvolvimento .NET: Uma visão independente da tecnologia e da estratégia Microsoft, 2001 www.DirectionsOnMicrosoft.com DEITEL, H. M. C++ Como Programar Porto Alegre Editora Bookman, 2001 DREWANZ, Marcello VS .NET: Um Novo Começo! DotNet Magazine Fevereiro 2002 – www.dotnetmagazine.com.br PAULA FILHO, Wilson de Pádua Paula. Engenharia de Software. Fundamentos, Métodos e Padrões; Rio de Janeiro - LTC Editora, 2001 GATES, Bill Riscos e Oportunidades das tecnologias .NET às empresas – 2001 Disponível em www.microsoft.com/brasil/net GUTIERREZ, Marco Antônio Estratégia .NET Rio de Janeiro Editora Axcel Books, 2001 LOWY, Juval Defina um Novo Rumo com a plataforma .NET DotNet Magazine Fevereiro 2002 – www.dotnetmagazine.com.br O’KELLY, Peter Conheça a Estratégia .NET DotNet Magazine Fevereiro 2002 – www.dotnetmagazine.com.br PRESSMAN, ROGER S. Software Engineering: a practitioner's approach Editora Mc Graw Hill, 1992 SOUZA, Anamélia Contente e Vitório Breno Mazzola Implementando Aplicações Distribuídas Utilizando CORBA: Um Estudo de Caso Voltado à Área de Banco de Dados InfoComp, Novembro de 1999 – www.comp.ufla.br/~infocomp TANEMBAU, Andrew S. Structured Computer Organization Editora Prentice Hall, 1995 VASCONCELOS, Luiz Fernando Apostila de Engenharia de Software: UFPE, 1999 76 IEEE Software: Engineering Internet Software - March/April 2002 DotNet Magazine – Fevereiro 2002 – www.dotnetmagazine.com.br Developers’ Magazine – Setembro de 2002 – www.developers.com.br [COREL] www.corel.com [DEVELOPNET] www.developnet.co.uk [DEVX] www.devx.com/dotnet [ECMA] www.ecma.org [FREEBSD] www.freebsd.org [GOMONO] www.gomono.com [GOTDOTNET] www.gotdotnet.com [MSDN] www.msdn.microsoft.com/net [ORACLE] www.oracle.com [SDMAGAZINE] www.sdmagazine.com/articles/2001 [SDMAGAZINE] www.sdmagazine.com/articles/2002 [TIMASTER] www.timaster.com.br [XIMIAN] www.ximian.org [XML] www.xml.org 77 ANEXOS 78 A plataforma de desenvolvimento .NET Web Server application Windows desktop application WinForms (Windows UI) ASP.NET Web Cervicai s XML Web UI VB.NET C++ C# Networking ADO.NET (data access) Jscript .NET Base classes VS.NET Common Language Runtime (CLR) A plataforma .NET é um conjunto de componentes de software para a criação tanto de aplicativos para servidores Web como aplicativos Windows para desktop. Os aplicativos criados com a .NET rodam sob o controle da CLR (Common Language Runtime), rotinas que carregam aplicativos e garantem que eles podem ser executados sem erros, verifica as permissões de segurança apropriadas, executa os aplicativos e faz a limpeza depois que eles terminam. Um conjunto de bibliotecas de classe fornece rotinas que permitem aos aplicativos ler e escrever dados no formato XML, comunicar-se via Internet, acessar banco de dados e muito mais. Todas as bibliotecas de classe baseiam-se em uma biblioteca básica que fornece funções de gerenciamento dos tipos de dados usados com maior freqüência, como strings e números, e funções de baixo nível, como acesso a arquivos. Os aplicativos executados sob servidores web normalmente baseiam-se em ASP.NET, uma biblioteca presente no servidor para processar pedidos da web. O 79 ASP.NET, por sua vez, baseia-se em uma biblioteca de Web Services para enviar e receber mensagens SOAP e em uma biblioteca de interface com o usuário (IU) web (às vezes denominada Web Forms) para receber comandos de usuário via navegadores e gerar dinamicamente páginas web em resposta a eles. Os aplicativos Windows para desktops podem apresentar uma interface de usuário gráfica através da biblioteca WinForms, também conhecida com Windows Forms. Finalmente, o Visual Studio.NET oferece um ambiente de desenvolvimento integrado (IDE, Integrated Development Environment) para a criação de aplicativos na plataforma .NET. Os programadores desenvolvem seus programas em uma ou mais linguagens de programação .NET, como Visual Basic .NET, Visual C++, Visual C# ou JScript.NET, todas da própria Microsoft. Existem diversas outras linguagens de programação .NET criadas por outras organizações. 80 Executando código gerenciado Assembly Versioning Policy 1 Class Loader 2 Verifer 3 MSIL to Native Compilers Garbage Collection Managed Native Code Security System 81 Os componentes da Common Language Runtime (CLR) carregam e executam aplicativos. 1- O Class Loader (carregador de classes) carrega o assembly do aplicativo na memória. O assembly consiste no código MSIL (Microsoft Intermediate Language) e metadados que descrevem os componentes de software no assembly do aplicativo e dos outros componentes que este requer. Usando os metadados do assembly do aplicativo, o Class Loader tenta, então, carregar os assemblies que suportam os componentes que o aplicativo requer. Por exemplo, ele poderia carregar um assembly contendo os controles da interface gráfica de usuários (GUI) exigidos por um aplicativo para desktop. O Class Loader usa o Versioning Policy (definição sobre o controle de versões, especificado pelo desenvolvedor do aplicativo ou pelo administrador do sistema) para determinar que versões dos assemblies de suporte devem ser carregados. Por exemplo, um Versioning Policy pode ditar que apenas versões específicas dos componentes da GUI devem ser usadas, mesmo que haja versões mais recentes disponíveis. Isso elimina o problema da versão dos componentes que era tão comum nos aplicativos Windows do passado. 2- Uma vez carregados os assemblies do aplicativo e de suporte, o Verifier (verificador) examina seu conteúdo para assegurar que é “type-safe” e para determinar as permissões de segurança apropriadas para o aplicativo. Este é o primeiro passo no processo de reforço da segurança. 3- Os compiladores nativos convertem o MSIL em código nativo gerenciado, que é código específico para o processador que sabe como interagir com serviços fornecidos pelo CLR, como coleta de lixo (que libera a memória que não está mais sendo usada pelo aplicativo) ou o sistema de segurança do CLR (que impõe as permissões de segurança do aplicativo). 82 Misturando código gerenciado e não-gerenciado Managed Code Calling COM Code CLR data COM data Managed Code Component COM Component RCW CLR data exception COM data and return codes COM Code Calling Managed Code CLR data Managed Code Component COM data COM Component RCW CLR data exception COM data and return codes Os recursos de interoperabilidade do Common Language Runtime (CLR) permite aos desenvolvedores misturar código gerenciado e código não-gerenciado existente em componentes COM, assim como código em bibliotecas de vinculação dinâmica (DLLs, Dynamic Link Libraries) de Win32. Quando um componente de código gerenciado chama um código em um componente COM (quando superior), o CLR gera um runtime callabe wrapper (RCW, ou código executável responsável pela interface entre componentes). Esse RCW age como um procurador, ou intermediário, para o componente COM não-gerenciado. O RCW manipula toda a interação entre o componente gerenciado e o componente COM, incluindo (mas não se limitando a) os seguintes: Traduzir e mover dados entre os ambientes CLR e COM Liberar a memória e outros recursos do componente COM “wrapped”, isto é, com código executável responsável pela interface entre os componentes COM, quando o componente de código gerenciado é liberado pelo processo de coleta de lixo do CLR Traduzir os códigos de erro retornados pelo COM em erros do CLR 83 Quando um componente COM chama um componente .NET escrito em código gerenciado (quadro inferior), o CLR novamente gera um COM callable wrapper (CCW, código executável responsável pela interface entre os componentes COM). Similar ao RCW, o CCW atua como procurador ou intermediário entre o código COM nãogerenciado. O CCW também implementa o conjunto de funções padrão exigido dos componentes COM para que o componente de código gerenciado pareça ser um componente COM normal. O CCW manipula toda a interação entre o objeto COM não-gerenciado e o componente .NET gerenciado, incluindo (mas não se limitando) os seguintes: Mover e traduzir dados entre os ambientes Liberar o componente de código gerenciado para eventual coleta de lixo pelo CLR quando o componente COM é liberado Traduzir erros do CLR em erros do COM. 84 Desenvolvendo código gerenciado Application Source Code Class Libraries Compilers VB.NET C# C++ Metadata ... MSIL Assembly Generation Tools Assembly Desenvolvedores criam um assembly de código gerenciado combinando seus programas fonte de aplicativos com o código das bibliotecas de classe da plataforma .NET. As bibliotecas de classes podem incluir uma combinação de bibliotecas fornecidas com a plataforma .NET, além de bibliotecas fornecidas por outros fornecedores. Os compiladores .NET então traduzem esse código fonte para MSIL (Microsoft Intermediate Language). Além do MSIL, os compiladores .NET produzem metadados, que descrevem os componentes que compõem o código. Esses metadados são usados pelo CLR (Common Language Runtime) para implementar a segurança e garantir que o CLR receba a versão correta dos componentes de que necessita. 85 Regras práticas para a seleção de uma linguagem .NET Diversas questões precisam ser respondidas antes de selecionar uma linguagem de programação para um determinado projeto: 1. 2. 3. 4. Quais os conhecimentos da equipe de programadores atual e com que facilidade se pode contratar novos programadores? Os componentes estão sendo desenvolvidos para um único aplicativo para usuário final ou são componentes fundamentais que serão reutilizados por outros programadores em diversas situações? O aplicativo exige um novo código totalmente reescrito do zero ou é possível apenas modificar e adaptar o código existente? O uso de linguagens é ferramentas de terceiros (não-Microsoft) é aceitável? 86