.NET Framework - Easy .net magazine 3

Este artigo serve para compreender o funcionamento básico do .NET Framework, bem como dará uma visão clara das motivações que levaram a sua criação.

O desenvolvimento de aplicações utilizando o .NET Framework serve como um modelo de programação eficaz e um conjunto de APIs poderoso. O processo de construção do sistema ganha uma agilidade enorme, fazendo com que as preocupações do desenvolvedor se limitem a criação das funcionalidades do programa. Dessa forma, este artigo serve para conhecer todas as partes que integram a plataforma .NET, o que é essencial para qualquer desenvolvedor.

O .NET Framework oferece soluções para construção e execução de aplicações desktop (Windows Forms, Windows Presentation Foundation), orientadas a dados (ADO.NET, ADO.NET Entity Framework, ADO.NET Data Services, LINQ), web (ASP.NET, WCF), para dispositivos móveis (.NET CF), dispositivos embarcados (.NET MF), autenticação (WCS), workflows (WF), dentre outras. Cada uma dessas tecnologias é útil em determinados cenários, como veremos neste artigo.

O antigo modelo de desenvolvimento utilizado em aplicações Windows impunha diversas dificuldades para a construção de sistemas. Para alcançar a interoperabilidade entre aplicações distribuídas, e escritas em diferentes linguagens, eram necessárias uma série de manipulações e conversões de tipos. Além disso, os desenvolvedores eram obrigados a trabalhar com construções de linguagem pouco produtivas e propensas a erros. O surgimento do .NET Framework representou uma mudança de paradigmas, abstraindo dos desenvolvedores muitas das tarefas tediosas impostas por outras plataformas.

Foi com o Windows que a utilização de interfaces gráficas se tornou mais comum e inicialmente sua programação era feita em C. Em seguida aparece o Visual Basic, dando início às ferramentas de desenvolvimento gráficas. Surge o conceito de instalação, onde várias informações de configuração de um programa eram gravadas, além de partes do mesmo, através de arquivos no formato DLL (Dynamic Link Library). Esse modelo de programação apresentou situações inconvenientes, pois se alguma configuração do programa fosse alterada, ele parava de funcionar. Além disso, as DLLs poderiam ser utilizadas por outras aplicações, surgindo incompatibilidades entre versões. Outra situação crítica era a de um programa erroneamente atualizar a DLL de outro (por causa dessas dificuldades, popularizou-se a expressão “DLL Hell”), às vezes até mesmo do próprio Windows, exigindo em muitos casos a reinstalação de todo o sistema.

Com o surgimento da internet, migrou-se para um modelo chamado Cliente/Servidor, também conhecido como Modelo de Duas Camadas (apresentação e lógica). A proposta desse modelo era a descentralização de estruturas, onde os programas eram instalados nos clientes (estações de trabalho dos usuários), e acessavam recursos residentes em servidores (equipamentos com maior capacidade de processamento). Apesar de ser uma evolução benéfica, esse modelo apresentou dificuldades para manutenção e gerenciamento, pois nele a aplicação cliente ficava responsável pela apresentação (formulários, menus e demais elementos visuais) e pela lógica de negócio (maneira como os dados são acessados e processados).

Com a constante busca por soluções, surgiu a proposta do Modelo de Três Camadas (apresentação, lógica e dados), e com ele, a retirada das regras de negócio da aplicação cliente, centralizando-as em um servidor de aplicações para facilitar sua manutenção. Nesse modelo não era mais necessária a atualização da aplicação no cliente a cada mudança nas regras de negócio, porém modificações na camada de apresentação ainda eram um problema, surgiu aí o Modelo de N-Camadas.

A partir do Modelo de N-Camadas (as principais são cliente, apresentação, lógica e dados), retira-se a apresentação do cliente, que é centralizada em um Servidor Web. Com isso a aplicação cliente não possui mais a necessidade de ser instalada em cada computador da rede e sua atualização se torna uma tarefa muito mais gerenciável. O acesso à aplicação cliente é feito mediante seu endereço, utilizando um navegador como o Internet Explorer.

Antigamente o modelo utilizado no desenvolvimento de aplicações distribuídas no Windows era o COM (Component Object Model), porém este apresentava várias limitações e dificuldades. Ao propor uma nova revolução nos métodos e práticas de desenvolvimento, a Microsoft apresentou o .NET Framework, que foi criado no intuito de acompanhar toda essa evolução tecnológica e de paradigmas, suportando todos os cenários apresentados anteriormente, e facilitando muito a vida dos desenvolvedores.

