Você está na página 1de 11

Software Fundamentos do Desenvolvimento de

Renato Haddad Microsoft Most Valuable Professional MVP, MCT, MCPD e MCTS

Tecnologias
Visual Studio .NET 2010, C#

Introduo
Neste artigo irei abordar alguns tpicos bsicos que todo desenvolvedor deve saber. A pedidos, os tpicos sero bsicos porque este artigo faz parte do programa Microsoft Academy Awards, Mdulo Estruturas de deciso e repetio e Programao Orientada a Objeto OOP.

Decidi usar a linguagem Visual C# simplesmente porque a maioria dos exemplos encontrados na web usam C#. Neste artigo abordarei as estruturas de decises e repeties, programao orientada a objetos, como criar uma classe, adicionar propriedades, mtodos e um construtor. Para finalizar, como herdar uma classe e as vantagens.

Estruturas de decises Toda aplicao que precise de um direcionamento do fluxo de execuo dos cdigos, utiliza os comandos de condies, os quais tm como objetivo avaliar uma condio e conforme o resultado, direcionar o fluxo para uma operao, seja ela um bloco de cdigos, uma funo, etc.

O primeiro e o mais conhecido o if (se). Sua sintaxe :

If ( condio ) ... else / else if ( condio )

Basicamente a condio pode ser uma expresso lgica ou relacional. No exemplo a seguir definida a varivel idade com valor 12 e o if avalia se a idade maior ou igual a 18. Caso seja verdadeiro, ento ser mostrada a mensagem "Maior de idade". Neste caso, h apenas uma instruo a ser executada.

var idade = 12; if (idade >= 18) Console.WriteLine("Maior de idade");

J no prximo exemplo note que dependendo da condio h um bloco de cdigo a ser executado, sendo que o mesmo dever estar entre chave {}. Neste caso, se a idade for maior ou igual a 18, ento, ser mostrada a mensagem "responsvel", a idade ser somada mais 2 anos, ou seja o resultado final 14, e ao final, ser mostrado o valor da varivel j com o novo valor. Note que neste cdigo tem o uso do else, o qual a ao falsa da expresso avaliada. Ou seja, neste caso se a idade no for maior ou igual a 18, sero mostradas duas mensagens ("Requer auxilio dos pais") e a idade (neste caso, 10), pois o -= subtrai 2 do valor atual de 12. Enfim, em situaes onde requer a execuo de cdigos ou blocos de cdigos conforme a expresso avaliada, use o else.

if (idade >= 18) { Console.WriteLine("responsvel"); idade += 2; Console.WriteLine(idade); } else { Console.WriteLine("Requer auxilio dos pais"); idade -= 2; Console.WriteLine(idade); }

Aprimorando um pouco o uso do if, veja no exemplo a seguir que h trs situaes possveis de resultado. A idade inicial 13, e a primeira expresso avalia se a idade igual (==) a 10. Caso verdadeiro, mostra a mensagem "igual a 10". Caso contrrio, avaliada a segunda expresso, pois o uso do else if (seno se) avalia se a idade maior ou igual a 12 E (&&) menor ou igual a 16. Veja que neste caso a mesma coisa que dizer entre 12 e 16, inclusive. Observe o uso do && o qual significa o E de forma que ambas as expresses devem ser verdadeiras. Caso seja, ser mostrada a mensagem "Adolescente". Neste exemplo se nenhuma das duas expresses anteriores for verdadeira, ento o fluxo cair no else e mostrar "maior que 16". Detalhe: quantos else if posso ter? Quantos forem necessrios, no h limites.

idade = 13; if (idade == 10) Console.WriteLine("igual a 10"); else if (idade >= 12 && idade <=16) Console.WriteLine("Adolescente"); else Console.WriteLine("maior que 16");

Assim com temos o E (&&), o uso do OU (||) muito comum. Neste exemplo a seguir a mensagem "condio OU satisfeita" ser exibida somente se a idade for igual a 1 OU igual a 10. Caso contrrio, jamais este cdigo ser executado.

if (idade == 1 || idade == 10) Console.WriteLine("condicao OU satisfeita");

