Você está na página 1de 11

FUNDAMENTOS DO DESENVOLVIMENTO DE SOFTWARES

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 do swtich. 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 reas contendo
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, o
finally 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.