.NET Framework

O .NET Framework é uma plataforma criada pela Microsoft, que dá sustentação ao desenvolvimento de inúmeros tipos de aplicativos e suporte a uma grande variedade de dispositivos. Dentre suas competências, disponibiliza meios para a criação de design visual rico, comunicação direta e segura, além de inúmeras tarefas de programação para a modelagem de todo tipo de processos.

Segundo a Microsoft, o .NET Framework foi projetado para fornecer um ambiente de programação consistente e orientado a objetos, onde seja possível minimizar a implantação e os conflitos de versionamento, bem como eliminar os problemas de desempenho encontrados em ambientes interpretados ou com scripts.

Através da integração com outras ferramentas e tecnologias, a plataforma .NET provê recursos para maximizar a produtividade do desenvolvimento de aplicações, permitindo a construção de soluções baseadas no Windows ou na Web.

Uma arquitetura simplificada do .NET Framework pode ser observada na Figura 1, e consiste basicamente de cinco partes:

Figura 1. Arquitetura simplificada do .NET Framework

Antes de examinar as especificidades da Plataforma .NET, é útil considerar algumas das questões que motivaram a sua criação.

Motivações para o surgimento do .NET Framework

O desenvolvimento de software para a família de sistemas operacionais Windows envolvia a complexa tarefa de utilização da linguagem de programação C, em conjunto com várias APIs (Application Programming Interfaces) Windows. Nesse modelo, o desenvolvedor era forçado a lidar com gerenciamento manual de memória, aritmética de ponteiros e construções sintáticas indesejáveis. Além disso, por ser uma linguagem estruturada, C não possuía os benefícios previstos pela abordagem orientada a objetos.

A linguagem C++ pode ser vista como uma linguagem orientada a objetos acima de C, e sua utilização representou um grande avanço na maneira de construir aplicações. Embora tenha apresentado benefícios como encapsulamento, herança e polimorfismo, C++ ainda impunha alguns dos dolorosos aspectos da linguagem C, continuando a ser uma experiência difícil e propensa a erros.

Outra linguagem que se tornou popular foi o Visual Basic (VB), principalmente devido a sua capacidade de construir interfaces complexas, bibliotecas de código, e lógica de acesso a bancos de dados com muito menos esforço do que suas antecessoras. O VB escondeu muitas das complexidades existentes em APIs Windows, utilizando-se de assistentes de código, tipos de dados, classes e funções específicas.

Em um ambiente internet, deve existir uma maneira padronizada para que diversos componentes de software sejam capazes de comunicar-se. A Microsoft teve iniciativas como o framework de desenvolvimento COM (Component Object Model), que possuía uma arquitetura para permitir a reutilização de código binário. Através de sua utilização para a construção de aplicações distribuídas, os programadores podiam evitar a necessidade de trabalhar com vários detalhes de baixo nível, fazendo com que componentes implementados em diferentes linguagens fossem capazes de trabalhar em conjunto, trocando mensagens entre si. Apesar do Visual Basic ter facilitado sua utilização, esse modelo era demasiadamente complexo, obrigando o programador a lidar com uma série de questões necessárias para o seu funcionamento, além ainda de VB não ser uma linguagem totalmente orientada a objetos.

Com o surgimento do .NET Framework, essas preocupações foram abstraídas do desenvolvedor, que agora se concentra somente nas funcionalidades do serviço que está codificando, deixando o resto a cargo da CLR (apresentada mais à frente), aumentando a sua produtividade e evitando erros mais graves.

Nota: As aplicações .NET são multiplataforma, bastando para isso que o .NET Framework esteja instalado e seja suportado pela arquitetura alvo.

Entendendo o funcionamento do .NET Framework

O .NET Framework suporta múltiplas linguagens de programação, como por exemplo o C# e o VB.NET, possibilitando que o desenvolvedor opte pela que achar mais interessante, tendo em vista que cada uma possui vantagens e desvantagens. O suporte a várias linguagens é possível através da CRL (Common Language Runtime), que é o ambiente de execução onde as aplicações são controladas.

