Você sabe o que C#?

A evolução da linguagem de programação C#
Veja nesse artigo a história de como surgiu a linguagem de programação
C# e quais as padronizações na qual foi submetida. Serão abordadas
características específicas da linguagem, bem como um comparativo com
outras linguagens, como C, C++ e Java
O desenvolvimento do C#
(pronuncia-se: C Sharp), de acordo com o website Wikipédia (2013), teve
início no final do século XX (1999). A convite da Microsoft, Anders
Hejlsberg formou uma equipe de programadores para desenvolver uma nova
linguagem de programação. A primeira linguagem criada pela equipe de
Hejlsberg recebe o nome de Cool. Mais tarde, na virada de século, a
linguagem Cool foi rebatizada para C#.
Após o renome da
linguagem, a Microsoft submeteu-a à ECMA (European Computer
Manufacturers Association), associação cujo objetivo é a padronização de
sistemas de informação. Em 2001, a ECMA aprovou o C# e a linguagem
recebeu a especificação ECMA-334. Mais tarde, em 2003, tornou-se padrão
também da ISO, recebendo a especificação de ISO/IEC 23270.
O C#
surgiu com a finalidade de possibilitar a criação de soluções
executáveis sobre a plataforma .NET Framework, com o intuito de
flexibilizar o desenvolvimento de aplicativos. Dessa maneira, o
desenvolvedor não cria soluções para um dispositivo eletrônico
específico, e sim para a plataforma .NET Framework.
Para a
codificação de sistemas baseados em .NET Framework, a Microsoft lançou o
Visual Studio. Esta ferramenta é uma IDE (Integrated Development
Environment) que conta com um editor de código, compilador, com modelos
de projetos de exemplos, designers e assistente de códigos.
MSDN
(2012), diz que os algoritmos escritos em C# são executados no .NET
Framework, um componente para Windows que inclui um sistema de execução
virtual da aplicação por meio do Common Language Runtime (CLR) e um
conjunto de bibliotecas de classes, além de contar com uma solução
comercial da Microsoft, que faz parte da infraestrutura de linguagem
comum (CLI). O CLI é tido como um padrão internacional para a criação e
execução de ambientes de desenvolvimento onde as linguagens e as
bibliotecas trabalham em sincronia.
Ainda de acordo com MSDN
(2012), a compilação em C# é processada em uma Intermediate Language
(IL) que está em conformidade com a especificação CLI. O código IL e
seus recursos, tais como bitmaps e strings, são armazenados no disco
rígido em um arquivo executável chamado de Assembly. No momento da
execução de um programa em C#, o Assembly é carregado para o CLR. Uma
vez aprovado os requisitos de segurança, o CLR executa a compilação Just
in Time (JIT) para converter o código IL em linguagem de baixo nível.
A linguagem C# e suas características
A criação do C# foi baseado nas linguagens de programação C, C++ e
Java. Deste modo, programadores habituados com uma dessas linguagens são
capazes de desenvolver soluções sem maiores dificuldades, pois ela
reúne recursos de cada uma destas linguagens base e adiciona novos
recursos exclusivos.
Em relação a linguagem C, o C# tem foco na
compilação de soluções de alto nível, já a linguagem C é voltada para o
desenvolvimento de baixo nível. Outras comparações, de acordo com MSDN
(2012), o C#, simplifica de modo significativo a complexidade do C++ e
introduz novos elementos não disponíveis no Java, tais como: tipos
primitivos com valores nulos, delegações, expressões lambda e acesso
direto à memória.
MSDN (2012) ressalta que, o processo de
compilação do C# é mais simples e mais flexível comparado ao C++ ou
Java, pois elimina-se a necessidade de arquivos de cabeçalhos separados e
não há a necessidade da declaração de métodos e tipos em uma ordem
específica. Um arquivo contendo códigos de programação podem ser
definidos quaisquer números de classes, estruturas, interfaces e eventos
que forem necessários.
De acordo com OFICINA DA NET (2007), comparada ao C e C++, a linguagem C# é restrita e melhorada em vários aspectos, tais como:
Unsafe mode: ponteiros e fórmulas aritméticas utilizados sem
verificação de integridade só podem serem utilizados na modalidade de
modo inseguro;
Overflow: acessos a objetos são realizados
através de referências seguras, dessa forma não podem serem invalidadas e
normalmente as operações aritméticas são checadas contra sobrecarga;
Garbage collector: os objetos não são liberados da memória
explicitamente, e sim através de um processo que elimina objetos quando
não há referências;
Disposable: Destrutores não existem, mas
utilizada junto com a construção using block, torna possível que
recursos alocados por um objeto sejam liberados;
C# é mais
seguro com tipos: as conversões implícitas por default são conversões
seguras, tais como ampliação de inteiros e conversões de um tipo
derivado para um tipo base; não existem conversões implícitas entre
inteiros e variáveis lógicas ou enumerações; não existem ponteiros
nulos; todas as conversões implícitas definida pelo usuário deve ser
marcada explicitamente;
Namespace: membros de enumeração são colocados em seu próprio espaço de nome;
Reflexão: recursos de reflexão complexos estão disponíveis.
Ainda de acordo com OFICINA DA NET (2007), as diferenças do C# com o
Java são: diferentemente de Java, no C# são implementados propriedades e
sobrecargas de operadores, implementa modo inseguro que permite a
manipulação de ponteiros e aritméticos sem checagem, exceções não são
checadas, implementa goto como estrutura de controle, oferece suporte a
indexadores e delegates.
MSDN (2012), ressalta algumas características do C#, a citar:
Suporta conceitos típicos de orientação a objetos, como encapsulamento, herança e polimorfismo;
Todas as variáveis, métodos e o ponto de execução de uma aplicação, são encapsuladas em definições de classes;
Uma classe derivada pode herdar apenas uma classe pai, e herdar quantas interfaces forem necessárias;
Os métodos da classe derivada que substituem os métodos virtuais de
uma classe pai exigem a utilização da palavra reservada: override para
evitar a redefinição acidental de um método;
Uma struct tem a
mesma funcionalidade de classe, com a diferença, de ser mais
simplificada; implementam interfaces mas não suporta herança;
Suporte à implementação de métodos e tipos genéricos para garantir maior segurança de tipo e de desempenho à aplicação;
Os iteradores permitem a implementação de coleções de classes para definir comportamentos de iteração personalizados;
As expressões LINQ (Consultas Integradas à Linguagem) são
responsáveis em realizar consultas com base na integração dos recursos
de consultas da própria linguagem.
Segundo LIMA (2002), as características essenciais do C# são:
Simplicidade: os projetistas de C# costumam dizer que essa
linguagem é tão poderosa quanto o C++ e tão simples quanto o Visual
Basic;
Completamente orientada a objetos: em C#, qualquer variável tem de fazer parte de uma classe;
Fortemente tipada: isso ajudará a evitar erros por manipulação imprópria de tipos, atribuições incorretas etc;
Gera código gerenciado: assim como o ambiente .NET é gerenciado, assim também é o C#;
Tudo é um objeto: System.Object é a classe base de todo o sistema de tipos de C#;
Controle de versões: cada assembly gerado, seja como EXE ou DLL,
tem informação sobre a versão do código, permitindo a coexistência de
dois assemblies homônimos, mas de versões diferentes no mesmo ambiente;
Suporte a código legado: o C# pode interagir com código legado de
objetos COM e DLL’s escritas em uma linguagem não-gerenciada;
Flexibilidade: se o desenvolvedor precisar usar ponteiros, o C# permite,
mas ao custo de desenvolver código não-gerenciado, chamado “unsafe”.
Linguagem gerenciada: os programas desenvolvidos em C# executam num
ambiente gerenciado, o que significa que todo o gerenciamento de
memória é feito pelo runtime via o GC (Garbage Collector), e não
diretamente pelo programador, reduzindo as chances de cometer erros
comuns a linguagens de programação onde o gerenciamento da memória é
feito diretamente pelo programador.
Evolução da linguagem
A
primeira versão do C# começou a ser usado a partir do Visual Studio
2002. De acordo com o Website kunal-chowdhury (2012), sua principal
característica era a capacidade de escrever códigos gerenciáveis. Outras
características da primeira versão do C# são: conceitos de Orientação a
Objetos, suporte nativo a propriedades e eventos, documentação XML,
exceções, segurança de tipos, sobrecarga de operadores e gerenciamento
automático de memória.
Desde a primeira versão, o C# suporta dois
tipos de dados. Tipos de valor: incluem variáveis simples, como char,
int e float, tipos de enumeração e de estrutura. O segundo grupo
englobam, tipos de dados por referência, como: classes, interface,
delegates e array.
A segunda versão da linguagem (2.0) foi
introduzida com o Visual Studio 2005 e Visual Studio 2005 Express. De
acordo com MSDN (2005) as novidades são: tipos genéricos, iteradores,
classe parcial, tipos anuláveis, métodos anônimos, qualificador de alias
de namespace, classes estáticas, modificadores externos para declarar
métodos declarados externamente, possibilidade de definir diferentes
níveis de acessibilidades ao métodos gets e sets, maior flexibilidade no
tipo de retorno e parâmetros ao passar para um delegate, buffer de
tamanha fixo.
Com o Visual Studio 2008 e Visual Studio 2008
Express, o C# 3.0 (“C# Orcas”), de acordo com MSDN (2007) introduziu
várias extensões de linguagem que se baseiam no C# 2.0. A versão 3.0
conta ainda com métodos de extensão, expressões lambda, tipos anônimos,
tipos implícitos de arrays, expressões de consulta e árvores de
expressões.
Na sua versão 4.0, contando com o Visual Studio 2010 e
Visual Studio 2010 Express, os novos recursos agregados, de acordo com
BURROWS (2010), compreendem: DLR, parâmetros opcionais e de argumentos
nomeados, propriedades indexadas, suporte COM.
Atualmente, o C#
está na versão 5.0 acompanhada com o Visual Studio 2012 e Visual Studio
2012 Express. O Website kunal-chowdhury (2012) diz que são duas as novas
funcionalidades apresentadas na quinta versão da linguagem: Async e
Caller Information. Async é utilizada para indicar se o método,
expressão lambda, ou método anônimo são assíncronos. Caller Information
para obter informações sobre a chamada a um método, obter o caminho e
número de linhas do código-fonte e o nome do membro que o chamou. Caller
Information é utilizado para a detecção, depuração e criação de
ferramentas de diagnósticos.
Considerações Finais
A criação
do C# foi baseada em C, C++ e Java. Dessa maneira, o desenvolvedor
possui um apoio referencial no aprendizado da linguagem, não precisando
estudar novos conceitos e paradigmas de programação opostos. Desde o seu
lançamento, o C# permite o desenvolvimento de aplicações executadas
exclusivamente sobre a plataforma .NET Framework.
Dentre algumas
das características essenciais do C#, em ordem cronológica de versão,
destacam-se : (1.0) totalmente orientada a objetos, gerenciamento
automático de memória; (2.0) tipos genéricos, métodos anônimos, classes
estáticas; (3.0) tipos anônimos, expressões de consulta e árvore de
expressões; (4.0) propriedades indexadas, suporte COM e DLR; (5.0) Async
e Caller Information.
A linguagem C# veio acompanhada de uma IDE
comercial de desenvolvimento: Visual Studio. A partir de 2005, contou
ainda com uma IDE gratuita, denominada Visual Studio Express. Em ordem
cronológica, o Visual Studio conta com as seguintes versões: 2002, 2005,
2008, 2010 e 2012.
A utilização do Visual Studio como plataforma
de desenvolvimento e o C# garantem algumas vantagens nas construções de
aplicativos, tais como: programação orientada a objetos, uso de eventos
nos controles, validação de dados e tratamento de erros.