Desenvolvimento - C#

C#: A nova linguagem da arquitetura .NET

A linguagem C# foi criada pela Microsoft em conjunto com a arquitetura .NET. Embora todas as quatro linguagens suportadas diretamente pela Microsoft (C#, VB.NET, C++, JScript) sejam bastante capazes, é justo dizer que o C# é a “linguagem de referência” do .NET pelas seguintes razões...

por Mauro Sant'Anna



Em julho de 2000 fui ao PDC - Professional Developers Conference, o principal evento da Microsoft voltado a desenvolvedores de software. Este PDC teve uma característica inusitada: a agenda definitiva foi divulgada apenas no dia de abertura. Isto é estranho, pois a divulgação antecipada dos conteúdos das palestras é um importante fator para atrair interessados. Mesmo assim, milhares de pessoas foram a este evento “secreto”.

Durante o congresso foram apresentados os detalhes de uma nova plataforma chamada “Microsoft.NET” sobre a qual seriam desenvolvidos novos programas capazes de aproveitar todo o potencial da Internet. Além disso, saímos de lá com um jogo de CDs contendo uma versão “alfa” tanto da plataforma como do Visual Studio.NET, a principal ferramenta de desenvolvimento. Apesar da recepção meio morna por parte da imprensa especializada americana, eu gostei muito do que ouvi. Posso afirmar que dentre a mais de uma dúzia de eventos semelhantes aos quais participei, tanto da Microsoft como de outras empresas, este foi o que mais me impressionou pelo conteúdo técnico e quantidade de novidades. Chegando no Brasil, não só passei a estudar a nova arquitetura como bradei aos quatro ventos como eram boas as novas. Continuo a fazer ambos até hoje.

Talvez até por ser um “crente de primeiro dia”, a Microsoft me agraciou com o título de “MSDN Regional Director” ou “RD”. Um RD é um profissional de fora da Microsoft que funciona como ligação entre a empresa e a comunidade de desenvolvedores. Uma das responsabilidades dos RDs é escrever regularmente uma coluna sobre a nova plataforma, o que me fez escrever este artigo.

Esta é a primeira de uma série de colunas que escreverei neste espaço, sempre centradas na linguagem C# (lê-se “ce sharp”), uma nova linguagem de programação especialmente criada para a plataforma .NET.

Microsoft .NET

Será que realmente precisamos de uma nova linguagem? A resposta é sim, se quisermos aproveitar as novas oportunidades surgidas com a Internet.

Por um lado, a plataforma .NET permite o desenvolvimento de aplicativos muito semelhantes aos que desenvolvemos hoje. No caso aplicativos para rodar em servidores Web, criando páginas HTML, o ASP.NET traz grandes ganhos de produtividade, que por si só justificam a adoção da nova plataforma.

Por outro lado, o .NET foi bolado para você desenvolver uma nova geração de software, algo que está apenas surgindo agora. Esta nova geração de software traz as seguintes características principais:

  • Simplifica o uso da informática, principalmente para a população em geral que não vive de informática e sim em outras atividades;
  • Visa permitir o acesso a dados e aplicativos em qualquer lugar, qualquer hora e qualquer tipo de dispositivo;
  • Usa a Internet como plataforma e não apenas algo na periferia do software;
  • O software passa a ter um grande componente de “serviço”.

Bem, vamos ao que interessa: a linguagem C#.

C#

A linguagem C# foi criada pela Microsoft em conjunto com a arquitetura .NET. Embora todas as quatro linguagens suportadas diretamente pela Microsoft (C#, VB.NET, C++, JScript) sejam bastante capazes, é justo dizer que o C# é a “linguagem de referência” do .NET pelas seguintes razões:

  • Foi feita a partir do zero para funcionar na nova plataforma, sem preocupações de compatibilidade com código já existente;
  • O compilador C# foi o primeiro a ser desenvolvido;
  • A maior parte das classes do .NET Framework e até mesmo o compilador JScript foram desenvolvidos em C#.

Embora muitas pessoas tenham participado de seu desenvolvimento, é justo dizer que o C# é obra de uma pessoa, o Anders Hejlsberg, hoje um “Distinguished Engineer” na Microsoft. Anders Hejlsberg também é conhecido como o criador do Turbo Pascal e do Delphi, ambos da Borland. Ele e sua equipe foram contratados em 1997 pela Microsoft para trabalhar no time de ferramentas de desenvolvimento. O principal produto deste esforço foi o Microsoft J++, do qual Anders foi arquiteto-chefe.

O C# inclui idéias de várias linguagens de programação, mas é patente a influência das duas outras principais linguagens com as quais Anders trabalhou anteriormente: o Pascal do Delphi e o Java. Existem também claras influências do C++ e Smalltalk.

Assim como o Java, o C# usa como base a sintaxe do C++. Isto significa que elementos como declaração de variáveis, métodos e estruturas de controle (if, loops) são muito semelhantes ao C++. Além da origem no C++, o C# tem várias características em comum com o Java:

  • Modelo de orientação a objetos baseado em herança simples de classes com um ancestral comum;
  • Herança múltipla de “interfaces”;
  • Gerenciamento de memória automático com “coletor de lixo”;
  • Tipagem forte;
  • Rodam em um “ambiente gerenciado”, no qual a segurança e integridade das operações efetuadas pelos programas podem ser garantidas;
  • Amplo suporte a “reflections”, um recurso também conhecido como “informação de tipos em tempo de execução”;