J pensou em escrever um cdigo com muitos IFs? No faz muito sentido isto. Em minha opinio fica um cdigo que chamamos de sujo, de difcil manuteno, ento se faz uso do comando swtich. Veja o exemplo a seguir: a varivel linguagem contm o texto "cs". O swtich avalia exatamente esta expresso swtich (linguagem). Dentro do bloco voc deve colocar o case para cada condio a ser avaliada, e de acordo com o resultado, executa-se o cdigo. Neste caso, dependendo das condies (vb ou cs) ser mostrada a respectiva mensagem. Note que se nenhuma acima for atendida, ento o fluxo cai no default. Observe que h a palavra chave break, que tem a finalidade de encerrar o swtich e seguir a execuo dos cdigos abaixo do fechamento do bloco doswtich. O break no obrigatrio mas se voc no colocar, a cada case ser realizado o questionamento da expresso.

string linguagem = "cs";

switch (linguagem) { case "vb": Console.WriteLine("vb.net"); break; case "cs": Console.WriteLine("c sharp"); break; default: Console.WriteLine("outra linguagem"); break; }

Agora vamos ao uso de loopings. Como o prprio nome diz, looping um lao o qual pode ser finito ou infinito, depende como programar. O while um tipo de looping bastante usado o qual tem como finalidade realizar a execuo do bloco de cdigo de acordo com a expresso definida no escopo do while. Veja que defini duas variveis, uma boleana (lgica) chamada cond com o valor true; e a contador do tipo int com valor 50. Veja a sintaxe do while (cond), ou seja, enquanto verdadeiro. Neste caso, enquanto a varivel cond for verdadeira o looping ser executado. Por segurana, dentro do bloco do looping, a cada iterao eu fiz uma condio if que avalia se o contador igual a 60. Caso seja verdadeiro, a varivel cond passa a ser false e no prxima execuo da iterao, o looping ser finalizado. Vale dizer que a cada iterao mostrado o valor do contador, e tambm adicionado um (contador++) varivel.

bool cond = true; int contador = 50; while (cond) { if (contador == 60) cond = false;

Console.WriteLine(contador++); }

Outro tipo de looping muito usado o foreach (para cada item), o qual voc no precisa dizer quantas iteraes tero. Neste exemplo, defini um array de string[] chamado reascontendo quatro siglas de departamentos. J no foreach veja que a sintaxe simples e intuitiva, ou seja, para cada item contido em reas (coleo de itens) execute o bloco de cdigo. O foreach extensamente utilizado em colees de dados, leitura de dados em banco de dados, enfim, voc no precisa controlar o final pois est encapsulado no foreach, ele que controla o trmino.

string[] areas = { "DTI", "DPE", "WIN", "COR" }; foreach (var item in areas) { Console.WriteLine(item); }

Outro tipo de looping muito difundido em todas as linguagens o for. A sintaxe simples, mas vamos entend-la. O int i = 0 inicializa a varivel i do tipo int com valor 0 (zero). A seguir definido o limite da execuo, neste caso a expresso i < 100(enquanto i for menor que 100). Para finalizar, o ltimo parmetro o contador a cada iterao, neste caso somado 1 a varivel i.

for (int i = 0; i < 100; i++) { Console.WriteLine(i); }

Tratamento de Erros

Tratar erros uma das coisas mais importantes nas aplicaes. Infelizmente nem todo desenvolvedor faz isto e acaba se perdendo completamente, tornando a aplicao no confivel. A estrutura do tratamento simples, use o try ... catch ... finally. Tenha em mente o seguinte: tudo que for cdigo passvel de erro coloque no bloco do try. No importa o que seja, se der erro cair no catch, e aqui que voc deve tratar o erro. O catch pode ser customizado para tipos definidos de erros, por exemplo, erro de abertura de conexo com banco de dados, diviso por zero, enfim, se voc pesquisar pela expresso Exception no help do VS ver quais existem. No cdigo a seguir, dentro do try forcei um erro de diviso por zero, e como coloquei umcatch para capturar este tipo de erro (DivideByZeroException), bvio que ser mostrada a mensagem deste catch. Observe que o catch genrico sempre dever ser usado por ltimo, ou seja, se no cair em nenhum customizado, sobra para o ltimo. A vantagem que voc pode usar uma varivel (neste caso ex) para ter acesso s propriedades do erro. Eu usei o ex.Message para mostrar a mensagem de erro do framework. E o finally, para que serve? Entend o finally da seguinte forma: dando ou no erro, ofinally ser executado. Um exemplo simples de uso nas conexes com banco de dados, dando ou no erro, feche a conexo.