Para que uma aplicação .NET esteja pronta para ser executada, seu código fonte necessita estar compilado em código nativo. Primeiramente é feita a compilação para código MSIL (Microsoft Intermediate Language), que é um conjunto de instruções independentes de CPU (Central Processing Unit), onde são acrescentados todos os metadados necessários para sua execução. O .NET disponibiliza compiladores JIT (Just In Time) para cada arquitetura suportada pelo CLR, e é através deles que o código MSIL é transformado em código nativo.

O compilador JIT detecta se algum método ou propriedade não será utilizado durante a execução do programa e converte apenas o que for necessário, fazendo com que a compilação seja mais rápida, além do código resultante poupar recursos e ser otimizado tanto em tamanho como velocidade de execução.

Common Type System

Anteriormente ao .NET, fazer com que componentes COM criados em diferentes linguagens pudessem se comunicar era um procedimento muito trabalhoso, pois existia a necessidade de mapear manualmente os tipos de uma linguagem para outra.

Com o .NET essa necessidade não existe mais, pois todas as linguagens habilitadas seguem certos padrões de desenvolvimento, que estão definidos na especificação CLS (Common Language Specification), e têm acesso a um conjunto de tipos comum, conhecido como CTS (Common Type System), os quais fornecem a estrutura que possibilita a integração entre linguagens.

Metadados

Metadados são conjuntos de instruções geradas no processo de compilação de um programa .NET e que contêm informações específicas da aplicação. O próprio componente possui todas as informações necessárias ao seu funcionamento, não sendo necessária a utilização do Registro do Windows (embora este ainda seja possível utilizá-lo).

As informações de metadados facilitam a interoperabilidade entre diferentes componentes, bastando muitas vezes a utilização de um único arquivo (.DLL ou .EXE), o qual contém a sua definição (metadados) e a sua implementação (código).

Quando o componente é acessado, a CLR carrega seus metadados na memória e faz referência a eles para obter informações sobre o componente. Isto também permite que componentes homônimos, mas com versões diferentes, executem no mesmo computador sem conflitos.

Assemblies

Assembly é uma unidade de códigos compilada, com funcionalidade e escopos bem definidos, que é armazenada fisicamente em formato .DLL ou .EXE. Foram criados para simplificar a distribuição de aplicações, organizar todos os elementos e informações necessárias para o seu funcionamento, resolvendo inclusive os problemas de versionamento.

Confira também

Nota: Os códigos gerenciados pelo .NET Framework, como o MSIL, são conhecidos como Managed Code. Já códigos não habilitados para rodar na CLR, como COM, são chamados de Unmanaged Code.

Principais tecnologias e frameworks de desenvolvimento

A Microsoft iniciou o desenvolvimento do .NET Framework no final dos anos noventa, e vem evoluindo constantemente (Figura 2), sendo atualmente uma plataforma extremamente difundida e robusta. Algumas de suas principais tecnologias e frameworks de desenvolvimento são:

Nota: Microsoft Silverlight é um subsistema WPF baseado na web, que permite aplicações no estilo Flash e aplicações móveis com o mesmo modelo de programação .NET.

Figura 2. Evolução da plataforma .NET

Nota: A plataforma .NET disponibiliza a todas as linguagens de programação .NET, através da BCL (Base Class Library), uma biblioteca de classes capaz de encapsular várias funcionalidades de baixo nível, como manipulação de arquivos, renderização gráfica e interação com dispositivos externos de hardware, além de suportar inúmeras exigências de aplicações do mundo real.

Conclusão

No desenvolvimento de aplicações para o MS-DOS, um programa era composto por um arquivo executável (.exe), e os demais arquivos necessários para o seu funcionamento eram salvos no mesmo diretório desse artefato. Sua distribuição se fazia mediante a cópia dos arquivos em seu diretório para outro computador, sendo esse um modelo satisfatório para as necessidades da época. Quando as redes de computadores começaram a surgir, a complexidade das aplicações acompanhou esse crescimento, fazendo com que os programas escritos para o MS-DOS não atendessem mais as necessidades, surgindo então o Windows.

O Windows representou um grande avanço tecnológico, mas com ele, novas demandas surgiram, e com isso várias dificuldades foram impostas. Com a criação do .NET Framework, a Microsoft disponibilizou um novo paradigma para a construção de aplicações, liberando o desenvolvedor de muitas tarefas tediosas, que antes eram codificadas manualmente, e agora são gerenciadas pela plataforma automaticamente e de maneira transparente.

Confira também

Artigos relacionados