Estas semelhanças levaram algumas pessoas a comentar que o C# era um “clone de Java”, desenvolvido pela Microsoft em razão dos problemas legais - já resolvidos - ocorridos com a Sun em relação ao licenciamento da linguagem Java. Mesmo existindo alguma base nestas afirmações, é extremamente injusto com o C# chamá-lo de clone de Java. O C# não só resolve vários notórios problemas do Java como também traz muitas novidades. A Microsoft bem que tentou melhorar o Java, mas a Sun não deixou...

Veja alguns problemas do Java corrigidos pelo C#:

  • Os programas na arquitetura .NET são sempre compilados, ao passo que em Java eles são normalmente interpretados.
  • O C# tem “structs”, um tipo “barato” para ser usado em situações onde o custo de uma classe como alocação de memória e coleta de lixo não seriam justificados. Um exemplo clássico é a representação de uma coordenada no plano (dois inteiros: X, Y).
  • O C# tem enumerações, mais ou menos como versões mais recentes do C++ ou o próprio Pascal. A enumeração é ótima para representar uma lista de possibilidades. Linguagens como C ou Basic costumam usar inteiros nestas situações. O problema com os inteiros é que você pode associar uma constante relativa a um contexto em outro, sem fazer sentido. No C# as enumerações são fortemente tipadas e incompatíveis com outras enumerações. O Java costuma usar “strings” nestas situações. As strings além de não serem tipadas (você pode atribuir qualquer seqüência de caracteres à uma string) têm um custo em termos de performance bastante alto.
  • Existe passagem de parâmetros por referência, na verdade de duas formas: “ref” significa a passagem por referência tradicional; “out” significa uma referência apenas “de saída”.

Todos os recursos acima trazem como principal benefício um grande ganho de performance em relação ao Java, a sua mais notória deficiência.

O C# traz alguns recursos do C++ que foram omitidos do Java:

  • Sobrecarga de operadores, algo muito útil nos “cálculos científicos”, por permitir tratar números complexos, vetores e matrizes com a notação dos operadores aritméticos tradicionais como “+” e “*”.
  • Operadores de conversão, para converter valores de um tipo para outro. No C# existem tanto operadores de conversão implícitos, mais ou menos como no C++, como explícitos, que exigem o operador de “cast”.
  • Ao contrário do C++, o construtor que aceita um único argumento não é usado automaticamente como função de conversão.
  • O C# traz diversas novidades que não existem nem no C++ nem no Java. As principais são:
  • Unificação do sistema de tipos. Todos os valores podem ser atribuídos a uma variável do tipoobject em um processo chamado “boxing”. Na minha opinião, esta é a invenção mais genial do C# e a discutirei detalhadamente em uma próxima coluna.
  • Suporte a “propriedades” diretamente na linguagem. Uma property funciona sintaticamente como um campo, mas na verdade chama um par de métodos para atribuir ou receber um valor. As propriedades podem ser também “indexadas” com um inteiro, quando funcionam como se fossem “arrays” ou indexadas com uma “string”, quando passam a funcionar como um dicionário. O ambiente de desenvolvimento sabe criar “editores de propriedades” para alterar seus valores em tempo de desenvolvimento.
  • Podemos declarar um tipo “ponteiro para método”, chamado delegate. Um “delegate” contém, a princípio, o endereço da função e também do método que a implementa. Todos os eventos, tão importantes para o funcionamento de um ambiente de desenvolvimento “RAD”, são “delegates”. Os delegates permitem que uma classe chame métodos em outras sem exigir que esta outra classe seja derivada de um ancestral conhecido. Na seção de links desse artigo tem uma explicação bastante interessante a esse respeito.
  • Tipo “decimal” para representar valores monetários, pouco sujeitos a erros de arredondamento e representação.
  • Os métodos não são obrigatoriamente virtuais como no Java e devem ser explicitamente declarados como tais com a palavra reservada “virtual”. Existe um protocolo específico para indicar se um método de classe derivada reimplementa um método virtual (override) ou o torna não-virtual (new).
  • Especificador de acesso “internal”, que elimina a necessidade de classes e elementos “friend” do C++.

Vantagens

Os recursos acima fazem do C# uma linguagem fácil de aprender e de usar, robusta e com boa performance. Em conjunto com os demais recursos da arquitetura .NET, o C# é a linguagem ideal para a criação de uma nova categoria de programas que aproveitam as oportunidades trazidas pela Internet.

Mauro Sant'Anna

Mauro Sant'Anna - Mauro tem mais de 20 anos de experiência no desenvolvimento de software, com produtos publicados no Brasil, Portugal e Estados Unidos, além de extensa experiência em treinamento e consultoria no desenvolvimento de software, tanto criando material como ministrando cursos.
Mauro é um "Microsoft Most Valuable Professional" (MVP - www.microsoft.com/mvp), “Microsoft Regional Director” (RD - www.microsoft.com/rd), membro do INETA Speaker’s Bureau (www.ineta.org) e possui as certificações MCP, MCSA (Windows 2000/2003), MCAD (C# e VB), MCDBA, MCSE (Windows 2000/2003).
Sua empresa, a M. A. S Informática (www.mas.com.br), treinou centenas de turmas em desenvolvimento de software nos últimos anos.