terça-feira, 25 de agosto de 2009

3 - Namespace, Class e Função em C#

(Por: Rodrigo Ribeiro da Costa Barbosa - rodrigorcbarbosa@hotmail.com)

  Antes de dar continuidade aos nossos estudos de C#, vamos tentar entender alguns recursos que são utilizados na linguagem e já foram aplicados anteriormente. Para isso vamos analisar os códigos seguintes:

Código 1:

using System;

  namespace meuprograma
{
        class programa1
       {
            static void Main()
           {
              Console.WriteLine("Ensopado de TI !");
           }
       }
}

Código 2:


namespace meuprograma
{
   class programa1
       {
           static void Main()
           { 
              System.Console.WriteLine("Ensopado de TI !");
            }
       }
}



 Olhando este código rapidamente parece não haver nenhuma diferença entre ambos correto? ERRADO!
Se prestarmos um pouco mais de atenção, veremos uma simples diferença, o uso de um recurso na primeira linha do primeiro código "using System"  e a inserção de um "System" em "System.Console.WriteLine" no segundo código. Na verdade  ambos os programas funcionarão da mesma forma.
Então para que serve essa linha ? Só para escrever mais um pouco ? Se você disse sim para a segunda pergunta, errou de novo ! Pois ela serve justamente para o oposto... muita calma nessa hora que já vamos entender ! Antes deixe-me contar uma historinha. :-) .

 Já vimos que "Write.Line"  é uma função usada para mostrar algo na tela, várias funções assim como Write.Line estão disponíveis dentro da linguagem C#, cada uma delas executando uma terefa diferente !
 Algumas podem permitir que você imprima, outras que você trabalhe diretamente com banco de dados, temos ainda as que permitem gravar dados no disco ou ainda trabalhar com elementos gráficos, entre muitas outras.

  O ponto chave é simples!

  "Como lembrar de todas essas funções na hora de escrever um programa?"

 A resposta desenvolvida pela Microsoft foi mais simples ainda !

  "Vamos agrupar de modo lógico funções semelhantes dentro de uma mesma classe !!!"

 Então foi criado um sistema de hierarquia capaz de guardar cada função em uma classe pré-definida!
  Lembram oque eu disse no artigo anterior (Meu nome não é Johnny)?
  "O uso do "class" indica que estamos abrindo uma classe principal dentro do nosso programa que poderá incluir diversas funções diferentes assim como um contêiner de navio no qual se pode colocar diversas coisas dentro."

  Com base nisso podemos pensar o seguinte . Se eu tenho 3 empresas: Uma que exporta peixes, outra exporta adubo e outra exporta roupas íntimas, faria sentido eu colocá-las no mesmo contêiner na hora de enviá-las para  meus compradores em países diferentes? Imagine o cheiro que ficariam nas roupas íntimas ou o gosto do peixe !
 É tudo uma questão de organização. Então podemos dizer que nossa linguagem se assemelha a empresa onde:

   WriteLine seria um funcionário (função) que executa uma tarefa específica dentro do departamento Console(class) que fica dentro da empresa System (namespace) .

 Até aí tudo bem ... Mas porque existe um nome diferente para namespace no começo do código ?
BOAAAAAAA PERGUNTAAAAAAAA !

  É pelo seguinte, nos próximos artigos (dependendo de como o professor da faculdade irá desenvolver as aulas ), explicarei a criação de classes contendo uma estrutura de funções personalizadas. Sabendo que podemos criar estas classes com funções personalizadas então devemos questionar sobre o conflito de nomes.
Pois se eu criar uma classe chamada Console, como o compilador vai saber se estou chamando a classe desenvolvida por mim ou a classe desenvolvida pela microsoft ?
 Aí que entra o namespace ! Lembra da nossa empresa ? o namespace define se o compilador vai chamar o funcionário (função) do departamento (Console) da empresa (System) Microsoft ou (meuprograma) Ensopado de TI :-).
 E o using System que ficou lá para tráz?
 Disse que o uso dele nos faria digitar menos correto?

 Por padrão, namespaces como por exemplo (System) que foram criados pela microsoft ,  não precisam ser inseridos no início do código. Mas imagine se eu for escrever um código absurdamente grande com mais de 985698246347856892346  linhas (meio exagerado né?) usando grande parte das funções e classes no System . Seria mais cômodo eu  digitar System.Classe.Função ou Classe.função somente?
  Para isso que serve aquele "using" no começo do código. Ele elimina a necessidade de determinar o namespace das linhas de código pois já as insere como padrão.
  Mas e se eu quiser utilizar outro namespace no meio do programa ?
Simples : Você deverá definir o namespace normalmente de maneira manual.
Ex meuprograma.classe.função
   Pronto ! Agora já sabemos um pouco mais de C# !

Espero que o artigo tenha ajudado e até o próximo tutorial ! 

:-)

2 comentários:

  1. Muito bom, mas surgiu uma dúvida, a função da palavra reservada 'namespace' é apenas para organização do código?

    ResponderExcluir