try { // bloco de codigos int valor = 10; int zero = 0; Console.WriteLine(valor / zero); } catch (DivideByZeroException) { Console.WriteLine("Vc nao pode dividir nada por zero"); } catch (Exception ex) { Console.WriteLine(ex.Message);

//throw; } finally { Console.WriteLine("mostra o finally"); }

Programao Orientada a Objetos

Pensar em .Net obrigatrio saber OOP porque tudo baseado em OOP. O que um objeto? Um objeto nada mais que uma classe, que pode ter propriedades e mtodos. Propriedades da classe so as caractersticas e os mtodos so as aes. Neste exemplo a seguir defini a classe chamada Jogador contendo 3 propriedades, sendo id, nome e modalidade. Cada propriedade tem um tipo (int, string, double, datetime, etc). J os mtodos desta classe so Salvar e Excluir, os quais no esto implementados, mas so as aes desta classe.

public class Jogador { // propriedades public int id { get; set; } public string nome { get; set; } public string modalidade { get; set; }

// mtodos public void Salvar() { }

public void Excluir() { }

Como instanciar um objeto e preenche-lo? No cdigo a seguir veja como instanciar o objeto/classe Jogador e preencher com as propriedades definidas na classe. Eu usei a palavra chave var porque o C# atribui o tipo de acordo o contedo e como no new est setado o Jogador, ento, automaticamente a varivel obj passa a ser do tipo Jogador. Uma vez finalizado o preenchimento voc tem acesso a tudo da classe, desde que seja pblica claro. Neste exemplo, ser mostrado o nome do Jogador atravs da propriedade obj.nome.

var obj = new Jogador { id = 10, nome = "Paulo", modalidade = "xadrez" };

Console.WriteLine(obj.nome);

Construtor da classe Quando voc precisar instanciar uma classe, mas alguma informao deve ser passada logo no incio, voc pode inserir o campo no construtor da classe. Exemplificando, veja a mesma classe Jogador contendo a propriedade idade. Observe que logo aps a declarao da classe definido o campo idade e no construtor public Jogador (int idade) j esperado o valor da idade. Neste caso

public class Jogador { public int idade; public Jogador(int idade) {

this.idade = idade; } // propriedades public int id { get; set; } public string nome { get; set; } public string modalidade { get; set; }

// mtodos public void Salvar() { }

public void Excluir() { } }

Neste caso, quando instanciar a classe Jogador, a idade dever ser declarada imediatamente entre parnteses. var obj = new Jogador(25) { id = 10, nome = "Paulo", modalidade = "xadrez" };

Console.WriteLine(obj.nome);

Herana de Classe

Um dos melhores conceitos que existem no OOP a herana. Isto permite criar uma classe base e herda-la quando necessrio. Na classe base normalmente colocamos propriedades e mtodos bsicos, genricos e nas classes que herdam esta, colocamos as particularidades. Veja que criei a classe Xadrez e herdei de Jogador. No C# para herdar uma classe use o:. Neste caso, a classe Xadrez tem as propriedades nvel e rating. No entanto, veja que o construtor tambm usa o idade, pois na classe base Jogador, a idade deve ser declarada quando instnciada.

public class Xadrez : Jogador { public Xadrez(int idade):base(10) { this.idade = idade; } public string nivel { get; set; } public int rating { get; set; } }

Agora veja como instanciar a classe Xadrez. Observe que as propriedades id, nome e modalidade no existem em Xadrez. Porm, como Xadrez herda de Jogador, voc tem acesso a todas estas propriedades de forma transparente. Isto fantstico, otimiza cdigo, facilita a manuteno e voc consegue estender vrias funcionalidades.

var objX = new Xadrez(27) { nivel = "avanado", rating = 10000, id = 20, nome = "Alvaro",

modalidade = "xadrez" }; Console.WriteLine(objX.rating);

Vale dizer que todas as propriedades e mtodos vistos aqui so pblicos (public). Caso queira que uma propriedade seja vista apenas de dentro da classe, use private ouprotected. Isto vale para mtodos tambm.

Sobre o Autor
Renato Haddad (rehaddad@msn.com www.renatohaddad.com ) MVP, MCT, MCPD e MCTS, palestrante em eventos da Microsoft em diversos pases, ministra treinamentos focados em produtividade com o VS.NET 2010, ASP.NET 4, Entity Framework, Reporting Services e Windows Phone. Visite o blog http://weblogs.asp.net/renatohaddad.