Você está na página 1de 662

I I

"da Visu em

Duncan Mackenzie Kent Sharkey

Traduo: Aldir Jos Coelho Co rrea da Silva

Revisc7Q Tcnica:

Marcos Jorge
Consultor Espcci[l[ista na Plfllaformu .NET

Analista de Sistemas

PEARSON

Makron Books
So Paulo
Brasil Argentina Colmbia Costa Rica Chile Espanha

Guatemala Mxico Peru Porto Rico Venezuela

2003 Pearson Education do Brasil Tilulo Original: Sams, Teach Yourself Visual Basic .NET in 21 Days 2002 Sams Publishing 1! Edio em ingls Sams Teach Yourself Visual Basic .NET in 21 Days publicada pela Pearson Education Inc. , sob o selo Sams Publishing Todos os direitos reservados Diretor Editorial: Jos Martins Braga Editora: Gislia do Carmo Costa Produtora Editorial: Marileide Gomes Designer de Capa: Marcelo da Silva Franozo (sobre o projeto original de Aren Howell) Editorao Eletrnica: ERJ Composio Editorial e Artes Grficas LIda Impresso: So Paulo - SP

Dados Internacionais de Catalogao na Publicao (CIP) (Cmara Brasileira do Livro, SP, Brasil)

Mackenzie, Duncan Aprenda Visual Basic .NET em 21 Dias I Duncan Mackenzie, Kent Sharkey; traduo: Aldir Jos Coelho Correa da Silva; reviso tcnica: Marcos Jorge. -- So Paulo: Pearson Education do Brasil, 2003. Titulo original: Sams teach yourself Visual Basic .NET in 21 days. ISBN : 85.346.1450-4 1. BASIC (Linguagem de programao para computadores) 2. Microsoft Visual Basic 3. Microsoft Windows (Programa de computador) I. Sharkey, Kenl. II. Titulo. 02-4239
,

CDD-005-133

Indices para catlogo sistemtico 1. Visual Basic.NET: Linguagem de programao: Computadores: Processamento de dados 005.133

2003 Proibida a reproduo total ou parcial. Os intratores sero punidos na forma da lei. Direitos exclusivos para a lngua portuguesa cedidos Pearson Education do Brasil, uma empresa do grupo Pearson Education Av. Ermano Marchetti , 1435 CEP 05038-001 - Lapa - So Paulo - SP Tel. (11) 3613-1222 Fax: (11) 3611-0444 e-mail: vendas@pearsoned .com

Dedicatria

De Duncan Mackenzie:
Enquanto trabalhava neste livro. quase ludo em minha vida se modificou, mas em grande parte, isso no eslava relacionado com ele. Agora tenho um jilho, Connor, me mudei para

oulra regio e es/ou com um 1I0VO trabalho na Microsoft. Gostaria de dedicar este livro a minha esposa, Laura, que sempre apoiou a iniciativa de escrevlo, independentemente de quantos meses ultrapassamos o prazo inicial, e a meu filho , que no linha a mnima idia
de que este livro eslava sendo escrito e mesmo assim eslava mui/o feliz e solidrio. Para

concluir. lenho de agradecer a Kent, porque ele escreveu melade do livro, e no acho que eu/erio sobrevivido se tivesse que faz-lo sozinho.

De Kent SI/Grkey:

Em princpio, pretendia parecer inteligente e escrever um poema aqui, mas esse lado de meu crebro est com problemas nestes ltimos dias. Portanto, em vez disso, essa ser uma lista bastanle tpica de todas as pessoas que me ajudaram neste livro. Gostaria de agradecer ao mell co-alllor, Dllncan. Obrigado pela oportllnidade e por nllnca aceitar 11111 "no" ou "Desis/o" como repos/a. Obrigado a lodos os editores que trabalharam no livro, principalmeme Sondra e Todd. Obrigado a Squirre1 por me manter so e salvo e a Cica por deixar meu/aptop aquecido e, s vezes, sem a/ividade. Por ltimo, mas no menos impor/ante. obrigado a Margaret por me apoiar enquanto trabalhava nesta a/ividade, 11m novo trabalho em um novo local. Agora teremos novamente essa coisa que chamam de fim de semana!

Sobre os Autores
Duncan Mackenzie profissional certificado MCSD, MCSE e MCT que trabalha para o grupo MSDN (http://msdn.microsoft.com)daMicrosoftem Redmand, Washington. Ele um programador dinmico do Visual Basic .NET que possui o aborrecido hbito de escrever artigos ocasionais. Duncan tambm alua como instrutor de Visual Basic e ministra muitos cursos, que abrangem da programao intermediria avanada do VB. Escreveu vrios livros e colaborou , em tantos outros sobre as tecnologias da Microsoft. E ainda orador em muitas conferncias que cnfocam o desenvolvimento da Microsoft.

Kent Sharkc)' MCSD, MCSE, MCT e MCP+SB. No momento trabalha na Microsoft corno Instrutor Tcn ico no Grupo de Solues .NET, em que sua ocupao atual o .NET Framework e o Visual Studio .NET. Antes de entrar para a Microsoft, Kent j possua anos de experincia
como instrutor e consultor, concentrando-se em projetos e desenvolvimento de aplicativos com o uso do Visual Basic. Ele escreveu e co laborou em diversos livros, incluindo sobre MCSD e Visual Basic. Faz exposies regularmente em conferncias de desenvo lvedores dando nfase ao desenvolvimento da Microsoft.

Diga-nos o Que Voc Acha!


Como leitor deste livro, voc nosso crtico e colaborador mais importante. Valorizamos sua opinio e queremos saber o que estamos fazendo corretamente, o que poderamos fazer melhor, sobre quais reas voc gostaria de nos ver publicando c qualquer outra sugesto importante que deseje passar para ns.

Receberemos com satisfao seus comentrios. Voc pode enviar um fax , e-mail ou escrever direlamente, para que possamos saber do que gostou ou no neste livro - assim como o que pode-

mos fazer para tornar nossos li vros me lhores.

Por favor, entenda que no podemos ajud-lo com problemas tcnicos relacionados ao tpico

deste livro e que, devido ao grande volume de correspondncia que recebemos, talvez no possamos responder a todas as mensagens.

Quando voc escrever, cenifique-se de incluir o ttulo e o autor deste livro, assim como seu nome e nmero de telefone ou fax . Examinaremos seus comentrios cuidadosamente e os compartilharemos com os autores e ed itores que trabalharam no livro.

Fax: Fone:

(11) 3611 9686 (II) 3613 1213

Endereo Eletrnico: Endereo Postal:

clientes@makron .com.br e livros_infonnatica@pearsoned .com.br


Pearson Education do Brasil Rua Em lio Goeldi, 747 - Lapa
So Paulo - SP/ 05065-110

...
CI

...
~

cc

CI

cc

CI

cc

.e
cc

(II

CI

"" cc E

..,
~

cc CI

cc CI

.N

II)

ln

N
~

.( II

~
C,)

CI
o
o

cc -

CI

:$

'" cc
~

CI

-cc
(II

CIl

cc

...
CI

co
~

.>
cc
II)

cc

CI

cc

-= = ... c..
<C

cc CI

..,

C>
~

...
~

cc CI

cc CI

CI

:$

cc '"I C

"" :$
~

CI

CI

cc

co
CI

ln
~

cc

CI

cc

Sumrio
Introduo- ............. .. .. ... .. . .... . . . . .. .. ... . . .. . ..... XXI

SEMANA 1 Viso Geral


Dia 1 Bem-Vindo ao Visual Basic .NET

3 Compreendendo a Programao de Computadores ' .. ... . .. ... .. . .. . .. .. 3

A Funo dos Sistemas Operacionais .. .. .. .. . .... . ... .. .. . .... . .. . 4 O Papel das Linguagens de Programao' ........................... 5 Por Que Escrever Programas de Com putador? ..... . ................. ... . 8 Um Breve Histrico sobre o Visual Basic" ........................ 10 O Que ,NET? . .. ... . .. .. ... . ... .. .. .. .. . ...... .. .. . .... . .. . 13
Servidores .NET . .. .. ... .. .. .. .. .. .. .. ... . . ... .. .. .. ..... .NET Framework ... . .. .. ... . .. .. .. .. ... . ... . ... .. . ........ Serv ios .NET ............................................... Disposit ivos .N ET ............................................
Desenvolvendo seu Primeiro Aplicativo no Visual Basic .NET .. Preparando-se para Codi ficar .. . ... .. .. .. ... . ... .. .. .. Onde Est meu ID E? . .. .. ... . ... .. .. .. ... . ... .. . ... Uma Tarefa S imples' ............ .. .. .. ... .. .. .. Escrevendo o Cdigo ...... . . . . .. . .. ... . . . ... Resumo' ................. . . . . . .. . .. .... . . . . . .. .. .. .. .. ..

14 14 15 16

. .... . ... 17 . .... . .. . 17 . ... . . 21 . .... . 2 1 . .. ... 22 . ..... 27

P&R ')7 Workshop . ... . ... . .. .. . .. - ... . . .. .. . .. ..... - . . . .. . 28 Teste .. ... . .. .. .. .. .. ... . ... .. . . .. . . . . .. .. .. . . . . ... 28 Exercfdos ....................... . .. ... .. .. .. . . . ..... 28
Dia 2 Trabalhandocom o Visual Basic .NET 29

O IDE do Visual Studio . .. .... . . .... ..... ... . . .. . . . .. . . .... . Inic iando' ...... . ....... ... ............. . .. .. .. . . . ..... A Janela Principal do IDE do Visual Studio' . ... . . ........ . . .. . Solues e Projetos ' .. ... . ... .. .. .. .. .. ... . . . ..... . . . . .. . Arqu ivos' .. . .. ...... .. ... ... . .. . ... .. .. . .. . . . . . . . ... . . Criando Nosso Primeiro Aplicativo Windows ....... .. .. . . . . . ...... Crie o Projeto' ............................ .. .. .. . . .. ..... Desenvolva a Interface com o Usurio' . .. .. ... . . . . . . .. .. . ... . .. . Executando o Projeto ... . ... . ... .. .. .. ... . . ... .. .. . .... . .. . Construindo o Projeto' .. ... .. . ... .. .. .. ... . . .... .. .. . .... . ... Adicionando Seu Prprio Cdigo .............. . ............... Resumo' .. . ... . ........................... .. ...............

29 30 32 50 52 53 54 54 55 56 58 60

Aprenda Visual Basic .N ET em 21 Dias

P&R ......... .. .. .. ... ... . . . . .. .. . . . .. .. . . . . . . . .. . 60


Workshop . ... . .. . . .. . . . ... . . .. . . ... . .. .. . .. . . ... . . 61

Teste 61 Exercc ios' .. .. ... . .. .. ... . ... .. .. .. .. .. ... . . , ... , . . . .. . 61


Dia 3 Introduo Programao com o Visual Basic .NET

63

Variveis e Atribu io' . .. .. ... . ... .. .. .. ... . ... . .. ... .. . .. .. . . 64 O Que uma Varive l? . .. ... .. .. .. .. .. ... . ... . . . . . . . . . .. . .. . 64
Tipos de Variveis Disponveis' .... .. . . .. ... .. .. .. . . . ..... 64

Variveis Simples' . .. .. ... .. . ... . .. . .. ... . . . . ... . . ... . . 65 Declarando Variveis' .. ... .. .. .. . .. .. . . .. . .. . .. . .. . .. . . .. ... . . 69 Arrays .. .. .. .. ... . .. .. . . .. . .. . . .. .. . . . . .... . . . .. . 70 Atribu io' ............................... .. . . . . . . . ..... 72 Constantes' ............. ...... ............ .. .. .. . . . . .... 72 Algumas Sugestes para os Padres de Nomeao' .... .. . . . . . . . ..... 73 Clculos Simples' ............................ .. . . . . . . . ..... 74 Usando Operadores .. .. .. ... . ... .. .. .. ...... .. . .. .. . ... . .. . 75 Funes Internas' .. .. ... . ... . ... .. .. .. .. .. . .. ... .. . ... .. .. . 75 Escrevendo Suas Prprias Rotinas ' . ... .. .. ... .. . . .... .. .. . .... . ... 80 Sub-Rotinas ............................... .. ............... 80 Funes ' ... . .. .. .. .. ... . ... .. .. .. .. .. .. ... .. . ... .. . ... ... . . 81 Escopo ' . ... . .. .. .. .. ... . ... .. .. .. .. .. .. ... .. . ... .. . .... . ... 8 1

Exemplo de Aplicativo: Calculando um Valor Futuro' ... .. . ... .. .. ... . .. . 83 Resumo' .. ... . .. ... . .. .. ... . ... .. .. .. .. .. ... .. . ... .. .. ... . .. . 88

P&R89 Workshop ................. . .............. . ............... 89


Teste' ........ .. ... . ... . . . .. .. .. ....... .. ............... 90 Exerc cios' .. .. .. .. .. .. ... . ... .. .. .. .. .. .. .. .. .. .. . .... . .. . 90
Dia 4

91 Tomando Decises com as Instrues de Controle ' ..... .. .. ....... . .. . 91 A In struo If . .. .. .. .. ... . ... .. .. .. .. .. .... . .. .. .. . ... ... . . 92

Controlando o Fluxo dos Programas

Estendendo a Instruo If ................................... 95 Instrues If em SeqiJncia na Mesma Linha' .... . ............... 99 Expresses e Lgica Boo leana' ....................... .. .......... 100 Operadores de Com parao' ....... .. .. .. ... . ... .. .. . .. . ... .. . 100 Operadores Lgicos . .. . .... . .. .. ...... ... . ... .. . ... ... . ... .. . 101 Avaliao Abreviada' .. .. . .... . .. ... . .. ... . ... .. .. .. ....... . .. 103 Lidando com M ltiplas Possibilidades: A Instruo SeI ect Case 104 Laos' ...................................................... 105 For ... Next . . ... .. .. . ....... .. .. .. ... . ... .. .. .. ... . ... .. . 106 A Varivel do Contador ' . . .... . .. .. .. .. ... . ... .. .. .. . .. .. .. .. . 106 Espec ificando O Valor do Incremento com O Uso de Step .. .. . .... .. .. . 108 While ... End While 1 09

Sum rio
Lao 00 .............. .. .... . .. .. ... . .... ... ...... .... Condies de Sada ' ... . ... .. .. .. .. ........ . .. . . ....... . . . . Laos Infi nitos ' . . . ... . . .. .... .. ....... .. .... .. ... . . . .. ... .. . Implicaes sobre o Desem penho' .. .. .. .. ... . ... .. .. .. .. .. ... .. . Ap licativos Que Faro Uso de Seu Conhecimento Recem-Adqu irido' ........ Leitura de um Arqu ivo' ....................................... Um Jogo Simples' ........................................... Evitando Laos Complexos por Meio da Recurso ' . . ... .. .... ..... .. . .. Resumo' .. ... .. . ... .. .. . .... . .. .. .. .. ... . ... .. . ... - ..... .. . P&R .... . ... . ... . ........ . ... . ............ . ... . . ........ . Workshop' ...... . .... .......... .. ......................... Teste' ....................................... . .......... Exerclcios .. .. . .. ... . .. .... . .. ... . .. ... . ... .. . . .. . . . .. .
Dia 5 Arquitetura dos Aplicativos na Plataform a .NET
O Que E a Arquitetura do Aplicativo?' .............................. Funo do Arquiteto de Softwares" . .. .. .. ... . ... .. .. .. ... . ... . .. Que Partes de um S istema So Consideradas Arquitetura do Aplicativo? ' .. . Arqu iteturas Viveis na Platarorma .NET . ... . ... .. ...... .. .. . .... . Os Trs Elementos de Qualquer Aplicat ivo'" ...................... Quantas Camadas? .. .. .. . .... . .. .. .. .. ... . ... .. . .. . .. ... . Windows DNA . .. ... . .. ... .. .. ... . .. ... . ... .. . . .. ... .. . Onde a Platarorma .NET Se Encaixa? ... . .. ... . ... .. . . .. ... .. . Escolhendo uma Tecno logia de C liente" . .. ... . ... .. . . .. ... .. . Decid indo Que Arquitetura Usar ' ............................... Fatores Essenciais Que Influenciaro Sua Deciso' ....... . ........ .. Exemplos de Cenlrios' ........................... . . ......... Resumo' .. .. ... . ... .. .. . ... .. .. .. .. .. ... . ... .. . .. ...... .. . P&R .. . .. ... .. . ... .. . .. . . . . . .. . .... . ... .. ...... . . .. Workshop' .... . . . ........... .. ............... ...... . ..... .... Teste' ....................................................

ttt 113 t t4 t t5 116 117 119 121 123 123 124 124 125
127

127 128 129 133 133 134 134 135 136 138 139 141 145 145 146 146

Dia 6

O Que Fazer Quando Programas Bons Apresentam Problemas e para Se Certificar de Que Isso No Acontea

147

Tratamento de Excees Estruturadas' .............................. O Que o Tratamento de Excees Estruturadas?' . .. ... . . .. . . . ... Erros e Excees .. ... . ... .. .. .. ... . .. ... . ... .. . .. . ... .. . O Bloco Try' .. . ... .. .. . .... . .. .. .. .. ... . ... .. .. ...... .. . A Seo Catch' ...........................................

148 148 148 149 149

Aninhando Blocos Try . . End Try 155 ASeoFina l ly 156 Lanando Excees . .. . ... ... . .. .. .. .. ... . ... .. . . .. . .. ... .. . 157 Depurando ' ... .. . ... .. . .. .... . . . . .. ... . ... .. . .. . . . .... .. . [57 A fonte dos Erros' . ... . .... . .. . .. .. . . . . . ... . . ... . ... ... . 158

XII

A prenda Visual Bas ic .N ET em 21 Dias

Aprendendo a Depurar com a Prtica' ..... . ... . ...... ... ....... . .. Os Modos na Vida de um Programa ' ... . ...... . .. . . .. .... . . . . . Percorrendo Seu Cdi"o ' . .. .... .. .... ...... ....... . .... .. .. .. . " Exam inando as Variveis' .. ... . .. ... . ..... . .. . . .... . . .. .. . Outras Ferramentas para Depurao' ..... . ..... ..... . ...........

159 167 165 [68 172

Resumo ' ........................... . . ... . .... .. ..... ..... 173

P&R .............................. .. ... . .... .. . ... . ..... 173


Workshop .. .. . . . .... . . . . . .. . . .. . .. . . .... . ... . 174

Teste 174

Exercfc ios .. . ... . ........ . ... . ............ . ... . .. .. . .... . 174


Dia 1 Trabalhando com Objetos 111

Para Comear: O Que um Objeto? ..... .. . .... . .... .. ....... ... 177 Classes e Instncias ........... ....... . ..... . ...... ..... 178 Referncias ..................... .. .. ... . ..... .. ...... .... 178 Passando o Conceito para o Cdigo' ....... .. . .. . .... .. .. . .. ..... 179 Propriedades ' .. . ... .. .. . ....... .. . . .. ... . . .. . ... .. .. . . .. 180 Propriedades ReadOn l y e WriteOnly .. . ... .. . . .. .. . ... .. . 18 1 Criando a Instnc ia de um Objeto . .. ... . ....... .. .. . .. . . .. . .... . 182 Encapsulando Cdigos em Suas Classes' .............. . ........... 183 Tpicos Avanados' .. ... .. . ... .. .. ... . .. ... . ... .. . . .. . .. ... . 187 Sobreposio ' . . .. ... . .. ... .. .. ... . .. ... . ... .. . . .. ... .. . 187 Herana ' ... .. . .. ... . .... . .. .. ... . .. ... . ... .. . . .. ... .. . 189 A Base de Todas as Classes Bs icas ' .. .. .. ... . ... .. . . . . ... .. . 194 Construtores' .................................. . .......... 195 Espaos de Nome' .............................. . ........ .. 197 Membros e Objetos Compartilhados .. .. .. .. ......... . . ......... 199 Resumo . .. .. ... . ... .. . .. ... . ... .. .. .. ... . ... .. . .. ...... .. . 199 P&R .. . .. ... .. . ... .. . .. ... . ... .. . ... ... . .. . .. . .... .. .. . 200 Workshop' .... . . ....... .. ... . .. .. ... . .... .. ..... ..... 200 Teste' ........ . . .... .. ... .. ... . ... . .... .. ..... .... 201 Exercidos ..... . . .... .. .... . . . . .... . ..... .. ....... ... 201

SEMANA 1 Revis o SEMANA 2 Viso Geral


Dia 8

202 203

Introduo ao .NET Framew ork 205 O Que E o .NET Framework?' ....................... . .......... . 205

Classes Importantes do .NET Framework' .. . .. ... . ... .. .. .. . ... .. . 206 Console ' ... .. . ... .. . .. ... .. .. ... . .. ... . ... .. .. .. . ... .. . 206 Resultados Ma is Simples . .. ... . .. ... . .. ... . ... .. . . .. . ... .. . 207 Envi ronment (Amb iente) ....................... . .......... 212 Random . ... .. .. .. .. . ... .. .. . . . . .. ... . ... .. . . . .. . .. 213

Sumrio

XIII

Math ., , .. " ,., , ,." ,." ,." , .. , ... , , ,.,., .. , ... ... ", .. " 2 14 Classes de Conjuntos no ,N ET Framework ' .. ' , , . ' ' .. , . .... . . ' , . ' , 215 Encontrando o Que Precisa no ,N ET Framework ' ' , . , , .. ' . ...... ' , .. . 2 19 As Regras da Busca . .. .. . ....... .. .. .. ... . .. .. .. .... . . .. . .. 2 19 A Saga pela Classe Perfeita' .. , .. , , ... , ... , , .. ' ... .. .. . .. , , ... 220 Resumo' . , ... , , ... , .. , .... , , .. . . . . . ... . ' ... .. .. . . . , , .. , 223 P&R "." ... " .. " .. , .... " . .. . .. . .. . , ... .. . ... . , ... , 224 Workshop .. .. . . , ..... . ... . . .. . . .... . .. . .. .... . .. . .. 224 Teste .. ... .. . ... .. .. . .... . .. .. .. .. ... . ... .. .. .. ....... .. . 224 Exercfc ios . ... . .. ... . , .. .. .. .. ... . ... .. .. .. .. .. .. .. .. ... .. . 224
Dia 9 Desenvolvendo uma Interface com o Usurio com os Formulrios Windows 225

Viso Geral dos Fo rmulrios Windows' ... , ... , , . , , , .. , .... , , . Criando um Aplicativo com Fom1Ulrios Windows' , .. , , ....... . , . Configurando o Projeto' , , .. , , .. , , ...... , , , . , , , ... .. . ... Adicionando Controles ao Fonnulrio ... , ... , , .. , , ... .. . . . . Nomeando Seus Controles . ....... .. .. .. ... . ... .. .. .. ... . Manipu lao de Eventos . .. .. .. .. ... . .. ... .. .. .. .. .. ... .

, , , .. , 225 . , , ... 227 . , , .. , 227 . , , .. , 228 ... . .. 229 ... .. . 229

Criando Vrios Manipuladores de Eventos para um Unico Evento , . ... .. . 23 1 Encontrando Objctos c Eventos por Meio do Editor de Cdigos' , , . , , , .. , 232 Mltiplos Eventos com um Manipu lador . .. ... . ... .. .. .. ... . .. ... . 233 Mais In fomlaes sobre os Controles .. ... . .. ... . ... .. .. .. .. .. ... .. . 233 Criando Grupos de Botes de Opo .. .. .. ... . ... .. .. .. . . ....... . 234 Adicionando uma Ca ixa de Seleo ao Exemplo de Fi 1er .. .. . .. . ... . .. 236 Va lidao de Entradas' ... , ... , , .. , , ... , ... , , . , , , ...... , , , . , , .... 238 Usando a C lasse MessageBox .. , , .. , , ....... , , . , , , ....... , , . , , ... , 24 1 Parmetros' .. , .. , , ... , .... , .. . . , .... , ... , ... ... ... , , .. . 242 Obtendo Resultados .. .. . ..... . . . .. ... . ... .. . .. .. . ... .. . 243 Controles Ocultos . .... . . . . . . .. .. .. .... . ... .. . .... .. . .. 246 Timer' . , ... . , ... , .. . . . ' , . .. . .. ... ' ... .. .... . , ... 247 Noti fy l con . , , .. , , .. , , ... , , . , , . . . . . . ... . , ... .. .... . , , .. ,248 ErrorProvi der' . , , .. , , .. , , .. , , .. . . . ..... , .... .. .. . .. , , .. , 249 Controles das Caixas de Dilogo ... .. ........ . .. .. ... . .. .. .. . 250 Construi ndo Suas Caixas de Di logo .. .. .. ... ..... , .. . . ..... .. .. . 254 Criando a Ca ixa de Dilogo ...... ... . .. ....... .. . . .... . . .. .. . 255 Con figurando o Resultado da Caixa de Dilogo' , . , , , .. , .. . ... . , , .. , 256 Exibindo a Caixa de Dilo"o' . , , .. , ... , ... , , .. , , ... .. .. .... , .. , 257 Resumo' .. ... .. . ... .. .." . .. , ........ .. ... . ... .. . .. . ... . . , .. . 259 P&R .. . .. ... .. . ... .. .. . ... . .. .. . .. ... . ... .. . ... ...... .. . 259 Workshop .. .. . . .. .. .. .. ... . . . . .. ... . ... .. . . .. ...... .. . 260 Teste' , , ... , , .. , , .. , ... , , , . , , .. , ... , , .. , , ... .. . , , . , , , .. , 260 Excrcfcios ... , .. , ... .. ... , .. .. , .... , .. , , .... , .... , ... 260

XIV

Aprenda Visual Basic .NET em 21 Dias

Dia 10 Construindo a Interface com o Usurio com os Formulrios da Web 263 Modelo de Programao da Web . . ................. . ............. 263

ASP,NET ........ . ................................. 265 Como a Criao de Programas com Base na Web Difere da de Programas com
Base no Windo ws ' .. .. .. . ....... .. .. .. ... . ... .. .. .. ....... .. . 266

Usando os Controles-padro dos Formu lrios da Web ... .. .. .. ... . .. . . .. 268


Usando os Controles Avanados dos FomlU lrios da Web ..... . ..... .... 277

Usando os Controles Va 1i dator ........................ . . .... ... . . 279


Resum o ' .. ... .. . ... .. .. . ... . .... .. . .. ... . ... .. .. . ...... ..... P&R .. . .. ... .. . ... .. .. . ... .. . . ....... . . .. . . ...... .. . .. Workshop .. .. .. . ... .. ... . .... . ... . .. .. ...... .. . .. Teste' ..................... . .. . . . . .... . ..... .. ..... ..... Exerc c io' .................................................
Dia 11 Introduo aos Bancos de Dados

283 283 284 284 284


285

Um Banco de Dados a Soluo para Todos os Problemas Cot id ianos' ...... 285 A Dec Iso E Tomada' . .. .. ...... ... . .. ... . ... .. .. .. ... . ... .. . 286 A Passagem para um Banco de Dados Real . ... . ... .. .. .. ... . ... .. . 287 Uma Introduo SQ L' . . .. . ....... .. .. .. ... . ... .. .. ...... .. . .. 288 Recu perando Registros com a Instruo SELECT ........ .. ..... . 288 Adicionando Novos Registras' ...................... .. ..... ..... 290 Alteran do Registras' ............................ .. . .. . . ..... 291 Removendo Registros Indesejados' .. .. .. .. ... . ... .. .. . . . .. . ... . .. 29" Para Onde Ir a Partir Daqui Abordando a SQL' .. . ... .. .. . .. . . . .. . .. 29" Problemas Comuns dos Bancos de Dados e Suas Solues' . .. . .. .. . ... .. . 293 Incons istncias de Atualizao . . ..... . .......................... 293 Campos Multivalorados ....................................... 297 Associaes: Consultando Vrias Tabelas de uma S Vez ' . .. . .. . .. ... . 298 Re lacionamentos Mu itos-para-Muitos ... . .. ... . ... .. . ... . .. . ... . .. 300 Integridade Referencial .. .. ...... .. .. .. ... .. .. .. .. .. . .. . ... . . . 300 Criando Chaves Prim rias ................ . .. ..... 301 Criando o Banco de Dados de Exemplo ' ................ .......... 304 Access 2000 ou Access 2002 ...................... . .......... 304 MS DE e SQ L Server 2000 . ....... .. .. .. ... . ... .. .. . .. . ... .. . 305 Testando a Confi gurao com $ystem. Data .. ... . ... .. .. ... .. . ... .. . 305 Resunlo . .. ... .. .. .. .. . ... .. .. .. ... . .. .. . . .. . .. ..... .. . .. 307 P&R .. .................. . ............. . . . . .. .. ..... ..... 308 Workshop ..... ....... . ... . .. . .... . .. .. .. ..... ..... 308 Teste' .. ... .. . ... .. .. . ... .. .. ... . ... .. . . .. . ...... .. .. . 309 Exerccios .. .. . ... .. .. .. ...... .. .. .. ... . ... .. .. .. .... .. .. . 309
Dia 12 Acessando Dados com a Plataforma .NET 311 Uma Viso Geral do Acesso aos Dados na Plataforma .NET .. .. . .. . ... .. . 3 11

OADOeoOLEDB 3 12

Sumrio ADOoNET o o o oo o o oo o o oo o o oo o o oo o o o o" oo o o o o oo o o o312 Tareras-padro dos Bancos de Dados o o o.. o.. . ... o.. o o .. . . o o. o o314 Conectando-se ao Banco de Dados o o.. o. o . o.. o o o. o . o o.. . 3 14 Executando uma Instruo SQL' .... .. . o o o o o. .. . o o o o o .. . .. 3 19 Recuperando Dados o. o o o. o o o. o o o.. o. . o o.. o. o o .. o. . o o o oo o o32 1 Trabalhando com Data Sets ' .. o o o oo o o. . o. . o o.. o.. o .. o.. o o oo o o323 Inserindo Dados em um DataSet . o o... o.... o. . o... .. o.. o o... o323 Navegando pe los Dados ' . . ....... ... . .. ... . . . .. . . ... o .. . .. 326 Editando Dados (Adicionar, Editar e Excluir)' ... . ... .. . o o. . . ... .. . 329 Editando Registros . .. o . o. o .. . o .. .. o . .. o .. . o .. . o . .. . .... . o . 33 1 Atualizando o Banco de Dados o. o o o.. o o.. o o o. o o o. o o o o o. o o oo o o334 Trabalhando com Mltiplas Tabe las o... o... o o. o o o... . o o. o o... o346 Visualizaes ' . . ... .. .. . ....... ... . .. ... . ... .. . .. . ... .. . 348 Vinculao de Dados . ... .. . ....... ... . .. ....... .. . .. . ... .. . 350 Vinculao de Dados com os Fonnulrios Windows ' .. .. .. .. . ... . .. 35 1 Resumo ' .. ... .. . ... .. .. .. .. .. .. ... . .. ... . ... .. .. ...... .. . 354 P&R o. o o o. o o o o. o o.. o o.. o o o. o o o.. o o.. o o o. o o o. o o . o oo o o o. o o355 Workshop .. .. . .. ... . o.. .. .. . . .. ... .. .. .. . .. o... o.. . 355 Teste' .. ... .. . ... .. .. .. .. .. . . . .. ... . ... .. . o . .. .. ... . 355 Exercc ios' . .. . ... .. .. . .... . o . .. o. ... .. . o .. o .. . .. 356
00 0 .0 0 .0 0.0

Dia 13 Usando o Server Explorer

357

O Que o Server Exp lorer .. . ....... . .. ... . ... .. . .. . ... .. . 357 O Que um Servio?' . .. o ....... .. .. . o ... .. .. .. .. .. ... . ... . .. 359 Examinando os Servios' o o.. o o o. o o o.. o o.. o o o. o o o. o o.. o o o o. o o.. o o359 Caminho a Ser Percorrido para Estabelecer uma Conexo com o Banco de Dados . . . o. . o. . . . o. . o o. . . o. . . . . . . o. . . o. . . . o. . . o. . . o. . . . . . . o o. . . 363 Trabalhando com os Servios' ....... .. .. .. ... . ... .. .. .. ... . ... .. . 364 Visualizando os Serv ios' .. ... . ... .. ... o ... . . .. o . o. o o .. o .. 365 Conectando-se com Outro Servidor' o.. o . .. o . o. o . oo o o oo o o . o. o o. o . o366 Escrevendo Programas Que Usam os Servios' .. o o.. o o... o... o o.. o o.. o366 Escrevendo Cdigos de Acesso a Dados com o Server ExploreI' . o o. o o o.. o366 Resumo' .. ... .. . ... .. .. .. ...... ... . .. ... . ... .. .. .. ... . ... . .. 379 P&R .. . .. .. ... . ... .. .. .. .. .. .. .. .. ... .. . ... .. .. .. .. .... . . .. 380 Workshop' . ... .. . o o. o o .. o.. o o. . .. . o o. o o .. o . . 380 Teste' o o.. o o o. o o... o o. o o o. o o o.. o... o o o. o o.. o .. o. o o o o. o o380 Exerccios' .. o.. o o.. o.... o o.. o... o... o o.. o... ... o . o.. o380
Dia 14 Introduo Programao Orientada a Objetos 381

Viso Geral da Programao Orientada a Objetoso o o. o o o.. o... Comparando a Programao Orientada a Objetos com a Linear' Usando os Objetos na Organ izao do Cdigo .. . ... .. .. .. Conceitos Importantes na POO o ... . .. ... . .. ... .. .. .. .. .. Classes, Objetos e Instncias o o o. o o o.. o... o o o. o o.. o ..

o o o. o o o. o o381 ... . . .. .. . 387 ... . o .. .. . 384 o .. o o .. o . . 385 o.. o o o. o o385

XVI

Aprenda Visua l Basic .NET em 21 Dias


Propriedades' ..... . . .. ... ... .. . . .. . .. . ..... .. ... ....... 387 Mtodos ' .. ... . .. . .. ... . . . . . . . . ... .. .. . . .... . . .. . .. 388

Herana' ... .. .. .. .. .. .. ... . .. ... . ... ... ..... ... ...... .. .. . 389 Construtores' .. . ... .. .. . ....... .. .. .. ... . . .. .. ... ...... .. . .. 393
Projetando um Aplicativo com o Uso da roo .... . . .. .... .. .. . ....... 396 Ident ificando os Objelos ................... . . ... .. ... ....... 397

Determinando as Propriedades e Mtodos' ..... . . .. .... .. . ... ...... 398


M odelando Seus ObjclOs' . . ........ . ... . . . .. . .. . .. .... . .. . .. 399 Resumo . .. ... .. . ... .. .. . ... .. .. .. .. .. ... . ... .. . - ..... .. . 400

P&R .. . .. .. ... . .. ... . ... .. .. . . . . ... .. .. .. .. . ... . .... .. . 400 Workshop' ................................................ 400 Teste' ...................... .............. .. ......... 401 Exercidos .. .. . .. .. .. . ....... . .. ... .. .. .. . ...... .. . 40 I
SEMANA 2

Reviso

403 405

SEMANA 3 Viso Geral Dia 15 Criando Objetos no Visual Basic .NET

Criando Objetos .................................. .. . ... Declarando uma Classe Nova no Visual Basic .NET .. .. .. ... .. Herana' ... .. . ... .. .. . ....... .. .. .. ... . ... .. .. .... . Adicionando Propriedades ' . ....... .. .. .. ... . ... .. . .. ... . Usando Rotinas de Propriedade para Validar Dados' ...... .. . ... ...... 413 Criando Mtodos' . ... .. .. .. .. .. ...... ... . ... ... . ... . .. .. ... 41 7 Adicionando Eventos' ........................... .. . ... ...... 423 Defin indo e Usando Interraces' ..... .. . . .. ... . ... .. .. .. .. . ... . . 425 Usando os Objetos Que Voc Criou' ................... . . .. .. .... 434 Espaos de Nome' .. .. .. . . . . ... . ...... ... . ... .. . .. . .. . ... ... 434 Criando e Usando urna DLL da Biblioteca' ............ . .......... 436 Resunlo . .. ........... .. ....... . ....... .. . ... ... . .. . ... ... 438 P&R .. . .. ... .. . ... .. . ... .. .. .. ... . .. ... . ... .. .. .. . ... . .. 438 Workshop' .............. . ......... . ....... .. .. ...... .. . 438 Teste' .. ... .. ...... . ... .. .. .. . . ... .. .. .. .. . . ... .. .. . 438 Exerccios' .................... .. ............. .. .......... 439
Dia 16 Formulrios Windows Avanados

407 ...... 407 . .. .. . 408 . .. .. . 408 . .. .. . 410

441 Menus ......................................... .. .......... 44 I Adicionando um Menu a um Formu lrio' ............. o 441 Os Teclados e os Menus ' . . ........ . .. .. ... . ... .. .. .. . ... .. . 444 Adicionando Cdigo .. .. . ........ .. . .. ... . ... .. . .. . ... .. . 445 Algumas Sugestes ' ..... . ........ . .. .. ... ... . .. .. ...... .. . 448 Programas de Interrace de Documentos Mlt ip los ......... . .......... 449 , O Que E uma Interrace de Documentos Mltiplos? ... .. ... . . .. ... .. . 449

S um rio

XV II

Adicionando o Fonnulrio pai ............... . .... ... .. . .. ..... 450 A MD I e os Menus ' ... . ... .. .. .. ... . .. ... . . . .. . . .... .. . . . . . 45 1 Controles Avanados dos Formu lrios Windows' .. . . . .. . . ...... .. .. . 458 TreeView 459 ListView 462 Controles Splitter 463 Resumo ' ............... . ... .. . .. . .. . .... .. . ... ..... 470 P&R Worksho p Teste Exercc ios' ..................
Dia 17 Usando o .NET Framework

.. .............

.. .........

47 1 47 1 47 1 472

473 Fluxos e Arquivos' .............. . ....... . .... .. ...... ..... 473 , O Que E um Stream? .......... .. . . .. ... . .... .. ...... .. .. 474 Arquivos e Diretrios' ............... .. . .. . .... .. .. . .. .... 474 Lendo um Arquivo de Texto ' ...... .. .. .. ... . .. .. . ... . . . .. . . 476 Gravando em um Arqu ivo de Texto ' . ... . .. ... . ... .. . . .. .. . ... .. . 478 Desenhando com as Classes de Figuras .. .. .. .. ... .. .. . .. . . .. . .... . 492 Exam inando as Classes de Figuras' .................. . ........... 492 Onde Posso Desenhar? . .. . .... . .. .. .. .. ... . ... .. . .. . .. ... . 498 Desenhando Fomlas . .. .. . ... .. .. ... . .. ... . ... .. . . .. ... .. . 503 Salvando Figuras ' . ... . .. .... . .. . .. ... . ... .. . . . .... .. . 506 Resumo . .. ... .. . .. ... .. . ... .. .. . .. ... . ... .. . .. . ... .. . 509 P&R .......................... . ....................... 509 Worksho p' ...................... . ............. . ........ .. 510

Teste 510 Exerc cios' ... . ... .. .. . ..... . . . .. ... . ... .. . .. ...... .. . 5 10
Dia 18 Retoques Finais

511

Documentando Seu Aplicativo' ....... . .. ... . ... .. .. .. . ... . .. 5 11 Crie So lues Mais Simples ' ... . .. .. .. .. ... . ... .. . . .. ... .. . 5 12 Evitando Conjecturas' ........................... . .......... 515 No comente o bvio, S6 o Que For Confuso' .................... 516 Documente o Sistema, e No Apenas o Seu Cdigo ...... . .......... 516 Melhores Prticas e Padres de Cod ificao ' . .. ... . ... .. . .. . . .. ... .. . 5 18 Nomeao de Variveis, Controles e Objetos ' ... . ... .. . . ... .. . .. . . . 519 Blocos de Comentrio' . .. . ... .. .. ... . .. ... . . .. . .. . . . .. .. . .. 52 1 Usando o Controle do Cdigo fontc ................. .. .. .. ... ... 522 Extraindo o Cdigo' ............................ .. ...... .... 522 Annazenando o Cdigo' .. . ....... .. .. .. ... . ... .. .. .. ... . . .. .. . 526 Visua lizando e Retomando Suas Alteraes'" .. . ... .. .. .. ... . . . 528 Cons ideraes sobre Segurana no Uso do Visual Source Safe . . . .. .. . . . 529 Resumo' .................................................... 529

XVIII

Aprenda Visual Basic .N ET em 21 Dias

P&R ..... .. .. . ...... .. . . ... . .. . .. . .... ... . .. ....... 530


Workshop' . ... .. . ... .. .. . ...... . . . . ... . . ... . .. . . . . .. . .. 530

Teste' . .... .. .. .. .. .. .. .. . ... . . ... . ... . . .. .. ... ..... . .. .. . 530 Dia 19 Implantando Seu Aplicativo 53' Int roduo Implantao ' .. . ....... . . . . .. ... . ... .. .. . .. . ... . .. 53 1
Criando uma Instalao Simples . .. . . .. .. ... . .. .. . . ... . . . .. .. . 533 Crie o Projeto e a Soluo ' . ....... . . .. .. ... . . .. . .. ... .. . .. .. 533
Arqu ivos de Configurao' ......... .. . .. . .. . ..... ... . .. . ...... 540

Implantaes de Mltiplos Projetas ' . .. . . Resum o' .. ... .. . ... .. .. . ... . ..... P&R .. . .. .. ... . ... .. .. . ... . ... . . Workshop' ....... . . .... .. ... . Teste' ........... .... . ... .. Exerccios ......... . . .. ... ..
Dia 20 Introduo XML
,

... . .... ... . .. . . . . .. .. . 542 ... . ... . . ... . .... . . .. . .. 545 ....... . . .. .. ...... .. . .. 545 . . . .. .. .... .. . ... ...... 546 . . . . ... . ..... . ...... ..... 546 . . .. . . . . ..... .. . .. . . ..... 546
547

O Que E XML? ....... .. .. ... . .. . . .... .... .. . .... .... . 547 E[ementos .. .. . ... .... . .... ... . ... . . .. . . ...... .. .. . 55 1 Atributos' .. .. . ... .. .. . ... .. .... . . . . .. . . . ... .. . .. 552 Esquemas' . ... . ... .. .. . ..... . ....... . .. .. ...... .. . .. 553 Trabalhando com a XML ............. .. . ..... . .. .. .... ...... 556 O Document Object Model .......... . . .. ... . .... .. . .... ..... 556 Objetos de Leitura e de Gravao' .... . . .. . .. . .... .. . .. . .... . . 559 LendoXML ,, 56 1 Gravando XML . .. ... .. . ........ . . . .. ... . ... .. . . . .. . ... .. . 566 Resumo . .. ... .. . ... .. .. .. ... . . . . . .. ... . ... .. . . . ...... .. . 569 P&R .......................... . .............. .. .......... 569 Workshop' .... .. . .... . .. ... ..... ... ... . ... .. . .. . ... . .. 571 Teste' .. ... .. . ... .. . .. ... .. .. .. .. .. ... . ... .. . . .. .. ... . 571 Exercc ios' ... . ... .. .. . ....... .. .. .. ... . ... .. .. ...... .. . 57 1
Dia 21 Criando Servios Web com o Visual Basic .NET 573

O Que um Serv io Web? ' . . .... . .. .. .. .. ... . ... .. ... . .. . ... .. . 573 O Sim p[e Object Access Protocol ..... .. .. .. ... . ... .. . .. . .. . ... .. . 575 O Protocolo' .................................. . .......... 575 Web Service Description Language (WSD L) ........... .. .......... 576 Discovel)" ... . .. . ... .. .. ... . ... . .. .. .. ........ .... ... .. . 579 Criando um Servio Web Simples ' . . .. ... . .. ... . ... .. .. .. . ... . .. 580 Criando o Projeto ' .. .. .. . ....... . .. ... . ... .. .. .. . ... . .. 58 1 Adicionando o Cdigo' . ........................ .......... 584 Compilando o Servio Web' ........ .. ............. .. .......... 585 Criando um Serv io Web Cliente .... .. ............. . .......... 587 Criando o Projeto' .. .. .. . ....... . . . . .. ... . ... .. . . .. .. . ... . .. 588 Adicionando O Cdigo' . ... ... . .. .. .. .. ... .. . .. ... .. .. . . ... . 589

Sumrio

XIX

Um Servio Web Mais Complexo Criando o Servio' .. .. . Testando o Servio Web' Criando o Cliente ' .. . Adicionando o Cdigo Resumo P&R .. Workshop ' Teste' . Exercfc ios SEMANA 3 Resumo

592

. . . .. . . .. . ...


597 596 597


600 604

. . . .. . . ... .. . . . . .. .

605 605 605 605


606

Apndice A - Respostas dos Testes/ Exerccios

609

Respostas do Dia [ Teste' ... Exercfcios Respostas do Dia 2 Teste' .. Exercfc io Respostas do Dia 3 Teste' ... Exerccios Respostas do Dia 4 Teste' .. Exercc io Respostas do Dia 5 Teste' ...... . Respostas do Dia 6 Teste' .. . Exercc ios Respostas do Dia 7 Teste' ... Exerccios Respostas do Dia 8 Teste ' .. . Exerc cios Respostas do Dia 9 Teste' .. . Exerccios Respostas do Dia 10 Teste' ... Exerccios

. . . .. . . ... .. .

609 609 610 61 I 611 611 611 611 612 613 6\3
614

615 615 615 615 615 617


617 617

. . . .. . . .. . ... . . . ...

. . .. . . .

... . ..

619 619
620

621 621

622
623 623

67'

-,

xx

A prenda Visual Bas ic .NET em 21 Dias

Respostas do Dia 11 ... ... ..

Teste' .. .. . .. . .. . .. ... . .

Exerc cios' Respostas do Dia 12 . . .. . .

. . . . . . . . . . . . . . . . 627 . . . . . . ... ... .. . . . . . . . . 628

.. .

627

. . . .. . . .. . ...

. ...... . . . . . . 629

. . . . . . . .. . . . 630 . . . . . . . . . . .. 630 Teste' . . . . . . . .. . . .. . .. . . . ... . ... . ... . . . . .. . . . . . . . . . . . . . 630 Respostas do Dia 14 ... .. - . . .... . . . . .. ... . ... .. . . . . - . . . . . . . . 630 Teste' .. ... . . . . . ... . ... . . . . . . . . . . ... .. . .. . .. . .. . . . . . . . . . . 630 Exercc ios' .... . ............ . .. .......... . .. . ... ........ . 630
Exercc ios' .. . . .. ... .. . . .. .. .. .. . . . . .... . .. .. . Respostas do Dia 13 .... . .. . . ... ... . .. .. ... . . . ... . Respostas do Dia 15 ....... . ....... . .. .. . .... .... . . . . .. .. .. . .. Teste' .. . . . .. . .. . . . . . . ... .. .. Exerc cios . . . . . . . . . . . . . . . . .. . ... .. . . . .... Respostas do Dia 16 ' . ... . . . . ... . .. . .. ... . ... .. . . .. ... . . . Teste ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...... . . . Exerc c ios' . . . . . . . . . . . . . . . . . . . .. . .... . .. . .. . . . ...... . .. Respostas do Dia 17 . . ... . ... . . .. . .. ... .. . .. . .. . .... . ... ... . Teste' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... .. . .... .. . .. . .. Exerccios ... .. . . . . . .. . . . . . . . . . . .. . ... .... .. Respostas do Dia 18 . ... . .. .. . Teste' ............. . .. .. . .. . .. .... . .. Respostas do Dia 19 ..... . .. .. . . . . ... .... .. .. .. Teste' .............. .. .. . . . . .
Exerc cios Respostas do Dia 20 .. . ... .. . . . . . . . .... . .. . . .... . . .. . Teste ' .. ... .. . ... . . ... . .. . . ... . ... . . . . .

Teste ' . . .... . ...... .. . . .... ... . . . . . ... . . ... ... .. ... .... . . . 629

63 1

63 1 63 1
633 633 633 638 638

........ ..... .. .. .. .. .. . .. ..... . . .. . . .

638
639 639

Exerc c ios ... .. .. ... .. . .. . .. . .. ..... . ... . . . . . Respostas do Dia 21 .. .. . .. . .. . . . . . . Teste' .. . . . .. . ... .. . . . . . .. . .. .. ... . . .. . . ... . .. .. .
ndice

640 640 640 . . 64 1 . . 641 .. 641 . . 644 .. 644


645

Introduo
Bcm-vindo a uma lio estimulante e informativa de 21 d ias sobre o Visual Basic .NET, a mais nova encarnao da linguagem de programao mais popu lar do mundo. Este livro foi planejado para fornecer a voc uma introduo ao .NET Framework e ao Visual Basic .NET, e faz-lo comear a programar aplicativos reais o mais rpido possvel.

Viso Geral

o .NET Framework o conjunto bsico de conceitos e tecnologia subjacente ao mais novo grupo de ferramentas de desenvolvimento da Microsoft e constituir a base para a nova srie de servidores, apli cativos e servios com base na Web implantados ao redor do mundo. Como j de se esperar, a plataforma .NET no algo que possa ser completamente discutido em uma hora ou mesmo em 21 dias, portanto, este livro ter uma abordagem mais especifica. Voc precisar se tomar produtivo rapidamente e isso o que conseguir nos prximos 21 dias enquanto ler este livro e trabalhar com os exerccios dele. Pelo fornecimento dos elementos bsicos da linguagem do Visual Basic .NET e li ma expl icao s uficiente do prprio .NET Framework, voc estar pronto para j comear a programar e preparado para continuar aprendendo ao progred ir. Desde o incio, importante observar um fato essencial sobre a plataforma .NET: a linguagem que voc lisa menos relevante do que foi no passado. O Framework (o conjunto de tecnologia em que toda a plataforma .NET est baseada) a prpria plataforma .NET e tambm pode ser acessado sem problemas por qualq uer linguagem .NET (incl uindo o Visual Basic, C#, C++ e outras). Essas so notcias excelentes tanto para os desenvolvedores novos do Visual Basic quanto para os experientes. O Visual Basic no mais uma linguagem de segunda classe, com certos recursos avanados do sistema operacional restritos apenas aos programadores que usam C++. Agora, qualquer sistema, independentemente do tipo, pode ser criado no Visual Basic. Essa independnc ia tambm significa que voc (ou sua empresa) est livre para escolher qualquer linguagem com aqual que ira trabalhar. Dada essa opo, mu itas pessoas, incluindo os autores deste livro, iro adolaro Visual Bas ic .NET. Sua sintaxe e est ilo fceis de usar o tornaram a linguagem de programao mais popular do mundo, mesmo com as limitaes que a verso anterior apresentava. Agora, com a plataforma .NET, nada ir imped i-la de ser usada em qualquer projeto de todos os tipos de empresa. Se voc estiver interessado cm aprender mais do que apenas o Visual Basic .NET - talvez a C# possa ser bem interessante - , continuar tendo um bom ponto de partida. Este livro vai fornecer uma abordagem de como usar o .NET Framework, conhecimento que pode ser transferido facilmente para qualquer linguagem .NET. Este livro foi planejado como uma srie de lies, cada uma representando a lgum conceito importante no desenvolvimento de aplcativos (como o acesso a bancos de dados) ou um trecho es-

XXII

Aprenda Visua l Basic .NET em 21 Dias

senc ial com conhecimento para tornar voc produt ivo (o uso do IDE, por exemplo). Essas lies podem ser examinadas em qualquer ordem, mas se voc for novo na atividade de programao em geral, ento, ser mais vantajoso seguir a partir do incio, na primeira vez que o livro for usado. A maioria das lies, mesmo a primeira, inclui algum exemplo de cdigo e exerccios para os quais ser necessria a elaborao de mais um pouco de codificao. Para aprovei tar ao mximo o tempo gasto no livro, tente realizar todos esses exemp los e exerccios. Nada aumentar sua compreenso desses tpicos mais rapidamente do que co locar a mo na massa e cod ificar.

Quem Deve ler Este livro?


Embora o objetivo principal deste livro sejam as pessoas iniciantes na at ividade de programao em geral e no Visual Basic .NET especificamente, ele ser t il a uma variedade maior de leito res. Se vocj for um programador do Visual Basic, ento, procure nos diversos tpicos do livro algumas das timas explicaes e exemplos que envolvam os novos recursos. Ser possvel per ceber que h mu itas diferenas no universo do Visual Bas ic 6.0, e o nvel de abordagem forneci do neste li vro deve ajudlo a fazer a transio. Se voc j for um programador experiente que no conhece o Visual Basic, poder ficar tentado a saltar ou ler de modo superficial grande parte das primei ras Iies. Independentemente de seu nvel de habilidade, ser bom examinar com detalhes a introduo (Dia I) para compreender o conceito geral da plataforma .NET e a abordagem do IDE (Dia 2) para ganhar ve locidade ao tra balharcom o Visual Studio .NET. Em seguida, poder passar pelo resto do livro com seu prprio ritmo, verificando por alto algumas das sees que abordam conceitos gerais de programao e se dedicando aos captulos que explicam como o Visual Basic .NET realiza tarefas avanadas, como a criao de objetos, o acesso a bancos de dados e a gerao de aplicativos na Internet.

o Que Voc Aprender


Este livro ensi nar a voc como criar vrios tipos di ferentes de aplicat ivos usando o Visual Basic .NET, incluindo tanto os cliente/servidor quanto aque les com base na Web. Quando passar pe los tpicos sobre o Visual Basic .NET, tambm aprender muito sobre o .NET Framework e conhe cer alguns servidores .NET, inclusive o SQL Server e o Internet Informati on Services. No que diz respeito ao projeto e arquitetura, voc aprender sobre os recursos orie ntados a ob jelos do Visual Basic .NET, como, por exemplo, a criao de classes e o uso de objetos, alm dos princpios bsicos da herana, sobreposio, anulao e outras funciona lidades avanadas fome cidas por esse tipo de programao. Na etapa de desenvolv imento que envo lve a interface ou sada, voc aprender a criar aplicat i vos ' Windows' por meio dos novos recursos de formulr ios do Visual Basic .NET, a construir interfaces com base em pginas da Web usando fo rmulrios da Web e a gerar um servio simples disponvel na Web que podera ser utilizado por qualquer linguagem ou plataforma de programa o capaz de acessar a rede e compreender a XML.

Introduo

XXIII

Nosso objetivo prepar-lo nos prximos 21 dias para que voc possa criar muitos de seus prprios apl icativos simples no Visua l Basic .NET e trabalhar como parte da equipe que est desenvolvendo um grande aplicativo Windows ou com base na Web.

o Que No Abordaremos
Apesar da discusso anterior sobre a independncia da linguagem e a importncia das tecnologias subjacentes, este um livro que tem como prioridade o Visual Basic .NET. Como tal, no abordaremos a C# ou qualquer outra linguagem .NET que no seja o Visual Bas ic. Mencionaremos a utilizao de bancos de dados, como o SQL Server, mas voc no precisar recorrer a livros sobre ele para obter detalhes completos sobre como configurar e gerenciar seu servidor de banco de dados. Tambm no pretendemos abordar todo o Visual Basic .NET neste livro. Essa uma linguagem portentosa, com muitos recursos. Apenas para listar todos eles e a sintaxe usada para empreg-Ias, preci saramos facilmente de um livro deste tamanho. Discutiremos o Visual Basic .NET com detalhes sufic ientes para que voc se torne produtivo ao us- lo e seja fornecido o conhecimento necessrio para que comece a projetar aplicativos que se beneficiem dos novos recursos da plataforma .NET.

Requisitos
J que se trata de um livro sobre o Visual Basic .NET, o requisito mais premente um sistema

que execute o Visual Studio .NET, e que tenha no mnimo as especi ficaes bsicas a seguir:
o

Sistema operac ional Windows XP Professional, Windows 2000 (Dalacenler Server, Advanced Server, Server ou Professional) ou Windows NT 4.0 Server. O Visual Stlldio se encarregar da instalao de qualquer pacote de servios. arquivos atllalizados de acesso a dados e da verso 6 do Internet Explorer, todos sendo req uisitos para o Visual Studio .NET. Hardware Pentium II com 450 Mhz ou equ ivalente, 128 MB de RAM, placa de vdeo com capacidade para resoluo de 800 x 600 pi xels, 256 cores e no mn imo I OB de espao em disco rgido. Uma unidade de CD-ROM necessria para instalao, mas voc pode colocar seus CDs em out ra mquina e instalar por meio de uma conexo LAN.

Alm do Visual Studio, os exem plos deste livro requerem a possibi lidade de acesso a um servidor Web que esteja na mesma mquina do Visual Studio ou tenha o SDK do .NET Framework instalado nela. O melhor a fazer se certificar de que sua mquina principal de desenvolvimento tenha um servidor Web em execuo nela, como no Windows 2000 ou no Windows NT. Outro requisito bsico usado pelos exemplos na ltima metade deste livro O acesso a um banco de dados, especificamente o SQL Server 7.0 ali 2000. Se voc no tiver o SQL Server, ento poder usar o Microsoft Data Engine (MSDE), que funciona de maneira semelhante ao SQL Server completo. Pode ser usado um banco de dados Access, se for esse o seu, mas ser preciso alterar alguns dos exemplos nas lies de acesso a bancos de dados para faz-los funcionar sem o SQL Server.

XXIV

Ap renda Visua l Bas ic .NET em 21 Dias

Habilidades Que Voc Precisa Ter


Este um livro destinado a programadores iniciantes, mas algumas habilidades bs icas so necessrias. Espera-se que voc esteja familiarizado com o uso de computadores com base em Windows, incluindo o sistema operacional que esti ver instalado para executar a platafonna .NET.

Copiar arquivos, imprimir, abrir arquivos no Bloco de notas e habil idades de edio bsica de texto
(recortar, cop iar, colar) so todas necessrias, e no sero explicadas nas li es. Saber como conectar sua mquina Internet e navegar em si les da Web tambm so habilidades exigidas .

Alm desse conhecimento bs ico em computadores, voc no precisa ser um programador ou

saber como construir bancos de dados. Qualquer conhecimento efetivo nessas reas provavelmente ser til, mas nossos exemplos e explicaes foram elaborados para serem claros mesmo para algum que nunca tenha tentado codificar antes .

o Site da Web
Este Iivro possui um site da Web associado a ele no endereo http: //www.makron.com.br . Localize a pgina do livro no site, digitando seu ttulo na caixa Pesquisa. Ao entrar na pgina do livro, procure o link MATERIAL COMPLEMENTAR. Voc pode fazer o downJoad de todos os cdigos do livro e alguns Iinks ou materiais complementares que achamos ser teis para o leitor com, preender o Visual Studio .NET. E claro que totalmente possvel usar este livro e acompanhar todos os exemplos, sem ser preciso visitar o site, mas em alguns dos exemp los mais longos, pode ser melhor economizar algum esforo em digitao fazendo o download dos arquivos que contm os cdigos.

Layout dos Captulos


Vinte e um dias um perodo longo, portanto, alm de dividir as lies em dias, organizamos o livro em sees com durao de trs semanas (ou partes). Na primeira parte, nos dedicaremos a introduzi-lo nos conceitos gerais de programao e da platafonna .NET, e abordar a sintaxe e tcnicas bsicas para a criao de programas COI11 o Visual Basic .NET. Na segunda parte nos aprofundaremos no .NET Framework para fomecer uma compreenso mais detalhada dessa base essencial de toda a programao e tambm discutiremos os fundamentos da criao de programas reais, como a maneira de gerar uma interface com o usurio (com formulrios Windows e da Web) e como trabal har com bancos de dados. A llltima pm1e introduzir alguns dos tpicos mais avanados da programao .NET, incluindo a cfiao de seus prprios objetos, a implantao de seu aplicativo nos computadores de outras pessoas e o trabalho com a XML e os servios da Web. Como falamos anteriormente, tente percorrer essas lies em ordem, mas fique vontade para saltar adiante se houver um tpico sobre o qual queira muito ler mais no momenlo que desejar.

Introduo

xxv

Retorno
Trabalhamos duro para tornar este Iivro urna ferramenta til de aprendizado da plataforma .N ET e uma aquisio valiosa para sua biblioteca de desenvolv imento. Se voc achar que deveramos ter gasto mais ou menos tempo em algurn tpico especfico ou tiver sugestes para melhorar o livro, faa cantata conosco (c 1i entes@makron.com.br). Tentaremos incorpor-las em livros futuros e, se for o caso, na prxima reviso deste mesmo volume.

Convenes Usadas Neste Livro


Este livro usa vrias convenes para ajud-lo a priorizar e recorrer s informaes que ele contm:

NOTA

As notas fornecem informaes teis em destaque, que voc pode ler imediatamente ou retornar a elas sem perder o fluxo do tpico que estiver examinando.

DICA

As dicas rea lam as informa es que podem tornar sua programao no VB mais eficaz.

Os alertas de cuidado concentram sua ateno em problemas ou efeitos colaterais que podem ocorrer em situaes especificas.

Faa
Os q uadros FaaJNo Faa enfatizam prticas boas que voc deve adotar ... . .. e ruins que devem ser evitadas.

Novo TERMO

Os cones Novo Termo assinalam locais onde uma nova lenninologia foi usada e definida pela primeira vez. Essa terrninologia aparece destacada com uma fonte em itlico. Os cones Cdigo so usados em exemplos de cdigo que o usurio deve inserir. Os cones Anlise apontam para discusses com explicaes sobre os exemplos de cdigos.

CDIGO

ANLISE

o cdigo apresentado em fonte monoespaada.

SEMANA

Viso Geral
Durante esta parte, voc aprender varias tpicos essenciais: O Visual Basic .NET c o conceito de programao (Dia 1). Configurao e uso do Visual Studio .NET para comear a escrever programas (Dia 2). A sinta"e e as tcn icas de programao do Visual Basic para tipos de dados, procedimentos e variveis (Dia 3); o controle do fluxo dos programas - laos e instrues condicionais (Dia 4); e o tratamento de erros (Dia 6). Organizao e projeto de uma soluo no Visual Basic .NET (Dia 5). Conceitos importantes relacionados ao desenvolvimento orientado a objetos com os quais voc trabalhar por todo o livro (Dia 7).

Esta parte importante. Ela define os fundam entos do conhecimento bsico nos quais todos os outros conceitos de programao do Visual Bas ic .NET se basearo. O Dia I preparar voc para comear a explorar e aprender o Visual Basic, por meio da introduo dos conceitos fundamentais de programao e da plataforma .NET, junto com um breve histrico do prprio Visual Basic. No Dia 2, aprenderemos a usar o ambiente de desenvolvimento com todos os recursos do Visual Studio para criar projetos . Nos Dias 3 e 4, voc ir programar com muitas informaes sobre a sintaxe e conceitos (incluindo variveis, laos, instrues i f e mais) que faro parte de todos os programas do Visual Basic escritos desse ponto em diante. No Dia 5, voc conhecer todos os tipos diferentes de projeto que poder criar no Visual Basic .NET e aprender a adapt-los arquitetura geral do sistema. Para concluir, os Dias 6 c 7 retornam ao mundo prtico da codificao cm que aprenderemos a lidar com erros e a usar objetos em programas. Esta parte fornecer as informaes de que voc precisa para prosseguir com a leitura do livro, provendo todos os detalhes sobre os quais os outros captulos se desenvolvero.

SEMANA

DIA
Bem-Vindo ao Visual Basic .NET
a segUI r:

Hoje, o introduzirei no universo da programao do Visual Basic respondendo s perguntas .

O que programao e por que seria interessante aprend-la? Como o Visual Basic se encaixa em tudo isso? O que .NET?

Nos dias de hoje, o computador j coisa trivial, e muitas pessoas que conheo passam o dia inteiro trabalhando com eles. Mas, mesmo assim, a pergunta mais comum : "O que um programador de computadores faz?" . Essa pergunta tem sido feita tantas vezes, que na lio de hoje, usarei um pouco do tempo discorrendo sobre o que programar e por que voc gostaria de fazer

ISSO.

Compreendendo a Programao de Computadores


Embora falemos com freqncia em computadores no que diz respeito ao hardware ( comum ouvir comentrios como "Tenho um Pentium III com 600 MHze 256 MB de RAM", por exemplo), s isso no o bastante. A CPU (Central Processing Unit ou unidade central de processamento do com putador), por exemplo, pode realizar muitas tarefas importantes como clcu los matemticos ou a transferncia de dados entre vrias partes do sistema. Sozinho, no entanto, no capaz nem mesmo de ler um arquivo no disco rgido. Um programa de compulador um con-

Dia 1

junto de instrues para todos esses elementos de hardware, em geral escrito para execuo de alguma tarefa que esse no poderia concluir sozinho. Todas as operaes bsicas que envolvem o uso de unidades de disco, memria, monilare impressora so complexas. Um programa que tivesse de interagir com essas operaes gastaria a maior parte de seu tempo nelas, e s6 um pequeno percentual seria empregado em sua finalidade real. Escrito no hardware, um programa para calcular os pagamentos de uma hipoteca provavelmente teria centenas ou mi lhares de linhas para gerenciar a exibio e outras questes, e apenas algumas li nhas para fazer o clcul o. Assim a programao era fei ta no passado, sem que fosse muito produtivo porque mu ito pouco tempo podia ser gasto na finalidade real do aplicativo. O que se precisava era de alguma maneira pela qual todos esses detalhes fossem manipulados para que os programas pudessem se dedicara suas tarefas especficas.

A Funo dos Sistemas Operacionais


Para fornecer essa camada bsica de funcionalidade nos equ ipamentos, os sistemas operacionais foram criados. Eles mesmos so programas de computador, mas sua funo manipular todos os detalhes de gerenciamento de memria, entradas/sadas do disco (E/S) e outras tarefas de nvel inferior. Quando h um sistema operacional (OS, Operat ing System) em um computador, outros programas podem ser escritos que no tenham de lidar com todos os detalhes de nve l inferior; se os programas precisarem abrir um arquivo ou formatar um d isquete, podero solicitar ao sistema operacional que execute essa funo para eles. Examinando isso graficamente (veja a Figura 1. 1), voc poder vis uali zar as relaes entre o hardware do computador e o sistema operacional, ou desse com outros programas, como vrias camadas de funcionalidade.

1.1 O sistema operacional se toma a iII/e/face emre o equipamelllo do computador e seu programa. permitindo que voc evile cdigos especficos de
FIGURA

Aplicativo do Usurio (incluindo seus programas!)

Sistema Operacional Drivers de Dispositivos Componentes do Hardware Drivers de Dispositivos

Iwrdll'lIrc.

Com freqOnc ia, os relacionamentos no so definidos com muita clareza; um programa pode precisar acessar o hardware diretamente (sem passar pelo sistema operacional) para usar um recurso dele ao qual o sistema operacional no d suporte ou para tentar melhorar o desempenho. Isso decerto foi o que aconteceu, no incio, com um dos pri meiros sistemas operacionais de r es, no qual muitos programas tinham de interagir diretamente com o hardware . Essas limitaes significavam mais trabalho para as pessoas que quisessem escrever softwares para rcs, j que cada programa precisava manipular suas prprias impressoras e outros detalhes. Ao mesmo tempo em que verses sucessivas dos sistemas operacionais forneciam um aumento na funcionali-

Be m -Vi n do ao Vis u a l Basic .NET

dade, se tomou mais fci l escrever programas para eles. Por fi m, o Windows substituiu esses sistemas. Uma das maiores melhorias oferecidas pelo Windows que o sistema operacional agora prov recursos de interface de usurio para outros programas. No Windows, se um programa de computador precisar mostrar uma caixa de dilogo na tela (como a da Figura 1.2), ele apenas solicita ao sistema operacional para exibi -Ia e fornece a mensagem que a acompanhar. Para acessar toda a funciona l idade que o sistema operacional prov, um conj unlo de APls (Appl ical ion Programming Interfaces) disponibil izado. Essas AP ls representam a exposio de todos os recursos do sistema operacional e podem, portanto, ser usadas em seus programas.

FIGURA 1.2

O Windows manipula a

~~ ...

daIo(J boxl

exibitio de elementos de GU!.s (Gl'aphicaf


UseI' Ime/faces.

p.,tef ... Gr~lcel Use. Interf~e.

fme/faces gr4ficas com o usurio) como esta caixa de dilogo. o que fa= pane do. servios que ele fornece aos programas.

II '" II

o resultado de todas essas melhori as que cada programa tem de manipular cada vez menos
operaes genricas do computador e pode, portanto, se dedicar a sua fi nal idade real. O utro grande beneficio da remoo de cdigos especficos de hardware dos apli cativos que, quando ocorrem alteraes no hardware (impressoras e unidades novas de disco rgido, c r us mais velozes), o sistema operacional pode ser atuali zado para manipu lar o equ ipamento novo, mas os programas executados nesse computador no devem ser afetados. O que isso signi fica para voc como programador do Visual Bas ic? Bem, significa que poder criar programas de computador para reali zar uma tarefa espec fi ca sem ter de saber nada sobre como o Windows desenha as figuras no monitor, emi te documentos na impressora ou salva arqu ivos no disco rgido. Voc se tornar produti vo rapidamente, com a ajuda deste livro.

o Papel das linguagens de Programao


Ento, agora voc sabe o que o sistema operacional fornece, mas e os programas propriamente ditos - como so criados? Antes, neste captulo, defini um programa de computador como um conj unto de instrues para o hardware. J que o hardware s pode real izar operaes re lativamente fceis, as instrues tambm devem ser simples. O resultado final do programa um cd igo que o hardware pode entender, chamado com freqnc ia de linguagem de mquina ou cdigo nativo. As instrues, depois de carregadas na memria pelo sistema operacional , so compostas de comandos como "transfira a memria de um local para outro" ou "execute uma funo matemtica com os valores". Milhares desses comandos formam um programa comp leto.

Dia 1

possvel escrever programas usando di retamente esse cdigo nati vo, com a criao de um arquivo no disco rgido repleto de instrues, mas seria necessrio muito trabalho para produzir at mesmo um programa mais simples. Para evitar todo esse esforo e permitir que os programadores se dediquem fina li dade de seus programas, linguagens de nvel superior foram criadas. Essas linguagens permitem que voc use instrues mais avanadas e complexas que so, ento, convertidas para as diversas instrues necessrias que sejam correspondentes s outras na linguagem de mquina. Uma nica linha de uma linguagem desse tipo provavelmente poderia se transformar em dez instrues separadas na linguagem de mquina. Novo
TERMO

o processo de converter uma linguagem de computador de alto nve l em cdigo de

mquina ou nativo conhecido como compilao. Os programas que fazem essa converso so chamados de compiladores.

Muitas dessas linguagens foram criadas com o passar dos anos. FORTRAN, COBOL, APL, Pascal , C e BAS IC so apenas alguns exemplos, mas centenas de li nguagens diferentes esto disponveis. Cada linguagem poss ui seu prprio conjunto de comandos e, com o tempo, novos comandos so criados para simpl ificar ainda mais o esforo de programao. Assim como os computadores evo luram progressivamente, o mesmo aconteceu s linguagens usadas para program- los, sendo adicionados novos recursos s existentes ou com a criao de novas linguagens como a Ctt (que, como voc deve ter adiv inhado, foi baseada na C) e a JA VA. Em geral, os aprimoramentos nas linguagens tm o objetivo de aumentar a produtividade da programao, permitindo que o desenvol vedor crie o programa desejado da maneira mais fcil possve l.

NOTA

simplista decla rar que as linguagens de programao evoluem apenas para tornar o desenvolvimento mais rpido. A velocidade no desenvolvimento apenas uma das motivaes por trs das melhorias que ocorreram. Outros objetivos e resultados so a produo de aplicativos mais rpidos ou estveis (com menos falhas ) ou at mesmo a criao de aplicativos mais fceis de instalar.

Originalmente, a maioria das linguagens de programao era composta de apenas um item, um compilador. O programa era criado com o uso de um ed itor de texto, como o Bloco de notas, e o compilador era executado, passando o nome do arquivo ou programa-fonte. Em seguida, ele produziria o resultado final , um programa executvel, pressupondo a inexistncia de erros. O resu ltado compilado era executado, testado para a verificao de erros e, ento, voc voltaria a seu editor de texto para fazer alteraes no cdigo. Ele seria com pi lado mais uma vez, e o ciclo se repetiria. Esse processo de desenvolv imento (veja a Figura 1.3) no era de uma linguagem especfica; era uma atividade comum para todos os programadores.

Bem-Vindo ao Visual Basic ,NET

FIGURA 1,3

" , (crie/Edite o Cdigo)

Os compiladores eOlll'erlem o cdigo-fonle de lillguagells de alIo nirel em instrues qlle o computador possa compreender.

Encontre erros)

C Compile ) ------'-~
El(ecute )

Enquanto as li ng uagens de programao evoluam, esse c iclo foi melhorando tambm, resul tando no desenvolv imento de compi ladores mais avanados e no conceito de um Ambiente Integrado de Desenvolvimento ( IDE, Integrated Development Environrn ent). A finalidade de um IDE combinar os componentes de edio, depurao e compilao do desenvolv imento de softwares em lima llnica interface para o programador (veja a Figura 1.4). Apesar da interface llnica, a tecnologia real muito semelhante. Na maiori a dos casos, o cdigo ainda compi lado (veja a Nota a seguir para mais infonn aes) e o programador ainda cria arquivos de texto, mas o ambiente de trabalho muito mais amigvel.

FIGURA 1,4

O Visual Studio 11m IDE quefomece lima ime/face nico para qualquer lipo de linguagem, inell/sire para o Visual Basic.

.... """

"'. . 01 .

r. ".c".. ,................,

.... . _""o U

... . .

CO_I . ' ' ' '~," <0< <o ""."0. . . . . ' OO _ ' . . . . . . C, . . u

Dia 1

ND T A

Alm das linguagens compiladas (em que o cdigo-fonte deve ser processado em um compilador antes que possa ser executado), existe um outro tipo chamado linguagem interpretada. Nessas linguagens, o cd igo-fonte nao com pilado. Em vez disso, um programa especial executa o Cdigo lendo o fonte e processando o que for apropriado. Em geral, j que a an lise (a leitura do fonte procura de comandos) tem de ocorrer sempre que o programa executado, as linguagens interpretadas so processadas mais lentamente do que as compiladas, nas quais a anlise s6 ocorre uma vez, na hora da compilao. O Visual Basic j foi uma linguagem interpret ada, mas esse no mais o caso.

A criao de IDEs gerou alguma conruso entre quais seriam os seus recursos e os da linguagem a ser usada. Isso rea lmente verdade no caso do Visual Basic, para o qual o IDE forn ece muitos recursos que permitem ao programador criar com facilidade uma funcionalidade avanada. Esses recursos quase sempre geram o cdigo do Visual Basic, e ele que executa o trabalho. Nesse caso, o IDE que adiciona a funcionalidade, e no a linguagem, mas ambos so em geral vistos como o mesmo elemento. Hoj e, quando for introduzido o conceito do Visual Studio .NET, voc ver que um I DE pode dar suporte a muitas linguagens, e talvez seja importante compreender a diferena entre ele e sua linguagem subjacente .
Outro avano importante na histria das linguagens de programao foi a criao das linguagens 'visuais', como o Visual Basic. Essas linguagens so chamadas 'visuais' porque permitem a gerao de programas que usem um a interface grfica. O recurso mais comum desse tipo de linguagem a possibilidade de inserir botes, texto e outros itens em uma tela para constru ir uma interface com o us urio (veja a Figura 1.5). Mais uma vez, na verdade, um cdigo real freqUentemente gerado, mas o programador tem um trabalho muito mais agradvel com a criao das partes grficas de seu aplicativo. Abordarei a posio ocupada pelo Visual Basic como linguagem de programao um pouco mais ad iante na lio de hoje.

Por Que Escrever Programas de Computador?


Mencionei antes que a pergunta mais comum que ouo : "O que faz um programador de computadores?" . Depoi s de ter explicado o conceito geral do trabalho, quase sempre ouo a segunda pergunta mais com um, " Por que voc iria querer fazer isso?" . A resposta, "Porq ue divertido escrevercdigos", parece nunca satisfazer as pessoas. Portanto, j que comeamos a aprender aescrever programas, vale a pena ded icar um pouco do tempo considerando o que iremos escrever e por qu.

Be m-Vi ndo ao Visual Basic .NET

FIGURA

1.5

As jerramenlas I'isuais de desellvolvimenlo


peJ'mi/ell/ que voc crie

[dt"-~""'_ry-l'" tJ ~ ~ Sl -l;t

1iI"

... . . .

inlelfaces graflcamenle e. elll segl/ida. ge/'e o cdigo lIecessrio.

.... ,

A primeira coisa a compreender sobre programao de computadores o tipo de programa que ser desenvolvido. Quando solicitada a dar exemplos de aplicativos, a maioria das pessoas responde com programas como o Microsoft Word ou o Excel, algumas podem mencionar jogos de computador e muito poucas incluiriam o prprio Windows na lista. Todos esses so definitivamente aplicativos de computador e algum tem de program-l os, mas a categoria maior de programas a que quase nunca mencionada. Os programas mais comllns so os sistemas que vemos a toda hora. A menos que voc esteja interessado em (ou obcecado por) programao, no pensa com freqncia nos meses ou anos da vida do programador que so gastos no desenvolvimento. Esses programas, como o sistema de computador na locadora prxima ou o programa que o governo local usa para rastrear licenas de motori sta, so desenvolvidos para um nico cliente ou um pequeno nicho de mercado. Fora de seu universo de apl icao, no so to diferentes de softwares prontos como o Microsoft Word. No entanto, sua natureza ind ividualizada sign ifica que h uma taxa mu ito alta de trabalhos de programao por cliente. A funo de um programador abrange muitos aspectos diferentes no desenvolvimento de soft\Vares, principalmente no mundo do software personalizado. Mas o ciclo do desenvolvimento de soft\Vares (SOLC, Software Oevelopment Life Cyc le) contm vrias outras elapas essenc iais (veja a Figura 1.6). Antes de a cod ificao comear, deve-se saber que o novo sistema destinado, isto , seus requisitos. Essas info rmaes devem se tomar uma planta geral para o aplicativo de computador, ou seja, o projeto . Podemos dizer que essa planta , em li nhas gerais, uma interpretao das necessidades do cl iente na fo rma de partes de um sistema de computador, e mais tarde se tornar o guia por me io do qual o programador trabalhar. O resultado desejado um sistema de computador que atenda s necessidades originalmente especificadas pe lo usurio. Esse sistema completo

Dia 1

deve, ento, ser distribudo para os usurios, com manuteno e aprimoramentos posteriores. Os erros - problemas no s istema - devem ser corrigidos, e novos recursos adicionados.

FIGURA 1.6

O de/o de vida de 1/111 projeto de de.~en\'oll'illlel1lo de software passa por vrias etapas dis/imas.

Requisitos

Correo de Erros e Manuteno

Projeto

"-

Distribuio

'\

./

Implementao

Esse ciclo a vida e o trabalho do desenvolvedor de softwares. Mas, para a maioria dos programadores, o molivo pelo qual programam pode ser definido em tennos mais simples: eles escrevem cdigos que fazem algo de ti l. A finalidade efetiva da programao fazer o hardware do computador realizar tarefas prticas; isso que guia a maioria dos desenvolvedores de softwares. Meu co-autor eeu mantivemos esse conceito em mente portodo o livro e nos certi ficamos de que quase todos os programas que mostramos executasse uma fu no de utilidade, alm de fornecer a experincia para o aprendizado. esse o objetivo real, criar aplicativos teis, que conduz muitas pessoas ao Visual Bas ic,j que ele considerado por muitas delas como o caminho mais rpido para passar da idia ao aplicativo.

Um Breve Histrico sobre o Visual Basic


A histria do Visual Basic na verdade comea com a inveno do BASIC (Beginner's A ll-purpose Symbol ic Instruction Code) em 1964, uma linguagem que facilmente assi milada e usada por programadores iniciantes. Essa Iinguagem se tornou popular, e, durante os 15 anos seguintes, vrias pessoas e empresas criaram compiladores e interpretadores para o BASIC. Em 1975, quando a Microsoft era uma empresa nova, uma verso da linguagem BASIC foi um dos primeiros produtos que ela c riou, e que se tornOllllm sucesso. O BAS IC da Microsoft e seu s ucessor, o Quick BASIC (ou QBASIC, como tambm conhecido), se transformaram nas verses do BASIC mais amplamente disponveis nos PCs. Elas ainda possuem uma quantidade bastante grande de usurios (se voc estiver interessado, acesse o endereo http: //www . qbasic . com para obter recursos e Iinks sobre essa linguagem). O Quick BASl C estava disponvel para Windows quando foi lanado, mas era necessrio um trabalho considerve l para cod ificar uma inter-

Be m-Vi ndo ao Visual Basic .NET

11

face com o est ilo do Windows, de modo que ele no era mui to apropriado para codificao nesse novo ambiente. No entanto, a Microsoft apresento u um novo produto que combinava a linguagem popular e fcil de aprender do BAS IC com um ambiente de desenvolvimento que permitia aos programadores criar graficamente a interface com o us urio para um programa. Esse prod uto, como voc j deve ter adivi nhado, era o Vis ual Basic 1.0. No incio, ele no fo i adotado, mas fornecia realmente um ambiente veloz para o desenvolvimento de interfaces grficas com o usurio (GU ls). O que pode ser uma s urpresa que o Vis ual Basic, na verdade, comeou com urna verso em DOS, embora tenha s ido logo transferido para o Windows (veja a Figura 1.7).
_ ............. _ ( _ 1

FIGURA 1.7

"13

A primeira rerso do

Visllal Bosic paro


Windows fornecia IIIlIilos dos recursos essel/ciais COIIIIII/S em vrias jcrromcmos
ali/ais. e

//Iais

.. -

imp0l'lome foi sua forma 1'isllal de a/'/'asta/' c solta/' IIsada no descl/vohimcllfo.

O Visual Basic cresceu em popularidade com o tempo. Um n ico recurso se mostrou essencial para seu sucesso. Era a possibilidade de a Microsoft, o programador e outros fornecedores criarem componentes de interface personalizados que podiam ser ad icionados aos programas. As empresas rapidamente entraram nesse mercado, desenvolvendo componentes que adicionavam vrios recursos aos aplicativos do Visual Basic, como a gerao de grficos, ed io de imagens, conexes com modems e muitos outros. Esses componentes permitiam que o programador do Visual Basic criasse apli cativos mais avanados combinando vrios componentes com seu prprio cdigo. Isso aumentou mu ito o desenvolvimento rpido possibilitado pelo Visual Basic e ajudou a torn-l o uma das linguagens mais populares de programao. Toda verso atuali zada do Visual Basic adicionava novos recursos, o que o tornava cada vez mais uma ferramenta de desenvolvimento completamente capacitada. Uma alterao importante, em particular, foi na maneira como o Visual Basic era processado no tempo de execuo. At a verso 5 ser lanada em 1997, o Vis ual Basic era uma linguagem interpretada, o que resultava em um desempenho relat ivamente fraco se comparado com o do Visual Ctt, Delphi e outras lin-

12

Dia 1

guagens compiladas. O Visual Basic 5.0 tomou possvel criar verses compiladas ou interpretadas de programas, e o desempenho melhorou de modo cons idervel. Outra alterao essencial no Visual Basic foi a possibilidade de criar componentes. Em programao, encontra-se com freqU ncia um trecho de cdigo, como uma rotina de clculo de hipoteca, que poderia ser usado em muitos locais do programa e potencialmente at mesmo em vri os programas di ferentes. O comparti lhamento desse cdigo dentro de um programa em geral conseguido escrevendo-o como um proced imento, um bloco de cd igo que digitado um a vez no programa, mas pode ser chamado de qualquer local do aplical'ivo. O com partil hamento entre

programas pode ser feito apenas copiando-se o cdigo do procedimento em cada novo apl icativo que for desenvolvido, mas isso gera um problema. Sempre que voc, ou outra pessoa, fi zer uma alterao nesse bloco de cdigo (para corrigir um erro ou melhorar a maneira do cd igo funci onar), precisar copiar o cdigo para todos os apl icativos que o uti li zam. Uma maneira de melhor compartilhar o cdigo criar uma biblioteca de cdigos armazenada em um arquivo separado dos programas que o utili zam e que possa ser alterado de modo independente . Essa biblioteca conhec ida como componente e criada quase sempre na forma de um arquivo .d l!. Usar uma biblioteca o mtodo preferido de com partil har cdigos. No decorrer do desenvolvimento de novas verses do Vi sual Basic, sua capacidade de criar esses componentes foi avanando regularmente. A verso 4.0 (lanada em 1996) foi a primeira a perm itir a criao de componentes, e hoje esse um recurso extremamente essenci al em projetos de desenvo lvimento. Disc utiremos os componentes com mai s deta lhes no Dia 14, "Introduo Programao Orientada a Objetos". Muitos recursos complementares foram adicionados ao Visual Basic, mas tudo foi construdo em ci ma da base ex istente. Isso no raro. A maioria das ferramentas de desenvolvimento progride dessa maneira, contudo h o efeito colateral de acum ular lixo. As verses novas de uma ferramenta tentam manter a compat ibil idade com todos os aspectos muito pouco efi cazes das anteriores. Reescrever uma linguagem a partir do zero quase impensvel. O trabalho necessrio poderia ser enonne, e romper a compatibilidade com o cdigo j existente para o usurio pode no ser bem aceito. O benefcio de uma mudana dessas seria lima impl ementao nova e limpa por completo, que poderi a manter o que fosse bom e desc311ar as partes invl idas da linguagem anterior. Isso foi exatamentc o que a Microsoft fez na passagem do Visual Basic 6.0 para o Visual Basic .NET. Ela reescreveu a linguagem para criar uma verso li mpa que eliminasse o lixo que se acumulou por uma dcada de atuali zaes sucessivas. Isso sign ifi ca lima curva de aprendi zado severa para as pessoas que tinham experincia na verso anter ior da linguagem, mas o resultado fi nal vale o esforo. A alterao rad ical faz com que este seja um grande momento para ser iniciante no Visual Basic, j que os concei tos ensinados neste livro tero uma vida til muito mais longa do que aquilo que se aprenderia com um material relacionado verso anterior. H muitos benefcios nessa mudana, todos eles foram esti muladores dessa dec iso, mas a motivao mai s significat iva foi a necessidade de adaptao ao novo amb iente .NET. No decorrer

Bem-Vindo ao Visual Basic .NET

13

desta lio, voc aprender mai s sobre a plataforma .NET, o que e como o Visual Basic se enquadra nela.

o Que .NET?
primeira vista, .NET pode parecer apenas um conceito de marketing, uma maneira de evitar

mais um nmero aps Visual Basic, mas muito mais que isso . .NET representa toda uma gama de tecnologias e conceitos que formam uma plataforma na qual voc pode desenvolver apl icativos.

NOTA

Na verdade, o Visual Basic .N ET possui um nmero real de verso, 7.0- s que ele no muito usado. Da mesma maneira como o Windows 2000 na realidade a verso 5.0 do Windows NT, quanto mais simples ou assimilvel o nome, mais ele usado. No entanto, no espere ouvir Visual Basic 7.0 com freqn da; havia at uma penalidade em dinheiro dentro da Microsoft para quem se referisse ao Windows 2000 como NT 5.0.

No incio desta Iio, expliquei como o sistema operacional fornece um nvel de funciona lidade bsica aos aplicativos (como a possibilidade de ler arquivos de um disco rgido ou disquete). A platafonna .NET pode ser explicada de maneira semelhante; ela uma camada que existe abaixo de seus programas e fornece um conjunto de servios e funes bsicas. Essacamada contm um grupo de apl icativos e sistemas operacionais chamado servidores .NET; um conjunto bsico de objetos chamado .NET Framework; e um conj unto de servios que d suporte a todas as linguagens .NET chamado Common Language Runlime (CLR). Cada uma dessas partes da plataforma .NET (veja a Figura 1.8) ser abordada individualmente.

FIGURA 1.8

Aplicativo do Usurio (in cluindo seus programas!)

.NET lIIais do que apenas um i/em: UI1l cOIyllnlO de .wjilrares e cOl/ceitos qlle fUllciollam juntos para permilil' a criao de solues para empresas.

.NET Framework

Servidores .NET Windows, BizTalk, Exchange, SQL, App Center. Dispositivos .NET

Componentes de Hardware

14

Dia 1

Servidores .NET

o pri nc ipal objelivo do conceito .NET diminuir o desenvolvimento de sistemas di stribudos,


nos quais o trabalho feito em vrios locais difere ntes. Em geral, esse tipo de sistema faz seu trabalho no back-end, no nvel do servi dor. A Mi crosoft fornece um conjunto de softwares quejun-

tos so conhecidos como .NET Enterprise Servers. Eles roram projetados para substitu ir os
recursos de back-end necessrios ao sistema distribudo. Esses produtos incluem: Um sistema operacional do serv idor, o Microsoft Windows (Server, Advanced Server e Datacenler Server) So ft wares de agrupamento e balanceamento como o Microsoft App Center e o Microsoft Cl uster Server Um servidor de banco de dados, o Mi crosoft SQL Server Um sistema colaborat ivo de correio eletrnico com armazenamento de informaes de fo rma li vre, o Microsoft Exchange Server Um mecanismo de transfonnao de dados com base em XML (falarei mais sobre a XML no Dia 20), chamado Microsoft BizTalk Server Um serv idor para o acesso a sistemas legados, como o AS/400s, chamado Host lntegration Server E mais ...

Juntos, esses servi dores fornecero os servios bsicos a seus apli cat ivos .NET , formando o alicerce dos sistemas. Este livro se referiraeles a lgumas vezes, mostrando onde podem ser usados em seus sistemas .

.NET Framework
Na passagem para o Visual Basic .NET muitas coisas foram rad icalmente alteradas; uma delas foi o desenvolvimento de uma nova base para todas as ferramentas .NET de desenvolvimento. Essa base, conhecida como .NET Framework, fornece dois itens essenciais: o ambiente principal de tempo de execuo e um conjunto de classes bsicas. O ambiente de tempo de execuo seme lhante ao sistema operacional por proporc ionar uma camada entre seu programa e as complexidades do resto do sistema, exec utando servios para seu aplicativo e simpl ificando o acesso aos recursos das camadas inferiores. As classes bsicas forn ecem um vasto conjunto de recursos, empacotando e definindo essas tecnologias como protocolos da Internet, acesso a sistemas de arquivos, manipulao de XML e mais. O verdadeiro poder dessa estrutura ser exp lorado com mais detalhes no Dia 8, " Introduo ao .NET Framework". Por enquanto, s temos de entender que o .NET Framework em mu itos aspectos semelhante ao sistema operacional e que fornece seu prprio conjunto de APl s a fim de facili tar aos programadores o aproveitamento de seus recursos. A Figura 1.9 il ustra o relacionamento do Framework com o seu cdigo e com os serv ios subjacentes do sistema operacional.

Bem-Vindo ao Visua l Basic .NET

15

1.9 O .NET Framework fornece oulra camada de abslrao sobre o sistema operaciollal. eX(l/amellte como esse faz para o hardware do eompUfado/'.
FIGURA

Aplicativo do Usurio (incluindo seus programasl)

.NET Fremework

Sistema Operacional

Componentes de Hardware

Para uma linguagem de programao se beneficiar do ambiente de tempo de execuo e outros recursos do .NET Framework, o compi lador deve produzir um cdigo que adote um certo padro. A Microsoft fornece esse padro, o Common Language Specification, como uma maneira de fazer com que qua lquer compilador possa ser usado na plataforma .NET. Ela criou os compiladores do Vis ual Basic, Vi sual C++ e C# que se destinam ao .NET Framework, mas (ambm disponib ilizou o Common Language Especification fora da Microsoft de modo que outras empresas pudessem desenvolver compi ladores para outras Iinguagens. O resultado que, alm das linguagens fornecidas pela Microsoft, muitas outras existentes (como o COBOL, APL, Smalltalk e assim por diante) foram desenvol vidas sobre exatamente a mesma base do Visual Basic. NET. Neste ponto, im portante distinguir os recursos fornecidos pelas linguagens e os proporcionados pelo .NET Framework. O Visual Basic e o COBOL compartilham todos os recursos do Framework, mas, j que so linguagens diferentes, tambm possuem suas prprias funes e sintaxe exclus ivas. Ao dar prosseg uim ento leitura, voc aprender tanto sobre os recursos especficos do Visual Basic quanto os fornecidos pelo Framework.

Servios .NET
A platafonna .NET inclui certos conceitos que se estendem alm dos detalhes de programao para descrever como os sistemas devem ser desenvolvidos e podem interagir. Um desses conceitos essenciais a idia de servios da Web, recurso distribudo de uma maneira consistente de modo que s ua execuo fique totalmente confinada em seu ambiente. Um exemplo desse tipo de servio pode ser uma folha de pagamentos, para a qual uma empresa possui servidores e aplicativos em sua prpria organizao que podem man ipul-Ia. A empresa fornece esse servio para outras por meio de um servio da Web (veja a Figura 1.1 0). Isso diferente de apenas di sponibilizar um site da Web; uma interface que outros aplicativos ou sites da Web podem acessar atravs de cdigo.

16

Dia 1

FIGURA 1.10

Um servio da lVeb permite que (IS empresas forneam servios com base em software pela IlIIemel e que O/III"OS aplica/ivos el oll siles da Web os IIlili:em.

Servidores do
Windows 2000 '"'"''''''' , ' _ Servios di Web

Aplicativo. Cliente,

Grande QUlntidade de Servios Dispon(Yeis

Servidores Web

=
O. servios Web podem ser e><l>O$lo, a partir de qualquer sislema operacional" criados com qualquer

ferrsment.e de deseovolvimenlO que d suporte" HTTP.

Usu6,los Remoto.

Essa tecnologia pode ser usada de varias maneiras, mas o conceito de servios da Web consiste em que h certos serv ios bsicos ou fundamentais de que muitos ap licativos precisam, como autenticao, organizao de calendrio, env io de mensagens (correio eletrnico) e outros. Se

esses tipos de recursos forem servios da Web, qualquer pessoa no mundo poder se benel1ciar deles para reduzir o tempo de desenvolv imento de seu prprio sistema. A Microsoft, corno part icipante da iniciativa. NET, est fornecendo alguns desses servios para autenticao (conhecido corno Microsoft Passport, www.passport.com), envio de mensagens (hotmai l, www.hotmail . com) e outros. Posteriormente, no Dia 21, "Criando Servios Web com o Visual Basic .NET", forneceremos urna introduo apropriada aos servios da Web e nos aprofundaremos em corno voc pode us-los em seus aplicativos.

Dispositivos .NET
Atualmente, h uma grande vari edade de sistemas que podem ser usados para se conseguir acesso Internet, rede de sua empresa ou a suas informaes pessoais. Sendo eles PCs completos, terminais da Internet com base em TVs, simples cl ientes ou Personal Digital Assistants (PDAs); todos so possveis dispositivos utilizados pelo usurio para acessar um aplicativo .NET. Essa

Bem-Vindo ao Visua l Basic .NET

tendncia direcionada a vrios disposit ivos forar voc, como programador, a esquecer o padro geral de um nico tipo de cliente, em geral um PC, e a considerar, em vez disso, que um cliente poderia estar se conectando por meio de um entre muitos dispositivos possveis. Esses podem ser classi ficados como dispositivos .NET - uma combinao de recursos de hardware e software projetados para funcionar com os servios e aplicativos com base na platafonna .NET. Hoje, a variedade de dispositivos .NET disponveis inclui computadores que executam o Windows (Windows 9x, Millennium Edition e Windows 2000 com o .NET Framework instalado) e dispositivos que executam o Windows CE. (O .NET Framework compacto est disponvel para essa plataforma, permitindo o suporte aos recursos .NET.) Haver um crescimento contnuo nessa rea. No se preocupe se ainda houver partes da plataforma .NET que parecem confusas: elas precisam ser! Durante os dias restantes, as lies deste livro explicaro mais detalhes que ajudaro a esclarecer tudo. Por enquanto, lem bre-se do relacionamento entre a plataforma .NET e seus programas - uma camada de funcionalidade que j fornecida e fci l de acessar pelo seu cdigo. Com esse conceito em mente e sabendo que o resultado fina l um desenvolvimento mais rpido na passagem da idia para o programa conc ludo, voc ter aprend ido bastante sobre a pl ataforma .NET nesta lio.

Desenvolvendo seu Primeiro Aplicativo no Visual Basic .NET


E hora de escrever seu primeiro trecho de cd igo do Visua l Basic .NET. Antes de continuar com este exemp lo, e os do resto do li vro, voc deve ter o Visual Basic .NET instalado. Nesta seo, exp lorarei o processo de instalao do Visual Basic ou do Visual Studio (incluindo o Visual Basic) em seu computador. Se j o tiver instalado, v para a seo "Onde Est meu IDE?".

Preparando-se para Codificar


Antes de realizar qualquer trabalho com o Visual Basic .N ET, ser preciso instal-lo. Voc deve ter vrios CDs ou um OVO (dependendo de onde conseguiu o produto) pelos quais possa fazer a instalao. Tambm possvel instalar de um local da rede, mas o processo basicamente o mesmo nos trs casos, sendo a principal diferena a alternncia de CDs se voc tiver a verso que vem em vrios deles. A primeira tela que voc ver quando inserir o disco I ou executar a instalao pelo CD ou pela rede, ser um a caixa de dilogo que apresentar trs etapas distintas (veja a Figura 1.11 ). A primeira etapa elevar os componentes do sistema operacional de sua mquina at o nvel que a plataforma .NET exige. Isso chamado de Windows Component Update (WCU), e se voc der um clique na primeira opo da caixa de dil ogo da instalao (veja a Figura 1.11), ser solicitado a fornecer o disco de WCU, se necessrio, e a instalao comear. O que visto durante a

Dia 1

instalao do WCU depende do sistema, porque apenas os itens que ainda no foram atualizados o sero. Algumas das instalaes possveis so a do Windows 2000 Service Pack 2, do MOAC 2.7 (componentes atualizados de acesso a dados) e do Internet Explorer 6.0. Um item que ser instalado na maioria dos sistemas o prprio .NET Framework, que no inclui o IDE do Visua l Sludio .NET, mas fornece todas as classes e arquivos de suporte do Framework necessrios execuo dos aplicativos .NET. Dependendo de que componentes forem precisos, o programa de instalao pode ter de rein icia lizar seu computador uma ou mais vezes. Quando essa instalao estiver concluda, voc retornar primeira caixa de dilogo de instalao, como mostra a Figura 1.11.

FIGURA 1.11

O processo de ills/(lla(io do Visual SllIdio .NET dividido


em Irs ela{Jas.

"" ......... _. 00"""" "'''"',

D um c lique na etapa 2 para iniciar a prxima parte da instalao do Visual Studio .NET. Voc ser solicitado a inserir a chave do produto e ace itar ou no o Contrato de Licena de Usurio Final (EU LA , End User License Agreement) antes que a instalao principal possa ser iniciada. Depois que as informaes so licitadas forem fornecidas e o EU LA aceito, surgir uma tela com vrias opes em que podcro ser selec ionados os elementos do Visual Studio .NET que voc deseja insta lar (veja a Figura 1. 12). A Figura 1. 12 foi baseada no Visual Studio .NET Beta 2 e algumas das opes podem se alterar, mas no geral voc deve ver a mesma lista. Se est iver planejando programar grande parte no Visual Basic .N ET, sugiro a seleo das mesmas opes que podemos ver na Figura 1.12. A primeira escolha digna de nota foi a seleo do Visual Basic e do Visual C# na opo das linguagens. O Visual C# no necessrio, mas veremos que mu itos exemplos de cdigo estaro disponveis nessa linguagem, e mais provvel que faamos testes com a C# do que com a C++. Tambm possvel selecionar o Visual C++, mas s aconse lhvel faz-lo se ho uver realmente a pretenso de us-l o j que e le ocupa mais espao em disco do q ue qualquer das outras Ii11guagens.

Be m-Vi ndo ao Visual Basic .NET

19

FIGURA 1.12

Voc pode examinar e selaciollar quais

compol/emes do Visual
SlIIdio .N ET deseja

il/slGlar.
Cj .... _ _ ... -

II
111 0 >< _ ' "
O lil~ ' ''_.o ._

Iil~"""'"

Iil.v _ _ _ """"",--",
til i/l~ _""'sro 1II 1il ~ "' ....... _ ___ ill~' .
Iil ~

.. ,,_ ,_ .

".,.. ....w, ......... _ ........ , ,,,_o


L . ... .

i/l.~ _""'_'_"

_ ..... ._
. .......... I'u.)

-..-_~ I

.Iil:._. ........ ,,.. 'w"' . .Iil,,""'" __. _


Iil:'_ ' _
. Iil~ , _

..

Iil~

___

_o.w, ...

,~_

..... ",

h ....... _

"' LI________________-'!~

.__ ...
."

, '"""" Nr

...,_.......

A seguir, cert ifiq ue-se de que marcou todas as opes disponveis em Enterprise Tools, Server Components e Toais for Redistributi ng Apps. No explicarei o que essas opes contm, mas marc- Ias assegurar que voc tenha todos os recursos disponveis em sua verso do Visual Studia (verses d istintas do Visual Studio possuem conjuntos diferen tes de opes de recursos). Para conc luir, selecione MSON e mantenha a configurao-padro Run from source, que solic ita acesso a seu CD, OVO ou local de instalao na rede, ou se tiver bastante espao em disco, altere para a instalao em um cam inho espec fico (vej a a Figura 1.13). Executara MSON do loca l de instalao mais lento do que t-lo em sua mqu ina local, mas a deciso cm geral baseada no espao d isponve l em disco em vez de na velocidade.

FIGURA 1.13

As bibliotecas MSDN.
que cOI//m mui/os dOCl/mall/os a anigos

teis. podendo os exemplos ser inslO!ados

localmetl/e para que se


oblenl1ll mais velocidade.

---_ _._(1 ....... _ _

. . ..."" .. ,... _. ........... ,,"'" ,. -"... ............


' ""' .....""""'"'"' ,, @ .

.... "" I , .... , , - ....:, TI>O _ ..... ." _ ... _

.....

, ... "") ""'.......... , , _ ..

_ _ 1'....,

. .... ..... (. _' a1

.--.. . . Io.''''... R....


, . ., . . H " . .

20

Dia 1

Depois que voc fi zer Iodas as suas escol has, d um clique no link Instai! Nowl na parte inferior da caixa de d ilogo para iniciar a instalao . Vrios trechos de texto que descrevem os recursos

da plataforma .NET sero exibidos enquanto a instalao progride, encerrando por fim com uma
tela de trmino (veja a Figura 1. 14). Se algo der errado durante a instalao, ser ex ibido nessa tela.

FIGURA 1.14

Se algo der errado

duranle a il/oSla/arao,
voc ser iIIfo rmado do
pr oblema neSla feIa.

Setup is complete.
':::~ ::;::.::':::~

..... "..... _ '..... ,... _.~" .. ,.H....

_~_HE'f~_~ . _

l_

o .... . . . -

Por fim, quando voc ti ver retornado tela inicial da instalao, a terceira opo estar disponvel. Dar um clique nessa opo, Service Releases, o conduzir outra caixa de dilogo (veja a Figura 1.15), em que podero ser selecionadas as atualizaes da instalao pela Web ou pelo di sco. Se houver conectividade com a Internet, recomendo escolher a primei ra opo para assegurar a obteno da lista mais recente de at uali zaes.

FIGURA 1.15

O programa de
ills/{{Iatio do Visual 8tudl0 .NET pode fazer o dOlvl/load e instalar atuali:aes pela Internet.
.,,"o! _,..,. , .. s _ _ " to ...... s.",,,,,, , "'.. uo', ..
............ " 01 " .................. ,~ , """"

, ..... ,,,,," _ .... ,.... , ... _ .. "",,", s...... lO<T, s ...............

"'0

OIOOM ... ' ' ' ' ' _ ' ' ..... ...... _ _"'_'... ""_ ..s-c.Pod."'" ..... ",. 1 _ ......... ... s...... P", .... ......
_~

"0.. ,mo.oo."

[a",.,

Bem-Vindo ao Visua l Basic .NET

21 [

Agora o Visual Studio .NET est instalado e deve estar pronto para ser executado, portanto, voc pode passar para a prxima seo em que comear a escrever alguns cdigos.

Onde Est meu IDE?


Agora estudaremos o Visual Studio .NET, um dos mais avanados pacotes de desenvolvimento di sponvel , e seu primeiro programa vai ser elaborado com o uso do Bloco de notas e do prompt de comando. Sim , exalamente o que leu, o prompt de comando. No incio desta lio, expliquei que muitas linguagens de program ao eram compostas apenas de um compi lador. Em urna Iinguagem desse tipo, os programas so escritos como arquivos de texto e, em segu ida, o compilador chamado para converter esse cdigo (pressupondo-se que no tenham sido comet idos en-os) em um programa executvel. Na maioria das linguagens, isso nunca foi alterado. A finalidade de um IDE fornecer um ambiente nico de trabalho, mas ele ainda estar usando a mesma seqUncia de edio/comp ilao/execuo do processo manual. Antes do Visual Basic .NET, urna linha de comando podia ser usada para compilaras programas, mas isso era o mesmo que executar o IDE de modo no visvel. O Visual Basic .NET separa as duas funes , compilao e edio, pelo fornecimento do compilador como um programa completamente distinto. Com O IDE, voc nunca precisar examinar a compi lao. Ela ser manipulada de modo automtico, mas ainda assim ser executada. A principal diferena entre o compi lador do Visual Basic .NET e o de verses anteriores que aquele totalmente independente do IDE; no h nada que voc possa fazer no IDE que no possa ser feito com o uso apenas do compilador da linha de comando e o Bloco de notas. J que o IDE um programa grande e complicado, ser mais simples se concentrar na linguagem e trabalhar no nvel da linha de comando de tempos em tempos. A lio de amanh - Dia 2, "Trabalhando com o Visual Basic .NET" - introduzir o IDE e percorrer os fundamentos de seu uso para edio, execuo e compi lao de seus programas.

Uma Tarefa Simples


Para criar seu primeiro programa, voc precisar de um objetivo, algo para ele executar. No minha inteno produzir programas "HelIo World!" neste livro, aqueles que no possuem uma finalidade. Isso particularmente difici I quando se tenta escrever o primeiro pequeno trecho de cdigo. Novo um programa que no faz nada de til, ou mais espec ificamente, nada mais til do que apenas exibir a mensagem solicitada.
TERMO

A expresso programa "Helio lVorld! " ou "Ol Mundo! " descreve o exemplo de

Voc vai comear com um programa que poder executar da linha de comando e que retornar um texto peq ueno. Em seguida, mostrarei como esse programa ilustra quase tudo que prec iso saber para desenvolver um utilitrio proveitoso que exiba informaes sobre a verso de seu sistema operacional (por exemplo, no lanamento do Windows 2000 houve uma verso n 5.00.2195). Isso pode ou no ser til como um utilitrio de linha de comando, mas demonstra o conceito bsico de sua criao.

22

Dia 1

Escrevendo o Cdigo
J que voc comear em um editor de texto (corno o Bloco de notas) em vez de no IDE, nada

ser feito de modo automtico, e o arqu ivo a princpio estar vazio. Isso significa que ser preciso configurar a estrutura bsica de seu programa antes de comear a escrever um cdigo que seja compilado corretamente. Para iniciar, crie um arquivo novo de texto em algum local de seu computador; para os exemplos deste livro, crie um diretrio em seu computador chamado

C: \ TYVB\Cl \ . Para gerar o novo arquivo de texto, d um clique com o boto direito do mouse na
pasta apropriada e selecione New (Novo) e Text Document (Documento de texto) (veja a Figura 1.16). 'sso criar um arquivo de texto com extenso txt. Renomeie esse arquivo para que indique seu contedo final alterando para Stepl. vb .

FIGURA 1 ,16

, ,
.~ .

O menu de ala/IIo do Explorer fomecer (l


l'oc lima maneira

direla de criar
muilOS Olllros

III/I

~"'
_...

(1l"(llIil'O de lexlo e documelllos.

0 .~

9><>"'"

fl _

~_<MO

~---_ @ .... _.-.~

...

I!il -- _"''''''''l
~w

':!l __ '" ... ~ .........toO;;,;n


_ _

lfI __ f'I ....... ~ .:1


<1_~

Com o arquivo renomeado e no diretrio correto, voc poder dar prosseguimento e comear a configurar seu cd igo efetivo. Abra o arquivo no Bloco de notas dando um clique nele com o boto direito do mouse e selecionando Abrir com. Isso abrir uma caixa de dilogo por meio da qual ser poss vel selecionar o Bloco de notas ou outro editor de texto (o Word Pad , por exemplo). Depois de ter selecionado um programa, d um clique em OK, e o arquivo ser aberto. No deve haver nada nele neste momento; voc ter de adicionar tudo que o far func ionar.

Execuo Passo a Passo


Sempre que voc escrever um cdigo, e principalmente quando fi zer algo novo, tente resolver o caso em vrias etapas. Dessa maneira, ao se deparar com um problema, saber que partes do programa fun cionaram e quais no tiveram xito. Na primeira elapa, voc se certificar de que pode criar um aplicativo por meio do compilador de linha de comando. Para tanto, precisar de um cdigo, porm ele no precisar executar realmente nada. Apenas ter de apresentar o formato correiO. O cdigo a segu ir representa a estrutu-

Bem-Vindo ao Visua l Basic .NET

23

ra bsica de um programa do Visual Basic .NET; digite-o na janela de seu Bloco de notas e, em seguida, salve-o como Step1.vb. Public Class Stepl Shared Sub Main() End Sub End C1 ass
Ao tentar salvar seu cd igo como Stepl. vb, voc pode acabar com alguns resultados estranhos. Por causa da tendncia do Bloco de notas de criar arquivos de text o e dependendo das con figuraes de seu sistema com relao s extenses, pode terminar com um arquivo chamado stepl. vb. txt em seu disco rgido . Para evitar isso, certifique-se de ter desmarcado a opo Ocultar extenses de tipos de arquivo conhecidos (guia Modo de exibio em Opes de pasta no menu Ferramentas do Windows Explorer) .

A seguir, inicie um promptdecomandodo programa Visual Studio .NETTools, como na Figura 1.17.
FIGURA 1.17
Seleciollor o prolllpl de comal/do do Visual SllIdio .NET a melhor mal/eira de (rabalhal'
COIII
*:*_0 .. \

..;;;..
0ffI>0 " ""

a plataforma .NET

'"'=\""'" ,"'-',..... ........... ,.. =',


'","""'o.., .."" ''''

a IJarlil' de lili/O finha de cOlI/ando.

-. _

..... J C l c - . . J _

-*

E essencial que voc use essa opo para acessar a linha de comando, porque s atravs dela ser possvel conseguir que o(s) caminho(s) correto(s) seja(m) configurado(s) para executar ferramentas .NET como o compilador do Visual Basi c (vbc.exe). Se quiser empregar uma linha de comando habitual , ter de adicionar a configurao do caminho apropriado (execute uma pesquisa em vbc.exe para encontrar o diretrio que precisa estar em se u caminho) sua mquina. Isso apresentar um console de comando (como mostra a Figura 1.(8). Desse local, navegue para o diretrio que contm seu arquivo Step I.vb. Agora voc pode compilar seu programa,

24

Dia 1

criando um executvel, mas adie um pouco mais adicionando uma etapa complementar antes da compilao.

FIGURA 1.18

O /ISO do eompi/ador de linha de comal/do feilo por meio do console (011 do prompl do MS-DOS. como
jreqiielllclllellle

chamado).

No prompt de comando, digite vbc e pressione Enter. Voc deve ver este resultado
RESULTADO

Microsoft (R)Visual Basic.NET Compiler version 7.00.9254 for Microsoft (R) .NET CLR version 1.00.2914.16

Copyright Microsoft Corp 2001. Al1 rights reserved.


Visual Basic Compiler Options

seguido por uma grande quantidade de in formaes de ajuda sobre o liSO do compilador do Visual Basic. Se isso func ionar, voc ter confirmado vrios itens:
Voc rea lmente tem o Visual Basic .NET instalado. Voc possui as permi sses apropriadas para executar o comp ilador.

O sistema pde encontrar o arquivo vbc. exe.

Ao testar primeiro o vbc automat icamente, voc poder eliminlo corno fonte de qualquer pro blema que encontrar ao tentar compi lar um programa efetivo. Continuando esse raciocnio, ago ra podemos compilar seu programa salvo, Step1.vb, inserindo um comando do vbc, Step1.vb jt:exe e, em seguida, pressionando Enter. Se tudo der certo, deve aparecer este resultado:

Microsoft (R)Visual Basic.NET Comp iler version 7.00.9254 for Microsoft (R).NET CLR version 1.00.2914.16 Copyright Microsoft Corp 2001. All rights reserved.
Isso significa que a comp ilao foi bem-sucedida, e se voc estivesse examinando essa pasta agora, por meio do Windows ou emitindo um comando OIR, veria que j h um novo arquivo Stepl.exe. Processar esse executvel (dig itando Step I no prompt de comando e pressionando Enter) no produzir nenhum resu ltado visvel, o que de esperar porque o cd igo de Stepl. vb, na verdade, no tem uma fina lidade. O fato de que foi compilado e executado demonstra que ele at aqui est correto.

Be m-Vi ndo ao Visua l Basic .NET

A chamada ao vbe pode aceitar lima grande variedade de parmetros opcionais (comandos complementares adicionados linha de comando, em geral separados por barras [IJ), como voc pode ver na execuo automtica do vbe. No entanto, nesse caso, s foram usados dois. Com o fornecimento do nome do arquivo-fonte , s tepl. vb, foi informado ao vbe que arqu ivo compi lar. A segunda opo para I t (que significa ' destino' e tambm pode ser digitado como Itarget) pode ser um programa winexe, exe, uma biblioteca ou um mdulo. Todas essas opes sero abordadas depois, mas, por enquanto, s as duas primeiras so particularmente relevantes; winexe cria um ap licativo do Windows e exe, uma linha de comando ou apl icativo do console (que nosso objetivo). Por padro, quando vbe fo r executado, ele usar It :exe.

Vejamos a Exibio do Resultado


Agora, lembrando-se de seu objetivo fina l de retornar a verso do sistema operacional, tente exibir algum texto. Antes de conseguir um resultado efetivo em um programa do Visual Basic .NET, preciso informar ao compilador que partes, se houver alguma, do .NET Framework sero usadas. Nesse caso, ser empregado ape nas o root (raiz) ou o objeto do nve l superior do Fraports System ao incio do arquivo de cdigo. mework, System, portanto, adicione a linha Im Agora voc pode se referir a esse objeto, System, e usar seus recursos em seu cdigo. Um dos membros ou partes da classe System do Framework o objeto Conso I e. Esse objeto permite que os usurios leiam e gravem atravs da interface de linha de comando. Nesse exemplo, empregue a instruo Console,Wri teU ne para retornar algum texto jane la do comando. No importa que texto ser retornado, apenas um teste de exibio de informaes. Em seu cdigo, foi uti lizado o texto aqui que entraro as informaes sobre a verso do sistema operacional! para deixar claro que esse s um espao reservado. Salve esse novo arquivo de cdigo alterado (que deve se parecer com o cdigo a seguir) como Step2. vb e, em seguida, volte para ajanela do comando a fim de compil-lo: Imports System Public Class Step2 Shared Sub Main() System.Console .WriteLine(" aqui que entraro as infonnaes sobre a verso do sistema operacional !") End Sub End Class A instruo de compilao ser quase a mesma da etapa anterior, exceto por voc especificar o nome do novo arquivo-fonte, vbc Step2. vb I t: exe. A execuo dessa instruo de compilao produzir um arquivo chamado Step2. exe, que poder, em seguida, ser executado do prompt de comando digitando-se Step2 e pressionando-se a tecla Enter. Se sua compi lao funcionou e no houve problemas no cdigo, o resultado a seguir deve aparecer em resposta a seus comandos:

26

Dia 1

COOIGol
RESULTADO

C: \TYVB \C1>vbc step2.vb jt:exe Microsoft {R)Visual 8asic.NET Compiler version 7 . 00 . 9254 for Microsoft (R) ,NET CLR version 1.00.2914.16 Copyright Microsoft Corp 2001. All rights reserved.

C: \TYVB \Cl>step2 Eaqui que entraro as informaes sobre a verso do sistema operacional!

Adicionando a Funcionalidade das Informaes sobre a Verso


Voc sabe que o cd igo est correto at este ponto (porque funcionou), portanto, ele fornece um bom ponto de partida para a prxima etapa. O que precisamos fazer agora obter as informaes
reais sobre o sistema operacional e, em seguida, ex ibi ~las no lugar do trecho genrico de texto. Teremos de usar o .NET Framework novamente para conseguir essas informaes, por meio de

outro rec urso que ele fornece, o acesso aos dados sobre o sistema operac ional at ual, como o Windows 2000. Essas informaes so disponibi lizadas pelo mesmo objeto Syslem , mas em vez de usar Syslem.Console, empregaremos Syslem.EI/\Jironmenl.OSVersioll. Altere o cdigo de Slep2.vb para que tenha a aparncia do descrito abaixo e, ento, salve o arquivo como Step3 . vb. Imports Sys tem Public C lass Step3 Shared Sub Main{) System.Console.WriteLi ne{ System.Environment.OSVersion.ToString{)) nd E Sub End Cl ass A compi lao do cdigo vbc step3. vb It :exe no ser diferente do que foi fei to nos dois exemplos anteriores. Essa compilao produzi r um programa executvel com o nome step3 .exe. Executar esse programa exe, digitando Step3 En t er na janela aberta da linha de comando, gerar o resultado a seguir:

C: \ T V \ C1 step3 Microsoft Windows NT 5. 0.2195 . 0


Observe que o resultado indica um computador Windows 2000 (NT 5.0); outros resultados sero gerados para com putadores diferentes. Agora voc tem um pequeno programa exe que retornar a verso do sistema operacional , decerto ele ser til pe lo menos para admini stradores de rede. O aplicativo cham ado de s tep3 .exe, mas seu nome pode ser fac il mente alterado para algo mais prximo de sua final idade real.

Usando o Compilador de Linha de Comando


Nos exemplos anteriores, voc usou um compilador de linha de comando para especificar dois itens, o desti no dele (ft: exe) e o arquivo-fonte a ser compilado (step I . vb, por exemplo). O compilador fu ncionou muito bem com essas duas opes, produzindo automaticamente programas

Be m -Vi n do ao Vis u a l Basic .NET

executveis com o mesmo nome do arquivo-fonte , mas h muitas opes complementares disponveis como parte desse comando. Aq ui esto alguns parmetros de linha de comando que podem ser mais teis quando comearmos a fazer testes com o Visual Basic .NET: Itarget :<wi nexe, exe, 1i brary, ou modul e> (pode ser chamado como It) especifica que tipo de resu ltado deve ser criado pelo compilador. A opo wi nexe cria um apl icat ivo do Windows. A opo exe, usada em nossos exemplos, gera um aplicativo do console ou de linha de comando e o padro se nenhum parmetro It for empregado . As duas outras opes, 1 i brary e modul e, so util izadas na criao de resultados que no possam ser usadas di retamente, mas que estejam destinadas a fazer parte de outro aplicativo. Voc aprender mais sobre todos esses tipos de sada nos dias posteriores.
lout:<nomedoarquivo> usado para especificar o nome do arquivo criado. Em seus exemplos, voc o omitiu, fazendo com que vbc empregasse o nome de seu arquivo-fonte (Stepl. vb) para gerar o arqu ivo de sada (Stepl.exe, por exemplo).

Ihel p (ou I?) eq uivalente a executar o vbc sem opes : em q ualquer das duas fo rmas, o resultado ser uma listagem deta lhada de lodos os parmetros disponveis. Iverbose faz o compilador produzir resultados mais detalhados durante a compilao e pode aj udar a solucionar problemas.
Ireference:<nomedoorquivo> (abreviando-se temos Ir :<nomedoarquivo L1sado para informar ao com pilador que seu cdigo requer alguns arquivos complementares alm do que est includo como padro. Por exemplo, se voc quisesse trabalhar com as partes de System.Web do .NET Framework, precisaria adicionar uma linha Imports System . Web no incio de seu cdigo e, em seguida, especi ficar Ir: sys tem. web . dI 1 quando o compi lasse.

Resumo
Nesta lio abordamos um pouco do histrico da programao, o Visual Basic e a plataforma .NET antes de cri ar um programa pequeno. Agora, voc est pronto para passar ao aprendizado da linguagem propriamente dita e escrever programas mais complexos. O Visual Bas ic uma das linguagens de programao mais popu lares do mundo, e j cobrimos um d ia na direo que conduz ao seu domnio.

P&R
P Por que o Visual Basic .NET to diferente das verses unteriores do Visu;,1 Ba sic?
R O Visual Basic tem evoludo com o tempo. Cada verso tem sido muito semelhante anterior, mas, em certos pontos, uma reviso maior como a da plataforma .NET era necessria para assegurar que a li nguagem acompanhasse o utras alteraes da indstria, como a Internet e a computao distribuda.

P Ouvi falar sobre outra lin guagem .NET, a C#. Devo aprend-Ia em vez do Visual Basic .Net ou estudar as duas?

28

Dia 1

R A C# umatima linguagem nova, uma maneira mais simples e fci l de usar aC++, mas no, voc no tem de aprend-la. Todas as linguagens .NET so ig uais em termos de suas capacidades; se voc puder criar um certo tipo de apl icativo em C#, poder faz- lo no Vi, suai Basic .NET. E possivel que as pessoas achem que muitos exemplos da Microsoft aparecero em C#, apenas porque uma linguagem que tanto os programadores do Visual Basic quanto da C++ acham relativamente fcil de ler.

Workshop o Workshop foi planejado para ajud-lo a antecipar possveis dvidas, revisara quej aprendeu
e comear a pensar em como colocar seu conheci mento em prtica. As respostas do teste eslo

no Apndice A, " Respostas dos Testes/Exercc ios" .

Teste
I. Qual produto da Microsoft foi o predecessor do Visual Basic? 2. Por que todas as linguagens .NET (Visual Basic, C# e outras) compart il ham certos recursos com uns (o .NET Framework, mtodos de criao e uso de objetos e mais)? 3. Como se denomina o processo de converter o cd igo-fonte (seus programas) em cdigo nati vo de mquina (como um arquivo exe)? 4. Considere o cdigo a seguir: Public Class MyClass Shared Sub Main{) End Sub End C1 ass Se esse cdigo fosse sal vo em um arquivo chamado MySourceCode . lIb e, em seguida. fosse executado o comando vbc jt:exe MySourceCode.llb, que arquivo seria criado?

Exerccios
I. Nos exemplos desta lio, voc no especificou um nome para o arquivo de resultado quando compilou, o que fez com que o compilador usasse o nome do arquivo-fonte como padro. Recompile s tep3. vb, definindo um nome para o arquivo de resultado igual a WhatOS.exe. 2. Para obter informaes sobre a verso, voc empregou o objeto System. Envi ronment, que possui vrias outras propriedades teis. Use a documentao de ajuda que est instalada no Visual Basic (veja a seo "Preparando-se para Codificar" ) para saber o que mais est dispon ve l e, em seguida, crie outro programa para ex ibir uma ou mais dessas propriedades complementares.

SEMANA 1

DIA
Trabalhando com o Visual Basic .NET
No Dia I, " Bem- Vindo ao Visual Basic .NET" , voc aprendeu algumas informaes gerai s sobre programao, Visual Basic e plataforma .NET, que lhe forneceram o conheci mento necessrio para comear a desenvolver aplicativos. Nesta lio criaremos um aplicativo Windows real por meio do Visual Basic e, no processo, abordaremos os tpicos a seguir: O IDE do Visual Studio Solues, projetas e arquivos Criao e execuo de um exemplo de projeto no Windows

Comearei com uma viso geral do IDE do Visual Studio (VS). Os IDEs foram abordados na lio anterior (Dia I), mas incluirei urna reviso rpida sobre seu sign ificado e finalidade.

o IDE do Visual Studio


A finalidade do IDE (Integrated Development Environment, ou Ambiente Integrado de Desenvolvimento) ser um ambiente (mico de trabalho para os desenvolvedores. Em geral, o cd igo-fonte composto apenas de texto e poderia ser inserido e ed itado em qualquer ed itor de texto (o Bloco de notas, por exemplo), e compiladores podem ser usados na linha de comando sem muito problema, portamo, tecnicamente o IDE desnecessrio. Apesar disso, h poucos programadores que concordariam em trabalhar com uma linguagem que no possusse algum tipo de

Dia 2

IDE. Mesmo as tarefas simples de edio e compilao de seu cdigo sero muito simplificadas pelo IDE do Visual Studio que fornece muitas possibilidades complementares que apenas no existi riam sem ele.

Iniciando
Antes que voc possa usar o IDE do Visual Studio, ele deve ser instalado em sua mquina. O processo usado para faze r isso foi detalhado na lio de ontem, portanto, leia esta seo se precisar conc luir a instalao antes de continuar.

Configuraes do Perfil
O prime iro item que voc ver quando iniciar o Visual Studio .NET ser uma interface parec ida com uma pgina da Web (que foi chamada de Visual Studio Home Page) so li citando a confirmao das configuraes de seu perfil. O conceito de perfil novo nesta verso do Visual Studio, uma variao da idia de preferncias do usuri o que prov a capacidade de configurar muitas opes diferentes em um nico perfil. As opes bs icas fornec idas foram projetadas para fac ilitar sua transio para este ambiente dependendo de sua experinc ia part icu lar. Essa d isponib il idade de padres me levou a escolher rapidamente as configuraes mostradas na Figura 2.1. No entanto, depois de algumas horas de LISO, as alterei para algo um pouco diferente de qualquer dos perfis-padro. provvel que voc faa o mesmo. Por enquanto, selecione o perfi I Visual Basic Developer, e depois voc poder voltar caixa de dilogo para alterar essas configuraes se desejar. D um clique em Get Started para sai r da pgina de configuraes de perfil. O que apareceu agora considerada a rea principal de trabalho do IDE do Visual Sludio, uma localizao geral que contm contedo de vrios tipos, como o cdigo ed itado ou as pginas da Web projetadas. Ela tambm inc lui um navegador da Web interno, que aberto por padro; ele usado para mostrar uma interface para o Visual Studio com jeito de Web. Na Home Page (veja a Figura 2.2), voc encontrar vrias opes teis. A primeira, Get Started, a pgina q ue ser mostrada sempre que o Visual Studio for aberto. Projetada como uma preparao in icial para seu trabal ho, essa pgina fornece tanto uma lista dos projetos recentemente abertos quanto um link para a criao de um novo, permiti ndo que sed prosseguimento com um s imples clique cm algum local dela. Por hora, selecionaremos uma das opes de navegao que se encontram no lado esquerdo da pgina.

Trabal hando co m o Vis ual Bas ic .N ET

31
"QEI

2.1 O IDE do Visual Sludio NET pode ser personali::ado para lornar mais fcil a Iransir/o por meio de oulras jerramelllas de dese IIvolvimelllo. inc/uindo a l'erso al/ferior do Visual 8asic,
FIGURA

. _ ........ ........,.,..... '_.... '_1 "",,_

._
~

....,,"' ,' ,., ..


... ,ou<,
.

-....... . _,... ... ..


,

. , ' " l ....


( ....... s-.....

~--------

I"',..' ,"'.
1.... , , ..- o.......

... ,...,

j(.. .....j

CJ CJ CJ

..... H.,.,
a' .......'

2.2 A pgilla il/iciol jomecida pelo Visual Sludio disponibiliza 1IfI/O visualizao fUllciol/al dos projetos que voc abriu recentemente, alm do acesso a I'rias fontes de informao.
FIGURA

~t.

__ _

. ". ~ " "

e.,'

,,_._,.

t.vd<f, ......., . _

o.,....,... I

~,

......

J...

"''''
t

.. til""'"
~."",

...

As opes laterais restantes apresentam : Detalhes dos novos recursos do Visual Stud io .NET. What' s New (O Que H de Novo) est vinculada a vrios recursos on-li ne como newsgroups (Online Communi ty) Uma pgina de notcias ao vivo sobre o Visual Studio e outros tpicos relacionados a desenvolvedores (Head lines, veja a Figura 23) Um link direto para pesquisas na Web (Search On line)

32

Dia 2

Um lin k de retomo pgina de seleo de perfis que apresentada por padro na primeira execuo do IDE (My Profile)

Todos esses recursos esto disponveis para o desenvolvedor do Visual Studio, o que torna essa pgina in icial um bom ponto de partida para muitas pessoas. No entanto, se voc quiser adicionar algo a essas opes ou substit uir por completo o conjunto de pginas, a fonte integral da pgina padro est dispon vel em \Program Fi 1es\Mi crosoft Vi sual Studio . NET\HTML. Porm, a vai um aviso - as pginas-padro no so simples, e seria Fcil danific-Ias sem que possam ser reparadas. Faa uma cpia do d irelrio como backup antes de comear a personali zar !

FIGURA 2.3

!.fo tdI. _

IIIformaes relel'OlIles

1.... _

1'1. ~ " " .~ r..

para programadores do Visual 8asic .NET podem com freqiincia


ser e nconlradas 110 sile

da lVeb

msdn.Microsoft. com.
qlle realado alllomalicamenle em
0 ... _
~,~

............' _ .... 0 ...

"'.... ,... o'" A<H'" 0 ....... -0 <>tU CoM_'


............ . ' .>IfT, " _"'IT

""cWTd "."""

,_~ ~

sees da pgina inicial do Visual Sllfdio.

PKtK"""" .....

"0' Toom T...... ' ,. ...,to.

_ >001 ...... _,,"" ....."c_.. c""" ... _ _ o .... _

,"'11_ 1 _..... _ ' 'M_n ...... o.ww .......... _r........ 01 SQL .......

c_

."_"'. " "...."" 'H"'_~'"h",,,,,," . "'" C' .". wo"'o_o. _ _ .. "

A Janela Principal do IDE do Visual Studio


Mesmo sendo to liti l, essa pgina in icial apenas uma das vrias janelas disponveis como parte do Visual Studio, e iremos percorrer a maioria delas nesta lio. Com o perfil Visual Basic Developer selecionado, voc j ter diversas janelas visveis : o navegador da Web interno discutido anterionnente, o Solut ion Explorer, Properties e Toolbox no lado esquerdo. As outras janelas, que abordaremos nesta lio, mas que no se tornam visveis no perfi l atual por padro, so:

Objecl Browser Cornrnand/Immediate Task List Class View Server Explorer

H oulras janelas que abordarei q uando se tornarem irnp0l1anles, mais adiante no livro.

Trabalhando com o Vis ual Basic .N ET

33

Recursos Comuns das Janelas


Todos os recursos destas jane las, incluindo o conceito de m lti plas janelas, fo ram desenvolvidos para proporcionar urna uti Iizao mais efi ciente do espao. Em qualquer I DE, e principalmente no Vi sual St udio .NET. a quantidade de opes e ferramentas disponveis quase infin ita, mas a rea de seu monitor no . Uma sol uo para esse probl ema uti Iizar um monitor de 2 1 polegadas (ou maior! ). Por alguma raz<lo desconhecida, essa medida ainda no fo i adotada, portanto, outros mtodos foram desenvolv idos. Um deles dividir as opes d is ponveis em janelas diferentes, que a abordagem usada pelo Visual Stud io .NET. Agora, o objetivo tornar o posicionamento dessas janelas fcil e fl exvel o sufici ente para que os desenvolvedores cri em seu ambiente ideal de trabalho. Elas so chamadas indiv idualmente dejanelas defe/"/"amel7las. Todos os membros de urna janela de ferramentas comparti lham alguns recursos com uns, corno a capacidade de estar encaixados/desencai xados, ocultos, associados em grupos de guias de janelas e assim por diante. Todos eles podem ser redimensionados de vrias fo rmas.

Encaixando/Desencaixando
No perfil Visual Basic Developer, tanto o Solution Exp lorer quanto Properties fi cam alinhados no lado di reito da tela do Visual Studio, e Toolbox fi ca no lado esquerdo (veja a Fig ura 2.4). O posicionamento de uma j anela rente outra rea descrito como encaixar essa j anela. Quando est encaixada, ajanela bloqueada por essa rea em um ou dois lados (dois lados, se estiver encai xada em um canto). Todas as janelas de ferramentas do Visual Stlldio .NET podem ser encaixadas e no h limite para as margens nas quais possvel alinh-Ias .
FIGURA 2 .4

._
~

too _

.........,.., ..... ,..... """' .... ""'... _'


_
t.<d C!tOvo 10<1> _

f~'..
~

I'Ir;J1:!

__

Quando o Visual Sflldio .NEr cOI/figurado com o pelfil de desel/l'olt'edor do Visual Basic. ele ol"gani=a suas jallelas de fo rmo aproximada ii do ID E do Visual Basic 6.0.

, u Ii' Qc, '~I'1:" .., ; .jJ ql , ';'"

.... " ..... N. . O . . . ao . . .... O

'."'."'""_ "'.'(1

.... u e.II u ",,,.. d b. . . . . . oe


'14d ~. '~,.,.' o.

... ....

"t" ...

"0'...... ,,,"". d ....... <o el . . . . . . .

,o.o<ud
"

" O u_'''' _.

""',,00<1> """.... ,... ""


N,.. , _... ~. . I. Ho<b, ... ,

'D<l "

."" "
. I

.. .. ..... _u
, ,

Para mover uma jane la encaixada para outra rea da tela, deve-se dar um clique e manter pressionado o boto do mouse na barra de ttulo da janela de ferramentas e, em seguida, arrast-la para a

34

Dia 2

nova posio. Enquanto ela estiver sendo arrastada, um contorno aparecer na tela para mostrar onde a janela seria posicionada se voc soltasse o boto do mouse. Para encaixar a janela em outro lado do IDE, apenas arraste-a para uma borda dele, mantendo o boto do rn ause pressionado e soltando-o quando o contorno da jane la mostrar o resultado desejado. No trajeto, pode-se ter a impresso de que o contorno no foi encaixado em nenhuma parte do IDE (veja a Figura 2.5) .
FIGURA 2 .5
. _ _ ......... , ...... " " ... ...... , ( _ ) .... . .... !!lo _ _ _ _ tJOI>
~ '" ~ ~

..tl!3

O comQmo de lili/a janda q/le e.slij sendo arrastada se altera para indicar o que ocorreria se voc parasse de arrast-Ia cm 11111 IlIgar espec ffico.

\lJ ~ IiI!1' :II ~e. i

v,.... St.o</oo.Nf1 ...''''1<,. CIo<> ".",' ...

..,.,.."

, , ..... "..

..,,,., ...

,. -

......., ....." ........",...

tIO'" , .... ,
'h.~

VI,.", ... ,~ ...........

~,

.....

H,O.,
~. '

...............

Se voc deixasse ajanela de ferramentas nesse ponto, ela ficar ia ' desencaixada' , o que tambm conhecido como jane lajlutuallle (vej a a Figura 2.6), pos io na qual ela no estaria mais fixada a nenhuma borda do IDE.
FIGURA 2 .6

Se I'Vc liwr bastante espao lia leIa. poder deixaI' sI/as jane/as desencaixadas.

" . ,.....,

."

""""t"

......... ,_... "

.. x
....... a

Trabalhando com o Visual Basic .N ET

35

Quando as janelas esti verem desencaixadas, voc poder reencaixlas seguindo o mesmo pro ced imento que acabou de usar.

NOTA

Pode ser complicado levar uma janela encaixada de volta ao local exato do qual a moveu, portanto, a va i uma pequena dica: em vez de arra star a janela para encaixar e desencaix-Ia, d um cliq ue duplo na barra de ttul o. Isso desencaixa r a janela de ferramentas que estiver encaixada ou leva r uma janela flutuante de volta a seu local o ri g inal.

Ocultao
Encaixadas ou no, as janelas ainda ocupam espao em sua tela, mas possvel ocu ltar ou fechar jane las especficas que voc no queira que permaneam visveis. Toda janela de ferramentas possui um boio X (veja a Figura 2.7), semelhante ao cone comum de fechamento de outras janelas. Dar um c li que nesse boto fechar ajanela de ferramentas, removendo-a da te la.
.~....... _, ............. _ " " I _ J ' .... ' ... I _ J
~

2.7 As j anelas de
FIGURA

"r::IEJ

ferramentas podem ser

fechadas por meio do peq1leno bouio X q1le


as ocultar da te/a at

, ....,

I"lflEJ

que sejam lIecessrias


f/OI'Gmente.

~,

..0 -

ii ' ... ' .. ~

Para trazer ajane lade volta, voc precisar usar uma opo do menu. Por exemplo. se der um clique no boto X do Solution Explorer, esse desaparecer da tela. Para traz- lo de volta, preciso selecionar Solulion Explorer no menu View (ou pressionar Ctrl +R). No to d ifc il, principalmente para uma jane la que no util izada com freqUncia, mas e aquelas que podem no estar sendo usadas agora, porm, em geral, o so? O Visual Studio .NET fornece uma maneira de recuperar o espao da tela ut iIizado por essas janelas, tornando-as ainda assim fc il de acessar - o rec urso Auto-Hide. Todajanela de ferramentas encaixada possui um icone em sua barra de tt ulo que se parece com um pequeno pino (veja a Figura 2.8).

36
2.8

Di a 2

FIGURA

T()(!as as janelas de ferram ellfas possuem 1/11/ pequeno pino que


permite que
.~e jalll

.... _ ot<o l"'" _ .\ ~ II!. .,: $I- Q

!!O\>

. '""""

'w.. '

-,,,"'

_.,"'~~~

f~:

,~

...

".E!

confinadas em 1/1110 posio onde ficam

abertas.

_......
!

Esse um boto de doi s estados que controla se ajanela deve ou no ser automaticamente oculta quando no estiver em LISO. Por padro, ajanela do Server Exp[orer configurada para empregar esse recurso e, portanto, aparece apenas como uma guia ou boto cinza no lado esquerdo do IDE. Passar o ponteiro do mouse por cima dessa guia far com q ue o Server Explorer se torne visve l

por comp leto, deslizando para a te la. Qualquer janela de ferramentas com a opo Auto-H ide
ativada ser minimizada automaticamente em uma gu ia na lateral do IDE onde estiver encaixa da. Ajanela oculta ser trazida leia sempre que o usurio passar o mouse sobre essa guia, o que s ignifica que s ocupar espao quando for necessria. Esse recurso, junto da opo do menu Window, Auto Hide Ali, utili zado por mim para configurar o Vi sual Studio com a aparncia que desejo (veja a Figura 2.9). Isso deixa o mximo de espao para ajane la principal, onde o c-digo aparecer quando voc tiver aberto um trabalho. Uma interface extrema como essa pode ser desnecessria quando se trabalha em um monitor grande, mas, como usurio de laptop, a acho perfeita.
Guias

Outro recurso para econom izarespao: as janelas de ferramentas mltiplas podem ser agrupadas em uma nica rea da tela onde automaticamente se transformaro em guias individuais de uma jane la com vrias gu ias (veja a Figura 2. 1O) . No perfil Visual Bas ic Developer, diversas janelas j foram agrupadas (o Solution Explorer compart ilha o espao com ajanela Class View, e Pro perties e Dynamic Help foram configuradas de maneira seme lhante), mas qualquer combinao de janelas de ferramentas possvel.

Trabalhando com o Visua l Basic .N ET

37

FIGURA

2.9

Voc pode IIsor

AlIIo-l-lide para
maximizar sI/a rea celllral de trabalho, que onde editar /01110 cdigos (fllanto objetos visl/ais.

FIGURA

2.10

. _ " __ ._""""' .... .,.'1_) ' ..m''''I_)


~e, ..,: .._!""'-~ $I. qj .:_

..r:lD

As gllias permitiro que voc tenha IIIl1ita.~ janelas diferentes de

... :O:'!'!' ..

1'I' .. m'
"
~

jerramelllas abertas cnqllalllO OCllpam o mesmo espao precioso


da tela.

.....""'
"'r.JC!

..

"

,,

',..... w , , , " ""'"


",

" .. ,' '.0 .


<00

_ 'lO'

",'

-. . . 0;,

<J _

-, ',-,

~~

'-, ,-

-,

".

Para adicionar uma janela a um grupo de guias ou criar uma janela com guias, arraste uma janela de ferramentas (dando um clique em seu ttulo e arrastando) para Qltlra, soltando o boto do mouse quando o contorno se a lterar para mostrar uma janela com guias, exibindo a extenso de uma pequena guia na parte inferior dele. Consegue-se a remoo de uma janela de manei ra parecida. Apenas arraste uma das guias para fora do grupo at que o contorno perca o formato de guia e, em seguida, arraste-a para o novo local desejado e solte.

38

Dia 2

Redimensionando
Qualquer janela de ferramemas pode ser redimensionada, mas, se estiver encaixada, s o poder ser ao longo de suas bordas desencaixadas . Para redimensionar uma janela, mova o ponteiro do rnouse sobre a margem dela, at que ele se transforme cm um indicador de redimensionamento, mostrando a direo pennitida para a alterao. Quando o ponteiro indicar que voc est com o mousc na posio certa, d um clique e arraste para estender ou retrair a borda da janela at o tamanho desejado. Observe que o redimensionamento entre duas janelas encaixadas estar na verdade alterando ambas porque urna deve encol her para permit ir que a outra se expanda.

Toolbox
Uma das janelas mais usadas, a Toolbox (caixa de ferramentas) fornece uma listagem de vrios trec hos de texto, elementos de interface com o usurio e outros itens que so disponibilizados para serem adicionados aos projetos. A seleo de itens mostrados depender do que estiver sendo edi tado no momento najanela principal do IDE. Por exemplo, se nada ou apenas o navegador da Web for selecionado na janela principal , ento, o nico item disponvel na Toolbox sero cone Pointer. Esse cone, q ue est sempre presente, fornecido como uma maneira de desmarcar qualquer outro item da janela Too lbox. Se voc estiver editando algo, como o cd igo HTML da pgina inicial do Visual Stud io (d um clique com o boto direito do mouse no navegador da Web e se lccione Ex ibir cdigo fonte), guias complementares sero adicionadas janela Toolbox. No caso da ed io do cdigo, uma guia HT ML foi adicionada (veja a Figura 2.11) contendo vrios itens que representam diferentes tags HTML.

FIGURA 2 .11

Na edio de cdigo HTML. IOdos os elementos de Ullipicos da finguagem ficam dponil'eis 11(1 Toolha,.

"_ _ lJO !.JS-_


IZ r... _
J;IlI"'~_

<.....,

.. "(

,,-

.'-_EJ _.-......
.~-

,1 ~t. L>

."-" """",>

,,,,, ',.,,,

. ..

'"

0 _

0 .....-.._

Trabalhando com o Visual Basic .NET

39

Qualquer item , com exceo do especial , Pointer, pode ser usado de uma das duas maneiras: D um clique e arraste o item para ajanela de edio (soltando quando voc tiver movido o mouse para o local desejado). D um clique duplo no item, o que far com que seja adicionado janela de ed io no ponto de insero selecionado (q ualquer que seja o local onde o cursor estiver posicionado na janela de edio quando houver o clique duplo sobre ele). Esses dois mtodos de uso dos itens esto disponveis para qualquer tipo de documento que estiver sendo editado, mas, se uma interface grfica com o usurio (algum documento visual sem texto como um formulrio Windows) for o documento atual, ento, as duas opes anteriores se comportaro de maneira um pouco diferente. Uma terceira opo tambm est disponvel: Dar um cl ique e arrastar o item para o documento visual funciona da mesma forma que para um texto, mas, em vez de aparecer um ponto de insero do cursor, ser mostrado um contorno real do item quando voc mover o mouse sobre o documento. Dar um clique duplo tambm func iona, mas, j que um documento visual nem sempre possui um ponto de insero selecionado naquele momento, o novo item em geral apenas criado no centro do documento. Uma terceira opo, que no est disponvel para edio de texto, selecionaro item dando um clique nele, real{l-lo na Toolbox e, em seguida, dar um clique e arrast-lo para o documento visual. Isso esboar o tamanho e o local no qual voc deseja que haja a insero no documento, e o novo item ser criado de acordo com o definido (veja a Figura 2. 12).
FIGURA 2.12

""'""" .....

l<d> _

Voc pode desenhar elemenlos l'is/lais, como caixas de lexlo. em /1/1/ forll/ulrio depois qlle os rireI" selecionado na Too/box.
;.

e., ""; &\ r..1 ,'_ . - ., ..


_ ' ..'I ., .

.
c

" " '"

Jl

. ..

40

Dia 2

NOTA

H um pouco de impreciso nas descries anteriores, que podem fazer voc pensar que a Toolbox mais difcil de usardo que parece. Bem, a falta declareza resultado da natureza do IDE do Visual Studio, que fo i projetado para atender a uma grande variedade de linguagens de programao, nem t odas disponveis hoje. Portanto, seu comportamento exalo (ou de Qualquer parte dele, como a Toolboxl difcil de descrever. Mas, pode esta r certo de que, no aspecto geral, ele sempre funcionar como o descrito, independentemente da

linguagem utilizada.

Apresentarei de modo detal hado um exemplo de uso da Toolbox com um documento visual posteriomlenle nesta lio, quando voc criar um formu lrio Windows como parte de seu primeiro aplicativo empregando o IDE. A Toolbox pode conter qualquer trecho arbitrrio de texto, alm de fornecer alguns para a ed io de HTML, desenvolvimento de formu lrios e muitos outros tipos de trabal ho, o que s ignifica ser possve l gerar seus prprios itens que representem sees do texto. Esse recurso uma maneira til de selecionar um fragmento de texto (que pode ser, e provave lmente ser, cdigo) que se espera utilizar com freqncia e torn-lo faci Imente disponivel. Para conseguir esse excelente fe ito de produtividade, selecione o texto desejado na janela de ed io (o que pode incl uir primeiro a d igitao do texto) e arraste essa opo para a j anela da Toolbox. Independentemente da guia que voc arrastar, o texto de la determinar onde seu item aparecer. Como podemos ver na Figura 2.13, o item apresentar um nome inoportuno e bastante sem sentido, como HTML Fragment, mas possve l dar um clique nele com o boto d ireito do mouse e selecionar Rename Item para fo rnecer urna descrio apropri ada. Voil! Agora temos um novo item personalizado na Toolbox, que pode ser usado sempre que se desejar apenas arrastando-o para a janela de ed io .
. _ _ .. _ .. ,"""' ............. ""7_1 , "'''' , ... _ _ 1_ _ ti<\> 11'190

FIGURA 2.13

~'"

'fJ<w

Cdigos. linguagem HTML ou outros trechos de lexlo podem ser inseridos na Toolbox e. em seg uida. usados (arrastados para ajal1ela de edilio de cdigos e NTML) exa/Gmellfe como
qualquer Olllro comrole

1.J ,, ~iI i.~ ... : .., :

,p ql .--"

, .~ , ,,'
. "t <& , . . ~oS .. . . ~ . Ch.mU . . . . . . . . ' yot_ . 'Ta . . .

"0 '_

dela.

''"' ...

......_,.""., e' ."'1

. co.., . . ' ........ " .N, ........ ,. 1" . . '.ot_.' _ ' ,.,' " .T u

' , ...

C... , T. . "",,

c_ .. ,.

Trabal hando co m o Vis ual Bas ic .N ET

41

A Toolbox, assim como o resto do IDE, possui muitas opes complementares que no abordarei, como a capacidade de ad icionar mais guias (guias so aquelas sees deslizantes da jane la Toobox), renome- las e alterar a visualizao da lista de cones de qualquer seo. Esses outros recursos podem ser acessados por meio do menu suspenso da Toolbox (o menu que acessado com um clique no boto direito do mouse) e tambm esto documentados nos arquivos de ajuda do IDE.

Command/lmmediate
Voc j se surpreendeu executando o console de comando (ou a jane la do DOS, corno alguns gostam de cham-lo) para efetuar uma tarefa? Para muitas pessoas, algumas tarefas s podem ser processadas mais rapidamente com o uso do teclado e de uma interface de li nha de comando em vez de se empregar o mouse para navegar pelos cones, menus e caixas de dilogo. J que a produtividade do programador o objetivo final , qualquer mtodo que puder ser mais veloz vale a tentat iva. O Visual Studio .NET possui uma janela que fornece duas fonnas com base no console de interagir com o IDE . Uma fez parte do Visual Basic por algum tempo, ajane la Immediate e a outra esteve presente no Fax Pro por mu itos anos e acabou adicionada ao Visual Stud io, ajanela Command. Em termos de utilizao, elas so realmente duas janelas, mas foram associadas para tornar a operao um pouco mais confusa. Voc pode consider-las como duas janelas (sei que vou fazer isso), depois que tiver aprend ido dois itens essenc iais: como alternar o modo dajanela (de Command para lmmediate e vce-versa) e como infonnarem que modo ajanela est atualmente. Primeiro, o prioritrio - tornemos essa janela visvel; selecione View, Other Windows e Command Window no menu, exibindo assim essa nova janela. Essa janela, agora com o nome de Command Window, deve conter apenas urna linha em branco seguida de um prompt ;> (quase exatamente como o console de comando ou o prompt do DOS com o qual est acostumado). Elaj est no modo Command, e voc pode inserir o comando que quiser e execut- lo pressionando Relurn . Para passar essa janela para o modo Immediate, apenas digite o comando i nvned (e pressione Return ou Enter) no prompl fornec ido. Agora, ajanela ter passado para o modo Immediate, distinto do modo anterior pelo acrscimo de - Invnediate em sua barra de ttulo e pela remoo do prompt;> de seu texto efetivo. Para retornar ao modo Command, digite crnd e pressione Return (sim, voc mesmo precisa incluir o prompt ;. Agora que sabemos como alternar rapidamente entre esses dois modos, podemos examinar a final idade e o LISO de cada um. O modo Command dessa janela permite que voc controle o IDE por meio de comandos digitados - por exemplo, digitando File . Ne Pro ect para realizar a mesma tarefa que seria executada se selecionasse os itens File, New e Project no menu. Uma interface do console em geral pode ser mai s veloz do que uma interface grfica com o usurio. Essa duplicao de func ionalidade fornecida como uma maneira potencial de acelerar seu trabalho dentro do IDE. Uma grande quantidade de comandos est disponvel , mas o modo mais rpido de encontrar muitos deles

42

Dia 2

percorrer os nomes dos menus visveis. Depois que tiver digitado um nome (como Edit ou Fil e), adic ione um ponto, e ser mostrada uma lista suspensa com os comandos disponve is para esse nome de menu. Aqui est uma lista curta de comandos que bom conhecer:
Fi l e . NewProject Flle.SaveAll

Window . AutoHideAl l
A janela Im med iate fornece a capacidade de avaliar as instrues do cd igo diretamente (de imediato!). Isso pennitir que voc insira uma nica linha de cdigo e veja os resultados sem ter de criar um prottipo inteiro do projeto. Esse recurso til quando se est no modo de interru(r o, em que se interrompe a execuo de um programa em curso. Iremos desenvolver um exemplo simples de projeto, no qual usaremos um 'ponto de interrupo' para provocar o encerramento da exec uo do programa em uma certa linha de cdigo. (O ponto de interrupo ser abordado com mais detalhes no Dia 6, "O Que Fazer Quando Programas Bons Apresentam Prob lemas e para Se Certificar de Que Isso No Acontea", porque ele realmente uma ferramenta de depurao).

Voc usar ajane la Command no incio deste exemplo apenas para ter uma noo de como ela poder ser til no futu ro. Certifique-se de que ajane la Command fique visvel e no modo Command, selecionando View, Other Windows e Command Window na barra de menu. Agora, ajanela Command deve estar vis vel com um prompt > mostrando que est no modo Command. Digite o comando File.Ne Pro ect e press ione Enter. Uma ca ixa de dilogo aparecer, solicitando a criao de um novo projeto. Se lecione a pasta chamada Visual Basic Projects na lista da esq uerda e o tipo individual de projeto chamado Windows Appl ication, na caixa di rei ta. D um clique em OK para fechar a caixa de dilogo, gerando um novo projeto em branco. O projeto cri ado contm apenas um formu lrio Windows, e voc ainda precisa adicionar seu prprio cdigo. No entanto, o Visual Basicj inseri u de modo automtico um pequeno trecho de cdigo ne le, um pouco do trabalho que necessrio para gerar e in icializar o novo formulrio em branco. Esse cdigo pode ser visto com um cl ique no boto direito do mouse sobre o novo formulrio (na janela central do IDE) e selecionando-se View Code. Esse procedimento ira adicionar e se lecionar uma guia nova na janela central, uma janela de cd igo que exibe aquele associado a esse formu lrio. J que nada fo i adicionado ao formu lrio, o cdigo um pouco limitado, mas suficiente para o exemplo. Selecione a linha Fonnl '" Me, rolando para baixo a fi m de encontr- Ia, se necessrio. Agora, voc quer marcar essa li nha com um ponto de interrupo, portanto, a execuo desse cdigo ser encerrada ou 'interrompida' quando ele a atingir. H trs mane iras diferentes de marcar a lin ha. Uma dar um clique na margem (a rea cinza-c laro no lado esq uerdo da janela do cdigo), outra dar um clique com o boto direito do mouse e selecionar Insert Breakpoint, e a terceira usar o atalho do teclado para essa funo, pressionando F9. Empregando o mtodo que quiser, adicione o ponto de interrupo, e vera um ponto vermelho aparecer na margem prxima linha. Ela ind ica a presena de um ponto de interrupo.

Trabalhando com o Visua l Basic .NET

43

Com esse ponto de interrupo inserido, voc poder executar o projeto, e o processamento ser encerrado quando ele atingir essa linha. Como para o ponto de interrupo, h trs maneiras principais de iniciar um projeto: uma usar o boto da barra de ferramentas (que se parece com o boto de reproduo dos CD players ou videocassetes - veja a Figura 2.14), outra utilizar as opes Debug e Start do menu, e a tercei ra empregar o atalho do teclado, F5. claro que a ofr o a ser usada uma preferncia pessoal. Muitos programadores acham que, no fina l das contas, os atalhos do teclado so a forma mais fcil de acessar as funes mais comuns. Quando voc iniciar a execuo do projeto, ele ser rapidamente encerrado e exibir a linha de cdigo marcada com um ponto de interrupo. Agora, estamos no modo de interrupo, como indicado por [break] na barra de ttulo do IDE do Visual Studio. A seta amarela que pode ser vista na margem da janela do cdigo ind ica a linha que est para ser executada (processada). Nesse ponto, pode-se alterar a janela Command para o modo Immed iate e test-lo. Se sua janela Command estava visvel antes da execuo do projeto, ainda deve estar presente, embora o layout possa ter sido um pouco alterado quando certas janelas foram abertas automaticamente no momento em que voc estava no meio do processamento do projeto. Se a janela Command no estiver visvel, abra-a usando as opes View, Other Windows e Command Window do menu.
FIGURA 2.14
Debu!I ... X

A barra de fermmenra.l fornece boIes para


iniciar e imerromper li

II

ai

exeClIiio de
programas, IIsando cones parecidos com os eOlllroles de videocasseles.

D um cliq ue na janela para selecion-Ia (tornando-a a janela ativa no IDE) e digite irrmed (seguido da tecla Enter) para pass-la para o modo Immediate. Agora voc pode inserir qualquer instruo do Visual Basic, e ela ser avali ada imediatamente (da o nome). Tente as instrues a segtll r:
? Me.Width Me.Width " 50 ? Me . Width ? 3 + 5

?3" 5

44

Dia 2

Usar as teclas de seta para cima e seta para baixo enquanto estiver na janela
NOTA

Command/lmmediate nem sempre o transferir para outra l inha dela. Em vez disso, se voc j t iver comeado a inserir algum texto, poder passar pelos comandos executados. Se voc selecionar uma l inha que j passou (na janela) e comea r a adicionar texto nela, ser criada de modo automtico uma cpia dessa linha, com suas novas alteraes, na parte inferior da janela. Isso torna qualquer texto antes da ltima linha da janela efetivamente de leitura.

Notou o ponto de interrogao em frente a algumas das instrues anteriores? Isso indica

' exi~

bir' e, sem ele, o Vi sual Basic no saber o que fazer com as instrues que retornam um valor. Por exemplo, 3 + 5 produzir 8, mas, sem a instruo de exibio, 8 no ser um comando vlido do Visual Basic. Por outro lado, instruescomoMe.Width "Me.Width * 2 so trechos de cdigo vlidos do Visual Basic e no precisam do ponto de interrogao em sua frente. Pressione F5 para fazer com que a execuo do cdigo continue aps o ponto de interrupo, e o formulrio aparecer na te la maior do que o tamanho original se voc processou as instrues do exemplo fornecido anteriormente. Como pode ver, possvel afetar pmtes de seu programa a partir da janela Immediate, o que a faz uma tima ferramenta de depurao.

Dynamic Help
Estajane la de ferramentas configurada como uma guia com ajanela Properties (se voc estiver usando as configuraes do perfil Visual Basic Developer) e fornece referncias, com base no contexto, da documentao dos arquivos de ajuda do Visual Studio. Em vez de esperar que voc solic ite aj uda, esta janela de ferramentas age de modo proativo quando a tecla F I pressionada ou algo selecionado no menu Hel p. Com base em sua opo ou tarefaatual , ela exibi r uma lista de tpicos relacionados. Na Figura 2. 15, a janela de fe lTamentas Dynamic Help mostra um conjunto de tpicos de ajuda sobre a tag HTML atualmente se lecionada na janela de ed io de cdigos. Alm dos tpicos relacionados, essa janela em geral exibe um link para vrios tpicos mais genricos como (nesse caso) a seo Coding Techniques and Programm ing Practices (Tcnicas de Cod ificao e Prticas de Programao) da documentao. Essa janela de ferramentas tambm fornece um link direto para as sees de pesqu isa, contedo e indice da documentao de ajuda por meio de trs cones da barra de ferramentas.

Trabal hando co m o Vis ual Bas ic .N ET


_ " " " .......... _ ..... ' '' '[ .. _1 , ~ ,.. Jooh _ tIOI>

45
I!IIIIgE!

FIGURA 2 .15

A janela Dyllamic Help tellla !/IOSlra/" informaes Ileis


me.mlO anles qlle voc

' \!J - t;: g " .l~ ~I ~ -.,- $)- r.. I , _

:!O<'

....

as solicite.

' Tono'
. h'OS'.Ld . . . . . . . " ... .

' . ".H_ " "r.,,.,,.... IN.. " "ro" .. .......


C.~"OI'."""

" . Chn'S". "II.. Sy",_.""''''''S",,,",, .,, )

s,., ....., ,"" ..... ", ,


. ,

..........-.".." ............"." . . .........


'.,........', . .. , _ , L.....

.... , .............." ...,_........._. , ......, ,_., . , .. . .._ "... .....


~

.... ...
" "

.. . ... _

.... ..,., 1'0"01

,.. ,

~ ,, -_

,,_ . ,-~, .,.

'

'., . . . . . . . . " . . . , _. . . . . , L. . . . .

' ............>... , _

, _ .

Server Explorer
Estajanela de ferramentas (veja a Figura 2.16) fornece uma listagem visual de dois recursos es" senciais, bancos de dados e servidores. O primeiro conjunto de recursos representa todas as conexes estabelecidas entre seu projeto e vrios servidores de banco de dados, e perm ite que voc explore esses bancos de dados para examinar tabelas, procedimentos armazenados e OUlras informaes teis.

O segundo conjunto de infonnaes, Servers, representa qualquer mquina com a qual voc possa se conectar e que fornea uma interface visual para os recursos que ela possa tornar disponivel para seu programa. Esses recursos incluem contadores de desempenho, registros de eventos, filas de mensagens e mais, todos fac ilmente encontrados por me io desta janela de ferramentas. O Dia 13, "Usando o Server Explorer", se aprofunda no uso dessa janela de ferramentas para en" contrar e man ipu lar recursos de servidores.

46

Dia 2

FIGURA 2.16

O Sen'er ExploreI" fornece /lma maneira vis/lol de examil/ar e


IIsar recursos fanl a do

sel1'idor local qllal/lo


de outras mquinas.

'onol

.....
c .....

-_L.yo.'''.,.., ......
.... . ",."""
" . To . . . " ono"

... . . 'oOC., ......s, ....... h ...... r ., ....... ( ,


... ~.o .. . _

" .C "". ......." ....O<u' ... . . ''"I'"'. n,) !! .. ," $,,, . ,_.""' .c ,,,

..,

........,

Properties
O IDE do Vi sual Stud io permite que voc trabalhe com muitos itens, projetas, solues, formu-

lrios c classes diferentes, alm de outros recursos, todos possuindo atributos c propriedades.
Essas propriedades so in formaes que descrevem o item, como o nome de um projeto. Embora

as propriedades sejam em geral preenchidas automaticamente, com valores-padro, preciso

lima maneira de alter-las. A janela Properties fornece essa funciona lidade. Sempre que um item
for selecionado no IDE, os atributos desse objeto sero exibidos nesta jane la de ferramentas (veja a Figura 2. 17). Alguns desses atributos podem ser de leitura (no podem ser alterados), mas, se ass im o for, ento, ser possvel dar um clique neles na janela Properties e alter-l os quando necessrio.

Solution Explorer
De muitas maneiras, o Solution Explorer semelhante ao recurso do Windows Explorer usado no Windows. a interface de gerenciamento de arquivos do Visual Studio .NET. No Visual Studio .NET, o cd igo que voc criar poder ser organizado em camadas diferentes de agrupamento: solues, projetos e arqu ivos. A janela Solution Explorer permite que sejam vis ualizados todos os objetos que estejam abertos no momento, em seus respectivos grupos ou janelas. A janela Solutiotls contm projetos, isto , aplicativos e componentes individuais, como um sistema completo, incluindo componentes executados tanto no cliente quanto no servidor. Dentro de cada janela Project esto todos os arquivos efetivos do projeto (classes, form ulrios e outros elementos).

Trabalhando com o Vis ual Basic .N ET

47

FIGURA

2.17 Quando IIfIl objeto for


,,~m'

se/eciollado lia jalle/a

de ediiio (lima caixa


de texto em UIII

..
-, I

formulrio /lesse caso),


ajal/ela Properties exibir todos os seus
0-

atribllfos.

~r _~

o o o

-. .. -- ... -_0- .-0. _


"""' . ., ...
~

_., ..
o

o~

''''1, , o
o
p' ,
~~

o~

o~
~

- o
o

A lm de permitir que voc visualize o que est aberto no momento, ajane la Solution Explorer fornece vrios recursos, Por meio dela, podemos Adicionar novos arquivos a um projeto (d um cliq ue com o boto direito do mouse no projeto e selecione Add) Remover arquivos (d um cl ique com o boto direito do mouse em um arquivo especfico e selecione Remove) Adic ionar e remover projetos inteiros de um grupo Solution (d um clique com o boto direito do mouse na soluo para adicionar um projeto e em um projeto para a opo de remov-lo da soluo atual)

Class View
Como parte da discusso sobre o Solution Explorer, expliquei que poderia haver muitos arquivos diferentes envolvidos em um nico projeto OLl soluo, Esses arquivos em geral correspondem s classes criadas (como uma classe Veculo o u Conta), mas no h um requisito para que a organizao do arqu ivo se parea com a organizao conce ituai das classes no projeto. A jane la Class View (veja a Figura 2. 18) foi projetada para permitir que voc visua li ze a estrutura do objeto de seu projeto e use essa visualizao para navegar em seu cdigo. Dentro desta janela, voc pode min imizar e expand ir os objetos exib idos, para acessar as diversas propriedades e mtodos que eles expem. Dar um clique duplo em um item especfico de Class View o levar para essa classe, mtodo, evento, propriedade ou procedimento. Se o item sobre o qual houve o cl ique dup lo no estiver disponvel como parte de se u cd igo, Class View o conduzir para a definio dessa parte da classe dentro do Object Browser (veja a prxima seo) . A janela Class View til como uma mane ira de exami nar seu projeto atravs das classes definidas nele, ignorando os detalhes fsicos dos arquivos reais.

48

Dia 2

FIGURA 2.18

A janela C/oss View


moslra seu {)ro)elo

l ltle. .c~

p.*:I

(>oco

!II> _

'"'

.'"

OIgani::ado por seus


objelos e 11(10 por sellS

. .........,...

arq/lil'os fsicos. e fomece acesso direlo 00 il//erio/' desses objelOs.

"

. ...,
r

lOIREI

R ' ' ... ,_"

"'." ."M/
r . ' ''J
r-R ''o:''

,.

Object Browser
Toda a programao na plataforma ,NET baseada em objetos - os objetos fornecidos como parte do .NET Framework, os que voc criar e at os que outros participantes de sua prpria equipe desenvolverem. Todos esses objetos possuem propriedades e mtodos por meio dos quais
possvel interagir com eles, mas como saber o que est disponvel? O Object Browser foi projetado para ajud- lo no trabalho com todos esses objetos, permitindo que voc navegue e pesquise em um catlogo de objetos disponveis. Esse catlogo inclui os objetos (c lasses) expostos por qualquer biblioteca de classes que for referenciada, alm das classes contidas em seu prprio projeto. Semelhante em alguns aspectos Class View, o Object Browser vai alm da funcionalidade dessa outra janela, incluindo objetos externos ao seu projeto. Essa janela mais til como uma maneira de documentao ou referncia, permit indo que classes sejam encontradas dentro do .NET Framework ou outras bibliotecas de c lasses e seus detalhes visualizados, como s uas propriedades e mtodos. Na Figura 2. 19, podemos ver o Object Browser sendo usado para pesquisar o contedo da biblioteca System .oata, exibindo infonnaes detalhadas que vo at o nvel dos parmetros necessrios para uma celta chamada de mtodo.

Lista de Tarefas
Em qualquer projeto de desenvolvimento, mesmo os concludos, h a probabilidade de ficarem vrias tarefas pendentes para serem completadas. As sees do programa podem prec isar de ajuste no desempenho. Pode haver erros conhecidos ou recursos que necessitem ser remediados. Quando as tarefas pendentes podem ser relacionadas em uma rea do cdigo, uma prtica comum entre os programadores marcar essa rea com comentrios. Quando os programadores incluem consistentemente certas palavras-chave como TODO ou BUG nesses comentrios, mais

Trabalhando com o Visual Basic .NET

49

fcil varrer o cdigo procurando-as para encontrar os trechos apropriados. O Visual Studio .NET forma lizou esse processo fornecendo uma lista real de tarefas que preenchida de modo automtico com referncias a qualquer seo de seu cdigo que contenha uma das vrias palavras-chave como TODO (mas, voc pode especificar a palavra-chave que qu iser). Cada comentrio encontrado ser, em seguida, relacionado em uma lista fcil de usar, detalhando no somente o prprio comentrio, mas tambm o arq uivo e a linha onde foi encontrado (veja a Figura 2.20).

FIGURA 2.19 O Objecl !JrOll'sel"

~~-_ o

' w ,"'~ CII


o

,, ~ e.I,,!

....

.........,

permile qlle sejam


examinadas as classes

....

-,'

""'...,. . _

" ' _ I i . - . . . , . "' I"-rl


o

fomeddas pelo .NET


Framell'ol"k e de qualquer oufra

"..

,...

bibliOleca que voc


fel/ha criado
011

refelellciado.

NeTA

Voc pode adicionar suas prprias palavras-chave lista de sim bolos reconhecidos por meio da caixa de dilogo Options. Na sua seo Environment\Task Ust, possivel acrescentar novos sim bolos e especificar configuraes para a tarefa, que sero criadas quando essa palavra-chave for encontrada. As palavras-chave s sero consideradas quando fo rem encontradas nos comentrios de seu cdigo.

Com um rpido clique duplo em uma tarefa pendente, voc ser levado de imed iato para o cd igo, no qual poder trabal har no que ela indicar. Alm dessa funcionalidade - por si s bastante ti l -, a lista de tarefas pode conter vrias outras espcies de tarefas. O Visual Studio adiciona outras tarefas automaticamente, como a referncia a erros compi lados e outros itens perceptveis. Mas voc tambm pode acrescentar dois tipos de tarefa a essa lista: atalhos de cdigo e tarefas definidas pejo usurio.

50

Dia 2

2.20 Cada comentrio marcado COI/1 1/111(1 palavra-chore especial


FIGURA

lIIos/rodo em lili/a

lisra de farefas bem


orguni=ada.
Pnv., . . . . .
''f<(),
C~.ycl1< ~ (

,.,.... , lO "

...... l _ , . . ' ,"_ . ~.l'<' ....."" . .. <0.) ... b,oeO'7 . e,,< ~

~_"._

oh,.,

""u

.... . ..... ...... <OCoprC " 1

' oO ....

'"

Os ata lhos de cdigo so semelhantes s tarefas com base em comentrios, mas so uma referncia a alguma linha do cdigo. No precisam de nenhuma palavra-chave especial. Para adicionar um atalho de cdigo lista de tarefas, d um clique com o boto direito do mOllse na janela de edio de cdigos e se lecione o item Add Task List Shortcut no menu. Uma nova tarefa ser adicionada a sua lista, com o padro para a descrio sendo a linha de cdigo selecionada (embora voc possa, e provavelmente deva, a lterar isso para outra descrio que queira usar). Em segu ida, voc poder retornar rapidamente para essa linha apenas com um clique duplo nessa tarefa. Quando um atalho criado, uma seta azul posicionada na margem es, querda da janela do cdigo prxima linha apropriada. E possvel remover o atalho dando um clique com o boto direito do mouse na linha do cdigo e selecionando Remove Task List Shortcut ou selecionando o item novo da lista de tarefas e exclui ndo-o diretamente.

o outro tipo de tarefa que voc pode criar uma tarefa do usurio, que no est associada a nenhum trecho em particular do cdigo, semelhante a uma tarefa-padro do Outlook. Uma tarefa do usurio ad icionada com um clique na seo C lick Here to Add a New Task da lista de tarefas e preenchendo-se os detalhes. Observe que, diferente das outras tarefas, essa no possui campos de arquivo/linha preenchidos e, portanto, s tm dois campos disponveis, a descrio e a prioridade (baixa, normal ou alta). Se qu iser criar uma observao sobre uma rea especfica do cd igo, voc com certeza achar mais til gerar um atalho de cdigo e alterar a prioridade e a descrio para fornecer mais detalhes sobre a questo real.

Solues e Projetos
Como discut imos na seo "Solution Explorer", ex istem vrios nveis nos quais seus cd igos podem ser agrupados. O prime iro, a soluo, representa o sistema completo que est sendo cria-

Trabal h ando co m o Vis u a l Bas ic .N ET

51

do, enquanto os componentes individuais dele so representados por projetas separados. Antes que voc possa desenvolver qualq uer cdigo no IDE do Visual Stud io, precisa configurar a sol uo e pe lo menos um projeto. Nesta seo, percorreremos os princpios bsicos da organizao do cdigo, criando novos proj etas e traba lhando com projetas e arquivos existentes. A seguir apresento um resumo desses tpicos, mas, na seo logo a seguir, passaremos a praticar essas habil idades gerando um exemplo com pl eto de um aplicativo.

Criando um Novo Projeto


Existem algumas maneiras de criar um novo projeto, mas o mtodo mai s comum usa as opes File, New e Project do menu. Essas opes apresentam uma caixa de dilogo que mostra todos os diferentes tipos de projetas que o IDE pode gerar (veja a Figura 2.2 1). Jque o IDE do Visual Studio trabalha com vrias linguagens, a caixa de dilogo mostra as opes com base nas linguagens que voc tem instaladas e podem apresentar uma aparncia diferente da exibida na Figura 2.2 1. Por enquanto, desenvolveremos projetos com base nas opes da pasta Vis ual Basic Projects.
_ .... _ t

FIGURA 2.21 O Visual Studio possui 111110 caixa de dilogo chamada Neli' Projecto que permite que 1I0~'OS projetos sejam acrescentados quando voc il/stala modelos

ou linguagens
adicionais.

.. .

~~

""_

lo,y>oo .., ..... ~1H1 ............11 3

I~~~~~'~'.~.~~~~~~~~~~~==~
, L.

_ ..

, ~,

Para criar um ap licati vo que seja executado localmente em sua mquina e usar uma interface com o usurio com base no Windows (com caixas de dilogo e outros elementos UI do Windows), selecione Windows Application na lista de tipos de proj etas. Para conclui r o processo de criao, digite um nome para seu novo aplicativo e, se quiser, altere o caminho sugerido. D um clique em OK, e o Visual Studio gerar seu novo projeto. E uma boa idia dar a seus projetas nomes significat ivos, mesmo quando voc estiver apenas fazendo testes; caso contrrio, logo haver todo um grupo de projetas com os nomes WindowsApplicat ion I e WindowsApplication2, dificultando a localizao de algo em que tenha estado trabalhando.

Abrindo um Projeto Existente


Quando o Visua l Studio for encerrado, ele perg untar se voc deseja salvar o que esteve usando e fechar tudo de modo automtico. Para que se possa voltar a um projeto anterior, esse precisar

52

Dia 2

ser aberto no IDE. O Visual Studio fornece algumas maneiras fceis de abrir projetas passados. Um mtodo llsar o menu atravs de File, Open e Project ou diretamente pe la opo Recent Projecls prxima parte inferior do menu Fi le. Outro mtodo por meio da seo Gel Started da pgina inicial do Visual Sludio, uma pgina HTML que lista os ltimos projetas uti lizados. Nesse local, possvel dar um clique no projeto especfico que se quer abrir ou at criar um novo atravs de um link adicional. Abrir um projeto novo faz com que qualquer oulro projeto que j esteja sendo usado seja fechado, a menos que sejam empregadas as opes Fite e Adct Project do menu, que adicionam um projeto novo ou ex istente so luo aberta recentemente.

Arquivos
As solues e projetos existem quase apenas para fin s de organizao; o cd igo efetivo reside em um ou mais arquivos individuais. Quando voc cria um projeto novo, em geral so gerados certos arquivos, como um novo formu lrio Windows (form1.vb) ao ser criado um ap li cativo Windows e um novo mdulo (Modul elo vb) para um apl icativo do console. Esses arquivos so gerados em disco e existem independentemente de seu projeto, permi tindo que um nico arquivo seja compartilhado por vrios projetos se isso fo r desejado.

Adicionando Arquivos a um Projeto


Alm dos arquivos que so criados de modo automtico corno parte de seu novo projeto, voc tambm pode querer adicionar mdulos, classes e formulrios complementares ou outros tipos de arquivos de cdigo. Por meio do menu Project ou do que surge com um clique no boto direito do mouse sobre o projeto da janela Solution Explorer, possvel optar por acrescentar qualquer arquivo de vrios tipos. Independentemente da opo espec fica do menu que foi escolhida, com exceo de Add Existing Item, todas o conduziro caixa de dil ogo Add New ilem (veja a Figura 2.22). Se, em vez de criar um novo item, voc quiser ad icionar um arquivo existente ao disco, a opo Add New Exist ing Item do menu apresentar, para esse fim , uma caixa de dilogo para abertura de um arquivo-padro.
FIGURA 2 .22

.......... ".no ,...,


c,,__ ,
8 U""~',qK"t _

Da mesma maneira qlle a caixa de dilogo Neli' Projecl. a ime /face para adicionar ilens lIoms ao pr ojeto expallsheI.

-O'~

c,"

"'lO o .....,.

"'-

,- , ~

[ii.]

-'- " -!m ;:!li


iD
~~
~ ,~

[j,

''' '1fIT'\ _""" <I,' _ ""


I """,-~

..,.,.
I

Trabalhando com o Visual Basic .NET

53

Salvando Tudo
Com todos esses grupos diferentes (solues, projetos e arquivos), importante saber como salvar os trabalhos que fo ram executados, mesmo se estiverem localizados em mais de um arquivo. No IDE do Visual Studio, isso feito atravs de dois comandos diferentes: Save e Save AlI. Esses comandos, situados no menu Fi le e na barra de ferramentas, permitem que seja salvo apenas o arquivo selec ionado no momento (selecionado najanela Server Explorer) com o uso do comando Save ou, por meio do comando Save Ali, todos os arquivos abertos que tenham sido alterados. Se voc tem medo de perder seu trabalho, como eu, ficar especialmente interessado em uma das opes do IDE. Na caixa de dilogo Opt ions (acessada por meio dos itens Tools e Options do menu), possvel expandir o grupo Environment e se lecionar o item Projects and So lutions para ver um conjunto de trs botes de opo sob o cabealho On Build/Run (veja a Figura 2.23). Essas opes controlam se o IDE salvar algum arquivo alterado antes de comear a executar um projeto. Essa uma configurao importante porque, se o IDE falhar em algum momento, bem mais provvel que isso acontea quando seu cdigo estiver em execuo. Essa opo fornece lima maneira fcil de assegurar que todas as suas alteraes sejam sempre sa lvas antes da execuo de seu cdigo.
""' ,o~

FIGURA 2.23

Ao usar IIfIl cOlI/plllador noro, )'erifique sempre essas configuraes para sall'ar 110 momelllO do deselll'oll'ime/1/o. de modo qlle el'ite a perda de algumas horas de codificao.

- (noW_

0 _" c""" ..
D_
Cl l.,. EdOor

_ ......... _ .-,
~

.""" ..... C<b.

-~

p _

"""""'" _ _ _ bo.>Id ..... "


, .... <t...-.hot ~ - . , . _
~

_
...
,, "'"

El I

~ _

..... """""" .... "91

I'. r. "II r

r o.nl .... ot...,."'.

"....,c"' .... ~ t._-......,


_ ......

..... _

"' _ - . .

D_

O 0 ..... _ 11<

~" -~-~------''

Criando Nosso Primeiro Aplicativo Windows


Agora que voc aprendeu alguns princpios bsicos relativos ao uso do IDE do Visual Studio, pode usar essas infonnaes para desenvolver um aplicativo sem precisar codificar muito. Esse exerccio se concentrar no uso do prprio IDE, o que significa que iremos gerar um aplicativo relativamente simples. No exemplo, criaremos um apl icativo Windows (um apl icativo que lisa a interface com o usurio do Windows e executado localmente em sua mquina) que permite ao usurio inserir dois nmeros. Em segui da, o aplicativo adicionar os nmeros, exibindo o resultado final.

54

Dia 2

Crie o Projeto
Nos menus, selecione os comandos File, New e Project, apresentando ass im a caixa de dilogo New Project. Na categoria Visual Basic, selecione o cone Windows Application e altere o nome do projeto de Wi ndowsApp 1i cat ion(x) - o nome-padro numerado - para Adder (a menos que voc seja importunado por intromet idos, situao na qual poder nomear o projeto da maneira que quiser). O novo proj eto j ter um formulrio, que tudo de que voc precisa para comear a trabal har no apli cativo. O Visual Studio criar automaticamente uma pasta Solution para armazenar seu projeto novo, tambm dando o nome de Adder a ela. D um clique em OK depois que tiver inserido os nomes corretos do projeto e da soluo.

Desenvolva a Interface com o Usurio


Voc precisa de trs caixas de texto e apenas um boto no formu lrio. A posio no assim to importante, mas voc pode desejar que sua interface tenha uma aparncia semelhante da Figura 2.24. D um cl iq ue duplo em Form 1 no Server Explorer, trazendo-o para a janela de projeto no centro do IDE. Agora, com o formu lrio no modo Design, selecione ou abra ajanela Toolbox. Essajane la, que mostrar todos os objetos disponveis que podem ser colocados em seu formulrio, contm um controle TextBox e um controle Button. Para inserir um desses controles em seu formulri o, d um clique nele e arraste-o para a posio correta. Quando ele estiver no formulrio, selecione o controle e use suas alas para redimension-lo at a forma e tamanho desejados. Trabalhe com o redimensionamento e a posio desses controles at que consiga que todas as trs caixas de texto e o n ico boto estejam no formulrio com a aparncia do exemplo (Figura 2.24). Depois que tudo estiver posicionado, altere algumas propriedades desses controles.
FIGURA 2 .24

O'gani=e as Irs caixas de lexto e o nico boIo em sell

A.

. :._ -_.~
'Il1o

'Ii. .

formulrio para que lenllam lima aparncia


semelhanle a esta
jigum.

o
~ __

o .

111-(:1

I I
.... I I ... I I

I I

Trabalhando com o Vis ual Basic .N ET

55

Selecione a primeira caixa de texto (a mais prxima da parte superior do formulrio) e exiba ajanela Properties (pressione F4 ou selec ione View e Properties Window no menu, se a janela j no estiver visvel). Vrias propriedades diferentes sero listadas, mas voc s ir alterar duas de las: Text (no grupo Appearance) Representa o contedo da caixa de texto. Exclua o contedo desta propriedade para fazer com que a caixa de texto fique vazia quando o programa for iniciado. (Name) (no grupo Design) No cdigo, voc se referir a essa caixa de texto usando o nome desta propriedade, que tem como padro um nome relativamente irrelevante, como Text2 ou Textl. Neste exemplo, altere para txtF1rstValue. Continue com as outras duas caixas de texto, deixando sua propriedade Text em branco e alterando seus nomes para txtSecondValue e txtResult , respectivamente. Agora selecione o boto para exibi r seus atributos na janela Properties. Voc tambm alterar somente dois valores desse objeto, (Name) para btnAdd e Text para Add. Para concluir, s porque tem esse recurso, voc alterar uma das propriedades do prprio formulrio. Selecione o formu lrio (d um clique em algum local dele que no seja Outro objeto) e role pela lista de propriedades para encontrar a propriedade Text no grupo Appearance. Para um formulrio, essa propriedade representa seu titulo (o texto exibido na barra de ttulo), o qual poderemos configurar como Simple Adder no exemplo.

Executando o Projeto
Mesmo se voc no tiver inserido um cd igo, o projeto poder ser exec utado da maneira como se encontra. O IDE do Visual Stud io permite que o programa seja processado dentro de le, sem a existncia de um programa executvel (um arquivo .exe, por exemplo). possivel processar rapidamente o trecho de cd igo necessrio durante o desenvolvimento e, o que mais importante, executar vrias tarefas de depurao enquanto o programa estiver sendo processado. Mais informaes sobre os aplicativos de depurao sero fornecidas no Dia 6, mas, por enquanto, essencial observar que h uma diferena entre processar seu cdigo no IDE e gerar um arquivo executvel real. A criao de um executvel, ou outro tipo de arq uivo de resultado de seu projeto, chamada de construo e ser abordada na prxima seo. Para executar um projeto no IDE, se lecione Start no menu Debug, pressione F5 ou use o boto da barra de ferramentas que se parece com uma seta para a direita (ou com o boto de reproduo de um videocassete). Tente isso agora, com o projeto Adder que voc j abriu, e ver o formulrio sobre o IDE do Visual Studio. Mesmo sem que tenha sido escrita uma nica linha de cdigo, o fonnu lrio parecer bem fu ncional. Ele poder ser arrastado pela tela e minimizado, tudo por causa do .NET Framework e do IDE subjacentes que permitem a criao visual de uma interface com o usurio e produzem o cd igo necessrio para faz-Ia funcionar.

Dia 2

Embora voc no tenha escrito nenhum cdigo, uma codificao extensa j foi gerada pelo IDE, e ela que executada quando o projeto processado.

Construindo o Projeto
Construir um projeto a criao de um executvel ou outros arquivos de resultado. Para um aplicativo Windows como o do exemplo, isso significa a compilao de seu cdigo em um arquivo .exe que possa ser executado fora do IDE do Visual Studio. Essa uma etapa essencial se voc pretende que um projeto seja usado por outras pessoas que no sejam desenvolvedores, embora possa ser evitada durante o desenvolvimento pela execuo dentro do IDE.

Configuraes para a Construo de Projetos


Para construir um projeto, selecione Build no menu Build (no so nomes muito criativos para os menus, mas so fceis de entender), que parecer ser de muito pouca utilidade. Sem fornecer muito em termos de informao, as configuraes-padro de Build criaram um arquivo Adder .exe, inserindo-o no subdiret6rio bin da pasta de seu projeto. A menos que voc tenha optado por personal izar Ocaminho exibido quando criou este projeto, ele deve estar localizado em My Oocuments \ Vi sua 1 Stud i o Proj ects \Adder, e o arquivo executvel em \bi n\Adder. exe dentro desse diretrio. Para examinar todas essa configuraes-padro, e, quem sabe, alter-Ias, d um clique com o boto direito do mouse em seu projeto na janela Soluti on Explorer e selecione Properties no menu suspenso que aparecer. A caixa de dilogo das propriedades de seu projeto contm vrias configuraes, mas as que so relevantes para o processo de construo esto descritas a seguir. Em Common Properties\General: Assembly name Este valor fornece a primeira parte do nome do arquivo de seu arquivo de resu ltado. No caso do exemplo, ele Adder, portanto, Adder .exe fo i criado. Altere-o para MyAdder, e MyAdder . exe ser criado quando voc iniciar a construo. Output type Infonna ao IDE que tipo de arquivo ser criado na construo deste projeto, com a extenso .exe se Windows Appli cation ou Console Application for selecionado, ou .dll, se Class Library for selecionado. Startup object Indica a parte do projeto que deve ser executada por padro quando o aplicati vo for processado. No exemplo, ela deve ser Adder. FonnI para indicar que o formulrio deve ser executado de maneira automtica. Observe que, se voc alterar, mesmo temporariamente, Output Type de Windows A pplication para qualquer outra opo, essa propriedade tambm ser modificada e pode acabar configurada de modo incorrcto. Cancele todo o processamento da caixa de dilogo de propriedades do projeto (dando um clique no boto Cancel na parte inferior do formulrio) se voc perceber que alterou algo que no sabe como corrigir. Todas as configuraes de Common Properties\Version so armazenadas nos arquivos de sada quando o projeto construdo, e ficam visveis como parte das informaes das propriedades do

Trabalhando com o Vis ual Basic .N ET

57

arquivo executvel final (veja a Figura 2.25). Enquanto voc esliver aprendendo o Vi sual Basic, as informaes inseridas nessa caixa de dilogo podem ser irre levantes, mas, quando criar um apl icativo que ser distribudo para os usurios, recomendvel levar em considerao as informaes dessa pgina com muito cuidado. No mnimo, certifique-se de que inseriu os nmeros corretos das verses na pgina porque eles fornecem um mtodo conclusivo para os usurios verificarem que verso de um aplicati vo possuem.

FIGURA 2.25 Qual/do voc visualizar as propriedades de /1111 arquivo execlltrel 011
DLL. poder examinar fodas (/s informaes

FIo .... <icn

1.0.2'314.16

especificadas antes de sI/a cOllstruc7o.

0Ih0r ..."", rl'."i_".':"'~

-------

Em Common Properties\Build, apesar do nome, encontramos apenas uma propriedade que claramente relevante para o processo de construo. O valor de Application Icon determina a aparncia do arquivo tinal .exe no Windows e permite que voc se lecione o arqu ivo de cones (.ico) que desejar. Embora no sejam as nicas configuraes adicionai s que aretam a construo, os ltimos itens que mencionarei esto em Configurat ion Propert ies\Build. Nesse loca l voc encontrar vrias configuraes relacionadas com a depurao, assim corno a configurao de Output Directory, que determina onde o arquivo executvel ou outros que forem criados sero posicionados.

Outras Configuraes de Construo


Na parte superior da caixa de dilogo Projcct se encontra uma lista s uspensa chamada Configumlion. O Solulion Contigural ions um recurso til do IDE do Visual Sludio, que permite que voc crie mais de um grupo de configuraes para o mesmo projeto. Por padro, duas configuraes so fornecidas (Release e Debug), projetadas para indicar se esto sendo construdos resultados para fins de teste (Debug) ou para desenvolvimento real (Re lease). As definies para essas con fi guraes-padro so um bom exemplo da fi nalidade do Solution Configurations, que define o status de vrios recursos de depurao e at de um local diferente de resultado para cada um deles.

58

Dia 2

Com o Configuratioll Manager (yeja a Figura 2.26), voc poder criar quantos grupos diferentes de configurao ou at mesmo remover uma existente . Por enquanto, ser prefervel deixar as configuraes como esto, selecionando a verso Release do resultado quando estiver implantando o projeto, e Debug no teste.
FIGURA 2 .26
Conflgural lon M<lMg~r

13

O Configuratioll Mal/ager permite que \'oc crie co/!figuracs diferenles para fillalidades distintas (leste. depurao.
aCeifa(io do 1I.WI'iO,

liberao e ol/Iras). cada IIlIIa podendo ter configuraes diferemes no lIIel/lI Build.

Criando um Arquivo Executvel


A melhor maneira de entender um recurso do IDE usando-o, o que significa que hora de construir O projeto do exemplo e produzir um arquivo executvel. D um cl ique na opo Build do menu de mesmo nome, e ver uma infonnao piscar rapidamente na janela Output (exibida na parte inferior de sua tela, se voc no a tiver mudado de lugar). Se tudo correr bem e no houver erros em nenhum cdigo que tenha sido adic ionado ou alterado, o processo de construo produ~ zi r um arquivo executvel. Esse arquivo, que foi chamado de Adder . exe, ser criado no subdire~ trio bi n da pasta de seu projeto (por padro, My Documents\Visua l Studio Projects\Adder). Minim ize o IDE do Visual Studio, use o Windows Explorer para encontrar o arquivo e, em se~ guida, d um clique duplo nele para executar seu ap licativo Windows recm~criado. O formu l~ rio, com suas diversas caixas de texto e botes, aparecer para mostrar que o programa est sendo processado e continuar a ser at que esse mesmo formulrio seja fechado. Esse arq uivo executvel, j unto com o .NET Framework, tudo que necessrio para fazer a distribuio para a mquina de um usurio de modo que esse possa executar seu programa.

Adicionando Seu Prprio Cdigo


At aqui, o exemplo do projeto em que voc esteve trabalhando continha apenas o cdigo gerado pelo IDE do Visual Stud io, que tem sido timo para mostrar O formu lrio, mas no faz mais nada. Como j deve ter sido percebido pelos nomes e layout do forrnu lrio, esse aplicativo adi~ danar valores primeira e segunda ca ixas de texto e colocar o resultado em uma terceira e l ~ ti ma. Para tanto, ser preciso acrescentar um cdigo ao projeto que ser executado quando o usurio der um clique no boto Add.

Trabalhando com o Visual Basic .NET

59

o uso do IDE faz com que esse processo seja muito direto: d um clique duplo no formulrio do
Solution Explorer para assegurar que a visualizao do projeto esteja ativada e, em seguida, d um clique duplo no boto Add. Isso o conduzi r para a visualizao do cdigo do formul rio e a uma subrot ina que foi ad icionada pelo IDE. Um controle, como esse boto, caixas de texto ou outros componentes do formulr io, pode ter eventos associados a ele. A maioria dos eventos de um controle representa aes executadas neles como serem clicados, clicados duas vezes, selecionados e desmarcados. possvel criar procedimentos que sero executados quando um desses eventos ocorrer e, por padro, esses procedimentos so designados pelo seu nome (o nome do controle, btnAdd, segu ido do evento, C1 i ck). Podem-se associar proced imentos a eventos, independentemente de seus nomes, mas neste caso, o procedimento btnAdd Cl ick ser executado se o usurio der um clique no boto. fcil testar essa funcional idade usando um recurso muito til do .NET Framework que fornece os formulrios, botes, caixas de texto e outros elementos de interface, e, portanto, est disponvel para qualquer projeto no qual se esteja usando esses objetos. A classe MessageBox permite que uma mensagem seja exibida em uma caixa de dilogo com uma nica linha de cdigo, como esta: MessageBox . Show("O boto foi clicado") Esse cdigo exibe uma ca ixa de dilogo como a mostrada na Figura 2 .27. A simpli cidade do uso dessa classe a torna perfeita para ser empregada como uma ferramenta de teste ou de depurao. Adicione a li nha de cdigo anterior sub-rotina btnAdd_C1 ick e, em seguida, execute o projeto pressionando F5. Depois que o formulrio aparecer, tente dar um clique no boto. Cada clique deve provocar o aparecimento da caixa de mensagem, mostrando a voc que o cdigo de btnAdd Cl i ck executado sempre que o boto pressionado.
FIGURA 2.27 A classe MessageBox fornece uma mal/eira fcil de exibir iliformaes lia tela e

I T.". M=- I

em gera/usada fases de
depurao/lesfe,

11m'
1'1'0'"

Agora que voc j sabe como executar um cdigo que responde ao clique em um boto, poder criara cd igo efetivo de seu projeto. Ele tem de somar dois valores para produzir um resu ltado, o que soa mais fcil do que na realidade. Os valores que queremos so os contedos de suas caixas de texto, disponveis por meio da propriedade Text desses controles, mas antes que possamos us-los em uma equao matemtica(somando-os), temos de convert-los de strings (texto)

Dia 2

para nmeros. O cdigo a seguir, se colocado no lugar da chamada de MessageBox, adicionada anteriormente, far o que prec isamos : txtResult . Text =(Clnt(txtFirstValue.Text) +Clnt(txtSecondValue.Text)).ToString Esse cd igo converte o contedo das duas caixas de texto em nmeros (inteiros, neste caso), faz a soma e, em seguida, converte o resultado de novo para lima string (texto) de modo que ele possa ser inserido na terceira caixa de texto. So necessrias algumas etapas para fazer algo que aparentemente muito fcil quando descrito pela primeira vez, e o resultado final pode parecer um pouco confuso. Tudo ficar mais claro ao darmos prosseguimento no Dia 3, " Introduo Programao com o Visual Basic .NET".

Resumo
O objetivo do I DE fornecer um ambiente no qual voc possa escrever, editar, executar e depurar seus programas, e o do Visual Stud io fornece todos esses recursos e ma is. Esta lio abordou os recursos bsicos do IDE e a fi nalidade de cada uma de suas jane las princ ipais. Tambm o conduziu pela criao de um aplicativo Windows simples. Daqui em diante, estaremos usando o IDE freqUentemente, apesar de nem sempre trabalharmos com elementos visuais (como formulrios e controles). Portanto, aprenderemos mais sobre ele e seus recursos o tempo todo. Embora possa parecer um pouco confuso e cansativo agora, o IDE a ferramenta que voc usar para fazer sua programao de modo que, com o tempo, e la se tornar familiar.

P&R
P Preciso usar o IDE ou posso apenas empregar um editor de texto e a linha de comando?
R No Visual Basic .NET, possvel fazer qualquer coisa usando apenas a linha de comando e um editor de texto, mas o IDE fornece uma grande quantidade de recursos para tornar o desenvolvimento um processo mui to mais fcil. O Intel li Sense, a estrutura das instrues e a edio codificada em cores, tudo faz com que a criao de cdigos seja mais agradvel, alm de ser difcil ficar sem os recursos de depurao.

P Posso adiciona r meus prpr ios recursos ao ID E do Visual Studio?


R Com certeza! O IDE d suporte personalizao por me io de vrios mtodos diferentes, incluindo macros e complementos. No abordarei a personalizao do IDE neste livro, mas, por hora, examine os ti mos exemplos de macros nas opes TooIs, Macros e Macros IDE do menu.

Trabalhando com o Vis ual Basic .N ET

61

Workshop
o Workshop foi planejado para ajud-lo a antecipar possveis dvidas, revisara quej aprendeu
e comear a pensar em como colocar seu conhecimento em prtica. As respostas do teste esto no Apndice A, " Respostas dos Testes/Exerccios".

Teste
I. Se voc quisesse ver todos os arquivos que fazem parte de seu projeto, que janela do IDE usaria? 2. Qual o local-padro dos novos projetas do Visual Studio? 3. Como voc pode escolher um cone para um aplicat ivo que esteja desenvolvendo no Visual SlUd io? 4. Se a janela Command estiver no modo lmmediate, como posso passar para o modo Command e depois voltar?

Exerccios
Exatamente como voc fez nesta lio, use a classe MessageBox para adicionar mensagens ao procedimento de outros eventos e verifique quando forem chamados. Tente selecionar txtResul t na primeira lista suspensa da janela de edio de cd igos e, em seguida, TextChanged, na segunda lista para trabalhar com esse evento.

SEMANA

DIA
Introduo Programao com o Visual Basic .NET
Agora que voc se fami liarizou com o ambiente .NET de desenvolvimento, hora de comear a
escrever cdigos. Embora com o V isual Basic .NET sej a fcil escrever um programa simples

sem o uso de muita codificao, mesmo se for mais sim ples que uma verso de demonstrao, ele precisar manter o registro das infonnaes e executar clculos elementares e tarefas semelhantes. Para escrever cdigos que executem essas tarefas, ser necessrio um bom conhecimento sobre variveis. Por meio da compreenso do emprego e dos tipos de variveis, criada a base

para ass imilao do Visual Basic .NET. De maneira parecida, exalamenle como quando iniciamos o aprend izado da aritmtica simples, precisaremos aprender alguns operadores fundamentais que podem ser ut i Iizados no trabalho com variveis numricas e ai fanumricas. Nesta lio, voc aprender:
o o o

Os tipos de variveis que pode criar com o Vi sual Bas ic .NET. Alguns operadores e funes simples disponveis no Visual Basic .NET. Os princpios bsicos para escrever cdigos no Visual Basic .NET, inclusive como desenvolver procedimentos.

64

Dia 3

Variveis e Atribuio
Varive is e atribuio so a base de toda linguagem de programao. As variveis permitem que voc armazene informaes para uso posterior e a atribuio a maneira de inserir informaes .. . nas vanavcls.

O Que E uma Varivel?


Uma varivel um depsito. um local para guardar as informaes at que sejam necessrias. Voc usar variveis em toda a extenso de seus programas para reter valores temporrios durante os clculos, armazenar ent radas do usurio e preparar as informaes que sero exibidas posteriormente para eles.

Tipos de Variveis Disponveis


Exatamente como acontece com as calas, s um tamanho no atende a todas as variveis. Embora seja poss vel criar e usar uma varivel que seja capaz de conter o que for, essa nem sem pre a melhor soluo. E fcil deduzir que uma varivel que contm strings deve executar algo diferente de outra criada para annazenar nmeros. Alm disso, mesmo tipos diferentes de nmeros requerem tipos d istintos de variveis. Alguns nmeros, como I ou 5280, no possuem casas decimais, enquanto 3, 14 I 59265358979 e 16,50 apresentam essa caracterstica. Uma varive l gerada para conter um nmero dec ima l deve ter uma manei ra especfica de manlero registro dos valores depois da vrgula. claro, que isso significa que os nmeros decimais provavelmente consumiro mais memria. Sempre que um computador ou programa realiza um trabalho maior, em geral precisa de mais memria. Portanto, importante lembrar no s do tipo de informao que voc prec isa annazenar, mas tambm do espao da memria que o computador ter de man ipular para registrar a varivel.
/-l trs tipos abrangentes de varive is que voc pode criar com o Visual Basic .NET. O primeiro conjunto engloba as variveis que mmazenam valores simples, como nmeros ou strings. H muitas desse t ipo, cada uma foi projetada para conter valores de vrios tamanhos. A segunda categoria a das variveis complexas, que contm alguma combinao de variveis simp les e incluem arrays e tipos definidos pelo usurio. Os arrays so variveis que armazenam muitas outras, e os tipos definidos pelo usurio permitem que o usurio crie novos tipos de variveis. A terceira categoria a das variveis de objeto. Os tipos definidos pelo usurio (tambm conhecidos como estruturas) e as variveis de objeto sero abordados no Dia 7, "Traba lhando com Objetos". A discusso desta lio se concentrar nas variveis simples e arrays.

Introduo Prog ramao co m o Visua l Basic .N ET

65

Variveis Simples
Como descrito anteriormente, os tipos simples de variveis ' arrnazenam ' valores como nmeros e palavras. Portanto, voc pode achar que s necessrio exist ir dois tipos de variveis: de nmeros e de palavras. Porm, na verdade, h vrios tipos diferentes de variveis simples - cada um criado para armazenar tamanhos ou ti pos disti ntos de nmeros ou stri ngs. Tente usar o melhor tipo de varivel para a situao. Em algumas vezes, s ser preciso manter o registro de um nmero peq ueno - por exemp lo, se estiver armazenando os meses do ano. Em outras, ter de trabalhar com nmeros grandes - por exemplo, se estiver escrevendo um programa que execute clculos cientficos ou de engenharia. As variveis simples podem ser divididas em quatro subgrupos. O primeiro e maior o dos inteiros, nmeros que no possuem casas decimais. O segundo grupo usado para nmeros com casas deci mais. As strings e os caracteres compem o terceiro grupo, e o quarto seria me lhor descrito como ' diversos' . Examinemos cada um desses grupos e vejamos quando qual apropriado usar em que situao.

Variveis de Inteiros
Novo As variveis de inleiros (integer) amlazenam os conhecidos nmeros inteiros (isto , nmeros sem casas decimais). Essas variveis so as que voc usar com mais freqOncia nos programas e as mais fceis para os computadores tratar. Por causa dessa comodidade, elas devem ser seu tipo preferido quando for preciso trabalhar com nllmeros. A Tabela 3.1 mostra diversas variveis de inteiros diferentes, cada uma fo i criada para armazenar numeros de tamanhos distintos e para empregar quantidades diferentes de memria. A quantidade de memria utilizada medida em bytes. (Um byte contem oito bits, o que e apenas uma maneira tcnica de dizer que cada byte possui oito algarismos um ou zero, ou uma combinao de uns e zeros.) Embora no haja problema em usar uma varivel projetada para conter valores maiores do que o necessrio, ela consum ir mais memria. Alm disso, pode fazer com que seu programa seja executado mais lentamente porque teria de manter registras de sees maiores da memria, mesmo que essas nunca fossem utilizadas,
TERMO

Dia 3
Tipos de Varivel de Inteiros
Tamanho (Bytes) Abrangncia Comentrios

TABELA 3 . 1

Tipo de Dado

Byte

o a 255

Um pouco limitado e, diferente dos outros tipos de dados inteiros; o Byte no d suporte a nmeros negativos. Isso acontece porque ele representa o valor que o computador realmente am1azena em cada byte da memria. Para armazenar nmeros negativos, o computador usa uma parte de cada byte para guardar a poro 'negativa' . t il quando se mantm registros de numeros pequenos que nunca so negarivos, como os dias de um ms ou os meses de um ano. Uma varivel de inteiros pequena e prtica. Voc pode usar um tipo curto sempre que no precisar de todo o intervalo de um tipo inteiro, por exemplo, se estivesse escrevendo um programa para contar a quantidade de empregados de urna empresa que s tivesse alguns milhares de funcionrios.
A varivel de inteiros-padro. Em geral, o inteiro o tipo mais ve loz de varivel para

Curto (Short)

-32.768

a
32.767

Inteiro (Integer)

- 2.147.483.648

a
2.147.483.647

se usar, j que ele requer menos trabalho do computador. Um emprego para esse tipo de varivel seria registrar a quantidade de ovelhas da Nova Zelndia (aproximadamente 47.394.000 em 1997).
O tipo de varivel perfeito para esta po-

Longo (Long)

- 9.223.372.036. 854.775.808

a
9 .223.3 72 .036.8 54.775.807

ca em que estamos trabalhando com nmeros mu ito, muito grandes (isso sign ifi ca -9 quintilhes a +9 quintilhes ou aproximadamente 9 x lO ' ~ para a manuteno de registros). Um tipo longo seria til se voc esti vesse annazenando a quantidade de estrelas no universo (estimada em cerca de 10").

Nmeros com Casas Decimais


Uma grande quantidade de processamento numrico realizada sem casas decimais. No entanto, mais clcu los, principalmente em engenharia, finanas e cinc ias, requerem que voc tambm possa armazenar valores decimais. A Tabela 3.2 descreve os dois principais tipos de variveis dec imais. Decidirqual usar depende do grau de preciso que for necessrio manter, em vez do tamanho dos valores, j que todos eles podem ter nmeros bastante grandes. Caso no se

Introduo Programao com o Visua l Basic .NET

67

lembre da notao cientfica que aprendeu na escola, o nmero sobrescrito acima do algarismo 10 a quant idade de vezes que preciso multipl icar por 10 (se pos itivo) ou dividi r por 10 (se negativo). Portanto, 106 lO seis vezes ou 1.000.000, e 10" igual a 0,000001.
TABElA 3.2

Tipos de Varivel Decimal


Tamanho (Bytes)

Tipo de Dado

Abrangncia

Comentrios

Simp les (Single)

- 3,402823 x 10JOa - 1,401298 x 10"'s para nmeros negativos; 1,401298 x \0-1 1 a 3,402823 x lO>! para nmeros positivos

No se preocupe muito com o tamanho desses nmeros do intervalo. O tipo simples pode manter o registro de nmeros muito grandes (ou muito pequenos). O im portante para este tipo de dado a preciso. O nome 'simples' quer dizer que este tipo de varivel para nlmeros com pomo flut/lonte de preciso simples. Esse o significado do jargo da infonntica: "Ele s realmente bom para annazenar sete dgitos impoltantes". Examine cada um dos nmeros do intervalo. Observe que possuem um nmero antes da casa decimal e seis a seguir, mais o expoente (o nmcro acima do algarismo 10). Portanto, embora o tipo simples seja bom para armazenar tanto nllmeros grandes quanto pequenos, no to preciso quanto os outros, e poderia causar erros de arredondamento se voc fizesse muitos clculos com valores realmente altos ou muito baixos. O tipo de varivel simples seria til em um programa em que menos exatido fosse necessria.
O tipo duplo uma varivel de

Duplo (Doubl e)

- 1,797693 1348623 I x IOJ<J~ a -4,9406564584124 7 x 1Oll. para nmeros negativos; 4,94065645841247 x 1O.J!' a 1,79769313486232 x IO para nmeros lm positivos

'ponto flutuante com preciso dupla', portanto, annazena duas vezes mais dgitos sign ificativos que o tipo simples ou 15 casas decimais. Use um tipo duplo sempre que voc fizer clculos com nmeros grandes ou quando quiser evitar os erros de arredondamento que podem acontecer no tipo simples, como ao efetuar clculos em aplicativos cientficos ou de engenharia.

68

Dia 3

Strings e Caracteres
Os nmeros so adequados se voc precisa armazenar quantidades ou espaos de tempo, mas com freqUnc ia tambm necessrio lidar com palavras na programao. O Visual Basic .NET fornece variveis para armazenamento de strings: os tipos de dado Char e Stri n9. O tipo Char

apropriado para o armaze namento de apenas um caractere (da o nome), enquanto o tipo Stri ng pode conter strings de comprimento maior. A Tabela 3.3 descreve os dois tipos de dados com
mais detalhes.
TABElA 3.3

Tipos de Variveis de Strings


Tamanho
(Bytes)

Tipo

de Dado

Abrangncia

Comentrios

Cha r String

Um caractere

Adequado para annazenar um n ico carac-

tere.

10 + 2
por

caractere

At dois bilhes de caracteres

Use um tipo Stri ng para armazenar aque le

romance que sempre quis escrever. Se estio ver calcu lando cinco caracteres em md ia por palavra e 250 palavras por pgina, sai ba que uma nica varivel alfanumrica pode conter 1,7 milho de pginas de texto.

Porq ue cada tipo Char e cada caractere de um tipo String ocupam dois bytes? Afinal , h apenas 25 caracteres usados no idioma portugus, alm dos nmeros e smbolos - decerto, voc no precisa de dois bytes (65.536 valores poss veis). No precisari a, se todas as linguagens empregassem o mesmo conjunto de caracteres. Novo finiu. Em ASC II , um byte igua l a um caractere, e todos os computadores que usa vam essa linguagem sempre dispunham os mesmos caracteres na mesma posio da lista. Portanto, o valor65 em ASC II era sempre a letra ' A', e o smbolo '@' possuava loriguala64. Se voc quisesse fazer o mesmo com todos os outros smbolos que as pessoas usam na escrita, no en tanto, precisaria de mais caracteres. Para reso lver esse problema, um novo sistema fo i desenvolv i do, chamado Unicode.
TERMO

o cenrio o que o conjunto de caracteres ASCII (ou ANS I), popular no passado, de

No Unicode, cada caractere representado por dois bytes . Isso permite o armazenamento de todos os caracteres da li sta ASCI I, bem como os dos idiomas russo, grego, japons e tailands, os dos matemticos e ass im por diante. Em Un icode, 65 ainda representa a letra ' A' , mas 8800 o caraclere [iJ . O caraclere japons Hiranaga "IEM' ('no') representado por 12398. O Visual Basic .NET usa os valores Unicode para todos os caracteres, portanto o ti po Cha r usa dois bytes, e cada caractere de um tipo String acrescenta dois bytes de espao complementar de armazenamento.

Introduo Prog ramao co m o Visua l Basic .N ET

69

Outros Tipos de Varivel Simples


Nunca fal ha quando se tenta categorizar as coisas. Algo sempre desafia a categorizao (apenas imagine o primeiro zologo que se deparou com o ornitorrinco). Da mesma maneira, h algumas variveis que no se encaixam bem nas categorias descritas anteriormente. No Visual Basic .NET, existem dois desses tipos de variveis 'd iversas', o lipo booleano (Boolean) e a data (Date). Eles so descritos com mais detalhes na Tabela 3.4.
TABELA

3.4

Ti pos Diversos de Variveis Simples


Tamanho (Bytes) Abrangncia Comentrios

Tipo

de Dado

Booleano (Boo 1ean)

Verdadeiro (True) ou falso


(False)

Se est annazenando apenas verdade iro ou falso , para que dois bytes? O Visual Basic tem usado trad icional mente Oe- I para fa lso e verdadeiro. Definir esses dois va lores requer dois bytes . Esta varivel pode conter a maioria das datas com as quais voc lidar (a menos que seja um historiador ou gelogo). Ela tambm segue todas as regras do calendrio (como adicionar um dia em anos bissextos), portanto, se acrescentannos I ao valor '28 de feverei ro de 2000' da varivel de data, obteremos '29 de fevereiro de 2000', mas se fizenn os o mesmo para '28 de feve reiro de 200 I', a resposta ser' 1 de maro de 200 1' . A nica limitao efetiva da varivel de data seu tamanho.

Data (Date)

1 de jane iro

de 100a3 1 de dezembro de

9999

Voc poderia usar outro tipo de dado para armazenar datas como strin gs ou inteiro representando o perodo em dias aps alguma dat a especfica.

Declarando Variveis
Agora que voc conhece os ti pos de variveis dispon veis, como cri-las em seus programas? A maneira mai s si mples com a palavra-chave Dim (abrev iatura de ' Dimenso'), seguida pelo nome da varivel, a palavra-chave As e, por fim , pelo tipo da varivel. A aparncia a seguinte:

Dim iAlgumNumero As Integer


Isso criaria a nova varivel iA 1gumNumero, que possui quatro bytes e pode annazenar um nmero com um tamanho aproximado a 2 bilhes. Veja algumas declaraes de variveis possveis:

Dia 3

Dim sPrimeiroNome As String Dim dblProdutolnternoBruto As Double Dim bAprendido As Boolean Um recurso novo no Visual Basic .NET a capacidade de fornecer um valor varivel quando ela estiver sendo criada. Faa isso usando a mesma linha da instruo Dim: Dim dtDataDeAssinaturaDaCartaMagna As Date =IJune 15,12151 Dim lPessoasNaTerra As Long = 6000000000 Examinaremos algumas outras maneiras de declarar variveis posteriormente, quando discutirmos o escopo.

Arrays
A capacidade de uma varive l de armazenar qualquer coisa prtica e at mesmo essencial em

programao. No entanto, voc pode precisar armazenar vrios itens relacionados. Por exemplo, se est ivesse escrevendo um programa de jogo de xadrez, os quadrados do tabuleiro precisariam ser representados como um conjunto de itens re lacionados. Use os arrays para criar variveis que armazenem juntos todos os itens relacionados. No programa do jogo de xadrez, o tabul eiro provavelmente seria armazenado como um array de posies, cada uma contendo o tipo de pea (ou nenhuma) dessa posio. Se no fosse usada uma varivel de array, teriam de ser empregadas 64 variveis separadas. Tambm pode ser preciso manter o registro de uma lista de strings, por exem plo, dos nomes dos al unos de lima sala. Sempre que for necessrio armazenar uma li sta de itens, use um array. Como na declarao das variveis simples, a de um array feita com a palavra-chave Dim. No entanto, h algumas diferenas entre declaraes de variveis simples e declaraes de arrays porque esses so conjuntos de variveis. A Listagem 3.1 mostra trs maneiras possveis de declarar arrays.
COOIGO LISTAGEM

3.1

Declarando Arrays

1 'Declarao simples 2 Oim iValues(3)As Integer 3 Oim dtDates()As Date 4 Oim I As Integer 5forI= lTo3 6 ivalues (I-1)=I 7 Next 8 9 10 11 12 'Alterando o tamanho de um array existente ReDim dtDates(4) 'p reencha a lista de datas dtDates(0)="15/6/1215" 'As sinatura da Carta Magna dtDates(1)="28/8/1962" 'Mart in Luther King J r. pronuncia "Tenho um sonho"

Introduo Programao co m o Visua l Basic .NET


COOIGO 13 14 15 16 17 18 19 20 21 22 LISTAGEM 3.1 Declarando Arrays (continuao)

71

dtDates(2)="20 j7jI969" 'A Apollo 11 aterrissa na Lua dtDates(3)="14 j 2j 1946" 'ENIAC revelado ao pb lico 'Declarao com Inicializao Dim sMonthsOAs String ={"Jan","Fev","Mar" , "Abr","Maio","Jun", "Ju 1" , "Ago" , "Set" , "Out" , "Nov" , "Dez"} ' Usando arrays Console .WriteLine("") Console .WriteLine("Segundo valor em iVa l ues '" {O)" ,iValues(I) Console .WriteLine("Terce i ra date em dtDates " {O}",dtDates(2 Console .WriteLine("Dcimo primei ro ms do ano = {O}" ,sMonths(IO

ANLISE

No primeiro exemplo, i Val ues foi declarada como um array de trs membros. Todos os itens do array so inteiros (I nteger). Tudo faz sent ido. A parte potenciahnente confusa est na maneira usada para fazer referncia a cada membro do array. Isso mostrado no lao For ... Next que vai da linha 5 7 (abordaremos o lao For ... Next no prximo captu lo). Observe que os trs membros do array esto numerados de Oa 2. Portanto, o segundo membro do array est na posio I, e no 2.

NOTA

Vale a pena ressa ltar que os computadores, diferente das pessoas, sempre comeam sua contagem com o zero. melhor deixar a verdadeira razo disso nos recnditos de suas minsculas mentes de silicone, mas precisamos estar conscientes desse detalhe, principalmente no que diz respeito a arrays.

o segundo array criado, com os meses do ano, fo i declarado e in icializado. Exatamente corno
voc pode in icial izar variveis simples quando as declara, possvel fazer o mesmo com arrays. Nesse caso, no entanto, coloq ue cada elemento do array em uma lista delimitada por vrgulas, envolvida em chaves, como mostrado na linha 16. Isso criar um array de 12 membros, com cada elemento contendo uma string. Lembre-se, contudo, de que se quiser se referir a cada um, eles estaro numerados de O a II - portanto, sMonths(10) seria "Nov", e no "Out". A l ti ma declarao de um array dinamicamente dimensionado. Esse array pode depois ser redimensionado para o tamanho correto com a palavra-chave ReDim como mostrado na linha 10. Como nos outros tipos, os itens do array dinmico esto numerados de zero a I menos 1. Depois que o array fo r dimensionado, voc poder us-l o como qualquer outro. Esse tipo de declarao til se o tamanho do array depender do valor de outra varivel, portanto, isso no seria conhec ido at o tempo de execuo.

72

Dia 3

ALERTA

Tenho repetido o fato de que todos os arrays comeam com O no Visual Basic .N ET porque, anteriormente, o Visual Basic podia no ser operado dessa maneira. Em suas verses anteri ores ao Visual Basic .NET, voc poderi a usar a declarao Opt i on Base 1 no inicio de um mdulo para assegu rar que todos os arrays criados nele comeassem em l o De modo alternativo, ao declarar arrays, seria possivel definir os membros in icial e final do array, como ser mostrado na decla rao a seguir. Nenhuma dessas opes est d isponvel para os arrays do Visual Basic .NET . Portanto, a linha de Cdigo a segui r no vlida no Visual Basic .NET:

Dim

s~gvalues(lS

To Sl)As Single

Atribuio
A atribuio foi simplificada no Visual Basic .NET. Verses mais antigas do Vi sual Basic (Vi~ suai Basic 4 .0 a 6.0) possuem duas maneiras d iferentes de atribu ir um valor a uma varivel uma para variveis simples (incluindo estruturas e arrays) e outra para variveis de objeto. Feliz~ mente, os desenvolvedores do Visual Basic .NET decidiram remover o mtodo de atribu io usado para as variveis de objeto e empregar apenas o utilizado para variveis simples. Voc vai atribuir valores s variveis (simples ou de objeto) colocando~as esq uerda de um sinal de igllal~ dade, como mostra o cdigo a seguir:

iSomeVar =1234 oObjectVar =New Something()

NOTA

Da verso 4.0 6.0 do Visua t Basic, as li nhas de atribuio mostradas anteriormente teriam aparecido com a seguinte f o rma:

iSomeVar =1234 Set oObjectVar =New Something


Contudo, as regras de quando usar Set eram con f usas, e a Microsoft removeu a necessidade dessa palavra-chave.

Constantes
As constantes so outra classe de valores que voc pode usar em seus programas do Visual Basic .NET. COllstallles so valores que no se alteram nunca ou durante a vida t il de seu programa. Por exemplo, os meses de um ano, o valor de pi e o serv idor de banco de dados a parti r do qua l seu programa recupera dados, todos so valores constantes. possvel definir um valor como constante quando ele for declarado. Qualquer tentativa de alterar o valor de uma constante ser assinalada como um erro enquanto voc ainda estiver no IDE ( lntegrated Development Environment) e antes de tentar executar o apl icativo. As constantes so declaradas usando-se as duas formas mostradas no cdigo a seguir:

Introduo Programao co m o Visua l Basic .NET

73

COOIGO

Const PI " 3.1415 As Double Const DSN As String" "Random"

ANALISE

Se o tipo da constante no for descrito em uma declm-ao, o compilador ter de usar o tipo de valor que melhor se encaixar. No entanto, ele nem sempre se leciona o melhor tipo posslvel. Em geral, quando constantes so declaradas, se o tipo do valor no inclu ido, o Visual Basic .NET cria os tipos de variveis a seguir:

Longo (Long) Para qualquer nmero inteiro declarado. Duplo (Oouble) Para qualquer nmero decimal declarado. (Observao: se o valor fo r efeti vamente muito grande para um tipo duplo, ele ser truncado.) Para qualquer valor com caracteres. String

NOTA

Defina o tipo que quiser quando declarar constantes, exatamente como faz com as variveis.

Algumas Sugestes para os Padres de Nomeao


Com lodos esses tipos diferentes de variveis e tantos programadores usando-os, h muitos nomes que podem ser empregados ao declar-las. Isso pode levar a um problema quando as examinarmos posteriormente. A menos que a declarao esteja visve l, podero existir dificuldades para se conhecer o tipo da varivel. De maneira semelhante, se o cdigo for herdado de um escrito por outro desenvolvedor, pode ser preciso algum tempo para compreender como ele nomeou suas variveis. As convenes de nomeao, de preferncia comparti lhadas, reduzem essas duas espcies de dificuldade pela identificao do tipo da varivel. Uma conveno de nomeao normalmente usada adicionar um prefixo em minsculas aos nomes das variveis. O prefixo identifica o tipo de varivel. A Tabela 3.5 mostra sugestes para um conjunto de prefixos.
TABELA 3 .5

Convenes de Nomeao Sugeridas


Prefixo Exemplo

TipO de Varivel

Byte Curto (Short) Inteiro (integer) Longo (Long) Simples (Single)

byt sht

bytldade shtContagem iOvelhas 1Popul acao sngGolpe

i ou i nt l ou lng
,"g

Dia 3
3.5

TABELA

Convenes de Nomeao Sugeridas (continuao)


Prefixo Exemplo

Tipo de Varivel

Duplo (double) Char String Booleano Data (Date) Tipos definidos pelo usurio

d ou db 1

dblJuros cIniciaisIntermediarias sNome bEstaAberto dtDataA I uguel Variveis criadas, com base em estruturas equivalentes a um ponto ou retnguio poderiam ser chamadas de ptLocal e retTamanho
PI, TAXA_IMPOSTO

c
s ou s tr
b

dt
Dois ou trs caracteres importantes do nome da estrutura Nenhum prefixo. O nome todo em maisculas, com cada palavra separada pelo caractere sublinhado U Dois ou trs caracteres significativos

Constantes

Enumeraes

disDiaSemana, corCorFundo

NOTA

Por que essa confuso de um, dois e trs caracteres? Tenho de adm itir que alterei os prefixos que uso com o passar dos anos. Minha filosofia bsica era originalmente empregar s um caractere, para li mitar a desordem que os prefixos causam. No entanto, alguns deles s iriam provocar mais confuso . Por exemplo, qual seria o tipo de dado de sVa 1ue? Poderia ser o curto (Short), simples (Si n91 e) ou Stri n9. Para tipos de dados que comeam com a mesma letra, estendi o prefixo em alguns caracteres. Devo admitir, contudo, que ainda tendo a usar a letra s para strings porque tem sido empregada com freqncia. (Voc tem de fazer alg uns sacrifcios para evitar a sndrome do esforo repetitivo.) Quando comea r a usar esses prefixos, voc pode acha r que so um pouco confusos. No entanto, eles logo se tornam familiares, e as informaes que fornecem so inestimveis.

Clculos Simples
Apenas ter alguns valores definidos no produz um programa. Voc precisa fazer algo COm eles. , E necessrio efetuar clculos matemticos com os valores ou gerar algo mais substancial. De maneira semel hante, para tomar seus programas mais compreensiveis, com freqUncia ser preciso usar ou criar procedimentos. O Visual Basic .NET fornecer alguns deles; outros tero de ser escritos. Esses procedimentos vo de operadores, que executam muitos dos clculos matemticos COmuns, a funes mais complexas que poderiam afetar strings ou nmeros.

Introduo Program ao co m o Visua l Basic .N ET

75

Usando Operadores
No Visual Basic .NET, os operadores executam clculos simples e ' fu nes' semelhantes. A maioria dos operadores deve ser fami liar a voc como smbolos algbricos comuns. No entanto, alguns deles so exclusivos da programao. A Tabela 3.6 lista os operadores mais usados.
TABElA 3.6

Opera dores Com uns do Visual Basic .NET


Uso Exemplo

Operador

::
+

Atribu i um valor a outro Soma dois va lores Subtrai um valor de outro Multi plica dois valores Divide um valor por outro Divide um valor por outro, mas s retoma um nmero inteiro Abrev iatura de mdu lo; retorna o reslO de uma diviso Associa duas strings Sm bolo para adicionar um valor e atribuir o resultado Sm bolo para subtrair um valor e atribu ir o resultado Smbolo para mu lt iplicar um va lor e atribuir o resultado Smbolo para dividir por um valor e atribuir o resultado

x" 6
Y " X 7

(Y igual a (3)

y " X - 4 (Y igual a 2) y " X 2(Yiguala (2) y " X / 2 (Y igual a 3) y " X \ 3 (Y igual a I)

/
\
Mod
&

y :: X Mod 3 (Y igual a 2) S " "01 " & "Mundo" (S igual a "Ol Mundo")
X +:: 2 (X igual a 8) X -= 3(Xiguala5)

."
.~

x *" 6 (X igual a 30)


X

I" 5 (X igual a 6)

&~

Smbolo para acrscimos a strings e atribuio do resu ltado Eleva um valor a potncia de um expoente

S &= " . John" (S igua l a "Ol Mundo, John") 3"4 (3 elevado a 4, retoma 8 I)

Funes Internas
Alm das fornecidas pelo .NET Framework , o Vi sual Basic .NET possui muitas funes internas. Essas funes geram vrios recursos lIteis, incluindo a converso de um tipo de dado em outro, clc ulos matemt icos, manipulao de strings e assim por diante. Voc deve conhecer algumas delas para poder prossegu ir com o estudo do Visual Basic .NET.

76

Dia 3

Funes de Converso
Algumas das funes mais importantes disponve is no Visual Basic .NET so as de converso. Elas permitem que um tipo de dado seja convertido em outro. As funes de converso se torna mm ainda mais importantes nessa verso do Visual Basic porque ela muito mais restrita com relao aos tipos de dados, e no converte automat icamente um tipo em outro como as anteriores

faziam.
Se voc quiser que o Visual Basic .NET converta de modo automtico os tipos

de dados, poder desativar a verificao restrita de tipos adicionando Option Stri ct Off no inicio de seus arquivos. bom saber, no entanto, que isso poderia levar a resultados inesperados em seu cdigo (ou seja, erros) se o Visual Basic .NET converter uma varivel quando essa operao no for esperada.

Todas as funes de converso do Visual Basic .NET comeam com a letra 'C' (como na palavra converso) e terminam com uma forma abreviada do novo tipo. Alm disso, h uma funo genrica, Ctype, que pode efetuar converses para qualquer tipo. A Tabe la 3.7 descreve as principais funes de converso.
TABElA

3.7

Funes de Converso
Descrio

Funo

CBool

Converte para um booleano (Bool ean). O que for avaliado como falso (Fa 1se) ou Dser configurado como falso (Fa 1se); caso contrrio, ser definido como verdade iro (True). Convene para um tipo Byte. Todos os valores maiores do que 255 ou informaes fracionrias sero perdidos. Converte para um nico caractere. Se o valor for maior do que 65.535, ele ser perdido. Se voce converter uma St ri ng, s o primeiro caractere ser alterado. Converte para uma data (Date). Uma das fun es ma is avanadas de converso, CDate pode reconhecer alguns dos formatos mais com uns de insero de datas . Converte para um tipo duplo (Doubl e). Converte para um inteiro (Integer). As fraes so arredondadas para o valor mais prx imo. Convene para um tipo longo (Long). As fraes so arredondadas para o valor mais prximo. Converte para um tipo curto (Short). As fraes so arredondadas para o valor mais prximo. Converte para uma String. Se o valor for uma data (Date), apresentar o formato abreviado.

CByte CChar CDate

CObl
Clnt CLng CSht CStr

Introduo Programao com o Visua l Basic .NET

77

TABELA

3.7

Funes de Converso (continuao)


Descrio

Funo

CType

Converte para qualquer ti po. uma funo poderosa que permite a converso de qualquer tipo de dado em outro. Portanto, a sintaxe dessa funo um pouco diferente das outras.

SINTAXE

A s intaxe de Clype oNovaVariavel = CType(oVariavelAnterior. NovoTipo)


onde oNova Variave 1 e oVori ave lAnterior so lugares reservados para as variveis resultante e original da converso, respectivamente. O tipo que surgir aps a converso ser o inserido em NovoTipo. Ele pode ser qualquer varive l ace ita depois de As em uma declarao, portanto, possvel usar essa funo para efetuar converses para tipos de objeto, enumeraes e estruturas, assim como para tipos simples.

Funes de Manipulao de Strings


A maioria das fun es anteriores re lacionadas a stings no Visual Basic foi substituda no Visual Basic .NET pela funciona lidade interna da classe String (exam inaremos a classe String com detalhes no Dia 7). No entanto, voc pode ver alg umas das funes do cdigo anterior listadas na T abela 3.8 para se familiarizar com e las.
TABelA 3.8

Funes de Manipulao de Stri ngs


Descrio Exemplo

Funo

Retorna o comprimento de uma string.

iValue " Len("Olc'i"} igual a 3).

('iValue

eh,
Ase
Left

Retorna o earaetere com base no valor ASCII oU Unieode inserido. Retoma o valor ASCII ou Unicode Retorna caracteres de uma string, comeando com o da extrema esquerda. Tambm precisa da quantidade de caracteres a retomar. Retorna caracteres de uma string, comeando com o da extrema direita (o oposto de Left). Tambm precisa da quantidade de caracteres a retomar.

sValue " Chr(56} ('sValue igua l a letra A). iValue" Asc("A") ('iValue igua la 56). sValue" Left("Olc'i Mundo", ('sValue igual a O).
2)

Right

sValue" Right("O lc'i Mundo", ('sValue igual a undo).

4)

Dia 3

TABELA

3.8

Funes de Manipulao de Stri ngs (continuao)


Descrio Exemplo

Funo

Mid

Retorna caracteres que no esto em nenhuma das extremidades de uma string. Mid retorna qualquer nmero de caracteres. Sua sintaxe sReturn "

sValue = Mid("OU Mundo", 3, 5 ('sValue ig ual a Mun). sVa lue - Mid("Oli Mundo", ('sValue igual a Mu ndo). 4)

Mid(String, InIcio, Comprimento) onde Inicio o caractere a part ir do qual retornar, e Comprimento a quantidade de caracteres (inclu indo Infcio) a retomar. Um recurso interessante que se voc omitir Comprimento, produzir o retomo de todos os caracteres desde InIcio .
Instr Encontra uma string dentro de outra. , E ti l quando se procura a lguma string em um arquivo. A sintaxe da funo Instr iReturn = Instr(CaractereInicial ,

St ringPesquisada, ltemProcurado. TipoCorrespondncia)

iVa l ue = Instr(l, "Ol Mundo" , "1") ('iValue igual a 2). Lembre-se de que a string que voc est procurando pode ter vrios caracteres, portanto, em uma busca por "Mundo", como a de iValue = InstrO, "Ol Mundo", "Mundo" 'i Val ue igual a 5.

CoractereInicial a posio na StringPesquisado, onde o programa


iniciar a busca (a contagem comea em I). StringPesquisodo onde ser executada a busca e ltemProcurodo a string que se quer encontrar.

TipoCorrespondncio deteml ina se a


busca ir diferenciar maisculas de minsculas. Se estiver configurado como O (cOliespondncia binria), a pesquisa diferenciar maisculas de minsculas. Se for ignorado ou config urado como 1 (correspondncia textual), no diferenciar. A varive l i Retu r n seria igua l a posio na StringPesquisoda onde o ltemProcu rodo comea. Se a string procurada no for encontrada, i Return ser igual a O.

Introduo Programao com o Visua l Basic .NET

79

TABELA 3.8
Funo

Funes de Manipulao de Strings (continuao)


Descrio Exemplo

InstrRev pesquisa do lado direito da string; no resto, idntica a Instr. I nstrRev ser til quando voc estiver pesqu isando uma string que apresente um caminho de diretrio e quiser visualizar primeiro os diretrios infe nores. iValue = InstrRev("OIc1 Mundo", "o") 'iValue igual a 9. Lcase Ucase LTrim Rtrim Trim Converte uma Slring em minsculas. Converte uma string em maiscu las. Remove todos os espaos que precedem uma string Remove todos os espaos que sucedem uma string Remove todos os espaos que antecedem e sucedem uma string sValue sValue Value sValue sVa lue
=

LCase("OIc1 Mundo") UCase("OIc1 Mu ndo")

'sValue igual a ol mundo


=

'sValue igual a OL MUNDO


=

Ltrim(" Ol Mundo ")

'sVa 1ue igual a "01 Mundo


=

"

Rtrim(" Trim("

Ol Mundo ") Ol Mundo" Mundo ")

'sValue igual a"


=

oa

'sValue igual a "Ol Mundo"

Outras Funes teis


Finalizaremos com algumas funes geralmente teis que no se enquadram nas outras categorias. Aqui encontraremos as que pennitem a determinao do tipo de uma varivel, assim como funes de manipulao de datas. A Tabe la 3.9 descreve algumas dessas funes.
TABELA

3.9

Funes Internas Diversas


Descrio

Funo

IsArray IsDate IsNumeric IsObject TypeName

Retoma True (verdadeiro) se o parmetro for um array. Retoma True se o parmetro for reconhecido como uma data. Retoma True se o parmetro for reconhecido como um nmero. Retoma True se o parmetro for algum tipo de objeto. Retoma o nome do tipo de dado do parmetro, por exemplo, TypeName(sName) retomaria "String" .

Dia 3
TABELA

3.9

Funes Internas Diversas (continuao)


Descrio

Funo

Now
Today

Retorna a data e a hora atual. Retoma a data atual, com a hora configurada como 0:00:00 a.m. (meia-noite).

Escrevendo Suas Prprias Rotinas


Embora as funes internas sejam bastante teis, sempre haver vezes em que voc precisar criar suas rotinas. Pode ter de selecionar um conjunto de funes internas que sejam chamadas da mesma maneira ou talvez gerar alguma funcionalidade excl usiva. De qualquer modo, o Visual Basic .NET tornar fc il a criao de suas rotinas. H dois tipos de rotinas usadas no Visual Basic .NET. Um deles a rotina que executa algo, mas no retorna nenhum valor. So as chamadas sub-rotinas (ou, na abreviatura, sub). O outro tipo de procedimento executa algo, porm retornando um valor. Essas so denominadas funes.

Sub-Rotinas
Uma sub-rotina um bloco de cdigo do Visual Basic .NET que executa alguma tarefa - porexempIo, o mtodo Console . WriteLine que voc v em muitos dos exemplos. Ele exibe infonnacs na tela, mas no retoma nenhum valor. Use as sub-rotinas para executar tarefas em seus programas. Em geral aconselhvel inserir em uma sub-rotina um cdigo que ser executado mais de uma vez. De maneira semelhante, se tiver de usar um cdigo em vrios aplicativos, bom que tambm o coloque em uma sub-rotina. As sub-rotinas permitem que um pequeno trecho de seu programa seja isolado, de modo que, em vez de repetir todo o bloco de cdigo, s seja preciso referenci-lo pe lo nome. Isso no significa que a sub-rotina sem pre executar exatamente as mesmas etapas, mas que realizar alguma tarefa. Por exemplo, um receita pode instruir, "Adicione uma poro de vinagre a trs de leo". Em um momento pode-se misturar uma xcara de vinagre a trs de leo, enquanto em outro, podem ser somente trs co lheres de sopa de vinagre para nove de leo. De qualquer modo, fo i executada a sub-rotina CrieVinagrete. Sim, estou cozinhando o jantar enquanto escrevo isso. Para criar suas sub-rotinas, use a palavra-chave Sub:
SINTAXE

Sub NomeSubRot i na{Parametrol As Type,Parametr02 As Type, ... .. ParametroN As Type) 'I nsira o que quiser aqu i End Sub

Nessa sintaxe, cada parmetro define um valor que tem de ser passado para a rotina. A Listagem 3.2 mostra a declarao e o uso de uma sub-rOlina.

Introduo Programao co m o Visual Basic .NET


3.2 Criando e Usando uma Sub- rotina

81

COOIGO

LISTAGEM

1 Sub ShowMessage(ByVal Message As String) Console,Write Li ne( Messa ge) 2 3 End Sob 4 ShowMessage("Ol Mundo do Visual Basic .MEl")

ANLISE

Nossa sub-rotina comea com a palavra-c have Sub, corno vemos na linha I. A sub-rotina se chama ShowMessage e usa um parmetro quando chamada. Ela termina com a palavra-chave End Sub (linha 3). No interior est o cdigo real executado pela sub-rotina. Nesse caso, ela apenas exibe o contedo do parmetro na janela do console. A linha 4 mostra urna maneira possvel de chamar a sub-rotina, passando a string "Ol Mundo do V; sua 1 Bas; c .NEl" .

Funes
Criar suas funes permitir que voc insira novos recursos em seus ap licativos. Gerar uma funo semelhante a definir novas sub-rotinas, exceto por ter de ser definido o tipo de valor retornado. Dentro do procedimento, identifique o valor a ser retornado, como mostrado abaixo:
SINTAXE

Function NomeFuno(Parmetrol tornado

As

Type , ... ParametroN

As

Type)

As

TipoRe-

'Insira o que quiser aqui


Return VolorRetornado End Function

Nessa sintaxe, cada parmetro define um valor que ter de ser passado para a rotina; TipoRetornodo o tipo de dado que a funo retoma, e ValorRetornado, o valor que ser retomado pela funo. A Listagem 3.3 mostra a declarao e o uso de uma funo sim ples.
CDIGO LISTAGEM

3.3

Cri ando e Usando uma Funo

1 Function Volume(ByVa l leng th As Integer , 2 ByVal Width As Integer . ByVal Hei ght As Integer) As Integer 3 Return length *Width *Height 4 End Funct i on 5 6 Conso l e.Writeline(Volume(3,4,5

Escopo
Novo TERMO

Escopo uma dessas palavras adorveis do jargo da infomltica que signi fica "Quem mais pode me ver?". Formalmente, o escopo define a visibi lidade das vari-

82

Dia 3

veis de um programa, isto , que rotinas poderiam usar uma cena varivel. Voc pode no querer que todas as rotinas acessem todas as variveis. Penn itir que todas as rotinas conheam todas as variveis poderia levar uma rotina a 'acidentalmente ' alterar o valor de uma varivel, introduzindo um erro em seu programa.

Al agora, temos em geral declarado as variveis por meio da palavra-chave Oim dentro dos proced imentos. No entanto, voc tambm pode declarar as variveis externamente para torn-las disponveis a vrios procedimentos. Se fizer isso, poder usar duas outras palavras-chave, Public e Private: As varivei s Pub 1ie ficam disponveis em todo o aplicat ivo. Elas so variveis globais, que existem globalmente, ou, por todo o ap licativo. Devem ser usadas parcimoniosamente, mas sero teis quando voc precisar de algum valor que ser empregado em muitos pontos de seu programa, corno a conexo a um banco de dados, ou um arquivo. As variveis Priva te ficam disponveis no mdulo ou classe onde so declaradas. Elas so usadas com freqncia em apl icat ivos quando se precisa de uma (mica varivel que possa ser empregada em vrios procedimentos. Criando-a com a palavra-chave Pri vate, estaremos perm itindo que todos os procedimentos de um mdulo ou classe acessem a varivel . As variveis Pri va t e so tei s para comparti lhar informaes com uns necessrias a uma tarefa, como um valor intermedirio que possa ser utilizado por funes diferentes para executar um clculo.

DICA

Quando for criar uma varivel, bom declar-Ia o mais prximo possivel de onde ela for necessria . Se voc s for usar uma varivel em um procedimento, declare -a dentro dele. Use as variveis Private e PlJbl ic no nivel de mdulos com m odera o.

Por Que o Escopo Importante?

o escopo permite que voc isole os dados usados pelos procedimentos de se u aplicativo. Muitas
verses mai s antigas do BA SIC no ti nham o recurso do escopo, e todas as variveis podiam ser acessadas e alteradas de qualquer parte do programa. Imag ine escrever um programa naquela poca - voc poderia reutilizar com freqncia (propositada ou acidentalmente) uma varivel em qualquer local de um programa. Isso poderia levar a uma fa lha se o va lor fo sse a lterado em algum ponto, s para que se cometesse o erro de Icr posteriorm ente o novo valor. quando o pretendido fosse o original.

o Escopo e os Procedi mentos


Exatamente como as variveis podem ter um escopo, os procedimentos (sub-rotinas e funes) tambm possuem um. O escopo para os procedimentos significa o mesmo que para as varive is:

Introduo Prog ramao co m o Visua l Basic .N ET

83

ele descreve em que outro local de seu programa voc pode usar o procedimento (ou fora de seu programa, como veremos quando comearmos a criar objetos).
O escopo do procedimento definido com o uso das mesmas palavras-chave empregadas para o das variveis. Em geral, ele tambm possui o mesmo significado.

Publ i c O procedi mento pode ser chamado de qualquer parte do ap li cat ivo. Esse o padro se voc no ad icionar nenhuma outra palavra-chave. Private O procedimento s pode ser chamado a partir de outro que esteja situado dentro do mesmo mdulo ou classe onde foram definidos. Isso ser ti l quando voc estiver escrevendo vrias rotinas de suporte usadas no decorrer de um clculo, mas as outras no precisariam us-lo.

Do mesmo modo que com as variveis, as palavras-chave adicionais de escopo sero aplicadas quando voc estiver criando objetos no Visual Basic .NET. Exam inaremos essas palavras-chave posterionnente.

Exemplo de Aplicativo: Calculando um Valor Futuro


Agora que voc j explorou a criao e uso de varivei s e proced imentos, poder gerar um aplicati vo que execute o clcu lo de um investimento. Esse ap licativo pennitir a an lise dos beneficias maravilhosos do investimento regular e dos juros compostos. Neste exemplo de apli cativo do console evitaremos a complexidade que uma interface grfica com o usurio adicionaria. A Listagem 3.4 most ra o cd igo de uma execuo do programa.
CDIGol RESULTADO LISTAGEM

3.4

O Programa de Clculo de Investimentos

1 2 3 4 5
6

InvestCalc.exe Saldo Inicial : 10000 Juros Anuais (por exemplo , para 5% insira 5) :5 , Depsito Mensa l : 200 Perodo do Invest imento em Anos: 30

7 Se voc comea r com U$$10.000 , OO 8 e investir US$200,OO por ms 9 durante 30 anos 10 a 5% de juros. 11 Seu saldo final ser : $211.129,17 Aqui vemos o resultado de se comear com um saldo de US$1 0.000 adicionando US$200 por ms durante 30 anos, com juros fixos de 5 %.

Dia 3

o programa requer que o usurio insira os quatro valores (Sal do

Ini ci al , Juros Anuai s, Depsito Mensal e Perodo do Investimento em Anos). Por sua vez, ele calcular o saldo final. Essa operao conhecida como clculo do valor futuro (FV), e o Visual Basic .NET a inclu i como uma de suas funes internas. A frmula do Valor Futuro
A

FV = DepositoMensal *((1 + JurosMensais) A Meses - 1 ) .. jJurosMensais )+ Saldolnicial * ( 1 + JurosMensais )

Meses

As etapas a seguir descrevem esse procedimento para que voc possa compreender melhor como funciona: 1. Comece criando um novo projeto no Visual Basic .NET. Selecione um novo aplicativo do console. O visual Basic .NET criar um projeto com um mdu lo. 2. Feche ajanela do arquivo e o renome ie usando o Solution Explorer. D um clique com o boto direito do mouse no nome do arquivo, Modul eI. vb, no Solution Exp lorer e selecione Rename. Altere o nome do arquivo para modInvesLvb. 3. Altere o nome de Startup Object tambm. D um clique com o boto dire ito do mouse no projeto do Solution Explorer e selecione Properties. Na pgina General , altere o Startup Object para Invest. Ele deve estar na lista suspensa. 4. Voc est pronto para comear a cod ificar. Precisa de ao menos quatro variveis para armazenar a entrada do usurio. Declare-as como mostra a Listagem 3.5. A maioria desses valores de numeros de ponto flutuante, com exceo de Periodo. Essas declaraes devem ocorrer entre as linhas Modul e e Sub Mai n( ) porque as varive is estaro no nvel do mdulo.
CDIGO LISTAGEM

3.5

Declaraes para o Clculo do Valor Futuro

I 2 3 4

Private Private Private Private

dblJurosAnuais As Double = O iPeriodo As Integer = O decSaldolnicia l As Double = O decOepositoMensal As Oouble = O

5. Use a rot ina Mai n para chamar as rotinas de obteno das entradas do usurio, execuo dos clculos e exibio do resultado, como na Listagem 3.6.
CDIGO LISTA GEM

3.6

Rotina Main

I Shared Sub Main() 2 Dim decResultado As Double 3 'obtencao dos valores das entradas 4 GetlnputValues() 5 'c alcu l o 6 decResultado = CalculateFV(dblJurosAnuais.

Introduo Program ao co m o Visua l Basic .N ET

85

CDIGO

LISTAGEM

3.6

Rotina Main (continuao)

7 iPeriodo , _ 8 decDepositoMensal , 9 decSaldolnicial) 10 'exib icao do resu lt ado 11 DisplayResults(decResultado) 12 End Sub

Na Li slagem 3 .7, cada fu no principal do apli cativo uma sub-rotina ou funo separada. Isso permitir que voc altere ma is rapidamente as tcnicas para obter as entradas ou exi bir o resultado posteriormente. 6. Adicione o cdigo da Listagem 3.7 para permi tir ao usurio inserir informaes. O procedimento no usa nenhum parmetro, nem retorna um valor. J que esse um aplicativo do console, voc empregar a rotina Cons01 e. Read para obter valores.
CDIGO

LISTAGEM

3.7

A Rotina das Entradas Console . Read

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Private Sub GetlnputValues() Console . Writeline() decSaldolnicial " CDec L GetValue("Saldo Inic i al: ")) dblJu rosAnua i s " CDb l(_ GetValue("Juros Anuais (por exemplo , para 5% , ins ira 5) : ")) decDeposHoMensal =COec(GetValue{"DepsHo mensal : ")) iPeriodo " Clnt(GetValue{"Perodo do i nvest imento em anos: ")) Console.Writeline() End Sub Private Funct i on GetValue(ByVal Prompt As St r ing) As String Console . Write(Prompt) Return Conso l e.Readline End Function

O bserve que a sub-rotina GetInputVal ues chama a funo GetVal ue. Esse um exemplo da criao de rot inas de suporte. Em vez de reescrever o cd igo para solicitar informaes ao us urio vrias vezes, isole-o e crie um proced imento para executar a tarefa. Dessa maneira, o cdigo res ultante para GetInputVa 1ues ser simplificado.

86

Dia 3

7. Escreva a rotina que exibir a sada quando for calculada . No final , ela poder ser exibida em uma janela, mas por enquanto, llse o procedimento Canso 1e . WriteL i ne, mostrado na Listagem 3.8, para exibir as informaes. Esse procedimento deve pegar o valor a ser exibido e no retornar nada.
CDIGO

LISTAGEM

3.8

A Rotina de Sada Console . WriteLine

1 Private Sub DisplayResults(ByVal Resultado As Double)


2
3 4 5 6

Console .WriteL i ne()


Console.WriteUne("Se voc comear com {O:c). " , decSaldolnicial) Console . WrlteUne(U e investir {O:c} por ms" , decOepositoMensal) Console.Write Li ne(U durante {O) anos". iPe riodo) Console . WriteUne(" a {O) % de juros.". dblJurosAnuais)

7 Console.Wri teL i ne() 8 Console .Wr"iteLlne("Seu saldo final ser : 10:c)" , Resultado) 9 End Sub

Essa uma rot ina simples, composta de vrias chamadas a Consol e. Wri teL i ne para exi bir os valores inseridos e o resu ltado do clculo. 8. Execute a clculo do valor futuro. Essa rotina deve usar os quatros valores como parme tros e retornar o resultado do clculo. Como possu i um valor de retorno, esse proced i menta um a fu no. A Li stagem 3.9 mostra a funo CalculateFV.
CDIGO

LISTAGEM

3.9

A Funo CalculateFV

1 Private Function CalculateFV(ByVal JurosAnuais As Double , 2 ByVal Peri odo As Integer. _ 3 ByVal DepositoM ensal As Double . _ 4 ByVal Saldoln i cial As Double) As Double 5 'divida por 1200 para torn-lo um percentual mensal 6 Dim decJurosMensais As D ouble = CDec(Juros Anuais /1200 ) 7 Dim iMeses As Integer = Perodo * 12 8 Dim decTemp As Double 9 Dim decReturn As Double 10 'precisaremos desse valor em alguns locais 11 decTemp = CDec((1 +decJurosMensais) A iMeses) 12 decReturn = CDec(DepositoMensal * _ 13 ((decTemp - 1) / decJurosMensais) 14 + (Saldoln;cia l * decTemp 15 R eturn decReturn 16 End Function

Introduo Programao co m o Visua l Basic .N ET

87

Exatamente como em GetInputVa 1ues, voc poderia ter isolado o cdigo que calculou o valor de decTemp. No entanto, j que s precisamos desse clculo nessa rotina e bem provvel que ele no seja mais necessrio, foi melhor no faz-lo.
A Listagem 3. 10 mostra o cd igo completo para o exemplo do aplicativo.
CDIGO

LISTAGEM

3.10

O Programa Completo de Clculo de Investimentos

1 Modu le Invest 2 3 Private dblJurosAnuais As Ooub l e = O 4 Priv ate iPeriodo As Integer " O 5 Priv ate decSa ldolnicia l As Double = O 6 Private decDepositoMensal As Double " O
7

8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
37

Sub MainO Dim decResultado As Double 'obteno dos valores das entradas GetlnputValues() 'clculo decResultado = Ca l culateFV(dbIJurosAnuais. iPeriodo. _ decDepos itoMensal . decSa ldoInicia l) 'exibio do resultado DisplayResults(decResultado) End Sub Priv ate Function CalculateVF(ByVal JurosAnuais As Double . ByVal Periodo As Integer. _ ByVal DepositoM ensal As Double ._ ByVal Saldolnicial As Doub l e)As Double 'divida por 1200 para torn - lo um pe rcentual mensa l Dim decJurosMensais As Double " CDec(JurosAnuais / 1200) Dim iMeses As Integer = Periodo * 12 Dim decTemp As Double Dim decReturn As D ouble 'precisaremos desse valor em alguns loca is decTemp = CDec1 + decJurosMensais) A iMeses) decRe turn " COec( OepositoMensal * decTemp -1) / decJurosMensais)_ + (Saldolnicial * dec Temp) Return decReturn End Function Pr iv ate Function GetValue(ByVal Prompt As String) As Stri ng Console .W rite(Prompt)

38 39

88
LISTAGEM 3. 10

Dia 3

COOIGO

O Programa Completo de Clculo de Investimentos


(continuao)

40 41
42

Return Console . ReadLine End Function Private Sub GetlnputValues()


Console . Wr'iteLineO decSaldoln i cial = CDec(GetValue("Saldo Inicial : "))

43
44 45

46
47
48 49 50 51

dblJurosAnuais

=
lO

CObl (GetValue("Juros Anuais (para 5% insira 5): .

decDepositoMensal = CDec(GetValue("Depsito mensal: ") iPeriodo = Clnt(GetValue("Perodo do investimento em anos : ") Console . WrHeLine() End Sub

52 53
54

Private Sub DisplayResults(ByVal Resultado As Oouble)


Console.WrHeLineO

55

Console.WrHeLine("Se voc comear com {O:c}, ", decSaldo Inicial)

56 Console . WrHeLine(" e investir {O:c} por ms", decDepositoMensal) 57 Console.WrHeLine("durante {O} anos", iPeriodo) 58 Console.WrHeLine("a {O} % de juros.", dblJurosAnuais) 59 Console.WrHeLineO 60 Console.WrHeLine("Seu saldo f inal ser: 10 : c)", Resultado) 61 End Sub 62 End Module

9. Execute o aplicativo. O resultado deve ser semelhante ao mostrado no incio desta seo. Voc pode executar o apl icativo a partir do IDE dando um clique no boto Pl ay da barra de ferramentas. No entanto, provvel que a janela exibida desaparea muito rapidamente para que se possa ver a resposta. Em vez disso, execute o programa a partir do prompt de comando processando o executvel criado. Voc pode tentar fazer uma experincia surpreendente com esse programa dec1culo. Insira os valores dos depsitos que representam quanto voc costuma gastarem um hbito mensal (almoo no trabalho, cigarros, dispositivos eletrnicos) . O valor futuro resu ltante em gera l perturbador.

Resumo
A lio de hoje avanou bastante, examinando os diversos tipos de variveis que voc pode criar no Visual Basic .NET e como empreg-las. A lm disso, explorou o conce ito de fu nes e sub-rotinas, tanto as que esto embutidas no Visual Basic .NET quanto as que podem ser criadas. Esses dois tpicos so fundamentais para sua compreenso do Visual Basic .NET e sero usados cm todos os t ipos de aplicativo.

Introd uo Prog ramao co m o Visual Bas ic .N ET

89

No Dia 4, "Controlando o Fluxo dos Programas", continuaremos a explorar a criao de cdigos no Visual Basic .NET examinando como voc pode gerenciar as decises em se us programas.

P&R
P Li que o Visual Basic .Net d suporte prog ramao ' sem tipos' . O que isso? R Quando voc declara o tipo de uma varivel ou funo , define certas regras: que espcie de informaes ela representa, onde pode ser usada e assim por diante. A programao sem lipos ocorre quando o ti po no declarado. Todas as varive is so, ento, objetos que podem conter qualquer tipo de informao. O Visual Basic .NET o nico membro da fam lia Visual Studio que d s uporte a esse tipo de programao. P Quando quiser criar um procedimento, ele deve ser uma s ub-rotina ou uma funo ? R Uma resposta breve seria, " Depende". Voc deve criara tipo de procedimento que fornea a fu ncionali dade necessri a. A lguns so bv ios. Se for preciso gerar um procedimento que execute alguns clculos ou mani pulaes e retorne o resultado, bom usar uma funo. Outras rotinas - aquelas q ue podem ou no ter de retornar um valor - efelivamente levam a uma escolha. Alm disso, no h escolha co rreta, apenas prefernc ias. Se for evidente a inex istncia de um valor a ser retomado, selecionar qual tipo de procedimento ser criado uma questo de op inio pessoal e/ou empresarial. Algumas pessoas e empresas sempre usam funes; out ras criam sub-rotinas quando necessrio . P Como posso encontrar a lista d e todas as fun es internas? R H duas maneiras pelas quais voc pode encontrar informaes sobre as funes internas: Aj uda on-line A ajuda on- li ne contm descries e exemplos de cd igo de todas as fu nes internas. Voc pode encont r- los (on-U ne) procurando por Visual Basic Language Reference. Object Browser Se tudo que voc precisa de uma descrio breve de um a fu no interna, poder encontr- Ia no Object Browser. Abra-o selecionando View, Other Wi ndows e Object Browser. As funes internas se encontram na seo Microsoft. Vis ualBasic.dll .

Workshop
o Workshop foi planejado para aj ud-lo a antecipar possveis dvidas, revisar o que j aprendeu
e comear a pensar em como colocar seu conheci mento em prtica. As respostas do teste esto no Apndice A, " Respostas dos Testes/Exercicios" .

90

Dia 3

Teste
I. Como devo decidir que ti po de varivel usar quando estiver trabalhando com nluneros?

2. Qual a maneira correia de chamar esta sub-rotina?

Function RaiseToPower(ByVal Number As Integer , ByVal Power As Integer)As


Long

A: Dim lValue

RaiseToPower(3 . 4)

B: RaiseToPower 3,4

C: Console.WriteLine{RaiseToPower(3,4)) O: Dim lValue =Ra iseToPower 3,4


3. Se uma varivel for declarada com o uso da palavra-chave Pr; vate, onde poder ser usada em um programa?

Exerccios
I. Reescreva o exemplo do aplicativo para clculo do valor futuro de modo que represente o pagamento de um emprstimo em vez de um investimento. Ele deve sol icitar a quant ia do emprstimo, os juros anuais, o perodo em meses e calcular o valor de seus pagamentos. A frmula para esse clculo

Pagamento = Quontiofmprestimo * (JurosMensois * 1 Meses) I (1 + JurosMensois) A Meses) - 1))

JurosMensais)

SEMANA

DIA
Controlando o Fluxo dos Programas
At agora, este livro abordou a criao de programas de computador, mas para escrever um que

seja realmente til, voc precisa de mais alguns elementos essenciais. At o momento, estivemos desenvolvendo prog ramas compostos de uma srie linear de instrues; cada linha era executada em ordem quando o programa era processado. Para que um programa seja realmente interativo, para que use caminhos diferentes no decorrer do cdigo dependendo das entradas que receber, preciso um novo tipo de instruo, uma instruo de controle. Quase toda linguagem

de programao possui instrues de controle, e o Visual Bas ic .NET no uma exceo. Nesta
lio voc aprender sobre as duas categorias de instrues de controle:

Instrues condicionais
Jnstrues de lao

Em cada categoria, abordarei di versas variaes dos tipos, e voc aprender que instruo especfica melhor para uma situao em particular.

Tomando Decises com as Instrues de Controle


As inslrues de COnlrole so aque las parles de lima linguagem de programao que existem apenas para determinar que outras partes do programa sero executadas. A determinao ocorre

92

Di a 4

por causa do valor de algumas variveis ou outra circunstncia, permiti ndo que o programa aja diferentemente dependendo da situao . A necessidade desse tipo de com portamento evidente quando voc percorre a maioria dos program as que usam pseudocdigo.
Novo TERMO

Quando descrevemos um prob lema por meio de uma linguagem que algo entre

nossa maneira habitual de falar e cdigos de computador, chamamos essa descrio 'quase em cdigo' de pseudocdigo. Esta Iio fornece vrios exemplos do uso desse tipo de lin-

guagem para descrever o que seus programas devem fazer. Muitas pessoas, incl uindo os autores deste livro, acham essa maneira til para planejar o fluxo de seus programas de um modo que lei-

gos tambm possam compreender. Pode ser muito mais fc il descrever um programa inteiro em pseudocdigo antes de compor o cdigo real (isso se tomar excessivamente importante quando voc lidar com programas mais complicados). Por exemplo, consideremos um cdigo que consistiria apenas em uma pequena parcela de um aplicativo, a saudao na hora da conexo. Usando a li nguagem com um para descrever o que esse cdigo faz, voc poderi a dizer, "D as boas-vindas ao usurio que iniciou O programa, usando a saudao apropriada dependendo da hora do dia". Para um trecho to pequeno de cd igo, essa provavelmente seria a descrio integral fornec ida, e a cod ificao poderia ser iniciada exatamente nesse ponto. Com relao a essa tarefa especfica, o pseudocdigo poderia ter a aparn cla a seguIr: Quando o programa for iniciado ... Se for antes do meio -dia, exiba "Bom Dia !" Se for depois do meio-dia , porm antes das 6 da tarde, exiba "Boa Tarde!" Para qualquer out ra ho ra, exiba "Boa N oite!" Continue com o restante do programa ... Mesmo esse exemplo simp les mostra a necessidade de tomar algumas dec ises no cdigo, para perm itir que o programa ex iba uma mensagem diferen te dependendo da hora do dia. Para transformar isso em cdigo, use urna instruo de controle a fim de que possa verificar uma cond io (nesse caso, a hora) e, cm seguida, escolha que ao tomar.

A Instruo I f
A instruo de controle I f a mais sim ples, e a mai s comum em quase toda li nguagem de programao. Ela possui vrios formatos diferentes, mas basicamente tem a segu inte aparncia:
If <condio >Then Cdigo a ser executado se a condio for verdadeira End If A <condi o> a parte essencial dessa instruo; ela determina se o bloco de cdigo interno ser executado ou no. Essa condio torna a fonna de uma expresso, que uma combinao de valores e operadores avaliada no tempo de execuo para gerar um nico valor. J que a instruo

Controlando o Fluxo dos Programas

93

I f d suporte a apenas duas aes possveis - o cdigo executado ou no - , a expresso s deve ter dois valores. Isso significa que qualquer expresso usada como uma condio tem de apresentar um resultado definitivo "sim ou no" (Verdadeiro ou Fal so), como estes exemplos:

Estamos em um horrio antes do meio-dia. Estamos em um horrio depois do meio-d ia, porm antes das 6 da tarde. A quantidade de alunos excede de cadei ras.

Cada uma dessas expresses verdadei ra ou no. No h meio lermo e, portanto, elas se enquadram como a condio de uma instruo I f . Se voc tiver alguma dvida sobre a conformidade de urna expresso em particular, apenas teste-a no pseudocdigo. Por exemplo, considere estas expresses: 3+5 John Quarta-feira Agora, teste uma dessas expresses em seu pseudocd igo: "Se 3 + 5, ento, encerre o programa". O que isso sign ifica? A expresso "3 + 5" no tem um resultado que possa ser avaliado como verdadeiro ou fal so e, portanto, a instruo I f no faz nenhum sentido. Expresses que retornam verdadeiro ou fa lso so conhecidas como boo/ealTas; abordarei esse assunto com mais detalhes ainda nesta lio. A seguir, iremos voltar ao exemplo original do pseudocdigo, exib indo uma saudao no incio de um programa. Quando o programa for iniciado .. . Se fo r antes do meio-dia, exiba "Bom Dia !" Se for depois do meio-dia , porm antes das 6 da tarde, exiba "Boa Tarde!" Para qualquer ou tra hora , exiba "Boa Noite!" Continue com o restante do programa ... Antes de voc converter esse pseudocd igo em um programa do Visual Basic .NET, pode valer a pena aproximar essas mesmas li nhas (legveis pelo usurio) um pouco mais do que seria um cdigo. Isso pode ser feito apenas pe la reformulao do texto para fornecer mais detalhes : Quando o programa for iniciado ... Se a hora atual no s i stema for menor que meio-dia ento , exiba "Bom Dia!" Se a hora atual no s i stema for igualou maior que meio-d ia e a hora atual do sistema tambm for menor que 6 da tarde ento , exiba "Boa Tarde!" Se a hora atual no s i stema for igualou maior que 6 da tarde

Dia 4

ento , exiba "Boa Noite!" Continue com O restante do pr ograma ... Agora, para escrever esse programa, tudo que voc precisa saber como obter a hora atual do sistema; o resto no deve ser to dific il. A hora atual do sistema est disponvclno objcto Now{ ), que tam bm inclui infonnaes sobre a data atual e exibe vrias propriedades teis como Hour, Mi nute, DayofWeek e Seconds. Para nossa final idade, podemos nos dar por satisfe itos usando apenas Hour, que retornar a hora atual representada em um perodo de 24 horas (valores de Oa 23). Traduzir da mane ira mais literal possve l do pseudocdigo para o Visual Basic. NET produzi r o programa da Listagem 4.1.
LISTAGEM 4 .1

Greet i n9 . vb

1 Imports System 2 3 Public Class Greet i ng 4 'Execute o aplicativo 5 Shared Sub Ma in{ ) 6 Dim dtCurrent As System.DateTime 7 Dim iHour As Integer 8 dtCurrent = dtCurrent. Now() 9 iHour = dtCurrent.Hour 10
11

12
13
14 15 16 17

18
19

20 21 22 23 End Class

If (iHour < 12) Then Console .Writeline("8om Dia !" ) End If If (iHour >= 12)And (iHour < 18)Then Console .WriteLine{"Boa Ta r de!") End If If (iHour >= 18) Then Console.WriteLine("Boa Noite!") End If End Sub

Voc pode fazer o download de G reeti n9. vb na pgina deste livro na Web e test-lo. Para com pilar esse programa, e a maioria dos exemplos desta lio, faa o download desse arquivo ou crie um arquivo de texto, insira o cdigo da Listagem 4.1 nele e, em seguida, salve-o como Greet i n9. vb. V para o console de comando (prompt do DOS), use o comando cd (change director)', alterar diretrio) para se assegurar de que est trabalhando no mesmo diretrio do arqu ivo Greeti n9. vb e compil e o programa digitando vbc r:System.dll t:exe Greeting.vb. O compi lador criar, por padro, um programa executve l com o mesmo nome do arquivo-fonte, portan to, nesse caso,

Co ntrol ando o Flu xo dos Prog ramas

95

tenninaremos com um arquivo novo, no mesmo diretrio, chamado Greeting.exe. A execuo do programa executvel recm-criado produzir o resultado apropriado, dependendo da hora do dia em que ele for processado. Para compreender me lhor como essas trs condies I f funcionaram, percorreremos o cdigo e examinaremos o que aconteceu. Voc poderia fazer isso dentro do IDE do Visual Stud io, mas usaremos o papel para deixar todo esse esforo da mqu ina para mai s tarde.
ANALISE

A primeira linha executada foi a 9, que inicializa a varive l de data com a hora e data atuais; em seguida, a linha 10 salva a hora atual em outra varivel, i Hour. A primeira instruo If executada na linha 12. Nesse ponto, a expresso (iHour < 12) avaliada. A varivel iHour igual ao valor da hora atual , que 13 (de acordo com o relgio do sistema, para os fins deste exemplo, apenas suponha que a dcima terce ira hora I da tarde). Agora, a expresso, que foi reduzida a 13 < 12, ser reduzida ainda mais para um si mples valor booleano Fa 1se (13 no menor do que 12, ao menos no pe lo que aprendi em matemtica). Portanto, um valor fa lso informa instruo I f para no executar seu bloco de cdigo, e o processamento imediatamente passa para a linha 14, End If. Essa instruo na verdade apenas um espao reservado, portanto, nada acontece at a li nha 15, a prxima instruo If. Nesse caso, a instruo If, (iHour >= 12) And (iHour <:: 18), primeiro red uzida para (13 >= 12) And (13 <:: 18) e, em seguida, para True And True (Verdade iro e Verdadeiro). Quando comb inamos (And) dois valores booleanos, s consegu imos um resultado verdadeiro se ambos o forem , o que parece ser o caso aqui. Assim , a instruo If tennina com uma condio verdadeira, o bloco de cdigo executado (linha 16), e a to estimulante mensagem 80a Ta rde! exib ida no console. Agora, nosso programa executou todo o seu trabalho; exibimos a mensagem correta para essa hora do dia. O cdigo no encerrou sua execuo, no entanto; no h nada que o infonne que no h motivos para conti nuar, portanto, a execuo prosseguir em End If e, depois, na ltima instruo da linha 18. Essa instruo tem a expresso (iHour >= 18) como sua condio, que se toma (l3 >= 18) e tennina como falsa. Felizmente a execuo passa para a ltima instruo End I f na linha 20 e, em segu ida, encerra o programa.

Estendendo a Instruo If
Embora a Listagem 4.1 seja bem direta e decerto no o programa mais complicado do mundo, efetivamente levanta uma questo: por que se preocupar com a execuo de um cdigo depois que voc tiver obtido sua resposta? Esse um bom ponto. Mesmo que as linhas 18 a 20 da Listagem 4. 1 fossem apenas algumas linhas adic ionais de execuo, poderia haver muitas outras sobrando no final de um programa no mundo real. Nesse programa, a inteno era realmente passar para a prxima instruo If, s se a aluai fosse falsa. Poderia ter sido mais claro em meu pseudocdigo escrevendo-o da maneira a seguir: Quando o programa for iniciado ... Se a hora atual no s istema for menor que meio-dia ento, exiba "Bom Dia!" caso contrrio

Dia 4

Se a hora atual no sistema for igualou maior que meio-dia e a hora atua l do sistema tambm for menor que 6 da tarde ento. exiba "Boa Tarde!" caso contrrio Se a hora atual no sistema for igualou maior que 6 da tarde ento, exiba "Boa Noite!" Conti nue com o restante do prog rama ... Esse exemplo quase o mesmo que o do cdigo anterior, mas agora est claro que voc s passar para a prxima instruo I f quando o valor da expresso no atender condio da aluaI. Como j deve ter sido percebido, a capacidade de aninhar inst rues If, como aqu i, uma necessidade comum na programao de computadores, portanto, o Visual Basic e a maioria das outras linguagens fornecem uma maneira de expressar exatamente esse conceito com a instruo I f. Estivem os examinando a forma simples desta instruo: If <condio> Then bloco de cdigo End If Se a avaliao da condio apresentar como resultado True, ento, o bloco de cdigo ser executado; se obtiver Fa l se, o bloco ser ignorado, e a execuo continuar depois de End If. Voc pode tornar isso um pouco mais complexo adicionando uma nova clusula, El se. Agora, a sintaxe se parecer com a descrita a seguir: If <condio> Then bloco de cdigo # 1 El se bloco de cdigo ' 2 End If Nessa nova estrutura, se a condio encontrar um resultado True, o bloco de cdigo # I ser execUlado, e o programa continuar depois de End I f. No entanto, se a condio obtiver Fa 1se, ento, o bloco de cdigo #2 ser executado, e o programa continuar depois de End If. J que a condio deve ser uma expresso booleana e todas elas so verdadeiras ou falsas, um dos dois blocos de cdigo ter de ser processado; essa instruo nunca far com que os dois ou nenhum deles sejam executados ao mesmo tempo. Reescrever o cdigo para se beneficiar dessa nova instruo If aperfeioada produzir a Listagem 4 .3.
LISTAGEM

4.2

Greeting_IFELSE . vb

1 Imports System 2 3 Public Class Greeting 4 'Execute o aplicativo

Controlando o Fluxo dos Programas

97

LISTAGEM 4.2 5 6 7
8

Greeting_IFELSE.vb (continuao)

Shared Sub MainO Oim dtCurrent As System.OateTime Oim iHour As Integer dtCurrent =dtCurrent .Now iHour =dtCurrent.Hour If (iHour <12)Then Conso1e.Write1ine("Bom Dia!") E1 se If (iHour >" 12)And (iHour <18)Then Conso1e.WriteLine("Boa Tarde!") E1 se Conso1e .WriteLine("8oa Noite!") End If End If End Sub

9
10
11

12
13 14

15
16
17

18 19
20

21 22 23 End C1ass

Mais simples? No, nem tanto, mas a Listagem 4.2 mais eficiente que a 4.1. Nessa nova verso da soluo, depois que a saudao correta foi exibida, o programa fo i encerrado. Nenhum cdigo desnecessrio foi executado. Nesse programa especfico, aninhei outra instruo I f dentro de cada clusula E1 se, para testar mais uma cond io caso aanlerior fosse fa lsa. No s um cdigo desse tipo que pode se r inserido em uma clusula E1 se, mas como essas instrues I f aninhadas so freqUentes, o Visual Basic acrescentou mais uma melhoria, a instruo E1 self. Essa instruo combina a funcionalidade de E1 se, com a possibilidade de oulra instruo If ser aninhada ou aparecer imed iatamente a seguir. Sua sintaxe uma condensao do que voc teria de escrever se usasse I f e E1 se. A seguir, vemos a sintaxe de uma instruo I f em que a clusula E1 se contm outra instruo I f aninhada, seguida pela sintaxe que seria usada com a instruo E1esIf:
If <condio #1> lhen

bloco de cdigo ' 1 E1 se If <condio '2> then bloco de cdigo 12 End I f End If
passa a ser

If <condio '1> l hen bloco de cdigo ' 1

Dia 4 Elself <condio 12> lhen bloco de cdigo 12 End If Observe que falta um a instruo End I f complementar na segunda sintaxe do exemp lo. A instruo E1 seI f considerada apenas uma clusula e, portanto, tambm faz parte da instruo I f origi nal. Ainda seria possvel inserir uma clusula Else naquela segunda cond io ou at mesmo outra clusu la ElseIf. Esses dois exemplos so mostrados aq ui: If <condio #1> Then bloco de cd i go I I ElseIf <condio 12> lhen bloco de cd igo 12 Else bloco de cd igo 13 End If

If <condio I I> Then bloco de cd i go 1 1 ElseIf <condio '2> lhen bl oco de cd igo 12 ElseIf <condio '3> lhen bloco de cd igo 83 End I f Mesmo com outra clusula E1 self, todo o bloco considerado parte da instruo I f origi nal , e s uma instruo End I f necessria. Voltando ao primeiro exemplo, a exibio da saudao apropriada depender da hora do dia, e a clusula El self (veja a Li stagem 4.3) permitir que voc simpli fique bastante o cdigo.
LISTAGEM

4.3

Greetings_Elself.vb

1 Imports System
2

3 4 5 6 7
8
9

Public Class Greeting 'Execute o aplicativo Shared Sub Ma in() Oim dtCurrent As System.OateTime Oim iHou r As ln teger dtCurren t ~ dtCurrent. Now iHour ~ dtCurrent.Hour If (iHour < 12)Then Conso l e .Writeline(nBom Dia!") Elself (iHour >~ 12)And (iHour < 18)Then

10 11

12
13
14

Controlando o Fluxo dos Programas

99

LISTAGEM 4 .3

Greetings_Elself.vb (continuao) Conso 1e. Wri teU ne (" Boa la rde! ") Else

15

16
17 18 19

Console.WriteLine{"Boa Noite!") End If End Sub

20
21 End Class

Instrues If em Seqncia na Mesma Linha


Alm da forma em bloco apresentada anteriormente, na qual um conjunto interno de cdigo inserido entre as instrues If e End If, tambm possvel expressar urna instruo If em urna nica linha. Aqui est um exemplo, em que urna condio verificada e uma ao tomada, tudo em apenas uma linha:
If iHour
>

11 lhen System.Console.WriteLine("No de manh!")

Esse conceito da linha nica pode ser ampliado com a introduo de urna clusula E1 se:

If iHour

>

11 lhen DoSomething{) Else DoSomethi ngEl se( )

Ele pode at ser usado com mais de uma instruo a ser executada em blocos de cdigo verdadeiros ou falsos (ou em ambos) j que instrues mltiplas podem ser separadas com o uso de doispontos, como na linha a segu ir:

If iHour

>

11 lhen DoSomething{): DoMore{) Else DoSomethingElse()

Inclu essa instruo mais para fins de complementaridade do q ue por alguma necessidade real. No h nada que voc possa fazer com a instruo If em apenas uma linha que no seja possvel fazer com a forma habitual em bloco. Colocar todo o cdigo em uma linha no far com que seja executado mais rpido. Tudo que se consegue, na maioria das vezes, produzir um cdigo-fonte que ocupa menos espao em disco e muito mai s dincil de entender. Ocasionalmente, essa verso de linha nica pode dar a seu cdigo uma aparncia melhor, como mostramos na Listagem 4.4. Nessa listagem, vrias instrues If foram necessrias, todas executando um cdigo simples se suas condies forem verdadeiras. Essas situaes so muito raras para j ust i ficar o uso de outra sintaxe em uma instruo to simples. Recomendo a adoo da OUlra forma dessa instruo para que no provoquemos dores de cabea em nossos colegas programadores.
LISTAGEM 4.4

Instrues If em uma nica linha Podem Dar ao Cdigo uma Aparnci a Mel hor

1 If X=5 lhen strChar = "A" 2 If X=23 lhen strChar = "8"

100
1

Dia 4

LISTAGEM 4.4

Instrues If em uma nica linha Podem Dar ao Cdigo uma Aparncia Melhor (continuao)

3 If X=2 lhen strChar " "C"


4
o

Expresses e Lgica Booleana


Todas as instrues de controle dependem, de alguma maneira, de tomada de deciso, com base no valor de uma varivel, constante ou fato relacionado com a situao alua i. Independentemente de que valor esteja sendo verificado, o resu ltado s pode ser verdadeiro ou fa lso. Como j discutimos, todas as expresses booleanas geram uma entre duas respostas: sim ou no, verdadeiro Oll falso. No Dia 3, " Introduo Programao com o Visual Basic .NET', voc aprendeu sobre as variveis booleanas, um tipo de varivel que s pode conter valores verdadeiros ou falsos. Esses so os nicos tipos de expresso e valores permitidos como parte de uma instruo de controle porque e la precisa tomar urna deciso com base nesse valor. Expresses que no so booleanas apenas no funcionam; no produziriam urna resposta positiva/negativa ou verdadeira/falsa, e o programa no saberia o que fazer.
Os dois estados mais simples das expresses booleanas so verdadeiro e falso; todas as expresses booleanas, quando avaliadas, term inam com um desses dois valores. No entanto, no h muitos programas que os usem diretamente. Em vez disso, so criadas expresses mais complicadas que so comparaes entre dois valores no boo leanos, operaes lgicas com valores booleanos ou uma combinao desses dois tipos de expresses.

Operadores de Comparao
O tipo mais comum de expresso usado em programas uma comparao, duas expresses no booleanas com um operador no meio. Os operadores de comparao a seguir esto d isponve is para serem usados em expresses:

>, ma ior que <, menor que =, igual a

<>, >=, <=,

diferente de maior ou igual a menor ou igua l a

Todos esses operadores funcionam tanto com strings quanto com valores numricos. Um operador de comparao adicional, Li ke, tambm est disponvel para verificar a correspondncia de padres nas strings. O operador Li ke perrnite que voc compare uma varivel de string com pa-

Controlando o Fluxo dos Programas

101

dres que empreguem caracteres especiais e comuns. Entre os caracteres especiais que podem ser usados com Li ke esto: *, para indicar a quantidade de caracteres adic ionais ?, para representar um caractere #, para representar um dgito (0-9) Intervalos ( [a -g)), por exemplo) para especi ficar que qualquer caractere dentro dele deve ser considerado uma correspondncia

Desenvolveremos um pequeno programa para testarmos a instruo If e o operador Li ke. Esse programa (veja a Listagem 4.5) aceitar um valor de teste e um padro como entradas e, em seguida, verificar se o valor de teste coincide com o padro .
LISTAGEM

4.5

PatternMatcher.vb

1 Pub1ic C1ass PatternMatcher

2
3

4 5 6
7 8

Sha red Sub Main{) Dim sInput As String Dim sPattern As String Dim sMatch As String System . Console.Write("Insira um padro:") sInput = System.Console . ReadLine{) sPattern = sInput System.Console.Write("Insira uma string para a comparao:") sInput = System.Console.ReadLine() sMatch = sInput If sMatch like sPattern Then System.Console.WriteLine(sMatch & " Matched with " & sPattern) E1se System . Console.WriteLine(sMatch & " no coincid iu com "& sPattern) End If End Sub End Class

9 10 11
12

13
14

15 16
17

18
19

20
21

Depois de inseri-lo em um arquivo de texto (ou fazer seu download) e compilar (vbc It :exe PatternMatcher. vb), tente executar esse programa com vrias entradas. Por exemplo, voc poderia *T usar um padro como C e tentar testar valores como CAT, coat, ct e assim por diante.

Operadores Lgicos

o outro tipo de expresso que pode ser usada corno booleana a que emprega operadores lgicos. Esses operadores trabalham com expresses ou valores booleanos e produzem um resultado

102
1

Dia 4

booleano. J que os valores booleanos so muito semelhantes aos bits (valores binrios, 1 ou O), os operadores lgicos so freqentemente chamados de comparaes bit a bit. Os operadores dessa categoria so ANO, DR e XOR, que comparam dois valores ou expresses, e NOT, que usa um nico valor Oll expresso booleana. Ao usar o operador ANO entre dois valores booleanos, voc s obtm um resultado igual a verdadeiro se os dois o forem . Com DR, se um dos valores for verdadeiro, ento o resultado tambm ser. O operador XOR, tambm chamado de exclusil'eOR, gera um resultado verdadeiro, se um dos valores for verdadei ro e o outro for falso. NOT apenas um operador de negao: retoma o oposto de qualquer valor que for usado com ele. A Tabela 4.1 lista todas as combinaes possveis de
valores e o que os diversos operadores lgicos produziriam em cada caso . Em todos os exemplos, seria possvel subst ituir os valores True (verdade iro) e Fa 1se (falso) por expresses que pudessem ser aval iadas at chegar a um valor booleano.
TABELA

4.1

Combinaes Booleanas Resultado TRUE FAl SE FAl SE FAl SE TRUE TRUE TRUE FAl SE FAl SE TRUE TRUE FAl SE FAl SE TRUE

Expresso TRUE ANO TRUE FALSE ANO TRUE TRUE ANO FAl SE FALSE ANO FALSE TRUE DR TRUE TRUE DR FAlSE FALSE DR TRUE FALSE DR FAlSE TRUE XDR TRUE TRUE XDR FAl SE FALSE XDR TRUE FALSE XOR FA LSE NDT TRUE NOT FALSE

A dispon ibil idade dos operadores lgicos permite que voc combine outras expresses e valores
para produzir expresses booleanas mais compl icadas, como: If X :> 3 ANO X < 8 Then, ou I f (((X+3) * 5):> (Y*3)) ANO (SystemIsRunning{) DR iHour < 5) Then.Usaremos os dois tipos de expresses, de comparao e lgica, posterionnente em alguns exerccios envolvendo instrues If.

Co ntrol ando o Fluxo dos Prog ramas

103

Avaliao Abreviada
De maneira semelhante ao resu ltado de uma eleio, o de uma expresso booleana em geral co~ nhec ido antes que ela tenha sido integralmente aval iada. Cons idere esta expresso booleana: (X >l)AND (X <10). Se Xfor igual a I, ento, assim que voc avaliar o lado esq uerdo da expresso (obtendo falso), saber que o direito irrelevante. Dev ido natureza da instruo ANO, no h ne~ cess idade de avaliar o outro lado. A expresso inteira ser falsa, independentemente de que valor for retomado pela outra extremidade. Chegaramos a essa concluso sem precisar pensar muito ao avali armos as expresses booleanas, mas nem sempre est to claro para o computador.
Novo TERMO

o comportamento que esperamos, no avaliando partes desnecessrias de uma expresso, chamado abreviao (hort-circuiting) , mas o Visual Basic .NET, por padro, no trabalha desse modo. Para faz-lo abreviar uma expresso booleana, voc precisa usar formas alternat ivas dos operadores ANO e DR, ANOALSO e ORELSE . No entanto, no bom apenas confiar que ele se comportar dessa maneira; um programa simples de teste (veja a Listagem 4.6) pode ser usado para que examinemos exatamente o que acontecer. 4.6 ShortCi reuit i n9. vb

LISTAGEM

1 Public Class ShortCircuiting 2 3 Shared Sub Main() lf Test("Esquerda")ANOAlSO Test("Oireita")Then 4 5 'execute algo End lf 6 7 End Sub
8

9 10 11 12
13

Shared Function Test(sInput As String) As Boolean System.Console.WriteLine(sInput) Test = FALSE End Function

14 End Class Se a funo Test{ ) retornar fa lso, como fez na Listagem 4.6, ento, voc saber o resultado da expresso inteira apenas avaliando o lado esquerdo. A execuo do cdigo da Listagem 4.6 produzir s uma linha de resultado, nesse caso, "Esquerda" . Se Test ( ) retornar verdadeiro, os dois lados precisaro ser executados, e o programa exibir tanto "Esquerda" quanto "Di rei ta". Para testar o comportamento-padro dos operadores booleanos, tente alterar ANOALSO para somente ANO, e veja que resultado obteve.

104

Dia 4

lidando com Mltiplas Possibilidades: A Instruo Se 1ect Case


A instruo If pode manipuJarquase todo l ipo de requ isito para tomada de decises, mas na verdade, foi criada para lidar com opes de apenas uma ramificao. Se diversos valores diferentes precisarem ser verificados e uma ao d ist inta for tOmada para cada um, as instrues I f podero se tornar inadequadas. Considere o exemplo de um programa para insero de dados de imposto de renda com roti nas separadas para manipular cinco categorias diferentes de clientes. A categoria do cliente baseada na quantidade de pessoas em um endereo domicili ar. Voc prefere d iredanar os usurios para a rotina correIa com base nesse valor. Com o liSO das instrues I f, o

cdigo pode ficar com a aparncia da Listagem 4.7.


LISTAGEM 4.7

Usando Muitas Instrues If Aninhadas

1 ..

2 If IngQuantidadePessoas = 1 Then 3 Ca11 RetornalmpostoPerCapta ()

4 Elself IngQuantidadePessoas = 2 Then 5 Call Retorna lmpostoOuasPessoas () 6 Elself lngQuant i dadePessoas = 3 OR l ngQuantidadePessoas = 4 Then 7 Call RetornalmpostoOomiclioMdio () 8 Elself IngQuant i dadePessoas > 4 ANO lngQuantidadePessoas < 10 Then 9 Call RetornalmpostoOomiclioGrande() 10 El se 11 Ca 11 Retorna Impos toOomi cl i oMuitoGrande () 12 End If
13

Quando voc comear a testar mais do que algumas opes possveis, todas as diversas clusulas If se tomaro excessivamente complexas. Para manipular o teste COm mltiplos valores ou vrios conjuntos de valores, o Visual Basic incluiu a instruo SeI ect Case, que tem a sintaxe a segu ir: Select Case <varivel ou expresso sendo comparada> Case <valor ou intervalo de valores> bloco de cdigo Case <valor ou intervalo de valores> bloco de cdigo Case El se bloco de cdigo End Select

Co ntrol and o o Flu xo dos Prog ramas

105

o uso da instruo Se I eet


LI STAGEM

Case no lugar das instrues If da Listagem 4.7 produzir o cdigo alternat ivo mostrado na Listagem 4.8. 4.8
O Comando Select Case Pode Simplificar Muito Seu Cdigo

1 Select Case lngQuant i dadePessoas 2 Case 1 3 Call RetornalmpostoPerCapta () 4 Case 2 5 Call RetornalmpostoDuasPessoas () 6 Case 3,4 7 Call RetornalmpostoDocmiclioMdio() Case 5 to 9 8 9 Ca 11 RetornalmpostoDomi cil i oGrande () 10 Case Else 11 Call RetornalmpostoDomiclioMuitoGrande () 12 End Select A clusula Case El se usada exatamcnte como a clusula El se em uma instruo 1f, cxceto por, nesse exemplo, ser executada se nenhuma das condies for atendida. Observe que, na Listagem 4.8 , apenas uma das condies poderia ser verdadeira a cada vcz. No h sobreposio entre as diversas condies Case, o que faz muito sentido. Na verdade, as sobreposies no so evitadas de modo algum pelo Visual Basic; possvel ter condies sobrepostas nas quais mais de uma condio Case pode co incidir com um valor especifico. Se esse for O caso, s a primeira condio que tiver uma correspondncia ser executada porque o programa sai da instruo SeI ect Case depois que uma correspondncia foi encontrada e o bloco de cdigo apropriado fo i processado. Embora no cause um erro, a sobreposio de condies pode ser confusa para o programador, e mel hor evit-la apenas por isso.

Faa
Aborde sempre toda condio possvel incluindo uma clusula Case El se. Isso capturar toda ent rada inesperada para as quais voe no usou outra instruo Case. Seu programa fica r mais consist ente. No use m lt iplas condies em sua instruo Seleet Case se um nico valor puder ter correspondncia com mais de uma delas. Esse t ipo de cdigo no um erro para o Visual Basic, mas ser d ifcil de entender o que no muito desejvel.

Laos
At agora, nesta lio, voc aprendeu a controlar que cdigo ser executado com o uso das instrues lf e Select, mas h outra necessidade mu ito comum - a de processar o mesmo cdigo

Dia 4

vrias vezes. Esse requisito manipulado por meio de outra espcie de instruo de controle, o lao (loop). Vrios tipos diferentes de laos esto disponveis no Visual Basic, todos podem executar a maioria das tarefas, mas cada um foi projetado para atender a uma finalidade especfica. Comearemos nosso est udo da repetio examinando o mais bsico dos laos, For ... Next.

For Next
Oobjet ivo do lao executar um bloco de cdigo vrias vezes, em gera l parando quando alguma condio verdadeira. (Embora um lao no tenha de parar realmente; essa situao chamada de lao infinito.) O lao For executa um bloco de cdigo um nlmero especfico de vezes. A sintaxe desse controle For <varivel do contado r> Cdigo a ser executado Next <vari6vel do contador>
=

<valor inicial> to <valor final>

A incluso da varive l do contador depois da instruo Next final opcional, mas ela ajuda a in-

dicar que lao For essa instruo Next pertence e boa prtica de program ao.

A Varivel do Contador
A varivel do contador incrementada a cada passagem pelo lao, do valor inicial ao final.

Quando esse valor fi nal atingido, o lao encerra sua execuo, e o programa continua na linha imediatamente aps a instruo Next . Para visualizar esse conceito com alguns valores reais, criaremos uma verso no Visual Basic .NET do pri meiro programa que escrevi (veja a Listagem 4.9).
LISTAGEM

4.9

Ex i bi ndo Seu Nome Repet i damente

1 Dim iCounte r As Integer 2 For iCounter = I to 10 3 System. Console .Wri teL i ne( "Ouncan Mackenzie") 4 Next iCounter E claro que em geral uso valores na casa dos milhares ... pois adoro ver meu nome rolando na tela!
A varivel do contador real e, exatamente como na Li stagem 4.9, deve ser declarada antes de

voc us-la como parte de seu lao. Tambm importante se certificar de empregar o tipo de dado correto para essa varive l. Na Listagem 4.9, a varivel i Counter seria utili zada para armazenar va lores de 1 a 10, o que torna os tipos de dado intei ro (I nteger) e byte os mais adequados. Em outras situaes, poderamos estar lidando com nmeros muito maiores e, portanto, precisar de um inteiro longo (Lo ng I ntege r ). Para obter mais informaes sobre os diversos tipos de dados, incl uindo que intervalo de valores cada um pode conter, recorra ao Dia 3. Como j mcncio-

Controlando o Fl u xo dos Programas

107

nado, a varivel do contador incrementada a cada passagem pelo lao, o que com freqncia ti l porque ela pode ser usada em seu cdigo.

Faa
Use o tipo de dado mais apropriado para a situao; no empregue o inteiro longo se o inteiro puder atender bem. Sendo o intervalo fechado ou podendo crescer muito, certifique-se de usar o tipo de dado que melhor manipule o maior intervalo possvel para o contador.

No Faa
.~

No altere o valor da varivel do contador dentro do lao. A funciona lidade interna do lao For aumenta o valor da varivel do contador sempre que o cdigo do lao executado, mas voc no tem impedimentos para alterar por sua prpria conta esse valor. Resista ten tao, ela s resultar em erros desconhecidos e em um cdigo incompreensvel.

A Listagem 4. 10 mostra como voc poderia lIsar a varivel do contador como parte de seu cdigo . Uma pequena funo chamada WeekDayName produz uma listagem dos dias teis da semana.
LISTAGEM 4 .10

Usando a Varivel do Contador

1 Public Class DaysOfTheWeek


2

3 4 5 6 7
8

Shared Sub Main() Dim sOayName As String Dim iFirstDay As Integer Dim i LastOay As Integer Dim iCurrentDay As Integer iFirstOay = 2 iLastOay = 6 For iCurrentOay = iFirstDay to iLa stOay System.Console.WriteLine{WeekdayName(iCurrentDay)) Next iCurrentOay End Sub Shared Function WeekdayName{ByVa l iDayNumber As Integer)As String Dim sWeekdayName As String Select Case iDayNumber Case 1 sWeekdayName "Sunday " Case 2 sWeekdayName "Monday " Case 3 sWeekdayName "Tuesday

9 10
11 12

13 14

15
16

17 18
19

20
21

22

23 24

25 26

II

108

Dia 4

LISTAGEM 4 .10

(continuao)
Case 4
"Wednesday" "Thursday" "Friday" "Saturday"

27

sWeekdayName 28 29 Case 5 sWeekdayName 30 31 Case 6 sWeekdayName 32 Case 7 33 sWeekdayName 34 35 Case [1 se 36 sWeekdayN ame 37 E Select od 38 Return sWeekdayName 39 40 End Function 41 Eod Class

"Inval id Day Number"

Observe que na Li stagem 4.10, Sunday considerado o pri meiro dia, portanto, esse cd igo pro duziria os resultados a seguir:

Monday
Tuesday

Wednesday
Thursday
Fr i day

NOTA

Esse exemplo ainda no est pronto para produo porque gerar a lista de nomes ape nas em ingls, no levando em considerao as configuraes da mquina . H outras manei ras, um pouco mais complicadas, de conseguir essa funci o nalidade integ ral com o suporte a t oda as con figu raes regionai s dos usurios. Retornaremos a esse tpico no Dia 8, " Int rodu o ao .NET Framework" .

Especificando o Valor do Incremento com o Uso de Step


Nos exemp los anteriores, a varivel do contador era incrementada em I cada vez que o lao era percorrido, mas possvel espec ificar o valor desse aumento. Depois do trecho com o valor final da instruo For, voc pode inserir Step <valor do aumento>, e a varivel do contador ser incrementada com base no valor que fo r fornecido . Usando o exemplo do cd igo na Listagem 4 .1 1 corno ponto de partido, tente valores diferentes para Fi r st , Last e Increment e veja os res ultados.

Co ntrol and o o Flu xo dos Prog ramas

109

LISTAGEM 4 .11

ForExample.vb

1 Imports System 2 Public Class ForExample


3

4 5 6 7 8
9

Shared Sub Ma i n{) Dim iCounter As Integer Dim iFirstValue As Integer Dim iLastValue As Integer Dim iIncrement As Integer iFirstValue ; O iLastValue : 100 ilncrement : 10 For iCounter = iFirstYalue to iLastYalue Step ilncrement System . Console . WriteLine{iCounter) Next iCounter

10 11 12

13 14 15 16 17 End Sub 18 End Class

Uma caracterstica interessante e ti l de ter a opo Step no lao For que ela penn ite que voc percorra um intervalo de valores de manei ra invertida. Tente os valores 10, O e 1 para as variveis Fi rst, Last e Increment, respectivamente. Nada ser exibido, porque last j ser menor que Fi rst, mas se o valor de Increment for alterado de 1 para -1, algo interessante acontecer (no aceite simp lesmente o que digo, tente!).
Ah, voc conseguiu um lao que executado o nmero exato de vezes que quiser, e agora os va-

lores so listados de trs para a frente. dificil acreditar que possa ficar melhor do que est, mas pode . Espere at chegarmos ao lao Do!

hile End

hile

o lao For, embora til , limitado. Foi projetado para situaes nas quais voc sabe quantas vezes quer percorr-lo, o que no sempre o caso. Por estar atualizado com relao a esse fato, o Visual Basic possui dois laos mais flexveis. O primeiro deles, Wh; 1e ... End Wh i 1e, continua sendo executado enquanto uma expresso booleana especfica for verdade ira, como o descrito a segUI r: While <expresso booleana> Cdigo a ser executado End Whil e

110
1

Dia 4

Qualquer expresso booleana vlida pode ser lIsada, exatamenle como em lima instruo If e,

portanto, possvel dar suporte a cond ies complexas. Por exemplo, um lao Whi 1e pode fornecer com facilidade a mesma func ionalidade do lao For, como demonstramos na Listagem 4.12.
LISTAGEM 4 .12

WhileExample . vb

1 Imports $ystem 2 Public Class WhileExample 3 Shared Sub Main{) 4 Dim iCounter As Integer 5 Dim iFirstValue As Integer 6 Dim ilastValue As Integer 7 Dim i Increment As Integer 8 iFirstValue = O
9 10 iLastValue " 100 i Increment " 10

11
12 13 14
15

While iCounter

<=

iLastValue

'<Insira o bloco de cdigo aqui> iCounter = iCounter + iIncrement End While


End Sub

16 End Class
E claro que reproduzir a funcionalidade do lao For no uma maneira til de usar seu tempo. , No precisamos selecionar apenas um lao; temos de utilizar todos! E prefervel empregar o lao Wh i I e na exec uo de operaes mais compl icadas, como varrer um array em busca de um trecho especifico de dados. Na Listagem 4.13 , voc se preparar para essa pesquisa carregando um array com algumas strings. Em segu ida, usando o lao Whi I e, varrer o array at ultrapassar a extenso dele ou encontrar a correspondncia que procura.
LISTAGEM

4.13

Whi l eSearch.vb

1 Imports System 2 Public Class WhileExample Shared Sub Main{) 3 4 Dim i Counter As Integer

5
6 7

8 9
10 11

12
13

Dim arrList(9)As String D iMatch As Integer ~ -1 im Dim sMatch As String sMatch = "Winnipeg" arrList(D) "San Diego" arrList(1) "Toronto" arrList(2) - "Seattle" arrList(3) "Londres" arrList(4) "Nova York"

Controlando o Fluxo dos Programas

111

LISTAGEM 4 .13

WhileSearch.vb (continuao)

14

15
16 17

18 19
20 21

22

23
24

25
26

27 28 29 31

arrList(5) "Paris" arrList(6) "Winnipeg" arrList(7) "Sydney" arrList(8) "Calgary" arrList(9) "Orlando" Whi 1e iCounter <= 9 ANO iMatch = ~1 If arrlist(iCounter)Like sMatch Then iMatch = iCounter El se iCounter = iCounter + 1 End I f End While If iMatch - 1 Then System . Console .Write Line("Matched" & iMatch) End If End Sub End Class
~
~

o operador de comparao l i ke usado na Listagem 4.13, o que perm ite que as correspondncias sejam examinadas com o uso de curingas. Ao percorrermos esse cdigo, poderemos perceber que o programa passa para outra etapa logo depois que cada uma das condies de sada aval iada como verdadeira. O lao Whi 1e muito ti l, mas ainda h outro tipo de lao disponve l, Do. Se voc for como eu, provavelmente esquecer tudo que viu sobre a instruo W 1e, depois hi de ter usado o lao Do.

Lao Do
O lao Do, alm de ser mais si mples, apresenta a estrutura de lao mais flexvel d isponvel no Visual Basic. Sua sintaxe, na forma mais bsica, :

Do
C6diga a ser executado

Loop

A si ntaxe, contudo, no especifica nenhuma condio de sada, portanto, o cd igo interno continuar a ser executado de modo infinito. Esse problema facilmente contornado porque a instruo Do d suporte a duas maneiras de iniciar as condies de sada. As opes disponveis so Whi 1e <condio>, q ue faz com que o lao sej a executado enquanto a condio for verdadeira e Unti 1 <condio>, que permite a continuao do processamento do lao enq uanto a condio for falsa. Qual deve ser usada, Whi 1e ou Unti I? Tecnicamente, no tcm nenhuma im portncia; voc pode tranqilamente empregar qualquer das duas opes apenas utilizando uma negao em s ua con-

112
1

Dia 4

dio de sada quando apropriado. Esses dois exemplos de cdigo se comportaro da mesma ma~
tle lra:

Do While iMatch
Loop

Do Unt;l Not (iMatch


'iMatch
Loop

3)

3 tambm funcionaria

Portanto, Whi 1e ou Unti 1 no so to diferentes em seu efeito, mas o lao Do oferece Qutra opo
que fornece ainda mais flexibil idade. Voc pode colocar a cond io de sada (usando a clusula Unt i 1 ou Whi 1e) no incio (com Do) ou no final (com Loop) do lao. Isso significa que possvel criar laos como o descrito a seguir:

Do
Loop Until bFound ar iCounter
>

iTotal

Diferente de apenas escolher entre Whi 1e Oll Unt i I, a posio de sua condio de sada ter um efeito maior sobre como seu lao ser executado. Se voc colocar a cond io no incio do lao, ento, ela ser veri fi cada antes de cada passagem pelo cdigo, antes at da prime ira vez que isso acontecer. Se essa condio no for atendida, o lao no ser iniciado, e o cdigo no ser executado nem mesmo uma vez. Ao contrrio, se a condio for colocada na instruo Loop, ento, ela ser verificada depois de cada passagem pelo cdigo. Independentemente do valor da condio, o cdigo sempre ser executado pelo menos uma vez. Com todas essas opes, h um total de quatro configuraes diferentes para a instruo do lao Do, tornando-a, de longe, o mtodo mais nexvcl de executar laos. Voc ainda ter de escolher entre essas quatro opes, portanto, examinaremos alguns itens para ajudar nessa deciso: Voc pode alternar entre Whi 1e e Unt i 1 apenas usando uma negao na expresso booleana. Ao escolher entre Whi 1e e Unti 1, use a que no precisar de uma negao na instruo condicionaI. Isso resu ltar em uma expresso booleana um pouco mais simples, e em termos de codi fi cao, mais simples em geral melhor. O posicionamento da instruo condicional muito importante. Se voc coloc-la no incio do lao, ento, ele no ser executado de forma alguma se essa condio no for atendida. Se for inserida no final , o lao sempre ser processado uma vez. Escolha entre as duas posies possveis definindo se realmente no quer que o lao seja executado caso a cond io no seja atendida ou se quer que o processamento sempre ocorra pelo menos uma vez.

Co ntrol and o o Flu xo dos Prog ramas

11 3

NOTA

Whi le pode ser usado no lugar de Whi le porque eles possuem exatamente o mesmo efeito. No raro ver os programadores deixarem o lao Whi le de lado para empregar essa instruo.

o lao Do

Condies de Sada
Novo A condio de sada de qualquer lao a expresso que ser avaliada para detemlinar quando ele deve tenn inar. No caso de um lao Whi 1e ou Do, elas so claramente definidas e aparecem no incio ou no fina l dele. No lao For, a condio de sada deduzida pela configurao dos I im ites superior e inferior. Entretanto, para cada um desses tipos de lao h outra maneira de espec ificar quando sair deles com o uso da instmo Exi t. H uma instmo Ex i t correspondente a cada lao (Exi t For. Exi t Do e Exi t Whi 1e). Quando a instruo apropriada for executada, ele ser abandonado de imed iato, c a execuo do programa continuar na linha seguinte ao fim do lao.
TERMO

Embora possam ser encontradas muitas ocasies em que essas instrues paream um meio perfeito de fazer o programa se comportar corretamente, elas so um dos muitos exemplos de prtica imprpria de programao. Usando a instruo Exit, voc na verdade s ter especificado uma parte comp lementar de sua condio de sada, mas de uma maneira mais do que bvia. A melhor forma de fazer isso seria adicionar essa segunda condio condio principal de sada de seu lao. Nos exemplos a seguir, veremos algumas maneiras comuns de empregar as instrues Exit e o cdigo correspondente que poderia ser usado como alternativa.

Exemplo 1: Usando um Lao For para Pesquisar um Array


Voc poderia criar um lao For para executar uma varredura em um array de tamanho fi xo, abortando-o com Exit For quando a correspondncia fosse encontrada. For i
If
=

1 to 100

arrNomes(l) = "Joe" Then System . Console . Writeline("Encontrado em I" & i) Exit For

End I f Next i

o problema existente aqui que o lao For no devia de modo algum ter sido usado, mas no sabemos antecipadamente quantos laos teremos de executar. Uma maneira de tornar esse cdigo mais objetivo seria empregando um lao Do que controlasse a passagem pelo li mite superior e procurasse a correspondncia, como descrito a segu ir:
i =1

Do Until i Loop

>

100 or arrNomes(i)

"Joe"

i = i + 1

114
1

Dia 4

Exemplo 2: Procurando um Valor de Escape


Nos laos em que se quer capturar a entrada do usurio e ainda permitir que eles a cance lem, duas condies de sada e lima instruo Exit em geral so usadas em um deles:

iCurrentGuess
iTarget " 5

Do Until iCurrentGuess = iTarget

iCurrentGuess = GetNextGuess(} If iCurrentGuess = -1 Then


Exit Do
End If
Loop

Mais uma vez, a condio efetiva de sada mais complicada do que esse lao a faz parecer. Uma soluo apropriada seria:

iCurrentGuess = O iTarget = 5
Do Until (iCurrentGuess
=

iTarget) Dr (iCurrentGuess

-1)

iCurrentGuess
Loop

GetNextGuess()

Se essas instrues Exi t no so adequadas, voc deve estar querendo entender por que as abor-

do. Bem, embora saiba que poder evit-Ias em um cdigo de sua autoria, a maioria dos programadores em geral trabalha com cdigos escritos por outra pessoa, e importante com preender o que pode ser encontrado neles.

Laos Infinitos
Qualquer lao pode ter erros, mas um incmodo em particular quando ele executado continuamente, forando voc a interromper o programa para encerr-lo. O fato de no ser preciso especificar nenhuma condio em seu lao Do o torna um pouco mais propenso a esse tipo de erro. Se o programa for executado e parecer no terminar nunca, e, se ele for baseado em DOS, use a combinao de tec las Clrl+C para causar sua interrupo. Se estiver utilizando o IDE do Visual Basic, use a combinao de teclas Ctrl+Break para encerr-lo.

Faa
Certifique-se de ter uma condio de saida em qua lquer lao que criar. No torne sua condio de sada muito complexa; ela precisa ser avaliada a cada passagem pelo lao.

Algumas causas comuns dos laos infinitos so o esquecimento de que a varivel do contador precisa ser aumentada progressivamente (em laos diferentes de For), a reiniciai izao de Lima varivel que deveria ser crescente e o li SO de uma cond io de sada que nunca possa ser atingida.

Co ntrol and o o Flu xo dos Prog ramas

11 5

Implicaes sobre o Desempenho


H vrias dicas te is para ajud lo a conseguir o melhor desempenho com os laos em seu cdi go . Primei ro, lembre-se sempre de que toda otimizao do desempenho em um lao muitas vezes mais benfica do que em outro local do programa. J que o cd igo do lao executado repetidamente, qualquer melhoria no desempenho desse cdigo incrementada pela quantidade de iteraes. Como exemplo, considere o cdigo da Listagem 4. 14. LISTAGEM 4.14 LoopPerfonnance. vb

1 Pub l ic Class l oopPerformance 2 3 Shared Sub Main() 4 Dim i As Integer 5 6 For i " 1 to 1000 7 System.Console .Writeline(UserName()) Next i 8 9 End Sub 10 11 Shared Funct i on UserName() As String 12 Dim sName As String 13 sName " System.Environment.UserName 14 UserName " sName 15 End Function
16

17

End Cl ass

o nome do usurio fornecido por me io de uma pequena funo que usa o .NET Framework
para obter suas informaes atuais de segurana, mas o mais importante da Listagem 4.14 que ilustra erros comuns relacionados ao desempenho. A chamada funo UserName ocorre dentro do lao, o que significa que ela ser executada 1.000 vezes, cada uma provavelmente resultando em alguma fonna de chamada do sistema operacional para obteno do nome do usurio aluaI. J que no se espera que o usurio atual seja alterado nesse lao, mu ito mais efi ciente usar um lao de sua autoria em vez disso, como mostra a Listagem 4. 15 . O valor da funo UserName no alterado e, portanto, no ser includo nessa segunda listagem. LISTAGEM 4.15
2

loopPerfonnance _Better . vb

1 Public Class LoopPerfonnance 3 4 5 6 Shared Sub Main() Dim i As Integer Dim sName As String sName = UserName{)

Dia 4

LISTAGEM 4 .15

LoopPerformance_Better.vb (continuao)

8 9 10
11

For i " 1 to 1000 System . Console.WriteLine(sName) Next i End Sub Shared Function UserName() As String Dim sName As String sN ame " System.Environment.UserName UserName = sName

12 13
14 15

16 17 18 19 End Funct i on 20 21 End Class

Outra dica de desempenho impoltante, ao usar expresses booleanas, certificarse de que as partes mais simples da expresso sejam colocadas em seu lado esquerdo e, em seguida, uti lizar as clusulas de abreviao ANDALSO e ORELSE. Com essas verses dos operadores booleanos, possve l que apenas o lado esquerdo da expresso seja avaliado, portanto prefervel que ele contenha a mai s rpida das duas clusu las.

Aplicativos Que Faro Uso de Seu Conhecimento Recm-Adquirido


Agora que voc sabe como usar instrues condicionais, como If e Sel ect Case, e vrios tipos de laos, poder usar essas instrues para criar alguns exemplos interessantes de programas. Para desenvolver esses exemplos, ser necessrio algo alm dos recursos do Visua l Basic aprendidos at agora; precisaremos das classes do .NET Framework. Presentes de alguma fonna em todos os exemplos anteriores, essas classes so conj untos de cdigos j existentes que foram empacotados e disponibilizados para os programas pelo fato de o Visual Basic ser uma linguagem .NET. Esses conj untos de cd igo so fornec idos como objetos, o que em essncia uma maneira de representar um conceito ou entidade dentro de cdigos. Sempre que um objeto como System .Console ou System.Securi ty . Pri nci pal for empregado, estaremos trabalhando com lima parte do .N ET Fra mework. Para fazer isso, em geral prec iso informar ao Visual Basic que se cogita ulil izlo incluindo uma li nha como Imports System. Securi ty. Pri nci pal em seu cd igo. Considere esses ob jetos como parte da platafonna .NET; eles podem trazer para os programas um conjunto enorme de recursos para que os programadores no precisem desenvolver essa fu ncionalidade individualmente. Esse um conceito crtico do Visual Bas ic .NET, mas ainda o abordarei nos prximos captulos, portanto, no se preocupe se no parecer muito claro neste momento.

Co ntrol and o o Flu xo dos Prog ramas

11 7

Leitura de um Arquivo
Ler um arqu ivo no disco uma necessidade comum de muitos programas, portanto fornec ida pelo .NET Framework. Nesta lio, voc usar dois objetos diferentes que so parte da seo System.IO do Framework, System.IO.File e System.IO.StreamReader. Eles representam, respectivamente, o arq uivo real no disco e sua leitura na memria.

O objelo StreamReader criado com o uso do mtodo OpenFi 1e do objeto Fi le, sendo necessrio
especificar o caminho e o nome do arquivo que se deseja abrir. Voc pode usar o objeto StreamReader, para ler cada Iinha do arquivo, uma por vez, atravs de seu mtodo ReadL i ne at que alcance o fina l do arquivo. Para verificar se esse foi atingido, compare o ltimo valor lido com a constante especial Nothi n9, que diferente de urna linha vazia e permite distinguir entre uma linha em branco em um arquivo e o fim real de todos os dados. J que Nothi n9 um tipo especia l de valor, utilize o operador i s para comparar sua string com ele, em vez de um operador comum de igualdade. Na Listagem 4.16, a prime ira etapa inicializar todos os seus objetos, enquanto , aponta o objeto StreamReader para o arquivo que voc deseja ler. E necessrio um arquivo de texto para fazer este exerccio, mas qualquer de seus outros exemp los de arquivos de programa . vb deve serv ir.
LISTAGEM 4 .16

Etapa 1: Configure

1 Public Class ReadFromFile 2 3 Shared Sub Main{) 4 Dim sFileName As String 5 Dim srFileReader As System.IO.StreamReader Dim sInputline As String 6
7

8 sFileName" "MySampleFile.txt" 9 srFileReader " System.IO.File.OpenTextCsFileName) 10 11 End Sub 12 End Class Depois de obter seu objeto StreamReader, que foi inicializado de modo que apontasse para o arquivo de teste, voc poder usar um lao Do Whi 1e (veja a Listagem 4.17) para ler o arquivo, uma linha por vez. Para que esse programa produza alguma sada, a fi m de tornar possvel saber qua l sua funo, tambm imprimiremos cada uma das li nhas ao serem lidas.
LISTAGEM 4 .17

Etapa 2: Insira Este Cdigo Acima da Instruo End Sub da Listagem 4. 16

1 2

sInputLine " "a l go" Do Until sInputline is Nothing

Dia 4

LISTAGEM 4.17 3 4 5

Etapa 2: In s ira Este Cdigo Acima da Instruo End Sub da Listagem 4 . 16 (continuao)

sInput Line = srF il eReader.ReadLine() System.Console.WriteLine(sInput Line) L oop

Antes de percorrer o lao pela primeira vez, melhor certificar-se de que suas condies sejam atendidas, portanto, inicialize s InputL i ne para assegurar que no seja Nothi ng. Na Listagem 4.18, voc tentar exibir sInputl i ne mesmo quando for Nothi ng, mas seria bom adicionar uma instruo If para verificar essa poss ibilidade. LISTAGEM 4.18 1 2 3 4 5 6 7 Adic i onado uma Verificao de Nothing

sInput Line = "algo" Do Until sInputLine is Nothing sInputLine = srFileReader.ReadLine() If Not sInputLine is Nothing Then System.Console.WriteL i ne(sInputL i ne) End I f Loop

Alternativamente (veja a Listagem 4.19), voc poderia usar um mtodo de lao um pouco diferente e assegurar que uma sada no seja exibida depois que o final do arquivo tenha sido atingido. LISTAGEM 4.19 Um Lao Me l hor

1 Public Class Rea dFromFile 2 3 Shared Sub Main{) 4 Dim sFileName As Stri ng 5 Oim srFileReader As System.IO.StreamReader 6 Dim sInput l ine As String 7 8 sFileName = "MySampleFile.txt" 9 srFileReader = System .I O. Fi l e.OpenText{sFi l eName) 10 sInputline = srFileReader.ReadLine() 11 Do Until sInputL i ne i s Nothing 12 System.Console.WriteLine(sInputLine) 13 sInputline = srFileReader.ReadLine() 14 Loop 15 End Sub 16 End Class

Co ntrol and o o Flu xo dos Prog ramas

11 9

Qualquer um dos mtodos funcionar, mas o aplicativo final fornecido na Listagem 4.19 produziu o cdigo mais simples (e, portanto, melhor) dentro do lao. Se voc qu iser executar esse cdigo, ter de criar um arq uivo de texto com um contedo de teste no mesmo diretrio que seu programa executvel compilado.

Um Jogo Simples
Outro uso comum para o lao consultar repetidamente o usurio solicitando uma resposta, at que se consiga a desejada. Isso pode soar incmodo (de algum modo, parec ido com as perguntas de uma criana), mas no tipo certo de programa, pode ser lltil. Neste exemplo, voc criar um jogo simples de adivinhao de nmeros. Essejogo em particu lar foi a maneira que meu pai encontrou para me manter ocupado enquanto espervamos ser atendidos em restaurantes, embora o jogssemos de lima mane ira menos tecnolgica. Primeiro, ele escrevia um lim ite superior e um inferior nas extremidades de cima e de baixo de um guardanapo, I e 100, por exemplo, e, em seguida, selecionava um nmero aleatoriamente (a maneira aleatria de meu pai , e no a dos computadores) e o escrevia atrs do guardanapo. Eu comeava a dar pa lpites de nmeros at que encontrasse o correto, sendo informado a cada vez se meu palpite era mu ito alto ou muito baixo. Emboraduvido que eu ten ha sido metdico com relao a isso, essas informaes de certo fac il itaram bastante. Como parte da luta contnua para informatizar tudo que no precisa ser informatizado, criaremos um programa de computador para jogar "Adivinhe o nmero!". Os aspectos bsicos deste programa foram esboados acima; poderamos usar minha pequena histria como o pseudocdigo para o programa. Seria melhor reformular rapidamente os detalhes em uma defin io mais clara do que o programa deve fazer:
1. Solicitar ao usurio um limite numrico superior e inferior.
2. Detenn inar um nmero aleatrio dentro desse intervalo; ele o alvo.

3. Solic itar ao usurio um palpite.

4. Se o palpite estiver correto, encerrar o jogo e informar ao usurio quantos palpites foram necessrios.
5. Caso contrrio, informar o usurio se o palp ite mu ito alto ou muito baixo e voltar eta-

pa 3. Esse pseudocdigo no complexo, mas h um conceito novo nele que voc ainda tem de aprender, a gerao de nmeros aleatrios. Felizmente, o .NET Framework fornece lima classe para esse fim, System. Random. Com esse objeto, possvel gerar um nmero aleatrio entre um limi te superior e um inferior com um cdigo como o descrito a seguir: Dim iTargetNumber,iUpperBound,iLowerBound As Integer Dim objRandom As System.Random = New System.Random iUpperBound = lDD i LowerBound = 1 iTargetNumber = objRandom.Next{ilowerBound , iUpperBound + 1)

120

Dia 4

NOTA

Esse mtodo de gerar nmeros aleatrios retorna valores que so maiores ou iguais ao limite inferior e menores que o superior li LowerBound <: )( " iUpper Bound). Voc precisa especificar um valor superior que seja maior do que o mais alto que deseja permitir. O Cdigo deste exemplo j faz isso.

Depois que o objeto Random tiver sido inicializado, voc poder chamar seu mtodo Next sempre que desejar, e obter um novo nmero aleatrio a cada vez. Agora que sabe como obter um nmero aleatrio, pode gravar o cdigo mostrado na Listagem 4.20 para solicitar os limites ao

usurio e, em seguida, usar esses valores para obter seu alvo.


LISTAGEM 4.20

Obtendo as Infonnaes Neces srias com o Usurio

1 Public Class NumberGuesser 2 Shared Sub Main() 3 Dim iTargetNumber As Integer 4 Dim iUpperBound As Integer 5 Dim iLowerBound As Integer 6 Dim iCurrentGuess As Integer 7 Dim iGuessCount As Integer 8 Dim sInput As String 9 Dim objRandom As System.Random
10 11
12

New System.Random()

13
14 15

System .Console.Write("I nsira o limite inferior: ") sInput ; System.Console.ReadLine() iLowerBound ; Clnt(sInput) System.Console.Write("Insira o limite superi or: ") sInput = System.Console.ReadLi ne() iUpperBou nd = Clnt(sInput) 'Adivinhao do nmero iTargetNumber = objRandom.Next(iLowerBound.iUpperBound + 1) System.Console.Writeline{iTargetNumber)

16
17

18
19

20 21 22
23

End Sub 24 End C1 ass


Na Listagem 4.20, voc exibiu o nmero depois que o gerou. Isso til para testar seu programa, mas teria de ser removido ou isolado (marcado com um caractere de comentrio no incio ( , ) para ind icar que no deve ser compilado) na verso final. Em seguida, preciso criar um lao que solici tar repetidamente um novo palpite at que o alvo seja ad ivinhado. Enquanto o programa estiver executando o lao, tam bm precisaremos de outra varivel para manter o registro da qllant idade de palpites que foram necessrios para chegar ao alvo. Esse cd igo (veja a Listagem 4.21) teria de ser inserido antes da instruo End Sub para encerrar O programa.

Control ando o Fluxo do s Prog ramas

121

LISTAGEM 4 .21

Lao das Entradas de seu Jogo

1 2 3 4 5 6 7 B
9

iCurrentGuess : O iGuessCount : O Do While iCurrentGuess iTargetNumber System.Console.Write("Insira um palpite : ") sInput : System . Console.ReadLine() iGuessCount : i GuessCount + 1 iCurr entGuess : Clnt(sInput) If i CurrentGuess < iTargetNumber Then System.Console . WriteLine{"Seu palpite ba i xo ! ") El seIf iCu r rentGuess > i TargetNumbe r lhen System.Console.WriteLine{"Seu palpite alto!") End If Loop System . Console.WriteLine("Voc conseguiu em "

10
11

12
13

14 15

&iGuessCount & "

palpites")

Combinadas, as duas listagens de cdi go anteriores produzem o jogo completo que voc poder compilar e tentar ganhar. bom remover o lt imo comando Wri teL i ne da Listagem 4. 2 1 antes de jogar, ou pode ficar muito fcil. H um a maneira bastante raci onal e, portanto, chata de jogar, que garante a obteno da reposta correta com uma cel1a quantidade de palpites. Voc pode apenas fornecer a cada palpite um valor intermed irio para o intervalo, por me io do critrio altolbaixo, para criar um novo intervalo (com a metade da extenso) entre seu palpite e os lim ites inferior e superior. No jogo do exemplo, q ue usa de I a 100, esse mtodo assegura a descoberta da so luo em sete palpi tes (ou menos), com base em uma frmula matemtica. Voc sabe que f rmula info rmar a quantidade de palpites necessrios para qualquer intervalo de valores? A resposta estar na seo de exerccios desta lio.

Evitando Laos Complexos por Meio da Recurso


Em geral, h ma is de lima mane ira de resolver um certo problema e, embora um lao-padro possa fu ncionar, pode existir um modo mais simples. Se um problema for estruturado de modo correto ou voc puder reestrutur-lo da maneira certa, ento, ser possvel usar a recurso como alternativa aos laos com uns. Em programao, a recurso ocorre quando um programa a li proced imento chamaa e le prpri o em um esforo para resolve r um problema. Os problemas que podem ser solucionados por meio da recurso so aqueles nos quais um subconj unto de les tem exatamente a mesma estrutura que o seu todo. A melhor maneira de explicar esse conceito com um exemplo, o clculo de um fatoria!. A fnn ula para o fatori al de um valor (n !) n( n- I)(n-2) .. . (n-(n- I )( 1). Para um valor como I O, a fnn ula seria 10* 9 * 8 * 7 * 6 * 5 * 4 * 3 *

122

Dia 4

2 1 = 3628800. (Observe que o resultado bem grande com relao ao valor de n.) Essa frmula pode ser expressa com o uso de um lao For, como vemos na Listagem 4.22.
LISTAGEM

4.22

Factor; aI. vb

1 Public Class Factorial 2 Shared Sub Main{) 3 Oim sInput As String 4 Oim iInput As Integer 5 Oim iCounter As Integer 6 Oim iFactoria l As Integer
7 $ystem.Console.Write(UInsira um nmero: lO)

8
9

sInput " System.Console .ReadLine()


iInput " Clnt(sInput) iFactoria l " 1 Fo r iCounter " O to (iInput - 1) i Factori aI - (i Input - i Counter) * ; Factor i aI
Next i Counter

la
11 11 13

14
15

System.Console .WriteLine{iFactorial)
End $ub

16 End Class

NOTA

Quando experimentar esse programa, voc precisar manter o valor de seu teste (10 em nosso exemplo) menor ou igual a 12. Qualquer valor maior produzir um fa torial que exceder o tamanho mximo de uma varivel de inteiros (veja o Dia 3). Se tiver de dar suporte a va lores mais altos, use outros tipos de varivel como o longo.

No entanto, essa no a nica maneira de gerar um fatorialj que essa frmula tambm pode ser expressa como n * (n-l)!, ou seja, n multip licado pelo fatorial de n-1. Essa expresso define a frmula recursivamente; a soluo de um fatorial inclui outro fato ria!. Portanto, essa lima definio mais clara que a da frmula n(n-I )(n-2) ... (n-(n-I ( 1) e, se voc o escrever desse modo (veja a Listagem 4.23), produzir um cdigo que tambm ser mais simples do que a rotina correspondente da Listagem 4.22.
LISTAGEM

4.23

Recursivefactorial.vb

1 Public C lass Recursivefactorial Shared Sub Ma ln() 2 3 Dim sInput As String Dim ilnput As Integer 4

Controlando o Fluxo dos Programas

123

LISTAGEM 4.23

RecursiveFactoria l .vb

(continuao)

5
6 7

8 9 10
11

Dim iCounter As Integer Dim iFac toria l As Integer System . Console.Write("I nsira um nmero: U) sInput = System.Console.ReadLine{) iI nput = Cl nt{sInput) System.Console.Writeline(Factorial (ilnput End Sub Shared Function Factoria l (n as I nteger)as Integer If n Else lhen Return 1
= 1

12 13
14

15
16
17

18 Return n * Factori al (n-l) 19 End If 20 End Funct i on 21 22 'od C1 ass

o cdigo produzido pode no ser mais curto que o da Listagem 4.22, mas mais si mples e, s
por isso, esse um resultado vlido. Observe que na fun o Factori a 1 ( ), voc procura n =;= 1. Essa verifi cao assegura que as chamadas recursivas fin almente sejam encerradas, semelhante ao que se consegue com a condio de sada em um lao. Sem ela, como no lao, o programa nunca ter s ua execuo encerrada. A recurso pode ser usada para reso lver muitos problemas, e veremos cdigos que a empregam em sistemas de vrios tipos (e espero que voc escreva o seu).

Resumo
Nesta lio, examinamos as instrues de controle, a base de muitos dos programas de computador que voc criar no futuro. Com essas instrues, possvel comear a converter processos reais em programas, primeiro passando-os para pseudocdigo e, em seguida, usando esse recurso para gerar o cdigo real necessrio.

P&R
P Meu colega me disse que os laos hi 1e so melhores que os laos Do e que nunca devo usar o lao For! Que lao o melhor?
R Embora seja possvel usar apenas um lao em lodos os seus programas, no se ganha nada fazendo isso. No final , tudo que importa que se u cdigo seja o mai s claro e simples que puder. Empregue o lao que melhor resolver o problema . Em geral, o lao For

124

Di a 4

funciona melhor quando preciso uma quantidade fixa de iteraes; use um lao Do ou Wh i 1e quando esse no for o caso.

P As instrues If de uma linha so mais rpidas que a forma If ... End If?
R No. O compilador do Visual Basic converte as duas formas no mesmo res ultado, por~ tanto, no h diferena na velocidade de execuo desses dois formatos. A d iferena
principal est na facilidade de manuteno e leitura do cdigo.

P Em verses anteriores do Visual Basic c no Visual Basic for Application (VOA), usei uma forma da instruo lf chamada IllIl1ediate If I1F. Ela existe no Visual Basic .NET? R S im, existe. Mas s como elemento de um conjunto especial de objetos (Microsoft. VisualBasic), projetado para fomecer acesso instruo I I F e muitas outras partes da ltima verso do Visua l Basic que no existem mais no Visual Basic .NET. O fato de essas fun es no estarem embutidas na verso mais recente do Visual Basic pode sign ificar que elas rea lmente no estaro disponveis em futuras verses. A variante rIr uma forma muito til da instruo If; como funo, ela pode ser usada no meio de outra expresso, por exemplo, quando uma string exibi da. No entanto,j que as prximas verses do Vi suai Basic podem no inclu ir a instruo I IF, voc deve evitar seu uso se possvel.

Workshop
O Workshop foi planejado para ajudlo a anteci par possveis dvidas, revisar o quej aprendeu e comear a pensar em como colocar seu conheci mento em prtica. As respostas do teste esto no Apndice A, "Respostas dos Testes/Exerccios".

Teste
I. Qual dos trs mtodos de lao disponveis mais adequado para um intervalo fi xo de va lores? 2. Qual dos trs mtodos de lao o mais flexvel ? 3. Por que voc deve te ntar fazer com que o bloco de cdigo interno em um lao seja o ma is simpl es possvel? 4 . Suponhamos que voc tivesse a expresso booleana a seguir em seu programa: Ca 1cul atedTotalNetWorth(iCustomerIO) < 10000 ANO dtCurrentDate.Hour > 12. Oque poderia fazer ser fei to para assegurar que ela seja o mais efi ciente poss vel?

Co ntro land o o Flu xo dos Prog ramas

125

Exerccios
I. Escreva o inverso do programa NumberGuesser criado nesta lio - um programa com lim ites superior e inferior que tente determ inar que valor foi selecionado pelo usurio. Para cada palpite que o programa de computador gerar, voc ter de permitir ao usurio responder com " A" para muito alto, " B" para muito baixo ou = para correto. Se preferir usar o mtodo racional nos palpites de seu programa, ento, a quantidade mxima de tentati vas necessrias poder ser encontrada na resoluo dessa equao: (t-l >= Limite Superior - Limite Inferior) onde N a quantidade mxima de tentativas. Por exemp lo, em 1 um intervalo de I a 100, a equao resu ltaria em 7 porque 2" = 64 e 2 = 128.

SEMANA

DIA
Arquitetura dos Aplicativos na Plataforma .NET
No decorrer deste livro voc est aprendendo a usar o Visual Basic .NET para criar aplicativos, mas as questes mais importantes se encontram na fase de projeto do processo de desenvolvimento. Esta lio abordar
O que 'arqu itet ura do ap licativo' ?

Que opes de arqu itetura a plataforma .NET fornece? O que est envolvido na escolha de uma arquitetura de aplicativo?

Alm da abordagem de alto nvel desses tpicos, essa lio tambm inclui uma discusso de alguns cenrios e um estudo da determinao de arquiteturas para cada um de les.

o Que a Arquitetura do Aplicativo?


Anterior construo e muito antes de um prdio estar pronto para ser usado, um arquileto manipulou a fase do projeto. Depois que se obteve um consenso sobre sua concepo bsica, so criados esboos que mostram as particularidades do edifcio proposto com maior transparncia e formam a base do projeto detalhado que deve ser criado antes que qualquer trabalho de construo seja iniciado. No decorrer desse processo, no s no comeo, o arquiteto com toda a equipe do projeto, responsvel por produzir o resultado correto.

128

Dia 5

o conceito de arquiteto, tanto o profissional quanto os aspectos do projeto pelo qual ele responsvel, foi tomado emprestado pela indstria de desenvolvimento de softwares. A semelhana sugerida entre as duas reas no deve agradar aos verdadeiros arquitetos, e no os culpo por

ficarem incomodados. Se os prdios fossem construdos da mesma maneira que a ma ioria dos sistemas de software, ento, passaria o resto de meus dias vivendo a cu aberto. Muito do que est envolvido no desenvolvimento de softwares empresariais feito sem planejamento sufic iente, resu ltando em sistemas que so instve is, com manuteno difci l e quase sempre com um oramento muito alto.

Funo do Arquiteto de Softwares


Independentemente da apropriao do nome de uma profisso existente, as semelhanas podem ser traadas. Quando um edifcio est em fase de projeto, os arquitetos usam seu conhecimento avanado tanto da funo quanto do projeto para idealizar e planejar sua estrutura e fundao geral com base nos requisitos que forneceram a eles. Com os softwares, o mesmo processo ocorre. Um arquiteto de softwares (ou sistemas) desenvolve um planejamento para construir o sistema com base em requisitos. Nos dois casos, o planejamento no final se toma um projeto detalhado de como deve ser construdo, e outras equipes de profissionais se encarregam de manipu lar a implementao real. Embora algumas pessoas no consigam ver essa atividade como algo prximo complexidade do projeto e construo de um imenso arranha-cu, o desenvolv imento de softwares complicado, e a funo de um arquiteto de extrema necessidade em sistemas de quase todos os tamanhos. Independentemente da dimenso do aplicativo que voc estiver construindo ou de quo pequena for sua contribuio individua l para o sistema, uma arquitetura ter sido escolhida (talvez de modo informal) e estar sendo usada.

NO TA

Em projetos menores, possivel gerenciar sem um arquiteto, mas o que estar ocorrendo que voc (ou outro membro da equ ipe de desenvolvimento) ter informalmente assumido essa funo. O problema das pessoas que assumem a funo de projetista informalmente que a equipe no tem conscincia de quem o responsvel por nenhum dos aspectos especificos do projeto.

Voc pode ser um iniciante no Visual Basic ou tambm no desenvolvimento. Talvez no queira assumir o papel do arquiteto de sistemas no futuro prximo. Mas isso no altera a necessidade de compreender o processo e as decises sobre a arquitetura que sero tomadas em qualquer projeto com seu envolvimento. No ciclo de evoluo do desenvolvimento de softwares, a equipe inteira deve estar envolvida no processo integral, porm o arquiteto o principal condutor do planejamento nas fase s inicias da Definio/Escopo, Anlise das Necessidades e Projeto (veja a Figura 5. 1).

Arquitetura dos Aplicativos na Plataforma .NET

129

FIGURA 5.1

No ciclo de evolllao do desenvolvimento de sofiwal'es. a arqlli/elllra est ellvolvida prim:ipa{mellfe lias primeirasfses. em que o sistema projetado.

Depois dessas fases iniciais, o foco passa para a equipe de implementao (desenvolvedores de software) e, em seguida, para os grupos de implantao. O ideal que a pessoa que assumir a funo de arquiteto seja altamente experiente, com bastante conhecimento tcnico para avaliar todas as opes disponveis e habil idade operacional suficiente para interpretar com correo os requisitos do sistema. Em geral, o papel de arquiteto desempenhado por mem bros da categoria snior de um grupo de desenvolvimento.

Que Partes de um Sistema So Consideradas Arquitetura do Aplicativo?


Uma resposta breve para essa pergunta seria ' todas', mas ela muito abrangente para ser til . Os aspectos que envo lvem a arquitetura de um sistema so os ' grandes detalhes', como que tipo de interface com o cliente ser usada, se sero executados aplicativos Windows ou da Web e como o cdigo da pgina da Web se comunicar com o banco de dados de back-end. O aspecto principal que a arquitetura do sistema tem relao com a base e a estrutura do aplicativo, e no com as opes de implementao que sero selecionadas dentro dessa estrutura. O arquiteto, no entanto, ser envo lvido na fase de impl ementao, mesmo se parecer que todos os 'grandes detalhes' j foram determinados e s restaram os mais fcei s relacionados implementao. Ele continua engajado por duas razes principais: para veri ficar se a arquitetura escolhida provou ser a correta (fazendo os ajustes necessrios para lidar com os problemas que aparecerem) e para se cert ificar de que o projeto esteja sendo impl emcntado como foi plancjado. Pode ser difici l de acreditar, mas s vezes os desenvolvedores se desv iam do projeto de um sistema, produzindo resultados indesejados. Para responder a pergunta mais especificamente, em sistemas .NET, a arqu itetura deve fornecer urna viso geral de alto nvel de cada aspecto do apli cativo. O essencial o nvel de detalhes; a maioria dos itens discutidos na fase da arquitetura ser abordada novamente no projeto detalha-

130
1

Dia 5

do e na implementao. Por exemplo, parle da arquitetura do sistema pode ser uma discusso sobre segurana, e nesse nvel a declarao a segu ir poderia ser suficiente para abordar esse tpico: " O aplicativo basear suas perm isses de segurana nos usurios e em grupos do Windows 2000 j em uso na empresa". Essa declarao o bastante como ponto de partida; o prximo nve l se tornaria mais detalhado e poderia incluir informaes sobre que reas do aplicativo sero protegidas e a quem ser concedido acesso para cada rea especfica.
Na fase de implementao ou desenvolvimento, o programador teria de determ inar exatamente como encontrar o logon do grupo e do usurio do Windows, mas esses detalhes decerto no fazem parte da arquitetura do sistema. Embora ela aborde tudo em um nvel superior, as reas-chave a segui r devem ser reconhecidas como parte de qualquer arquitetura de aplicativo:

Distribuio tisica e lgica dos cdigos (que cdigo ser executado onde?) Tecnologias usadas na interface com o usurio, bancos de dados e lgica operacional Mtodo de comun icao entre componentes diferentes do sistema e entre esse e os outros sistemas da empresa Segurana Acesso aos dados Escalabilidade e dispon ibi lidade Cada uma dessas reas por si s importante, mas a arquitetura a comb inao de todos esses fatores em um projeto que funcion e como um todo. A finalidade de cada rea ser abordada nas sees seguintes.

Distribuio Lgica e Fsica dos Cdigos


No nvel da arquitelUra, as decises podem ser tomadas com base em uma organ izao pretend ida, penni lindo que os cdigos sejam categorizados em grupos como cdigo de acesso aos dados, cdigo de segurana, cdigo de intelface com o usurio e outros. Na real idade, qualquer diviso de cdigos depende de cada programador e do resto da equipe do projeto. Nada relacionado plataforma .NET (ou qualq uer outra ferramenta de desenvolvi mento) o forar a manter os cd igos agrupados de maneira organizada. No entanto, no deixe que a realidade o bloqueie; para as finalidades do projeto, importante categorizar os cd igos mesmo se essa organizao nunca existir efetivamente. O que deve ser deterrninado sobre esses grupos onde sero executados; sero todos processados como parle de um nico aplicativo em apenas uma mqu ina ou o cd igo de acesso aos dados ser executado em um servidor independente? Mai s frente nesta lio, abordarei o conceito de camadas, em que toda a funcionalidade de um aplicativo dividida de modo lgico. Essas camadas so, ento, tratadas como se fossem conj untos de cd igo independentes, os quais podem ser movidos vontade. As dec ises a respeito de onde executar cada camada de um aplicativo e de quantos serv idores sero usados para cada uma delas constituem esse elemento da arqu itetura do sistema.

A rqu itetura dos Aplicativos na Plat aforma .NET

131

Tecnologias
Uma das reas mais objetivas, esse elemento da arquitetura do sistema traa um esboo ' geral' das tecnologias que sero usadas. O segredo nessa rea disponibilizar informaes suficientes para ser til, enquanto detalhes que possam no ter sido detenninados ou sejam irrelevantes no nvel da arqu itetura devem ser evitados . Considere esses dois trechos (no se preocupe em compreender os detalhes, s existem para atender finalidad e do exemplo):
Exemplo 1:

A equipe do projeto desenvolver a interface com o us urio por meio do Visual Basic 6.0 (Serv ice Pack 5) e de um controle de grade Act iveX do Janus. Vrias janelas sero criadas, todas com menus, uma grade principal e diversos botes funcionais. Esses formulrios empregaro o DCOM para se conectarem com os servidores da camada intermediria, os quais executaro o Windows 2000 Advanced Server (Service Pack 2). Os servidores da camada intennediria hospedaro cinco componentes dentro do ambiente de serv ios do componente do COM+ do Windows 2000. Esses componentes operacionais sero DLLs do COM, construdas com o uso do Visual Basic 6.0 (Serv ice Pack 5) e com suas propriedades configuradas como Publ ic. Cada componente ser composto de ...
Exemplo 2:

A interface com o usurio ser baseada em formulr ios e usar o DCOM para se comunicar com a camada intermed iria. Dentro dessa camada, os objetos operacionais do COM tero sido instalados no COM+ e manipularo a comunicao com a camada de dados. O ADO ser empregado para conectar a camada intermediria COm os dados de back-end, e todas as informaes sero retornadas para a camada de apresentao depois de passarem pela comercial. Embora o Exemplo I tenha sido interrompido, na verdade ele no estava nem perto de ser concludo e ainda tinha de transmitir tantas infonnaes teis quanto o Exemplo 2. O segredo se lembrar sempre do pr incipal , que consegui r descrever a arquitetura. A inda falta m o projeto detalhado e as fases da implementao para manipu lar a entrada nesse nivel de particularidades. Outra regra interessante nunca passar muito tempo discut indo tecnologias especficas. Tente se concentrar e s discutir a tecnologia em termos do que ela trar para esse projeto.

Comunicao entre Componentes


Se voc estiver desenvolvendo um sistema distribudo, para ser executado em vrias mquinas, ento, alguma forma de comunicao precisa exisl'ir entre os diversos componentes. H muitas opes diferentes, mas no nve l da arquitetura, s preciso ser especfico com detalhes quej forem definitivos ou relevantes devido a algum outro aspecto do projeto. Nessa rea, pode ser necessrio definir o protocolo de comunicao se ti vermos de nos conectar com outro sistema ou se os detalhes tcnicos forem cruciais para um projeto paralelo como a configurao da

132
1

Dia 5

redelfirewall. A platafonna .NET fornece vrias opes diferentes para esse tipo de comunicao
incluindo o SOAP.

Segurana
Um ttulo indefinido para uma rea vaga, a segurana um tpico que deve ser considerado apenas porque toda d iscusso acaba por abord-lo e permanece a se ele j no tiver sido detalhado. A arqu itetura deve detalhar como a segurana ser proporcionada (usando o Windows 2000 Acli ve Direclory, por exemplo) e conceituaImente como ser implementada ("as opes de interface ficaro ocultas" ou "a segurana ser verificada a cada pgina/formulrio"). necessrio

detalhar exatamente como os programadores implementaro esses recursos.


Acesso aos Dados
Que reas de cd igo acessaro os dados? Como fa ro isso? Esta seo detalha como o ap li cativo se conectar aos dados (provedor OLEDB usando a segurana do SQL Server, por exemplo). Questes mais complexas, como o projeto e a organizao do banco de dados efetivo, so mais bem defi nidas na fase do projeto detalhado ou como parte da implementao final.

Escalabilidade e disponibilidade
Esses so dois tpicos importantes e complexos e uma das principais razes pela qual a arquitetma dos aplicativos recebe tanta ateno. Eles esto re lacionados de mu itas manei ras: as tcnicas e a arquitetura usada para fornecer um servio em geral so utilizadas para disponibilizar o outro. A escalabilidade descreve a capacidade de um sistema de manipular cargas ma iores, fornecendo o mesmo nvel de servio (tempos de resposta, quanti dade de solici taes por segundo e assim por diante) por meio de um incremento no hardware. Lembre-se de que essa no uma medida de desempenho; um sistema pode scr cscalonvcl e tcr um pssimo desempenho. Como assegurar que um apl icativo possa ter uma boa escalabilidade est alm do escopo desta lio e deste livro, mas um link para outros recursos ser fornecido no final deste captulo caso voc esteja interessado em uma abordagem mai s profunda desse tpico. A disponibilidade uma medida que avalia com que freqncia o sistcma est em execuo e pode processar so licitaes. Agora que os apl icativos da Web com interface pbl ica esto sendo desenvolvidos, a necessidade de sistemas que estejam sempre disponveis est sendo difundida. Em geral esse conceito descrito como ' tem po de funcionamento' e em termos da quantidade de 'algarismos nove' existentes na medida de dispon ibi Iidade que um sistema tem fornecido. O termo 'algarismos nove' sc rcfere ao tempo de func ionamento de 99% (dois algarismos nove), 99,9% (trs algari smos nove) ou maior que um sistema possui . Enq uanto redigia esta seo, alguns sistemas de uso comercial foram registrados com um tempo de fu nc ionamento igual a cinco algarismos nove (99,999%). Em termos prticos, um site com um tempo de funcionamento de ci nco algarismos nove tcria cstado inativo por somentc ci nco minutos em um ano inteiro (24 horas por dia, 7 dias por scmana). Isso quase parece ridculo, e excede muito meu tempo ativo no

Arqu itetura dos Aplicativos na Plataforma .NET

133

trabalho, mas se voc estiver executando um site como o Amazon.com , ento, ficar inativo de alguma mane ira pelo espao de tempo que for inaceitvel. Criar um sistema com esse nvel de disponibi lidade uma combinao de projeto e processo. Do ponto de vista do projeto, o sistema deve estar completamente a salvo de estouros de memria ou outras falhas que impediriam o uso cont nuo e deve poder ser executado em vrias Qlltras mq uinas, j que m ltiplos grupos de hardware tm de ser usados para fornecer redundncia. Do ponto de vista do processo, no entanto, tudo ainda mais comp lexo. Por exemplo, atual izaes de software tero de ser feitas de maneira seqencial para que o conjunto de servidores nunca fique integralmente inativo. As discusses sobre o tempo de funcionamento em geral se concentram no sistema operacional ou na tecnologia especfica do servidor de banco de dados Iservidorde componentes/servidor Web em uso, sugerindo, digamos, que o Windows 2000 fornece uma certa quantidade de algarismos nove de tempo de funcionamento. Essa no uma discusso realista. O sistema operacional ou o servidor do banco de dados s uma parte do sistema, e tudo causa impacto na sua capacidade de manter uma disponibilidade alta.

Arquiteturas Viveis na Plataforma .NET


No h uma quantidade fixa definida para as arquiteturas que podem ser desenvolvidas - todas as opes diferentes poderiam ser combinadas para produzir um universo dc variaes - , mas existem certas arquileturas generalizadas dentro das quais a maioria dos sistemas .NET falharia.

Os Trs Elementos de Qualquer Aplicativo


As di ferenas entre todas as arquiteturas possveis residem em como as trs camadas di stintas de um sistema de computador so distribudas. Essas trs camadas so li stadas aqui , junto a uma descrio breve: Apresentao Esta camada representa a interface com o usurio e Olltros sistemas, o aspecto fisico pblico do sistema. Lgica Operac ional Todo os cdigos que no estejam envolvidos, em particular, na criao da interface com o usurio ou outros aspectos da camada de apresentao. Esta camada representa o ncleo do aplicat ivo, o cdigo que realmente faz o trabalho do sistema. Dados O banco de dados (ou outra fonte de dados como a XML) e o cdigo que o acessa so considerados a camada de dados. Essas trs camadas so a representao lgica de um sistema completo, mas esse pode assum ir vrias formas: um n ico programa executvel, componentes distribudos na quant idade de servidores que se desejar, ou um simples site da Web. Independentemente do aplicativo em particular, til descrever todos os sistemas com relao a essas trs camadas.

134

Dia 5

Quantas Camadas?
Uma das maneiras mai s comuns pelas quais as arquiteturas de aplicativos tm sido descritas em termos da quantidade de mquinas diferentes que executam partes do sistema. A arquitetura mais simples apresentada como um sistema de camada nica, em que o programa (apresentao, lgica operacional e dados) est todo em uma mquina. Essa a arquiteturaempregada pela maioria dos aplicativos comerciais como o Microsoft Office e muitos softwares empresariais projetados para serem usados por alguns usurios ao mesmo tempo. S as mquinas que executarem alguma forma de processamento so importantes. Um programa em que os arquivos de dados estejam localizados em um servidor de arquivos tambm considerado um aplicativo de camada lInica porque todo o trabalho efetivo feito em uma mquina, e o servidor de arquivos apenas fornece um local na rede para armazenar dados.
Por outro lado, quando um servidor de banco de dados (como o SQL Server ou o Oracle) usado, ento, e le considerado uma segunda camada porque realmente executa um processamento. Os sistemas que possuem um software cliente (em geral na mquina de mais de uma pessoa) que se conecta de modo direto com um banco de dados de back-end so chamados de aplicativos de duas camadas ou cliente/servidor. A arquitetura cliente/servidor comum nos aplicativos empresariais. Ela permite que muitos usurios trabalhem com o mesmo conj unto de dados enquanto fornece um desempenho muito melhor do que um sistema com base em arquivos, como o Microsoft Access. Para concluir, a forma mais recente de arquitetura de aplicativo chamada de trs camadas ou vrias camadas e descreve sistemas em que o cdigo executado em trs ou mai s sees distintas. A diviso lgica de um sistema desses tambm composta de trs camadas, mas o layout fisico pode exceder trs grupos distintos. Em geral, isso significa que algum tipo de cdigo cliente, como um site interativo da Web ou talvez um aplicativo Windows, que chama um cdigo executado em outro servidor ou conjunto de servidores para mani pu lar a lgica operacional , e um banco de dados de back-end esto sendo usados. Essa arquitetura est se tornando mais popular porque fornece muita flexibil idade para a manipulao de diversos usurios e, portanto, bem adequada para aplicativos com base na Internet. H vrias maneiras tcnicas diferentes de criar aplicativos de trs camadas, mas o mtodo recomendado pela Microsoft antes da plataforma .NET se tornar di sponvel era chamado de Windows DNA .

Windows DNA
O Windows Distributed Network Architecture (ou Distributed interNet Architecture, dependendo de onde voc encontrar sua definio), o conjunto de tecnologias e diretrizes da Microsoft anteriores plataforma .NET para criao de sistemas de trs camadas. Com base na idia geral de que todo aplicat ivo pode ser dividido em trs camadas, de Apresentao, Lgica Operacional e Dados, o Windows DNA esboou a ' melhor' maneira de desenvolver sistemas distribudos. Em um aplicativo Windows DNA, o cdigo-cliente era executado como um aplicativo Windows padro ou como uma interface da Web criada com o Active Server Pages. O cdigo-cliente con-

Arquitetura dos Aplicativos na Plataforma .NET

135

tinha apenas a lgica relacionada interface e acessava toda a operacional chamando componentes do COM localizados localmente ou em outro servidor, componentes que, ento, se encarregariam de interagir com o banco de dados. Um princpio essencial do modelo Windows DNA para desenvolvimento de aplicativos que tudo fl ui atravs de trs camadas, de modo que a camada de apresentao se comunica apenas com os objetos operacionais, e esses manipulam toda a com unicao com o banco de dados. A camada de apresentao nu nca acessa diretamente o banco de dados e, portanto, as t rs camadas so abstratas, o que proporciona a possibilidade de alternar o banco de dados sem que sej a preciso reescrever toda a interface com o usurio, ou criar uma interface totalmente nova sem ser necessrio alterar a camada operacional a lIO banco de dados. A flexibilidade obtida nesse modelo mais do que compensa qualquer trabalho adicional envolvido para assegurar que as trs camadas sejam apropriadamente independentes. Agora, embora o modelo Windows DNA seja bem detal hado, a impl ementao real pode ter uma entre vrias configuraes diferentes. Em um caso, o ap licativo poderia executar tudo em um servidor, com o Acti ve Server Pages (interface da Web) se comunicando com os componentes (provavelmente escritos em Visual Basic 6.0), que, por sua vez, funci onariam com uma instalao local do SQL Server. Apenas uma mquina usada, mas as trs camadas ainda so distintas, e o modelo Windows DNA mant ido. De modo alternati vo, o mode lo tambm pode ser expandido para quantas mq uinas fo rem necessrias a fim de man ipu lar a carga do sistema. Um sistema possvel poderia empregar um grupo de 20 servidores Web, todos atendendo ao Acti ve Server Pages, que se conectaria a um agrupamento de mquinas com bal anceamento de carga executando o mesmo conj unto de com ponen tes do COM, que, por sua vez, acessariam um par de servidores processando o SQL Server em uma configurao de grupo. Apesar da implementao em escala muito maior, o mesmo modelo est sendo adotado, o que demonstra a flex ibilidade e escalabilidade do Windows DNA de trs camadas que o tornou to popu lar.

Onde a Plataforma .NET Se Encaixa?


A plataforma .NET uma mudana radical no desenvolvimento, mas podem ser aplicados a e la os mesmos conceitos gerais de arquilet ura. Muitos sistemas .NET seguem os modelos e exemplos di scutidos anteriormente e podem ser classificados como de somente uma camada, cliente/servidor ou at como aplicativos Wi ndows. A tecnologia pode mudar (AS P. NET em vez de ASP, classes .NET em vez de objetos do COM e assi m por diante), mas a arquitet ura ainda a mesma. No entanto, a lg umas outras opes esto disponvei s para aprimorar a arquitelura do Windows DNA quando a platafo rma .NET for usada. O primeiro conceito novo envolve a comun icao entre as camadas. No Windows DNA tradicional, as pginas da Web se comunicavam com os objetos operacionais do COM usando o DCOM (Distributed COM), que um padro binrio usado para ligar todos os aplicati vos con fi gurados para COM atravs de uma conexo de rede . A abstrao entre as camadas li mitada por esse mtodo de comunicao porque s possvel empregar as tecnologias que podem usar o

Dia 5

COM nas camadas de apresentao e operacional. No Windows DNA convencional, voc poderia reescrever seus objetos operacionais sem ter de alterar a camada de apresentao ou de dados, mas apenas se estivesse utilizando uma linguagem compat vel com o COM (em geral o Visual Basic ou o VC++). A plataforma .NET introduz uma nova mane ira de comunicao que pode permitir a abstrao real entre as camadas, o SOA P (Simple Object Access Protocol). A comun icao do SOAP Ioda feita com o uso da XML, em vez de um fo rmato binrio, e executada antes do conhecido protocolo HITP. Para o desenvolv imento de ap licativos distribudos, isso significa que qualquer linguagem/ferramenta poderia ser usada para criar as camadas do sistema. Seria possvel que os componentes j existentes em sua empresa estivessem escritos em Java, que poderia fornecer a camada de apresentao do sistema, enquanto o front-end estaria na plataforma .NET usando o AS P.NET ou um ap licativo Windows . A verso .NET do Windows DNA at me lhor do que antes quando ele empregava o conjunto antigo de tec nologia para desenvolvimento.

Escolhendo uma Tecnologia de Cliente


Uma das escolhas mais polmicas quando se projeta um sistema que tipo de cliente ser criado, que em geral uma discusso sobre a possibi lidade de do t ipo'thick' ou do t ipo 'thin'. As principais opes na platafonna .NET so as mesmas que j esto disponveis por algum tempo, ASP.NET para criar um aplicativo da Web ou Windows Forms (Fonnu lriosou Aplicativos Windows) para gerar um aplicativo Windows. O segredo determinar qual mais adequada para um sistema ou projeto especfico . As sees a seguir descrevem as duas tecnologias, abordando seus benefcios e problemas. Posso fornece r a voc lima regra simples para informar que tecnologia usar em qual situao? No, mas ainda nesta lio, disponibilizarei uma lista geral de perguntas que pode ser usada para ajudar a tomar vrias decises sobre a arquitetura, inclu indo que tipo de cliente usar.

Sistemas de cliente do Tipo 'Thin' (ASP.NET)


As Aclive Server Pages so desenvolvidas com o uso das linguagens .NET padro (como o Vis ual Basic.NET) e so projetadas para processar solicitaes recebidas de usurios e retornar o resu ltado apropriada em seus navegadores. O cdigo que voc escrever para urna pgina ASP.NET ser executado no servidor Web, e no no cliente, que o ponto mais importante quando se compara esse tipo de interface com qualquer outra. O ASP.NET no possui nenhum requisito de cliente alm do acesso rede e alguma forma de navegador. Podem ser desenvo lvidas pginas AS P.NET que exibam um contedo HTML mais sofisticado e que term ine com uma sada que precise da maior e mais recente verso do Internet Explorer, mas essa urna opo exclusivamente sua. Tambm possvel escrever as pginas da Web de modo que elas retornem o contedo HTML mais simples j visto, permi tindo que at o primitivo navegador Mosaic consiga visualiz- Ias. O sistema operac ional do cliente tambm no um problema. Exatamenle como na Web. suas pginas podem ser visualizadas de qualquer plataforma em que a Internet esteja disponvel.

Arqu itetura dos Aplicativos na Plataforma .NET

137

Continuando nessa mesma linha de raciocnio, a falta de requisitos de cliente significa que para seu apli cativo ser executado, nada (alm do requ isito bsico de um navegador da Web de algum tipo) precisa ser instalado no computador do usurio. Quando voc atualizar seu site, alterando as pginas armazenadas em seu servidor, o prximo usurio a acess-lo ver a nova verso, e nenhum outro problema relac ionado atualizao ou distribuio. Todos esses beneficios que resultam da falta de requisitos de cliente tomam a escolha de uma interface da Web relativamente fcil , exceto por dois pontos: A expe rincia que o usurio tem com um navegador da Web ainda no to boa quanto com um aplicativo Windows. Considere alguns dos ap licativos Windows que voc tem util izado, como o Microsoft Office, o Visual Studio .NET, o Adobe Photoshop e outros, e perceber que quase nada na Web chega prx imo do nve l da interface com o usurio. possvel produzir uma interface na Web que seja semelhante, mas o trabalho necessrio ser muito maior se compararmos com um aplicat ivo Windows. Um aplicativo AS P.NET em geral s func iona quando o usurio est conectado e seus recursos so afetados pela ve locidade dessa conexo.

Alguns itens apenas no funcionam em um sistema com base na Web, como uma experincia o ff-tine igualmente funcional e satisfatria. Por exem pio, o Outlook capaz de funcionar on-line ou off-l ine, mas sua contrapartida na Web, o Outtook Web Access, no possui nenhuma funcionalidade off-li ne. Um programa projetado para trabalhar com arquivos ou outros aspectos 'locais' de seu sistema no ter um desempenho to bom se transferido para urna interface com o us urio com base na Web. Concluindo, dificil encontrar razes contra o uso de uma interface da Web, e h muitas vantagens em desenvolver um sistema dessa maneira.

Aplicativos Windows (Windows Formsl


Em geral, difici l explicar o que quero dizer com 'aplicat ivo Windows' porque esse o nico tipo de aplicativo que a maioria das pessoas j viu. Basicamente, um ap licativo Windows algo que voc pode criar usando uma combinao dejanelase caixas de dilogo para ser executado na plataforrna Windows. Quase todos os aplicativos que estamos acostumados a utilizar - o M icrosoft Oftice, o Quicken e at o Solitai re - so exemplos do que pode ser desenvol vido com o uso dos recursos do Windows Forms da plataforma .NET. Depois de ler a seo anterior sobre o ASP.NET, voc pode estar se perguntando por que no usar sempre uma interface da Web, e no o nico. Um aplicativo do Windows Fonn s possu i alguns requi sitos para a mquina cliente:

o .NET Framework deve se r instalado no cl iente, enquanto no caso do ASP.NET, s necessrio no servidor Web. O Framework s executado em platafonnas Windows. Seu aplicativo deve ser instalado.

138

Dia 5

Atualizar seu aplicat ivo em geral significa lidar com todos os microcomputadores de alguma maneira (ferramentas automatizadas ou opes de download de rotinas ou drivers especficos podem eliminar um pouco desse esforo).

A dependncia da mquina-c li ente possui um efe ito colateral perni cioso quando se est li dando com aplicativos pblicos; o desempenho de seu aplicativo depender de uma mquina sobre a qual voc no tem nenhum controle. Todos esses requisitos fazem parecer que a opo entre cliente do tipo 'thick' (mais robusto) e do tipo ' thin ' (mais simples) no absolutamente uma tomada de deciso. Na verdade, contudo, ainda h vrias vantagens interessantes nos ap li cativos do Windows Forms que valem a pena mencionar. A primeira grande vantagem que o desenvolvedor que usar o Windows Forms poder criar interfaces com o usurio completas e funcionais e ser possvel faz-lo muito mais rpido do que com o ASP.NET. Apesar de todos os avanos na tecnologia da Web, ainda mais difcil gerar lima interface complexa nesse local do que no Windows.

NOTA

Muitos desenvolvedores da Web no concordariam com m eus comentrios de que o ASP.NET ma is difcil de usar no desenvolvimento do que o Windows Forms, mas apesar das diversas virtudes que apresenta, a que ele se torna compl icado.

Urna segunda vantagem est no desempenho da interface eom o usurio, uma interface do Windows em geral responde melhor (responde mais rpido aos cliques e oulras aes do usurio). Para conc luir, a ltima vantagem em usara Windows Forrns que h aqueles itens (uso off- line, processamento mais rpido de objetos locais, como por exemplo, arquivos) que simplesmente no podem ser realizados na Web.

NOTA

Com o uso do Dynamic HTML, controles ActiveX e outras tecnologias mais complexas da Web possvel melhorar algumas das questes descritas anteriormente. Ao fazer isso, no entanto, algumas vantagens do ASP.NET sero perdidas j que voc estar criando um aplicativo com suporte restrito s plataformas (os controles ActiveX s so executados em certos sistemas operacionais e processado res, e o Dynamic HT ML no tem suporte em qualquer navegador) e que pode at ter alguns requisi t os de implantao .

Decidindo Que Arquitetura Usar


Tomar uma deciso efetiva quanto arquitetura, mesmo antes das alteraes especficas do aplicativo serem feitas , decerto valer a pena independentemente de quanto voc precisar pagar para um desenvo lvedor de sistemas experiente. Se tomar adec iso errada nesse momento, todo o pro-

Arqu itetura dos Aplicativos na Plataforma .NET

139

jeto pode estar fadado falha. claro que os erros sempre podero ser corrigidos, mas nesse caso, muito trabalho poderia ser eliminado se uma nova arquitetura precisasse ser selecionada.

Fatores Essenciais Que Influenciaro Sua Deciso

o fator mai s importante na esco lha da melhor arquitetura so os requisitos do sistema. Esses detalhes, obtidos com os Ideres operacionais do projeto e seus futuros usurios, devem especificar minuciosamente o que o sislema precisa fazer . Aps conhec-los, o segredo ser projetar um sistema que possa manipular essas necess idades. Voc pode analisar um resumo dos requisitos de sistemas na seo " Exemplos de Cenrios" para ter uma percepo dessa tomada de decises, mas primeiro fornecerei um conjunto de perguntas para serem formuladas quando for interpretar os requisitos ou examinar um grupo j existente deles.

NOTA

Com base em minha experincia, e por ter observado a de outras pessoas que no foi mu ito agradvel, recomendo nunca desenvolver um sistema (ou pro jetar estimativas ao desenvolver um) com base nos requisitos interpretados pelos outros. Por outros quero dizer algum que no seja voc ou um membro de sua equipe em cujo trabalho confie. Requisitos incorretos em geral resu ltam em um sistema inadequado e terminaro defin itivamente em uma estimativa invl ida . Depois de ocorrido, culpar os requisitos fornecidos no ir ajudar, portanto, certifique-se de que voc ou um membro de sua equipe est eja envolvido na documentao deles. Se isso no for possivel, ento, estabelea um tempo maior a seu projeto para revisar a anl ise dos requisitos existentes e para examinar qualquer parte obscura pesquisandO diretament e a fonte (o pessoal operacional por trs do projeto, os usurios ou mesmo um sistema anterior que executasse as mesmas aes).

Plataforma Cliente
Como parte de seu planejamento, voc precisa saber alguns detalhes sobre a plataforma em que seu sistema ser executado:
o

Que sistemas operac ionais esto instalados nos sistemas de destino? Quais so as especificaes de hardware das mquinas de destino (CPU/RAM/espao em disco)? Qual o nvel de controle que a empresa tem sobre as mqui nas de deslino? Ela controla a configurao, a instalao do software e a proteo contra vrus? So lues extremas para essas questes seriam um serv idor s para terminais burros em urna extremidade e computadores pblicos de propriedade dos usurios na OUlra. Algum dos computadores clientes um laptop? O acesso off- line ou remoto necessrio? Sero precisos servios de discagem ou eles j existem?

140
1

Di a 5

Rede
Muitas opes relacionadas arquitetura, corno o tipo de c li ente, a repl icao de bancos de dados e o protocolo usado dependem da rede em que o sistema ser executado:

Qual a velocidade de comunicao disponvel entre os usurios e os servidores de back-end (ou o que estar d isponvel, se os servidores de back-end ainda no existirem)7 Os servios de acesso remoto sero necessrios e/ou fornecidos? VPN? Dial -up? Os computadores-cliente tm acesso Internei?
H algum software/hardware de firewall entre os usurios e os servidores de back-cnd?

Que tipo (TC P/IP, IPX, NetBEU I c outros) de rede est em uso?

Segurana
Todo sistema precisa ter pelo menos algumas especificaes de segurana; mesmo um aplicat ivo no protegido deve possuir uma declarao de que foi projetado dessa maneira. Uma informao essenc ial que preci sa ser detenn inada, mas que no fc il de converter em uma si mples pergunta, qual o nvel de im portncia que ser dado segurana do apl icat ivo e seus dados? Tanto um s istema fin anceiro quanto um que registre a pontuao em jogos de golfe consideram a segurana, mas o grau de preocupao provavelmente ser um pouco mai s alto em um deles. A lm dessa parcela da informao, as perguntas a seguir sero pontos de partida te is na determinao das necessidades de segurana do apl icativo:
Corno os us urios sero autenticados na rede existente? As mqui nas clientes pertencem a um domn io do Windows 20001NT? Se pblico, o acesso ser annimo ou os usurios tero de se ident ificar? Esse aplicativo ser responsvel por alteraes na senha ou pelo gerenciamento de outros recursos de segura na? Os us urios te ro diferentes nveis de acesso, possivelmente com restries para os recursos do aplicativo que podero usar?

Outras Consideraes
Outros fatore s essenciais no desenvolvimento de uma arquitetura sero li stados aq ui , porm , nessas reas que o nvel de experinc ia do desenvolvedortem a maior importncia. Com relao a esses pontos, no h respostas defi niti vas. mais uma questo de conseguir informaes su fi cientes a fim de inclu-las no planejamento da arquitetura. Velocidade das alteraes na lgica operacional- Se a lgica operacional que conduz o s istema se alterar rapidamente, isso afetar a freqncia com que o cl iente em um sistema cl ieme/servidor teria de ser atual izado . Alteraes maiores na lgica operacional decerto precisariam at mesmo de um a atualiz.:'lo tambm do cliente. Conjunto de habil idades da equipe de desenvolvimento- Algumas formas de desenvolvimento so mai s complexas e, portanto, mais dificei s do que outras. Na maioria dos casos,

Arqu itetura dos Aplicativos na Plataforma .NET

141

um sistema cliente/servidor mais simples de escrever do que um completo com trs camadas. Quando escolher uma arquitetura, voc poder tentar desenvolv-la de acordo com o nvel de habi lidade da equipe ou basear a aptido necessria na arquitetura se lecionada. Requisitos/planos futuros - Ao desenvolver a arquitetura para um sistema, voc ter de enxergar a lm dos requisi tos al uais e consideraras de amanh. No mnimo, mesmo se no tiver informaes sobre quais sero os planos futuros, desenvolva um sistema que possa ser aprimorado. Se j souber os detalhes especficos, documente-os em seus requisitos e projete de modo apropriado. Como exemplo desse tipo de infonnaes, imagine um sistema planejado para ser usado por duas pessoas, mas que ser aberto para a comunidade da Web em alguns meses.

Exemplos de Cenrios
As discusses anteriores sobre os falares essenciais se concentraram no que voc precisa apreender durante a fase de anlise dos requ isitos, mas isso na verdade envolve exam inar vrias descries cam estilo de narrat iva e tentar decifrar as informaes que elas contm. Nesta seo, mostrarei alguns exemplos breves de requis itos de sistema e as informaes sobre a arquitetura que podem ser obt idas por meio deles.

Sistema de uma Videolocadora


Narrativa dos Requisitos:

"Uma cadeia de videolocadoras precisa de um novo sistema para rastrear as fitas, os clientes e as locaes. Todos os locais atualmente esto conectados ao escritrio central por meio de modems. Cada loja possui um ou mais computadores agindo como term inais de ponto-de-venda. Os computadores so novos, com placas Pentium II. Os dados sobre as Vendas/Clientes/Vdeos de cada loja no precisam estar disponveis no escritrio central em tempo real; o sistema atual executa noite alguns comandos em lote que transmitem os dados para o escritrio central, que em geral so s uficientes para os propsitos da loja."
Discuss o

Esse um cenrio bem COmum - mltiplos locais ou filiais executando a entrada de dados, e um escritrio central que deseja ser atualizado regu larmente cam os dados desses locais (veja a Figura 5.2). As mquinas no local cliente parecem (de acordo com essa breve di scusso) serde um padro comum e bastante novas de modo que um aplicativo do Windows Forms uma possib ilidade, e um do ASP.NET sempre ser uma opo. Nesse caso, o fator decisivo terminar sendo a declarao que diz que a atual izao noturna dos dados atender. Cam esse comentrio e uma conexo relativamente lenta retornando para o escritrio central, eu consideraria um sistema em que os dados ficariam armazenados nesse escritrio e seriam replicados para cada local durante perodos lentos ou noite, depois que cada loja fechasse.

142

Dia 5

Os sistemas para cada loja seriam aplicat ivos do Windows Form s, eliminando, assim , a necessidade de um servidor Web. Um banco de dados local de algum tipo (MSDE ou Access) seria instalado em cada loja, e uma carga programada desses dados seria enviada para o escritrio centra l toda noite. Se, em vez disso, fosse usado um banco de dados centra l, com todos os escritrios executando o seu trabalho atravs de uma conexo dial-up, proporcionaramos a vantagem de ter os dados de todas as lojas disponveis e alualizados no escritrio central, mas o desempenho de lima conexo via modem provave lmente seria um prob lema. Um front-end com base na Web que desse suporte a funes que uma videolocadora em geral precisa (seria necessrio pesq uisarmos mais para determinar isso), corno a impresso de recibos e talvez cartes de associados, seria difcil de criar.

FIGURA

5.2
Dados Escritrio Central Dados da Filial

A l'id&olocadOrll possui lima arquir&IUra COII/IIn1. COII/ IIII/ilas filiais se coneclando (I 1/11/ escritrio cel/lral. A decis{io !Jrincipal se o clienle deve se cOllectar dire/amel/le ao escritrio celllral ou usar algum lipo de depsito de dados local.

Escritrio da Filial

Dados

Dados

Acesso Pblico
Considere o que seria diferente se a Iinha a seguir fosse includa nos requis itos da videolocadora: " Por fi m, esperamos criar um site da Web pblico para nossos clientes, no qual eles podero procurar filme s e verificar se um certo film e existe em estoque em uma loja especfica." Essa declarao provoca mais alteraes do que voc pode imaginar. Como um ' requisito futuro', poderamos apenas ignor-lo e projetar o sistema com base no resto da informao. Isso produziria um sistema que teria de ser redefinido logo que a empresa passasse para a prxima etapa de seus planos. Em vez d isso, prefervel tentar desenvolver uma arquilelura q ue aborde os planos atua is e possa manipular os requisitos futuros.

Arquitetura dos Aplicativos na Plataforma .NET

143

Sem enlramos em muitos detalhes, porque voc com certeza iria precisar colelar mais informaes sobre os planos futu ros a fim de criar uma arquitetura adequada para o si te pblico da Web, considere as alteraes bsicas que seriam necessrias (veja a Figura 5.3 ). O comentrio sobre "alguns comandos em lote transmitem os dados para o escritrio central toda noite" de certo j incorreto. Se o site da Web disponibil izasse informaes sobre os filmes, mas estivesse atrasado em um dia, no seria to til! No necessri o obter as informaes em tempo real, mas um atraso aceitve l teria de ser determi nado (talvez 15 minutos) . Se o tempo de espera planejado no for to curto, ento, talvez o sistema tambm possa ser projetado com um armazenamento de dados loca l e atualizaes em lote. Para um sistema de computador, 15 minutos muito tempo, e seria preciso uma largura de banda muito menor do que em uma conexo contnua. Com esse novo requisito, um apli cativo da Web parece mais adequado porque todos os dados seriam armazenados no escritrio central e alguns cdigos poderiam ser compartilhados entre os dois sistemas. Mas um site da Web no teria um nve l de resposta to bom quanto um aplicat ivo do Windows Forms com o armazenamento de dados no local da loja.

FIGURA 5 .3

A deciso de ler 11m sile pblico da "'eb allerou a ar{fuilelura da I'ideolocadora para asseguror qlle os dados do escritrio celllral fiquem alllali=ados.

( \.~ ,-+~ .
(

~ -

Dados

Escritrio . - : _ da Filial ~

Central

\. ' ~--?::~. " Escritrio


da Filial

Escritrio da Filial

Internet

{\.~
Escritri o da Filial
~

l\.;;f}
Escri trio da Filial

da FilTal da Filial

Servio de Listagens Imobilirias


Narrativa dos Requisitos:

"U ma grande empresa imobi liria, de abrangncia nacional, deseja informatizar suas li stagens de imveis. Os corretores adicionariam as listagens direlamente a um sistema de computador, e um site pblico da Web seria disponibilizado para os clientes pesquisarem as que estivessem dispon veis e enviarem mensagens para os corretores apropriados. Esses precisariam do servio de li stagens, assim como de um recurso para inserir listagens novas, e acessariam os doi s de se us

144

Dia 5

laptops. J que esses corretores em geral esto viajando durante todo o dia, eles usam seus lap tops re motamente a maior parte do tempo."
Discusso:

Dada a descrio anterior, voc poder extrair alguns elementos essenciais logo de imed iato. Haver um site da Web, que j est defi nido, pelo menos com relao interface com o pblico. A questo "como manipu lar a interao com os corretores". Eles tm de poder acessar e ai nda adicionar, atualizar e excluir as listagens que inseriram no servio, tudo enquanto viajam o dia inteiro. Poderamos sincroniz-los com o sistema quando estivessem no escritrio, fazer o download das listagens em suas mquinas e carregar qualquer listagem nova que tivessem acres, centado. E provvel , no entanto, que eles s passem pelo escritrio ocasionalm ente e, portanto, lima nova li stagem no chegaria a eles ou suas listagens novas no seriam carregadas por cerca de um dia. Isso aceitve l? Talvez, preci samos de mais informaes.
De modo alternativo, os corretores poderiam usar modems sem fio (com a tecnologia dos cel ulares, como o COMA), que poderiam conect- los ao escritrio central ou Internet de qualquer locaI. Por meio dessa opo, voc agora teria duas escolhas: continuar ut ili zando o ap li cativo off-li ne, porm executando sua sincronizao atravs de uma conexo sem fi o (resultando em atualizaes mai s freqentes) ou desenvolver o recurso adicionar/editar/excluir em uma parte segura do site pbl ico da Web da agncia imobi l iria, ht tp : j jwww . nomedos;te.com . brjagentes, que os agentes acessariam com um navegador comum pelo modem celular. Devido baixa velocidade (atual) desses modems celu lares, gostaria de considerar as duas opes e executar alguns testes, mas o site pblico poderia ser iniciado sem espera. Como voc pode ver, a arquitetura do aplicativo no um conceito definitivo, principalmente quando se lida s com uma quantidade li mitada de informaes sobre a situao. Em geral, preciso sol icitar todos os requisitos possveis, anal is-los e, em seguida, voltar aos diversos entrevistados e pedi r dados adicionais. Esse processo pode ser apenas para escl arecer as perguntas originais, ou talvez novas perguntas surjam das respostas fornecidas.

Biblioteca Pessoal com Informaes sobre CDs


Narrativa dos Requisitos

"Como projeto prtico, voc ir desenvolver uma bibli oteca pessoal com informaes sobre C Ds que os usurios podero instalar em suas mquinas para registrar s uas colces. Ela dar suporte pesquisa por nomes de CDs e ao rastreamento de ttulos na Internet. Todos os detalhes sobre a coleo de CDs do usurio sero armazenados, e o sistema permi tir a gerao de alguns relatrios simpl es que usem esses dados."
Discusso:

Esse sistema bem simples, e a arquitetura para desenvol v-lo tambm deve ser. O nico item realmente desconhecido nele a pesquisa de detalhes sobre os CDs na Internet, mas essa no

Arquitetura dos Aplicativos na Plataforma .NET

145

uma questo relacionada arq uitetura. Um aplicativo do Windows Fonn s seria o mai s ad equa~ do, porm voc deve escol her um banco de dados que no seja o SQL Selver porque preferve l fazer a distribuio sem precisar de nenhum software adicional nas mqui nas dos usurios. Um arquivo do Access ( . mdb) ou um banco de dados MSDE atenderiam sat isfatoriamente a esse projeto. Como alternativa, todas as infonnaes poderiam ser annazenadas apenas como XML em um conj unto de dados (DataSet).

Resumo o un iverso da plataforma .NET novo e poderoso, mas tudo precisa de uma base. O projeto e a
arq uitetura de seus sistem as so crticos para a obteno de xito. Apesar dos novos recursos e alteraes radicais na tecnologia subjacente, a arquitetura de um sistema. N ET no to diferen~ te do que era para um sistema do Visual Basic 6.0; muitas opes ainda so as mesmas. Cert ifi~ que~se sem pre de basear suas escolhas nos requisitos que obtiver e no esquea de planejar para o futu ro! Como foi mencionado, muitos aspectos da arquitetu ra dos sistemas esto alm do escopo desta lio, mas o MSDN dedicou uma seo de seu site da Web para a arquitetura dos aplicat ivos .NET. Acesse http://msdn.microsoft. com/l i brary Idefa u1t. asp? ur 1=11 i bra ry len -u sl dnbdal html/daag.asp para encontrar muitos recursos teis.

P&R
P Ou,ri dizer que o Windows DNA foi abandonado e no mais aplicado agora que a plataforma .NET existe. Voc afirmou que ele ainda empregado, mas, na verdade, no um recurso ultrapassado? R O Windows DNA representa tanto alguns conce itos quanto tec nologias. Algum as das tecnologias a ele incorporadas, como o Vi sual Studio 6.0, foram s ubstitudas pelas eq uivalentes da plataforma .NET, mas o conceito do Windows DNA (computao distribuda em vrias camadas, separando as de apresentao, operacional e de dados) ainda vl ido. Os sistemas q ue j foram desenvolvidos com o mode lo do Windows DNA sero fceis de transferir para o universo da plataforma .NET. P No universo da plataforma .NET, todos os meus componentes se comunicaro uns com os outros por meio do SOAP (XML acima do HTTP),emvezdecomo velho pa ~ dro binrio do DCOM? R Voc est correto com relao ao fato de que o DCOM no mai s o mtodo preferido, mas a plataforma .NET fornece mai s do que apenas o SOAP como um meio para dois aplicati vos se comunicarem. O SOAP excelente para a comunicao com a platafonna .NET ou sistemas que no sejam .NET e especialmente bom quando se trabalha entre

146

Dia 5

duas redes porque ele passa com fac ilidade atravs de firewa lls. O SOAP uma opo, mas h vrias outras fo rmas de comunicao inc luindo os formatos binrios.

Workshop o Workshop foi planejado para ajud-lo a anteci par possveis dvidas, revisar o quej aprendeu
e comear a pensar em como colocar seu conheci mento em prtica. As respostas do teste esto no Apndice A, "Respostas dos Testes/Exerccios".

Teste
1. Nomeie uma vantagem relevante cm usar uma interface com usurio com base na Web em vez de um aplicativo Windows. 2. Se um apl icat ivo usar um arquivo do banco de dados Access localizado em um serv idor, ele ser considerado um sistema cliente/servidor ou de uma nica camada? 3. O que tem de ser instalado para que um computador execute um aplicativo criado com a plataforma .NET (no s procurar um site da Web criado com e la)?

SEMANA

DIA

o Que Fazer Quando Programas


Bons Apresentam Problemas e para Se Certificar de Que Isso No Acontea
Pode acontecer um erro quando seu programa estiver sendo executado (normalmente causando a interrupo dele). Se ocorrer no momento em que um cliente estiver processando seu programa, algo bem pior poder acontecer (voc pode no ser pago). Portanto, seria melhor se pudssemos

evitar esses problemas antes que acontecessem .


H duas tcnicas importantes que o ajudaro a ev itar erros. Primeiro, voc deve detectar quando as falhas ocorrerem em seus programas e lidar com elas em vez de permitir que a mensagem de erro padro surja como resposta. Em segundo lugar, bom se certificar de que seu aplicativo tenha a menor quantidade de erros possvel. Hoje, voc aprender as duas princ ipais maneiras de evitar problemas em seu cdigo: Tratamento de excees estruturadas Depurao

148

Dia 6

Tratamento de Excees Estruturadas


As verses mais antigas do Visual Basic usavam o tratamento de erros para proteger um aplicativo. O Visual Basic .NET a primei ra verso adar s uporte a um conceito melhorem linguagens de programao - o tratamento de excees estruturadas.
,

O Que E o Tratamento de Excees Estruturadas?


Antes que voc possa examinar o que Structured Exception Handl ing (SEH, trataNovo TERMO mento de excees estruturadas), deve aprender apenas o que significa urna excet70 eSlrulllrada - ou at uma exceo neio eSfrulllrada. Caso contrrio, no saber o que est tralando. Uma exceio algo que sa i da rotina (e em geral de maneira inesperada) cm seus aplicativos. H

dois tipos de excces - exees de hardware e de software. claro que uma exceo de hardware aquela causada pelo hardware - por exemplo, quando seu programa tenta acessar LIma parte da memria que no deveria ou um evento semelhante que ocorra com base no hardware. Uma exceo de software ocorre quando se tenta atribuir um valor incompatvel a uma varivel ou um erro parec ido acontece.

o Ira/ame/1/o de excees estruturadas uma estratgia para lidar com erros de hardware ou
software. Tratando os dois tipos de exceo da mesma maneira, o cdigo necessrio para process-las ser mais fci I de escrever e mais consistente. Execute o tratam ento de excees estruturadas para 'proteger' as sees de cdigo que est iverem propensas a serem alvos de excees. Por exemplo, quando estiver para efetuar uma diviso, poder proteger o cdigo que a calcula. Se por causa de um erro que voc cometeu no programa ou um valor que o usurio inseriu - o programa tentar fazer a diviso por zero, o cd igo protegido poderia lidar com a exceo resultante. Outras vezes cm que se deve usar o SEl-I so na leitura em bancos de dados, abertura, leitura ou gravao em arqu ivos, ou qualquer outro momento em que voc ache que um erro possa ocorrer.

NOTA

Sou daqueles que cr ser difcil usar em demasia o SEH. Os benefcios que pode obter protegendo a si mesmo, seus programas e usurios de erros compensam em muito uma pequena reduo no desempenho que resu lte da utilizao do SEH. Por out ro lado, seja sensat o. Se no ho uver nenhuma possibilidade (e quero dizer, realmente no existir a possibilidade) de um erro ocorrer, deixe de lado a digitao adicional.

Erros e Excees
Bem, em que um erro difere de uma exceo? Se voc estiver fam iliarizado com outras verses do Visual Basic ou mesmo com a maioria das linguagens de programao, decerto se deparou com o conce ito de erro, mas no de exceo. Qual a diferena? Porque precisamos de uma palavra nova e de algo que soa to extravagante como o tratamento de excees estruturadas?

o Que Faze r Qu and o Programas Bons Apresentam

Problemas e ...

149

Primeiro, uma exceo na verdade um erro. Parte do problema, no entanto, que um erro s i gn i ~ fica muito mais. Um exemplo de erro poderia ser uma funo que retornasse um resultado que no fosse esperado ou se o programador usasse o algoritmo errado. Uma exceo mais forma l. A exceo ocorre, para repetir a definio anterior, quando algo acontece em seu cdigo fora do fluxo normal de controle. O SEH define uma maneira particular de lidar com excees, assegu rando que tudo seja nonnali zado depois do fato. Alm disso, um outro recurso adequado das ex cees que hoj e elas so compartilhadas entre todas as linguagens que tenham suporte da plataforma .NET. Isso significa que seria possvel ter um cdigo que causasse uma exceo em uma linguagem , mas a tratasse em outra. A maioria dos erros no Visual Basic tem sido tradicionalmente tratados com o uso da instruo On Error. Essa instruo lio estruturada e pode resultar em um cdigo confuso que salte de um local para outro de um proced imento. As excees so tratadas com a ut ilizao de uma abordagem mais estruturada, ou organizada, como voc ver.

o Bloco Try
Voc deve proteger a seo dos cdigos com Obloco Try ... End Trya fim de tratar asexcecs sem pre que ocorrerem. Inicie o cdigo que deseja proteger com Try e fina lize a seo com End Try.

A Sintaxe de Try ... End Try


SINTAxe

o cdigo a seguir mostra a sintaxe do bloco Try ... End


1'y
Catch Ex As Exception

Try:

[nd

Try

onde Try o incio da seo do cdigo a ser protegido e [nd Try fina liza o bloco de cd igo. A li nha Catch marca a seo do bloco que realmente trata as excees que possam ocorrer.

A Seo Catch
Marcar apenas uma seo de cdigo com Try .. . End Try na verdade no produz nenhum resulta do. Se uma exceo ocorrer no cdigo protegido, ela deve ser ' capturada' e tratada. Capture a ex ceo com a pa lavra chave Catch. Cada bloco Try ... End Try pode ter uma ou mais sees Catch. Cada seo Catch em geral se dest ina a um ou mais tipos de exceo. Se decidir ter vrias sees Catch em seus blocos Try, cada seo deve capturar tipos diferentes de exceo. Voc pode querer fazer isso para permitir que cada tipo de exceo seja tratado de modo diferente. Se resolver inseri r todas essas sees Catch, tambm recomendvel ter uma seo Catch genrica que capturar todas as excees

150

Dia 6

que possam passar pelas outras sees. Essa fonna do bloco Try . . . End Try teria uma aparncia seme lhante mostrada na Listagem 6.1 .
CDIGO

LI STAGEM

6.1

Capturando Vrias Excees

1 Try

3 4 5 6 7 8

Catch eNoFile As Fi l eNotFoundException ' trate aqui a exceo causada por arquivos no encontrados Catch elO As IOExcept ion ' trate aqui a exceo causada por uma entrada/resultado (atch Ex As Except i on ' trate aqui as outras excees

9 End Try

ANALISE

Esse bloco Try foi projetado com a fina lidade de capturar erros em um procedim ento

que processa arq uivos. H sees separadas para tratar excees por arquivos no encontrados (Fi 1eNotFoundExecpt i ons), de EIS (I OExcept i ons) c outras. Se existisse apenas uma seo Catch, voc precisaria de algum cdigo que detenninasse a exceo especfica. Dessa maneira, fica mai s evidente que cdigo usado para cada tipo de exceo.

Criaremos um programa com uma exceo intencional , de modo que voc possa ver como ela func iona. Exam inaremos seus res ultados e o que ela faz ao programa. Em seguida, adicionaremos o tratamento da exceo, e saberemos como ele pode proteger o cdigo. 1. Crie um novo aplicativo do console. Chame-o de Exceptions. 2. Altere o nome do mdulo criado para modExcepti onal. 3. Acesse a caixa de dilogo Project Properties dando um clique com o boto direito do mouse no nome do projeto do Solution Explorer e selecionado Properties. 4 . Configure o Startup Object como modE xceptiona1. As configuraes fina is devem ficar como as que so mostradas na Figura 6.1. Para atender a finalidade deste exemplo, voc usar uma exceo simples e surpreendentemente comum, Division By Zero, que ocorre quando h uma div iso por zero. Esse erro pode ser demonstrado com facilidade divid indo-se um nmero por uma varivel no iniciali zada. ( uma das causas ma is comuns dessa exceo). A Listagem 6.2 mostra que aparncia o cdigo final dever ter:

o Qu e Faze r Qu an do Progra m as Bons Apresentam


FIG URA 6 .1

Prob lem as e ...

151

A caixa de dilogo ['roj ecl Properlies

para 1/11/ programa com lili/ti exce[io.

::. c ...........

_ --

............

::II ' : tv<'......

--,

..........
~_ ,

...

"- _: "_fi" ww..-,

'

<.~
~; '

. ....... """".....- - - ......,.." ,,"".....

..,..

0""" ,

LISTAG EM 6 .2

Um Programa com Exceo

1 Module modExceptional 2 3 Sub Main() 4 '***Este cdigo contm uma exceo, 5 'e portanto no ser executado at o f i nal 6 Dim dDividend As Decimal; 5 7 Dim dDivisor As Decima l = O 8 Dim dResult As Decimal = O 9 'Essa 1 i nha a que causar 10 ' uma Exceo Di vi s i onByZero 11 dResult = dOividend jdDivisor 12 System.Console . ReadLine() 13 End Sub

14
15 End Module

ANALISE

As linhas 6, 7 e 8 declaram suas variveis. Voc usou decimais aqui, mas tambm poderia empregar outros tipos de varivel numrica, Os valores tambm foram inicial izados,

Antes da diviso na linha II , o valor com o qual o divisor foi inicializado, O, no foi alterado. Portanto, quando o compulador tentar efetu-la, uma exceo ocorrer, Se voc executar esse programa no IDE, ver um erro como o mostrado na Figura 6,2, Se voc selecionar Break, o programa ainda ser executado, mas no modo Debug (depurao). Examinaremos melhor o modo Debug ainda nesta lio, portanto selecione Continue neste momento. Isso far com que o programa continue a ser executado. Neste caso, ele ser final izado.

152

Dia 6

FIGURA

6.2

., '

Mensagelll-padnio

de e.r:ceo.

.. I

"""

Se voc reproduzir o exemplo e tentar execut-lo em umajanela do prompt de comando, o resultado fina l ser semelhante, porm sua correo ser mais difci l. Primeiro, em um computador

de desenvolvimento (que tenha o Vi sual Basic .NET instalado), deve aparecer a caixa de dilogo
Jusl- In-Time Debug . Selecione No; seu programa conti nuar, e este resultado aparecer:
RESULTADO

1 Unhandled Exception: System.DivideByZeroException: 2 An exception of type System.OivideByZeroException was thrown. at System.Decimal.Divide(Oecimal dI , Decimal d2) 3 4 a t Except i ons .modExcept i ena 1 . Ma i n () i n
5 C:\Code\Day06\Exceptions\modExceptional .vb:l i ne 11

ANLISE

Essa uma mensagem-padro que voc ver quando uma exceo ocorrer. Vrias mensagens de erro relacionadas a excees so muito mais longas, no entanto, todas contm informaes semelhantes. A primeira linha sempre identifica o tipo de exceo que acabou de ocorrer. Neste caso, descobriremos que foi uma do tipo Sys tem.Oi vi deByZeroException. O tipo de exceo em geral uma grande indicao da natureza do erro e pode at proporcionar idias de como corrigi-Ia. Aqui, o tipo de cxcco System.OivideByZeroException informa principalmente dois dctalhes: A exceo que acabou de ocorrer uma das 'comuns' , isto , que faz parte do espao de nome System (e no de outro espao de nome, como System. 10. Fi leNotFoundException). A exceo que acabou de ocorrer envolve lima operao de diviso. Portanto, voc deve procurar uma possvel causa em seu cdigo, onde estiver efetuando uma diviso.

De maneira seme lhante, o restante da exceo disponibiliza muitas informaes. As outras linhas so uma lista invertida dos procedimentos que estavam efetivamente em execuo quando a exceo ocorreu . Na sada do exemplo, vemos que na verdade ela surgiu no procedimento System.Decimal.Divide. Esse procedimento foi chamado por Exceptions.modExceptional,Main. A principal funo de todas essas informaes localizar candidatos ao erro. Ao encontrar uma exceo, voc deve primeiro examinar o cdigo de cada um desses procedimentos. Em geral (mas nem sempre), o erro se encontrar em um deles. Comece com o prime iro item da lista (nesse caso, modExcept i ona 1 . Ma i n) e percorra-a at o final. Mais ad iante, nesta lio, exam inaremos algumas ferramentas que tornaro esse trabalho mais fcil. Algumas outras excees comuns esto descr itas na Tabela 6.1 .

o Que Fazer Quando Programas Bons Apresentam

Problemas e ...

153

NOTA

Esta no uma lista completa de todas as excees possveis. H muitas outras; por favor consulte a ajuda do Visual Basic .NET para obter mais detalhes . A lm disso, voc pode criar suas prprias excees para adicionar a essa lista se precisar, como veremos ainda nesta lio.

TABELA 6.1

Excees Comuns Ouando Ocorre ? Categoria geral para erros que ocorram quando o tipo (ou vaIar) errado for passado para um mtodo. Inclu ArgumentNul1 Exception e Argumen t OutofRangeException. Pode surgir por causa de um erro do programador ou nas entradas de dados do usurio. Ocorre quando voc passa um valor nulo para um mtodo, e ele no o aceita. Ocorre quando passada uma varivel que grande ou pequena demais para o mtodo, por exemplo, se voc passar o nmero -1 a um mtodo que foi criado para conter um valor relativo ao ms (isto , entre 1 e 12). Ocorre quando se tenta efetuar uma dviso por uma varivel no inicializada ou que contenha o valor zero. Em geral s acontece quando h erro do programador. Ocorre quando se tenta acessar o membro de um array que no existe. Em geral acontece por causa de erro do programador, mas tambm poderia ser causada por entradas invlidas do usurio. Geral mente usada como um espao reservado quando o desenvolvedor est trabalhando pela primeira vez no programa. Voc pode criara shell para seu aplicativo e, em seguida, lanar essa exceo de qualquer mtodo. Enquanto continuar no aplicativo, substitua a exceo pelo cdigo efetivo. Isso assegurar que conclua todos os seus procedimentos. Ocorre quando seu programa no tem memria suficiente. Isso poder acontecer ao preencher arrays extensos ou ao executar um lao . Uma exceo bem comum que ocorre quandO voc tenta inserir um valor que muito grande em uma varivel, como, por exemplo, na atribuio a segui r: Dim iSmal1ishNumber As Short = 50000 O exemplo de um erro que no definido no espao de nome $ystem. Nesse caso, a exceo definida no espao de nome System_ 10 (veja o Dia 8 , ~Introduo ao .NET Framework~, para obter mais informaes sobre os espaos de nome). Esta exceo ocorre quando voc tenta acessar um arquivo que no existe. Isso pode acontecer porque talvez ele no tenha sido criado ou o ca minho est incorreto .

TipO de Exceo ArgumentException

ArgumentNul1Exception ArgumentOutOfRangeException

OivideByZeroException

I ndexOutofRangeExcepti on

NotlmplementedException

O urOfMemoryException

OverflowException

FileNotFoundException

Agora que voc j vi u a exceo e tem (espero) uma idia me lhor do que seja, deve adicionar o SEH a seu programa para fornecer ao usurio mais informaes quando um erro ocorrer.

154

Dia 6

Abra o projeto Exceptions no Visual Basic .NET. Voc copiar o projeto anterior e far es para capturar a exceo, como mostram as etapas a seguir:

a1tera~

I. Altere o nOlne do projeto para Excepti ons2. Faa isso selecionando o projeto no Solution Explorer e, em seguida, selecione File, Save Exception As no menu.
2. Altere o nome do arquivo que contm o cdigo para Excepti ons2 . vb. Faa isso se lecionando o arquivo no Solution Explorer e, em seguida, sc lecione File, Save Excepti on. vb As.

3. Adicione um bloco Try . .. End Try ao cd igo que efetua o clculo. Use uma instruo Catch genrica para capturar a exceo Di visioll By Zero .
4. Ad icione um cdigo para exibir uma mensagem mais am igve l quando a exceo ocorrer.

o novo cdigo deve ficar com uma aparncia semelhante ao da Listagem 6.3.
COlGO

LISTAGEM 6. 3 Ad icionando o Bloco Try ... End Try

Module modExceptional Sub Main() '***Este cdigo contm uma exceo. 'e portanto no ser executado at o final Dim dDividend As Decimal = 5 Dim dDivisor As Decimal = O Dim dResult As Oec ima l = O 'Esta linha a que causar 'uma exceo OivisionByZero Try dResu l t = dOividend I dDivisor Catch Ex As Exception System.Console.Write Line("Ocorreu um erro de diviso por zero,") System.Consol e. WriteLi ne ("Verif iq ue o di vi sor. ") End Try System.Console . ReadLine() End Sub End Module

2 3

4 5 6 7
8

9
10
11 12 13 14

15 16
17

18
19

20
21

ANLISE

A linha 11 inicia o bloco Try, portanto, o cdigo desse local at o primeiro bloco Ca tc h da linha 13 est protegido. Nesse caso, a nica linha executvel aque causa a exceo da divi so por zero na linha 12. Quando essa exceo ocorrer, o programa ser interrompido e procurar algo para tratar dela. J que a seo Catch da li nha 13 genrica, capturar qualquer tipo de exceo. A varive l Ex ser usada pam armazenar a exceo criada, e voc poder empregar as propriedades dessa varivel para visualizar mais informaes sobre a exceo. Em

o Que Fazer Quando Programa s Bons Apresentam

Pro blemas e ...

155

seguida, ser exibida uma mensagem de eITo, e o cdigo continuar at o final , comeando na linha posterior a instruo End Try.

Aninhando Blocos Try .. End Try


Voc pode encontrar LIma si tuao na qual que ira proteger duas sees de cdigo com blocos Try .. . End Try, mas deseja lidar com as excees de maneira diferente. Se os doi s forem blocos separados de cdigo, no haver prob lema. No entanto, se um dos blocos estiver contido no outro (veja a Listagem 6.4), no h opo. Nesse caso, preciso aninhar os blocos Try ... End Try, como mostra a Listagem 6.4 .
COOIGO LISTAGEM

6.4

An i nhando Blocos Try .. . End Try

1 2 3 4 5 6 7
8
9

Sub WriteToF i le{ByVal FileName As String)

Dim fsOut As System. IO.FileStream Dim strOut As System . IO.StreamWriter


Tcy

'Abra o arquivo fsOut = New System.IO.FileStream(FileName, System. 10. FileMode .OpenOrCreate , System. IO .F ileAccess . Write)
Tcy

10
11

12 13 14 15 16
17 18 19 20 21

'Grave no arquivo strOut =New System.IO.StreamWriter(fsOut) strOut . Write(DateTime . Today .ToString( Catch elO As Exception Console.WriteLine{"No foi poss vel gravar no arquivo: {O} .", Fi 1eName) End Try Catch eFile As Exception Console.WriteLine("No foi possivel abrir o arquivo: {O}.", FileName) End Try End Sub

ANALISE

A Listagem 6.4 um exemplo de gravao em um arqu ivo. Voc examinar esse assunto com mais detalhes no Dia 8. Porm , h dois blocos Try . . End Try neste exemplo. Um dos blocos Try (o que comea na linha lO) est todo contido dentro do outro bloco Try (o que comea na linha 4). Portanto, o bloco Try interno est aninhado no outro bloco. Se uma exceo ocorrer na gravao que acon tece na linha 14, a in struo Catch da linha 15 a capturar, e o usurio ver "No foi possvel gravar no arqu i vo SomeFil e .out". Alm disso, se o arqu ivo no puder ser aberto, o bloco Catch da linha 18 capturar a exceo, exibindo "No fo i possvel abrir o arquivo: SomeFile .Out ".

Dia 6

Exatamente como com If . .. End If e outros blocos, no h lim ite para a maneira de an inh los. s vezes, aninhar blocos perm ite que a escrita do cdigo seja fe ita de uma mane ira mais organizada do que se eles no fossem aninhados.

A Seo Finally
Quando voc escrever blocos Try, s vezes se deparar com situaes nas quais, mesmo se uma exceo ocorrer, ter de executar algo. Por exemplo, se voc escrever um cdi go que grava informaes em um arquivo, deve fech -lo, ocorrendo ou no um erro durante a gravao. Ad icione essa funcionalidade com a seo Fi nal1y. Essa seo surge depois de todas as sees Catch . e deve conter apenas o cdigo que sempre ter de ser executado. Esse um bom local para fechar arquivos, con fi gurar variveis com Nothi ng Oll exclu- Ias quando desejar. A Listagem 6.5 mostra a insero de uma seo Finally no cd igo da Listagem 6.4.
COOIGO

LISTAGEM

6.5

Usando a Seo Fi nall y

1 2 3 4 5 6
7

8 9 10
11 12

Sub WriteToFile{ByVa l FileN ame As String) Dim fsOut As System.IO.FileStream Dim strOut As System . lO.StreamWriter Try 'Abra o arquivo fsOut " New System. IO .F ileSt ream{FileName ,_ System. IO.FileM .OpenOrCreate . ode System.lO .F ileAccess.Write)
Tcy

13

14
15 16
17

18
19

20 21 22 23 24 25 26

'Grave no arquivo strOut "New System.IO.StreamWriter(fsOut) strOut.Write(OateTime.Today.ToString( Catch elO As E xception Console .Write Line("No foi possvel gravar no arquivo:{O} . ", FileName) Finally strOut.CloseO End Try Catch eFile As Exception Console.WriteLine{"No foi possivel abrir o arquivo: {O} . " , FileNam e) Fina lly fsOut.CloseO End Try End Sub

o Qu e Faze r Qu an do Progra m as Bons Apresentam


ANALISE

Prob lemas e ...

157

Aqui, tanto StreamWri ter quanto Fi 1e sero fechados, mesmo se erros ocorrerem. Embora isso no seja necessrio, boa prtica fazer uma limpeza sempre que no precisar mai s de uma varivel.

Lanando Excees
Ocasionalmente, pode-se querer not ificar um usurio de que algo de muito errado aconteceu. Pode ser algo relacionado ao seu aplicativo ou uma exceo ' normal ' . Por exemplo, voc pode ter criado dois objetos nesse aplicativo, Emp 1oyee (funcionrio) e Cus tomer (cliente). Talvez queira gerar lima exceo se o programa tentar atribuir uma instncia de Empl oyee a uma varive l criada para conter objetos Customer. Em vez de criar um novo tipo de exceo, possvel reutilizar Inval idCastExcepti on. Assim, uma nova exceo Inval i dCastException poder ser gerada e usada como notificao do aplicativo atravs da instruo Throw. Isso mostrado na Listagem 6.6.
CDIGO

LISTAGEM 6.6

Instruo Throw

1 Dim oCust As Customer " New Customer("Bob" , "Sjerunk l lO)

2 Dim oEmp As Employee " New Employee("Phil","Barr") 3 Dim o$omething As Object

4 o$omething " oEmp 5 If TypeOf oSomething Is Customer Then 6 oCust = oSometh i ng 7 Else 8 Throw New InvalidCastException("No possvel atribuir Employee a Customer,") 9 [nd If

ANLISE

A linha importante do exemplo a oitava. Ali , voc criou uma nova instncia do objeto InvalidCastException e a ' lanou' , Isso gerar uma exceo adicional que deve ser capturada por uma instruo Ca tch ou tratada pela rotina-padro, causando o surg imento do depurador (se houver um ambiente de desenvolvimento instalado) ou de uma mensagem de
OITO .

o tratamento de excees fornece uma maneira estruturada e limpa de proteger seus programas
de erros devido a problemas no hardware, entradas invl idas do usurio ou a seus prprios enganos. Qualquer programa se tornar mais robusto se voc adicionar o tratamento de exceo a um cdigo que poderia ger-la.

Depurando
Novo TERMO To importante quanto a tratar apropriadamente os eITos e excees a depurao o ato (e arte) de tentar encontrare corrigir os erros do cdigo. E claro que isso leva com freqnc ia pergunta, "Em primeiro lugar, por que h eITos no cdigo? Os desenvolvedores

158

Dia 6

no tm de ser astutos?", Mesmo sendo verdade que todos os desenvolvedores so talentosos

(voc est lendo este livro, no?), s vezes enganos acontecem. Antes que voc possa remover os
erros de seus programas, passemos mais algum tem po examinando corno eles podem surgir.

A Fonte dos Erros


Um erro (em um programa de computador) pode aparecer de vrias maneiras. possvel que surja como Um engano na estratgia usada para executar alguma tarefa . Essas falhas so em geral chamadas de erros lgicos que s vezes so os mais difceis de corrigir. Eles ocorrem quando se escreve o cd igo de mane ira errada. Voc poderia estar ordenando lima lista de

nomes, mas o modo usado para faz-l o no levou em conta todos as possibilidades. Por exemplo, algum com o sobrenome St. Jean deve vir antes ou depois de uma pessoa que tenha como primeiro nome Santana? Um engano ao inserir o cd igo, um erro de digitao. Esses podem ser fce is ou dificeis de resol ver. De certa maneira, esses erros devem desaparecer quase inteiramente,j que o Visual Basic .NET verifica r a digitao das palavras-chave. Porm, os erros de digitao podem se tornar um problema, se voc no configurar Option Expl i ci t em seus mdulos. Se no o fizer, poder cometer um erro acidental ao digitar um nome de varivel posteriormente, fazendo com que o Visual Basic .NET crie de modo automtico uma nova varivel. Essa varivel nova seria inicial izada com o valor O(em varive is numricas), o que pode no ser o desejado. Por exemplo, sem Opt ion Expl i ci t , o cdigo a seguir seria compilado, mas nunca retornaria nada. 1 Imports System 2 Module Typo 3 4 Sub Main 5 Dim sName As String
6

7 8 9 10 11 End

Console . WriteLine("Digite o nome : ") Name = Console. ReadL i ne () Console.WriteLine("D nome digitado foi {DIli , sNmae) End Sub Module

Como j fo i dito, Option Explicit fa ria com que o Visual Basic .NET capturasse esse erro. Sem ele, voc tambm poderia captur-lo sem grandes dificuldades. No entanto, h um subconjunto desses tipos de erros que, por razes que desconheo, o crebro sempre l corretamcnte. Examinei durante alguns minutos uma seo de cdigo na qual sabia que havi a um erro de digitao, mas no vi nada. Toda vez que leio a palavra escrita incorretamente, a enxergo da manei ra 'correta' . Nessas situaes, chamamos sempre outra pessoa,

o Qu e Faze r Qu an do Progra m as Bons Apresentam

Prob lemas e .. .

159

que olha por cima de nossos ombros e imediatamente percebe o erro, causando algum embarao. Depois de alguns momentos de brincadei ras. os dois voltam ao trabalho. Um erro causado por entradas do usurio ou pelos dados. Esses so erros difceis de corrigir depois que ocorrem. A melhor sol uo para a entrada ou dados incorretos reduzir a chance do usurio inserir infonnaes invli das. Voc examinar alguns dos controles que podem ser usados para isso posteriormente neste livro. Alm disso, ser um 'programador defen sivo' tambm ajudar . Pressuponha que os dados sejam invlidos - voc deve veril1car os valores, para ter certeza de que so apropriados e proteger as sees de cdigo que possam gerar excees usando o tratamento de excees estruturadas.

Faa
Use Qption ExpliCit em todos os mdulos. Isso ajudar o Visual Basic .NET a detectar muitos erros que voc possa por acidente adicionar a seu cdigo digitando incorretamente nomes de variveis.

No esquea tambm de ativar Opti on Stri ct. Essa opo assegurar que voc sempre esteja a par quando um valor for passado a uma varivel de um tipo diferente. Aconverso automtica pode levar a erros traioeiros. Consciente de sua necessidade, voc poder executar a tarefa de modo mais apropriado .

Bem, pode haver muitas fontes de erros em seus programas. Algumas delas estaro sob controle, enquanto outras no. De qualquer modo, o Visual bas ic .NET fo rnece a voc mui tas ferramentas para ajud-lo a corrigir, ou depurar, seus programas.

Aprendendo a Depurar com a Prtica


Como j foi dito, a depurao quase tanto uma arte quanto uma cincia. s vezes, ela requer urna certa destreza para que se descubra o que pode estar causando um erro. Portanto, tenho a impresso de que umas das melhores manei ras de aprender a depurar utilizar esta tcnica em um programa real , e no apenas examinar suas ferramentas (o que pode ser um pouco subjetivo). Por isso, voc depurar um programa que calcula uma tabela de valores de hipoteca. Ele most ra os diversos pagamentos mensais que seriam necessrios a emprstimos de vrios perodos e taxas de juros. A Listagem 6.7 contm a sada procurada envo lvendo um emprstimo de 100 mil dlares.
RESULTADO LISTAG EM 6 .7

Resultado de um Programa Que Calcula a Tabe la de Pagamentos de uma Hi pateca

Digite o valor do emprstimo:


100000
Anos 10
15

20

25

30

Juros 5.00 5.25

1060.66 790.79 1072.92 803.88

659.96 584.59 536.82 673.84 599.25 552.20

160
1

Dia 6

LISTAGEM 6.7 5.50 5.75 6.00


6.25 6.50
6.75

Resultado de um Programa Que Calcu l a a Tabela de Pagamentos de uma Hipoteca (continuao)

687.89614.09567.79 1097 . 69830.41 702.08 629.11 583.57 1110.21 843 .86 716.43 644.30 599.55
1085 . 26 817 . 08
1122 . 80 857.42 1135.4887 1. 11 1148 . 24 884 . 91 1161.08898 . 83 1174.01 912.86 1187.02 927.01 1200 . 11 94 1. 28 1213.28 955.65

7.00 7.25 7.50 7.75 8.00 8.25 8.50 8.75 9.00 9.25 9.50 9.75 10.00

730.93 745.57 760.36 775.30

659.67 675.21 690.91 706.78

615.72 632 . 07 648.60 665.30

790.38 722.81 682.18 805.59 738.99 699.21


820.95 755.33 716 . 41 836.44 771.82 733.76 852.07 788.45 751.27

867.82805.23768.91 1253.27 999.45 883.71 822.14 786.70


1266 . 76 1280 . 33 1293 . 98 1307.70 1321.51 1014.27 899 . 73 839.20 804 . 62 1029.19 915 . 87 856.38 822 . 68 1044.22 932.13 873.70 840.85 1059.36 948.52 891.14 859.15 1074.61965.02908.70877 .57

1226.53 970.14 1239.86 984.74

A Listagem 6.8 mostra a tentativa ini cial de criar esse programa e seu resultado, confirmando que voc precisa executar uma depurao.
COOIGOI RESULTADO
LISTAGEM 6 .8

U Programa Que Preci sa de Depurao m

1 Option Explicit On 2 Imports System 3 Imports Microsoft.Visua18asic.ControlChars


4

5 Modu le modMain
6

7
8 9 10 11 12 13 14 15 16

Sub Main()
Oim sInput As String

Oim dblReturn As Oouble 'Armazena a entrada do usurio Dim dblPayment As Double Console .Write(UDigite o valor do emprstimo:") sInput = Console.Readline{) dblReturn = CObl (sInput)

17

o Que Fazer Quando Programas Bons Apresentam


CODIGOI RESULTADO

Prob lemas e ...

161

LISTAGEM 6.8

Um

Programa Que Precisa de Depurao (continuao)

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
40
41

'Crie a tabela OutputMortgageTable(dblReturn) Console.Write("Pressione ENTER para continuar") Console . ReadLine() End Sub Private Sub OutputMortgageTable(ByVal Principal As Oouble) Oim iYears As Integer Oim i Rate As Integer Oim dblAnnuallnterest As Oouble Console.Writeline(Tab &"Years" &Tab & "10" &Tab & "15" & Tab & "20" &Tab & "25" &Tab & "30") Conso 1e . Wri tel i ne (" Juros ") For iRate : 500 To 1000 Step 25 dblAnnuallnterest = iRate / 100 For iYears = 10 To 30 Step 5 Console.Write(Fonnat(dblAnnuallnterest , IO .#O")& Tab & Tab) 'iYears * 12 para obter o nmero de meses (pressupondo " pagamentos mensais) Conso 1e. Wri te (Fonna t (payment (pri nc i pa 1. _ dblAnnualInterest.iYears * 12), "0 . 00") & Tab) Next Console.Writeline() Next End Sub

42 43 44 45 46
47

48 Public Function Payment(ByVal Principal As Double. ByVal Annuallnterest As Double . _ 49 ByVal Periods As Integer) As Double 50 Dim dblMonthlylnterest As Double = Annuallnterest / 1200 51 52 Return Pri ncipal * dblMonthlylnterest * 1 + dblMonthlylnterest ~ Periods / 1 + 53 dblMonthlylnterest ~ Periods -1 54 End Function 55 56 57 Eod Module

Digite o valor do emprstimo: 100000

162

Di a 6

CODIGOI

LISTAGEM 6.8

Um Programa Q ue Precisa de Depurao (continuao)

RESULTADO Anos Juros

10 415 . 67 5.00 436 . 50 5.25 457 . 33 5.50 478 . 17 5.75 499 . 00 6.00 519 .83 6.25 540.67 6.50 561. 50 6.75 582 . 33 7.00 603 . 17 7.25 624 . 00 7.50 644.83 7. 75 665.67 8.00 686.50 8.25 707 . 33 8.50 728.17 8.75 749.00 9.00 769.83 9.25 790.67 9.50 811. 50 9.75 832.33 10 .00

15 5. 00

20 415.67

25 415.67 436.50

30 5. 00 5.25 5. 50 5. 75 6. 00 6. 25 6.50 6. 75 7. 00 7. 25 7. 50 7.75 8. 00 8.25 8. 50 8. 75 9. 00 9. 25 9.50 9. 75 10.00 415.67 436.50 457.33 5. 00 5.25 5.50

5. 00 415 . 67 5.25 436 . 50 5.50 457.33 5.7 5 478.17 6.00 499 .00 6.25 519 .83 6.50 540.67 6. 75 561. 50 7.00 582 . 33 7.25 603 . 17 7. 50 624.00 7. 75 644 .83 8.00 665 . 67 8.25 686.50 8. 50 707.33 8.75 728 .1 7 9.00 749 .00 9.25 769.83 9.50 790 . 67 9.75 811.50 10 .00 832 . 33

5.25 436.50 5.50 457.33 5. 75 478.17 6.00 499 .00 6.25 519 .83 6.50 540.67 6. 75 561. 50 7.00 582 . 33 7.25 603 . 17 7. 50 624.00 7. 75 644 .83 8.00 665 . 67 8.25 686.50 8.50 707.33 8. 75 728 .1 7 9.00 749 .00 9.25 769.83 9.50 790 .67 9. 75 811.50 10.00 832 . 33

457.33 478 . 17 499.00 519.83 540.67 561. 50 582.33 603.17 624 . 00 644.83 665.67 686.50 707 . 33 728.17 749.00 769.83 790.67 811.50 832.33

478 .1 7 5. 75 499.00 519.83 540.67 561. 50 582 . 33 603.17 624 . 00 644.83 665.67 686.50 707 . 33 728.17 749.00 769 . 83 790.67 811. 50 832.33 6.00 6.25 6.50 6.75 7.00 7.25 7. 50 7. 75 8.00 8.25 8. 50 8. 75 9.00 9.25 9.50 9.75 10.00

Os Modos na Vida de um Programa


Durante a criao dos programas no Visual Basic .NET. eles passaro por trs modos distintos. Quando voc iniciar pela primeira vez o VB .NET e estiver trabalhando em um programa, esse

o Que Fazer Quando Programa s Bons Apresentam

Prob lemas e .. .

163

ser o modo Design. Para confinnao sobre qual modo est em uso, examine a barra de ttulo da janel a. Depois das palavras ' Microsoft Visual Basic' , aparecer [design]. De maneira semelhante, quando um programa for executado no IDE, veremos [run], significando que esse o modo Run. O lt imo modo Break, ou Debug. Esse modo surgir se o programa que est iver em execuo for interrompido de alg uma fonna. Essa interrupo pode se dar devido ocorrncia de uma exceo, ou o modo Break pode ser introduzi do no IDE. Veja a Figura 6.3 para ver um exemplo do IDE no modo Break. Observe que a barra de ttulo inclui o marcador [break].

FIGURA

6.3

[00 [<II. "'" _

.,....,

1'" _

tlot>
~

O Visuall3asic .NEr 110

u !ii:g" 1o r.ta r...,. ' . .>J.

. -...

modo Break.

.u,. ,.... . <,.,(.1.,"" ... ..


,< ,. , ....... ,.
'.uh

c.....,. . ,,,,, .. , , . ,,. , .... _ .. t , " )


. , .... , . 0;0 . . . ' . . . .. , , , , _ ,,

... . .,._ . . .,. ....


'Co . . . . ,.,",

o." .' Oo"_ T"" . ,""Par-'"

Use o modo Break para auxiliar na depurao de seus programas. Nesse modo, so disponibilizadas vrias ferrame ntas por meio das quais voc poder visualizar o contedo de variveis, monitorar ou alterar o fl uxo do programa, ou testar blocos de cdigo. Essas ferramentas tero um valor inestimvel na revelao e correo de erros em seus programas. Se quiser introduzir o modo Break, em pregue a palavra-chave Stop, como mostra a Figura 6.3. Como alternativa, voc pode inseri r um ponto de interrupo na li nha onde gostaria que o programa fosse interromp ido. Ele ser executado normalmente at que atinja a Iinha e, em seguida, passar para o modo Break e retornar ao IDE. Seu programa ainda estar em processamento em segundo plano, mas se encontrar em uma pausa. Um ponto de interrupo pode ser inserido em seu cdigo de uma entre trs maneiras: D um clique na margem colorida esquerda da janela do cdigo, prximo linha na qual gostaria que estivesse o ponto de interrupo. Um crculo vermelho deve aparecer na margem. D um clique com o boto direito do mouse na linha do cdigo e selecione Insert Beakpoint. Um crculo vennelho deve aparecer na margem.

164

Dia 6

Selecione Debug, New Breakpoint no menu. Isso abrir a caixa de dilogo New Breakpoint (veja a Figura 6.4). Essa caixa o meio mais flexvel de criar um ponto de interrupo. Ela no s permite que voc defina um ponto de interrupo para encerrar o programa quando uma linha for at ingida, como tambm que os crie para situaes em que uma varivel for alterada ou alcanar um valor especfico, ou simplesmente em que uma certa cond io for verdadeira.

FIGURA 6 .4

Caixa de dilog o Ne li' Breakpoilll.

.......

__........ ..........
I... 1_ .... 1_ 1

-,

_~.-

II

""'<""'"

1 ' 1 '

I.n ."",

1-

Usando Pontos de Interrupo para Examinar o Programa de Exemplo


Carregue a verso inicial do programa no IDE (do diretrio OriginalMortgage), de modo que voc possa testar os pontos de interrupo. Com o mdu lo modMai n. vb aberto no editor, d um clique na margem colorida, prximo lin ha dblReturn : CObl(sInput) Dever aparecer um crcu lo verme lho perto da linha. Se isso acontecer, inic ie o programa no IDE. A janela do console deve surgir, perrnitindo que seja digitado um valor para o emprstimo. Insira 10000 e pressione Enter. Voc dever ser enviado novamente ao IDE onde uma seta amarela ser adicionada ao crculo vermelho, como vemos na Figura 6.5. A seta amarela sempre mostra a prxima linha a ser executada.

o Oue Fazer Ouando Programas Bons Apresentam


FIGURA

Problemas e ...

165

6.5
1/111

, _ _ .........., ........ .. '''-''',(1)00 ... ) - . -... ).....

f'o

Execlltando

t'"' jlooo _ ii: . U IlUHIIl


a

OM Ootu> I.... _
Iotlo

Iro ... . ,. &:I.

prog rallla com pOlllo de inlerrupcio.

11111

.:. )C~~.J "', ~'.

:3 ~I!.

. -., . ' R "

Co ... , ....
. , ..... -

.... . . ,..".,"t.< ,.." .-.,


'Go< U. . . ' .... ,

."

"
_""" " 1

...".

.*>l ...... _C ... , 1"',U<l


C . . . . . " .. , ... ,

(0 .... , . . . . _

... "

...,,"""_T... '.I ....o<....1

Percorrendo Seu Cdigo


Um dos recursos mais teis d isponveis no modo Break a capacidade de percorrer o cdigo. Ele permite que o usurio visualize o fluxo ou lgica de um programa, possivelmente encontrando erros em laos ou durante chamadas de procedimentos. Depois que voc tiver entrado no modo Break, poder comear a percorrer seu cdigo linha a linha. Isso permitir que examine o efeito de cada uma delas sobre as variveis ou que se certi fique de que os programas executem realmente as etapas que planejou. H quatro funes principais relativas s etapas, disponveis no menu Debug ou na barra de ferramentas de depurao. Elas so: Step Into Esse o comando de etapas mais usado. Toda vez que voc selecion-Io, a prxima ao disponvel ser executada. Selecione-o de dentro do procedimento Ou tputMortgageTable, e voc deve ver a seta amarela se mover para a linha OutputMortgageTable(dblReturn) Selec ione-o novamente, e voc dever passar para o proced imento OutputMortgageTabl e. Selec ione-o mais uma vez, e estar na linha Console .Write Line(Tab & "Years" &Tab & "10" &Tab & "15" & Tab & "20" & Tab & "25" & Tab & "30") Observe que a linha amarela no se detm nas instrues de declarao de variveis. Isso acontece porque elas no so consideradas cdigo executvel. A seta amarela s parar em linhas que executem algo, e no nas que declaram variveis novas. Step OUI Ocasionalmente este comando ser ti l se voc passar por um procedimento no qual sabe que no h erros. Ele faz com que o resto do procedimento seja executado e move a seta amarela para a primei ra linha depois da chamada original. Selecione-o de

166

Dia 6

dentro do procedimento OutputMortgageTabl e, por exemplo, e dever ser enviado de volta ao procedimento Sub Main. Step Over Tambm til quando h uma depurao nos procedimentos em que sabemos que no existem erros. O comando Step Over tratar o proced imento como se fosse apenas uma linha de cdigo. Por exemplo, se a seta amarela estivesse na linha OutputMortgageTabl e de Sub Ma i n, e Step Over fosse selecionado, todo o cdigo de OutputMort gageTable seria executado, e voc seria tran sferido para a prxima linha de Sub Main. Run To Cursor Outro comando til quando voc sabe que uma seo de cdigo no possui erros. O comando Run To Cursor penn itir a execuo de todo o cdigo at a linha se lecionada. Para usar este modo, selecione a linha ate onde deseja executar o cdigo e a opo Run To Cursor no menu Debug ou no de atalho.

Usando o Recurso de Percorrer o Cdigo para Examinar o Programa

de Exemplo
Percorrer um programa s vezes pode revelar erros causados pelo desenvolvedor. Esses podem ser laos que terminam precocemente ou que no so executados o suficiente, ou testes lgicos que no produzem os resultados esperados. Para percorrer o programa de exemplo, faa o segu inte: I. Encerre o programa selecionando o boto Stop Debugging na barra de ferramentas ou selecione Stop Debugging no menu Debug. 2. Remova o ponto de interrupo que voc criou anteriormente dando um cl ique no crculo vermelho da margem e gere um novo no incio do primeiro lao For dentro de Output MortgageTab 1e. 3. Inicie o programa. Quando as info rmaes fore m sol icitadas, digite 100000 como quantia do emprstimo. O programa deve entrar no modo Break na linha For i Rate = 500 To 1000 Step 25 4. Percorra o cd igo (ou se lec ione Run To Cursor) at que alcance a linha Console .WriteLine{) 5. Exam ine a jane la do co nsole (veja a Figura 6.6). Observe que na verdade h dez itens na linha, em vez dos cinco que voc esperava (um para cada coluna de 10 a 30). O valor da taxa dejuros est sendo repetido a cada passagem pelo lao quando s deveria ser executado uma vez antes do lao.

o Que Fazer Quando Programas Bons Apresentam


FIGURA 6 .6

Prob lemas e ...

167

Exibindo o cabealho.

6. Aps interromper o programa, transfira a li nha de cdigo que exibe a taxa dejuros em cada linha da tabela para que fique antes do incio do segundo lao For. O resultado deve ter a seguinte aparncia: Antes: For iYea rs ~ 10 To 30 Step 5 Console.Write(Forrnat(dblAnnualInterest . "0.10") & Tab & Tab) Depois: Console .Write(Fonnat{dblAnnuallnterest . "0 . 10") & Ta b & Tab) For iY ears ~ 10 To 30 Step 5 7. Pressione Step [nto para continuar a execuo do programa. Observe que a seta amare la est novamente no incio do proced imento OutputMortgageTa ble. O Visual Basic .NET recompi lou e recarregou o procedimento com as alteraes. 8. Agora se voc percorrer o cdigo at a linha da etapa 4, dever ver apenas cinco valores exi bidos nessa linha, como na Figura 6.7. Eles ainda sero valores incorretos, mas pelo menos um dos erros foi corrigido.

FIGURA 6.7

Primeira correr.;l1o.

9. Execute o programa at o final usando antes Step Oul para retornar a Sub Main. Examine ajanela do console para ver os va lores errados (eles so os mesmos para todas as linhas). Em seguida, retorne ao [DE e selecione Continue para finali zar o programa.

168

Dia 6

Examinando as Variveis
Alm de invest igar o flu xo da lgica de seu aplicativo, o Visual Basic .NET fornece ferramentas que pennitem a visuali:wo do contedo das variveis. Isso penn ite determinar se se us contedos representam o que voc defi niu e se o clculo est correto. Exatamente como quando percorreu o cdigo, h vrias ferramentas que voc pode usar para moni lorar as varive is. Algumas das mais teis so mostradas na Figura 6.8 e descritas a segu ir: Pesqu isa em janela suspensa Se voc mantiver o cursor do m Ollse posicionado sobre uma varivel do procedimento aluai, uma pequena janela aparecer most rando seu valor no momento. possve l ver isso na Figura 6.8, em que a varivel dbl Return atualmenle annazena o valor 100000. Essa uma ferramenta til e prtica se s quisennos fazer uma verificao breve de um valor ocasionalmente . Outro beneficio dessa ferramenta que se pode sclecionar a parcela de um clculo para saber seu valor, sem precisar que todo ele seja executado.
Janela Locais Estajanela em geral aparece na parte inferior da te la quando se est no modo Break. Caso contrrio, selecionea na opo Windows do menu Debug. A janela Locais mostra todas as variveis do proced imento atual , assim como seu tipo e valor no momento. Isso prtico quando se est percorrendo um cdigo, porque os valores ficaro com a cor vermelha quando forem alterados. A janela Locais ser til sempre que voc depurar um procedimento que altere os valores das variveis. Janela Watch Estajanela em geral aparece na parte inferior da tela quando se est no modo Break. Caso contrrio, selecionea na opo Windows do menu Debug. A janela Watch mostrar as variveis as quai s voc estiver interessado. D um clique com o boto direito do mouse nas variveis e se lecione Add Watch para adicionlas janela. Se elas estiverem no escopo, o valor atual ser exibido. Seno, ela o informar que, "O nome [nome de sua varivel] no foi declarado". Esta janela ti I para monitorar um grupo de variveis. Em vez de s exam inlas quando est iverem na janela Locais, ser possvel monitorlas durante toda a sesso de depurao.

Examinando Variveis para Depurar o Programa de Exemplo


J que voc deu uma aparncia melhor para o layout da tabelada hipoteca, o n ico erro que ainda , poderia existir estaria no clculo de cada varivel. E recomendvel depurar a funo Payment para se certificar de que apenas os valores corretos estaro em uso. Siga estas etapas: I. Encerre o programa se ele est iver em execuo agora. Remova todos os pontos de interrupo existentes e adic ione um primeira linha da funo Payment. A linha deve ser esta Dim dblMonthlylnterest As Double
~

Annuallnterest

1200

2. Ad icione um segundo ponto de interrupo linha End Sub de Sub Main para permit ir que voc vis ualize a tabela antes que o programa se ence rre.

o Qu e Faze r Qu an do Progra m as Bons Apresentam


FIGURA

Prob lemas e ...

169

6.8

!lo

""

e._

t'ol

1'0

Examinando os I'a/ores das Wlriveis.

1l '\:.I . ~ g"

~e. "' ,

.. .p . ~
... _

.....
. -..

. ,. ...

...... <11

~~ ~

... ..
"

(.... ,. ,.. ".1., .. U

,,

NOTA

Mesmo comeando com uma declarao, essa linha executvel porcausa da atribuio.

3. Execule O programa at que alcance o ponto de interrupo. Insira 100000 para o valor do emprstimo. 4. Quando o programa entrar no modo Break, examine ajanela Locais. Observe que ela inclui todos os valores de Principal , Annuallnterest e Periods. Do mesmo modo, se voc mantiver o cursor do mouse sobre uma varivel (por exemplo, Annua 1Interest) no IDE, dever ver uma jane la s uspensa mostrando o valor atual. 5. Avance uma etapa para processar essa linha. Podemos notar que a varivel dblMonthlyInterest se alterou e ficou vermelha na janela Windows. 6. Selecione o cdigo 1 + dblMonthlylnterest
A

Periods

Em seguida, mantenha o cursor do mouse sobre o texto selecionado. Uma janela suspensa aparecer, informando que o valor 1. Um clculo rpido em algum local confirmar que isso estar correto se voc executar primeiro a operao exponencial e, em seguida, a adio. No entanto, o valor certo deveria ser aproximadamente 1.647 porque a adio deve ser efetuada antes, e s ento elevaramos o resultado quantidade referente aos perodos. Esse erro ser repet ido na segunda metade da funo . Acrescente parnteses ao clculo de modo que as adies sejam executadas antes e, ento, teste o valor novamente. 7. De maneira semelhante, o clculo como um todo sofre de uma grande carncia de parnteses. Interrompa o programa e altere a linha de clcu lo para que fique como a descrita a seguir:

170

Dia 6

Return Principal * (dblMonthlyInterest *_

((1 + dblMonthlyInterest) A Periods) 1_ (((1 + dblMonthlylnterest) A Periods) - 1))


Os parnteses no custam nada. Quando voc estiver escrevendo uma funo matemtica, no economize em seu uso - empregue quantos precisar pa ra se certificar de que as operaes sejam efetuadas na ordem correta. Como alternativa, possvel colocar cada etapa em uma linha, embora isso exija mais va riveis temporrias no clculo.

DIC A

8. Encerre o aplicativo, remova o ponto de interrupo na linha da funo Pay ment e reexeeLite o programa. Voc deve ver a tabela correta da hipoteca, como mostra a Figura 6.9.
6.9

FIGURA

Tabela correia da hipoteca.

Retoques Finais no Programa de Exemplo


H algumas outras alteraes menores que voc pode fazer para organizar melhor este programa . Por exemplo, o cd igo que usado para formular uma pergunta ao usurio poderia ser inserido em uma funo. Isso permitiria s ua posterior substituio por um cdigo que processasse uma funo semelhante, porm com formulrios Windows, da Web, ou em alguma outra tela.

DICA

Uma boa idia isolar sees de cdigo que sejam especificas do sistema operaciona l ou da interface com o usurio nos procedimentos. Assim, quando voc precisar alterar a interface com o usurio, s ter de substituir o procedimento, e no o cdigo que o utiliza.

Outra alterao seme lhante simplificar o clculo da funo de pagamento da hipoteca. J que a expresso (1 + dblMonthlylnterest) " Periods) aparece duas vezes no clculo, voc pode cri-Ia como uma operao isol ada . Declare uma varive l temporria do tipo duplo para annazenar o contedo e substitua o clculo por essa varivel.

o Que Fazer Quando Programas Bons Apresentam

Pro blemas e ...

171

Depois que voc tiver feito todas as alteraes no programa do exemplo, ele deve ficar semelhante ao mostrado na Listagem 6.9.
CDIGO

LI STAGEM

6.9

Cdigo Depurado

Option Explicit On 2 Imports System 3 Imports Mi crosoft.Visua 18asic.ControlChars 4 5 M odule modMain


1

6 7 8 9 10 11 12 13 14 15

Sub M ain() Dim sInput As String Dim dblReturn As Double 'Solicite a entrada do usurio Dim dblPayment As Double Console.Write{"Oigite a quantia do emp rstimo:") s Input = Console.ReadLine() dblReturn = CDbl(sInput) 'Crie a tabela OutputMo r tgageTab l e(db l Return) Console .Write ("Pressione ENTE R para continua r" ) Console . Readline() End Sub Private Sub OutputMortgageTable(8yVal Princ ipa l As Oouble) Dim iVears As Integer Oim iRa te As Integer Oim dblAnnua l lnterest As Oouble Console.WriteLine(Tab & "Vears" & Tab & "l O" & Tab & "IS" & Tab & "20" & Tab & "25" & Tab & "30") Console.WriteLine{"Juros") For iRat e = 500 To 1000 Step 25 dblAnnualInterest = iRate / 100 Console .W rite(Fonnat(db lAnnualInterest ," O.IO") & Tab & Tab) For iVears = 10 To 30 Step 5 'iVears * 12 pa r a obter o nmero de meses (pressuponha pagamentos - mensai s) Console.Write(Fonnat(Payment (Principal . dblAnnualInterest , iYears * 12),"0 . 00")& Tab) Next Console.WriteLineO

16
17
18 19 20 21

22 23
24

25
26

27
28

29
30 31 32

33
34 35

36
37 38 39

40 41 42 43

172

Di a 6 Cdigo Depu r ado (continuao)

COIGO

LISTAGEM 6 .9

44 45 46 47 48 49 50 51 52 53 54 55 56 57 End

Next End Sub Public Function Payment{ByVal Pr incipal As Double, ByVal Annuallnterest As Double , _ ByVal Peri ods As Integer)As Double Dim dblMonthlylnterest As Double = Annuallnterest / 1200 Return Pri ncipal * (dblMonthlylnterest * _ ((1 +db IMonthlylnterest) Periods) /_ {({I +dblMonthlylnter est) A Per i ods) - 1 End Func ti on
A

M odule

Outras Ferramentas para Depurao


Muitas outras ferramentas esto disponveis para ajud-lo na depurao . Muitas de las so avanadas e no fazem parte do escopo deste livro, mas voc deve ao menos saber que ex islem. Entre elas destacamos lmmed iate Window Est sempre disponvel no menu Debug, Windows. Abre uma janela que permite inserir uma li nha de cd igo a ser executada imediatamente. Isso possibil ita o teste de pequenos trechos de cdigo. J que est disponve l havendo ou no a depurao, pode-se usar a janela lmmediate para testar pequenos clcu los enquanto os programas so escritos. Um emprego comum para esta janela exibir o contedo das variveis ' disponibi lizando-o' nesse local, por exem pl o: ?db l Mo nthlylnterest 4. 16666666666667 [ -D3

Quickwatch Window Disponvel no menu Debug quando se est no modo Break. Abre uma janela que mostra o valor das vari ve is. Esse recurso fi cou um pouco ultrapassado por causa da janela suspensa que j exibe o valor das variveis. No entanto, a jane la Quickwatch tambm til para testar as expresses tanto quanto as varive is. Ca]] Stack Dispon vel no menu Debug, quando se est no modo Break. Abre umajanela que mostra a li sta de procedimentos ativos no momento. Por exemplo, se seu Sub Ma i n chamasse QutputMortgage Tao 1e, a pi lha de chamadas exibiria os do is proced imentos (em ordem inversa). Voc pode usar esse recurso para navegar nos dois procedimentos; isso permitiria a visual izao da linha de Sub Main que chama o segundo procedi mento. Esta janela pode ser empregada para depurar problemas em que a deciso errada seja selecionada em uma instruo If.

o Que Fazer Quando Programas Bons Apresentam

Problemas e ...

173

Disassembly Disponvel no menu Debug, quando se est no modo Break. Esta uma ferramenta avanada que mostra a linguagem de mquina efetiva criada para o programa e s ser realmente til se voc conhecer a montagem. Threads Dispon ve l no menu Debug, quando se est no modo Break. Est~ uma ferramenta avanada que mostra as li nhas de execuo ativas em um programa. Uti l quando se executa urna programao com mltiplas linhas de execuo no Visual Basic .NET.

O Visual Basic .NET fornece muitas ferramentas que o ajudaro a disponibilizar programas sem erros. A melhor maneira de conhecer as ferramen tas e saber quai s delas o auxi liaro mai s, test-Ias. Em vez de tentar el im inar os erros com a leitura do cd igo, percorra-o minuciosamente, investigue os valores das variveis utilizadas e isole as falhas empregando essas ferramentas.

Resumo
Todos os programas tm erros. Algumas vezes, o erro est na pessoa que executa o programa. Em outras, h realmente uma falha ou erro no cdigo. Isso pode acontecer porque o autor do programa no testou todas as possibilidades de entradas ou no protegeu o programa da falta de arquivos ou bancos de dados. Em qualquer dos casos, sua res ponsabi lidade, como desenvolvedor, tentar assegurar que nenhum desses erros faa o usurio perder informaes. Voc deve se esforar para tornar seus programas to livres de erros quanto possvel. As ferramentas de depurao do Visual Basic .NET o ajudaro nessa tarefa. Certifique-se de us-Ias para percorrer seu cdigo e de que o fluxo se encontre da forma que foi planejado. Assegure que as variveis armazenem os valores corretos e que os clcu los sejam exatos. De manei ra semelhante, voc pode proteger o programa de erros adicionando o tratamento de excees estruturadas s sees crticas de cdigo. Pontos propensos falhas - como onde o cdigo abre arquivos, l ou grava informaes, ou faz clculos - devem ser inseridos em blocos Try ... Catch ... End Try . Esses blocos tratam os erros de modo sofisticado, permitindo perfeitamente que o us urio cont inue a usar o programa. Na prx ima lio, voc trabalhar com objetos. Como poder ver, j estamos fazendo isso; no entanto, estudaremos o ass unto com mai s detalhes no Dia 7, "Trabalhando com Objetos".

P&R
P O que acontecer se cu tiver algum cdigo antigo que use n Error Preciso reescrev-lo para empregar o tratamento de excees estruturadas?
R No. Se incluir a referncia Mi crosoft . Vi sua 1Basic, poder continuar a usar On Error

Goto e On Errar Resume Next. Alm disso, o objeto Err est disponvel para voc.

174

Dia 6

Workshop

o Workshop foi planejado para aj ud-Io a antecipar possveis dvidas, revisar o que j aprendeu
e comear a pensar em como colocar seu conhecimento em prtica. As respostas do teste esto
no Apndice A, "Respostas dos Testes/Exerccios".

Teste
I. D o nome de trs ferramentas que podem ser usadas para visualizar o contedo de uma
varivel enquanto voc estiver no modo Break.

Exerccios
I. Voc acabou de herdar o bloco de cdigo a segui r. Ele solici ta ao usurio dois valores. Em seguida, calcula e exibe uma tabela com a mu ltipl icao de todos os va lores entre os dois nmeros inseridos. Por exemp lo, se o usurio inserir 5 e 9, o resultado deve ser semelhan te a
RESULTADO

Tabela de Multip li cao


5 6
7

(de5a9)

5 25 30 35
40

6 30
36 42

8
40

35
42 49

48 56
64

45 54
63 72

8
9

45

48 56

56
63

72

81

Adicione o tratamento de excees e depure o cdigo da Listagem 6.10 para assegurar que ele gere o resultado desejado.
Cdigo
LISTAGEM 6.10

Cdigo da Tabela de Multiplicao

1 Imports System 2 Imports Microsoft.VisualBasic.ControlChars


3

4 Module modTable 5 6 Sub Main()


7 8 9 10
11

Dim iLow.iHigh As Integer Oim sInput As String

'Permita vrias execues da geraao da tabela


Do

12 13

'solicite valores
Console . Write("Valor mnimo (mximo igual a 20 . O para
finalizar): ")

o Qu e Faze r Qu an do Progra m as Bons Ap resenta m


Cdigo
14

Prob lem as e ...

175

LISTAG 6.10 EM

Cdigo da Tabe la de Multiplicao (continuao)

15
16 17

sInput " Console.ReadLine{) iLow = CInt{sInput) If iLow <>0 Then Console.Write("Valor mximo (mximo ig ua l a 20): ") sInput = Console.ReadLine{) iHigh " CInt(sInput) OutputTable{iLow, ;High) End If Loop Unt i 1 iLow " O Console.Write{"Pressione ENTE R para continuar") Console.ReadLine{) End Sub Private Sub OutputTable(ByVal MinValue As Integer, ByVal MaxValue As Integer) Oim iCount, iCount2 As lnteger Console.WriteLine{) Console.WriteLine{"Tabela de multiplicao ({O) a {l}" , MinValue,MaxValue) ' exiba o cabealho For iCount = MinValue To MaxValue Console.WriteLine(Tab & CStr(iCount Next Console.WriteLine{) 'Exi ba cada uma das linhas da tabela For iCount = MinValue To MaxValue For iCount2 " MinValue To MaxVa l ue Console.Write(CStr(iCount)& Tab & CStr(iCount * iCount2 Next Console.WriteLineO Next End Sub End Module
2. Conforme avanar no livro e ti ver problemas com seu cdigo, tente usar as ferram entas de depurao para corrigir o programa. Empregue pontos de interrupo para isolar sees que voc achar que possam conter erros, percorra o cdigo e util ize as janelas Locais e Watch para monitorar as variveis.

18 19
20 21

22
23

24 25 26

27
28

29 30 31
32 33

34 35 36 37
38

39 40
41

42 43
44

45

46

47 48 49 50
51

52

176

Dia 6

3. Se voc encontrar excees em seus programas, ad icione o Iralamento de excees . Procure na ajuda on-t ine a palavra-chave ' Exception' para examinar os diversos tipos de ex-

cees. Corno altemativa, pesquise a li sta selccionando Exceptions no menu Debug, do


Windows. 4 . Use o aplicativo do exemplo para testar os tipos diferentes de pontos de interrupo. Ten-

te configurar um quando o pagamento est iver abaixo de um certo valor.

SEMANA

DIA
Trabalhando com Objetos
Tanto o uso quanto a criao de objetos so essenciais para o desenvolvimento no Visual Basic .NET. Embora vocj tenha trabalhado com eles no decorrer deste livro, esta lio ser dedicada a esse tpico e abordar:

O que so objetos.
Corno runcionarn.

nham.

Onde os objetos sero inseridos em seus programas.

Comearemos com a definio bsica de objeto e todos os termos e conceitos que a acompa-

Para Comear: O Que um Objeto?


Para definir o termo ' objeto', poderamos retornar no tempo at o lat im medieval , 'obiect urn ' ou 'coisa colocada na frente da mente ' , mas para usarmos um termo mais si mples comearemos apenas com a palavra ' coisa' . Um objeto uma descrio genrica de qualquer coisa que se pode querer discutir, ou usar no trabalho. Em conversas corriqueiras, o temlO objeto em geral se desti na a descrever apenas coisas materiais, mas em programao, em que mu ito pouco realmente tisico, essa definio ampliada para incluir qualquer entidade. Podemos nos referir a um carro, pessoa Oll prdio como um objeto, mas tambm aceitvel usar esse termo para descrever algo menos tangvel como uma taxa dejuros ou lima regra que ser apl icada correspondncia eletr(}. nica recebida.

Dia 7

o uso de objetos permit ir que seus programas sejam dedicados s entidades com as quais voc
estiver trabalhando, cuj o objetivo final ser prod uzir sistemas que sejam fce is de compreender e aprimorar. Em vezde um programa em que todas as informaes e cdigos relacionados a apenas Lima entidade estejam espalhados por todo o aplicativo, uma abordagem com base no objeto consolidar essas informaes trazendo-as para a definio do objeto.

Classes e Instncias
Para compreender os objetos voc ter de passar rapidamente para o conceito de classe. As c lasses, como nas classificaes, descrevem um grupo ou tipo de entidade, e todos os objetos so membros de alguma c lasse. Elas so a descrio de um objeto, fornecendo deta lhes que definem seu componamento e relatando que tipos de informao esto disponveis sobre ele. Poderamos, por exemplo, ter uma classe Car (carro) . Ela nos relataria que as informaes a seguir estariam disponveis sobre um carro: s ua cor, veloc idade, peso, marca, modelo e ano. Todos esses tens so atributos do objeto, parcelas descrit ivas de informao s quais nos referimos como propriedades. Alm dessas propriedades, a classe tambm descreve o que o objeto pode fazer e como. Esses com portamentos em geral so chamados de mtodos do objeto, e um objeto carro poderia ter mtodos como "VirarEsquerda", "A vanar", " DarR" e assim por d iante. com o uso dessa classe, que fornece in (ormaes sobre as propriedades e mtodos do objeto, junto a alguns outros detalhes, como um modelo, que os objetos so criados. Retomando ao exemplo do carro, a classe seria a sua especificao, o projeto que descreve como ele funcio na e se parece. Essa classe ento usada para criar muitos carros, cada um com uma existnc ia prpria, mas todos eles baseados na mesma especificao. Todos possuem as mesmas propriedades porque elas provm da especifi cao, como a cor, mas cada um pode ter um valor diferente para essas propriedades (carro azul , carro verme lho, carro amarelo e assim por diante). Todos os carros tambm compart il hariam os mesmos comportamentos ou aes (os mtodos da classe), como "Avanar" e os que fossem construdos a partir da mesma especificao executariam essa ao da mesma maneira. Criar um carro com base na especificao equ ivalente a gerarmos um objeto com base em uma classe. Portanto, enquanto o Ford Thunderbird seria uma classe, o T-Bi rd azul de Bob seria um objeto. Cada um desses objetos , individualmente, uma instncia da c lasse e no h lim ite para quantas podem ser criadas. Todas as instncias compartil ham o mode lo, ou descrio, fornecido por sua classe. Isso signi fica que todas as instncias da classe Car tero as mesmas propriedades e mtodos e se comportaro da mesma maneira. No entanto, cada instncia ter valores prprios para suas propriedades; todos os carros tm uma propriedade em comum que a cor, mas cada um deles possui uma cor diferente.

Referncias
Em programao, um conceito adicional introduzido, o da referncia a um objelo. Uma varivel de objeto, qualquer varivel dec larada como um objeto de algum tipo (Dim myCa r As Car),

Trabalhando com Objetos

179

no contm o objeto propriamente dito, mas apenas uma referncia a ele. diferente dos tipos comuns de variveis, como os inteiros ou strings, nos quais elas armazenam diretamente o valor. Isso significa que mais de urna varivel de objeto pode se referir, ou apontar, ao mesmo objeto. Em geral, esse no o caso. O objeto criado e usado em uma varivel, mas importante compreender a diferena entre os objetos e outros tipos de variveis a esse respeito.

Passando o Conceito para o Cdigo


Passemos alguns desses conceitos para cdigo. Primeiro, para criar objetos, voc deve ter urna classe. Existem muitas classes disponveis que foram criadas por outras pessoas; na verdade, o .NET Framework inteiro uma ' biblioteca de classes', um conjunto de classes pr-existentes que podem ser usadas em seus programas. Em nosso exemplo, no entanto, criaremos nossa prpria classe, Car, porque algo simples de fazer.

NOTA

A finalidade desta lio no ensinar tudo a respeito de classes, e sim o sufi-

ciente sobre a construo de classes para que voc compreenda as que j foram criadas. Esse conhecimento ser til para se aprofundar no .NET Framework no Dia 8, "Introduo ao .NET Framework", e ele fornecer uma viso inicial para o desenvolvimento de seus prprios objetos no Dia 15, "Criando Objetos no Visual Basic .NET".

Abra o Visual Studio .NET e crie um novo projeto (Empty Project) na pasta Visual Basic Projects (veja a Figura 7.1). Esse projcto no contm arquivo de nenhum tipo, portanto precisamos adicionar um a ele; selecione Project, Add Class no menu. Isso adicionar uma classe vazia ao projeto (chame-a clsCar.vb), um timo ponto de partida para esse exerccio. Agora, foi criado um shell de uma classe nesse arquivo, fornecendo o cd igo a seguir: Public Class clsCar End Class Neste ponto, uma classe foi criada, mas est comp letamente vazia. Agora, dentro desse she ll, podemos comear a descrever as propriedades e mtodos dos objetos de nossa classe CaroQualquer item que inserimlOS nessa classe far parte de todas as instncias do objeto criadas a partir dele. Por enquanto, adicionaremos as propriedades M Model e Colar. ake,

180

Dia 7
_", . ~t

FIGURA 7 .1

VIII projeto m=io ti

iniciado sem comer


nenhul/I orq/lh'o.

-" 'q G J .... . -- _'" _ . --_: "-'''''-,. :J,g=::.:: '-'"'' ' ' -0 _ _ ""'"
1 "-'
I~

"""'-=_ " _ 1;;:1 _ (;J_.,,_

,_,,,
.

a ....... c.......-

""

l1 .

" iiI~
[ii~ ~

e na ,;

""

' . . _ _ ""...-.""", UI lO"

",-

,"

...... In

~-

...,...o ~_ ...., :::J


.......,....'''''''_ .."

...

I I

" AOdto_

_ .... """"'''''''1... _
, ~,

1 " -

i " ...... ..",.'f"Sol.b>o


'

.........
I

Propriedades
As propriedades so atributos de um projeto que voc pode recuperar e configurar, e que podem ser adicionados a lima classe de uma entre duas maneiras. O primeiro mtodo, e tambm o mais sim ples, declarar uma varivel como Publ ic. Como discutimos no Dia 3, " Introduo Programao com o Visual Basic ,NET', Pub 1i c descreve o escopo da varivel. No caso de uma classe,

qualquer item que for declarado como Publ ic estar disponve l para todas as pessoas que usarem essa classe. Em nossa classe, apenas incluir a linha Dim Year As Integer no criaria uma propriedade exposta porque Year s estaria disponvel internamente. Se Tossemos declarar Yearcomo Pu blic Vear As Integer, ento, de repente ela seria exposta em Iodas as instncias desse objelo.

Instrues de Propriedade
Como alternat iva, as propriedades podem ser declaradas com o uso de uma sintaxe Property especial: Dim myVar as <Tipo de dado da propriedade> Public Property <Nome da propriedade>() As <Tipo de dado da propriedade> Get Return myVar End Get Set(ByVal Value As <Tipo de dado da propriedade myVar " value End Set End Property As duas partes da definio da propriedade, Get e Set, representam a recuperao do valor dela e a configurao desse valor. Em geral, o cdigo de Get s retorna o valor de uma varivel interna (uma varive l no nvel da classe que representa a propriedade, normalmente com o prefixo mpara indicar um valor membro), e o de Set insere um valor (que for necido por meio da palavra-chave especial Va 1ue) na mesma varivel interna. Para implementar a propriedade da cor em clsCar, poderamos usar um cdigo como o da Listagem 7.1.

Trabalhando com Objetos

181

COOIGO

LISTAGEM 7.1

Criando Propriedades em Classes

1 Publ ic Class clsCar

2
3 4

5 6
7 8
9 10

11

Dim m sColor As String Public Property Color()As String Get Return m sColor End Get Set(ByVal Value As String) m sCola r " value End Set End Praperty End Class

Agora, adicione o cd igo da propriedade aos de M e Model , lembrando de tambm acrescentar ake duas variveis internas complementares (essas duas propriedades devem usar strings como seu tipo de dado). No aspecto geral, essa segunda maneira de declarar propriedades pode produzir resultados semelhantes, mas muito mais fle xve l porque permite que voc defina qual o cdigo necessrio para controlar apropriadamente a configurao e a recuperao de um valor da propriedade.

Propriedades Read nlye rite nly


No ser faro surgi rem propriedades que voc achar melhor serem de leitura, como a de uma , verso ou talvez uma data de criao . E muito menos comum , se no imposs vel, haver uma propriedade que possa ser alterada, porm no lida, como um campo de senha. Em verses anteriores do Vi sual Basic, voc poderia criar essas propriedades de leitura e de gravao apenas optando por no im pl emelllaro trecho Set ou Get de suas definies. Isso parcialmen te o que se faz no Visual Basic .NET. Se uma propriedade de leitura estiver sendo criada, o trecho Set de sua definio no deve ser includo, porm ReadOnly dever ser especificada como pala, vra-chave ad icional. E o que mostra o cdigo a seguir com a propriedade Descri pt ion, que um valor calculado e, portanto, no faria muito sentido grav-lo. No seria interessante configurar uma propriedade como Description porque, na verdade, ela apenas o resultado de um clculo. 1 Public ReadOnly Praperty Description()As String 2 Get 3 Return m sColar &" "& m sMake &" "& m sModel 4 End Get 5 End Property A palavra-chave usada para uma propriedade de gravao Wri teOnly e, nesse caso, s inserido o trecho Set em sua defi nio: 1 Dim m_sPassword As String 2 Publ ic WriteOnly Property Password() As String

182
1

Dia 7

3
4

5et(ByVal Value As String)


m sPassword " Value

End 5et

6 End Property

Criando a Instncia de um Objeto


Depois que voc tiver essa classe, poderemos gerar uma instncia dela em outra parte de nosso projeto. Adicione um mdu lo a ele (se lecione Project, Add Module no menu) chamado Ma i n. vb

e crie uma sub-rotina Sub Mai n{ ) em seu interior. Nesse ponto, seu mdulo deve ser semelhante
ao cd igo da Listagem 7.2.
COIGO

LISTAGEM 7.2

Criando um Mdulo Novo para Teste

1 Module Main 2 Sub Main()


3 End Sub 4 End Module

Esse novo procedimento Mai n ( ) o ponto de partida de nossa sol uo. Seu cdigo ser executado quando processarmos esse aplicativo, e a que escreveremos as instrues que trabalharo
com nossa nova classe. Para comear a usla, primeiro lemos de criar uma varivel do lipo apro priado: Dim objCar As clsCar 'ou Chapter7.clsCar . examinaremos melhor esse ponto posteriormente Essa linha parece estar declarando lima varivel comum, como uma string ou um inte iro, mas ela muito diferente. Aqui , temos uma varivel que poderia conter a referncia a um objeto do tipo cl sCar, mas que na verdade no armazena nada. Quando declaramos urna varivel alfanumri ca, urna string criada. Embora possa no ter nenhum dado, ela realmente existe. Nesse caso, no temos nada em objCar. Portanto, a prxima etapa criar uma instncia de nossa classe, o que podemos faze r com a palavrachave New: objCa r
=

New clsCar()

Agora sim criamos uma instncia de cl sCar e atribumos varivel objCar uma referncia a esse novo objeto. J podemos, por meio de objCar, acessar as propriedades desse objeto: 1 objCar.Color " "Red" 2 objCar.Make " "Ford" 3 objCa r.Model " "Esco rt" Essas propriedades podem ser recuperadas com muita fac ilidade: Dim sCarDesc As String

Trabalhando com Objetos


sCarDesc " objCar.Color & "
"& objCar.Make &" "& objCar.Model

183

J que os objetos funcionam por referncia, podemos criar variveis adicionais, todas apontando para o mesmo local: 1 2 3 4 5 6 7 8 Oim objCar As clsCa r Oim objCar2 As clsCar Oim sM ake As String objCar " New clsCar() objCar2 " objCar objCar. M ake " "Ford" objCar2 .Make " "Chevy" 'objCar2 . Make i gua l a objCar . Make

Compare isso com uma varive l que no seja de objeto, como uma string, em que o valor real transferido entre os locais: 1 Oim sFirstValue As String 2 Oim sSecondValue As St ring
3

4 5 6 7

sFirstValue " "Oog" sSecondValue " sFirstValue sSecondValue " "Cat" ' sFi r stValue <> sSecondValue

Normalmente, quando lidamos com variveis, logo que elas saem de escopo (veja o Dia 3 para obter mais informaes sobre as variveis e o escopo), deixam de existir. J que mltiplas varivei s podem apontar para um nico objeto, as regras que controlam a eliminao dele so um pouco diferentes. Quando todas as variveis que faze m referncia ao objeto no existirem mais, ele se tornar inacess vel e acabar sendo elim inado pelos servios em segundo plano da plataforma .NET. Esse processo, que chamado de co/eta de lixo, permite que o programa crie e libere livremente os objelos sabendo que o sistema o acompanha, limpando tudo que desnecessrio. Dessa maneira, a plalafolma .NET faz a limpeza para seu programa, fornecendo outro serv io s ubjacente para que nenhum dos cd igos precise se encarregar desse t ipo de operao.

Encapsulando Cdigos em Suas Classes


Agora voc j viu, no cd igo, a criao de uma c lasse, a instanciao de objetos com base nessa classe e a manipulao das propriedades desse objeto. Dando continuidade, considere a idia de lima classe, diferente de um UDT , (novamente, veja o Dia 3 para obter mais informaes sobre as estruturas ou t ipos definidos pelo usurio), que descreva mai s do que apenas um conj unto de valores, podendo incluir tambm o comportamento. Para fornecer essa implementao do comportamento, a classe apresentar mais do que apenas simples cdigos de configurao e recuperao de valores; ela tambm poder possuir um cdigo para executar a validao da propriedade e outras aes. Em nossa classe clsCar, podemos demonstrar esse recurso adicionando um cd igo de validao a nossas propriedades. Em sua est rutura atual, voc poderia con-

Dia 7

figurar a propriedade Color com qualquer valor alfanumrico, mesmo se ele nem fosse uma cor (obj Car. Co 1ar = "John"). Para tornar nossa representao do objeto Car um pOllCO mais sofisticada, podemos adicionar um trecho de cdigo que verifique qualquer valor informado em uma lista de cores e rejeite o que no tiver uma correspondncia. Isso envo lve reescrever a rotina da propriedade Color como mostra a Listagem 7.3.
COIGO
LISTAGEM

7.3

Adicionado Validao Propriedade Color

1 Public Class clsCar 2 Oim m sColor As String


3

4 5 6 7 8
9

Public Property Color() As String Get Return m sColor End Get Set(ByVal Value As String) Select Case Value.ToUpper() Case "REO" m sColor = Value Case "YELLOW" m sColor = Value Case "BLUE" m sColor = Value Case Else Oim objException As System.Exception objException = New System.ArgumentOutOfRangeException() Throw objException End Select End Set End Property

10
11 12 13 14 15 16 17 18 19

20
21

22 23 24 25
26

27 End Class Agora, uma tentativa de configurar a propriedade com uma cor invlida (invlida na lista interna de nosso cdigo, que considera a cor popular 'lils' , por exemp lo, como inadequada) resu ltar no lanamento de uma exceo. Para obter mais informaes sobre as excees e o tratamento de erros com base nelas, veja o Dia 6, "O Que Fazer quando Programas Bons Apresentam Problemas e para Se Certi fi car de Que Isso No Acontea". Como descrito nessa lio, podemos tratar corretamente essa exceo reescrevendo nosso cd igo de teste (contido em Sub Mai n( )) para que inclua uma estrutura Try . . . Catch. Esse cdigo alterado mostrado na Listagem 7.4.

Trabalhando com Objetos

185

COOIGO

LISTAGEM 7.4

Includo Tratamento de Erros em Nosso Cdi go de Teste

1 Sob MainO Dim objCar As cl sCar 2 Dim sColor As String 3


4

5
6

objCar :: New cl sCarO objCar. Year = 1999


Try

7 8 9 10
11

12 13 14 15 16 objCar.Make = "Ford" 17 objCar .Model'" "Escort" 18 System.Console.WriteL i ne(objCar.Description) 19 End Sub

ob j Car.Color = "Green" Catch objException As System .ArgumentOutOfRangeException 'Opa! Trate o erro! Sys tem. Conso I e. Wri teL i ne ("Opa! ") End Try seolor = objCar.Color

Alm da validao da propriedade, que por si s j poderosa, uma classe pode conter uma funo ou sub-rotina que no faa parte de nenhum cd igo de recuperao ou configurao da propriedade, geralmente chamada mtodo. Os mtodos so criados para fornecer uma funcional idade relacionada a um objeto e em geral agem com base nas informaes da propriedade (porque esto disponveis). Para nossa classe cl sCar, um mtodo til pode ser gerar o tempo de existncia do carro comparando a data e a hora aluais com uma propri edade desse que represente sua data de produo. Criar a propriedade da data de produo relativamente simples. Ser do mesmo modo como a propriedade anterior exceto que uma data, e adicionar esse mtodo mesmo to fci l quanto criar LIma funo pblica na definio de nossa classe. Prime iro, a nova propriedade:
1 Dim m dtManufactured As Date 2 3 Public Property Manufactured() As Date 4 Get 5 Return m dtM - anufactured 6 End Get Set (ByVal Value As Date) 7 m dtManufactured = value 8 End Set 9 10 End Property

186

Dia 7

NO TA

Se crissemos essa funo como privada, ela poderia ser util izada a partir dessa classe, mas no estaria disponvel para nenhum outro Cdigo. Como alternativa, tambm podemos declarar etementos de nossa classe {propriedades, funes, sub-rotinasl como Friend. Essa declarao assegura que Cdigos dentro da mesma montagem possam acessar essas partes da classe como se fossem pbl icas, mas que elas estejam ocultas (privadas) para qualquer cdi go externo montagem da classe. (As montagens sero abordadas com deta-

lhes como parte da implantao no Dia 19,

~Implan t ando

Seu Aplicativo"; por

enquanto considere-as como as vrias partes de uma mesma soluo.)

A Listagem 7.5 mostra o novo mtodo.


COOIGO

LISTAGEM 7.5

O Mtodo GetAge

1 Publ ic Function GetAge() As Long Dim l ngDays As long 2 Dim dtCurrent As Date 3 4 dtCurrent ; System . DateTime.Today 5 lngDays = dtCurrent.Subtract( m_dtManufactured).Days 6 Return l ngDays 7 End Funct i on Depois que tivermos adicionado esse cdigo a nossa classe, poderemos cham-lo por meio de qualquer instncia (objCar.GetAge( ), como na Listagem 7.6.
COOIGO

LISTAGEM 7.6

Usando Nosso Mtodo Novo

1 2 3 4

Dim objCar As clsCar objcar = New clsCar() objCar.Manufactured = 130/1/2 0001 System. Console.WriteLine(objCar.GetAge())

Em algumas situaes, o novo mtodo seria mais adequado como uma propriedade (que, ento, renomearamos para Age, j que seria um atributo, e no uma ao) porque na verdade no executa nenhuma ao e s retorna um valor. Para nossa classe Car, um exemplo melhor de mtodo poderia ser algo relacionado ao, como StartEngine, cuja implementao fornecida na listagem 7.7.
COOIGO

LISTAGEM 7.7

Nosso Novo Mtodo Orientado Aao

1 Public Sub StartEngine() 2 Sys tem. Conso 1e. Wri teL i ne (" Vroom , Vroom . .. ! ! ! ") 3 End Sub

Trabalhando com Objetos

Com esse cdigo adicionado a clsCar, teramos disponvel um mtodo mais orientado ao. Por meio de uma combinao de propriedades (algumas com cdigo e outras sem) e mtodos, possve l criar obj etos complexos. Lem bre-se de que todos os objetos que compem o .NET Framework (como System.Console e outros) foram construdos de acordo com essas regras, e os que voc criar tero as mesmas caractersticas deles. A nica di ferena existente entre os objetos do .NET Framework e os seus que esses no precisam ser escri tos no Framework!

Tpicos Avanados
Embora as propriedades e mtodos pennitam que voc crie objetos complexos e poderosos, o suporte ao objelo na plataforma .NET possu i muitos outros recursos alm desses bsicos. Os recursos avanados facilitaro a representao de conceitos e ent idades em nosso cd igo, produzi ndo um sistema mais simples em termos de utili zao, manuteno e expanso. Apesar de esse s uporte ser amplo, forneceremos uma v iso geral das cinco reas principais: sobreposio, herana, construtores, espaos de nome e membros estticos da classe.

Sobreposio
Esta seo aborda os aspectos bsicos da sobreposio; deta lhes adic ionais sero discutidos no Dia 15, quando criarmos nossos prprios o bjetos. A sobrepos io permite que uma nica funo ou s ub-rotina com vrios parmetros d iferentes seja chamada. Isso possibilita que um s mtodo, por exemplo, aceite os parmetros em combinaes distintas ou usando tipos de dados diversos. Portanto, voltando ao nosso exemplo de c1 sCar, seria possvel projetar o mtodo GetAge de modo que ele pudesse funcionar de uma entre vrias maneiras. A implementao existente no usa parmetros e relorna a diferena em dias entre a data aluai e a dc produo, mas talvez tambm qui sssemos perm itir que o usurio de nosso objeto soli citasse a diferena entre a data da produo e qualquer outra aleatria e ainda especificasse a unidade de tempo a ser usada. Para fazer isso sem esse conceito de sobreposio, teramos de criar uma funo d iferente para cada chamada possvel, como na Listagem 7. 8.
COOIGO LISTAGEM

7.8

Criando Vria s Opes em um nico Mtodo

1 Pub1ic Function GetAge()As Long 2 Dim lngDays As long 3 Dim dtCurrent As Date dtCu rrent = System . DateTime . Today 4 5 1ngDays = dtCurrent.Subtract(m_dtManufactured).Days 6 Return 1ngDays 7 End Funct i on
8

9 Pub1ic Funct i on GetAgeAtDate(ByVal dtPointlnTi me As Date) As long 10 Dim lngDays As long 11 1ngDays = dt Po i ntlnTime.Subtract(m_dtManufactured).Days

188

Dia 7

COOIGO

LISTAGEM 7.8

Criando Vrias Opes em

l.I11

Unico Mtodo (continuao)

12 Return l ngOays 13 End Function


14

15 Public Function GetAgelnUnits(ByVal sUnit As String) As long 16 Dim lngUnits As Long 17 Dim dtCurrent As Date 18 Dim tsDifference As System. TimeSpan 19 dtCurrent : System.DateTime.Today 20 tsDifferenee : dtCurrent.Subtraet(m_dtManufaetured) 21 Seleet Case sUnit 22 Case "Hours" 23 1ngUnits : tsDi fference. Hours
24

25 26
27

Case "Days" 1ngUnits : tsDi fference. Days Case "Mi nutes" 1ngUnits : tsDi fference .Mi nutes

28 29
30

31 Case "Years" 32 lngUnits : tsDifference.Oays \ 365 33 End Select 34 Return lngUnits 35 End Function Todas essas funes na verdade so apenas variaes de GetAge, mas cada lista de parmetros diferente e seu cd igo correspondente precisa de seu prprio nome de funo. Com a sobreposio, eliminamos essa restrio e podemos criar todas essas funes usando o mesmo nome, GetAge. Para usar esse recurso, tudo que precisamos fazer adicionar a palavra-chave Overloads frente de cada (incluindo a original) declarao de funo (antes de Publ ic) e alterar todos os nomes das funes para que usem apenas um : Public Overloads Function GetAge() As Long End Function Public Overloads Function GetAge(ByVal dtPointlnTime As D ate) As Long End Function Public Overloads Function GetAge(ByVal sUnit As String) As Long End Function No cd igo de nosso exemplo que usa essa funo, j podemos escolher qualquer uma das trs declaraes que ela pode uti lizar (veja a Figura 7.2).

Trabalhando com Objetos

189

NOTA

Cada declarao de fun o deve ser diferente de alguma maneira - quantidade de parmetros, tipo de dados do parmetro ou do valor de retorno -, ou no poder ser usada.

A sobreposio representa o conceito de que a mesmaao ou solicitao pode ser usada de vrias maneiras e pennite que voc use esse recurso na modelagem de seu objeto sem ter de recorrer criao de diversos mtodos diferentes (GetAge, GetAgeFromDate e outros). Essa tcnica lIsada em todo o .NET Framework para permitir a chamada de funes com vrios conjuntos de parmetros diferentes. Considere, por exemplo, o mtodo Sys tem.Consol e. Wri teL i ne, que pode ser chamado usando qualquer uma das 18 listas diferentes de parmetros. Como o Framework demonstra, essa uma maneira til de sim plificaros objelos e fornecer mais opes aos programas que os usam.
7.2 Todas as I'erses di~pollheis de 1111/0
FIGURA

funo serlio mostradas por meio do ImelliSense qllal/do voc IIsar o Visual 5/l/dio . NET para criaI" 1/111 c/ieme.

.oa "" ' 9I>,!!f .CO!% fi. ""


$':!I , .... ~ .... ' ' , .<d' $':!I )O . ...... I _ ", ...,,... I?,,' '''.CO''' ' , ...... L, .. ,.. , ,"' .p .... " llUI
. . l C...... .. . . ' . .. d " I>O" DON

""'C" " "" .,"""'!,

. , ...... c..... . . ... ,u L, .. ,OOIle"" .0"'_ 0)

.......

."

Herana
Para algumas pessoas, este um dos recursos mais estimulantes do Visual Basic .NET - um recurso considerado fundamenta l para a criao de sistemas com base em objelos e que raltava no Visual Basic al esta verso. No vou questionar essa opinio, mas de alguma forma consegui desenvolver sistemas por muitos anos, sem a herana, antes que a plataforma .NET chegasse. Independentemente disso, a incluso da herana na linguagem do Visual Basic um recurso importante e vale uma pequena discusso. Como j abordei nesta lio, os objetos so maneiras de voc representar conceitos ou entidades no cdigo, e todos os recursos de objetos no Visual Basic foram projetados para ajud-lo a tornar a representao o mais ti I possvel. Em muitas situaes, uma entidade ou conceito na verdade

190
1

Dia 7

o que chamaramos de um subobjeto de lima entidade ou conceito mai s bsico. Vrios exemplos disso so usados em livros de programao e infelizmente no apresentarei nada to revol u-

cionrio. Considere nossa classe de objetos criada para representar carros, como um Ford
Mustang, um Toyota Celi ca ou um Chevy Cavalier, A classe teria vrias propriedades, como 00 ors (quantidade de ponas que o carro possui), MaxSpeed , Color e Qutras.
A classe Car geral, na verdade, contm vrias subclasses de objetos, como Hatchbacks e Conver ti bl e5. E claro que essas classes teriam todas as propriedades de sua classe-pai , Car, como Do-

or5, MaxSpeed e Colar, mas tambm poderiam ter propriedades exclusivamente suas. Um carro de dois mdulos poderia ter propriedades que descrevessem o tamanho e o com portamento de sua porta traseira. Esse relacionamento, entre Car e suas subclasses, Hatchback e Convertible, seria considerado um relac ionamento pai-filho, e o mtodo para represent-lo em nossos sistemas chamado herana. Diz-se da classe Hatchback que ela herdeira de sua classe bs ica, Caro Esse relacionamento sign ifica que, alm de qualquer mtodo e propriedade criados na classe-filha , ela tambm possu ir todas as propriedades e mtodos herdados do seu pai.
O exemplo anterior foi iniciado com nossa classe Car e segu iu da em diante. Usemos o mesmo ponto de partida, Car, e sigamos em direo a um exemplo mais detalhado de herana. Para comear, poderamos ter uma classe bsica Vehi c1e para representar qualquer tipo de veiculo (barco, carro, cam inho, av io) e que possusse as propriedades MaxSpeed, NumberOfPasssengers, Co 1or e Oescri ption . Essa classe seria facilmente representada em um cd igo do Vi sual Basic, como mostra a Listagem 7.9 .
COOIGO LISTAGEM 7 .9

Nossa Classe de Veculos

1 Public Class Vehicle

2 3
4

6
7

8
9

Public Property MaxSpeed () As Long Get End Get Set(ByVal Value As Long) End Set End Property Public Property NumberOfPassenge r s{) As Long Get End Get Set(ByVal Value As Long) End Set End Property Public Property Color() As String Get

10 11
12

13
14

15 16 17 18 19

20

Traba lh a ndo com Objetos

19 1

COOIGO

LISTAGEM 7 .9

Nossa Classe de Veculos (continuao)

21 End Get 22 Set(ByVal Value As String) 23 End Set 24 End Property 25 26 Public function Oescription{) As String 27 End Function 28 End Class

o cd igo que usado em vrios proced imentos dessa classe no re levante para nosso exemp lo,
portanto o deixaremos de fora por enquanto. Se passssemos para algum outro cdigo, tentando usar nosso objeto (que poderia ser o da sub-rotina Sub Ma i n ( ) de nosso projeto, como em exemplos anteriores), perceberamos que possve l criar objetos do tipo Vehi cl e e trabalhar com suas propriedades, como na Listagem 7.10.
COOIGO LISTAGEM 7 .10

Trabalhando com Nossa Classe de Veculos

1 Module UseVehicle 2 Sub Main() 3 Oim objVehicle As Veh ic le 4 objVehicle = New Vehicle()
5

6 objVehicle.Color = "Red" 7 objVehicle.MaxSpeed = 100 8 End Sub 9 End Module Agora, adicionando urna classe complementar a nosso projeto (veja a Listagem 7. 11), podemos criar uma classe (Ca r) que herde caracterst icas de Vehi c I e, exatamente como a classe real de objelos Car uma subclasse ou filha da classe Vehi cl e. J que estamos gerando uma classe projetada para tratar apenas de carros, podemos ad icionar duas propriedades (NumberOfOoors e NumberOfTi res) especficas dessa subclasse de Vehi ele.
CDIGO LISTAGEM 7 .11

Cri ando uma Cl asse - fi 1ha

1 Publ i c Class Car 2 Inherits Veh i cle


3

4 5
6 7

Public Property NumberOfTires() As Integer Get End Get

192

Dia 7

COOIGO

LISTAGEM 7.11 Criando uma Classe - Filha (continuao)

8
9
10 11

Set(ByVal Value As Integer)


End Set End Property

12

13
14 15
16

Public Property NumberOfOoors() As Integer


Get
End Get

17
18 19

Set(ByVal Value As Integer)


End Set

20
21

End Property

22 End Class
A parte essencial desse cdigo a li nha Inheri t s Vehi cl e, que informa ao Vi sual Basic que a classe fil ha de Vehicle e, portanto, deve herdar todas as propriedades e mtodos dessa classe. Novamente, no h nenhum cd igo inserido na definio de qualquer dessas propriedades porque isso no relevante no momento. Depois que esse cdigo estiver posic ionado, sem nenhum esforo adicional, poderemos ver o efeito da instruo Inherits.
Voltando a nosso procedimento Main{ ), podemos criar um objeto do tipo Car, e logo veremos ele expor tanto suas propriedades quanto as da classe-pai (veja a Figura 7.3).
Quando uma classe herdada adiciona novos mtodos ou propriedades, diz-se que a classe bs ica est-se estendendo. Alm da extenso, tambm possvel que uma classe-filha sobreponha alguma ou toda a funcionalidade da classe bsica. Isso acontece quando a classe-filha implementa um mtodo ou propriedade que tambm definido na c lasse-pai ou bs ica. Nesse caso, o cdigo da classe-fi lha ser executado em vez do cd igo do pai, permitindo que voc crie verses especializadas da propriedade ou mtodo bsico. Para uma classe-filha sobrepor alguma parte da classe bsica, essa parcela deve ser marcada com Overridab 1e na defin io da c lasse bsica. Por exemplo, na verso de Veh icl e listada anteriormente, nen huma de suas propriedades possua a palavra-chave Overridable e, portanto, as classes-filhas no poderiam forn ecer suas prprias imp lementaes. Em uma de monstrao de como a sobreposio configurada nas classes bsica e fi lha, o cd igo da Listagem 7. 12 marcar a funo Description{ ) como podendo ser sobreposta e, em seguida, a sobrepor na classe-filha CaroObserve que as pmtes no relevantes das duas classes foram removidas para dar maior clareza.

Traba lh a ndo com Objetos

193

FIGURA 7 .3

(do.

As classes expem

tJ ~iilGII

__

~_!OOk_'"

:t.~ ft

...,

.. .>J . q

Iodas as suas propriedades e


mlodos pblico.~. alm dos da classe em que esliiv baseadas.

... .......'v................. '

"'lV,.,.'o.CoLo, ' '"",,"


LOO

_.,L., <O,,,,,, ........ u

o", "')'"e.'.',c.. V_" .. . o... ""Co< ...


~. .

"'J<o<

Cu!)

I.'
COIGO LISTAGEM

7.12

Usando as Pa l avras - Chave Overridable e Overrides

1 Public Class Vehicle 2 3 'Cdigo removido para fins de simplificao . .. .


4

5 Public Overridable Function Description() As String 6 Return "Essa minha descrio genrica de veiculo!" 7 End Function 8 End C1ass 9 10 Pub1ic C1ass Car 11 Inherits Vehic1e
12

13
14

'Cdigo remov i do para fins de simpli f icao ....

15 Pub1ic Overrides Function Description{) As String 16 Return "Essa a descrio do meu carro" 17 End Funct i on 18 19 End Class

Quando sobrepuser um mtodo ou propriedade, como fize mos na Listagem 7.12, voc poder se referir novamente ao membro origi nal da classe bsica usando o objeto interno MyBase. Por exemplo, para se referir ao mtodo Descript ion{ ) ex istente na classe Vehi c1 e, poderamos chamarMyBase. Descri pti on ( ) de dentro do mtodo Descri pt i on ( ) de Caro Esse recurso permite o

194
1

Dia 7

fornecimento de uma funcionalidade adicional podendo-se empregar a sobreposio sem que depois seja necessrio recompor todo o cdigo original. Alm de marcar o cdigo como Overridabl e, tambm possvel marcar um mtodo ou propriedade como MustOverri de e lima classe como Mustlnheri t. A palavra-chave MustOverride indica

que toda fi lha dessa classe deve fornecer sua prpria verso dessa propriedade ou mtodo, e a palavra-chave MustInheri t significa que essa classe no pode ser usada sozinha (voc deve basear ,
outras classes nela). E importante observar que se lima classe tiver um mtodo marcado com MustOverride, ento, ela prpria deve ser marcada com MustInherit. A herana um tpico extenso e no o abordamos completamente, mas com as informaes for

necidas nesta Iio, voc estar pronto para comear a projetar alguns apl icativos que se benefi ciem desse recurso dos objetos.

A Base de Todas as Classes Bsicas


Se voc examinar a li sta do que exposto por essa nova instncia da classe Car, ver mais do que as propriedades de Vehi c1 e e de CaroOs mtodos ToStri ng ( ) e GetType( ) so expostos por esse objeto, mas no fazem parte dessa classe ou de sua classepai. Esses mtodos so na verdade ou tro resultado da herana . Enquanto Car herda caractersticas de Vehic1e, tanto Vehicle quanto Car (e todas as outras classes da plataforma .NET) herdam caractersticas da classe bsica Sys tem Obj cct. Essa classe bsica definitiva fornece alguns mtodos que automaticamente faro . parte de toda classe que criarmos. Urna conseqnci a adicional da herana, que decerto vale a pena mencionar, se percebe na rea dos tipos de dados. Como disc utimos no Dia 3, toda varivel se enquadra em algum tipo de dado, e os objetos no so excees. Quando declaramos urna varivel corno do tipo Car, isso to res trito quanto a tipificao de dados corno inteiros e strings. Se criannos o parmetro de urna fun o com esse tipo, ento, apenas esse tipo de objeto poder ser passado para ela. Em uma situao de herana, a classe-fi lha atua como se fosse urn a instnc ia da classe-pai. Isso significa, em nosso exemplo, que podemos inserir nossos objetos Car em argumentos de procedimentos e variveis que sejam do tipo Vehi c1 e. A Listagem 7.13 mostra um exem plo.
CDIGO

LISTAGEM

7.13 U Classe-Filha Agindo como uma Instnc ia da ma Classe-Pai

1 Sub MainO 2 Dim objVehicle As Vehicle 3 Dim objCar As Car 4 objCar " New CarO
5

6 7
8

objCar.NumberOfDoors " 4 objCar.NumberOfPassengers " 6 objVehicle " objCar

Trabalhando com Objetos

195

COOIGO
10

LISTAGEM 7.13 Uma Classe - Filha Agindo como uma Instncia da Cl asse - Pa i (continuao)

11 objVehicle.Color = "Red" 12 objVehicle. MaxSpeed = 100 13 End Sub A instncia de Ca r representada por obj Ca r foi fac iImente inserida na varivel obj Veh i c 1e, e desse ponto em diante poderia ser tratada como um objeto Vehicle. Esse fato, de que um objeto-filho pode ser usado corno se fosse urna instncia da classe-pai, permite a criao de um cd igo genrico que funcionar com urna classe ou qualquer uma de suas subclasses . Essa urna das maneiras como a herana pode ser empregada para gerar solues melhores, mas h muitas outras. Apresentei uma viso geral do assu nto herana, e ele merece uma discusso adicional tanto do ponto de vista do projeto quanto da implementao. Por essa razo, esse tpico e outras abordagens relacionadas a objetos sero examinados com mais detalhes no restante do livro.

Construtores
Quando voc deseja usar um objeto, tem de trabalhar com uma instncia ex istente ou criar a sua. A instnc ia de um objeto gerada com a palavra-chave New, que emprega a classe especificada e estabcl ece uma rea na memria para a instncia dessa classe. Os cOl1slrulores so uma maneira de fornecer infonnaes para essa classe no momento em que gerada para permitir que ela mesma se inicialize ou execute outras tarefas de configurao nessa hora. Se uma classe for um construtor, e muitas classes do .NET Framework so, ento, em geral possvel fornecer parmetros no momento da criao, como parte da chamada a New. O cdigo a seguir mostra esse trabalho na criao de um novo objeto de exceo (veja o Dia 6 para obter mais infonnaes sobre as excecs e outros tpicos de tratamento de erros), fornecendo uma mensagem de erro como parmetro para seu construtor. Essa mensagem de erro ser lIsada de modo automtico pelo novo objeto para preencher uma das propriedades. Dim exError As System . Exception Dim sMessage As String sMessage = "Essa ser a mensagem de erro ." exError = New System.Exception(sMessage) A criao de um construtor para nossa classe Vehi cl e relativamente fcil. Primeiro, voc precisa gerar um mtodo chamado New que seja pblico e no tenha parmetros. Public Sub New() End Sub Aps conclu ir a criao desse construtor (isso ainda no produz nenhum resultado), voc ver pouca diferena em seu cd igo, e at que adicionemos alguma fun cionalidade a essa sub-rot ina New( ), nada diferente acontecer. O construtor, mesmo sem parmetros, pode ser usado como

Di a 7

um local para inicializar variveis internas, como a data de produo de nossa classe Vehicle (veja a Listagem 7. 14).
CDIGO

LISTAGEM 7.14 Usando um Construtor para Inicializar os Membros de uma Cl asse


=

1 2
3

Public Sub New() m dtManufactured End Sub

System.Oate.Now()

Exatamente como com qualquer outro mtodo de um objeto, possvel sobrepor esse e fornecer mais de uma maneira de cham-lo. Ao contrrio dos outros mtodos, no entanto, sobrepor o construtor no requer o uso da pa lavra-chave Overloads. Voc pode apenas criar m ltip las verses do procedimento New, e cada uma ser tratada como uma verso disponvel do construtor. Em nosso caso, poderamos rapidamente gerar alguns construtores teis (mostrados na Li stagem 7.15) cons iderando as diferentes mane iras nas quais algum pode querer inicializar nosso objeto.
CDIGO

LISTAGEM 7.15 Sobrepondo o Construtor de uma Classe para Fornecer Maneiras de Inicializar Objetos
=

1 2
3

Public Sub New() m dtManufactured End Sub

System.Oate.Now()

4
5

6 7 8
9

Public Sub New(ByVal sColor As String) m dtManufactured = system.Oate.Now m seolor = sColor End Sub Public Sub New{ByVal dtManufactured As Date, ByVal sColor As String) m dtManufactured = dtManufactured m sCo l or = seolor End Sub

10
11

12 13
14 15 16

17

No caso de uma classe-filha, aquela que herda caractersticas de outra classe, voc pode querer chamar o construtor da classe bsica de seu procedimento New. Isso pode ser feito fac il mente com o uso do objeto especial MyBase, empregando um cdigo como MyBase.New( l.

Trabalhando com Objetos

197

Espaos de Nome

o espao de nome um conceito abstrato usado para agrupar vrios mdulos ou classes, permi
tindo que voc categorize logicamente todos esses objetos dent ro de um nico objeto de nvel superior. Portanto, tendo Namespace Chapter7 no in cio de nossas classes e End Namespace no fin al, criamos de modo efet ivo um agrupamento chamado Chapter7, que contm todas as nossas classes dentro dele. Depois que esse espao de nome exist ir, ser usado corno padro para referncias a objel0s feitas em um cdigo dentro do mesmo espao de nome, mas tambm poder ser declarado exp licitamente (Dim objCar as Chapter7 . Car). H muitas razes pelas quais voc pode querer criar e usar espaos de nome, e no so poucas delas a base do 'espao de nome' identilicador, como uma maneira de gerar uma rea privada para assegurar que os nomes de sua classe sejam exclus ivos. Pe la defin io de um espao de nome, nossa classe Car se torna Chapter7 . Ca r, e, portanto, no entrar mais em conn ito com nenhuma outra classe criada com o nome Caro Outra razo mais sutil para usar os espaos de nome porque produzem um cdigo em que a manuteno mais fc il. O agrupamen to de classes sob espaos de nome de nvel superior resulta em um cdigo que definido claramente por algum esquema de categorizao sendo, portanto, mais legvel e sua manuteno mais sim ples. Em nossos exemplos no decorrer deste livro, poderamos ter criado espaos de nome com base no ttulo da lio (por exem plo, o cdigo integral desta lio seria inserido sob o espao de nome Dia7), podendo todos eles, em seguida, ser posicionados sob um espao de nom e mais abrangente com relao ao livro chamado AprendaV8. Nossas classes poderiam ser criadas apenas corno Di a7, mas para assegurar que no houvesse ambigidades, tam bm poderamos nos referir a elas com seu nome totalmente qual ifi cado (Aprenda V8 . Di a7 . Car, por exemplo). Esse mtodo de agrupar classes semelhante ao conceito de escopo que foi discutido no Dia 3; lima classe s tem de ser exclusiva dentro de seu espao de nome especi fi co. Se por acaso voc criar uma classe que com partilhe seu nome com outra que exista em um espao de nome diferente, ento, precisar se certi fi car de especi ficar o nome completo da classe sempre que fi zer referncia a ela de fo ra de seu espao de nome.
Os espaos de nome so hierrq uicos, o que penn ite que voc crie um esquema com vrios nveis para agrupar suas classes e objetos, exatamente como dentro do prprio .NET Framework. H duas

maneiras de criar um espao de nome de nvel inferior. Defina-o usando o nome totalmente qualificado (veja a Listagem 7. 16) ou aninhe as definies dos espaos de nome (veja a Listagem 7.17).
CDIGO LISTAGEM 7 .16

Decla r ando um Espao de Nome com Vria s Partes

1 Imports System

2 Namespace MyApp.Console 3 Modu le Main 4 Sub Main()

198

Dia 7

COOIGO

LISTAGEM 7.16 Declarando um Espao de Nome com Vrias Partes

5 6
7

Dim objHW As New MyApp.Console.Utilities() objHW,PrintOut()


End Sub

8
9 10
11 12

End Module
Public Class Utilities
'Run the application Public Sub PrintOutO

13 14 15 16
17

Console.WriteLine(Environment.MachineName) Console.Writeline(Environment.SystemDirectory) Console.Writeline(Environment.GetLogicalDrives{ Console.Writeline(Environment.Version.ToStri ng(


End Sub

18 End Class 19 End Namespace

COOIGO

LISTAGEM 7.17 Usando Espaos de Nome Aninhados para Criar Hie -

rarquias de Objetos

1 Imports System 2 Namespace MyApp 3 Namespace Console 4 Module Main


5 Sub MainO

6 7

8 9 10 11 Publlc Class Utilities 12 'Run the application 13 Public Sub PrintOutO 14 Conso 1e. Wri tel i ne (Env i ronment. Mach i neName) 15 Conso 1e. Wri tel i ne (Env i ronment. Sys temOi rectory) 16 Console.Writeline{Environment.GetlogicalOrives{ 17 Consol e.Wri tel i ne{Envi ronment. Version. ToStri n9 O) 18 End Sub 19 End Class 20 End Namespace 21 End Namespace

Oim objHW As New MyApp.Console . Utilities() objHW.PrintOut() End Sub End Module

Trabalhando com Objetos

Em seus aplicativos, voc pode usar os espaos de nome como lima maneira de agrupar cdigos conceituai mente relac ionados, mas alm de seu efeito no escopo das classes, eles no so realmente necessrios na construo de um sistema.

Membros e Objetos Compartilhados


No comeo desta lio, quando descrevemos o relacionamento entre as classes e os objetos, voc aprendeu que para usar qualq uer propriedade ou mtodo especificado em uma classe teria de empregar ou criar uma instncia dessa classe. Em geral, isso que acontece; no possvel trabalhar diretamente com uma classe, apenas com as instncias dela que forem criadas. H uma maneira de expor uma certa funcionalidade por meio da prpria classe, no entanto, independentemente de qualquer instncia particular dela, com o uso da palavra-chave Shared. Essa palavra-chave, como os outros descritores que foram vistos (como Publ i c, Pri vate e Fri end), significa que parte de uma classe est disponvel sem a criao de uma instncia. O .NET Frame\Vork usa esse recurso em suas classes, como a propriedade exposta Today da classe System. Da teTime (cujo exem plo mostrado na Li stagem 7.18). CDIGO LISTAGEM 7.18 Funes Internas do Visua l Basic 6.0 Foram Substitu das pelos Mtodos Compartilhados no Visual Basic .NET

1 Imports System 2 Module M ain 3 Sub Main() 4 Dim dtToday As Date 5 dtToday = DateTi me .Today() End Sub 6 7 End Module Esses membros compart ilhados podem ser criados em seu prprio cd igo quando voc quiser que um mtodo ou propriedade em particu lar esteja se mpre acessvel, sem a sobrecarga de gerar um objeto. Em geral, no entanto, ev ite usar esse recurso a menos que seja realmente necessrio porque ter muitos membros comparti lhados quase o mesmo que apenas criar um mdulo cheio de proced imentos e reduz o sign ificado de seus objetos. Lembre-se de que Modul es um tipo especial de Class, todos os membros de um mdu lo so considerados compartilhados (Shared) por padro.

Resumo
o .NET Frame\Vork Lima biblioteca de classes que voc pode usar em seus aplicativos, Iodas
elas construdas a partir dos principios bsicos da programao orientada a objetos, comuns s linguagens. NET. Esses princpios (o conceito de classes, instncias, propriedades, mtodos, herana e assim por diante) tambm sero a base da criao das classes de sua autoria dentro do Vi-

Dia 7

suai Basic .NET. Para desenvolver qualquer aplicativo que v alm do exemplo mais si mples, ser necessrio empregar o .NET Framework e, com freqnc ia, tambm ser preciso gerar suas prprias classes, tornando a utilizao de objetos uma habilidade essencial para todos os programadores da platafonna .NET. Nesta lio abordamos, por meio da criao de nossas classes como exemplo, conceitos bsicos orientados a objetos e mostramos como implement-los em um cdigo de sua autoria. Na prxima lio, Dia 8, introduziremos as classes disponveis no .NET Framework e ilustraremos como empreg-Ias para desenvo lver poderosos aplicat ivos .NET.

P&R
P Nunca trabalh ei com uma linguagem orientada a objetos antes; posso fi car a penas nos procedimentos e mdulos?
R Voc no precisa criar objetos no Visual Basic .NET, mas achar difcil usar essa linguagem sem empregar pelo menos alguns de les, como o .NET Framework. Por essa razo, o enfoque inicial para um desenvolvedor que no conhea objetos se familiarizar com sua ut ilizao antes de passar para sua criao.

P Li que, no Visual Basic .NET, no possvel dizer exata mente quando um objeto ser eliminado e que esse um fat or limitante por v rias razes. O qu e significam esses comentrios, e eles si"io verdadei ros?
R Quando se trabalha com objetos, s ua eliminao nem sempre ocorre em um ponto definido do cdigo, portanto, ser d ifcil fazer com que um certo trecho desse seja executado sempre que um objeto for destru do. Em algumas linguagens, incluindo as verses anteriores do Visual Basic, havia um mecanismo disponvel para adicionar um cdigo ao procedimento de um ' evento de el iminao' . O cdigo inserido em um procedimento desse tipo teria sua execuo garantida sempre que o objeto fosse elim inado. No Vis ual Basic .NET, o subsistema de coleta de lixo e liminar os objetos quando necessrio, mas no passiveI criar um cdigo que seja processado na hora da destruio. Em geral, essa ' limitao' no causa mu itos problemas, mas s vezes (principalmente quando se transfere um cdigo antigo do Vis ua l Basic) h a expectativa da execuo de um cdigo no fi nai do ciclo de vida do objeto, e isso no fac ilmente transferido para uma implementao do Visual Basic .NET.

Workshop
o Workshop foi planejado para aj ud-lo a antecipar possveis dvidas, revisar o quej aprendeu
e comear a pensar em corno colocar seu conhecimento em prtica. As respostas do teste esto no Apndice A, " Respostas dos Testes/Exerccios".

Traba lh a ndo com Objetos

201

Teste
I. Se uma classe tiver um mtodo marcado com MustOverride, o que mais acontecer? 2. Qual a palavra-chave que voc pode usar em um construtor para chamar o de uma classe bsica? 3. O que est errado nos construtores sobrepostos desse cd igo (veja a Listagem 7. 19)?
CDIGO

LISTAGEM

7.19 Verses Diferentes de Construtores Disponveis para a Classe Vehicle

1 Public Class Vehicle Dim m dtManufactured As Date 2 3 Dim m_lngNumberOfPassengers As Long 4 Dim m_sColor As String
5

6 7 8
9

Public Sub New() m dtManufactured End Sub

System . DateTime.Now()

10 11 12 13
14

Public Sub New(ByVal sColor As String) m dtManufactured = System.DateTime.Now() m sColor =sColor End Sub Public Sub New(ByVal sName As String) End Sub Public Sub New(ByVal dtManufactured As Date, ByVal sColor As String) m dtManufactured = dtManufactured m sColor = sColor End Sub

15 16
17
18
19

20 21 22

23 24 End Class

Exerccios
Por meio da herana, das classes, das propriedades e dos mtodos, crie um exemp lo de hierarquia de classes comeando em Animal e descendo alguns nveis com algumas classes ilustrativas.

202

Dia 7

SEMANA
Reviso

Agora que voc terminou sua trajetria pela primeira semana de lies, j deve ter uma boa com-

preenso da programao, do Visual Basic .NET e de como tudo se encaixa. (Dias 1 e 2). Tambm criou alguns exemplos de programas na plataforma .NET, lIsandotantoo IDE quanloa linha de comando para compil-los. Com essa experincia, j pode testar todos os exemplos deste livro e at . cnar os seus. A lio sobre os tipos de dados e as tcnicas bsicas de programao usadas na criao de aplicativos do Visual Basic .NET ( Dia 3) forneceu- lhe uma boa introduo programao simples. O Dia 4 apresen tou as instrues condiciona is (inclus ive as instrues If) e laos, dois itens que sero empregados em quase todos os programas que vier a escrever. Pelo fato de o Visual Bas ic .NET permitir a gerao de tantos tipos diferentes de programas, por meio de uma grande variedade de projetas e diversos arquivos-fonte, o Dia 4 abordou as opes de arquitetura para desenvolver todas as espcies dist intas de sistemas que a plataforma.N ET pode ser usada para criar. Independentemente da sua habilidade em programao, erros sempre ocorrem em programas. No importando se eles poderiam ser ev itados, as tcnicas de tratamento de erros abordadas no Dia 6 permitem que voc lide com o problema de mane ira sofisticada. Para concluir, j que grande parte do .NET Framework baseada em objetos, o enfoque da lio do Dia 7 foi sobre os termos e conce itos necessrios para possi bilitar o uso de objetos em se us prprios programas. Todas essas informaes, bem com o a prtica da codificao que as acompanhou, devem t- lo preparado para encarar o primeiro projeto como bon ifi cao (The Game of Li fe - O Jogo da Vida). Esse projeto, que voc pode encontrar acessando a pgina Web deste li vro no site www .m akron.om.br (veja a Introduo para maiores detalhes), alm de conduzi-lo na criao de um programa real completo, il ustra o uso de instrues condicionais, arrays, laos, variveis e at tcnicas de tratamento de erros mostradas no decorrer das lies que acabamos de concluir. Leia o material, desenvo lva o projeto e faa testes com os resultados durante algum tempo. Quando estiver pronto para seguir em frente, tente modificar o cdigo para alterar como o programa funciona, criando a sua prpria variao dele.

SEMANA

Viso Geral
Durante esta semana, voc se aprofundar realmente no estimulante mundo do
.NET Framework. Ela comea com uma lio no prprio Framework (Dia 8), incluindo detalhes sobre o uso das classes Consol e.Math . Random e Envi ronment, e informaes sobre toda a exce lente funciona lidade das listas e arrays forneci-

da pelo Framework. Alm de todas essas particularidades, essa li o tambm inclui uma introduo a como encontrar o recurso necessrio no .NET Framework por sua prpria conta - informaes valiosas quando voc iniciar projetas de sua autoria usando a plataforma .NET. As prx imas duas lies, Dias 9 e 10, enfocam a criao de uma interface com o usurio em seus aplicativos, para Wi ndows (usando os formulrios Windows, Dia 9) ou para a Web (usando a tecno logia dos fonnulri os da Web, abordada no Dia 10). Poucos programas so exec utados sem alguma interface com o usurio, o que torna essas duas lies absolutamente essenciais. Quase todo aplicativo empresarial existente usa algum tipo de banco de dados, portanto, voc passar duas lies exam inando esse tpico. O Dia I I aborda os conceitos subjacentes aos bancos de dados e o conduz pela criao de um deles para um aplicativo de registro de CDs. O Dia 12 d prossegu imento lio sobre dados mostrando como se conectar ao banco de dados de seu exemplo e desenvolver um aplicativo que permita adicionar, editar e excl uir CDs de sua coleo. O trabal ho com os bancos de dados introduzir voc no Server Explorer, mas o Dia 13 mostrar como usar seus vrios recursos. Nessa lio, trabalharemos com contadores de desempenho e registras de eventos, e aprenderemos uma maneira mais fci l de configurar uma conexo de banco de dados.

Semana 2

Para conc luir, no Dia 14, voc aprender alguns dos mais avanados recursos orientados a objetos do Visual Basic .NET, incluindo a herana e a sobreposio. Essa lio realmente tomar mais claro o poder dessa verso do Visual Basic e mostrar como possvel usar esses recursos para projetar sistemas que sejam mais fceis de estender e tenham uma manuteno mais simples. No final da Semana 2, voc ter aprendido tantos recursos do Visual basie .NET que estar pronto para criar aplicativos complexos. O projeto de bonificao nmero 2 (Parte I do Projeto de Bnus 2) fornecer a prtica por meio de algumas dessas tcnicas novas.

Semana 2

DIA
Introduo ao .NET Framework
o .NET Framework no especificamente um novo recurso do Visual Basic .NET porque ele
compartilhado com mu itas li nguagens (mais de 20 no momento em que esse texto foi escrito). O Framework fornece um poderoso conjunto de componentes para voc usar em seus programas.
Ele contm uma quantidade imensa de classes que executam vrias funes, da manipulao de strings ou nmeros criptografia e o acesso rede. Assimilar o .NET Framework um processo contnuo, mas conhecer os termos-chave e a maneira como o Framework organizado so co-

nhecimentos valiosos que o aj udaro no desenvolvimento de mais aplicati vos com o Visual Basic .NET. Hoje, voc aprender: O que o .NET Framework. Algumas classes importantes do .NET Framework. Com o encontrar o que precisa no .NET Framework.

o Que o .NET Framework?


o tenno .NET Framework foi o nome dado a vrios componentes e servios que foram combinados para criar um ambiente poderoso de desenvolvimento. Ele inclui uma grande quantidade de classes (mais de 6 mil ) que fornecem grande parte da fu ncionalidade anterionnente existente no Visua l Basic ou na APl do Windows. Isso permitir que voc escreva aplicat ivos com base no Windows e na Web, acesse a rede, crie elementos grficos e muito mais .

Dia 8

Alm d isso, o .NET Framework possui o COlllmOI1 Langl/age Rl/l1lime (CLR), que responsvel por executar seu cdigo. O CLR oferece vrias inovaes importantes que afetam os desenvolvedares de aplicativos .NET no Visual Basic .NET ou em outras linguagens que tenham suporte. A principal alterao que agora todas essas linguagens so compiladas para a Microsoft Itermediate Language (MS1L). Em seguida, ela convertida pel o CLR em cdigo nativo quando executada pela primeira vez. O resultado final que voc se beneficiar do desempenho de um cdigo totalmente compi lado, e no de um que seja interpretado no tempo de execuo. Ainda h mais, todas as linguagens que tm suporte do CLR usam o mesmo tipo de dados. Isso significa que muito mais fci l para duas (ou mais) linguagens interoperarem. Anteriormente, se voc precisasse passar infonnaes de uma linguagem (como a C++) para outra (d igamos o Visual Basic), poderia ter de executar algumas converses para interpretar de modo apropriado a varivel. Agora,j que as duas linguagens empregaro o mesmo tipo de dados, isso simples. O CLR pennite que os desenvolvedores ut il izem a linguagem com a qual se sentem mais confortveis, podendo ainda se comunicarem com outras. Embora o CLR seja importante, ele em geral funciona em segundo plano. A parte essencial e visve l do .NET Framework que voc deve examinar so algumas das classes que o compem.

Classes Importantes do .NET Framework


Voc usar muitas classes do .NET Framework quando desenvolver aplicativos no Visual Basic .NET. No entanto, empregar algumas delas com mai s freqncia do que outras. Entre as classes mais teis esto Console Permite a lei tura e a exibio na linha de comando. Environment Pemlite a leitura e a gravao nas variveis de ambiente do sistema. Permite a gerao de nmeros aleatrios. Random Inclui vrios clculos matemticos. Math Co 11 ect i ons Fornece vrias classes para diferentes estratgias de armazenamento de conjuntos de itens.

Console
Vocj viu algumas das classes Conso 1e quando desenvolveu aplicativos anteriormente. Os mtodos Wri teL i ne e ReadL i ne dessa classe tm sido usados com freqUncia para exibir resu ltados e ler cdigos de vrios dos aplicativos do console, ou de linha de comandos, criados no livro at agora. Essa a utilizao mais importante da classe Conso 1e. No entanto, h alguns recursos menos empregados dela que vale a pena examinar. Alguns dos mtodos essenciais desta classe so mostrados na Tabela 8. 1.

Introd uo ao .NET Framewo rk

TABELA 8 .1

Mtodos da Classe Conso 1e


Descrio

Metodo

Read ReadLine SetError

Setln

SetOut Write Wr; teL; ne

L informaes da linha de comandos (ou outro cdigo). No precisa que a linha termine com Enter. L informaes da linha de comandos. L todos os caracteres at o Enter, sem inclu-lo. Altera o destino das mensagens de erro a serem exibidas enquanto seu programa estiver em execuo. Pode ser usado na criao de um mecanismo sim ples de registro de erros em seu aplicativo. Altera a origem da entrada de Read e Readl ine. Pode ser usado na alterao de um aplicativo de linha de comandos para que leia um arquivo ou local de rede. Veja a seo "Redirecionamento", mais frente nesta lio. Altera o destino dos mtodos Wri te e Wri tel ine. Pode ser usado na alterao do destino da sada para registro ou outra finalidade. Veja a seo "Redirecionamento", mais adiante nesta lio. Exibe informaes na linha de comandos (ou outra sada). No termina com uma nova linha. Exibe informaes na linha de comandos (ou outra sada). Termina a sada com uma linha nova.

Resultados Mais Simples


J que a classe Ccnso le com freqUncia usada para sadas, seria bom se tornasse sua vida mais
fc il quando voc executasse essa tarefa. Felizmente, ela faz isso. Quando empregamos os mtodos Wri te ou Wri teL i ne para exibir informaes, nos beneficiamos de sua capacidade de utilizar espaos reservados para as variveis. Em geral, quando se quer exibir uma string que contm informaes armazenadas em variveis, uma tcnica conhecida como concatenao usada.
Novo TERMO
COl/calel/aeia mais uma palavra sofist icada que quer dizer 'combinao de

strings' . Em vez de somar as strings com o smbolo +, como fazemos com os nmeros, usado o smbolo & como em , Console.WriteLine{"Insira" & ITEM_COUNT & _ "itens. Pressione ENTE R entre os itens.")

Se voc tiver uma st ring complicada, pode ser difcil lidar com todas as aspas e E comerc iais. Em vez de constru ir uma string complexa usando a concatenao, possvel utilizar esses espaos reservados nos locais certos e incluir posteriormente as varivei s que sero empregadas em seu preenchimento, como descrito a seguir: Console.WriteLine("Insira {O} itens . Pressione ENTER entre os itens . ",
ITEM_COUNT)

o item {O} um espao reservado para a varivel que voc inclui u no final da string. Ela a varivel ITEM COUNT das instrues anteriores. Epossvel inserir vrios espaos reservados (ou at

Dia 8

mesmo usar o mesmo diversas vezes) na string. Assim, as variveis que forem includas depois da string sero inseridas nela em ordem, comeando com o item "0<'" (primeiro item) e dando continuidade, percorrendo as variveis e espaos reservados em seqncia ({O}, {I}, {2} e assim por diante). A Listagem 8.1 demonst ra esse recurso.
CDIGO LISTAGEM 8.1

Usando a Classe Console para Entradas e Resultados

1 Imports System

2 Public Class ConsoleTest 3 Private Const ITEM_COUNT As Integer ~ 10 4 Shared Sub Main() 5 Dim I As Integer 6 Dim sItems(ITEM_COUNT) As String 7 Console.WriteLine("Insira (Olitens." & _ 8 Pressione ENTE R entre os itens.",ITEM_COUNT) 9 For I ~ O To ITEM COUNT-I 10 sItems(I)= Console.ReadLine 11 Next 12 Console .WriteLine() 13 Console.WriteLine("Itens em ordem inversa:") 14 For I ~ ITEM_COUNT - 1 To O Step - 1 15 Console .WriteLine(sItems(I)) 16 Next 17 End Sub 18 End Class

ANLISE

o cdigo da Listagem 8.1 bem simples e pretende demonstrar apenas algumas das
maneiras como voc tem usado a classe Conso 1e nessas sete lies.
,

A linha I im porta o espao de nome System. E nesse local que a classe Conso 1e definida, assim
como muitas outras classes importantes. Portanto, voc deve sempre importar esse espao de nome na maioria dos aplicativos. O ID E do Visual Basic .NET far isso automaticamente para aplicativos que forem criados quando ele estiver em uso. Dentro da nica classe definida em seu arquivo, voc declara apenas lima constante, ITEM COUNT (linha 3), e uma sub-rotina Ma i n (linha 4). A constante usada para substitu ir a insero do nmero 10 em todo o cdigo, prevendo o caso de se querer alterar o valor posteriormente. muito mais fcil alterar s o valor da constante, em vez de ter de procurar todas as ocorrncias desse vaIar no aplicativo inteiro. O uso de uma constante tambm mostra que o desenvolvedor sabe que os valores esto re lacionados. Se tivssemos repetido o nmero 10 em todos os locais e examinssemos esse cdigo seis meses depois, poderamos no lembrar se todos indicariam o mesmo valor ou se seria somente uma coinc idncia.

Introduo ao .NET Fram ework

o procedimento Shared Sub M , como voc j viu muitas vezes, o primeiro mtodo executaain
do em um aplicativo. Dentro do procedimento, voc declara um array de strings (li nha6) e o preenche com o mtodo Console . ReadLine. A li nha 7 digna de nota. Dentro do item exibido com Console. Wri teL i ne (ou Canso 1e. Wri te), voc pode inseri r vrios caracteres, como o item la} no meio da string da linha 7. Posteriormente, cada uma dessas li nhas ser preenchida com variveis. Essas so includas depo is da string na chamada de Consol e.Wri teL i ne, como fi zemos com a constante ITEM _COUNT.

Usar a abordagem de ca racteres na construo de uma string pode ser til, mas, se far ou no sentido depender um pouco de critrios pessoa is. Nessa tcn ica, cada va lor substituir um caractere na ordem que eles aparecerem, comea ndo com Oque o primeiro. As variveis podem ser nu mricas, alfanumricas ou qualquer outro tipo que possa ser convertido em uma string. Por exemplo, se voc quisesse usar essa tcn ica para escrever uma string com quatro va riveis includas, ela teria a seg uinte apa rncia:

Console .WriteLine( "{O}+{I} '" {2} : {3} ", I, I, 2, "Bertrand Russell, 1912")
Os desenvolvedores experientes do Visual Basic podem estar um pouco mais familiarizados com uma abordagem alternativa. Nela voc constri a string concatenando stri ngs e variveis. A stri ng anterior poderia ser construda e exibida com o cd igo:

Console .WriteLine(valuel & "+" sSource)

&

value2 & ":"

&

result & " : " &

Embora isso possa pa recer mais ' natura l', voc pode esquecer de incluir um caractere de concatenao ("&") quando adicionar as strings. Seu programa falharia na compilao ou na execuo.

Cada linha da entrada lida (linha IO) e exibida em um dos elementos do array. Observe que esses elementos so numerados de O a 9 (li nha 9). Para concluir, os elementos so exibidos na tela em ordem inversa. Isso fe ito com o uso da clusula Step da instruo For .. Next (linha 14). Eles so exibidos um por vez na sada atual, como vemos na linha 15. A Listagem 8.2 demonstra esse tipo de sada.
COOIGOt
RESULTADO LISTAGEM 8.2

Executando o Apl i cati vo do Console

1 2 3 4 5 6 7 8

[c: \ code]Consolel.exe In sira 10 itens. Pressione ENTER entre os iten s. Porco-da-terra Rato gigante da ndia C asuar Dugo qui dna Tentilho

1210
LISTAGEM 8.2

Dia8
Executando o Aplicativo do Console (continuao)

CDIGO!
RESULTADO

9 Girafa 10 Hipoptam o
11 Iguana 12 Chacal

13 14 15 16

Itens em ordem ; nversa: Chacal Iguana Hipoptamo 17 Gi rafa


19 quidna

18 Tentilho

20 Dugo 21 Casuar

22 Rato gigante da ndia


23 Porco -da -terra

Redirecionamento
Redirecionamenlo significa apenas'env iar algo para um local diferente' . Quando lidamos com a classe Console, isso quer dizer que voc pode alterar o local onde far a leitura ou ex ibio. Por exemplo, ela poderia ser usada para exibir o resultado de um apl icativo que recebesse entradas de linhas de comandos ou de um arq uivo. De maneira semelhante, voc poderia empregar CO Ilsole.WriteLine quando depurasse o apl icativo em testes e, em seguida, o redirec ionasse a um arquivo a fim de criar uma ferramenta simples de registro para ele.

Voc pode redirecionar a entrada, o resultado ou as informaes de erro de seu programa. Essas informaes podem ser red irecionadas para qualquer destino onde houver TextReader (para entradas) ou TextWri ter (para sadas e erros). Observe que no possivel criar nenhuma dessas duas classes diretamente, j que so abstratas. Em vez disso, preciso gerar uma das classes que implementar ou herdar caracteristicas de TextReader ou TextWriter (veja o Dia 7, "Trabalhando com Objetos" e o Dia 14, "Introd uo Programao Orientada a Objetos", para obter mais detalhes sobre a abstrao e a herana). Algumas das imp lementaes dessas duas classes permitem ler e gravar em arquivos, locais na rede e ass im por diante. A Li stagem 8.3 mostra como se pode alterar o exemplo mostrado na Li stagem 8.2 para que envie o resultado para um arquivo em vez de para a janela das linhas de comando. Observe que os comandos de Consol e.WriteLine no foram alterados; somente o destino foi.
COOIGO LISTAGEM 8.3

Redirecionando a Sada do Console

1 Imports System 2 Imports System . IO

Introd uo ao .NET Framewo rk

211

COOIGO

LISTAGEM 8.3

Redirecionando a Sada do Console (continuao)


=

3 Public Class ConsoleTest 4 Private Const ITEM COUNT As Integer 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

10

Shared Sub Main() Dim I As Integer Dim sItems(ITEM_CDUNT)As String Dim aFi le As TextWriter = File.CreateText("Output.txt") Dim oOut As TextWri ter = Console.Out Console.WriteLine( "lnsira (Of itens. Pressione ENTE R entre os - itens . " ,_ITEM_COUNT) For I = O To ITEM COUNT-l sltems(I) = Console.ReadLine Next Console.WriteLine() Console .SetOut(oFi le) Console .WriteLine("ltens em ordem inversa:") For I = ITEM_COUNT - 1 T O Step -1 o Console .WriteLine(sItems(I}} Next oFile.Close() Console.SetOut(oOut) Console .WriteLine("Conc l udo") Console.Read L ine()

24 End Sub 25 End Class Executando o aplicativo: 1 [c: \code]Console2.exe 2 Insira 10 itens. Pressione ENTER entre os itens. 3 Porco-da-terra 4 Rato gigante da ndia 5 Casuar 6 Dugo 7 quidna 8 Tentil ho 9 Girafa 10 Hipoptam o 11 Iguana 12 Chacal

Dia 8

13 14 Concludo
ANALISE

A nica alterao entre as Listagem 8.1 e 8.2 foi o acrscimo das linhas 2, 8, 9, 15, 20,2 1e22 . Essas so as linhas que criam o arquivo, e provocam e encerram o redirecionamento da sada. A linha 2 importa o espao de nome $ystem. 10. Ele ser necessrio j que contm a definio para as classes TextWriter e Fi le que voc usar depois. A linha 8 gera o arqu ivo Output. txt empregando o mtodo CreateText da classe Fi 1e. Observe que na verdade no preciso criar uma instncia da classe Fi 1e, j que Omtodo CreateText comparti lhado. Se j houver um arquivo com esse nome, ele ser excl udo. Se em vez disso quisermos continuar a preencher um arquivo existente, devemos utilizar AppendText no lugar de CreateT ext. A linha 9 usada para sa lvar o destino original da sada, portanto ele poder ser con fi gurado mais uma vez na linha 21. A linha 15 provoca o redirecionamento para seu arquivo. Todas as sadas que empreguem CansaI e.Wri te e CansaI e. WriteLi ne aps esse redirecionamento sero enviadas para seu arquivo em vez de para ajane la das linhas de comandos. A ltima linha importante a 20. Se no consegu irmos fechar o arquivo, o contedo no poder ser gravado e terminaremos com um arquivo sem bytes (vazio).

o cdigo da Listagem 8.3 deve produzir um arquivo Output . txt com o contedo a segu ir:
RESULTADO

I Itens em ordem inversa:

2 Chacal 3 Iguana 4 Hipoptamo 5 Girafa 6 Tent il ho 7 quidna 8 Ougo 9 Casuar 10 Rato gigante da ndia II Porco -da -terra

[nvi ronrnent (Ambiente)


Saber seu lugar em geral produz a diferena entre sucesso e constrangimento. E essa percepo vem freqentemente da vizinhana, ou do ambiente. De maneira semelhante, em programao, voc envolvido por um ambiente especfico. O ambiente em que seus programas so executados composto de informaes sobre o sistema operacional, assim como muitas variveis e outras confi guraes que afetam seu computador. Esse ambiente permite que voc consulte configuraes para o usurio, como o local do diretrio de seus arquivos temporrios, o contedo de seu caminho de pesquisa ou at outros itens sobre a linha de comandos. Algumas das propriedades e mtodos mais importantes da classe Envi ronment so listados na Tabela 8.2. Observe que todas essas propriedades e mtodos so compartilhados.

Introd uo ao .N ET Framewo rk TABELA 8.2


Membro Mtodos e Propriedades da classe Environment Descrio Propriedades

213

CorrmandLine Currentoi rectory O$Version SystemOi rectory Version

Representa a linha de comandos completa que iniciou o aplicati-

vo.
Retorna o caminho do diretrio atual. Retorna informaes sobre o sistema operacional atual, por exemplo, se o Wi ndows 9x, o NT ou o 2000. Retorna o caminho do diretrio do sistema (\winnt\system32 no Windows NT ou no 2000) . Retorna informaes sobre a verso de uma montagem . Mtodos

Exit GetCorrmandL i neArgs

Encerra um aplicativo, opcionalmente retornando um cdigo de erro que pode ser usado pelo sistema operacional. Retorna todos os itens listados na linha de comandos quando o aplicativo foi iniciado. Esse retorno feito na forma de um arraV de strings. O prprio executvel o elemento zero (primeiro) do arrav Retorna o valor de uma varivel de ambiente solicitada. Traz informaes armazenadas no ambiente com o comando Set. como o ca minho de pesquisa (path), o diretrio para arquivos temporrios (templ ou outras configu raes. Retorna a lista de unidades disponveis. Esse retorno feito na forma de um arrav de strings. O pri meiro (item DI elemento geralmenteA:\.

GetEnvironmentVariable

GetLogicalOrives

A classe Envi ronment t il quando voc precisa de informaes sobre o sistema que est ao redor da execuo de seu programa, como quando tem de saber onde gravar seus arquivos temporrios ou em que sistema operacional est sendo executado.

Random
Random uma classe simples, destinada a criar nmeros aleatrios, em geral um inteiro (I nteger) ou um duplo (Double). Os mtodos importantes dessa classe esto listados na Tabela 8.3. TABELA 8.3
Mtodo

Mtodos da Classe Random


Descrio Retorna um inteiro entre Oe o valor mximo possvel para um inteiro (aproximadamente 2 bilhes). Retorna um interi ro entre O e o valor de MaxValue (a lgum inteiro).

Next Next(MaxValue)

1 214
8.3

Dia8

T ABELA

Mtodos da Classe Random (continuao)


Descrio
Retorna um inteiro entre os valores min i mo e mximo. Essa a variao mais usada quando se precisa de , como valor mnimo. Retorna um tipo duplo entre O e 1.

Mtodo

Next(MinValue, MaxValue)
NextOouble

Por exemplo, se voc quisesse gerar um inteiro aleatrio entre 1e I00 (inclusive), escreveria

Oim oRand As New Random Dim iValue As Intege r : oRand.Next(1.10Q)

Math
A classe Math contm muitas das constantes e funes matemticas importantes. A maioria delas so mtodos compartilhados e, portanto, podem ser usados sem a criao de uma instncia da classe Math. Os mtodos mais relevantes so descritos na Tabela 8.4. Se voc examinar a classe Math na ajuda (Help), ver que h muitos outros mtodos disponveis.
TABELA

8.4

Mtodos da Classe Math

Mtodo

Descrio
Retorna o va lor absoluto de um nmero (se for negativo, ele retornar o valor positivo do nmero). Retorna ocosseno de um ngulo (medido em radianos; veja a Nota a seguir). Retorna um tipo duplo representando o valor de e (2.7182818284590451). Retorna o valor mximo entre dois valores. Retorna o valor mnimo entre dois valores. Retorna um tipo duplo representando o valor de pi (3. 1415926535897931). Arredonda um nmero para o nmero intei ro mais prximo.

Abs
Cs

Max
Min
PI

Round

NOTA

Para aqueles entre ns que dormiram durante as aulas de geometria, um ra diano aproximadamente igual a 57 .296 graus. Porque um nmero to redondo? Os radia nos esto relacionados circunferncia de um circulo - a medida exata I Radianos = (I graus * pi) / 180 Os radianos so usados em computao devido aos clculos e, portanto, esto alm do escopo deste livro. Simplesmente lembre-se de converter seus ngu los de graus para radianos antes de empregar qualquer dos mtodos de Math relacionados aos ngulos.

Introd uo ao .NET Framewo rk

A classe Math em geral til para calcular valores. Mesmo se voc no lembrar (ou nunca tiver aprendido) o que urna tangente hiperblica, na classe Math que a encontrar.

Classes de Conjuntos no .NET Framework


Voc j conheceu o tipo de dados Array no Dia 3, '; Introduo Programao com o Visual Basic .NET". O .NET Framework possui vrias outras classes de conjuntos que adicionam mais recursos a Array. Essas classes permitem o armazenamento de uma lista de informaes exatamente como nos arrays, mas, alm disso, elas tm recursos como a ordenao de listas e a possibi lidade de inclu ir e recuperar com maior facilidade na lista. Vrias classes de conjuntos (a maioria no espao de nome System.Collections) esto dispon veis. Algumas sero descritas ainda nesta lio. Se precisar de outros tipos de colees, verifique nesse espao de nome antes de procurar em outro local.

ArrayList
ArrayL i st Oconjunto que mais se parece com um Array. A principal diferena que foi projetado para permitir um crescimento fc il conforme forem sendo adicionados mais elementos. Como as outras classes do espao de nome System .Co 11 ecti ons, ArrayL i st foi criado para armazenar um conjunto de variveis Object. Portanto, pode ser usado para conter qualquer tipo de dado. O uso da classe ArrayL i st ser adequado se voc tiver um conjunto muito dinmico que possa aumentar ou diminui r com o passar do tempo e se no precisar dos recursos dos outros conjuntos. Voc pode criar uma nova instncia da classe ArrayL i st usando um dos construtores disponveis. Uma verso permite a definio da capacidade inicial do conjunto, e outra configura o tamanho inicial como 16: Oim arrList As New ArrayList , cria um novo ArrayList,com 16 membros inicialmente Oim arrList2 As New ArrayLi st(20) , cria um novo ArrayList,com 20 membros inicialmente Oim arrList3 As ArrayList Set arrList3 = New ArrayList(52) , cria um novo ArrayList,com 52 membros inicialmente As outras propriedades e mtodos importantes da classe ArrayList so usados para ad icionar, recuperar ou excluir membros do cOI~ unto. A Tabela 8.5 resume alguns dos principais membros.

1216
TABELA 8.5
Membro

Dia8

Mtodos e Propriedades da Classe ArrayList


Descrio Propriedades O tamanho aluai da classe ArrayL i st. Configurado pela primeira vez quando ela criada (16 por padro), podendo aumentar conforme
mais elementos forem adicionados.
A quantidade efetiva de itens na classe ArrayList.

Capaci ty

Count

Item

Retorna um elemento especifico da classe ArrayList.


Mtodos
Adiciona um novo item ArrayLi st . Se isso fi zer com que Count ultrapasse (apacity, essa propriedade ser aumentada (com sua quantidade inicial - 16 por padro).
Remove todos os itens de ArrayList . Count co nfigurada com O, mas Capacity no alterada.
Retorna a posio de um certo objeto na classe ArrayL ist oEsse mtodo til quando usado depois de uma ordenao.

Add

Clear
IndexOf

Insert Remove RemoveAt 50rt ToArray TrimTo5ize

Adiciona um novo elemento ArrayL i st em uma posio solicitada. Remove o objeto solicitado de ArrayList. Remove o elemento da posio solicitada. Ordena os membros de ArrayList. Copia toda ou pane de uma classe ArrayList em um array. Diminui ArrayList de modo que tanto Count quanto Capacity sejam iguais quantidade atu al de elementos na classe .

daaumentar, mas st tivermos noona substit uioconjunto avanar.sabemos que o taclasse mais adequado de arrays quando manho no de at onde o Seu crescimento
USO ArrayL i

ilimitado permite que os itens sejam adicionados quando necessrio.

Queue e Stack
Os conjuntos Queue e Stack so semelhantes. So dois tipos ' clssicos' de conjuntos, sendo teis em muitos esforos de programao. As duas classes so conjuntos que permitiro que voc adicione com faci lidade novos itens. Em geral removem o item quando visualizado porque foram projetadas para armazenar o conjunto temporariamente. Elas diferem no modo como os itens so adicionados em cada conjunto e, principalmente, em como so removidos dos conjuntos. A classe Queue um conjunto 'primeiro a entrar, prime iro a sair' (FIFa, first- in, first-out). Isso significa que os itens so remov idos da fila na mesma ordem que foram adicionados. Essacaracterstica semelhante da maioria das fi las (ou formaes em seqUncia) que voc possa ter visto. Em geral, em um ponto de nibus, na fila do almoo ou na passagem pela alfndega, as pessoas que chegam primeiro so atendidas antes. As filas so freqUentemente usadas em pro-

Introd uo ao .N ET Framewo rk

gramao quando esse comportamento desejado. Por exemplo, quando dois programas (ou objetos) esto se comunicando, as mensagens so colocadas em lima fila para o objeto receptor. Em seguida, ele poder process-las na ordem que foram recebidas. A Tabela 8.6 descreve alguns dos mtodos e propriedades importantes da classe Queue.
TABelA 8 .6

Mtodos e Propriedades da Classe Queue


Descrio

Membro

Propriedades Count Clear Dequeue Enqueue


Peek
A quantidade de itens na fila.

Mtodos Remove todos os itens da fi la.Nota Extrai e retorna um objeto para a fila. Insere um novo objeto na fila. Permite que voc examine o prximo item sem removlo da fila. Isso til porque remov-lo poderia imped ir outro mtodo de lidar com a fila adequadamente.

NOTA

Por que os mtodos so chamados de Dequeue e Enqueue? Por que no Add e Remove? simplesmente uma questo de manter os nomes tradicionais. Os programadores sempre se referiram ao ato de adicionar um item a uma fi la como enfileirar o item, portanto, esse termo, assim como desenfileirar, foram adotados.

A classe Stack um conjunto 'primeiro a entrar, ltimo a sair' (F ILO, fi rst-in, last-out). Isso significa que os itens so removidos da pilha na ordem inversa qual foram adicionados. A ordem FILO anloga a lima pilha de pratos: o prato adicionado por ltimo sempre removido primeiro. As pilhas so a soluo clssica para li dar com problemas que requerem a inverso de uma ordem de operaes. Mu itos clculos so processados internamente com a ajuda das pilhas. A Tabela 8.7 descreve alguns dos mtodos e propriedades da classe Stack.
TABelA 8 .7

Mtodos e Propriedades da Classe Stack


Descrio

Membro

Propriedades Count Clear


Pop

A quantidade de itens na pilha.

Mtodos Remove todos os itens da pilha. Remove e retorna o prximo item para a pilha. Exatamente como a fila possui Enqueue e Oequeue, os dois mtodos usados tradiciona lmente para lida r com pilhas so Pop e Push.

1218

Dia8

TABELA 8.7

Mtodos e Propriedades da Classe Stack icontinuao)

Membro
Pus h
Peek

Descrio
Insere um novo objeto na pilha.
Permite que voc examine o prximo item da pilha sem remov -lo. Queue e Stack so conjuntos interessantes, em parte por uma perspecti va histrica, mas tambm porque resolvem probl emas especificos de programao. Quando for necess ri o um conjunto com o comportamento desses dois objetos, recomendvel lembrar deles.

SortedLi st
A classe SortedL i st possui caracterst icas tanto de ArrayL i st quanto de NameVal ueColl eeti on, assim como alguns recursos teis adicionais especficos. Semelhante ArrayL is t, a classe SortedLi st pode alimentar, e apresenta as mesmas propriedades Count e Capaci ty daquele conjunto. Como em NameValueCollection, cada item identificado por um nome. Alm disso, os valores de SortedL i st so ordenados com base no nome fornecido a cada item. Assim, ela ser til sempre que voc precisar de uma Iista de itens organizados que possa 'crescer", como os participantes de lima con ferncia ou os resu ltados de uma bateri a de provas de uma turma escolar. A Tabela 8.8 descreve alguns dos metodos e propriedades sign ificativos da classe SortedList.
TABELA 8.8
Membro

Mtodos e Propriedades da Classe SortedList


Tipo Descrio

Propriedades

Capaci ty

O tamanho atual da classe Sorted Li st. Configurado pela primeira vez quando ela criada (16 por padro), podendo aumentar conforme mais elementos forem adicionados. A quantidade efetiva de itens em SortedList. Mtodos

Count
Add

Adiciona um novo item SortedList. Se isso fizer com que Count ultrapasse Capaci ty, essa propriedade sera aumentada com sua qua ntidade inicial - 16 por padro. Propriedades

Clear IndexOfKey Item Keys Remove


Propriedade Propriedade Mtodo

Remove todos os itens de SortedLi st . Count confi gurada como 0, mas Capaci ty no alterada. Retorna a posio de um certo objeto em SortedL ist. Isso muito til aps a execuo de Sort. Retorna um elemento especfico de SortedList. Retorna todas as chaves armazenadas em SortedLi st. Remove o objeto solicitado de SortedList.

Introd uo ao .NET Fram ework TABELA 8.8


Membro
Remo~eAt

Mtodos e Propriedades da Classe SortedList


Tipo Descrio

(continuao)

TrimToSize Values

Mtodo Mtodo Propriedade

R emove o elemento da posio solicitada. Diminui SortedLi st de modo que tanto Count quanto Capac i ty sejam iguais qua ntidade atual de elementos na classe. Reto rna todos os valores armazenados em SortedList, em ordem de suas chaves.

Em geral quando voc trabalhar com listas, precisar mant-I as em ordem porq ue ter de exibi-I as para o usurio em uma seqnc ia organizada. Nessas situaes, a classe SortedL i st pode ser til.

Encontrando o Que Precisa no .NET Framework


Com mais de 6 mil classes no .NET Framework, encontrar o que voc precisa s vezes ser a parte mais difici l de seu uso. No entanto, exatamente como achar um li vro em sua livraria favorita ou um site na Internet, conhecer algumas regras bsicas o aj udar a encontrar a classe de que necessita para termi nar seu apli cativo. Esta seo o auxi liar a descobrir vrias classes diferentes no Framework, demonstrando como se faz para encontr-Ias. Espero que isso seja til em suas prprias buscas.

As Regras da Busca
Na maioria das bibliotecas, os livros se encontram organizados. Elas podem usar o sistema decimal de Dewey, algum outro mtodo de catalogao ou apenas a ordem alfabtica (por ttul o ou sobrenome do autor). Se uma bibl ioteca no fosse organizada, im agine tentar encontrar um li vro nela. Voc teria de vagar de modo aleatrio at acidentalmente se deparar com o li vro desejado. Muitas pessoas tentam encontrar classes no .NET Framework de maneira semelhante. O .NET Framework organizado de maneira hierrquica. A denomi nao para cada espao de nome composta de urna srie de trechos, separados por um ponto. Espaos de nome inferiores (os que possuem mais trechos) no esto contidos dentro dos superiores, mas relacionados a eles. Por exemplo, o espao de nome System.Data .$qlCl ient est relacionado a $ystem.Data, mas no est contido ne le porque se encontra em um nive l hierrqu ico inferior a Sys tem. Data. No .NET Framework, h dois nomes de nvel mais elevado, System e Microsoft. Os espaos de nome $ystem so aq ueles que fazem parte do .NET Framework e esto disponveis para os usurios do Visual Basic .NET, assim como para os de outras li nguagens que em preguem o Framework. As classes Mi crosoft so em geral especficas para o Visual Studio e dest inadas a um ou

Dia 8

mais ambientes. Por exemplo, existe um espao de nome Mi crosoft. Vi sua 1Bas i c que contm muitos dos recursos que eram encontrados no Visual Basic antes dessa verso.

A Saga pela Classe Perfeita


A fim de demonstrar algumas das tcnicas que voc pode usar para encontrar recursos dentro do .NET Framework, apresentarei o processo de busca de trs procedimentos. Tentarei descrever alguns dos erros que cometi ao tentar encontrar o recurso e o resultado obtido. Pode haver outras maneiras de rastrear a funcionalidade procurada, ou outras respostas dentro do .NET Framework, mas essas so as que encontrei.

Que Cor Tem Aquele Pincel na Janela? Nomeando Cores


Essa pesquisa fo i iniciada por uma necessidade simples, a de descrever uma cor. Os controles podem ser coloridos e a cor pode ser alterada no tempo de execuo. Alterar a cor no tempo de projeto fci I; apenas selecione a cor na Iista suspensa apropriada (por exemp lo, BackCo 1ar ou ForeCo 1or). No entanto, para alterar uma cor no tempo de execuo, voc precisar saber como ident ifi c-I a. Todas as cores do Vi sual Basic .NET podem ser descritas com base nos percentuais de vermelho, verde e azul que as compem. Nessa linguagem cada uma das trs cores citadas varia em vaIar dentro de um intervalo entre Oe 255, elevando a quantidade total de cores disponveis para 16.58 1.3 75. Portanto, voc pode identi ficar qualquer cor atravs de suas propores de vermelho, verde e azul. Uma cor composta com cada uma dessas outras trs com 50% de saturao, ou com um valor de 128, teria uma tonali dade cinza-clara. Em outras situaes, pode-se querer identificar uma cor pelo nome - isto , quando 'vermelho' for mais relevante do que saber que o valor da cor -65536. Voc poderia considerar que, por serem as cores to importantes, suas denominaes apareceriam no espao de nome System. No entanto, se pensasse assim (e foi o que aconteceu comigo, na primeira busca), estaria errado. As cores com denominaes conhecidas e a capacidade de criar outras novas so encontradas 110 espao de nome System. Drawi ng. Dentro do espao de nome Sys tem. Drawi ng, h dois conj untos de cores: a estrutura Co 1or e a classe SystemColors. A estrutura Color tem duas finalidades principais. A primeira seu aspecto 'funcional'. Dois mtodos, descritos na Tabela 8.9, pennitem que voc crie uma core descubra seu valor numrico.

Introd uo ao .N ET Framewo rk TABELA 8.9


Mtodo

221

Mtodos da Estrutura Colar


Descrio

FromARGB

ToARGB

Cria uma cor nova com base nos valores de vermelho, verde e azu l (cada um entre Oe 255). Tambm h outras verses dessa funo. Uma variao usa um va lor Alpha alm dos de vermelho, verde e azul, enquanto outra empregada para adicionar o valor Alpha a uma cor existente. Esse valor re presenta a transparncia da cor. Como os outros valores, Alpha varia de Oa 255, sendo esse ltimo valor o correspondente a completamente opaco. A ltima variao de FromARGB utiliza um valor intei ro e retorna a cor. Retorna o inteiro que representa uma composio da cor que usa Alpha, vermelho, verde e azul.

Alm da capacidade de criar e converter cores, a estrutura Calor contm vrias cores identificadas. Elas constituem uma ampla variedade de cores diferentes, muitas com nomes representativos e evocativos, como PapayaWhi p, Ga i nsboro e Bur 1yWood. Esses so atalhos teis se voc quiser colorir algo, mas no estiver certo do valor numrico exato que deseja. Mais vantajoso ainda do que os nomes que voc no tem de criar uma instncia nova da estrutura Co 1or antes de usar essas cores. Portanto, poder empreg-las em um programa utilizando um cd igo semelhante a frmMain.BackColor : Color.SeaShell Um problema na definio de suas prprias cores, com os valores RGB (vermelho, verde e azul) ou selecionando uma cor identificada, que sua percepo delas pode ser diferente da de seus usuri os. Tenho encontrado pessoas que configuram seus microcomputadores com as cores mais extravagantes, e outras que nunca alteram os padres. De maneira semelhante, estive com programadores que tinham criado apl icativos estranhos, mu lticoloridos, e outros que embutiram todas as cores em cdigos de sombreados cinzas. Se voc embut ir as cores em cdigos, seu programa dever se impor nos microcomputadores dos usurios, podendo se tornar irritante. Para evitar isso, programadores educados configuram a cor dos elementos da tela usando as do sistema (aquelas definidas no painel de contro le). As cores do sistema esto disponveis na classe Sys temColors, que possui vrias propriedades representando os diferentes elementos que aparecem no Windows (como o WindowsText, o Controlou o Menu). Colorir as partes de seu aplicativo usando essas cores sign ifica que elas assum iro qualquer cor que o usurio selecionar para esse item . Usar a classe Sys temCo 1or semelhante a empregar a estrutura Co 1or. No necessrio criar urna nova instncia da classe antes de utilizar os valores. Portanto, voc poderia colorir o plano de fun do de um formu lrio com a cor j definida Desktop por meio do cdigo a seguir: frmMain . BackColor : SystemColors . Desktop As cores esto em lodosos locais no Windows, portanto, saber a maneira de cri-las importante.

Quem Sou Eu? Encontrando o Nome de Seu Computador


Muitos programas prec isam conhecer o nome do computador em que esto sendo executados. Por exem plo, voc pode estar tentando acessar alguns recursos ou servios do sistema, como

Dia 8

far no Dia 13, "Usando o Server Explorer". Ou pode querer registrar ou armazenar o nome do computador para acessar o banco de dados. Essa busca de uma soluo fo i iniciada por mim por uma necessidade desse tipo. Infelizmente, tambm foi a mais demorada. Sorte sua que encontrei muitas mane iras que podem ser usadas para determinar o nome de seu computador. Dependendo de que espaos de nome j tenha importado ou do tipo de ap licativo que est iver executando, pelo menos uma delas (e provavelmente todas) devem estar dispon veis para voc. Voc j exami nou a primeira das trs maneiras fceis de obter o nome de um computador em que um programa est sendo executado: System.Environment. No Windows 2000 e superiores, o nome do computador armazenado como urna varivel de amb iente chamada CQMPUTERNAME. Se esse for o caso, o nome do computador local poder ser recuperado com Console.Writeline("Using Environment: {Q}" ,_ Sys tem . Envi ronment . GetEnvi ronmentVa ri ab 1e (" COMPUTERNAME")) No entanto, depender de uma varivel de ambiente, mesmo que configurada pelo sistema operacional, me parece confiar um pouco demais. Assim, fui mais fundo. A rede em geral precisa do nome do computador, portanto System. NET [ui minha prxima parada. Depois de algumas tentativas sem xito, encontrei GetHostName na classe DNS. Isso basicamente faz sentido - o DNS (Domain Naming Service) um servio usado para registrar nomes de computadores na Internet (ou em redes locais). Voc pode usar a classe DNS para recuperar o nome de um computador inc luindo o espao de nome System.Net em seu projeto e acessando-o com um cdigo semelhante a Console . WriteLine("Using Net.DNS : {O}" , DNS .GetHostName) Essa sol uo pode no func ionar, no entanto, se voc uti liz-la em um computador que no tenha o TCP/IP instalado (o que, com a popu laridade da Internet, poderia signi ficar cerca de dois computadores). E assim, sua pesquisa continuaria. Bem no mago de System.Wi ndows. Forms se encontra urna classe que um tesouro: Sys temI nfonnati on. muito estranho que SystemInfonnation possua informaes sobre o programa alUai e o sistema operacional no qual ele est sendo executado. Se voc examinar essa classe, ver que ela tem propriedades que representam todas as defi nies essenciais para os aplicativos, principalmente aqueles com base em formulrios Windows: FrameBorderSize, CaptionHeight, MenuH ght e MousePresent. O mais importante para a sua pesquisa que a classe SytemI nforma ei t i on possui uma propriedade ComputerName, que pode ser usada para recuperar o nome do computador se o espao de nome System .Windows.Forms fo r inclu do em seu ap licat ivo, corno descrevo a segu ir: Console . WriteLine("Using SystemInformation : lO} ". SystemInformation . ComputerName) No deixe o fato de essa classe estar ocu lta dentro do espao de nome System. Windows . Forms desanim-Ia. Ela pode ser usada em qualquer tipo de aplicativo se o espao de nome for carregado.

Introd uo ao .NET Framewo rk

Para que ter trs maneiras de obter o nome do computador em que um programa est sendo executado em vez de apenas uma? Bem, apesar de no ser uma das pessoas que decide esse tipo de coisa, sugeriria algumas razes: Grupos diferentes trabalhando em sees distintas criaram manei ras diferentes de resolver o mesmo problema. Cada soluo s apropriada em certas situaes (como, por exemplo, se a varivel de ambiente for configurada, se voc executar urna rede TCP/IP, se usar fonnulrios Windows e assim por diante). Na pesquisa atravs do .NET Framework, em geral encontramos ml tiplas solues. Use a que atender melhor suas necessidades, at encontrar uma ainda mais adequada.

Um Certo Dia na Histria


A busca dessa soluo foi iniciada em lima funo que existia no Visual Basic 6, WeekOayName. Essa funo retorna o nome do dia da semana. Voc pode descobrir esse dia em qualquer data usando sOayName :: WeekOayName(WeekOay(COate("May 6. 1937"))) S para registro, Odesastre com O Hindenburg foi em uma tera-fe ira . Essa funo, como muitas outras que existiam em verses mais antigas do Visua l Basic, pode ser encontrada de maneira bastante fcil, no espao de nome Mi crosoft . Visua 1Basi c. Esse espao de nome carregado de modo automtico quando o IDE utilizado no desenvo lvimento, permitindo que cdigos escritos para verses anteriores do Visual Basic sejam executados. Ponanto, se tudo que voc deseja uma funo que ' costumava existir', provavelmente ela estar nesse espao de nome.

Resumo
Em geral dificil compreender onde o .NET Framework termina e o Visual Basic .NET comea. A maioria dos recursos do Visual Basic .NET na verdade vem do Framework, inc luindo os que anteriormente faziam pane da APl do Windows ou que no estavam disponveis para os progra, madores do Visual Basic antes dessa verso. E incompleto descrever o .NET Framework como algo importante para os desenvolvedores do Visual Basic .NET. No Dia 17, "Usando o .NET Framework", voc passar mais tempo com o conjunto de classes do .NET Framework. Alm disso, passivei obter mais informaes sobre o .NET Framework na seo do MSDN (Microsoft Developer Network) sobre a plataforma .NET no endereo http://microsoft.com/net. No Dia 9, "Desenvolvendo uma Interface com o Usurio com os Formulrios Windows", examinaremos outra famlia de classes do .NET Framework, as que permitem a construo de interfaces com o usurio do Windows. Essas classes sero usadas com freqU ncia quando voc criar solues que empreguem as sofisticadas interfaces com o usurio dos aplicat ivos-padro.

Dia 8

P&R
P Devo usar o .N ET Framework ou uma fun o a ntiga sobre a qual li qu e o Visual Basic d suporte?

R Se voc, no passado, programou no Visual Basic, ou ainda, se leu livros do tipo 'Como Fazer Isso' ou mesmo artigos de revista que abordavam verses anteriores dessa linguagem, ter visto vrias das maneiras ' antigas' de executar tarefas. Muitas dessas funes , ainda existem, dentro do espao de nome Microsoft. Vi sua 1Basi c. E possve l importar esse espao de nome para fazer liSO de algumas das funes ou constantes mais antigas, como as funes matemticas ou a constante vbCrLf (uma constante que significa' Adicione uma nova linha aqui'). No entanto, se possve l, seria melhor empregar os recursos mais recentes do .NET Framework.
P Por que voc no a bordou o espao de nome "Fill-in- My -Favorite"? Preciso muito saber com o us-lo em meu prog ram a.

R Com 6 mil classes disponveis dentro do .NET Framework, uma lio como esta mal consegue abordar mesmo uma pequena poro delas com os detalhes que precisamos. Voc se aprofundar mais no .NET Framework no Dia 17. Alm disso, tambm iremos us-lo em outros captulos que compem este livro.

Workshop

o Workshop fo i planejado para ajud-lo a antecipar possveis dvidas, revisar o que j aprendeu
e comear a pensar em como colocar seu conhecimento em prtica. As respostas do teste esto no Apndice A, "Respostas dos Testes/Exerccios".

Teste
I. Como voc poderia fazer uso da classe Console se escrever um aplicativo com base no Windows ou na Web? 2. Por que seria melhor escolher o conjunto SortedL; st em vez de ArrayL; st se esse possui um mtodo de ordenao? 3. Qual seria o resultado da execuo do cdigo a segu ir? Dim oRand As New System.Random Dim iValue As Integer ~ oRand.Next(l. 6) Console .WriteLi ne(iValue)
+

oRand.Next(l. 6)

Exerccios
I. Escreva um pequeno programa do console que aceite vrias palavras na linha de comandos e as exiba na tela em ordem alfabtica.

SEMANA

DIA
Desenvolvendo uma Interface com o Usurio com os Formulrios Windows
No Dia 5, organ izando programas, voc aprendeu diferentes maneiras pelas quais os aplicativos .NET poderiam ser projetados. Uma deciso essenc ial era que tipo de interface com o usurio criar. A escolha em geral tennina com um ap licativo no estilo Windows ou da Web. Na plataforma .NET, o modo existente para gerar um aplicativo Windows por meio da tecno logia Windows Parms (formu lrios Windows). Na lio de hoje examinaremos:

A adio e manipulao de controles em um formulrio. A manipulao em cdigo de eventos da interface com o usurio. A aceitao e validao de entradas do usurio. O
liSO

de caixas de dilogo.

Alm desses tpicos, sero abordados vrios contro les especiais visveis e ocultos usados nos formulrios Windows.

Viso Geral dos Formulrios Windows


Os formulrios Windows (Windows Forms) so ut ilizados na criao de aplicativos que fazem uso de interfaces com o usurio com uns (com pequenas variaes na aparncia fina l) em todos

226

Dia 9

os sistemas operacionais Windows (veja a Fig ura 9. 1). Empregando esse conjunto de classes e funes, voc poder adicionar esse est ilo de interface com o usurio, incluindo janelas e caixas de dilogo, em seus aplicativos.

9.1 A maioria dos


FIGURA

aplicalil'os Windows
eDlI/pani/lla o mesmo

eSlilo de intelface porque o sistema operacionalmanipl/la o desenho das janelas e

,"""0:.0.,) ..... """(1:<)


""...... P'lIEl

EJ

~ Ooor

(t.)

Olllros recursos dela.

Antes que voc se aprofunde na criao e configurao de um aplicat ivo Windows, faremos uma
recapitu lao dos principais termos relacionados aos formulrios Windows. O primeiro e mais

difcil de definir 'janela' . Umajallela, na perspectiva dos com putadores, urna rea da te la lIsada por um aplicativo para exi bir informaes. Um nico aplicat ivo pode ter mais de umajanela, mas cada janela peltence a apenas um aplicativo. Elas podem ser movidas e redimensionadas (incluindo a max imi zao e minimizao), mas essas opes podem ser desativadas pelo aplicativo que possui ajanela, pennitindo que ela tenha um tamanho ou urna posio fix a. Os subelementas da jane la, corno os botes, caixas de texto, listas ou fi guras (veja a Figura 9.2) compem a interface de um aplicat ivo e so chamados de controles.
Esses controles produzem a interface do aplicativo porq ue podem ser manipulados (cl icados, digitados, ou o que mai s for apropriado) para fornecer entradas ao programa. Eles tambm exibem informaes para o usurio. As janelas podem estar em um entre doi s estados - moda l ou no-modal. Asjanelas do tipo modal devem ser manipuladas e fechadas antes que o usurio possa trabalhar com qualquer outro aspecto desse aplicativo - por exemplo, uma janela que pergunte se voc deseja salvar as alteraes de um documento. As janelas do tipo no-modal permitem que o usurio interaja de urna manei ra menos estruturada, movendo-se entre todas elas em um ap licativo quando quiser, se assemelhando mais ajanela de um documento do Microsoft Word ou a Toolbox do Visual Studio .NET. Ajanela modal tambm conhec ida como caixa de dilogo e na plataforma .NET possui recursos especficos que a torna fci l de usar para obter algum

Desenvo lve ndo um a Interface com o Usurio com os Formulri os Windows

227

tipo de informao de um usurio. As caixas de dilogo sero abordadas com mais detalhes ainda nesta lio .

FIGURA 9.2

Todos os elemelltos de ullla janela seio chamados de eOll/roles.

Criando um Aplicativo com Formulrios Windows


Como exemplo, voc pode desenvo lver um aplicativo simples com form ulrios Windows que aceite entradas do us urio e demonstre como esses objetos da interface funcionam. Associado ao aprend izado sobre os formulrios Windows, este exemplo tambm mostrar como executar algumas manipulaes si mples de arquivos usando as classes System . IO do .NET Framework. Primeiro, o conduzirei pela criao deste exemplo simples e, em seguida, abordarei diretamente tpicos individuais sobre procedimentos de eventos e controles.

Configurando o Projeto
A primeira etapa no desenvo lvimento do projeto do Vi sual Basic .NET que usa os formu lrios Windows criar um projeto novo, selecionando o tipo de projeto ap licativo Windows (Windows application). Um projeto novo ser gerado contendo um nico objeto fo rmul rio, que estar pronto para voc COmear a trabalhar. O novo formul rio ser chamado de Fonnl por padro, mas no pretendemos usar esse nome porque ele no possui um sign ificado em seu ap licativo. J que voc est desenvolvendo um programa que trabalhar com arqu ivos, renome ie o form ulrio como fnnFi 1er, o que deve ser feito em duas etapas : I. Renomeie o arq uivo dando um clique com o boto dire ito do mouse em Fonnl . vb najanela do Solution Explorer, seleci onando Rename e, em seguida, digitando o novo valor frmFiler.vb. 2. D um clique com o boto di reito do mouse no novo formu lrio em branco da janela de projeto q ue o est iver ex ibindo e selecione Properties. Isso deve exibir a janela Propert ies Toolbox, por me io da qual voc poder encontrar e alterar a propriedade Name (que pode ser visual izada na seo Design das propriedades) de Fonnl para fnnF i 1e r. melhor fa-

228

Dia 9

zer isso antes que qualquer cod ificao seja iniciada, evitando situaes em que j tenha escrito um cdigo que se refi ra a Form1. Neste ponto, observe que o ttulo do formu lrio ainda ser Form l, e no frrnFi ler como voc esperava. Isso acontece porque ele no est associado ao nome do formu lrio, mas o IDE usa esse ttulo como padro na criao. Acesse a janela de propriedades do formulrio novamente e encontre a propriedade Text, que representa o ttulo do formulr io. Alterc-o para o que desejar Fi 1er ficaria bom -, e o ver ser exib ido conforme o pretend ido.

Adicionando Controles ao Formulrio


Antes que um formulrio possa ler alguma ut ilidade, voc precisa inserir controles nele . Todos os controles embut idos nos formu lrios Windows esto dis ponveis por meio dajanela Toolbox. Exiba-a na tela e localize a seo Windows Fonns (veja a Figura 9.3).

FIGURA 9 .3

A seo Willdows Forms de Toolho.>:


fornece lima grande

I'a/"iedade de cOIl/foles para sellsformlllrios.

A l.beI
~ &.,t!M

A"''''''
~M!1rIoIenJ

[Obi ro.!So>:

" """'" R..wr......,


r.
GlOW6ox

QI Plct..e8ox

1P O.toGrld
I!".1IlktSo>: !~ Ched:edJstBox

O,'''

l!l1 ComboIIo

" r,o.'hlw li.::


I

" lktl'low

Nessa seo de Toolbox, voc encontrar vrios controles, mas por enquanto s precisaremos dos botes e caixas de texto. Adicione um controle ao formu lrio dando um clique duplo nele (o que adiciona o controle ao canto superior esquerdo do formulrio) , dando um clique e arrastando-o para o form ulrio, ou selec ionando O contro le (d um clique e solte) e, em seguida, dando um clique e arrastando o mouse no fonnulrio para demarcar o local desejado. Qualquer desses mtodos produzir o mesmo resultado: o controle ser inserido no formul rio. Empregando um dos mtodos que acabaram de ser descritos, adicione trs botes, dois ttulos e duas caixas de texto ao formu lrio. Organize os controles conforme o layout mostrado na Figura 9.4, empregando a propriedade Text dos botes e ttu los para tornar a interface do formulrio igual da figura.

Desenvo lve ndo uma Interface com o Usurio com os Formulri os Windows

229
"!:l EI

FIGURA

9.4

.,.............................., f""'.........

Uma maneira possvel

de orgal1i=al" a iII/e/face no aplicatil'o


de exemplo.

__ _

. _ .. _ _

..

Nomeando Seus Controles


Antes de criar um mani pulador de eventos, renomeie todos os nomes-padro de seus controles (Buttonl , Button2, TextBoxl e assim por diante). Voc ter de usar o nome para acessar o controle e seus atributos, portanto, recomendo que utilize alguma forma de conveno de nomeao. Veja a seguir minhas sugestes para esses controles, com base na conveno de nomeao que tenho usado (e muitas outras pessoas tambm) no Visual Basic h anos: txtSource e txtOes t i na t i on para as duas caixas de texto, ordenadas de cima para baixo. btnCopy, btnMove e btnDel ete para os botes. No Visual Basic 6.0 e em verses anteriores, os botes eram chamados de boies de comando (em vez de apenas ' boto' como no Visual Basic .NET), portanto, muitas pessoas usavam o prefixo cmd quando os nomeavam. lblSource e lblOestination para os ttulos. Renomear um controle igua l a faz-l o com um formulrio: selecione o controle, acesse suas propriedades e, em seguida, altere a propriedade (Name). Renomeie todos os controles antes de passar para a prxima parte do exemplo.

Manipulao de Eventos
Para programar uma interface com o usurio, voc precisa entender o conceito de eventos e programao dirigida a eventos. Sempre que o usurio executa uma ao, como dar um clique em um boto ou digitar um valor na caixa de texto, ela chamada de evenfQ. Se quisermos ter um cdigo que seja processado quando um evento ocorrer, precisaremos criar um manipulador de eventos para aquele no qual estejamos interessados.

Dia 9

Por meio do IDE do Visual Studio .NET, ser fcil criar um manipulador de eventos para um de seus controles. Um evento comum para o qual pretendemos ter um cd igo , por exemplo, o clique em um boto de seu formulrio. Essa ao chamada evento Cl ick de um boto, e pode-se adic ionar ou editar o cdigo associado a esse evento dando um cl ique dup lo no boto. Voc ser enviado para a janela de edio de cd igos e a uma nova sub-rotina chamada <nome do boto> Click (veja a Listagem 9.1). O nome da rotina no muito impOltante, mas o formato-padro que o IDE uti liza. D um clique duplo no bOio Copy para passar para o cdigo apropriado. Observe que se no tivesse renomeado o boto, seu novo evento Cl ick teria um nome parecido com Buttonl_Cl i ck, em vez de btnCopy_Cl i ck. LISTAGEM 9.1 Listando um Manipulador de Eventos Vazio para o Evento Copy

1 Private Sub btnCopy_Click(ByVal sender As System.Object. 2 ByVal e As System.EventArgs) Handles btnCopy.Click


3

4 End Sub Agora, qualquer cdigo que voc inserir nessa rotina ser executado quando o usurio der um clique no boto. Neste exemplo, adicionaremos um cdigo a todos os botes (btnCopy, btnMove e btnDelete), mas teremos de comear com um, portanto, d um clique duplo em btnCopy e acesse o cdigo associado aele. Nesse manipu lador de eventos, queremos adic ionar um cdigo que copie o arquivo especi ficado em IX tSource para o existente em txtDest i na t i on. Para tanto, teremos de trabalhar com o espao de nome System. 10. Esse espao de nomej foi referenciado em seu projeto porque faz parte de System.DLL, mas podemos tornar seu cdigo muito mais simples de ler e digitar se adicionarmos uma instruo Imports System.lO no incio do cdigo de seu formu lrio. Depois que a instruo for inserida, voc poder referenciar os objetos desse espao de nome sem ter de incluir a referncia completa. Para obter uma cpia do arquivo, podemos usar o mtodo esttico Copy da classe System. lO . Fi 1e, mas antes precisamos dos nomes dos arquivos de origem e de destino. Para acessar o contedo de uma caixa de texto, use sua propriedade Text, referindo-se ao objeto especfico atravs de seu nome. LISTAGEM 9.2 Copiando Arquivos por Meio dos Mtodos Estticos do Objeto File

1 Private Sub btnCopy_Cl ick(ByVal sender As System.Object. ByVal e As System . EventArgs) Handles btnCopy . Click 2 Dim sSource As String 3 Oim sDestination As String 4 sSource: txtSource.Text() 5 sDestination : txtOestination . Text() 6 File,Copy(sSource, sDestination) 7 End Sub

Desenvo lvendo uma Interface com o Usurio com os Formulrios Windows

231

ANLISE

Com os valores que voc precisa annazenados em variveis alfanumricas, a cpia efetiva do arqu ivo pode ocorrer. J que Copy um mtodo estt ico da classe Fi le, no necessrio criar uma instncia; basta chamar Fi 1e . Copy. No entanto, s essa linha (linha 6 da Listagem 9.2) no representa todo o processo, porque um tratamento apropriado de erros deve ser ad icionado. No caso de uma cpia de arquivo, muitos erros diferentes poderiam ocorrer, desde 'o arquivo de destino no ex iste' at 'no h espao suficiente em disco'. Sempre que um erro acontecer, poderemos apenas comunicar ao usurio usando o mtodo estt ico Show da classe MessageBox. Essa classe, quej foi em pregada neste livro, faz parte do espao de nome System. Wi ndows . Fonns e uma maneira rpida e fcil de inserir uma caixa de dilogo. A Listagem 9.3 fornece um exemplo da utilizao do mtodo MessageBox. Show em reposta a urna exceo. U sando a Classe MessageBox para E xibir um Erro

LISTAGEM 9.3

1 Private Sub btnCopy_Click(ByVal sender As System .Object, 2 ByVal e As System.Even tA rgs) Hand1es btnCopy.Click 3 Oi m sSource As String 4 Oim sOestination As String 5 sSource = txtSource.Text() 6 sOestination = txtOestination.Text() 7 Try 8 Fi1e . Copy(sSource. sOestinat ion) 9 Catch ob j Exception As Exception 10 MessageBox.Show(objException. Me ssage) 11 End Try 12 End Sub
,

Criando Vrios Manipuladores de Eventos para um Unico Evento


A parte importante da rotina do manipulador de eventos no seu nome, btnCopy Cl i ck. mas Handl es btnCopy C1i ck que fo i adicionada no fina l da declarao. Essa instruo informa ao Visual Basic .NET que essa rotina o manipulador desse evento. Diferente das verses anteriores do Visual Basic, que usavam apenas o nome da rotina para associar o cdigo a eventos especficos, no Visual Basic .NET possvel ter um nico procedimento manipulando mltiplos eventos ou s um evento com vrios manipuladores. Copie toda a rotina btnCopy C1 i ck e a renomeie como CopyCl i ck, deixando a mesma lista de parmetros e ainda usando Handl es btnCopy. C1 i ck. A identidade do procedimento (que composta de sua li sta de parmetros e do valor retornado, se houver algum) deve ser exatamente a mesma vista no proced imento original para que atue como um manipulador de eventos, mas o cdigo pode ser qualquer outro. Agora, altere o cdigo desse segundo procedimento para que apenas exiba urna mensagem em vez de realizar todo o trabalho de cpia do arquivo (veja a Listagem 9.4). Tente executar seu projeto e d um clique no

Dia 9

boto Copy. Os dois manipuladores de eventos sero chamados, fazendo a cpia do arquivo e exibindo a caixa de dilogo com a mensagem.
LISTAGEM

9.4

A Instruao Handles Vincula uma Rotina a um Evento Especfi co

1 Private Sub CopyCl i ck(ByVa l sender As System .Object , 2 ByVal e As Sys tem EventArgs) Handles btnCopy . Cl ick . 3 MessageBox. Show ("CopyC1 i c k") 4 End Su b Remova a rotina Copye1 i ck selecionando e exclui ndo o texto, e passe para as rotinas dos eventos dos dois outros botes.

Encontrando Objetos e Eventos por Meio do Editor de Cdigos


Em vez de voltar janela do projeto e dar um clique duplo em cada um dos outros dois botes, voc pode passar para a roti na de manipulao do evento C1 i ck diretamente na janela do cd igo. Selecione o nome do objeto (btnMove, por exemplo) na prim eira lista suspensa (lado esquerdo) acima do editor de cdigos e, em seguida, selecione o evento desejado (C1i ck) na segunda li sta suspensa. Isso ter o mesmo efeito de dar um clique duplo no objeto do projeto, portanto, os dois mtodos podem ser usados. O cdigo dos botes Move e Delele empregaro os mtodos estticos correspondentes do objelo Fi 1e. A Listagem 9.5 mostra uma mane ira com a qual esses do is botes poderiam ser codificados.
LISTAGEM

9.5

Transferi nd o e Excluindo Arquivos por Meio dos Mtodos Estticos do Objeto File

1 Private Sub btnMove_Click(ByVal sender As System.Object, 2 ByVal e As System.EventArgs) Handles btnMove. C1ic k 3 Dim sSource As String 4 Dim sDestination As St r ing 5 sSource; tx t Source. Text() 6 sDestination = txtDestination . Tex t() 7 File.Move(sSource , sDestination) 8 End Sub
9

10 Private Sub btnDe1ete_C1ick(ByVa1 sender As Object ,_ 11 ByVal e As System.EventArgs) Handles btnDelete . Click 12 Dim sSource As String 13 sSource = txtSource .Text() 14 Fi1e.De1ete(sSou r ce) 15 End Sub

Desenvo lve ndo um a Interface com o Usurio com os Formulri os Windows

233

Mltiplos Eventos com um Manipulador


Como alternativa, voc pode mani pular os trs eventos C1 i ck por meio de um procedimento, ai terando a instruo Handl es para que inclua todos eles. Apenas a declarao dessa rotina de manipulao de eventos mostrada na Listagem 9.6; os detalhes foram deixados para os exercc ios desta lio.
LISTAGEM

9.6

Usando a Palavra -C have Hand1es para Vin cula r Vrios Eventos a um nico Proced imento ou Vrios Procedimentos a um nico Evento

1 Pr ivate Sub DoEverything{ByVa l sender As Object , 2 ByVal e As System. EventArgs) _ 3 Hand les btnCopy.Cl i ck. btnMove.Click. btnDelete.Click A nica restrio q uantidade de eventos que voc pode man ipular com apenas uma roti na que todos tm de em pregar o mesmo conjunto de parmetros. O evento Cl ick de um boto, por . exemplo, recebe dois parmetros (System Object e System. EventArgs), enq uanto o evento ChangeUICues do mesmo boto recebe parmetros diferentes (System.Object e System.Windows. forms.UICuesEventArgs) . Portanto, os dois no poderi am ser mani pulados por uma n ica rotina. A fina li dade desses parmetros fornecer infonnaes sobre oevento a seu manipu lador, porm alguns eventos passam informaes de tipos diferentes das de outros.

Mais Informaes sobre os Controles


O exemplo no qual voc acabou de trabalhar fez com que adicionasse caixas de texto, ttulos e botes a um fonnulrio novo, mas muitos outros controles esto disponveis.

A seguir encontramos uma lista com vrios dos controles embutidos mais freqlientemente usados, e uma descrio breve: labe l /li nk label Estes doi s controles proporcionam uma maneira de inse rir textos estticos (no editve is) em um formulrio. O controle lin k lahel adiciona alguns recursos complementares, que podem fazer com que uma parte ou todo o seu texto se parea com um link HTML e possua um evento extra (li nkCl i cked) para ind icar quando um usurio deu um cli que no trecho do hiperlink contido no nome. Sutton O boto-pad ro, com bem mais recursos do que possua em verses anteriores do Visual Basic. Com as propriedades do boto, voc pode adicionar uma fi gura, alterar o layout do texto e da fi gura, configurar o ttulo e muito mai s. Text Sox Fornece uma rea para insero de texto em fo rmulrios e d suporte a uma ed io bsica . Pode ter vrias linhas se a propriedade Mu I ti I i ne for configurada com True e disponibiliza um menu de atal ho-padro (com um clique no boto direito do mouse) que d ao usurio o recurso de recortar/copiar/colar.

234

Dia9 e Context Menu Embora no estejam juntos na Toolbox, esses dois controles s<1o usados na cria<1o de sistemas com menus para sua janela. O Dia 16, "Formulrios Windows Avanados" detalhar como constmir menus para seus sistemas usando esses dois cOlltf()les.

Mai n Menu

Estes do is contro les so usados para exibir e inserir valores simpl es si m/no ou verdadeiro/falso. Em geral so empregados para mostrar urna Iista de opes que devem ser ati vadas ou desativadas, mas a diferena entre eles est em corno manipulam a se leo de outro controle do mesmo tipo dentro de seu grupo. Em um grupo de botes de opo, a inteno que apenas um deles seja ativado por vez. Por outro lado, vrias caixas de se leo podem ser se lecionadas, o que significa que voc pode marcar quantas desejar. Picture Box Disponibiliza um loca l para voc exibir uma fi gura interessante ou desenhar fi guras usando a biblioteca de elementos grficos.
Check Box/Radio Button

H muitos outros, mas todos funcionam em essncia da mesma maneira. Voc os insere em seu formulrio, mani pula suas propriedades por meio de cdigo ou da janela Properties e escreve um cd igo para manipular seus eventos. Embora no tenha a inteno de abordar cada control e individualrnente, detalharei o uso de dois deles a ttulo de demonstrao.

Criando Grupos de Botes de Opo


Corno j mencionei, os botes de op<1o e as caixas de seleo s<1o usados para representar as configuraes que podem ser at ivadas ou desat ivadas, mas os dois tipos de contro le apresentam uma diferena importante. Os botes de opo foram proj etados para ser usados apenas em grupos de dois ou mais, e apenas um boto do grupo pode ser selecionado. Dar um cl ique em um boto de opo faz com que ele seja selecionado e, automaticamente, desat iva o boto at ivado antes. As caixas de seleo, por outro lado, tambm so ativadas e desativadas por meio de um clique, mas uma quantidade aleatria delas pode ser selecionada ao mesmo tempo em um grupo. Considere esses dois tipos de controles em termos de um exame de m ltipla escolha : as caixas de seleo seriam adequadas para uma pergunta em que a resposta fosse elaborada como "Selecione todas as respostas corretas", enquanto os botes de opo s serviriam em perguntas do tipo "Se lecione a resposta mai s apropriada". Para criar um grupo de botes de opo, primeiro preciso gerar um novo fo rmulrio, porque o anterior, fi 1er, j est bem che io. Com o projeto que contm fi 1er aberto na janela Solution Explorer, d um clique nele com o boto direito do mouse, selecione as opes Add e Add Windows Form no menu que aparecer, e digite um nome para seu novo formulrio na caixa de dilogo resu ltante (voc poderia digitar Radio uttons, por exemplo). D um cl ique em OK para adicionar esse formulr io novo ao projeto atual. Agora, no fo rmulrio recm-criado, use a Toolbox para adicionar um controle Group Box. Esse controle, que possui uma aparncia retangular com um ttulo e bordas de aparncia bem definida, usado na criao de grupos e contm outros controles. Mova e redimensione a caixa de modo que ocupe a tela quase toda. Para criar um conjunto de botes de opo, s temos de comear a adicion-los a essa caixa de grupo. Insira quatro

Desenvo lve ndo um a Inte rface co m o Usu rio co m os Fo rmul ri os W in dows

235

desses controles na caixa e posicione-os em um layou! apropriado. No preciso fazer nada mais com eles para que ajam como um grupo; isso determinado pelo fa to de que foram inseridos na mesma caixa de grupo. Se voc executasse seu projeto neste momento, seu novo formulrio no apareceria porque, ao ser criado, o projeto con fi g urado para exibir o pri meiro fo rmulrio. Para alterar isso a fim de que seu novo fonn ll lrio seja executado em vez do primei ro, d um cli que com o boto d ireito do mouse no projeto, que se encontra na j anela Sollltion Exp lorer (do mesmo modo como quando adicionou um arquivo anteriormente), e selecione Properties no menu de atalho. Isso abri r um caixa de dilogo grande contendo vrias opes e configuraes (veja a Figura 9.5). O valor que precisamos al terar est na pri meira pgi na (Common Properties, General) e se chama Startup Object. A confi gurao de Startup Object determina qual dos fo rm ulrios, ou outros cd igos, ser executado quando o projeto for processado. No momento, e le deve ter o valor fnnFi ler (o nome do primeiro formulrio deste projeto). Altere-o para RadioButtons ou para o nome que deu ao formulrio que ad icionou por ltimo.

FIGURA

9.5

Usando a caixa de dilogo das propriedades do projelo. I"Oc pode COII/rolar I'rias COI!figll/"(U.,eS. incluindo O Slorlup Objecl.

:. eom...""""_,,.

-....
~

......"'"

" " - 001.....,

Agora, se voc executar o projeto, seu novo form ul rio (com seus quatro botes de opo) ser exibido (veja a Figura 9.6).

9.6 VIII g/"llpo de bales de oplio lili/a


FIGURA

II/aneiro excelellle de permilir que O IIsurio escolha /fil/a op(io entre Irias.

~.'e'

Dia 9

Depo is que estiverem ativos e funcionando, tente dar um clique nos botes de opo e observe que apenas um pode ser selecionado. possvel empregar a propriedade Checked para saber se um boto de opo foi se lecionado usando um cdigo. Para tentar acessar esses controles por meio de cdigo, voc pode adicionar um scri pt de teste a seu novo forrnulrio. Feche~o (utilizan~ do o boto X do canto superior direito) e vo lte ao seu modo estrutura. Adicione um boto qua l~ quer da Toolbox, altere seu nome para btnT est, o ttulo para "T es t" e, em seguida, d um clique duplo nele para passar visual izao do cdigo de seu evento~padro (C1 i ck). O cd igo da Li sta~ gem 9.7 demonstra como poderamos verificar que conjunto de botes de opo foi se lec ionado e exibi r o valor apropriado usando MessageBox. Insira esse cdigo no evento C1 i ck de btnT es t e execute seu projeto para test~ l o . LISTAGEM 9.7 Usando Botes de Opo quando apenas uma Opo Puder Ser Se l ecionada

1 Private Sub btnTest_C1ick(ByVal sender As System.Object, 2 ByVal e As System.EventArgs) Hand1es btnTest.Click Dim sSe1ected As String 3
4

5 6 7 8 9 10 11 12 13
14

If RadioButtonl.Checked Then sSelected" "RadioButtonl" Elself RadioButton2 . Checked Then sSe1ected " "RadioButton2" E1seIf RadioButton3.Checked Then sSe1ected = "RadioButton3" ElseI f RadioButton4.Checked Then sSe lected " "RadioButton4" End If

15 Mes sageBox .Show(sSelected , "Se1ected Radio Button") 16 End Sub 17 End Class

Adicionando uma Caixa de Seleo ao Exemplo de Filer


Se voc substitusse os botes de opo do exemplo anterior por caixas de seleo, poderia sele~ cionar quantas delas desejasse ao mesmo tempo (ou mesmo nenhuma). No entanto, o cdigo de teste ainda funcionaria, (presumindo que voc desse s caixas de seleo o mesmo nome dos botes de opo ou alterasse o cdigo incluindo nomes novos) porque as caixas de seleo tambm fornecem a propriedade Checked. Um exemplo mais til de uma caixa de se leo pode ser criado pela alterao do primeiro rormll~ lrio que voc gerou (Fi 1er). Nesse formu lrio, se o usurio inserisse o nome de um arquivo de destino que j existisse e, em seguida, desse um clique nos botes Copy ou Move, um erro ocor~ reria. Como alternativa, o cdigo poderia apenas substituir o arquivo existente sempre que a l ~

Desenvolvendo uma Interface com o Usurio com os Formulrios Windows

237

gum fosse encontrado, sem exibir nenhuma mensagem de erro. Voc pode adicionar uma caixa de seleo a esse formulrio que d suporte ativao e desativao desse recurso de subst itu io automtica. Para comear, acesse o primeiro forrnu lrio (Fi ler) no modo estrutura e, em seguida, adicione um novo controle Check Box da caixa de ferramentas (Toolbox). Mude o ttul o para 'Overwrite Exist ing' alterando a propriedade Text na janela Properties. Neste ponto, voc tambm pode configurar o padro ou o valor inicial da caixa de seleo definindo a propriedade Checked na janela Properties. Movao novo controle para a posio abaixo do campo para o destino e, ento, d um cli que duplo no boto Copy para passar edio do cdigo. Ser preciso fazer uma pequena alterao tanto em btnCopy_Cl i ck quanto em btnMove_Cl i ck antes que a caixa de seleo possa ter algum efeito real. No momento, a chamada ao comando Copy e a chamada ao comando Move usam apenas dois parmetros (origem e destino), mas Copy d suporte a uma opo adicional (substituir) q ue determina se ele deve exclu ir um arquivo exi stente caso seja encontrado. Con figurando essa nova propriedade da mesma maneira que a propriedade Checked da caixa de seleo, poderemos controlar como um arquivo existente ser manipulado. A Listagem 9.8 mostra a alterao em btn Cl i ck, que manipula a nova cai xa de seleo.
LISTAGEM

9.8

Adicionando um Caixa de Se l eo a

1 Private Sub btnCopy_Click(ByVal sender As System.Object. 2 ByVa l e As System.EventArgs) Handles btnCopy.C l ick 3 D m sSource As String i 4 Dim sOestination As Stri ng 5 sSource = txtSource . Text() 6 sDestination = txtDest i nation.Text() 7 Try 8 File.Copy(sSource, sDest i nation, chkOverwrite.Checked) 9 Catch objExcept i on As Exception 10 MessageBox.Show(objException.Message) 11 End Try 12 End Sub Manipular essa mesma situao no caso do comando Move um pouco mais complicado. Em vez de apenas alterar um parmetro, voc ter de gerar uma resposta ao erro de arqu ivo ex istente e abortar a tentativa de transferncia ou excluiro arquivo inadequado. A Listagem 9.9 mostra uma maneira de manipular o evento btnMove Cl ick.
LISTAGEM

9.9

Ma nipu l ando o Evento

btnMove Cl ick

1 2 3

Private Sub btnMove_Click(ByVal sender As System.Object . ByVal e As System . EventArgs) Ha ndles btnMove .Click Dim sSource As String

Dia 9

LISTAGEM 9 .9

Manipu l ando o Evento

btnMove Cl ick (continuao)

4 5 6 7 8 9 10
11

12

13
14

15
16

17 18

Dim sDestination As String sSource = txtSource.Text {) sDestination = txtDestination . Text{) If File. Ex ists(sSource)Then If File.Exists(sDestination)Then If chkOverwrite.Checked lhen File.Delete(sDestination) El se MessageBox.Show(UTransferncia abortada . o arquivo de destino j existe") Return End If End If File .Move(sSource. sDestination) End If End Sub

Validao de Entradas
Como o nome 'fonnulrio' sugere, as janelas e caixas de dilogo so em geral usadas para per~ mitir a entrada de dados em seu aplicativo. Com freqncia, quando as informaes forem inse~ ridas no sistema, recomendvel que elas passem por alguma forma de validao (verificao de datas vli das, quantidade correta de dgitos nos nmeros telefnicos e ass im por diante). O .NET Framework fornec e um modelo para codificao dessa validao. Dado um formulri o com vrios campos de entrada (caixas de seleo, por exemplo), provvel que tambm haja um boto ou dois. Pelo menos um desses botes ind icar que o usurio j con~ siderou concluda a digitao de dados. Portanto, quando ele der um clique em OK , voc deseja~ r que o cdigo de val idao seja executado, verificando se est tudo correto nos campos. Quando o usurio der um clique no boto Cancel , no haver motivo para se preocupar com a va~ lidao dos dados porque ele desejar cancelar o formu lrio . Verifi car a validade dos dados apenas quando o usurio d um cl ique em OK (ou Save, ou o que for apropriado em seu apli cat ivo) evitar o surgimento de problemas em locais onde ele tiver de inserir dados vlidos antes que voc permita que encerre seu aplicativo. Trabalhei com muitos aplicativos que me foravam a digitar um nmero telefOnico adequado antes que me deixassem sair de uma caixa de dilogo indesejve l, mesmo quando esse nmero era descartado por eu ter dado um clique no boto Cancel! Vrios aspectos das classes dos fonnul rios Windows funcionam em conjunto para fornecer essa validao: a propriedade CausesVa 1i dat ion e os eventos Va 1ida ti ng jVa 1i dated, que exis~ tem em todos os controles. O processo geral para o uso dessas propriedades e eventos config ll~

Desenvo lve ndo uma Interface com o Usurio com os Formulri os Windows

239

rar CausesVal idation como True (ativado) em todos os controles de entrada efetiva de dados (caixas de texto, botes de opo, caixas de combinao e outros) e tambm em qualquer boto que faa cam que os dados sejam usados ou salvos (OK, Save, Continue, Next e outros). Em botes como Help, Cancel, Prev ious ou outros que, ao serem cl icados, voc no prec ise saber se os dados so vlidos, configure a propriedade CausesValidat i on como False (desativada). A segui r, insira um cdigo no evento Validating para verificar se um campo vlido. Quando o usurio tentar alternar se u foco para um controle em que Causes Va 1i da t i on = True, o evento Va1i dat; ng ser lanado em todos os controles de edio que tiverem recebido o foco desde a ltima vez em que um controle com CauseValidation igual a True foi accssado. Isso um pouco complexo, portanto, percorreremos as etapas do processo: Voc possui um fonn ulrio para inserir/editar endereos (veja a Figura 9.7), com um botoOK e um Cancel, e vrias caixas de texto para entrada de dados. Voc configurou a propriedade CausesVal idation de todas as caixas de texto como True. Tambm o fez no boto OK , mas no em Cance l.
9.7 ES/(f caixa de dilogo. projetada para entrada e edio de endereos, li 1111/ exemplo de 1/111
FIGURA
~Add'M'
S~eel:

EJ

formlllrio de elllrada de dados e

1", - - - - ~ " '<bR

Sl.<leNrov.f"i .",- -

[9E052

eSlt dispollrel para dOlVllload /lO site da Web desle Iil'/"o.

II

C-:eI

o foco no momento est na caixa de texto txtStreet, e o usurio pressiona Tab a fi m de passar
para a caixa de texto txtCity. Neste ponto, por causa da propriedade CausesValidation de txtCi ty, o evento Va 1idati ng de txtStreet acionado. Agora, o evento Va 1ida ti ng deve verificar o contedo de txtS t reet e se cert ificar de que seja vlido. Ele pode cancelar a vai idao se os dados no forem corretos. Se os dados estiverem corretos (e o evento no for cancelado), ento, o evento Va 1i dated de txtStreet ser chamado indicando que a va lidao foi bem-suced ida. Se os dados no estiverem corretos e o evento for cancelado, a tentativa de mover o foco tambm ser anu lada, deixando-o na caixa de texto txtStreet. Portanto, sempre que o foco estiver em um controle em que CausesVa 1i dat i on = True, o evento Validating ser lanado em todos os controles que tenham sido visitados desde a ltima vez que voc acessou um controle em que a propriedade CausesVa 1i dation esti vesse ativada. Isso no depende da direo, assim, se o usurio tivesse pressionado Tab ou dado um clique novamente em txtSt reet depois de passar para txtCi ty, o evento Va 1i dat i ng ainda seria chamado em txtC i ty. Ainda est confuso? A Listagem 9. 1Ocontm o cdigo de vrios eventos de validao para o formulrio de endereos (Address Fonn), o que pode ajudar um pouco. O formu lrio completo tambm pode ser descarregado do site deste livro na Web, para que voc no perca tempo reescrevendo-o.

Dia 9

LISTAGEM 9 .10

Eventos de Va l idao do fonnulrio de Endereos

3 4
5

6 7
8

9
10
11

Private Sub txtZi p_Va lidating(ByVal sender As Object , ByVal e As System.ComponentModel.CancelEventArgs) Handles txtZip . Validating 'converta o parmetro sender em um controle da cl asse System.Windows. Fonns.Control Dim ctlSender As Control ctlSender " CType{sender, Control) Dim bValidPostalCode As Boolean " False 'Aceite como vlido somente o formato de cdigo postal dos EUA/Canad . 'Verif ique se txtCountry " Canada , caso contrrio pressuponha EUA 'Man i pule a possibilidade de trs formatos, 'EUA curto 1'1" , EUA longo Cdn AIAIAI

12
13 14

"'*'-"",

15 16 17
18 19

Dim sPostalCode As String Dim sPattern As String Dim objRegEx As Regex sPostalCode" ctlSender . Text. Trim.Rep lace (" ", " ") If txtCountry . Text.Tri m. ToUpper " "CANADA" Then If sPostalCode . Length " 6 Then sPa t tern ,, " [ABCEGHJKLMNPRSTVX Y] \d [A -Z] \d [A -Z] \d" End If El se If sPostalCode . Length " 10 Then sPattern " "\d\d\d\d\d-\d\d\d\d" ElseIf sPostalCode.Length " 5 Then sPattern " "\d\d\d\d\d End If objRegEx . IsMatch(sPostalCode, End If
II ")

20 21 22 23 24 25 26 27 28
29 30 31

32
33

34

35 36 37 38 39 40
41 42

If sPattern <> Then If objRegEx . IsM atch(sPostalCode, sPattern)Then bValidPostalCode " True End If End If If bVal i dPostalCode " False Then e.Cancel " True errAddress.SetError(ctlSender, "Cdigo Postal Invlido") End If End Sub
II II

Private Sub GenericValidated(ByVal sender As Object , 43 ByVal e As System.EventArgs) _ 44 Handles txtSt reet . Validated, txtCity.Validated, _

Desenvo lve ndo uma Interface com o Usurio com os Formulri os W in dows

241

liSTAGEM 9.10

Eventos de Validao do Formulrio de Endereos (continuao)

txtCountry . Validated, txtZip . Validated, 46 txtState . Val i dated 47 'conve rta o parmetro sender em um controle da classe System.Windows.forms.Control 48 Dim ctlSender As Control 49 ctlSender " C Type(sender,Control) 50 'Elimine erro , se existir algum 51 errAddress. SetE rror(ctl Sender , " ") 52 End Sub
45

53

Pr ivate Sub GenericNotEmpty(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) 56 Handles txtStreet . Validating . txtCity . Validating , 57 txtState . Va l i dati ng
54 55
58

59
60
61

62 63

64
65

66

'converta o parmetro sender em um controle da classe System.Windows.Fonns.Control Oim ct lSender As Control ctlSender" CType(sender , Control) If ctlSender . Text. Trim" " " Then e.Cancel " True errAddress . Set Error (ct 1Sender , "Preenchi mento ob ri gatri o") End If End Sub

Quando com binados com o controle ErrorProvi der, que ser discutido ainda nesta lio, os recursos de val idao da platafonna .NET tornam fcil a criao de form ul rios para entrada de dados.

Usando a Classe Message ox


Uma caixa de dilogo um tipo especial de form ulrio exibido de maneira restritiva, o que sign ifica que o usurio prec isa lidar com ela antes de poder interagi r com qualquer outra parte do aplicat ivo. Em geral so usadas para informar algo ao usurio (como um erro) ou obter alguma informao. Elas no so empregadas na ex ibio de informaes de status ou progresso, devido a sua nat ureza restrit iva; devem ser utilizadas apenas quando voc tiver de se comunicar de imediato com o usurio, antes de dar continuidade a algum tipo de execuo. Voc mesmo pode criar caixas de dilogo como se fo ssem qualquer outro formulrio Windows, e mostrarei como fazer isso da maneira correta mais tarde nesta li o. Em geral, no entanto, no preciso algo complexo; s queremos formular uma pergunta si mples (cuja resposta ser sim/no ou OK/cancele) ou exibir uma mensagem para o usurio. a que a classe MessageBox

242

Dia 9

entra em cena. Essa classe usada para exibir textos em lima caixa de dilogo si mples e um conjunto de botes entre os quais o usurio poder escolher sua resposta (veja a Fig ura 9 .). No

possve l criar lima instncia dessa classe, mas ela expe apenas um mtodo estt ico, Show, atravs do qual pode-se configurar a caixa de dilogo da maneira desejada e exibi -Ia, tudo em lima s
chamada.

FIGURA

9.8
Itil

A classe MessageBox

......11> _" ""

1/11/0 jerromellfo

que pode exibir

1/1110

mensagem jl/mo fi I'rias combinaes de


boies.

Parmetros

o mtodo Shaw aceita sete parmetros diferentes, mas voc pode fornecer apenas os valores que
tiver. Esse mtodo poss ui 12 tipos de sobrepos ies para dar suporte a vrias combinaes de

parmetros. Todos os parmetros que podem ser usados so listados a seguir, com uma breve descrio de sua final idade: Text Representando a mensagem exibida por MessageBox, este parmetro no opcional; todas as sobreposies de Show o inclucm. Caption Outra string, como Text , este parmetro detennina a barra de ttulo que ser mostrada por MessageBox. Buttons Aceitando um dos valores possveis enumerados, este parmetro controla os botes mostrados na caixa de mensagens. Messa geBoxButtons.AbortRetry Ignore far a caixa de dilogo exibir os botes Abort, Retrye Ignore; MessageBoxBut tons . YesNo exibe os botes Yes e No e assim por diante. Icon Controla qual figura, se houver alguma, ser exibida junto mensagem. Pode ser qualquer um dos nove valores, mas as verses atuais dos sistemas operacionais s fornecem fi guras para quatro deles e, portanto, todas as nove opes so convertidas em uma das quatro fi guras. Defau l tButton Quando voc tiver ma is de um boto na caixa de dilogo, s um deles poder ser o padro. Se o usurio press ionar Return ou Enter quando a ca ixa de mensagem (MessageBox) for aberta, ela ser tratada como se ele tivesse dado um clique no boto-padro. Este parmetro pode ser configurado como Button1, Button2 ou Button3, o que conduzir a um dos botes apropriados. Options Estas opes controlam a aparncia da caixa de mensagem e sero especialmentc teis quando seu apl icativo estiver localizado em outro pas/regio. As opes incluem tornar o texto justificado direita, legvel da direita para a esquerda e certi ficar que a caixa de mensagem aparea apenas na rea de trabalho principal do sistema operacional.

Desenvo lvendo uma Interface com o Usurio com os Formulri os Windows

243

OwnerWindow Este parmetro especifica uma janela dentro de seu aplicativo na qual a caixa de mensagem (MessageBox) deve aparecer. Em geral, esta funcionalidade no necessria, mas est disponvel. As Figuras 9.9 e 9. 1O mostram alguns exemp los de chamadas, a MessageBox . Show( ) e as caixas de dilogo resultantes.

FIGURA 9.9

A caixa de mellsagem-padrcio.
chamada apenas com o lexlo da mensagem (o ml/imo).

<T

FIGURA 9 .10

Uma caixa de
mensagem
IIIO/S

personali::ada, especificaI/do o texto.


o lf/llo e os

parmetrus dos

botes.

Obtendo Resultados
Depois que voc tiver escol hi do os botes que quer exibi r, desejar saber em qual o usurio deu um clique (pressupondo que voc tenha exibido algo mais alm de um boto OK). Essa informao retornada pelo mtodo Show como um valor Di aI ogResult, que pode ser armazenado em uma varivel, ou a cham ada do mtodo pode ser uti lizada diretamente em uma expresso ou instruo cond icional. A Listagem 9. 1 I mostra como formu lar uma pergunta ao usurio empregando a classe MessageBox e duas maneiras de manipular o resultado.
LISTAGEM 9.11

Usando a Classe MessageBox para Fonnul ar Perguntas Simples e, em Seguida. Atuar sobre a Resposta

Private Sub btnTest_Cl ick(ByVal sender As System .Object . 2 ByVal e As System.EventArgs) H l es btnTest.Click and 3 Oim drResult As DialogResult 4 drResult = M essageBox.Show("O que deseja fazer?". 5 "Exemplo" . MessageBoxButtons.RetryCancel)
1
6 7

If drResult = OialogResult,Retry lhen

8
9

10

'repita El se 'cancele

Dia 9

LISTAGEM 9.11
11

Usando a Classe MessageBox para Formular Perguntas Simples e. em Segu ida. Atuar sobre a Resposta (continuao)

End If

12 13 Select Case MessageBox.Show("Algo inv l ido oco rreu". 14 "Processo Longo". MessageBoxBu t tons. AbortRet ry Ignore) Case OialogResult .Abort 15 16 'abor te 17 Case OialogResult.Retry 18 'repita 19 Case Oi alogResult . Cancel 20 'cancele 21 Case E1 se 22 'hrrrn .. . como cheguei aqui? 23 End Select 24 End Sub

Como demonstrao do uso de MessageBox em um sistema real, voc pode adicionar uma funcional idade complementar ao fonn ulrio Fi 1er origina l. Esse formulr io, que penn ite copiar, transferir e excluir arquivos. no apresenta nenhuma mensagem de confirmao (' Est certo de que deseja excluir c: \test . txt?' ), mesmo quando solici tada a excl uso do arq uivo completo. A fim de adicionar esse recurso ao fo rmulrio Fi I er, poderamos usar urna caixa de mensagem para exibir a confi rmao e botes VeslNo, executando ou cancelando a ao conforme a resposta. A Li stagem 9.12 mostra as rot inas dos trs eventos, alteradas para incl uir a etapa de confirmao. LISTAGEM 9.12 Usando o M todo MessageBox .Show para Sol i ci tar Confi rmao

1 Private Sub btnCopy_Click(ByVal sender As System.Object . _ 2 ByVal e As System.EventArgs) Hand l es btnCopy . Cl ick 3 Dim sSou r ce As String 4 Dim sDest inat i on As String 5 sSource ~ txtSou rc e . Text() sOestination ~ txtOestination.Text() 6
)

8
9

If File .Exi sts(sSou r ce) Then Dim sConfirm As String sConfinn "String.Format("Est certo de que deseja copiar lO} em III?". sSource . sOestination) If MessageBox.Show(sConfirm, "Confirm Copy" , M essageBoxButtons.Yes N _ o.

10 11

12
13 I' 15

16

Desenvo lve ndo um a Interface com o Usurio com os Formulri os Windows

245

LISTAGEM9.12 17 18
19

Us ando o Mtodo MessageBox .Show para Sol i ci tar Confi rmao (continuao)
=

Mes sageBoxIcon.Question. _ Mes sageBoxDefaultButton.Button 2)

DialogResult.Yes Then

20 Try 21 File . Copy(sSource. sDestination, chkOverwrite . Chec ked) 22 Catch objException As Except ion 23 MessageBox .Show{objException.Message) 24 End Try 25 End If 26 End If 27 End Sub
28

29 30 31 32 33 34 35 36 37 38 39
40

Private Sub btnMove_C lick(ByVa l sender As System.Object. ByVal e As System.EventArgs) Ha nd les btnMove.Clic k Dim sSource As String Dim sDestination As String sSource = txtSource.Text() sDestination = txtDestination.Text() If Fi le.Exists(sSource)Then Dim sConfirm As String sConf i rm = String.Format(_ "Est certo de que dese j a transferir {O} para (I}?" . sSource. sDestination) If MessageBox.Show(sConf irm. "Confirm Move", MessageBoxButtons . YesNo. M essageBoxIcon.Question ,_ MessageBoxDefaultButton . Button2) = DialogResult . Yes Then If File.Exists(sOestination)Then If chkOverwr ite .Checked Then Fil e.Oe1ete(sOestination) E1 se MessageBox .Show( "Transferncia abortada, arquivo de destino j existe") Return End If End If File. M ove(sSource. sD i nation) est End I f End I f

41 42 43 44
45

46 47 48 49 50
51 52 53

54 55 56 57 59

58 End Sub

Dia 9

LISTAGEM 9 .12

Usando o Mtodo MessageBox.Show para Solicitar Confirmao (continuao)

60 Private Sub btnDelete_Click(ByVal sender As Object , 61 ByVal e As System.EventArgs) Handles btnOelete.Click 62 Dim sSource As String 63 sSource: txtSource . Text()
64

65 66 67 68 69
70

If File.Exists(sSource)Then Dim sConfirm As String sConfirm: String.Format( "Est certo de que deseja excluir {DI?" , sSource) If MessageBox.Show(sConfi rm ,_ "Confi rm Oel ete". MessageBoxButtons. YesNo, MessageBoxlcon.Question, _ MessageBoxDefaultButton.Button2) : DialogResult.Yes Then

71
72

73
74
75

File.Oelete(sSource) 77 End If 78 End If 79 End Sub

76

Controles Ocultos
Todos os controles usados nesta Iio at agora estavam visveis quando seu proj eto foi executado. Esse o tipo padro de controle com o qual voc trabalhar. No entanto, a plataforma .NET tambm apresenta controles que so iguais aos habituais em quase tudo, exceto por no possurem lima interface visvel no tempo de execuo. Esses controles tambm tm propriedades, mtodos e eventos e foram projetados como um a maneira modular fc il de adicionar recursos especficos a um formulrio. Antes do Visual Basic .NET, os controles ocultos tam bm podiam ser inseridos nos formu lrios, complicando a interface do tempo de projeto, mas ficando totalmente invisveis no tempo de execuo. No Visual Studio .NET encontramos uma maneira muito melhor de manipular esse tipo de controle, posicionando-os cm uma rea separada abaixo da do projeto do fo rmul rio (veja a Figura 9. 11 ). Voc ainda poder arrastar, selecionar, clicar e exc lu -los, porm sem que interfiram na vis uali zao do projeto de seu form ulrio.

Desenvo lve ndo uma Interface com o Usurio com os Formulrios Windows

247

FIGURA 9.11

No Visual Sludio . NET, os co/1/ro/es IXIlIIOS eSlo posicionados em lima rea especial do projelo, para evitar

~''''' '

.. REI

serem confundidos
com elemell/os da illlelface visrel.

H vrios desses controles de tem po de projeto, mas abordare i nesta seo a lg uns dos mai s usados : Timer, Notifylcon, ErrorProvider e os controles de caixas de d ilogo.

Timer

o controle Timer foi projetado para permit ir que os cdigos sejam exec utados a certos intervalos
com base em perodos de tempo. Se o controle estiver ativado, ele acionar automat icamente seu evento Ti ck a intelvalos reg ulares. Pela insero de um cdigo no manipulador do evento Ti ck, voc poder executar a tarefa que desejar de maneira programada. O uso do controle Timer envolve apenas algumas etapas: 1. Depois que voc ad icionar esse controle a seu formul rio, ter de configurar suas propriedades; configure Enabled como True para indicar que o deseja ativo, e a propriedade Interva 1 com o perodo de tempo (em mili ssegundos - 1000 ms so iguai s a I s) que quer entre os eventos. 2, Ad icione seu cdigo ao evento Tick (d um clique duplo no controle Timer para acessar rapidamente o mani pulador dele). Isso tudo o que sc tcm a fazer para que o cd igo inserido no manipulador do evento Tick seja executado uma vez a cada valor de Interval em mi lissegundos. Voc pode testar esse controle em um projeto de s ua autoria seguindo estas etapas : I, Crie um novo projeto vazio - um ap licativo Windows. Um formulrio em branco ser adicionado ao projeto, Fonnl. Certifi que-se de estar visualizando o modo estrutura desse formul rio vazio.

248

Dia 9

2. Arraste um controle Timer de Toolbox (no Windows Farms) para o formulrio. Ele ser adicionado como um contro le rea de controles ocultos (que agora aparecero) com o nome Timerl. 3. D um clique em Timer 1 para selecion-lo e, em seguida, visualize a janela de propriedades, que deve mostrar a voc os valores de Enab 1ed e Interval que determinam o comportamento do perodo de tempo.

4. Configure Enabled corno True, e Interval igual a 1000 (1 segundo).

5. D um clique duplo no controle Timer para passar visualizao do cdigo, e acesse a rotina de manipu lao do evento Tid. Adicione o cdigo mostrado na Listagem 9.13 ao manipu lador do evento Tick.

LISTAGEM 9.13

Cdigo Que Far com Que o Titulo do Formulrio Aja como um Relgio

1 Private Sub Timerl_Ti ck{SyVal sender As System.Object, 2 ByVal e As System.EventArgs) Handles Time r l .Tick
3

4
5

Me . Text = DateTlme.Now.ToLongTimeString()

6 End Sub Execute o projeto (pressionando F5 ou selecionando Start no menu Debug), certificandose de que ele ser o iniciado (d um clique com o boto direito do mouse sobre o projeto no Solution Explorer e selecione Set em StartUp Project) caso tenha mais de um projeto aberto. Quando o projeto for executado, o formulrio dever aparecer, e seu ttulo renetir a hora atual at os segundos. Faa o teste com valores diferentes em I nter . . a1 para ver como essa propriedade afeta o acionamento do evento Ti ck. Para que lique um pouco mais divertido, adicione um bo to ao formulrio e insira essa linha de cd igo em seu evento Cl ick : Timerl.Enabled
=

Not Timerl.Enabled

Tente executar o projeto novamente c d um cl ique no boto algumas vezes para ver o que acontece.

Notifylcon
Quando um programa precisa ser executado continuamente e necessrio algum tipo de noti fi cao visual, um mtodo comum inserir um cone na bandeja do sistema ou rea da notificao extrema direita da barra de tarefas. Esse pode no ser o me lhor local para posicionar algum aplicativo, uma rea quej est muito che ia, mas til para certos utilitrios com finalidades especiais.

Desenvo lve ndo uma Interface com o Usurio com os Formulrios Windows

249

Antes da existncia da platafonna .NET, adicionar um cone bandeja do sistema envolvia o uso de vrias chamadas APl do Win 32 e uma tcnica denominada subclass ificao que poderia tomar instvel seu ap li cativo do Visua l Basic. Na plataforma .NET, tudo que voc precisa fazer adicionar um controle Not 1fy 1con a seu formu lrio e confi gurar suas propriedades. A propriedade mais im portante 1eon, que pode ser configurada com qualquer arqu ivo de cone para controlar o que ir aparecer na rea de not ificao . Se quisermos que um menu surja quando o us urio der um cl ique com o boto direito do mouse em seu cone, podemos adicionar um controle Contex tMenu ao formu lrio e configurar a propriedade ContextMenu de Not i fy1con. Seja cuidadoso para s usar esse controle quando for apropriado; h tantos aplicativos colocando cones nessa rea que foi adicionado ao Windows XP um recurso de oc ultao automt ica!

ErrorProvider
Outro grande recurso para o projeto de fo rmu lrios de entrada de dados, o controle ErrorProvi der permite que voc indique visualmente (veja a Figura 9. 12) que controles de um fo rmulrio possuem erros associados a eles. Para usar este controle, apenas insira-o em seu fonn ulrio e confi gure as propriedades. Na verdade, voc pode fazer isso com ainda menos trabal ho porque os valores-padro costumam ser adequados para grande parte dos objetivos, a menos que quei ra empregar um cone diferente. Ento, sempre que quiser indicar que um controle possui um erro associado a ele, chame o mtodo SetError do controle ErrorProvider: errorProvi der1 . SetError(txtStreet. "Endereo da rua i nvl i do") Quando o erro tiver sido corrigido, voc poder elim in- lo de ErrorProv i der con fi g urando-o com uma stri ng vazia : e rrorProviderl.SetError(txtStreet. " ")

FIGURA

9.12

Com 11m eOll/role ErrorProvider em seu formulrio, .ser fcil mostrar aos usurios
os erros de elltrada de

'"

I" 190001 IR_


,~

"-

_f'.
I

del(los.

A caixa de dilogo do exemplo (de entrada/edio de endereos) abordado rapidamente nesta lio (e que pode ser descarregado do site da Web deste livro) usa esse controle oculto em seu cdigo e urna boa demonstrao a ser exam inada.

250

Dia 9

Controles das Caixas de Dilogo

o 1I1timo tipo de controle oculto abordado nesta lio na verdade se refere a todo um grupo de
controles que vo de Open e Save s caixas de dilogo de seleo de fontes. Esses controles permitem que sejam usadas vrias caixas de dilogo-padro do Windows em seu programa (veja a Figura 9. 13), o que mui to mais adequado do que ter de voc mesmo cri las.

FIGURA 9.13 A caixa de dilogo

para abertura de arquil'os manipula


Ioda a COfllllllicao

com o sislemo operacional e o sistema de a/'quil'os,


sem filie voc lenha de escrever nel/huIII
flo_
flo , tjlpO.

cdigo.

!M,R I......... FJo.ot ....


Il ... iIn l"1

Como com os outros controles ocu ltos, possvel arrastar qualquer caixa de dilogo para que

seja usada em seu formulrio ou em uma rea de controles ocultos. Depois que tiver uma instncia do contro le em seu formu lrio, comece a trabalhar com as propriedades dele a fim de configur-l o para seu aplicativo. Conduzirei voc atravs do exemplo de um programa que emprega as caixas de dilogo para abrir e sa lvar arqu ivos, e tambm podere i utilizar as de fonte e cor, apenas para ser conc lusivo. O prprio formulrio contm vrios controles incluindo lima caixa Rich Text, quatro botes e um controle de pai nel, que usado para armazenar os botes. Empregar um controle de painel dessa maneira, e configur- lo para que fiq ue encaixado dire ita e que a caixa Rich Text ocupe todo o formulrio, fornecer uma interface que ser alterada de modo correto quando o fonnulrio for redimensionado ou maximizado. No abordarei os detalhes da configurao desses controles, mas o formulrio completo pode ser descarregado a partir do site deste livro na Web. Alm dos controles visve is, tambm inseri os quatro controles das caixas de dilogo (Open, Save, Font e Color) no formulrio. Cada um dos quatro botes usa urna das caixas de dilogo para abrir arquivos, salvar, alterar a fonte ou mudar a cor dela, e seu cdigo est listado nas secs a seguir. Observe que configurei os controles das caixas de dilogo dentro do procedimento de dar um cli que no bOIo, mu ito embora pudesse ter configurado muitas dessas propriedades empregando ajanela de propriedades do controle de caixa de dilogo. S agi assim porque esse um exemplo; qualquer propriedade de controle que seja a mesma durante toda a existncia do formulrio deve ser configurada apenas uma vez, que o que ocorre quando se manipulam as

Desenvo lvendo uma Interface com o Usurio com os Formulrios W in dows

251

propriedades por meio da janela referente a elas. Agora percorrerei o cdigo que representa cada um dos quatro botes e discutirei como o contro le de caixa de dilogo fo i uti li zado em cada caso.

Caixa de Dilogo Open

o manipulador de eventos do boto Open (veja a Listagem 9. 14) permite que o us urio se lecione
um nome de arq uivo lIsando a caixa de dilogo Open e, em seguida, exibe esse arquivo no controle da caixa Rich Text.

LISTAGEM 9.14

Manipulador de Eventos do Boto Open

1 Private Sub btnOpen_Click(ByVal sender As System.Object. 2 ByVa l e As System.EventArgs) Handles btnOpen.C l ick 3 Dim sNewFile As String 4 Dim trNewFile As System . IO.TextReader 5 If MessageBox .Show("Sobrepor o contedo atual?" , _ 6 "Open New File", MessageBoxButtons.YesNo. MessageBoxlcon.Question. 7 MessageBoxOefau l tButton.Button2)= OialogResult.Ves Then 8 With dl gOpen 9 . Filter = "Text files (* . txt) I*.txt" 10 .AddExtension = True 11 .Chec kFi leExists = True 12 .CheckPathExists : True 13 .InitialOirectory = IO.Path.GetD i rectoryName(sCurrentFile) 14 .Multi select = Fal se
15

16 If .ShowOialog()=Di alogResult.OK Then 17 sNewFile = .FileName 18 If IO .File. Exists(sNewFile)Then 19 trNewFi l e = New IO .StreamReader(sNewFile) 20 rtfContents.Text = trNewFile.ReadToEnd() 21 sCurrentF i le = sNewFile 22 End If 23 End If 24 End With 25 End If 26 End Sub

ANALISE

As linha 2 7, depois de declararem as variveis necessrias, confirmam se o usurio quer carregar um novo arquivo, sobrepondo, portanto, o contedo atual da caixa de texto. Uma caixa de mensagem usada para fomlular essa questo porque ela resu lta em uma resposta simples YesJNo. Se o usurio responder Yes, s iga em frente e sobreponha o contedo atual. Em seguida, a caixa de dilogo Open e laborada das linhas 8 14. Um filtro configurado para , restringir os tipos de arquivo aos somente de texto. E infonnado a caixa de dilogo para que retor-

252

Dia 9

ne a extcnsojunlo ao nome do arquivo, a fim de que seja verificado se o cam inho e o arquivo existem e para que ele seja iniciado na mesma pasta do ltimo arquivo carregado. A propriedade MultiSelect tambm est configurada como False, indicando que voc deseja que o usurio s6 possa selecionar um arquivo por vez. A linha 16 ex ibe a caixa de di logo e veri fi ca se o resultado est correto. Se eSli ver, as linhas 18 20 se certificam novamente da existncia do arquivo e, em seguida, o carregam em uma nica leitura na caixa Rich Text. Deveriam ser adicionados mais recursos de manipulao de erros aqui se esse fosse um sistema de produo, porque a abertura de arqu ivos uma situao propensa a fal has devido a privil gios de segurana e o utras razes.

Caixa de Dilogo Save


Quando voc prec isar que o usurio fornea o nome de um arquivo de destino, a caixa de dilogo Save ser necessria. Ela faz parte do sistema operacional , portanto, tem conhec imento das unidades, pastas, comparti lhamentos de arquivos, Unks de atalho e o que o mais o Windows possa lanar ne la. Escrever Li ma caixa de dilogo desse tipo seria dificil e precisaramos de LIma manuteno contnua, j que os recursos do sistema de arquivos do sistema operacional so a lterados com Otempo. O uso das caixas de d ilogo internas torna seu sistema melhor integrado ao sistema operacional (veja a Listagem 9.15).
LISTAGEM 9 .15

Us ando as Caixas de Dilogo Internas

1 2
3

Private Sub btnSave_Click{ByVal sender As System .Object. ByVal e As System.EventArgs) Handles btnSave . Click Dim sNewFileName As String Dim swDutput As IO.StreamWriter sNewFileName " sCurrentFile
If MessageBox.Show{"Salvar com um nome diferente de arquivo?" ,

4 5 6
7 8

9 10 11 12 13 14 15 16 17 18 19 20 21

"Save Fi le", MessageBoxButtons.YesNo . M essageBoxIcon.Question , _ MessageBoxOefaultButton.Button2) " DialogResult.Yes Then Wi th di gSave .FlleName " sCurrentFile . Check FileExists '" False . CheckPathExists " True .OefaultExt " "txt" . Fi lter" "Text files (* . txtJI*.txt" .AddExtension " True .Init i alO i rectory " IO.Path.GetDirectoryName(sNewFileName) .OverwritePrompt '" True . CreatePrompt" False

22

Desenvo lvendo uma Interface com o Usurio com os Formulrios Windows

253

LISTAGEM 9.15
23
24

Us ando as Cai xas de Di logo Internas (continuao) If .ShowDialog() : Dia logResult .OK lhen sNewFileName : . FileName swOutput : New IO . StreamWriter(sNewFileName) swOutput.Write{rtfContents.lext) swOutput.Close() sCurrentFile : sNewFileName End If End Wi th

25 26 27 28 29
30 31

32
33

End If End Sub

ANLISE

o uso da caixa de dilogo Save seme lhante ao de Open. Depois que o usurio con

firma se deseja salvar o arqu ivo (linha 9), as propriedades da caixa de dilogo so configuradas para criar a imagem adequada. O nome do arquivo configurado como padro com o ltimo util izado. A caixa de dilogo informada de que no necessrio ser um arquivo j exis tente (CheckF i leEx i sts : Fal se), mas a pasta sim (CheckPathExi sts : True). Por padro, o arqu i vo ser salvo com a extenso. txt (lin ha [6), mas a caixa de dilogo no impedir o usurio de salv-lo como desejar. Duas opes interessantes, Overwri tePrompt e CreatePrompt , no so apl j. cadas caixa de di logo Open , mas so imponantes ao sal var. Overwri tePrompt controla se a caj xa de dilogo avisar o usurio antes de pennitir que ele salve utilizando o caminho e o nome de um arqu ivo existente. CreatePrompt determina se o usurio deve ser avisado caso tente fazer exa lamente o contrrio (usar um caminho e um nome que ainda no ex istam). Depois de pronta, a caixa de dilogo exi bida (I inha 23), e se o usurio sair dela dando um cl ique em OK, ento, o contedo da caixa Rich Text ser gravado no arquivo (l inhas 24 28).

Caixa de Dilogo Font


Os nomes, tamanhos disponveis e esti los das fontes da mqu ina de um usurio podem ser um conjunto razovel de informaes, e essa caixa de dilogo man ipula tudo isso para voc enq uanto fornec e uma interface que provavelmente aparece em muitos dos programas com as quais o usurio trabalha. A Listagem 9. 16 mostra como a caixa de dilogo Fon! pode ser usada para per~ mitir que o usurio selec ione a fonte e o estilo de uma fonte. LISTAGEM 9.16 1 2 3
4

Usando a Caixa de Dilogo Font

Private Sub btnFont_Click (ByVal sender As System .Object . ByVal e As System . EventArgs) H andles btnFont.Click dlgFont.Font = rtfContents .Font If dl gFont . ShowOialog(): DialogResult.OK lhen

Dia 9

LISTAGEM 9 .16

Usando a Caixa de Dilogo Font (continuao)

6 7 8

rtfContents. Font '" dl gFont. Font End If End Sub

ANLISE

A caixa de dilogo Font simples de usar: apenas carregue as configuraes de fonte

atuais nela (1 inha 3) e, em seguida, exiba a caixa de dilogo (1inha 5). Se o usurio der um cl ique em OK, ento, pegue as novas configuraes de fonte e leve-as de vo lta ao destino (nesse caso a caixa Rich Text, linha 6). Isso tudo; funciona perfeitamente.

Caixa de Dilogo Color


A menos que prec ise de alguma funciona lidade avanada, a caixa de dilogo Color exatamente

do que voc necessita para permitir que o usurio escolha uma cor (veja a Listagem 9.17). Ele pode selecionar uma cor-padro predefinida ou criar sua prpria combinao de cores, tudo por meio dessa caixa de dilogo.
LISTAGEM

9.17

Adicionando uma Seleo Grfica de Cores a um Aplicativo

2
3
4

Private Sub btnColor_Click{ByVal sender As System .Object. ByVal e As System.EventArgs) Handles btnColor.Click dlgColor.Color = rtfContents.ForeColor If dlgColor . ShowOialog{)= OialogResult .OK lhen rtfContents.ForeColor = dlgColor.Color End If End Sub

5
6 7

ANLISE

A caixa de dilogo Color funciona exatamente da mesma maneira que Font; simplesmente carregue os valores das cores atuais (linha 3), ex iba a caixa de di logo (linha 5) e configure o dest ino que usar os valores selecionados nela - contanto que o usurio d um cl ique em OK (linha 6).

Construindo Suas Caixas de Dilogo


A classe MessageBox fornece uma manei ra de exibi r caixas de dilogo simples, mostrando uma mensagem e/ou solicitando ao usurio para que faa uma escolha em um conjunto fixo de opes (Yes/No, OK/Cancel , Abort/Rctry/lgnore). Mas haver vezes em que voc precisar de uma caixa de dilogo com recursos mais complexos. possvel transfonnar qualquer fonnu lrio Win-

Desenvo lvendo uma Interface com o Usurio com os Formulri os Windows

255

dows em uma caixa de dilogo, dando a ele a aparncia e o comportamento de uma, e us-Ia em seu programa. Existem vrios estgios diferentes, e os percorrerei enq uanto mostro como construir uma caixa de dilogo a ser empregada como a tela de login de um apli cativo. Para acompanhar este exemplo ao avanar nesta seo, crie um novo projeto (do tipo aplicativo Windows).

Criando a Caixa de Dilogo


Uma caixa de dilogo no s se comporta de modo diferente de um fo rmulrio Windows comum, mas ela tambm possui outra aparnc ia. Adicione um novo fo rmulrio a seu projeto, chamado LogonDi ai og, e acesse-o no modo estrutura. D um clique no formulrio e acesse ajane la de propriedades. Para fazer com que ele se parea com uma caixa de dilogo, configure as propriedades a seguir: Isto impedir que a caixa de dilogo seja redimensioFonnBorderStyle" FixedDialog nada. Este o ttulo, e Logon mais apropriado do que LogonDi ai og. Text " "Logon" Maximi zeBox e Mi nimi zeBox configuradas como Fa 1se No necessrio mi nimi zar ou maximizar uma caixa de dilogo. Agora ad icione os controles necessrios para criar uma caixa de dilogo de logon, duas caixas de texto (UserlD e Password), dois ttulos (um para cada caixa de texto) e dois botcs (OK e Cancei). A maneira como ir organiz.:,l-los no to importante para os fins de um exemp lo, mas a Figura 9.14 mostra como fiz.
9.14

FIGURA

Este formlllrio foi redimel/siollado para ler lima aparncia


COII/llm somenre com

algllns cOlllroles ne/e.

Nomeie os controles usando as convenes de nomeao que viu no decorrer desta lio, gerando 1b1Useri d, 1b1Password, txtUseri d, txtPassword , btnOK e btnCance 1. Para conclui r, como ltima parte da configurao,visual ize as propriedades de txtPassword e configure PasswordChar " "*". Com PasswordChar con figu rada, qualquer texto que for inserido nesse campo ser mostrado como uma string desse caTactere. J que os dois bales foram adicionados ao fonnulrio, voc poder voltar s propriedades do formulrio e configurar duas que no poderiam ser definidas sem algum boto disponvel. Configure AcceptBut ton e Cance 1Sut ton, respectivamente como btnQK e btnCance 1. O resultado da configurao dessas duas propriedades que se o usurio pressionar Enter nessa caixa de dilogo, o efeito produzido sera o mesmo de dar um clique no boto OK. Se o usurio pressionar a tecla Escape, isso ler o mesmo resultado de dar um clique no boto Cancel.

256

Dia 9

Configurando o Resultado da Caixa de Dilogo


Quando a caixa de d ilogo for exibida e o usurio a fechar dando um clique em OK ou em Cancei, se u programa ler de determinar dois itens: primeiro, se o usurio deu um cl ique em OK ou em Cancel e, em segundo lugar, o que o usurio inseriu nas caixas UserlD e Password. A primeira informao, que boto foi pressionado, semelhante ao que retornado de uma chamada a

MessageBox .Show( ), e sua caixa de dilogo a man ipular da mesma maneira. H uma propriedade Di al ogResul t no fom1U lrio, e qualquer valor configurado nela ser retornado para o programa que exibiu a caixa de mensagem. Voc pode configurar essa propriedade usando apenas uma linha de cdigo como a que aparece a segui r:

MC.Oia logRes ult

DialogResult.Cancel

H outra maneira de configurar esse resultado, que definir a propriedade DialogResult de btnOK e btnCancel (corno OK e Cancel, respectivamente). Se esses valores forem configurados, ento, a caixa de dilogo ser fechada automaticamente quando o usurio der um clique em um , dos botes, e seu resultado ser definido como Ovalor da caixa de dilogo do boto. E tudo uma questo de controle e de onde voc planejou executar a validao. Se a propriedade CausesVal idation for configurada corno True em txtUseri d, txtPassword, e btnOK (e corno Fa 1se em btnCance 1), ento, poderemos usar o evento Va 1i da t i ng em txtUseri d e txt Password para veri ficar a entrada do usurio. Como alternat iva, voc pode querer executar i toda a verificao no evento Cl i ck de btnOK, situao na qua l seria desejvel que btnOK . D a1ogResul t fosse configurada como None, para que a caixa de dilogo no fosse fechada automaticamente quando dessem um clique no boto. Em cdigo, sempre possvel fecharmos ns mesmos o formu lrio configurando a propriedade Di a1ogResul t diretamente. Em qualquer um dos mtodos, podemos deixar a propriedade D ialogRe sul t de btnCancel configurada como Cancel, porque nenhuma validao deve ocorrer se o usurio der um clique nesse boto. Qual dessas duas maneiras a melhor? Em um fonnulrio com apenas dois campos de texto, provavelmente no far dife rena, mas se voc ti vesse urna caixa de dilogo grande com um nvel alto de val idao, seria recomendvel usar os eventos de validao e a propriedade CausesValidation.
A listagem 9. 18 mostra o cdigo para o evento Cl ic k de btnOK, validando os dados inseridos nas

duas caixas de dilogo e confi gurando a propriedade do resultado da caixa de dilogo do formulrio. Esse cdigo pressupe CausesVal idation igual a False para tudo que existir no form ulrio, e a propriedade Oi alogResult de btnOK igual a None.
LISTAGEM

9.18

Us ando as Propr i edades de VaI idao

1 2 3 4

Pr i vate Sub btnOK_Click(ByVal sender As System .Object , ByVal e As System.EventArgs) Handles btnOK.Click Oim sUserID As String Dim sPassword As String

Desenvo lvendo uma Interface com o Usurio com os Formulrios Windows

257

LISTAGEM 9.18

Usando as Propriedades de Validao (continuao)

6 7
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

sUserID = txtUserid . Text sPassword = txtPassword.Text


If sUserID. Trim()= " " Then

24

MessageBox. Show(" Ident i fi cao do usurio obri gatri a. " & " i ns i ra uma i dentifi cao de usu r io adequada .". "Erro r" MessageBoxButtons.OK, MessageBoxIcon.Error) txtUserid.Select{) El se If sPassword.Trim() = " " Then MessageBox.Show("A senha obrigat r ia . " & "ins ira uma senha apropriada . ". "Erro r ". MessageBoxButtons.OK. MessageBoxlcon.Error) txtPassword.Select{) E1 se Me.Oia1ogResu1t = Oia1ogResu1t.OK End If End If End Sub

ANLISE

A rotina C1 i ck no executa nenhuma val idao comp lexa; apenas verifica se o usu-

rio inseriu uma identificao e uma senha (l inhas 9 e 15) e configura o resultado da ca ixa de dilogo corno OK (linha 21) se isso tiver ocorrido. A configurao da propriedade Di alogResu1 t do fonnu lrio na linha 21 fecha a ca ixa de dilogo para ocultare retornar esse resultado ao programa que o chamou. Observe que se btnOK. Di a1 ogResult tivesse sido configurada como OK (por meio da janela de propriedades), ento, a caixa de dilogo seria fechada ao trmino de seu evento C1ick independentemente de ter sido inserida a identificao/senha do usurio. Configure a propriedade bt nCance1 . O a1 ogResu1t como Cance1 (de modo que sempre execute o i cancelamento, e nenhuma man ipulao de evento seja necessria) por meio dajanela de propriedades, e essa ca ixa de dilogo de logon estar pronta.

Exibindo a Caixa de Dilogo


Para usar sua nova caix.:'l LogonOia 1og, voc precisa que ela seja exibida. Configurar esse fo rmulrio como o objeto a ser in iciado em seu projeto no seri a til porque ele exec utaria a caixa de dilogo, mas o apl icativo seria encerrado quando o usurio inserisse uma identi ficao e uma senha. preciso chamar LogonDialog antes de ex ibir Forml , que o objeto de in icializao desse projeto. Exatamente como os botes, os formu lrios tambm possuem eventos, e um em particular, Load, perfeito para esse propsito porque chamado antes de o formu lrio ser exibido. Visual ize o cd igo de Forml e se lecione Base Class Events no menu suspenso da esq uerda, na parte

258

Dia 9

superior da janela de edio de cdigos. Selecionar essa opo preencher a lista suspensa direita com a relao de eventos aos quais seu formu lrio d suporte . Selecione Load na lista suspensa, e poder editar o procedimento do evento Fonnl Load. Nesse procedimento, voc precisar criar uma instncia de seu formulrio LogonOi aI og, exibi lo como lima caixa de dilogo e, em seguida, verificar a identificao/senha que o usurio inseriu. A Listagcm9. 19 fornece um exemplo de como esse procedimento de evento poderia serescrito.
LISTAGEM 9.19 Exibindo um Formulrio como uma Caixa de Dilogo

1 2
3

Private Sub Forrn l_Load{8yVal sender As Object , ByVal e As 5ystem.EventArgs) Handles MyBase.Load
Dim frmLogon As New LogonDialog() Dim bLogonSuccessfu1 As Boo1ean = Fa1se Dim sFailureMessage As String If frmLogon . ShowDialog()= DialogResult.OK Then
If frmLogon. txtuserid . Text = "Duncan" lhen If frmLogon. txtpassword. lext = "password" lhen

4 5
6

7 8 9 10
11 12 13

14 15
16 17 18 19

20
21 22 23 24

bLogonSuccessful ,. lrue El se sFailureMessage = "Senha Invlida!" End If E1 se sFailureMessage = "Identificao do Usurio Invlida!" End If El se sFailureMessage = "Tentativa de Logon Cancelada" End If If Not bLogonSuccessfu l Then MessageBox . Show(sFailureMessage. "No foi possvel efetuar logon". MessageBoxButtons.OK . MessageBoxIcon.Error) Me.C10se() End If End Sub

25 26 27

ANLISE

Uma nova instncia de LogonDi a1 og criada ( linha 3), o que necessrio antes que voc possa ex ibir esse formulrio . Duas variveis so usadas (linhas 4 e 5) para registraro sucesso/fa lha da tentativa de conexo. A linha 7 emprega o mtodo ShowDia1og do formulrio para ex ibi-lo de maneira restrita. Devido a ShowDia 1og, a prx ima linha de cd igo desse procedimento no ser executada at que o formulrio esteja ocu lto ou fechado, mas usar apenas Shaw teria exibido o formulrio de maneira no restrita, e o processamento do cdigo teria continuado antes que o usurio conclusse o logon.

Desenvolvendo uma Interface com o Usurio com os Formulrios Windows

259

o mtodo ShowDi a1og, exatamente como Show na classe Messa geBox, retoma um valor de Dial ogResu 1t , como discutimos anteriormente enquanto voc criava o formulrio LogonDi a1og . A linha 7 verifica o valor retornado, porque se o usurio cancelar a caixa de dilogo, sua identificao e senha no devem ser processadas. Em segui da, os controles de caixa de texto de LogonDia log so acessados e seus valores veri fi cados em relao identificao e senha do usurio embutidas no cdigo (l inhas 9 e 10). Em seus programas reais, voc provavelmente verifi car esses valores confrontando-os com algum tipo de banco de dados ou IiSla de segurana. Para concluir, se tudo estiver correto, bLogonSuccessful ser configurado como True (linha II ), ou a mensagem de erro apropriada ser uti lizada por sFa i 1ureMessage (linha I I 19). Se a conexo no tiver xito, a mensagem de erro ser exibida em uma caixa de mensagens (l inha 23), e FonnI ser fechado (linha 25) para bloquear o acesso ao programa.

Resumo
Os formu lrios Windows so usados para o desenvolvimento de aplicativos .NET com interfaces do Windows, que um dos dois tipos de apl icativo que voc criar (o outro seria os sistemas com base na Web). Contendo vrios grandes avanos no existentes em verses anteriores do Visual Basic e fornecendo um sistema comum para o desenvolvimento de fo rmulrios por toda a platafonna .NET, o sistema Windows Forms permitir que voc construa a interface que seu apl icativo precisar. O Dia 16 dar{l cont inuidade a esse tpico e fornecer mais informaes sobre o uso desses formulri os em seus programas.

P&R
P Posso ter mais de um formulrio Windows em um projeto/aplicativo?
R Sim, voc pode ter quantos desejar. No entanto, apenas um formulrio pode ser definido

para a ini cializao, de modo que ser preciso criar instnc ias dos outros dentro de seu cdigo e, ento, chamar seu mtodo Show quando quiser exibi-los.
P Quero usar uma caixa de mensagem (Message ox) em um aplicativo do console que criei, mas no consigo faz-Io funcionar. Ele parece no reconhecer o nome da classe.

R A classe M essageBox faz parte do espao de nome System . Wi ndows. Fonns, portanto, voc deve t-lo disponvel antes de us-Ia. Quando criar um aplicativo Windows empregando o Visual Studio, ele automaticamente adicionar a referncia necessr ia, mas no fa r isso para um aplicativo do console. Utili zando o Solution Explorer, d um clique com o boto direito do mouse na pasta References dentro de seu projeto e selecione Add Reference. Na caixa de dilogo que aparecer, selecione System.Wi ndows. Fonns .dll na lista. Outra boa idia adicionar uma linha Imports .System .Windows. Fonns no inicio de seu arquivo de classes ou mdulo de modo que possa se referir MessageBox sem ter de sempre usar o prefixo System.Windows.Fonns nessa classe.

260

Dia 9

Workshop

o Workshop foi planejado para aj ud-Io a antecipar possveis dvidas, revisar o que j aprendeu
e comear a pensar em como colocar se u conhecimento em prtica. As respostas do teste esto
no Apndice A, "Respostas dos Testes/Exerccios".

Teste
I. Qual a d iferena entre um formulrio modal e um no-modal? 2. Por que no podemos configurar a propriedade CausesVa 1i dat i on de um boto Cancel
COm o valor True?

3. Que instruo adicionada no final da declarao de um procedimento para indicar que ele um manipulador de eventos?

Exerccios
I. Dado que um nico procedimento pode manipular vrios eventos (Sub myhandl er( ) Handl es btnOpen . Cl i c k, btnCl ose . Cl i c k, btnSave. Cl i c k), como voc poderia reescrever

esses trs procedimentos de eventos em um nico procedimento? Dica: Voc precisa converter (usando CType) o parmetro sender em um controle de System. Windows. Fonos . Contro 1 ou System.Wi ndows. Fonos. Button antes de poder acessar o conjunto comum de propriedades de controle. LISTAGEM 9.20 1 2 3 4 5 6 7 8
9

Usando a Palavra -Chave Handles para Crlar um nico procedimento chamado por vrios eventos

Private Sub btnCopy_Click(ByVal sender As System .Object , ByVal e As System.EventArgs) Handles btnCopy.Click Dim sSource As String Oim sDestination As String sSource = txtSource.Text{) sDestination = txtOestination .Text{) File . Copy(sSource , sOestination) End Sub

10 Private Sub btnMove_Click{ByVal sender As System .Object , 11 ByVal e As System.EventArgs) Handles btnMove . Click 12 Oim sSource As String 13 Oim sOestination As String 14 sSource = txtSource.Text{) 15 sOestination = txtOestination.Text{) 16 File .Move(sSource . sDestination) 17 End Sub
18

Desenvolvendo um a Interface com o Usurio com os Formulri os Windows

261

LISTAGEM 9.20

Us ando a Palavra -Chave Handles para cr i ar um n ico procedimento chamado por vr i os eventos (continuao)

19 Private Sub btnDelete_Click(ByVal sender As Objecto 20 ByVal e As System.EventArgs) Handles btnDelete.Click 21 Dim sSource As String 22 sSource : txtSource.Text() 23 File . De le te(sSource) 24 End Sub

SEMANA

DIA
Construindo a Interface com o Usurio com os Formulrios da Web
Hoje cada vez mais aplicativos so escritos com base em navegadores. Antes do Visual Basic .NET, era dineil criar esses ap licativos com base em navegador usando o Visual Basic. Com o Visual Basic .NET, seu desenvolvimento se tornou to fci l quanto o de aplicativos com base no Windows. Nesta lio, voc examinar como pode gerar interfaces com o usurio com base em navegador. As ferramentas do Visual Basic .NET ajudam o desenvolvedor na criao de pginas da Web que fornecem interfaces com o usurio bem so fisticadas para qualquer tipo de navegador. Em particular, esta lio eofoear: Corno o modelo de programao da Web difere do tradicional com base no Windows. O uso dos controles-padro dos formulrios da Web. O uso dos controles avanados dos formulrios da Web. Os uso dos controles Validator.

o Modelo de Programao da Web


s vezes, parece que todas as pessoas no mundo tm acesso Internet, principalmente quando a velocidade da minha conexo fica bastante lenta porque todos esto navegando, conversando e enviando correspondncias eletrnicas (porm, nada relacionado a trabalho). claro que um dos

Dia 10

mais importantes, se no o mais popular, aspectos da Internet a World Wide Web (WWW ou apenas Web). No entanto, freqUente a falta de ferramentas de programao realmente boas para a criao de ' programas' na Web, em vez de simples pginas da Web. Isso acontece em par~ te porque o desenvolvimento de aplicativos para a Web diferente da gerao dos de microcom ~ putadores, com os quais temos mais contro le. Alm disso, os aplicativos da \Veb precisam lidar com a rede com mai s periodic idade. Assim, o que o ' modelo de programao na Web'? apenas um termo usado para descrever como voc pode projetar, ou desenvolver, um programa que empregue pginas da Web em um navegador para permit ir que o usurio insira informaes. Essas pginas da Web so projetadas com a ut il izao de HTML (HyperText Markup Language). Este livro no abordar HTML, mas h muitos outros no mercado que o fazem. O navegador um aplicativo que sabe como ler HTML e exibi~la na tela. Em geral (mas nem sempre), grande parte do traba lho de um aplicativo executado no servidor Web. O servidor Web outro programa processado em um computador que sabe como retornar HTML quando so licitado. No Windows NT ou no 2000, esse programa chamado de Internet Infonnation Ser~ vice (II S). As informaes so transferidas entre o navegador e o servi dor por meio de um protocolo, ou linguagem , chamado HTrP (Hypertext Transfer Protoco l).

NOTA

o nome efetivo do II S foi alterado com as diferentes verses. No Windows NT


4.0 Server, ele chamado Internet tnformation Server. No Windows 2000, foi denominado de Internet Information Services, enquanto no Windows NT 4.0 Professiona l, seu nome Personal Web Server.

Nos ' primrdios' da World Wide Web, as pginas da \Veb eram estticas. Isto , nunca mllda~ vam realmente. Tudo ficou mais interessante quando as pessoas comearam a criar pginas da Web dinm icas ou que podiam ser alteradas. Essa foi a origem dos programas da Web. Com eles, em vez de apenas retornar sempre o mesmo resultado HTML, o servidor Web pode executar algumas tarefas e retornar o resultado HTM L apropriado. Por exem pl o, o usurio pode so l ici~ tar informaes sobre as vendas de um perodo em particul ar. Essas informaes sero passadas para o servidor. Por sua vez, o servidor poder procur-Ias em um banco de dados e, em seguida, convert-las em HTML exibindo-as para o usurio. O processo completo semelhante ao da Figura 10. 1. Como alternativa, o servidor (ou o projet ista da pgi na da Web) pode adicionar informaes de programao prpria pgina, criando uma que seja, ela mesma, um programa. Em gera l, chamamos esse recurso de Dynamic J-I TML (ou DJ-ITML). Por meio da DHTML, includo na pgina algum cdigo JavaScript (uma linguagem de programao, como o Visual Basic .NET, que executada em pgi nas da Web) ou de outra Iinguagem. O cdigo pode ser processado no navegador sem precisar retomar nenhuma informao para o servidor. A Figura 10.2 mostra esse modelo em ao.

Co nstrui ndo a Interface com o Usurio com os Formulrios da We b

265

FIGURA 10.1 Modelo de

programao lia JVeb.

-----= Resposta-+-- s~:"~'; '0Navegador

;: :

..Pesquise
Banco de Dados

Servidor

W,b

FIGURA 10.2 O modelo de

programao da DY//(lmic HTML.

_
Resposte

.. Pesquisa
Banco de Dados

Servidor

W,b

H vrias tcn icas que podem ser empregadas na criao de um programa da Web. Algumas das mais usadas no passado foram o ASP (Acti ve Server Pages), a Perl (outra linguagem de programao) ou o JS P (Java Server Pages). A tcnica lItili:wda pelos fonnlllrios da Web um aperfeioamento do ASP, o ASP .NET.

ASP.NET
ASP.NET o nome que a Microsoft deu para sua verso aprimorada do ASP. Embora o ASP fosse um mtodo fci l de constru ir pginas dinmicas na Web, apresentava alguns problemas que o AS P.NET resolveu: O AS P quase sempre exigia muita cod ificao para que algo fosse executado. O ASP.NET requer menos cd igo (em geral, mu ito menos) para tarefas comuns de programao. O AS P tambm padecia da quantidade limitada de controles que a I-ITML apresenta. O ASP.NET adicionou o conceito dos 'controles no lado do servidor' que podem gerar o resultado HTML apropriado para o navegador que o sol icitar. Embora esses contro les no navegador sejam apenas HTML, podem representar muito da I-ITML e da cod ificao que voc ser poupado de ter de escrever. O ASP s aceitava programas cm uma linguagem como o VBScript. O VBScript interpretado no tempo de execuo, no compilado como o Visua l Basic. O ASP.NET permite que voc escreva pginas da Web em um cdigo totalmente compi lado do Visual Basic .NET. O ASP.NET tambm fo i projetado para reso lver outros problemas do AS P que no so inerentes a essa discusso sobre a construo de interfaces com o usurio, como melhorias no redimensionamento e na ut ilizao da memria.

266

Dia 10

Como a Criao de Programas com Base na Web Difere da de Programas com Base no Windows
Ao projetar um programa por meio dos fonnulrios da Web, h vrias diferenas que voc deve ter em mente. Algumas delas so:

Os aplicativos com base na Webtendem a ter mais cdigo no servidor, em vezde no cliente. Isto , a aparncia de seu programa vir do navegador, mas os recursos avanados estaro
no servidor. Os aplicat ivos com base na Web dependem dos recursos do navegador usado para visualiz-los. Infe lizmente, os navegadores possuem recursos diferentes uns dos outros, e mui-

tos desenvolvedores da Web tm-se deparado com essas diferenas no momento em que
projetam seus programas.
Quando voc acessar uma pgina da Web, provavelmente ela ser esttica . Embora haja maneiras de poder atua liz-Ia sem retornar ao servidor (isto , torn-Ia dinmica), esses mtodos fazem com que sua criao seja mais complexa. Portanto, produzir fo rmulrios animados (ou qualquer tipo de resposta para o usurio) mais dificil com os aplicativos com base na Web.

Muitas operaes de aplicativos com base na Web requerem um 'percurso de ida e volta na rede ' . Isso acontece por causa da separao entre cdigo e projeto. Para fazermos um boto ou outro controle executar algo, em geral necessrio enviar informaes ao servidor. Assim , ele responder de modo apropriado. Voc deve se lembrar disso quando criar aplicativos da Web. Esse percurso de envio e retorno na comunicao pode levar algum tempo, portanto, ele s deve existir quando necessrio.

Os aplicativos com base na Web so restritos, tanto pelas Iimitaes do prprio navegador quan10 pela quantidade de navegadores disponveis no mercado. Os navegadores so limitados nos tipos de controles que podem ser usados, assim como por seus recursos insufi cientes de desenho isto , em geral impossvel desenhar na pgina da Web. Alm disso, se o usurio tiver uma verso ma is antiga de um navegador instalada ou tiver desativado certos recursos, a pgina da Web poder reagir de vrias manei ras. Essa uma das principais razes pela qual os aplicativos com base na Web tendem a apresentar grande parte da codificao no servidor. Isso tambm sign ifica que esses aplicativos tradicionalmente prec isam que muita codificao seja adicionada para que a aparncia da pgina possa ser alterada conforme o navegador que a visualizar. Felizmente, os controles dos formu lrios da Web ocu ltam a maioria desses detalhes. Eles fo ram criados para produzir uma sada dinmica (isto , a pgina pode ser alterada sem que seja necessrio retornar informaes ao servidor) se os controles detectarem que o navegador pode us-Ia. Se eles no reconhecerem o navegador que estiver em uso ou se esse no der suporte a atualizao dinmica, s a HTML sem formatao ser retomada ao navegador cliente. Isso assegura ao desenvolvedor que o navegador cl iente receba a pgina da Web como foi projetada, respeitando as limitaes do navegador.

Construindo a Interface com o Usurio com os Formulrios da Web

267

Alm das restries em decorrncia do navegador, os aplicativos com base na Web tambm tor nam necessrio que o desenvolvedor considere o fato de que o cliente e o servidor esto separados, possivelmente por grandes distncias atravs de uma rede. Isso significa que as operaes que poderiam levar alguns segundos se o cl iente e o servidor esti vessem prximos (ou ate na mesma mquina) podero demorar muito tem po. Portanto, operaes como as animaes podem fic ar desfi guradas ou no serem exib idas de maneira alguma at que o download seja concludo. E ainda h a velocidade da conexo. Se voc estiver acessando a pgina da Web por meio de um modem mais lento, essa diferena se tornar ainda mais relevante. Com Iodas essas questes para lembrar, voc deve estar pensando "Por que me preocupar em criar aplicativos da Web?". Embora haja desvantagens em desenvolver apl icativos da Web, existem muitos beneficias: Instalao Para tomar seu aplicativo disponvel , tudo que voc precisa faze r inserir algum endereo no URL. O apl icativo fica r imediatamente disponvel para uso do cliente. Isso evitar que voc tenha de ir at cada uma das mquinas clientes ou fazer com que todos os seus usurios instalem o apl icati vo. Novas verses e/ou correo de erros Quando voc quiser atualizar uma parte de se u aplicativo com uma verso mais nova, s ter de instalar as atualizaes no servidor, e no em cada cliente. Desempenho Melhorar o desempenho de aplicativos da Web muito mai s fcil que faz-lo com aplicativos comuns. Voc pode aperfeioar seu desempenho adicionando mais servidores e distri buindo as sol icitaes por todos eles. Conhecimento Se voc j conhece um pouco de HTML, poder ser muito mais simples criar aplicativos da Web do que do Windows. Eles tambm so ma is fceis de assim ilar, se no houver conhecimento de HTML ou de Windows. Ento, quando projetar um aplicativo, voc deve criar um programa com base no Windows ou na Web? A resposta mais fc il (porm insatisfatria) "Depende". Mui tos se encaixam em qualquer tipo, mas as pessoas esto comeando a criar mais aplicativos com base na Web. A capacidade de fazer atualizaes fac ilmente e as correes disponveis so atraentes, portanto, pode ser prefervel pelo menos considerar pri meiro a criao de programas como aplicat ivos da Web. No entanto, alguns programas no so candidatos a apl icat ivos da Web. Qualquer programa que precise de um vnculo contnuo entre o cl iente e o servidor no apropriado, nem os que requerem muitas fi guras (como os jogos). Para concluir, se s tiver um computador envo lvido (isto , no for um ap licati vo cliente/servidor como um programa de banco de dados) ou se o aplicativo s for usado por voc, pode ser mais sensato criar um aplicativo com base no Windows.

268

Dia 10

Usando os Controles-padro dos Formulrios da Web


Projetar urna pgina da Web usando o Visual Basic .NET seme lhante a criar um aplicat ivo co-

mum do Visua l Basic .NET. A nica diferena o que acontece no nve l interno. Em vez de se adicionar um cdigo para criar os controles e confi gurar suas propriedades, as lags HTML so
inseridas na pgina ASP.NET, e o cdigo annazenado em um arquivo do Visual Basic .NET que funciona internamente.
Os controles que estaro disponveis na criao de um apl icati vo da Web so semelhantes queles que podem ser usados nos ap licativos Windows. A esto includos todos os controles comuns que voc est acostumado a empregar (veja a Figura 10.3). A Tabela 10. t apresenta uma

descrio resumida desses controles.


FIGURA 10.3

COII/ro/es-padnio para os formulrios da lVeb.

.'11" '
~.,,, .

.,,>'I ,,,.co

"""

1........

"rt

,
"li

f6Wii """ 3

0 __
;:~---

..

,"o..."

-' -

<o"

._,~ "" "

lo.

' ~' . . . - ' .. .~-~

rl""' _,,'1

,'

TABElA 10.1 Controle Label

Contro les-padro dos Formulrios da Web Descrio Use para inserir texto no formulrio da Web. Como altern ativa, voc pode apenas dar um clique no formu lrio e digitar. O controle label fornece uma administrao melho r da f ormat ao e permite a insero do texto onde fo r dese jado. Para concluir, este contro le tambm possibilita a alterao dinmica do contedo de seu aplicativo, o que no pode ser feito com o texto adicionado ao formu lrio. Use pa ra fornecer ao usurio um campo o nde i nserir info rmaes. Este em geral o controle mais comum adicionado a um aplicativo da Web.

TextBo x

Construindo a Interface com o Usurio com os Formulrios da Web

269

TABELA 10.1

Controles-padro dos For mulrios da Web (continuao)

Controle
Button LinkButton

Descrio
Use para fornecer ao usurio algo para dar um clique a fim de executar alguma ao. Semelhante no resultado ao controle comum Button, lin kB utton um recurso no qual o usurio de seu aplicativo da Web pode dar um clique. A diferena que Button se parece com um boto, enquanto LinkButton um hyperlink. (Ou seja, o usurio v um bonito ponteiro azul, sublinhado em algum local.) Semel hante no re su ltado ao co ntrole comum But ton, ImageButton um recurso no qual seus usurios podem dar um clique a fim de executar alguma ao. A diferena que lmageButton uma fi gu ra. Semelhante a Li nkButton, exceto por no possuir um evento C1 i ck.Isso significa que voc s pode escrever cdigos que lidem com a ao de clicar em Li nkBu tton, ao passo que Hyperli nk pode ser usado apenas para enviar o usurio para outro local. Os controles DropDownList so comuns nos formulrios da Web. Trata-se de uma lista que inicialmente s ocupa uma linha. Voc pode dar um clique na seta suspensa para abrir e ver a l ista completa. Depois de um item ser selecionado ela ser fechada, e s uma linha ser mostrada, contendo sua opo. Esses controles podero ser usados nas situaes em que seu usurio tiver de selecionar apenas um item em uma lista e quando se quiser economizar espao na tela - por exemplo, para selecionar o cdigo de um Estado ou pas. Os controles ListBox permitem que o usurio selecione um ou mais itens em uma lista de opes. Eles diferem de OropOownLi st pelo fato de a lista fi car sempre visvel. Outra diferena que possvel selecionar vrios itens em Li stBox. Use este controle quando voc precisar do recurso de seleo mltipla (porm, examine CheckBoxL i stj, quando quiser que o usurio possa ver todas as opes ou quando houver bastante espao na tela. O controle CheckBox representa a resposta afirmativa ou negativa a uma pergunta. marcado ou desmarcado e, portanto, usado quando se quer que o usurio selecione ou no uma opo. Ele difere de RadioButton, no fato de que CheckBox no depende de outros controles iguais a ele, enquanto RadioBut t on em geral uma opo entre muitas. O controle CheckBoxli st composto de vrios controles CheckBox. Mesmo sendo todos independentes, o controle Chec kBox list uma maneira prtica de adicionar vrios controles CheckBox a uma pgina. Este controle especialmente ulil quando se tem um con junto de itens (que podem ter sido recuperados de um banco de dados) entre os quais o usurio deve selecionar. CheckBoxList tambm um substituto adequado para ListBox quando se pretende que o usurio selecione vrios itens. No entanto, recomen dvel usar ListBox se houver mais de seis itens.

ImageBut ton

Hype rl i nk

D ropDownList

ListBox

Chec kBox

CheckBoxLi 5t

I 270
TABELA 10.1

Dia 10

Controles-padro dos Formulrios da Web (continuao)

Controle
Radi oButton

Descrio
O controle Radi oButton semelhante a CheckBox no fato de seu valor s poder ser True ou Fal se. A diferena entre os dois que os controles RadioButton tendem a 'viajar em pacotes' . Embora cada Check80x de um formulrio possa ser configurado independent ement e como True ou False, apenas um RadioButton de um conjunto pode ser True. Portanto, voc pode considerar Check80x como um controle que produz uma resposta afirmativa ou negati va, enquanto Rad i oButton (ou melhor, um grupo de controles Rad i oButton) se assemelha mais a uma pergunta de mltipla escolha para a qua l

s uma resposta correta.


RadioButtonlist O controle RadioButtonList nada mais que um grupo de con t roles Rad i oButton. Ele facilita a criao desse grupo, se voc j tiv er uma lista proveniente de algum outro local (como um banco de dados) .

Image Pane i

o controle lmage permite que voc insira uma f igura na pgina.


O controle Panei semelh ante ao label no fato de ser apenas um espao reservado para texto . A diferena que Panei pode conter outros controles. Portanto, um timo recurso a ser usado quando voc precisa separar ou realar informaes ou controles. Controles semelhantes ou relacionados podem ser ag rupados em Panei para que se destaquem.

Exatamente como deve ser feito com os controles Windows, para usar os da Web, d um clique duplo sobre eles na ca ixa de ferramentas ou arraste-os para seu formu lrio. Nesse caso, porm, o formulrio ser lima pgina da Web. Iremos criar um ap licativo sim ples com um formulrio da Web para ver como esses controles noS ajudam a escrever programas na rede. Inicie o ambiente de desenvolvimento se ele no estiver em execuo e crie um aplicativo da Web. Chame-o de Madl ib . Ele ser usado como exemplo do desenvolvimento de um aplicat ivo simples da Web para que possamos ver mui tos dos controles-padro em ao. Selecione File, Newe Project para abrir a caixa de dilogo New Projecto Abra a pasta Vi sua l Basic Projects e selecione o modelo de projeto Web Applicalion. Altere o nome do projeto para Madl ib e d um clique em OK para poder constru-lo.

NOTA

Antes de criar um aplicativo da Web, voc deve instalar ou poder acessar o Internet Info rm ation Servi ces (ou o Internet Inform ation Server).

Exatamente como nos aplicativos com base no Windows, sua primeira etapa ser dispor os controles que usar em seu aplicativo (veja a Figura [0.4 para o resultado final). Comece ad ic ionando uma figura a sua pgina.

Constru ind o a Interface com o Usurio com os Formulrios da Web

271

o programa a seguir conhecido como MadLib. Na verdade, um jogo no qual um partici pante
seleciona uma srie de palavras (em geral pelo tipo de palavra ou uma descrio). Em seguida, essas palavras so inseridas em locais especficos de uma histria para gerar um resu ltado di ve r~ tido e personali zado ( o que se espera) .
FIGURA 10.4
.
~ , ~",."." I/'f~

Formulrio Ma dl i b.

..,. ,

~..

. "" ,1 ,, , '" 1.''' '01 ~." , b ... , ' t-oJO<O _ l!t~ ' .. mot '.tolo !"''''

"r.JEI
I'(omo,
l~'

e. "': .. &l o11

~_

.......

lfoIo

, ,:'"":"

,rII

"
L

...,.,., .. ~ _ _

II

A MacI UI> ... _

_<II . . _

.bno .... pl&ycr ..Ie<l <fI<. of_<b by typ< of_d. or d<",~->. n.. .. ~d dO. n.., .. ", . ;Y "",n ,. CI.OI< .~) "'"""'I. p<fl."",...d md , .....

<......,

:t. d.,.,r-r- - - " Idod .rr,.m"r.r;;;~;;;----~" ~

1.. aomIo... tn....1OO .. lOOOJ - -

~ .motio..! ""':
(""

("" P_I<T (""

F~d

Arraste um controle Image para o formulrio. No incio, ele deve ter a aparncia de um quadrado vazio (ou talvez de uma figura incompleta) porque voc precisa configurar o caminho para a fi gura. Acesse ajanela de propriedades e localize a propriedade ImageUrl. Quando der um clique na janela Property para acessar a propriedade ImageUrl , ver um boto com trs pontos. Exata~ mente como nos aplicativos Windows, isso significa que uma caixa de dilogo o ajudar a confio gurar essa propriedade. D um clique no boto e procure uma figura adequada. (Criei uma que ex ibe Madl ib no programa Paint que vem com o Windows 2000.) D um clique em OK, e a figura j dever estar no formulrio. Fornecer uma explicao de se u programa em geral uma boa prtica. Adicione um controle La bel e uma explicao si mples na propriedade Text. O texto que inseri voc encontra no primeiro pargrafo aps a imagem. A seguir, voc adicionar pgi na os controles para os vrios itens que inseri r. A Tabela 10.2 descreve as configuraes das propriedades e controles usados.

I 272
TABELA

Di a 10

10.2

Controles Usados no Formulrio Madl ib da Web


Propriedade
(!D)

Controle

Valor
lb l Name

label

Text
Font Bold

Your fi rst name:


True

TextBox
label

(!D)

TxtName

(lO)

Ib l Oate
A date:

Text
Font Bold

True TxtDate

TextBox
Labe l

(!D)

( lO)

lb l Fruit
A kind of fruit:
True

Text
Font Bold
DropDownList

( lO)

cboFrui t
possui uma ca ixa de dilogo que o ajudar a inserir itens nele. D um clique na propr iedade Items e, em segu ida, no boto resultante Build. Veja a Figu ra 10.5 pa ra visualizar a

Items

o controle DropOownl is t

caixa de dilogo que surgir. Ad icione v ri as frutas, dando um clique no boto Add e, en to, confjgure a propriedade Tex1. Repita isso pa ra cerca de
dez itens. Adic ionei as f rutas: Mango (manga), Drange (laranja), Banana, Currant (groselha) , Berry (cerejal. Kumquat, Peach (pssegoL Kiwi, Apricot (damasco) e Plum (ameixa).

Labe l

(lO)
Text Font Bold

1b1Number A number from 100 to 1000: True TxtNumber

TextBox

(lO)
Text

SOO
Ib l Emotion An emotional state: True rlstEmotion

label

(lO)
Text Font Bold

RadioButtonlist

(10)

Constru indo a Interface com o Usurio com os Formu lrios da Web

273

TABELA 10.2
Controle

Controles Usados no Formulrio Madl i b da Web (continuao)


Propriedade
1tems

Valor

A propriedade Items de RadioSuttonList semelhante a de DropDownL i st e possui o mesmo editor. Adicione alguns de seus estados emocionais favoritos aqui . Inseri o seguinte: Excited (excitado), Frustrated (frustrado), Intrigued (intrigado), Saddened (triste), Panc~y (aterrorizado), Ecstatic (extt i CO). Angry (zangado). Jea1 OUS (enci umado), Frightened (apavorado), Happy (feliz), Shocked (chocado) e 8lue (melanclico).
3

RepeatCo I umns Label


( 10)

IblVerb A verb: True TxtVerb IblOccupation An occupat i on: True txtoccupat i on cmdWr te Wrte Story cmdClear Cl ear IblResult Deixe este campo em branco (ou seja, exclua o vaIar da propriedade Text) Groove
75%

Text TextBox Label Font Bold (ID)


(10)

Text Font Bold TextSox Sutton Sutton label


(10) (10)

Text
10

Text
(10)

Text BorderStyle Width

Alm disso, voc pode querer inserir uma li nha em certos pontos para organizar melhor os controles na pgina . Veja a Figura 10.5 para a visualizao de um exemplo. Se estiver familiarizado com a HTM L, tambm poder adicionaras controles em uma tabe la para obter possibilidades de formatao ainda mais adequadas .

274

Dia 10

H outra tcnica que pode ser usada na insero de controles em um formulrio da Web. Se examinar as propriedades do formulrio da Web (localize DOCUMENT na lista suspensa de objetos que se encontra na parte superior da janela Property), voc ver uma com o nome pageLayout . Seu padro linearlayout. A alternativa, Gri dLayout. pode ajud-lo a criar formulrios sofisticados na Web. Se page Layout for con fi gu rada como GridLayout, voc poder inserir controles no formulr io da Web exatamente como em um formu lri o Windows.

FIGURA 10.5

!!' ,,,,,,,,, (011""." t d""

E!

Adicionado itens a
DropDownList.

II!

c....

A maioria das propriedades usadas tem um sentido prprio; no entanto, a lgumas precisam de

uma explicao adicional. Muitos controles que trabalham com listas podem ser 'dest inados' a um conjunto de itens. Em geral, isso significa que eles podero ser associados s informaes recuperadas em bancos de dados, porm tambm podem fazer referncia a outros conjuntos, como os arrays. Os controles que possuem essa capacidade podem ser facilmente identificados, j que possuem um conjunto Items. Esse conjunto aparece najanela Property e permite que voc adicione itens sem vincular um controle a um array ou a outro conjunto. Essa a manei ra mais fci [ de adicionar itens se eles no puderem ser alterados. Se apresentarem a possibilidade de alterao, devero ser armazenados em um banco de dados e ser recuperados no tempo de execuo para, em segu ida, ser vinculados ao controle. Examinaremos esse procedimento 110 Dia 12, "Acessando Dados com a Plataforma .N ET". O controle Rad i aBu t tonLi s t possui uma propriedade relativamente rara: Repea tCo 1umns. Voc pode configur-la para controlar a quantidade de colunas usadas na exibio da lista de itens. Essa pode ser uma tima maneira de economizar algum espao na tela, mesmo enquanto todos os itens so exibidos. Internamente, o controle RadioButtonList gera um cdigo J-ITML para executar essa tarefa. Esse um dos recursos que tornam esses controles mais fceis de usar do que escrever seu prprio cd igo HTML.

Constru indo a Interface com o Usurio com os Formu lrios da Web

275

A prxima etapa no desenvolvimento de seu aplicativo da Web adicionar cdigos. Voc s inserir o cdigo dos dois botes. Comearemos com o boto Cl ear. Esse boto apagar as informaes de todos os controles TextBox e dos resultados de Labelo D um clique duplo no boto Clear c adicione o cdigo mostrado na Listagem 10.1.
CDIGO

LISTAGEM

10.1

Cdigo para o Boto Clear

1 Pri vate Sub cmdClear_Click( 2 ByVa 1 sender As System.Object . ByVal e As System.EventArgs) 3 Handles cmdClear .Cli ck 4 5 txtName.Text " " 6 txtDate. Text " " " 7 txtVerb . Text " " " txtNumbe r.Text - " " 8 9 txtOccupation . Text - " " lblResult.Text " " 10 11 End 5ub

ANALISE

o cdigo para esse boto simples. Tudo que ele faz configurar a propriedade Text
de todos os controles TextBox e os resu ltados de Label com" ". Isso esvaziar esses

controles.

o cd igo da Listagem 10.2 tambm simples. A idia bsica que voc crie uma string longa
contendo toda a histria, e que ser exibida nos resultados de Labe 1.
CDIGO

l iSTAG EM

10.2

Cdigo para o Boto Write Story

1 2 3 4 5 6 7 8 g 10 11 12 13 14 15 16

Private Sub cmdWrite_Click( ByVal sender As System.Object. ByVal e As System.EventArgs) Handles cmdWrite .Click ' aqui que associamos as opes 'que o usurio selecionou fonnando a histria final Dim sTemp As String sTemp " "Dirio de " & txtName.Text &_ " de " & OateTlme .Today. ToString & "<br>" sTemp &= "Em" & txtDate.Text &_ " Comecei a programar no Visual Basic.NET. " sTemp &= "Estou" & rlstEmotion . SelectedItem.Text & "! " sTemp &= "Acho que vou sair e " & txtVerb. Text sTemp &" " meu novo" &&txtNumber.Text sTemp &= " PicoHertz " & cboFruit.Selectedltem.Text sTemp &" " e me tornar um " & txtOccupation.Text & " "

276

Dia 10

CDIGO

LISTAGEM 10.2

Cdigo para o Boto Write Story (continuao)

17 18
19

'a histria final annazenada no controle Label lblResult.Text " sTemp


End Sub

ANALISE

o processo comea na linha 7, onde voc declara a string. Em seguida, ela constru-

da da linha 8 16, e o resu ltado inserido na propriedade Text do controle 1b1Re$U 1 t da linha 18. Um smbo lo que provavelmente parecer estranho &= que se encontra nas linhas 10 16. Sendo um novo recurso do Visual Basic .NET, esse atalho ut ilizado para executar inseres em uma string. O cdigo das linhas la I I, por exemplo, 10
11

sTemp &= "Em" & txtDate. Text &_


" Comecei
ii

program no Visual Basic.NET. " ar

equivalente a:

10
11

sTemp

sTemp & "Em


ii

II

&txtOate.Text &

" Comecei

program no Visual Basic . NET." ar

Voc pode usar o operador &= para tomar seu cdigo mai s curto quando estiver adicionando mais informaes ao fina l de uma string existente. Depois que tiver adicionado o cdigo, voc j estar pronto para construir e testar seu programa. Selecione Build no menu Build e, em seguida, execute o programa. Isso deve iniciar um navegador e carregar sua pgina. Insira alguns itens e d um clique no boto Write StOly para ver sua histria. A Figura 10.6 mostra o formulrio da Web em ao.
'!J h~. // "'/...., / ... ,, ' ' .." ...."

FIGURA 10.6 O formulriO Madl i b em ao.

,.1<',,,, ,,,'....

0._" "" "' 0 "" 0>

fII!;] f3

Mad!..d:> ... _

whon .,...~ ..

liI<o ~d d

....,. ..

rp<di< <potJ '" cr ..... ()<.oJ><fuIIJ) ~ f><'Ioo..W.<d <ndftn

""<I> '''''' oe_do (......aty", trI>< ofwot<l. '" ...


A dOlO: r,- - - - A."""' .. f..". 100 '. 1000: ri- -

Th< .... _

....

r..... r"', ...... :r'----A kiod .r r,UI:

.'_""'---"::J
l....... (' m..
h>ln ('
Sboclu:d

AlI .... tio ... " ... :

(" Ezao.d (" Pneq (" F....... d (" F""".... d (" E<_ (' HoppJ
('
~d

('

(' SOilil, .. d ('

A ... tlo: r i- - - - -

AlI O""PoIi'lO: ri- - - - -

Co nstrui ndo a Interface com o Usurio com os Formu lrios da Web

277

Usando os Controles Avanados dos Formulrios da Web


Apesar de ser fc il criar um formulrio com os controles que esto dispon veis como parte da HTML, os formulrios da Web se tornam ainda mais teis (alm de coloridos e fce is de usar) quando so aplicados alguns dos controles mais avanados, como Ca 1endar, AdRotator ou Data. Embora sejam construdos com o uso de controles mais simples, eles faci litam a criao das interfaces com o usurio.

o controle Ca1endar mostra, por estranho que parea, um calendrio mensal. Esse controle permite que o usurio visualize e se lecione datas ma is fac iImente do que com o uso de uma TextBox. Alm disso, empregando Ca1endar, voc reduz a chance de o usurio inserir uma data em um formato invlido. O controle Calendar possui uma grande quant idade de propriedades, no entanto, a ma ioria delas diz respeito a sua ex ibio. Quase tudo que est visve l no controle pode ser ajustado - as cores, a grafia do dia da semana ou do ms e assim por diante. A Tabela 10.3 resume algumas das propriedades mais teis do controle Ca1endar.
TABELA

10.3 Prop riedades Importantes do Controle Ca1endar


Propriedade Descrio

Item

Se1ectedDate Vis i bleDate

Propriedade Propriedade

A data que ser retornada por esse controle. A data mostrada no controle. Embora em geral ela seja a mesma de Se 1ectedDate, pode ser diferente, principalmente se voc estiver tentando configur-Ia por meio de cdigo.

Atualizemos o projeto Mad1i b de modo que use um controle Cal endar em vez de TextBox para a data inserida. Voc pode editar o formulrio antigo ou cop i-lo se quiser visualizar os dois. Exclua a caixa de texto Date e adicione um controle Ca 1endar. Neste ponto, voc pode escolher entre testar as propriedades que afetam a aparncia de Calendar ou faci litar as co isas e selecionar o Iink AutoFonnat, que se encontra na parte inferior da janela Properties quando selecionar o controle Ca 1endar. Optei por dar um clique no link e selecionei CoI orful 2. (Por que complicar e criar algo estranho quando um profiss ional j trabalhou em uma opo de aparncia adequada seria essa uma de minhas estratgias de programao?) Configure a propriedade Ca 1endar' s Name como calDate. Voc tambm ter de alterar um pouco o cdigo das Listagens 10. 1 e 10.2 por causa da mudana no nome do controle. As Listagens 10.3 e 10.4 mostram o novo cdigo alterado.

278

Dia 10

CDIGO

LISTAGEM 10.3

Cdigo Alterado do Boto Clear

1
2 3

Private Sub cmdClea r_Click(


ByVal sender As System.Object. ByVal e As System.EventArgs)

4 5 6
7
B

Handles cmdClear . Click txtName . Text" " " calDate .SelectedDate " DateTime . Today
txtVerb . Text
= " "

9 10 11

txtNumber.Text = " " txtOccupation.Text " " lblResult . Text - " "
End Sub

ANLISE

Apenas uma linha de cdigo foi alterada. J que voc no tem mais a caixa de texto

txtOate, no pode configur-Ia com" ". Em vez disso, voc pode reconfigurar Cal endar para selecionar o dia atual (Date Time . TOday), como fez na linha 6.
CODIGO

liSTAGEM 10.4

Cdigo Alterado do Boto Write Story

1
2

Pr;vate Sub cmdWrite_Click(


ByVal sender As System.Object.

3 4 5 6 7 8 9 10
11 12 13 14 IS 16

17
1B

ByVal e As System.EventArgs) Handles cmdW rite.Click ' aqui que associamos as opes 'que o usurio selecionou formando a histria final Dim sTemp As String sTemp = "Dirio de " & txtName.Text &_ " de " & DateTlme.Today.ToString & "<br> " sTemp &= "Em" & calDate.SelectedDate &_ " Comecei a programa r no Visua l 8asic.NET . " sTemp &= "Estou" & rlstEmotion.SelectedItem .Text &" ! " sTemp &. "Acho que vou sair e " & txtVerb.Text sTemp &. " meu novo "& txtNumber.Text . sTemp & " Pi coHertz " & cboFruit.Selectedltem.Text sTemp &. " e me tornar um " & txtOccupation . Text & " " 'a histria final armazenada no controle Label lblResult .Text = sTemp
End Sub

19

ANALISE

Novamente, a nica alterao na Listagem 10.4 foi na linha 10. Em vez de recuperar a data em Text Box, o cdigo recupera a data selecionada em Calendar com ca 1Da te.SelectedDate.

Co nstruind o a Interface com o Usurio com os Formu l rios da Web

279

No verdade que as propriedades possuem um sentido intrnseco? E por isso que os criadores no chamaram o sistema de Visual Complexo .NET.

Usando os Controles Va 1; dator


Quando voc criar formu lrios de entrada de dados para a Web, em geral ser necessrio assegurar que eles sejam preenchidos de modo correto. Isso pode significar campos especficos preenchidos, ou apenas alguns deles, mas com valores que estejam dentro de um intervalo. No passado, poderamos fazer isso escrevendo um cdigo no servidor ou no cliente. Se o cdigo estivesse no servidor, poderia fazer com que as informaes fossem passadas entre o cliente e o servidor desnecessariamente. Se, em vez disso, colocssemos o cdigo no cliente, enfrentaramos problemas com a incompat ibilidade de alguns navegadores. Vrios controles Va 1i dator que tomam a validao de fomlUlrios muito mais fcil foram includos no Visual Basic .NET. Os controles processaro a va lidao no servidor ou no cliente se detenn inarem que o navegador tem essa capacidade. Cinco controles de val idao esto disponveis no Visual Basic .NET. Requi redFi el dVal i datar Assegura que um campo tenha sido preenchido. Voc pode us-lo sempre que quiser se cert ificar se o usurio concluiu o preenchimento de um formulrio antes de envi-lo. CompareVa 1idator Assegura que dois campos estejam coincidindo ou que um campo seja comparado a algum valor. No primeiro caso, a comparao entre campos ser til quando voc quiser que o usurio digite sua senha duas vezes. Comparar um campo com algum valor ser adequado se desejar que o usurio insira um nmero positivo ou se a entrada do usurio tiver de inclu ir um tipo especial de informao (por exemplo, uma data). RangeVa 1i datar Assegura que o va lor digitado em um campo esteja dentro de um intervalo. O intervalo pode ficar entre dois valores (como uma data inicial e uma final) ou entre dois controles. Por exemplo, voc pode ter um controle no qual o usurio deve inserir um valor mnimo, e um segundo para o valor mximo. Em seguida, o controle Va 1i da tar se cert ificaria se o valor digitado em um terce iro controle estaria entre os outros dois. Isso pode ser til como parte de um relatrio, no qual pode-se querer que o usurio selecione uma data que esteja dentro do intervalo de informaes annazenadas em um banco de dados. Regul arExpress ianVa 1i datar Assegura que o valor digi tado tenha o formato desejado. O valor comparado com uma expresso regular. Se coincidir, ser considerado vlido. Pode ser ti l para valores que precisem apresentar uma certa estrutura, como nmeros telefnicos, ISBNs ou nmeros de peas. CustomVal idator Permite que voc adicione seu prprio cdigo para validar o campo. Sendo o mais flexvel dos controles de validao, esse cdigo executado no servidor ou no cliente. Pode ser til quando um dos outros controles de va lidao no atende sua necessidade ou as informaes vlidas precisem ser detenninadas por meio de algum pro-

280

Dia 10

cesso - por exemplo, se o valor tiver de ser uma entre vrias entradas que se encontrem
em um banco de dados.

Alm desses cinco, tambm h o controle Va 1i dat ionSumnary, que exibe todas as mensagens de , erro de todos os controles VaI idator na mesma pgina. E ti l por fornecer um nico local para todas essas informaes.

Os cinco controles de validao possuem vrias propriedades importantes em comum. Elas esto relacionadas com o controle que monitoram e com a maneira de exibir o erro. As mais importantes entre essas propriedades esto descritas na Tabela 10.4.
TABELA 10.4

Prop riedades Com uns aos Controles de Val idao


Descrio
Esta a propri edade ma is importante de todos os controles de val idao. Deve ser configurada para apontar para outro controle (pelo nome) do mesmo formulrio. Esse o controle que ser monitorado pelo controle de validao. Use a lista suspensa da ja nela Property para selecionar o controle monitorado.

Propriedade

ControlToValidate

ErrorMessage

a mensagem a ser exibida se houver um erro com o controle de


validao, por exemplo, se o campo for deixado em branco. Ela deve ter informaes suficientes para permitir que o usurio determine o que est errado e como corrigir o erro.

Display

Esta uma propriedade um pouco estranha que def ine como o controle Va l idator apa recer na pgina da Web. Por padro, ela configurada como Static; no entanto, h duas o utras opes, Dynami c ou Nane. Se o valor fo r defi nido como Stat i c, o espao ocupado por ErrarMessage estar sempre preenchido, mesmo se essa mensagem no fo r exibida. Isso ser ti l se voc quiser garant ir a o rganizao de sua pgina da Web. O valor Dynamic sig nifica q ue o controle no ocupa r espao at que a propriedade ErrarMessage seja exibida. t adequado quando no se deseja espaos em branco no formu lrio. Para concluir, se esta propr iedade for configu rada como None, ErrorMessage nunca ser exibida. Essa configurao s ti l com o controle Val idationSUlTIlIiIry (que mostrar o erro).

Voc pode usar alguns desses controles para encerrar o aplicativo Madl i b do exemplo. Pode empregar o contro le Requi redFi el dVa 1idator para assegurar que o usurio tenha inserido as infor maes nos campos certos, e RangeVal idator para se certificar de que um nmero apropriado foi digitado no cam po txtNumber. Para concluir, possvel abranger todos os erros em um resumo com o contro le ValidationSunma ry. Mais uma vez, copie ou abra o projeto ou o fonnu lrio anterior para edit lo. Voc adicionar os controles Validator a ele. Arraste um controle RequiredFieldVa lid ator para perto de cada um dos controles TextBox re manescentes (txtName, txtNumber, txtVerb e txtOccupa t i on). Adicione um controle RangeVa 1i datar prximo ao controle Requi redFi el dVa 1idator que voc posicionou perto do campo

Construindo a Interface com o Usurio com os Formulrios da Web

281

txtNumber. Por fim , adicione um controle Val idationSunmary em uma linha prpria entre os bo~ tes e o controle 1bl Resul t. Confi gure as propriedades de cada um desses controles como mostrado na Tabela 10.5.
TABELA 10.5
Controle

Prop riedad es para os Contro les Val idatar do Formulrio Madl ib


Propriedade
10

Valor

RequiredFieldValidator

reqName txtName Please enter a name reqNumber t xtNumber Please enter a number Dynamic rngNumber txtNumber Please ente r a number from 100 and 1000 Dynamic In teger (inteiro) 1000
100

ControlToValidate ErrorMessage RequiredFieldvalidator


( 10)

ControlToValidate ErrorMessage Display RangeVa 1 i da tor


(10)

ControlToValidate ErrorMessage Display Type MaximumValue MinimumValue RequiredFieldValidator


(10)

reqVerb txtVerb Please enter a verb Oynamic reqOccupation txtOccupation Please enter an occupation Dynamic valSummary

ControlToValidate ErrorMessage Display RequiredFieldValidator


(10)

ControlToValidate ErrorMessage Display ValidationSummary


( 10)

Precisamos fazer uma pausa para descrever as trs propriedades de RangeVa 1i datar que voc no atribuiu antes. Embora seja evidente o sentido de Maxi m umVa 1ue e M nimumVa 1ue com relao i a algo chamado Ra ngeVa 1i datar (val idao de interva lo), a propriedade Type no to bvia. J que Rangev a1i da tar pode ser usado para testar vrios tipos di ferentes de valores (como inteiros,

282

Dia 10

valores financeiros ou datas), a propriedade Type identifica o tipo de informao que ser com parada. Ela pode ter um dos valores a seguir: Stri n9 O padro; faz com que o controle verifique se o valor est alfabeticamente entre as duas extremidades.

Integer (inteiro) Compara o valor com as duas extremidades para assegurar de que faz parte do intervalo. S os va lores inteiros so usados. Oouble (dup lo) O mesmo que o inteiro, porm incluindo a parte decimal do valor e
das extrem idades do interva lo.

Currency (moeda)
decima is do valor. Date (data) abril de 1986.

o mesmo que o inteiro, porm incl uindo as quatro primeiras casas


]2

Compara os valores como se fossem datas, portanto, um valor igual a 27

de agosto de 1964: seria aceito em um intervalo entre 23 de novembro de 1963 e

de

Agora verificaremos por que os controles Va 1i dator so to teis. Para faz-los func ionar, voc no prec isa adicionar nenhum outro cdigo. Construa e visualize a nova pgina da Web (veja a Figura 10.7). Tente deixar alguns cam pos em branco e exclua o algarismo 500 que o valor-padro para o campo do nmero. Voc ver mensagens de erro vennelhas aparecerem no formulrio. Se isso no acontecer, tente dar um clique no boto Write Story. Provavelmente surgir algo semelhante ao formulrio da Figura 10.8. Tente inserir um valor que esteja fora do intervalo aceito para o campo do nmero. Por fim, digite valores corretos em todos os campos e selecione o boto Write Story. Todas as mensagens de erro devem desaparecer e nossa histria ser exibida.
FIGURA 10.7

O fo rmulrio Mad 1i b

mostrando os
COl1lrole.~

de m/idao.

~ .moti.... ".t.:
(" P-k1 (" F"""""d (" F"' ..... d (" E<..- (" H~
(" ~d (" lo."f1'I (" Sbo<ld (" S. dd t_ d (" l,,",,,, (" Bb:

(" Enud

!.........,.., ..........
~.SlOtY
En", En ,

,,~ ~r- - - - -

f,;.,.,......., .... b ln .. ,op.tioo: ~r- - - - -

-- Io .. C

"'' ' >&< I c


,,'>&< ~

-.
>

,.....,

Co nstruind o a Inte rface com o Us u rio com os Fo rmul rios da We b


,. ."0 11" " , .m f ~"h",~. ,,,.

283
"'r:ll:!

FIGURA 10.8 O formulrio Mildl i b

rolo

u.

~"

...... ,",.~.,

1_ . '"' '

0 ..1, '.'" 00 , . "

000'

l/IO~

_._. 1_ _

mostrando os erros enCOlI/rados na Iolidacio.

_.. II!l ....,,".............._ .... ...

. o [;l t:l

a: .......... a.. eS._ I!I'.'_'

G / . '7 9 '

&

,.. Ma<! II ...,. wb .. o _ pIoyt< ,,10<1' ....... oC_do (aIuaIy t>,,,,. oj"",Of<l O< <lo .... "00) 1Ioeo pkwd """ ...,.., .. 'Pt.&; ",""lO , ..... a~) _ _ pmlliiod eod .. ~

n.." ....do .0

1:

r.... r"" nua" - - -


"I<in~ orr..li!: ",."_.- - -""'13 .
1
.,.:J 1(

"d.. "' I~

.. 12. ml

A n.......rf' . .. 100 lO 1000:

"f';-- 11.., ....". """","bo"",,,,

........rio.oI ...,.: .. bu.d r P_k,.

r Fruw_ r E<_ r!totnped r ~ r SO<i<lm<d r 1..1",",


A .. r\: ,r

r Fn&I~ r lt>wJ r Sbo<k.<d r a....


PIt." ..." ftII> ..... upolioo: r ,- - - -- PIt.,....'" ..

.-

- - - --

. c::================Jr:rrcr: ~~_ ~;; ::


Resumo

l'lt_ = """".. brIW ... le ) 0Dd 1000 l'lt... <=r a..rn l'lt....".... "'.' ,~_

Os apl icativos da Web esto cada vez mais importantes, e os fonnu lrios da Web tomam sua criao bastante fc il. Eles perm item que voc use as mesmas tcnicas que empregaria para desenvolver ap licativos para microcomputadores na construo de um aplicativo da Web que funcione em qualquer navegador. Colocando o cdigo novamente em um servidor (que voc possa controlar), possvel extrai r o mel hor que h nas duas alternativas para chegar ao objet ivo pe lo qual os desenvolvedores se empenharam - uma interface com o usurio sofi sticada e recursos compatve is com vrios navegadores. Embora apenas simular uma experincia como a que se obtm no Windows j seja o suficiente para a maioria das pessoas, os formulrios da Web vo alm, ajudando-o a criar com maior facilidade rotinas de validao e controles complexos. Na prxima lio, voc comear a exam inara programao orientada a objetos. Aprender qual a relao que a POO tem com o Visual Bas ic .NET e com a programao em geral. Perceber que at aqui j esteve invest igando os objetos, na forma do .NET Framework, assim como dos formulrios e controles que tem usado.

P&R
P Preciso ler um servidor Web disponvel para usar os formulrios da Web?

284

Dia 10

R S im, os aplicativos da Web precisam de um servidor Web que reconhea o ASP.NET, como o Internet Informatian Server (11 5). O 11 5 vem com um serv idor gratui to da Web que faz parte do Windows NT Server ou do Windows 2000 Server.

P Posso usar o Windows 98 ou o Windows Me para criar c implantar os aplicativos da Web?


R Esses sistemas operacionais j possuem, ou d isponibili zam, o Personal Web Server (PWS). No possvel usar o PWS para criar ap licat ivos da Web. Os sistemas Windows 9x podem ser empregados na gerao de aplicativos da Web, mas no so plataformas boas para sua imp lantao. Voc deve criar aplicativos da Web uti lizando o [I S no Windows NT 4 Server ou no Windows 2000 .

P Como posso aprend er mais sobre escreve r cdigos HTML?


R Embora os fo nnulrios da Web tornem o conhecimento da HTML quase opcional, ter uma boa formao prtica nessa linguagem ajudar. Exam ine um dos bons livros que se encontram no mercado para aprender mais.

Workshop

o Workshop foi planejado para aj ud-lo a antecipar possveis dvidas, revisar o quej aprendeu
e comear a pensar em como colocar seu conhecimento em prtica. As respostas do teste esto no Apndice A, "Respostas dos Testes/Exerccios".

Teste
1. Se voc pode adicionar texto a uma pgina da Web apenas por meio da digitao, por que precisaria dos controles Labe l? 2. Que controles o ajudaro a navegar entre as pginas de um aplicativo da Web? 3. Como posso exibir figuras em um formul rio da Web?

Exerccio
Crie um aplicativo para execuo de registras. Esse novo aplicativo da Web deve permitir que o usurio digite: Seu nome . Esse campo de preenchimento obrigatrio. Um nome de usurio para usar em seu site. Esse campo de preenchimento obrigatrio e no pode ter mais do que 10 caracteres. Uma senha nova (lembre-se de que a sen ha deve ser mantida em segredo). O usurio deve inserir sua senha duas vezes para garanti r que tenha sido digitada de modo correto. Os dois campos so de preenchimento obrigatrio e devem ter a mesma informao.

Depois que as informaes tiverem sido inseridas, o usurio deve dar um clique em um boto. Elas sero ento mostradas para ele.

Semana 2

DIA
Introduo aos Bancos de Dados
Computadores so boas ferramentas para trabalhar com dados, principalmente em grandes quantidades, e, no decorrer da histria desses dispos itivos, a maioria dos programas foi escrita

exatamcnte para fazer isso. Mesmo hoje, cm que se utilizam os computadores para urna enorme
variedade de tarefas, o processamento de dados ainda faz parte de quase todos os aplicativos empresariais e de muitos outros com finalidades diferentes. Nesta lio voc aprender sobre os bancos de dados, inc luindo: Termos importantes relac ionados aos bancos de dados. Aspectos bsicos da SQL.

Dicas sobre proj etas de bancos de dados. Uma breve introduo aos dados na platafonna .NET.

Um Banco de Dados a Soluo para Todos os Problemas Cotidianos


Nos ltimos anos, um dos autores deste livro foi ficando cada vez mais atrapalhado com a sua coleo de CDs. S h pouco tempo, ele percebeu que quase sempre ouvia apenas um ou dois

CDs especficos porque no sabia exatamente o que possua ou, quando sabia, no conhecia sua
localizao. A preocupao com a colco de CDs se tornou real quando ele decidiu limpar sua grande pi lha de discos e tentou organiz-los em algo parecido com uma classificao.

Dia 11

Porm, organizar os CDs em um nico fichrio no lima tarefa to simples quanto pode parecer,j que h muitas maneiras diferentes de orden-los. Talvez por artista possa ser melhor (certificando-se de que os Barenaked Ladies venham antes do Boney M.), ou por categoria, separando os discos em grupos de pop, rock, msicas natalinas e por a afora. H tantas decises a serem tomadas. Brian Adams deve ser colocado na letra A (levando-se em considerao o sobrenome) ou na B (considerando-se o primeiro nome)? E os CDs novos? Depois de colocar esse mesmo CD do Brian Adams em um dos poucos espaos iniciais de seu fichrio, O que se deve fazer se ele lanar mais um lbum? Ser necessrio mover todos os outros CDs para a frente a fim dc criar espao, ou ser interessante apenas coloc- lo no final e prej udicar seu timo sistema de posicionamento alfabtico? No final , pode ser mais simples decidir no comprar mais discos, o que parece ter sido a escolha feita pelos pais do autor nos idos dos anos 70. A necessidade de tomar uma deciso se tornou bvia quando, durante a limpeza de CDs, nosso conhecido autor se deparou com dois (2t) CDs "Queen: Classic Hits, Volume I" . Pois bem - e isso no nada contra o Queen -, ningum precisa de dois CDs iguais de melhores s ucessos, no impona quanto ele goste de ouvir"Bohemian Rhapsody" . A lgo tinha de ser feito rapidamente.

A Deciso Tomada
Todas as opes acabaram sendo muito trabalhosas, e o autor chegou a uma concluso s urpreendente: as informaes sobre o CD deveriam ser inseridas em um programa de computador! Para ser sincero, no assim Io surpreendente - ele chegou a essa concluso em muitas outras situaes (tal vez muitas, se voc perguntar a sua esposa ou a um de seus poucos amigos que continuaram a s-lo). No entanto, a idia de armazenar dados em um computador no to nova; na verdade ela sempre foi uma das finalidades mais comuns dos sistemas de com putador. Voc pode organizar os dados de muitas maneiras, mas a vantagem de usar um computador para executar a organizao que, depois que estiverem no sistema, podero ser visualizados de vrias maneiras. Isso el imina muitos dos problemas enfrentados pelo pobre autor no cenrio descrito anterionnente. Se um novo CD tiver de ser inc ludo, poder ser adicionado ao final do arquivo de dados, mas ser exibido em sua localizao apropriada com base na vis ualizao selecionada. Se voc quiser visualizar os CDs por anista, apenas ordene os dados usando um campo chamado Artista. Se preferir v-los pelo ttulo do CD, a reordenao pode ser facilmente executada. Nesse caso, vamos supor que todos os dados tenham sido inseridos em um arquivo de texto no computador, com cada linha desse arquivo representando um CD. Os campos e entradas possveis teriam a aparncia a segu ir:

ArtistName, ArtistFirstName, ArtistLastName, COTitle , CDReleaseYear , .. MusicCategories Sting, Sting, ,Brand New Day, 2000, Pop Queen, Queen, , Classic Hits Volume 1, 1987, Rock/Pop/Best Of Sting , Sting, , Fields Of Gold, 1994, Pop/Best Of

Introduo aos Ba ncos de Dados

287

NOTA

Em muitos bancos de dados, no so permitidos espaos nos nomes das tabelas ou dos campos, portanto o nome dos campos teve de ser alterado para evitar problemas de compatibil idade.

A primeira linha desse arquivo, chamada linha do cabealho, indica que partes da informao esto armazenadas em cada linha. Uma nova linha marca o incio do registro de cada lbum. As virgulas so usadas para separar as campos, tomando esse arquivo um arquivo separado por vrgulas (ou delimitado por vrgulas). To simples quanto parece, esse arquivo um banco de dados e poderi a ser utilizado por um programa de computador que registrasse os lbun s. J que se trata de um banco de dados, voc pode us-lo para aprender alguns dos termos que empregar daqui em diante para se referir s diferente s partes de um banco de dados:
Novo TERMO

Cada CD listado nesse arquivo um registro individual, s vezes chamado de linha porque os registras em geral so annazenados ou ex ibidos como linhas separadas com as informaes.

Novo TERMO

Dentro de cada registro, vrios trechos da infonnao sobre cada CD so registrados, e cada item desses chamado de campo (nesse caso, Art istName, CDTitle, CDReleaseYeare outros). Como os registras, os campos em geral so conhecidos por oUlro nome, co/unas, porque so com freqUncia annazenados e exibidos como colunas individuais com infonnaes. o grupo completo de registras (todos com o mesmo conjunro de campos) chamado de tahela, e um banco de dados pode conter muitas delas, embora o exemplo desta lio, at o momento, s6 apresente uma.

Novo TERMO

A Passagem para um Banco de Dados Real


Certo, ento agora voc conhece todos os termos que preci sar para descrever seu pequeno banco de dados, que contm uma nica tabela de registras de CDs que chamaremos de Disc. (Espero que a utilizao que se faz do termo ' registro' para descrever tanto os lanamentos musicais quanto uma parte do banco de dados no gere confuso.) Com seus termos e o banco de dados definidos, como iremos trabalhar com esses dados em seus programas de computador? Como j mencionei, o banco de dados do exemplo um simp les arquivo de texto, e esse tipo de arquivo relativamente fcil de ler. (Veja o Dia 4, "Controlando o Fl uxo dos Programas", para ver um exemplo da leitura de um arquivo ou o Dia 17, " Usando o .NET Framework", para obter mais detal hes sobre as exce lentes classes de le itura de arquivos do Framework.) No entanto, corno o exemplo se encontra no mOmento, voc meSmO teria de analisar cada linha dos dados e manipular todas as cal unas. Mesmo se pudesse ler o arquivo, seria prefervel poder manipul-lo usando alguma das maneiras-padro, inclusive encontrar registros especficos, adicionar novos itens, excluir outros e alterar todo ou parte de um registro. Para implementar esses recursos, seria necessrio escrever urna codi fica o extensa, mas no ser preciso man ipular nada disso se COIl-

Dia 11

vertermos seus dados para o fonnato de um banco de dados como o Access ou o SQL Server. Esses sistemas gerenciadores de bancos de dados podem manipular o armazenamento de suas infonnaes e tambm responder solicitaes de recuperao e alterao desses dados, gerenciando todos os detalhes de layout de arqu ivo e armazenamento. Os sistemas de bancos de dados possuem muitos recursos, mas o serv io comum que eles fornecem manipular os detalhes de armazenamento de dados e liber-lo de qualquer interao fisica com as infonnaes.

Uma Introduo SQL


Depois que os dados forem armazenados em um banco de dados, voc ainda ter de manipul- los a partir do programa, mas no precisar mais se preocupar com todos os detalhes. A SQL (Struclured Query Language) fo i desenvolv ida para fornece r uma linguagem com um de acesso aos bancos de dados. Essa linguagem contm comandos para manipulao de registros nas tabelas do banco de dados e tem suporte at certo ponto de quase todos os softwares gerenciadores de bancos de dados dispon veis. Muitos comandos diferentes da SQL podem ser usados, mas os que abordarei aq ui manipu lam: A recuperao dos registras dos dados. A incluso de novos registros. A alterao dos regist ros existentes. A excluso de registras.

Recuperando Registras com a Instruo SELECT


Em SQL, a instruo SELECT usada para recuperar dados de um banco de dados. Esta instruo, em sua forma bsica, tem a aparncia a seguir:
SINTAXE

SELECT <nome dos campos> from <Tabela>

Com o banco de dados de CDs como exemplo, se voc quisesse recuperar todos os ttulos de CDs junto com os nomes de seus artistas, poderia executar esta instruo SQL:
SELECT ArtistName, COTitle FROM Oisc

Ela retomaria um conjunto de dados com dois campos, e uma linha para cada registro da tabela Disc. Como alternativa, se voc qu isesse obter todas as colunas de uma tabela, poderia usar * em vez de uma lista de campos, produzindo uma instruo como a da linha a seguir:
SELECT

* FROM Oisc

Embora voc provavelmente ir ver instrues SQL como essa em muitos exemplos e at em aplicat ivos, no uma prt ica recomendvel recuperar todos os campos de uma vez. O que se deseja sempre recuperar a menor quantidade possvel de infor-

Introduo aos Ba ncos de Dados

maes, e em geral isso no significa todos os campos. Seja cuidadoso para no prejudicar a longo prazo o desempenho de seu cdigo apenas para obter uma economia no tempo que leva a digitao em seu programa.

Faa
Especifique cada campo que quiser recuperar em uma instruo SQL. Recupere a menor quantidade de dados ou de campos e registras passivei pa ra fornece r um desempenho melhor.

No Faa
No use * para indicar todos os campos, a menos que esteja certo de que precisar de cada campo que existe na tabela e de todos os outros que possam ser adicionados posteriormente.

Ordenando os Resultados
A ordem dos registras retornados no foi especi ficada nas duas consultas mostradas at agora, mas voc pode adicionar uma clusu la instruo SQL para configurar a ordem da classificao. Essa clusula, ORDER BY, usa uma lista de campos, permitindo que possa ser espec ificado mais de um na ordenao. A instruo SQL a seguir recupera os campos Arti stName e CDTi t1 e de todos os registras da tabela Disc, ordenando-os primeiro pelo nome do artista (Art is tName) e, em seguida, pelo titulo do CD (CDTit1e) dentro de cada conjunto de regi stros de artistas:

SELECT ArtistName. CDTitle FRDM Oisc ORDER BY ArtistName , COTitle Por padro, um campo especificado na clusula ORDER BY ser classificado em ordem crescente (em relao ao valor ou ordem alfabtica, at atingir o ult imo registro retornado), de A a Z se o cam po armazenar texto. Se voc quiser que a ordem seja inversa, decrescendo de Z a A, ento, especifique uma palavra-chave DESC prxima ao trecho da clusu la ORDER BY que deseja que seja classificada na ordem inversa. O exemplo a seguir ordenar por artista em ordem alfabtica inversa e, em seguida, por ttulo de CD em ordem crescente. SELECT ArtistName , CDTitle FROM Disc ORDER BY ArtistName Desc, CDTitle
A ordem-padro, crescente, tambm pode ser especificada com o uso da palavra-chave ASC eX3tamente como Desc empregada. A instruo SQL a seguir possui o mesmo efeito que a anterior, mas mais exp lc ita sobre o que est acontecendo.

SELECT ArtistName, CDTitle FROM Di sc DRDER BY ArtistName Desc , CDTitle ASC

Faa
Especifique ASe mesmo se estiver usando DESC; ajudar a evitar confuso. No ordene mais campos do que os necessrios porque isso afetar o desempenho.

Dia 11

Especificando um Critrio
As instrues SELECT mostradas at agora recuperavam todos os registras da tabela Disc, mas e se voc quiser recuperar s um determinado registro ou um conjunto de registras com base em um critrio especfico? Outra clusula pode ser adicionada a uma instruo SELECT para se encarregar di sso, a clusula WHERE. Nessa clusu la, podem ser especi ficados quantos critrios se desejar para restringir que linhas sero retornadas. Usando esse recurso, a instruo SELECT a seguir s recuperar os CDs do Sting: SELECT COTitle. COReleaseYear FRDM Oisc WHERE ArtistName = 'Sting' Observe que o campo usado para restringir os resultados no foi um dos retornados; voc pode , uti lizar o campo que quiser. E possvel combinar vrios critrios empregando os operadores ANO/DR e usar parnteses para determ inar como esses critrios sero apli cados. Para recuperar os discos lanados depois de 1984 cujo nome do artista St ing e os lanados antes de 1984 pelo grupo The Pol ice, a instruo SELECT a seguir poderia ser empregada: SELECT COTitle. COReleaseYear FRDM Disc WHERE (ArtistName = 'St1ng' ANO COReleaseYear => 1984) DR (ArtistName= 'The Police' ANO COReleaseYear < 1984) Essa consulta levanta uma questo relativa aos bancos de dados que sempre foi incmoda: o di sco deve ser inserido como Pol i ce ou Pol ice. The. representando o valor do campo Arti stName? Detalharei esse e outros problemas comuns relacionados aos bancos de dados, alm das melhores mane iras que conheo para resolv- los, ainda nesta lio em "Problemas Comuns dos Bancos de Dados e Suas Solues".

Adicionando Novos Registras


A ordem na qual esta li o aborda essas instrues SQL se apresenta um pouco invertida. Voc aprendeu a recuperar dados no banco de dados antes de saber como inseri-los! Embora alguns deles sejam apenas de leitura, na maioria dos casos os registros novos so adicionados s tabelas regularmente. O comando SQL empregado para inserir esses registros novos chamado INSERT e apresenta este formato bsico: INSERT INTD <Tabela> (campo l.campo 2... ) VALUES (valor l.valor 2 .. . ) Vo ltando ao exemplo da biblioteca de registro de CDs, voc poderia usar uma instruo I NSERT para adicionar um disco novo: INSERT INTO Oisc (ArtistName. ArtistFirstName . ArtistLastName . COTitle. " COReleaseYear. MusicCate90ries) VALUES ('Lenny Kravitz'. 'Lenny' . " .'Krav it z ' , 'Greatest Hi ts' . 2000 , ' Rock/Pop/Sest Df') Observe as aspas simples usadas em todos os valores excelO em COReI easeYear. Essas aspas so necessrias em qualquer valor text ual em pregado nas instrues SQL para diferenci-lo dessas instrues. J que CORe I easeYea r no um valor textual. no precisa ser co locado entre aspas.

Introduo aos Ba ncos de Dados

291

possvel saltar a lista dos nomes dos campos, contanto que a de valores esteja na ordem correta. No entanto, esse outro exemplo de como voc pode econom iZ:'lr tempo na criao do cd igo, porm tomando sua manuteno mai s difci l e fazendo com ele esteja mais propenso a apresentar alguma fa lha no futuro.

Alterando Registros
A SQL fornece a instruo UPDATE para que modificaes sejam feitas em registros existentes,

permitindo que voc altere de imed iato um ou mais campos de quantos registros quiser. Essa instruo possui a sintaxe bsica a seguir:
SINTAXE

UPDATE <Nome Tabela> SET <nome campo>

<valor novo>

Como na instruo SELECT, a instruo UPDATE pode ter uma clusula WHERL Sem essa clusula, ela executar sua atualizao em todos os registros da tabela. Ponanto, a instruo UPDATE Disc SET CDTitle
=

'Novo Ttulo'

configuraria todos os campos COT i t 1e como' Novo Ti tul o' , que provavehnente no o resultado pretendido. Embora em geral seja atua lizado apenas um registro, til poder alterar vrios deles com uma instruo UPDATL Novos valores configurados com o uso dessa instruo podem ser baseados no contedo existente no campo. Como exemplo, considere esta atualizao em uma tabela fictcia que fornece a cada funcionrio 10% de aumento: UPDATE Fu ncionaria SET Salario
=

Salario * 1.1

Na ma ioria dos casos, no entanto, ser prefervel especificar uma clusu la WHERE para restringiras registras afetados a um grupo menor ou mesmo a um nico item . A instruo SQL a seguir atualiza todos os registros dos Barenaked Ladies na tabela Disc alterando seu valor em Mus;cCategories para Pop: UPDATE Disc SET MusicCategories
=

'Pop' WHERE ArtistName

'Barena ked Ladie s'

Esse tipo de reavaliao de categorias e agrupamentos em um banco de dados algo que voc pode querer fazer de vez em quando para evitar confuso. Embora os exemplos desta lio tenham sido simples, a instruo UPOATE pode executar aes mais complexas. Por exemplo, voc pode atualizar vrios campos de uma s vez, separando cada atribuio com uma vrgula, e tornar uma clusula WH ERE to intrincada quanto quiser.

292

Dia 11

UPOATE Oisc SEr ArtistName

'5ting',
=

Art i stFirstName " 'GordOrl',

Art istLastName

'Sumner'
=

WHERE ArtistName

'5tin9' DR ArtistName

'Mr.Sting'

Removendo Registros Indesejados


Voc recuperou, adicionou e alterou seus registras, sem exec utar uma operao bsica, a excl uso. A SQL forn ece uma instruo DELETE que usa uma sinta'(c simples:
SINTAXE

DELETE <Tabela> WHERE <critrio>


Nesse caso, como com UPDATE, a clusu la WHERE opcional, porm importante por-

que sem ela, voc excluir todos os registras da tabela especificada.

Na tabela Disc, voc poderia usar essa instruo para remover um ccrto grupo de registros ou, o que mais comum, exclu ir apenas um. A in struo SQL mostrada aqui removeria todos os di scos de Gordon Lightfoot (exeeto um):
OELETE Di se WHERE Arti stFi rstName " ' Gordon' ANO ArtistLastName " 'Lightfoot' ANO COTitle ! = 'Summertime Oream '

Para Onde Ir a Partir Daqui Abordando a SQL


A SQL realmente importante, mas tambm um tpico extenso e complexo em s ua abrangncia. Voc aprender mais detalhes sobre ela no decorrer desta lio, mas esses exemplos no fornecem uma abordagem com pleta do assunto. Quase todos os bancos de dados usam a SQL em algum nvel, e h vrios li vros dedicados somente a essa linguagem. Alguns muito bons so :

Desenvolvendo Bancos de Dados na lVeb Dominando SQL Serva 2000, Gunderloy

Pas~o

a Passo, Buyens

MS SQL Serva 2000 - Passo a Passo, Riordan

Outra boa fonte, que voc provavel mente j possui, o material da biblioteca Microsoft Solution Deve lopers Network (MSDN), que faz parte da instalao do Visual Studio. Tente pesquisar os com andos SQL descritos anteriormente, rastreando a seo de refernc ias SQL da bibl ioteca MSDN. Se quiser praticar a SQL fora dos exemplos que executar neste li vro, poder faz -lo com qua lquer programa de banco de dados q ue tiver disponve l. Se ti ver o SQL Server instalado, execute o Query Anal izer (veja a Figura 11 . 1), que uma das ferramentas que vem com o SQL Server e est dispon vel como um cone na pasta do men u desse programa. Essa ferramenta fo i projetada para permit ir a execuo de consultas e a visual izao dos resultados, embora seja recomendve l ter cautela ao executar algo que no seja uma consu lta SELECT at que j se tenha mais segurana para especificar as clusulas WHERE.

Introduo aos Bancos de Dados

293

FIGURA 11.1

O Quel)' Alla/yser permite que I'oci! execute instrues SQL direcionadas a seu

. ~.

00

n ~ .. ...

bal/co de dados. mas o


recurso mais aval/rado
se el1comra lia sua

capacidade de aI/alisaI'
o desempellho e a
eSlrl/fl/ra das COlIs/lllas.

Problemas Comuns dos Bancos de Dados e Suas Solues


Os softwares de bancos de dados armazenaro s uas tabelas, cam pos e registros, mas como os dados sero estruturados algo que s compete a voc e, portanto, a que a maioria dos problemas ocorre. H muitas maneiras diferentes pelas quais possvel organizar o mesmo conjunto de dados, mas apenas algumas de las funcionaro bem em um sistema de banco de dados. O objetivo produzir um banco de dados que seja eficiente para a pesquisa, mas aconselhvel dificultar a introduo de dados inconsistentes. A inconsistncia o maior problema dos bancos de dados. Se partes diferentes dele no estiverem em concordncia, os dados no sero confiveis. Considere o exemplo de uma tabela, na qual intencionalmente cometemos alguns dos erros mai s comuns. Nessa tabela, fci l gerar dados inconsistentes porque ela niio foi estruturada para evitar ou pelo menos minimizar esses problemas. Percorrere i cada um dos princ ipa is problemas de lima tabela desse tipo e mostrare i como evit-los nos bancos de dados que forem criados.

Inconsistncias de Atualizao
Suponha que um usurio decida atualizar uma linha da tabela Disc porque o valor de Arti st est incorreto. Talvez Sling tenha sido especi fi cado quando o certo ser ia Bruce Willis. O usurio poderia executar essa instruo SQ L:

UPOATE Oisc SET ArtistName = 'Bruce Willis ' WHERE ArtistName = 'S ting' and COTitle = 'The Return Of Bruno'
Essa uma instruo SQL perfeitamente adequada, mas, se a linha origina l de dados fosse como a descrita a seguir:

Dia 11 ArtistName, ArtistFirstName, ArtistLastName, CDTitle, CDRelaseYear, .. MusicCategories agora teria esta aparncia: Bruce Willis , Gordon, Sumner, The Return Df Bruno, 1986, Rock/Pop Arti stName reflete a informao correta, mas Arti stFi rstName e Arti stLastName no o fazem, o que uma inconsistncia. Isso poderia ter sido evitado se todos os trs campos tivessem sido atua[izados, mas o usurio ou o software teria de assegurar que os dados fos sem consistentes. Voc tem de fazer tudo que puder no nvel do projeto do banco de dados para evitar a inconsistncia.

Faa
Estruture seu banco de dados para evita r a inconsistncia. No confie no fato de que seus usurios, inclusive seus prpriOS programas, iro trabalhar com os dados exatamente da manei ra esperada .

Outra inconsistncia com um que pode ocorrer quando se usa urna estrutura de banco de dados como a da tabela Disc que podem existir muitas variaes de dados que deveriam ser idnticos. Aqui esto trs linhas da tabela Disc: , Maroon, 2000, Pop Barenaked Ladies, -, The Barenaked Ladies. - , - , Gordon , 1993. Pop Barenaked Ladies. - - , Stunt. 1999. Rock/Pop Uma consulta SQL criada para encontrar todos os lbuns dos Barenaked Ladies poderia ser escrita da segu inle maneira: SELECT * FROM Disc WHERE ArtistName ; 'Barenaked Ladies' Esse cdigo retornaria a primeira e a lt ima das trs li nhas listadas do cdigo anterior, mas no encontraria o CD chamado ' Gordon'. Isso resultaria em um erro exibido para o usurio ou algo parecido. O usurio simplesmente no conseguiria a infonnao correta.

o terceiro problema com re lao aos campos Arti st ocorrer se um artista alterar seu nome. (Essa
sit uao no comum quando se trata de msica, mas se voc estivesse lidando com depat1amentos de uma empresa ou nomes de produtos em outros bancos de dados, seria um grande problema.) Suponha que um artista, selecionemos de modo aleatrio o Prince, altere seu nome da simples palavra ' Prince' para um simbolo impronuncivel (que, infelizmente, no lz parte do cdigo ASCII e, portanto, voc no poder inseri-lo em seu banco de dados). Seria necessrio atualizar cada registro que no momento tivesse o nome Prince nele. claro que essa seria uma instruo simples: UPDATE Disc SET ArtistName = 'O artista anteriormente conhecido como Prince' WHERE ArtistName = 'Prince' Pressupondo que ningum tenha escrito Prince errado em algum local, essa instruo SQL atua\izaria todos os registras necessrios. Novamente, no entanto, voc est confi ando no fato de que o usurio ou o software esteja ciente de que preciso executar vrias alteraes. Pode ser que

Introduo aos Ba ncos de Dados

295

eles no usem uma instruo UPDATE como a anterior. Eles podem alterar apenas uma entrada para o novo valor, em vez de todos os discos de Prince, tornando o banco de dados mais uma vez inconsistente. A situao fica ainda pior quando descobrimos que precisamos alterar todos os registros retornando-os para ' Prince' no final! Todas essas questes resu ltam de um problema na estrutura do banco de dados - as informaes sobre o art ista so armazenadas com o registro de cada disco, embora o nome do art ista na verdade seja um conjunto independente de dados. Para evitar os problemas descritos, voc deve separar as informaes sobre o artista para que fiquem em sua prpria tabela e armazenar apenas um va lor com o disco para vincu lar as duas tabelas. Para esse valor, poderia ser usado o campo Arti stName, mas isso trar problemas se ele for alterado em algum momento. Em geral melhor escolher um valor que com certeza no v ser alterado a menos que o registro vinculado, na tabela Artist, seja excludo. Ao examinarmos o conjunto aluai de informaes sobre o artista - os valores de Art is tName, Art is tFi rs tName e Arti s tLas tName - , no h nada que possamos garantir que no ser alterado. Portanto, voc adicionar um campo exclus ivo para esse fim . Com freqUncia isso que acontece, um campo adicional tem de ser criado apenas para atuar como um identificador exclusivo de um registro, e o mtodo mais comum gerar um campo contendo um nmero que seja automaticamente incrementado. Inserindo esse campo a seu conjunto de informaes sobre o artista, obteremos a tabela Artist a seguir: ArtistID. ArtistName . ArtistfirstName . ArtistLastName l,5tin9 , Gordon, 5umner 2,The Barenaked Ladies , 3, 80n Jovi. - 4, Queen , - , 5, The Police , - ,

45. Janet Jackson, Janet. Jackson Cada registro da tabela Disc ainda prec isa ser associado a um artista, portanto, voc ad icionar um campo a essa tabela que ter um valor de Art i stIO para cada registro. A tabela Disc agora teria a aparncia a segu ir: Ar tistID. COTitle, CDReleaseVear, MusicCategories I, Brand New Day , 2000, Pop 4, Greatest Hits, 1988 , Rock/Pop

o campo Arti stIO chamado de chave porque usado para identificar uma entidade individual.
Na tabela Artist, em que Art i s tIO ident ifica apenas um artista espec fico, esse campo seria denominado chave primria. Na tabela Disc, ele pode ser chamado de chave externa porque empregado como um vnculo de retorno a uma tabela diferente (veja a Figura 11.2). Uma tabela em geral contm vrias chaves externas, vinculando-a a outras tabelas, porm possui s uma chave primria (embora mais de um campo possa ser usado ao mesmo tempo para formar lima chave primria).

296

Dia 11

FIGURA 11 .2 As tabelas Ar/isl

Artist

pj(
_

e Oisc contm

campos-chm'e qlle
I'inculam lili/a
Olll/'Q,

ArtistlD ArtistName ArtistFirstName AnistLastName

Disc

FK1 AnistiO CD Title CDReleaseYear

MusicCatego ries

Novo TERMO

A chave um valor, em geral um campo, que identifica uma entidade, como o nome

de um estudante, de um autor ou um nmero de seguro social. Quando um campo identifica exclusivamente cada registro de uma tabe la, chamado de chave primria da tabela. A chave primria de uma tabela que inser ida em um campo de outra tabela para vincular as duas entidades conhecida na ltima tabela como chave externa. Quando duas tabelas esto vinculadas pelo uso de chaves primrias e externas, diz-se que e las esto relacionadas.

Novo TeRMO

Por causa da transferncia dos dados do campo Arti st para uma tabela separada, as instrues necessrias para adicionar e recuperar informaes tero de ser alteradas. Para adicionar dados, ser preciso exec utar duas instrues INSERT, uma na tabela Artist e outra na tabela Disc, mas a de Artist ocorrer apenas uma vez a cada artista, e no a cada disco. A criao de tabelas vincula das separadas elimina os problemas di scutidos anteriormente, mas gera uma nova maneira de in troduzir dados inconsistentes - chaves externas invlidas. Se um usurio ou programa remover um valor do campo Artist, ento, todos os discos que fazem referncia a essa identificao do artista repenti namente se referiro a um registro da tabela Artist que no existe. Discutirei como lidar com esse problema um pouco mai s adiante nesta lio, na seo " ]ntegridade Referencial" . A maneira de recuperar dados necessrios no banco de dados tambm foi alterada, j que as in formaes que voc deseja agora esto contidas em duas tabelas. Os mtodos que usaremos para obter esses dados tambm sero abordados ainda nesta lio, na seo "Associaes: Consultan do Vrias Tabelas de uma S Vez".

Introduo aos Bancos de Dados

297

Inconsistncia entre Locais Versus Dados Incorretos


No novo layout da tabela, as informaes sobre o artista est o armazenadas na tabela Artist, separadas das relacionadas ao CD, que se encontram em Disc. O objetivo dessa separao coibi r info rmaes inconsistentes. Queremos evitar situaes em que duas partes diferentes do banco de dados sejam discorda ntes sobre o mesmo trecho de dados. No estamos tentando impedir a ocorrncia de dados incorretos, embora esse seja um problema real. Na verdade no um problema de um projeto de banco de dados se o campo Fi rstName de Sting for configurado como George em vez do nome certo Go rdon, co ntan t o que todo o banco de dados esteja consisten te e armazenando apenas um valor, no caso George. Isso pode parecer um pouco estranho porque os dados incorretos so uma questo de importncia relevante, mas o objeti vo do projeto do banco de dados evitar a introduo de erros devido ao layout dos dados. O software e seus usurios que precisa m estar atentos para evitar os dados incorre tos.

Campos Multivalorados
Um dos campos, Mus i cCategori es, pode conter mais de um valor de uma s vez, por meio do formato a seguir: Rock/Pop. Esse tipo de campo precisa ser removido de seu banco de dados, ou voc ter vrios problemas com ele. O pri meiro problema ocorrer quando o usurio tentar recuperar dados com base nas informaes contidas ali : SELECT * FROM Disc Where Mus;cCategor;es
=

'Rock'

Isso retornaria os discos em que o valor de Mus i cCategori es fosse igual a Rock, mas no os de Rock/Pop, Sest of /Rock ou qualquer outra informao relativa a mais que apenas uma categoria . E preciso ter algum conhecimento sobre o objetivo do banco de dados. Nesse caso, a finalidade do campo Musi cCategories era agrupar os CDs de um ou mais tipos de msica. Se o usurio quisesse encontrar todos os seus discos de msica pop ou que se enquadrassem tanto no conjunto rock quanto em 'c lssicos' (seria RoCk/Ses t Of ou Ses t Df /Roc k?), os problemas resultantes tornariam essa categori zao intil. A tualizar os dados de um campo multi valorado tambm quase to difcil quanto a situao comentada. Termi naramos tendo de adicionar o novo valor a um j existente, nos certificando de que ele j no estivesse l! Tudo fi caria ainda mais complicado se em algum momento decidssemos renomear uma categoria, alterando-a de Pop para Popular por exemplo, uma tarefa que seria extremamente dificil de real izar com uma instruo UPDATE. Para corri gir essa instruo mu ltivalorada e evitar todos os problemas decorrentes dela, separaremos os dados em outra tabela. Diferente das informaes sobre o art ista, no entanto, s uma tabela nova no pode man ipularo relacionamento entre as categorias e os discos. Cada art ista pode ser associado a um nm ero qualquer de discos (ou a absol utamente nenh um ). Esse relacionamento chamado um-para-muitos ou, o que seria mais correto, nenhum-para-mllifOs. O relacionamento entre o di sco e a categoria mais com plexo; uma n ica categoria pode ser assoc iada a muitos discos e apenas um disco pode ser associado a muitas categorias. Isso produz um relacionamento muitos-para-muitos que voc poder mode lar usando duas tabelas novas. Uma armazenar as prprias categorias, a outra vincular os discos s cmegorias (veja a Figura 11.3).

298

Dia 11
Dis<:Category

FIGURA 11 .3

Modelar

IIfIl

relac iO/1(1l1le/llo

muitos-para-II/uitos requer
trs tabelas: as dilas

PK

emidades que eSTo relacionadas e lima tabela


especial qlle exiSla apel/os

PK

i
Arti~tlD

para conect-Ias.

CD litle
I

As tabelas resultantes obedecem um padro que sempre poder ser usado para representar um relacionamento muitos-para-muitos . Detalharei como fazer consultas em relacionamentos do tipo
um-para-multos e mUltos-para-mu ltos na seao a segUIr.

Associaes: Consultando Vrias Tabelas de uma S Vez


Agora que voc separou de modo adequado seus dados em vrias tabelas, ser prec iso mais do que as s imples consu ltas SELECT que executou anteriormente para obter as informaes que deseja. Neste momento h algumas tabelas distintas, porm uma se relacionando com a outra atravs de campos-chave. Usando esses mesmos campos-chavej podemos associar os dados de uma tabela com os correspondentes da outra tabela, ou tabelas, e produzir um nico conjunto de resu ltados. H diversas

maneiras de constru ir a instruo SHECT quando se quer trabalhar com mltiplas tabelas, mas veja a seguir um exemplo:
COOIGO

SELE Art is t . Arti stName CT


WHERE

Di sc . CDTitle FR M Art ist

Di sc

Artist.ArtistIO '" Oisc.ArtistIO

RESULTADO

Nothi ng Li ke lhe Sun Sting Brand New Oay Sting lhe Barenaked Ladies Maroon lhe Barenaked Ladies Gordon

...

NOTA

Quando voc tiver mais de uma tabela envolvida em uma instruo SELECT, passivei que um campo com o mesmo nome exista em vrias delas. Nesse caso, preciso especific-lo uti lizando o formato tabe 1a _campo em sua instruo SE CT para assegura r que o banco de dados compreenda qual o campo deLE sejado. No entanto, essa sintaxe pode ser usada em qualquer situao, mesmo quando s houver uma t abela envolvida.

Essa instruo informa ao banco de dados que recupere todos os registras da tabela Disc e, para cada um deles, faa uma pesquisa (usando a identificao do artista - Arti st 10 - armazenada na tabe la Disc) na tabela A rti st em busca do nome correspondente do artista (Art i s tName) . Isso pa-

Introduo aos Ba ncos de Dados

rece trabalhoso, mas, felizmente, todo o trabal ho manipulado pelo banco de dados, e ele o faz de modo muito rpido. Portanto, embora voc tenha removido cuidadosamente Arti stName da tabe la Disc, ainda poder produzir os mesmos resu ltados associando as tabelas Dise e Artist.
Novo TERMO

Vincular duas tabe las em uma consu lta para recuperar dados relacionados chama-se Qssocwao.

A ltima instruo SQL usava uma clusula WHERE para associar as duas tabelas, o que com certeza funciona r, mas no a melhor manei ra de criar associaes. Em vez disso, voc aprender lima sintaxe nova com a qual poder especificar as informaes sobre a assoc iao como parte da clusula FROM de sua instruo SQL. A reconstruo da instruo anterior com a sintaxe correta produzir SELECT Artist .ArtistName , Disc.COTitle FROM Oisc INNER JOIN Artist ON (Artist.ArtistID
=

Disc.ArtistIO)

Essa instruo gerar os mesmos resu ltados que a do exemplo anterior que usava a clusula WHERE, e pode ser chamada de associao il1lerna. possvel especificar Disc JOIN Arti st, e a palavra INNER 'omitida' ser incorporada, porm o Access no aceita essa fonna abreviada.

Associaes Internas versus Externas


Com uma associao interna, a consulta retorna apenas os registros em que uma correspondncia foi encontrada nas duas tabe las. No exemplo, isso signi fi ca que se um art ista foi listado na tabela Art ist, mas no teve nenhum registro correspondente na tabela Disc, ele no far parte do resultado. Se esse no for o resultado esperado, se em vez disso voc quisesse todos os art istas listados na tabela Artist em seus resu ltados (mesmo se no tivesse nenhum disco de alguns deles), poderia usar urna associao externa. As associaes externas vinculam as tabe las uti Iizando as mesmas informaes, mas se no consegu irem encontrar nen hum valor correspondente em uma delas, mesmo assim retornaro os campos da primeira e anu laro (removero) os valores dos campos que estiverem na segunda tabela. A palavra-chave OUTER pode ser preced ida por LEFT oU RIGHT para espec ificar em que direo a associao deve trabalhar. Voc deve estar se perguntando qual tabela seria a primeira e qual seria a segunda. Bem, se voc especificar RI GHT OUTER JO lN, ento, ser considerada a primeira tabe la aquela que estiver direita da instruo JOIN. Se especificar LEFT OUTER JOIN, a tabela esquerda ser a primeira. Digamos que, no banco de dados do exemplo, voc tivesse o artista Limp Bizkit na tabela Artist , mas no houvesse nenhum disco na tabela Disc executado por ele. A instruo INNER JOIN mostrada no cdigo a segu ir produziria um conj unto de registros, mas o artista Limp Bizkit no seria mencionado nos resultados. SELECT Artist.ArtistName. D .COT i tle isc FROM D sc INNER JOIN Artist ON (Artist.ArtistID i ORDER BY Artist.ArtistName
=

Disc.ArtistID)

Dia 11

Por outro lado, se voc usasse uma instruo OUTER JOIN como mostro a seguir, o campo Arti stName seria retornado contendo Limp Bi z ki t . J que nenhum registro correspondente seria encontrado na tabela Disc, CoTi t 1e teria um valor llulo para esse registro. SELECT Artist.ArtistName, Oisc.COTitle FROM Disc LE FT OUTER JOIN Artist ON (Artist . ArtistID
=

Disc.ArtistID)

Como voc ViUll0S exemp los, o resultado de uma associao interna pode ser enganoso porque inclui apenas os valores em que uma correspondncia foi encontrada entre as duas tabelas. Mesmo assim, esse tipo de associao adeq uado para a maioria das consultas.

Relacionamentos Muitos-para-Muitos
Para modelar o relacionamento mui tos-para-muitos dos CDs com as categorias, voc tenninou com trs tabelas dist intas: Di sc, Category e uma terceira criada apenas para esse relacionamento, chamada DiscCategory. Para fazer consultas nessas tabelas, ser preciso usar duas associaes~ lima entre Disc e DiscCategory e outra entre DiscCategory e Category. Por exemplo, a instruo SQL para recuperar todos os CDs que foram atribudos categoria Pop mostrada a segu ir: SELECT Disc.COTitle FROM Category INNER JOIN (Disc INNER JOIN OiscCategory ON Disc .DiscID = DiscCategory . DiscID) ON Category.CategoryID = DiscCategory.CategoryIO WHERE Category.Category = "Pop" Quando voc tiver vrias tabelas relacionadas, poder usar instrues de associao aninhadas como as mostradas no cdigo anterior, no qual uma tabela est na verdade sendo associada ao resultado da associao de duas outras.

Integridade Referencial
Nos casos em que existem vrias tabelas, h mais probabi lidade de serem encontradas inconsi stncias. Como di scutimos, se um artista for referenciado por sua identificao em um ou mais registros da tabela Disc, ento voc ter dados inconsistentes se ele for excludo. Para evitar isso, faa com que o banco de dados tenha conhecimento dos vnculos entre suas tabelas defin indo as chaves e o relacionamento (veja a Figura 11.4). Quando o banco de dados tiver inrormaes dos relacionamentos existentes em seu sistema, ele poder garantir sua integridade impedindo a excluso de um registro se esse tiver correspondncias em outras tabelas. No sistema especfico que criamos, ter os relac ionamentos no banco de dados impediria (o banco de dados retornaria um erro) que o usurio exc lusse um registro da tabela Arlisl se a tabela Disc possusse algum registro com a ident ificao desse art ista.

Introduo aos Ba ncos de Dados

301

FIGURA 11 .4 Em seu programa de bal/co de dados. sendo ele o Access 011 o SQL Se/Ter. voc pode criar relacionamenlos para qlle esses possam ler S//(/ integridade garantida.

Criando Chaves Primrias


No exemplo, voc term inou com chaves numricas para todas as tabelas (Arti stID, CategoryID, Di seIO), mas Oque no abordamos a necessidade de obter ou gerar essas chaves sempre que um novo registro for inserido. I-l mu itas maneiras pe las quais possvel man ipul ar esse req uisito: recursos internos do banco de dados, clculo na hora da insero, usar GUIDs em vez de nmeros simples, ou um sistema que gerencie e incremente as chaves chamado gerenciadorde chaves.

Recurso do Banco de Dados

o primeiro mtodo para gerenciar as chaves est embutido em muitos bancos de dados e um
tipo especia l de campo que incrementa automaticamente seu valor quando uma nova Iinha ad icionada. Esses campos so sempre numricos; eles podem ser configurados para acrescentar urna quantidade definida, quase sempre 1, e para iniciar a contagem em um valor especfico, que tambm quase sempre I. Essa uma boa maneira de manipular as chaves porque o banco de dados real izar todo o trabalho, mas, sob certas ci rcunstncias, uma chave de gerao automtica pode causar problemas. Por exemplo, se voc tivesse de adicionar um novo CD coleo e ele fosse de um art ista no existente em seu banco de dados, seriam necessrias duas instrues INSERT - uma na tabela Artist e, em seguida, outra na tabela Disc. Usando as chaves de gerao automtica, no adicionaramos um valor para Art; s t lOna primeira insero; em vez disso, ele seria gerado de modo automtico. Entretanto, na segunda insero (em Disc), precisaramos que o novo valor de Arti stID vinculasse o novo CD ao novo artista. Empregando apenas a SQL, essa identificao no seria retornada. Voc poderia fazer outra consulta no banco de dados, mas teria de usar campos como Art ; stNa me para encontrar os dados novamente, e isso estaria propenso a erro. Essa uma razo pela qual necessrio um mtodo alternativo de obter as chaves; outra razo ser discut ida ainda nesta lio em "Identificadores Exclusivos (GU IDs - Globally Unique Ident ifiers)" .

Dia 11

Chaves Calculadas
Como alternativa s chaves geradas por bancos de dados, voc pode usar as instrues SQL para deterrn inar a prxima identifi cao na seqncia antes de fazer a insero necessria. Isso envol ve o emprego de um tipo especial de operador SQ L chamado operador de agregao, que recu pera um valor calculado com base em todos os campos encontrados por uma clusu la SELECT. H vrios desses operadores de agregao, mas uti li zaremos o chamado de MAX, que retorna para um campo o valor mais alto extrado entre todos os registras selecionados. Para determinar a prxima identificao, voc poderia executar esta instruo (usando a tabela Art ist como exem plo):

SELECT MAX(ArtistID) fROM Artist


Essa instruo retornaria apenas o registro de um campo contendo o valor mais alto relativo s identificaes existentes atualmente na tabela. Adicione um a esse valor, e voc ter a prxima identificao, que ento ser usada em uma insero. Essa abordagem, embora vlida em algumas circunstncias, apresenta dois prob lemas principais. O primeiro ocorre porque mais de um programa poderia estar usando ao mesmo tempo esse ban co de dados - do is ou mais usurios poderiam estar adicionando art istas no mesmo momento. Em uma situao dessas, seria possvel que alguns usurios executassem sua primeira instruo SELECT antes que o usurio anteriortivesse executado sua instruo INSERT, portanto eles teriam obtido o mesmo valor para a identificao. Esse prob lema pode serevitado com o uso de transaes, outro dos conceitos de bancos de dados que no abordarei nesta lio. O segundo problema no pode ser ev itado com tanta faci lidade. Ele ocorre quando um ou mais registros do fi nal da tabela (as ident ificaes mais altas) so excl udos. Q ualquer registro novo primeiro selecionar MAX (A r t i s tI O) e obter os valores de identificao anteriormente atribu dos aos registros exc ludos. Em um sistema em que se pretende que os valores das identificaes sejam exclusivos, ter registras diferentes compartilhando a mesma identificao em momentos distintos no muito aconselhvel.

Identificadores Exclusivos (GUIOs - Globallv Unique Identifiersl


Em algumas sit uaes, uma chave crescente - criada pe lo banco de dados ou por meio de seus prprios clcu los - no adequada. Um exemplo em que isso acontece seria quando temos ban cos de dados distribudos, nos qua is h vrias cpias do banco de dados e essas so regularmente unificadas. As inseres podem ocorrer em quaisquer das cpias. Se voc usasse umachave com o recurso incremental, ento, sempre que as inseres ocorressem em mais de um local, seriam produzidas identificaes dupli cadas. Uma soluo seria empregar alguma forma de identifica o gerada ao acaso, aleatria o suficiente para que pudesse ser criada em vrios locais com pou ca ou nenhuma chance de ser duplicada. O mtodo em geral aceito para a criao de identi fi caes aleatrias a utilizao de um GU IO (Globally Unique ldent ifier), um nmero

Introduo aos Bancos de Dados

303

aleatrio de 128 bits gerado pelo banco de dados ou pelo sistema operacional. O GU 1D aleatrio o bastante para que seja usado em um cenrio de bancos de dados distri budos.

Gerenciador de Chaves

o lt imo esq uema para a criao de identificaes que discuti rei adequado para sistemas que
no so distribudos (veja a seo anterior sobre os GU IDs), mas para os quais voc precisar realmente obter a chave no momento exato da insero do registro. (Isso torna problemtica urna chave gerada pelo banco de dados.) Esse mtodo, chamado sistema gerenciador de chaves, usa uma tabela ad iciona l em seu banco de dados para armazenar os valores atualmente ma is a ltos das identificaes de todas as outras tabelas (veja a Figura 11 .5).

FIGURA 11 .5

O mtodo urili:ado pelo geretlciador de cllm'es para ger-Ias reqller 1111/(/ tabela adicional que comenlla o Wllol" mais alIo de idemificao de cada tabela que usar esse mlOdo.

Para obter novas identificaes usando esse mtodo, voc ter de procurar na tabela do gerenciador de chaves o valor da identificao aluaI, acrescentar um a unidade a ele, inserir seu novo registro e aluali zar essa tabela com o valor da ident ificao incrementado. As quatro aes separadas significam que esse mtodo compartilha o mesmo problema da existncia de vrios usurios encontrado na chave calculada. O problema de reutilizar as chaves dev ido s excluses evitado porque o valor da identificao armazenado no gerenciador de chaves nunca decrescido, e as identificaes nunca so reuti lizadas.

Procedimentos Armazenados e Chaves de Gerao Automtica


Enq uant o descrevia o tipo de dado de incremento automtico como o po para a criao de chaves, mencionei que difcil obter a chave depois de executada uma instru o INSERT, e que essa uma das razes principais para escolher um mtodo alternativo de gerao de chaves. Embora esses coment rios anteriores sejam realmente procedentes, h um mtodo em gera l usado para obteno de uma chave gerada pelo sistema depo is de uma insero. Esse mtodo s estar disponvel se voc empregar um procedimento armazenado para inserir seus registras, o que no sera abordado com detalhes neste livro. Se quiser obter mais informaes sobre esse mtodo de insero de registros e obteno da nova identificao gerada, pesquise a biblioteca do MSDN.

304

Dia 11

Criando o Banco de Dados de Exemplo


Para os exemplos do restante desta lio e para o cd igo que voc ir escrever no Dia 12, "A ces-

sando Dados com a Plataforma .NET", ser preciso sua prpria cpia do banco de dados do exemplo. Embora o processo de criao do banco de dados possa ser percorrido manualmente e essa no uma idia ruim se os bancos de dados forem um assunto novo para voc - , tentarei tornar isso um pouco mais fcil fornecendo trs opes d iferentes de banco de dados que podero ser con figuradas em sua mquina.
As trs verses foram projetadas para ser usadas em trs sistemas de bancos de dados diferentes: Microsoft SQL Server (2000), Microsoft Database Engine (MSDE 2000) ou Microsoft Access. O SQL Server e o MSDE daro suporte verso de download do mesmo arquivo, permit indo que seja criada apenas uma configurao para os dois sistemas . Todas essas opes funcionaro , mas o melhor produto para se ter a fim de atender finalidade atual e para a prti ca futura o SQL Server. Ele um servidor popular de banco de dados e provavelmente ser seu instrumento de trabalho quando comear a desenvolver sistemas reais. O MSDE gratui to, o que um timo preo por um sistema de banco de dados bem completo, mas fornecer s algumas ferramentas para o trabalho com dados externos a seu programa. O Access vem com vrias verses diferentes do Office 2000/XP e disponibiliza vrias ferramentas para a visualizao de dados, criao e alterao de tabelas, e at para a construo de suas instrues SQL (o Query Builder), portanto no ser uma opo ruim se voc j o ti ver.
Descubra que produto voc tem e, em seguida, siga a direo apropriada nas prximas sees. Se no t iver o Access, o MSDE ou o SQL Server, poder simplesmente fazer O download do arquivo .mdb (parte do Access abordada na prxima seo) e us-lo sem instalar o restante do so fiware do banco de dados. CO . mdf e CD.ldf Juntos, esses dois arquivos contm todos os dados que sero usados com o SQL Server ou o MSDE. AttachDB . vbs Antes que os arquivos mdf e Idf possam ser usados a part ir de seu cd i go, esse arquivo VBScript ( . vbs) deve ser executado para inclu-los em seu SQL Server ou no MSDE local. CO.mdb MSDE. O banco de dados Access, que voc pode usar se no tiver o SQL Server ou o

TestDB .vb O exemp lo de um programa no Visual Basic .NET que voc pode usar para testar a configurao de seu banco de dados. Orders. txt Este arquivo usado no Exerccio 2 no fim desta lio.

Access 2000 ou Access 2002


Para os usurios que possuem o Access, ou que no t iverem nenhum sistema de banco de dados, no ser necessrio criar uma configurao; voc s precisar saber o caminho para o arquivo . mdb que usar nos exemplos. Se quiser empregar o Access para trabalhar com os dados, o n ico

Introduo aos Ba ncos de Dados

problema que pode encontrar ser se tiver uma verso diferente daquela em que o exemplo foi criado. Se esse for o caso, por padro, s poder visualizar e no ed itar as diversas tabelas e outros objetos de seu banco de dados por meio do Access. Se quiser, util ize as ferramentas de converso de banco de dados do Access a fim de atual izar o banco de dados para a mesma verso que voc estiver executando.

MSDE e SQL Server 2000


Tanto para o MSDE quanto para o SQL Server, os dois arqu ivos (cd.mdf e cd.ldf) representam , um banco de dados isolado. E possvel incluir novamente esse banco de dados na sua cpia do SQL ou do MSDE. O cdigo fornec ido no arquivo de script AttachOB . vbs vincular esses dois arqui vos a seu sistema de banco de dados. Embora o arqui vo deva funcionar 'como est' para a maioria das pessoas, na verdade ele contm a identificao de usurio e a senha do administrador do sistema em seu cdigo, tendo como padro as configuraes sa e uma senha em branco. Se seu sistema no tiver uma sen ha em branco para a conta sa, voc precisar editar esse arqu ivo. Esse arquivo de script tambm foi projetado para ser executado (com um clique duplo nele) no mesmo diretrio dos arqui vos . mdf e . ldf e na mesma mquina de seu sistema de banco de dados. V em frente e d um clique duplo nesse arquivo, depoi s que tiver feito todas as alteraes necessrias na identificao do usurio e na senha armazenadas no cdigo.

Testando a Configurao com System.Data


Agora que voc fez o download e configurou os dados de seu exemplo, poder criar um pequeno aplicativo de console no Visual Basic .N ET para confirmar se tudo func iona como deveria. Para tanto, ser preciso usar o espao de nome System.Data com o .NET Framcwork. Essas classes contm tudo que necessrio para acessar dados em quase todos os tipos de banco de dados e so divididas em duas reas princ ipais - as classes projetadas para acessar o Microsoft SQL Server (incluindo o MSDE) e as que acessam qua lquer banco de dados que possua um driver de OLE DB (o que significa quase todos os bancos de dados). No me deterei muito em detalhes sobre eomoessas classes funcionam. Em vez disso, o exemplo a segu ir apenas testar se seu banco de dados est configurado corretamente antes de passannos para a prxima lio, na qual me aprofundarei no acesso aos dados por me io da platafom1a .NET. O cdigo que ser usado para testar o banco de dados estabe lecer uma conexo com ele empregando o conjunto de c lasses do OLE DB do espao de nome System.Data . OLEOB. As classes System . Data . Sql Cl ient podem ser utilizadas se voc tiver o SQL Server ou o MSDE, mas, j que o Access tambm pode estar sendo usado, ser mais simples utilizar as classes que podem acessar os dois tipos de bancos de dados. Quando empregar um dos mtodos de conexo com o banco de dados, o trecho-chave da infonnao o que chamado deslring de conexo, um texto que fornece todas as informaes necessrias para a conexo com seu banco de dados. Esse o nico trecho do cd igo que ter de ser alterado para que se encai xe em sua configurao especfi-

Dia 11

ca. A Listagem 11.1 contm o procedimento completo, e fornecerei informaes adicionais so bre os valores da string de conexo depois desta listagem. LISTAGEM 11 .1 TextOB.vb

1 'Substitua a string de conexo pelo valor apropriado 2 ' sua configurao (explicado nes ta lio) 3 'e, em seguida, compile com : 4 '''vbc jr:System.OLL jr:System.Data.DLL Tes tOB.vb" 5 Imports System 6 Imports System . Data 7 Module TestDB 8 Sub Main() Dim sConnectionString, sSQL As String 9 sConnect i onString " <consulte abaixo> 10
11

12
13 14 15

sSQL = "SELECT C OTit le FRDM Disc ORDER BY ArtistID Ase" O connCO As New OleDb .OleDbConnection(sConnectionSt ring) im D cmdCO As New OleOb.OleObCommand(sSQL, connCO) im Oim drCD As OleOb.OleDbDataReader connCO . Open () drCO = cmdCO.ExecuteReader() Do While drCO.Read() Conso I e. Wri teL i ne (drCO. I teme "CDTi t I e") ) Loop

16
17

18

19

20
21 22

23 drCD.C loseO 24 connCO.CloseO 25 Conso l e. ReadLineO 26 End Sub 27 End Module Se voc usar o banco de dados do Access (CD.mdb), sua string de conexo incluir o cam inho completo para esse arqu ivo como descrito a seguir: Provider=Microsoft.Jet.OLEDB.4.0Data Source=c:\chapterll\cd.mdb Certifique-se de alterar essa string de conexo a fim de indicar o caminho apropriado para CD.mdb em sua mquina. Se, por outro lado, voc usar SQL Server ou MSDE, e j tiver executado AttachOB. vbs com sucesso, ento, a string a segu ir deve funcionar em sua mquina: Provider=SQLOLEDB .lUser ID=saInitial Catalog=CDData Source=(local)

Introduo aos Bancos de Dados

Esta string de conexo SQL (que di vid ida em duas linhas neste livro, mas deve ter apenas uma linha em seu cd igo) pressupe uma senha em branco para a conta 5a, podendo ser alterada para que especi fiqu e uma senha se necessrio: Provider=SQLOLEOB.l;User IO=sa ;Password=peanutbutter; _ ln i tia1 Cata1og=CD ;Oata Source=(local) Insira a string de conexo apropriada na Listagem I I. I. Observe que esse cdigo est includo, como testdb. vb, na pasta Day I I que voc descarregou anteriormente do site do livro na Web. Agora compile o cdigo como foi orientado nos comentrios do incio do arquivo, e voc dever ver um arquivo. exe que poder usar para testar sua conexo com o banco de dados. Se tudo der certo, voc deve obter o segu inte resultado:
RESULTADO

Left Of The Midd le the tragica 11 y hip Road Apples Oay for Ni ght Phantom Power Brand New Oay Mercury Falling Fields of Go1d Classic Queen 20 Greatest Chri5tmas Songs Gordon Born on a Pirate Sh ip Maroon Tail 5 Fi recracker Janet The Ve lvet Rope Design Of A Decade 1986-1 996 Mad Season Music

Com esse resultado, voc ler criado um aplicativo que estabelece com sucesso uma conexo com o banco de dados e estar pronto para passar para tpicos mais avanados sobre bancos de dados.

Resumo
Esta lio apresentou uma introduo aos bancos de dados e sua funo no desenvolvimento de aplicativos .NET. Ao dar cont inuidade na criao de sistemas no Visual Basic .NET, voc em geral ir usar um banco de dados, independentemente do segmento empresarial para o qual desenvolver seus programas. Com freqncia escrever programas que empregaro um banco de dados j existente.

Di a 11

s vezes, seu trabal ho exigir que voc mesmo projete e implemente esse banco de dados, uma tarefa que pode ser bem complexa de realizar corretamente. Na lio seguinte, continuaremos a trabalhar com bancos de dados, passando da teoria diretamcnte para a prtica escrevendo programas que lIsam as classes $ystem .Oata.

P&R
P Nesta lio, voc mencionou trs tipos diferentes d e bancos de dados, mas os bancos de dados da Microsoft so o nico tipo com o qual posso me conectar? R Abso lutamente no. Qualquer banco de dados no qual voc tenha um driverdo OLE DB (ou do ODBC) estar disponvel para conexo com as classes $ystem.Oata.OleOB. Se voc no tiver um provedor do OLE DB, mas possui r um driver do OOBC, tambm poder se conectar passando por uma camada ad iciona l e usando o provedor do OLE DB para as conexes do ODBC. Para obter mais informaes sobre o OLE DB, acesse http://www . microsoft . com/data . P No banco de dados dos C Ds, voc removeu as informaes sobre o artista da tabela Disc, mas, em seguida, teve de retorn-Ias em quase todas as sadas usando uma associao em s ua instruo SQL. No seria melhor apenas manter uma cpia das informaes sobre o artista em cada registro de Disc? R O annazenamento de dados em mais de um local signi fica que, para evitar inconsistncias, voc ter de se cert ificar de alualizar todos os locais possveis ao mesmo tempo. Os benefcios conseguidos evitando a associao em suas consu ltas sero perd idos pe lo trabalho adicional necessri o sempre que atualizar os registros na tabela Disc ou na Artisl. P A XML foi projetada para a rmazenar dados. Ela substitui os bl1DCOS de dados? R A XML uma maneira de armazenar dados e, embora seja certamente lima subst ituta para alguns sistemas de bancos de dados no relacionais, ela no substitui sistemas de bancos de dados relacionais como o SQL Server. A XM L ser usada com mais freq ncia como uma maneira de intercambiar dados entre sistemas e representar a sada gerada por seus sistemas tradic ionais de banco de dados.

Workshop

o Workshop fo i planejado para aj ud-lo a antecipar possveis dvidas, revisara quej aprendeu
e comear a pensar em como colocar seu conheci mento em prtica. As respostas do teste esto no Apndice A, "Respostas dos Testes/Exerccios".

Introduo aos Ba ncos de Dados

309

Teste
I. Em uma tabela de banco de dados, um ou mais campos so usados para identificarde ma nei ra exclusiva cada regi stro. Como esses campos, ou campo, so chamados? 2. Dadas as duas tabelas mostradas na Fig ura 11.6, qual seria o resu ltado da instruo SQL que vemos aqui ?

SELECT Make.MakeName. Model.Mode lName FROM Make LEFT OUTER JOIN Model ON Make.MakeID '" Model .Make

FIGURA 11 .6

Make MakelD

Exibio das labe/as referemes li perg1ll1la 2 do Tesle.

2 3 4 5

MakeName Ford Audi BMW Pontiac Toyota

3. Examinando novamente as tabelas da Figura 11.6, qual seria a sada desta instruo

SQL?

SElECT Make.MakeName. Model.Mode lName FROM Make INNER JOIN Mode l ON Make . MakeI O '" Model.Make

Exerccios
I. Se voc quisesse expandir sua biblioteca de registro de CDs para que armazenasse a cole o de CDs de mais de um usurio, como alteraria seu banco de dados? Considere que pre cisaria registrar infonnaes sobre os prprios usurios e sobre a propriedade dos discos. 2. Dado o conjunto de informaes cont ido em Orders. txt, como voc projetaria um banco de dados para annazenar as mesmas informaes?

SEMANA

DIA
Acessando Dados com a Plataforma .NET
Na lio anterior apresentei uma introduo aos bancos de dados e mostrei como eles podem ser usados em vrios aplicativos. Nesta li o, exami naremos como seus programas trabalharo com dados do Visual Bas ic .NET. Esta lio inc lu ir:

Uma viso geral da arquitetura de acesso a dados da plataforma .NET. Conexo a um banco de dados.
Execuo de instrues SQL.

O uso da vincu lao de dados com os fonnul rios da Web e do Windows.

Alm desses tpicos, no fina l da lio voc aprender alguns dos conceitos e tcnicas mais avan~ ados para o trabal ho com bancos de dados da plataforma .NET.

Uma Viso Geral do Acesso aos Dados na Plataforma .NET


Os bancos de dados so usados em quase todos os aplicativos empresariais que j foram criados e em muitos sistemas pessoais e de microcomputadores. Eles j eram encontrados em uma dessas formas mesmo antes da criao do Visual Basic. Esse longo histrico dos bancos de dados e de seu uso em programas de computador assegurou que os programas do Visual Basic j acessassem dados e bancos de dados desde suas pri meiras verses. Da mesma manei ra, a tecnologia

Dia 12

de acesso a dados do Visual Basic evoluiu com o passar do tem po, passando por muitas verses diferentes antes que a plataforma .NET entrasse em cena.

o ADO e o OlEDB
No obteramos grandes vantagens percorrendo a histria completa que envo lve o Visual Basic e o acesso a dados, mas vale a pena fazer um exame resumido da tecnologia mais recente de acesso a dados (anterior platafOlma .NET). Antes da existncia dessa platafonna era extensivamente usada pelos programadores do Visual Basic 6.0 uma biblioteca de acesso a dados chamada ActiveX Data Objects (ADO), considerada o principal meio de conectar os sistemas do Visual Basic ou do Visual Basic for Applications (VBA) a quase todos os bancos de dados de back-end. O ADO era uma bib lioteca do COM que encapsulava a funcional idade da tecnologia real de acesso a dados, o OlE DB, e que t inha sido projetada para ser uma maneira fcil de trabalhar com essa nova tecno logia. Para evitar a necessidade de se criar um cdigo para cada banco de dados com o qual voc pudesse se deparar, o ADOIOLEDB usava Lima abordagem seme lhante ao ODBe (http: //www.microsoft . comjdatajodbc), fornecendo uma nica interface de programao independente do banco de dados e, em segu ida, usando drivers especficos de banco de dados para trabalhar com cada um deles . Esse mesmo conce ito j tinha se tornado popular e quase todo sistema de banco de dados possu a um driver de OOBe disponvel. O ADO tambm requer drivers para funcionar, embora eles sej am conhecidos como provedores de OlEDB, e mu itos dos bancos de dados mais conhecidos disponibilizam o(s) provedor(es) necessrio(s). Mas j que o ADO mais novo do que o OOBe, no existem tantos drivers desse tipo. No entanto, possuir apenas o driver do ODBe j suficiente, j que o ADO vem com um provedor de OlEDB para os drivers de ODBe. Por meio da combinao dos provedores de OlEDB disponveis com todos os drivers de OOBe forn ecidos, o ADO poderia ser usado para estabelecer uma conexo com quase todos os bancos de dados existentes. A arquitetura integral do ADO fo i estabelec ida no fato de que o cdigo que voc escrevesse s trabalharia com o ADO, e no com o sistema de banco de dados, porm, o ADO usaria um provedor de OlEDB para converter e transferir suas solicitaes para o sistema de banco de dados (veja a Figura 12. 1). O ADO expunha vrios objetos-chave que representavam a conexo com O banco de dados, os comandos relacionados ao banco de dados e os resultados obtidos nas consu ltas - todos projetados para ser fcei s de usar como parte de um programa do Visual Basic.

ADO.NET
O ADO.NET a tecnologia de acesso a dados que faz parte do .NET Framework. Ele ser sua maneira de obter dados quando programar no Visual Basic.NET e representa o estgio posterior ao ADO/OLEDR A tecno logia OLEDB s ubjacente ainda permanece em seu lugar, e os provedores de OL EDB ainda so o principal mtodo pelo qual o ADO.NET se comunica com sistemas especficos de banco de dados, mas acima dessa camada h muito pouca semelhana com os objetos anteriores do ADO.

Acessando Dados co m a Pl atafo rma .N ET

3 13

FIGURA 12.1

O ADO foi projetado


COIIIO 11111(1 c all1ada

Aplicativos do Visual Basic

acima do OI.EDB. qlle IIsa/anto dril'crs de OLEDR q//all/o de DOBe para se


COl/cclar COIII os bal/cos de dados.

'~

j"
ActiveX Data Objects (ADO)

\.

'(

.7
Provedo res de aLE DB

0
pJ:
Dados

Oraele

SybaS6

~
Dados

Dados

Na plataforma .NET, o acesso a banco de dados manipulado pelas classes existentes no espao de nome System .oata. Esse espao de nome divid ido em duas reas distintas: o conjunto de classes System.oata.oleoB e as classes System.oata.SQLClient. O primei ro conj unto, System. Data .01 eoB, foi projetado para permitir que voc se conecte a qualquer banco de dados para o qual possua um provedor de OLEDB ou (por meio do provedor de OLEDB para o ODBC) um driver de ODSe e tecnicamente o equivalente camada de acesso a dados do ADO original. A segunda rea, System. oata . SQLCl ient, foi projetada para trabalhar apenas com o Microsoft SQL Server, mas fornece um conjunto de recursos seme lhante s classes OLEDS. A arqui tetu ra geral das classes de acesso da platafonna .NET mostrada na Figura 12.2, il ustrando os dois sistemas principais. Nos exemplos desta li o, voc aprender a trabalhar tanto com bancos de dados OLEDS quanto com sistemas do SQL Server ou do MSDE. Mesmo se s tivera SQL Server, ainda poder testar os dois mtodos porque possve l se conectar com o SQL Server por meio de seu provcdor dc OLEDS ou com as novas classes da plataforma .NET. Alm das classes SQLCl i ent e OLEOB para acessar os bancos de dados, Sys tem. Da ta tambm inclui vrias outras classes projetadas para trabalhar com os dados independentemente de sua fonte especifica. Tambm exam inaremos essas out ras classes, principalmente oataSet, como parte dos exemp los desta lio.

314

Dia 12
System.Data
(contm objatas para manipu lao de dados genricos)

o ADo.NET
dil'idido em dilas secs principais.

FIGUR A 12.2

OLED/3 e SQL. que permiTem q/le voc se


cOl/eele a lili/a

ampla

I'oriedade de fomes de dados.

Svstem.Dat3 .SQLClient (contm objatas espEtel/icos

para conexes com o


Microsoft SQL Server)

System.Oata.OLEOB

,-- ---- -- --

, , , , , , , , ,

(contm objatos especificas para conexes por meio de

provedores de Ol EOB)

System.Data.OOBC
(contm objatas especificos

para conexes por meio


de drivers de OlEOB)

Como na verso Beta 2. nlio inclulda no Visual Studio .NET mas disponvel como download da Web, (I ADO.NET dividido

em duas sees principais. OlEOB e SOL, que permitem que


voc S8 conecte II uma ampla variedade de fontes de dados.

Tarefas-padro dos Bancos de Dados


Em vez de abordar as classes System.Data em um formato referenc ial que examine cada classe, esta seo enfocar as tarefas que normalmente so executadas. Essas tarefas, como a conexo a um banco de dados, a execuo de uma instruo SQL ou a recuperao de dados, fornecero um ponto de partida natural para a discusso dos objetos subjacentes.

Conectando-se ao Banco de Dados


Antes que voc possa comear a trabalhar com algum dado, precisar estabelecer uma conexo. A conexo representa e contm todas as configuraes necessrias para que se u banco de dados seja encontrado e acessado. Em verses anteriores do ADO, ela envolvia dois itens principais, o objeto da eonex,10 e uma string de conexo. A string de conexo, uma linha de texto que inclui algumas Oll todas as informaes necessrias para o acesso a seu banco de dados, ainda a chave para configurar uma conexo de banco de dados no ADO.NET, em bora agora existam do is objetos diferentes de conexo (um para o OLEDB e outro para o SQL Server). Antes de comearmos a codificar, devemos obter a string apropriada de conexo com o seu banco de dados. Mesmo sendo apenas um valor textual e podendo, portanto, ser criado manualmente, a manei ra mais fci l de obter uma string correta usar um pouco de astucia.

Acessando Dados co m a Pl atafo rma .N ET

3 15

Apenas por ter o ADO instalado em seu computador- e ele est includo como parte da inst a l a~ o do .NET Framework, portanto voc o tem - , um tipo especial de arqu ivo, o Microsoft Data Link, fo i registrado. Os arqu ivos desse tipo foram projetados para conter infonnaes sobre a conexo com o banco de dados e se voc criar um vazio, ento, uma interface grfi ca com o usurio adequada ser fornecida para a gerao e edio de todos os detalhes da conexo. Depois de ter trabalhado com essa interface e selec ionado as opes apropriadas para seu banco de dados, o arquivo ter a stri ng de conexo que poder ser copiada e usada em seu aplicativo do Vi~ sua i Basic .NET. Siga estas etapas para empregar esse artifc io: I. Crie um arquivo Microsoft Data Link vazio por meio de um novo arquivo de texto (d um clique com o boto direito do mouse na rea de trabalho e selecione New, Text Docu~ ment no menu que aparecer) e renomeie~o com um ttu lo que possua uma extenso. udl (New. udl seria perfe ito). Isso ser difcil de fazer se as extenses de arquivo no est ive~ rem vi sve is para que possam ser at ivadas pelo pa inel de cont role Folder Options. Voc deve ficar atento para o cone de alterao do arqu ivo depo is que tiver mudado sua exten ~ so, indicando seu novo tipo de arquivo . 2. D um cl ique duplo no arquivo novo, e uma caixa de dilogo aparecer com um conju nto de quatro guias para a criao e ed io das informaes sobre a conexo com seu banco de dados. 3. Na caixa de dilogo que acabou de ser aberta (veja a Figura 12.3), comece com a p r ime i ~ ra guia, Provi der, e configu re as informaes corretas para seu banco de dados : Para o arquivo CD .mdb do banco de dados do Access, selecione o provedor Microsoft Jet4.0. Tanto para o banco de dados do MSDE quanto para o do SQL Server, selecione Mi~ crosoft OLE DB Provider for SQL Server.

FIGURA 12.3

- I - l - I ..

fi caixa de dilogo de propriedades do Data Lillk permite que I'oc cO/ifigure graficamellfe os detalhes de S/I(1 conexo.

..." I

.. I ""'"'"

4. Na gu ia Connection, voc ver opes diferentes dependendo de qua l dos dois provedores disponveis selecionou na etapa anterior. Para o Access, s ser preciso inserir o caminho para O arquivo CO.mdb (veja a Figura 12.4).

316

Dia 12

FIGURA 12.4 A gllia COllneclioll

ser dijerellfe dependendo do


prol'edor qlle voc

seleciOl/or: as opes para o Acce~'s


incluem o camillho
parQ
(I

arq/lh'o do

banco de dados.

Para o SQL, voc precisa informar o nome do servidor ou (loca 1) se ele estiver no mesmo computador, a ident ificao e a senha do usurio e com que banco de dados especifico (CD neste caso) quer se conectar. A Figura 12.5 mostra a guia Connection configurada para um banco de dados de um servidor SQL local que usa 'sa' como sua identificao de usurio e urna senha que foi inserida mas no pode ser lida .

FIGURA 12.5

Para o SOL SerreI". os deralhes da


cOI/exilo incluem o IIOII/e do sel1'idol',

do bal/co de dados especifico e a idenlifica~:iio e senha de usurio necessrias para a


cOl/exo.

5. Embora haja mais duas guias, voc conclu iu a digitao de informaes . D um cl ique no boto Test Conneclion para ver se as informaes que inseriu esto corretas. Se o teste for bem-sucedido, ento, feche a ca ixa de dilogo dando um clique em O K. Agora, use o Bloco de notas ou algum outro editor de textos para abrir o arquivo. udl de modo que possa examinar seu contedo. O conledo exalo depender das informaes que foram inseridas na caixa de dilogo, mas devemos ver um texto como o desc rito a segui r:

Acessando Dados com a Plataform a .N ET [oledb] : Everything after this line is an OLE DB initstring Provider=Microsof t.Jet .OlEDB.4 . 0: Data Source=C:\CD.mdb: Persist Security Info=False

3 17

A ltima li nha desse arquivo, que comea em Provi der, uma string de conexo do OLEOB, que o que voc precisar usar em seu programa do Visual Basic .NET. Se estiver utilizando um banco de dados do Access, ento, a string anterior dever ser a mesma exceto pelo caminho. O contedo de um arquivo .ud l con figurado para o SQL Server mostrado no exemplo a segu ir, mas pode ser preciso alterar ao valores da identificao do usurio (use r i d), da senha (pas sword) e da fon te de dados (Data Source) para que esta string funcione em seu sistema: [oledb] : Eve rything after this line is an OlE DB initstring Provider=SQlOLEDB .I: Password=password; Persist Security Info=True User 10=sa ; 1nitial Catalog=CO Oata Source=(loca l) Observe que a ltima linha na verdade uma longa linha de texto que foi divid ida em vrias outras para que a clareza fosse mantida. Depois que voc ti ver sua string de conexo, e que souber que ela est correta porque o boto Test Connection executou um teste bem-sucedido com base nessas informaes, poder comear a escrever algum cdigo para seu banco de dados. Para gerar uma conexo, voc precisa criar uma nova instncia do objeto System . Data . OleDB .OlEOBConnecti on ou de System. Data. Sql Cl ient. SQLConnect ion . Se estiver se conectando com o MSDE ou com o SQL Server, ento, a string de conexo precisar ser um pouco alterada antes que possamos us-la com o objeto SQLConnection. A string utilizada com o OleDB e, portanto, com qualquer tipo de banco de dados, o que significa que ela apresenta uma seo Provi der. A especificao de um provedor no necessria, e deve ser remov ida quando houver uma conexo atravs das classes SQL. A Listagem 12.1 cria uma nova instncia de OLEOBConnect i on e fornece a string de conexo no construtor, produzindo um objelo Connecti on quej est con fi gurado com todas as informaes que voc precisa para se comunicar com seu banco de dados. LISTAGEM 12.1 Uma String de Conexo

I Modu le ModuleI 2 Private Const sConnection As String = "Provider=SQLOLEDB.l " & "Password=password;" &_ 3 4 "Persist SecurHy Info=True " & 5 "User 1D=sa'" &6 "InHial Catalog=CD;" & "Data Source=(local)" 7

Dia 12 LISTAGEM 12.1


8

Uma String de Conexo (continuao)

g Sub Main() 10 Dim objConn As New System . Data.OleDb.OleDbConnection(sConnection) 11 End Sub 12 End Module Nesse momento, voc criou o objeto de conexo e o carregou com os detalhes de seu sistema, mas nenhuma comunicao real ocorreu com o serv idor do banco de dados. Para estabelecer o vnculo com o banco de dados, preciso chamar o mtodo Open do objeto OleDBConnecti on: objConn .Open() Essa linha em particu lar a primeira que causar uma interao com seu banco de dados, e voc deve inseri-l a em lima estrutura de tratamento de erros. A Listagem 12.2 mostra um exemplo completo do estabeleci mento de uma conexo com um tratamento simples de erros. LISTAGEM 12.2 Abr i ndo uma Conexo

1 Modu le Modu l eI 2 Private Const sConnection As String = "Provider=SQLOLEDB.l ;" &_ 3 "Password=password;" &_ 4 "Persist Secu rHy Info=True;" & 5 "Use r ID=sa'" &"InHial Catalog=CD ; " & 6 "Oata Source=(local)" 7 Sub Ma in() 8 Dim ob j Conn As New System . Data.OleDb .OleDbConnection(sConnection) 9

10

Try

11 ob jConn.Open() 12 Catc h myException As System.Exception 13 Conso le.Write Line(myException.Message) 14 End Try 15 Console . ReadLine() 16 End Sub 17 End M odule Para obter mai s infonnaes sobre o tratamento de erros, veja o Dia 6, "O Que Fazer Quando Programas Bons Apresentam Problemas e para Se Certificar de Que Isso No Acontea". Se voc quiser testar o cdigo por sua prpria conta, apenas crie um novo aplicativo do console lIsando o Visual Basic .NET e insira esse cdigo em M l el. vb. Lembre-se de substituir Ovalor odu de sConnect ion na Listagem 12.2 pela string que criou anteriormente nesta lio. Para ficar ainda mais di vert ido, lente alterar alguns valores da string de conexo, como a senha, para fazer

Acessando Dados com a Plataforma .NET

3 19

com que a tentativa de conexo falhe. Seu tratamento de erros deve produzir uma linha de sada adequada mostrando o que houve de errado em seu programa. Para essa tarefa especfica, abrir uma conexo, as classes SQLCl ient podero ser usadas com apenas algumas pequenas alteraes. Primeiro, remova a seo Provi der de sua string de conexo e, em seguida, altere sua dec larao de objConn para que se refira ao objeto System.Data.SQLCl ient.SQLConnect i on em vez da classe OLEDS. A Listagem 12.3 mostra o cdigo completo, que produz essencialmente o mesmo resu ltado.
LISTAGEM

12.3

O Tratamento de Erros Essencial Quando Se Lida com Bancos de Oados

1 Imports System 2 Module ModuleI 3 Private Const sConnection As String sConnection" "Password"password;" & 4 5 "Persist Security Info'"'"True ; " & 6 "User ID=sa;" & 7 "Initial Catalog"CD;" & 8 "Da ta Sou rce" (loca 1)" 9 Sub Main() 10 Dim ob j Conn As New Data.SqlClient . SqlConnection(sConnection) 11 Try objConn.Open() 12 Catch myException As Exception 13 14 Console .Wri teLine(myException .Message) End Try 15 Console.ReadLine() 16
17
Eod Sub

18 End Module Estabelecer urna conexo ser uma etapa inicial com um, mas sozinha ela no particularrnente til; voc precisar de alguns outros objetos de banco de dados para comear a trabalhar com os dados.

Executando uma Instruo SQL


Agora que voc tem uma conexo estabelecida, com certeza desejar ter a capacidade de adicionar, excluir, alterar e recuperar registros. Para conseguir realizar qualquer uma dessas tarefas, voc poder usar um objeto de comando (SQLCorrmand ou 01 eDBConmand) para representar c, em seguida, executar uma instruo SQL. Antes de poder empregar um objeto de comando, precisar da instruo SQL que quer executar e de um objeto de conexo (SQLConnection ou 01 eDBConnection). O objeto de conexo no precisa ser aberto quando o objeto de comando estiver sendo criado, mas ter de ser antes da execuo efetiva do comando. Se tivermos nossa instruo SQL

Dia 12

e nossa conexo, ento, tudo que precisamos criar uma nova instncia do tipo apropriado de objeto de comando. Temos a opo de passar a instruo SQL e o objeto de conexo para o construtor quando criarmos o objeto (veja a Listagem 12.4) ou confi gur-los depois do fato (veja a Listagem 12.5).
LISTAGEM 12.4

Executando Consultas no Banco de Dados

1 Modu le Modu l eI 2 Private Const sConnection As String = "Provider=SQLOLEDB.l;" & 3 "Password=;" &_ "User lO=sa;" & 4 "Initial Catalog=CDj" & 5 "Data Source=(local)" 6 7 Sub Main() 8 Dim sSQL As String 9 sSQL = "INSERT INTO CATEGORY (CategorylO , Category)" & 10 "VALUES (7 , 'El ectronic')" 11 Dim objConn As New _ 12 System.Oata.OleOb.OleObConnection(sConnection) 13 Oim objCmd As New _ 14 System.Oata .OleDb.OleDbCommand(sSQL, objConn) 15 Try 16 objConn.Open{) 17 Catch myException As System.Exception 18 Console . Wri teL i ne (myExcept i on. Message) 19 End Try
20

21 22 25 26 27 28 29 30 31 32 33

Console.Wrlte("Pressione Return para executar a consulta: (O}" , sSQL) Console.ReadLine() If objConn.State = ConnectionState.Open Then Try objCmd . Execu teNonQuery () Catch myException As System.Exception Conso 1e. Wri teL i ne (myExcept i on. Message) Console.ReadLineO End Try End If

34
35 End Sub 36 End Module

Acessando Dados co m a Pl atafo rma .N ET

321

LISTAGEM 12.5

Configurando as Propriedades Individualmente

l 1 Dim objCmd As New O eDbCommand() 2 objCmd . Connect i on = objConn 3 objCmd.CommandText = s5QL A execuo da inst ruo INSERT cfetuada pelo mtodo ExecuteNonQuery do objeto de comando (l inha 13), mas esse mtodo fo i projetado para ser usado apenas com os comandos da SQL que no retornem linhas.

Recuperando Dados
Se voc qu iser executar uma consulta SQL que retorne linhas de dados, como SELECT, ento, ter de usar o mtodo ExecuteReader. Esse mtodo existe nas duas variaes dos objetos leitores e retorna 01 eDBDataReader ou SQLDataReader, o que for mais apropriado. Depois que o objeto leitor tive r sido retornado, poder ser empregado na execuo de um lao pelos dados para recuperar os va lores de alguns ou todos os campos e linhas no resultado de sua consulta. O objeto leitor possui muitos mtodos e propriedades, mas os membros-chave so Read( ) e os mtodos de recuperao de conj untos de dados GetS t ri n9, GetDoub 1e, GetDa te Ti me alm de outros, todos utilizando um nmero ordi nal para indicar de que campo devem retornar seus dados.
O mtodo Read avana o leitor de dados para o prx imo registro e retorna um valor booleano indicando se alguma outra linha est disponvel. Depois que voc estiver em um registro (depois que tiver chamado Read ( ), poder usar os vrios mtodos Get<t ipo de dados> para recuperar os valores de campos individuais. O cdigo mostrado na Listagem 12.6 foi expandido para incluir a execuo de uma nova consulta SELECT e de um lao para percorrer e exibir os resultados da consu lta no console.

LISTAGEM 12.6

Acessando os Resultados de uma Consulta ao Banco de Dados

1 Module Modu l eI 2 Private Const sConnection As String = "Provider=SQLOLEDB.l;" & "Password= ; " &_ 3 4 "Us er ID=sa'" &5 "Initial Catalog=CD; " & "Data Source=(local)" 6

8 g 10
11 12 13

Sub Main() Dim sSQL As String sSQL = "SELECT ArtisLArtistID , " &"ArtisLArtistName, Disc.CDTitle "& "FROM Artist INNER JOIN Disc ON "& "ArtisLArtistIO '" Disc.ArtistID ; "

Dia 12

LISTAGEM 12.6

Acessa nd o os Resultados de uma Consulta ao Banco de Dados (continuao)

14 15 16
17

18
19

Dim obj Conn As New _ System.Oata.OleOb .OleObConnection (s Connection) Dim obj Cmd As New _ System.Oata .OleDb.OleDbCommand(sSQL , objConn) Dim objReader As _ System.Oata.OleOb.OleObOataReader

20 T,y 21 22 obj Conn .Open{) Catc h myException As System.Exception 23 Console.WriteLine(myException.Message) 24 End Try 25 26 Console .Write("Pressione Return para executar SQL: {O}", sSQL) 27 28 Console . ReadLine() 29 If obj Conn .State = ConnectionState.Open Then 30 T,y 31 objReader = objCm d.ExecuteReader{) 32 Do While objReader.Read() 33 34 Console .Wri teLine( "{ O) (I) (2 )", objReader . Getlnt32(O) ,_ 35 objReader . GetString(I) , 36 objReader.GetString(2 37 Loop 38 Console . ReadLine() 39 Catch myException As System. Exception 40 Console.WriteLine{myExcepti on .Message) 41 42 Conso l e.ReadLine() End Try 43 44 End I f End Sub 45 46 End M odule
Os leitores de dados so maneiras rpidas, apenas de leitura ordenada, de recuperar dados, mas tambm so conjuntos de dados totalmente conectados. Isso significa que quando voc criar um leitor de dados e executar um lao em suas lin has, cada linha ser recuperada diretamente do banco de dados. Na verdade, enquanto estiver trabalhando com um leitor de dados, sua conexo com o banco de dados estar ocupada e no poder ser usada para qualquer outro fim . Esse no um grande problema e raz parte da razo principal pela qual esses leitores so to rpidos (nada armazenado na memria do c liente), mas s vezes preciso obter dados que proporcionem um

Acessando Dados com a Platafo rma .N ET

323

pouco mai s de controle. Como alternativa aos leitores de dados, um modelo desconectado de trabalhar com os dados tambm est disponvel por meio dos DataSets.

Trabalhando com Data Sets


Na seo anterior, voc usou um leitor de dados para recuperar informaes em seu banco de dados. Esse foi um tipo de acesso a dados conectado, em que preciso estar conectado com o banco de dados durante lodo o processo. Conseqentemente, esse esti lo de acesso a dados mais adequado quando se quer rec uperar rapidamente um conjunto de informaes e no h planos de continuar a us-las por um tempo mais longo (mais de alguns segundos). Como alternativa, se recuperarmos dados e, em seguida, continuarmos processando-os, alterando, exibindo, filtrando, executando ou ainda manipulando esses dados por muito tempo ou relendo-os corno uma forma de cache, ento, o tipo de acesso a dados conectado no ser a me lhor escol ha. Como outra opo, a plataforma .NET fornece um mode lo de acesso a dados totalmente desconectado por meio do Dala Set (System . Data .0ataSet). possvel carregar informaes nos Data Sets, em geral de um banco de dados, embora possam provi r de outras fontes , tornando-as independentes de sua origem. A independncia da fo nte dos dados o motivo pelo qual essas in formaes so cons ideradas desconectadas e podem ser mantidas pe lo tempo necessrio em um ambiente total mente off-line. Se vocj usou a verso anterior do ADO, ento, isso pode parecer semelhante ao objelO desconectado Reco rdS et dessa tecnologia. parecido com esse objeto de muitas maneiras, mas possui muitos outros recursos. Um Data Set pode conter vri as tabelas com informaes, mon itorar os relacionamentos entre elas e at manter ln ltiplas visualizaes diferentes de cada tabela de dados. Esses objelos so como bancos de dados completos que usam a memria e ainda so capazes de fornecer uma ut ilizao simples com um conjunto nico de resultados. Nas sees a seguir, voc aprender a carregar dados em um D ataSet e, em segu ida, tendo armazenado-os, a navegar por essas informaes. Depois de abordados esses aspectos, usaremos alguns dos recursos mais complexos, incluindo tabelas, visua li zaes e relacionamentos m ltiplos. Para concluirmos, examinaremos como retomar ao banco de dados, depoi s que tivermos ed itado, excl udo e ad icionado linhas, as alteraes efetuadas em um dataset.

Inserindo Dados em um DataSet


Para carregar as informaes de seu banco de dados em um OataSet, voc precisar usar outro tipo de objeto, um adaptador de dados. Os objetos adaptadores de dados, SQLOataAdapter e 01 eDBOataAdapter, foram projetados para fornecer a unio ou vnculo entre se u banco de dados e um objeto OataSet. Esse vncu lo funcio na em duas etapas, preenchendo o DataSet e, em seguida, retornando as alteraes do DataSet fo nte dos dados para atual izar o registro original. Aprenderemos como funciona o estgio de atual izao desse processo ainda nesta lio, mas antes que possamos atualizar alguma coisa, temos de carregar os dados. Primeiro, devemos criar um

Dia 12

objeto de conexo, exatamente como nos exemplos anteriores. Uma nova instncia da classe apropriada do adaptador de dados (OLEOB oU SQL) deve ser gerada a segui r. Use a instruo SQL que quiser, ou um objeto de comando que se refira instruo SQL correta, e o objeto de conexo no construtor do adaptador de dados, e tudo estar configurado. Oim sSQL As String sSQl = "SE LECT Artist.ArtistIO, " &_ "Artist.ArtistName,Oisc.COTit1e "& "FROM Artlst INNER JOIN Oise ON "& "Artist.ArtistIO = Oisc.ArtistIO;" Dim objConn As New 01eOb .01eObConnection{sConnection) Oim objDataAdapter As New 01eOb.01eDbOataAdapter(sSQl , objConn) J que voc quer preencher um dataset com o resultado de sua consu lta, um objeto DataSet tambm deve ser criado. Esta linha de cdigo gera uma instncia e rornece um nome para o OataSet corno parte do construtor: Oim objDS As New OataSet("CDs")
O mtodo Fi 11 de OataAdapter pode ser usado para carregar os dados no DataSet, mas para que isso runcione, voc deve conseguir abrir o objeto de conexo:

objConn .Open{) objOa taAdapter. Fi 11 (obj OS, "Di sc") Depois que o cdigo anterior ror executado, uma tabe la ter sido criada dentro do OataSet com o nome "Di se " e preenchida com os resu ltados de sua consul ta SQL. Aps a criao dessa tabela, voc poder trabal har com se u contedo por meio do conjunto Tables de OataSet : Conso 1e . Wri te l i ne(" {O} Rows", objOS. Tabl es ("D i se") . Rows.Count) Mais deta lhes sobre o acesso aos dados armazenados em um OataSet sero forneci dos ainda nes, ta lio. E interessante ressaltar que j que o DataSet um objeto desconectado, voc poderia ter encerrado completamente a conexo com seu banco de dados antes de trabalhar com o contedo de OataSet : objOa taAdapter. Fi 11 (obj OS, "Di se") objConn . Close() Conso 1e . Writeli ne (" {O) Rows" , obj OS . Tab 1es (" Di sc") . Rows. Count)

O cdigo completo mostrado na Li stagem 12.7, com o tratamento de erros apropriado, usa um
OleDBAdapter para carregar o resultado de uma consulta SELECT em um novo objeto DataSet. LISTAGEM 12.7 Preenchendo um DataSet com os Resultados de uma Consulta

I Modu le Modu l eI 2 Private Const sConnection As String = "Provider=SQLOLEOB.I;" & 3 "Password=;" &"User IO=sa;" &_

Acessando Dados com a Plataforma .NET


LISTAGEM 12.7 Preenchendo um DataSet com os Resultados de uma Consulta

325

(continuao)
5 6 7 8 9 10 11
12

"Initia1 Catalog=CD ; " & "Data Source=(loca1)" Sub Ma in() Dim sSQl As String sSQL" "SELECT ArtisLArtistID , " & "ArtisLArtistName , Disc.CDT it1e " & "FROM Artist INNER JOIN Oise ON " & "Artist . ArtistIO = Oisc . ArtistID ; " Dim objConn As New _ 01eOb.OleDbConnection(sConneetion) Dim ob j OataAdapter As New _ OTeDb .01eObDataAdapter(sSQl,objConn) Dim ob j OS As New DataSet("CDs")

13
14

15 16 17 18
19

20 Try 21 obj Conn. Open () 22 23 Cateh myExcep tion As System.Exception 24 Conso1e.Writeline(myException.Message) End Try 25 26 If objConn.State = Conneetio nState.Open Then 27 28 Try 29 obj Da taAdapter . Fi 11 (objOS , "Di se") obj Conn. C1 ose () 30 Conso 1e. WriteL i ne (" {O} Rows" , _ 31 obj OS. Tab 1es ("Di se") . Rows. Count) 32 Cateh myExeeption As System.Exeeption 33 34 Console.Writeline(myExeeption .Message) End Try 35 Conso1e.Readline() 36 End If 37 End Sub 38 39 Eod Module
Como em todos os exemplos demonstrados at agora nesta lio, voc pode executar esse cd igo por sua prpri a conta colocando-o em um mdulo de um novo ap licativo do console.

326

Di a 12

Navegando pelos Dados


Depois que voc carregar alguns dados em seu DataSet, pode querer exam inar essas infor~ maes. Oobj eto com o qual trabalhar na verdade no o Oata5et, porq ue ele representa potencialmente vrias tabe las diferentes, mas sim o objeto DataTab 1e correspondente aos dados carregados nos quais esti ver interessado. O cd igo a seguir mostra como poder obter um DataTable a partir do DataSet que o contm:

Dim objTable As DataTable objTable " objDS.Tables(UDisc")


J que o cdigo que inseriu os dados no DataSet forneceu o nome "Di se" para a tabela recm-carregada, voc pode usar esse nome para acessar a mesma tabe la. O objeto DataTab le dis-

poni biliza dois conj untos que so particularmente te is: o conjunto Rows, que contm todos os registras da tabela, e o conjunto Co 1umns, que possui um grupo de objetos DataCol umn descrevendo cada campo da tabela. O conjunto Rows pode ser empregado de uma entre vrias manei ras para executar um lao atravs de todos os registras da tabela: Usando um lao For Each Dim objRow As DataRow For Each objRow ln objTable . Rows Console . Writeline(objRow . ltem("CDTitle")) Next Usando um lao For simples Dim i As lnteger Dim objRow As Da t aRow For i = O To objTable . Rows.Count - 1 objRow = objTable . Rows{i) Console . Writeline(objRow . ltem("CDTitle")) Next Qualquer um dos mtodos produz O mesmo resultado nesse caso. Cada registro da tabela representado por um objeto DataRow. Esse objeto conceder acesso a seus campos por meio da propriedade Item (na qual voc pode fornecer o ndice ou o nome do campo que deseja recuperar), e tambm fornece vrias propriedades teis, como RowState, que retorna o estado de edio atua l do registro. O conj unto Col umns contm detalhes dos campos de DataTabl e, cada um representado como um objeto DataCo 1umn. Por me io desse conjunto, e dos objetos contidos nele, voc obter todas as informaes sobre a estrutura de sua tabela. Como no conjunto Rows anterior, possvel executar um lao atravs dos campos da tabela usando For Each ou For: Dim objColumn As DataColumn For Each objColumn ln objTable.Columns

Acessando Dados com a Platafo rma .NET


Console.WriteLine("Column Name: {O} Data Type : (1}" ,_ objColumn . ColumnName,_ objColumn . DataType.FullName) Next

327

o cdigo do proced imento Di spl ayTabl e do exemp lo descrito na Listagem

12.8 mostra como voc poderia usar as propriedades Rows e Col umns de um DataTabl e para escrever um procedimento genrico a fim deexibir todas as informaes sobre a tabela com os cabealhos da coluna. 12.8 Exibindo o Contedo de um OataTable

LISTAGEM

1 2 3 4
5

Sub OisplayTable(ByRef objTable As OataTable) Oim objRow As OataRow Oim objCol As OataColumn Oim i , j As Integer For j = O To objTable.Columns.Count - 1 objCol = objTable.Columns(j) Console .Wri te(" {O):{l) " , objCo l.ColumnName, _ objCol.DataType . Name) Next Console.WriteLine{) For i = O To objTable.Rows.Count - 1 objRow = objTable.Rows{i) For j = O To objTable . Columns.Count - 1 Console .Write("{O} " , objRow . Item{j Next Conso le.WriteLine() Next End Sub

6 7 8 9 10 11 12
13

14 15 16 17 18 19 20 21

Voc pode testar esse procedimento alterando o exemplo para carregar um DataSet que inc lua lima chamada a esse novo procedimento, como mostro na Listagem 12.9.
LISTAGEM

12.9

A Funo DisplayTable

1 Private Const sConnec tion As Stri ng = "Prov ide r=SQLOLEOB .l; " & "Password= ; " & 2 "Persist Security Info=T rue;" & 3 4 "User 10=sa ; " &_ "lnitial Catalog=CO;" & 5 "Data Source ={loca l )" 6
7

8 Sub Main()

Dia 12

LISTAGEM 12.9

A Funo DisplayTable (continuao)

9 10
11 12

13
14

Dim sSQL As String sSQL " "SELECT ArtisLArtistID , " &"ArtisLArtistName, D sc.CDTitle " & i "FROM Artist INNER JOIN D sc ON " & i "Artist.ArtistIO " Disc.ArtistID "

15
16 17

18 19 20 21 Tcy 22 objConn,Open{) 23 Catch myException As System.Exception 2' Console.WriteLine{ myException.Message) 25 26 End Try 27 28 If objConn.State " ConnectionState.Open Then Tcy 29 objoataAdapter . Fi 11 (obj OS. "Di se") 30 31 objConn.Close() 32 Dim ob j Table As DataTable ob j Table " objDS.Tables{"Disc") 33 3. DisplayTable(objTable) 35 36 Catch myExcep tion As System.Except ion 37 Console .Writeline{myException .Message) 38 End Try 39 Console.ReadLine() 40 End I f 41 .2 'od S,b

Dim objConn As New _ OleDb .Ol eDbConnection(sConnection) Dim objOataAdapter As New _ OleOb.01eDbO ataAdapter(sSQL,objConn) oim objoS As New _ DataSet("Cos")

o objeto DataRow importante; alm de ser o meio pelo qual voc acessa os valores do campo
(como foi feito na Listagem 12.8), ele tambm usado quando se edita, exclui e adiciona registros a um objeto DataTabl e. Na seo a seguir, aprenderemos a alterar o contedo de seu DataSet usando tanto o objeto OataTable quanto OataRow.

Acessando Dados com a Platafo rma .N ET

329

Editando Dados (Adicionar, Editar e Excluir)


Nesta seo, voc escrever um cdigo para alterar seu banco de dados por meio do objeto OataSet. No entanto, o banco de dados propriamente dito no tem conhecimento algum desses objetos DataSets e acabar sendo alterado pelas instrues SQL. As alteraes que fo rem feitas no DataSet sero convertidas pelo DataAdapter em instrues SQL que tero de ser executadas visando ao banco de dados. claro que seria poss vel apenas executar cada instruo UPDATE, INSERT e OELETE diretamente, mas o modelo DataSet possui os beneficias de ser desconectado (evitando o uso de recursos do servidor enquanto aguarda a interao com o usurio) e si mples ELETE, em vez de instrues SQL personalizadas). (usando mtodos do objeto, como O Usando os trs tipos de alterao de dados - adicionar, editar e excluir - um de cada vez, voc ver como pode man ipular facilme nte seus dados por meio dos mtodos dos objetos DataTable e OataRow.

Adicionando Registras
Depois de criar urna conexo, um adaptador de dados e carregar alguns dados em seu DataSet , voc poder acessar diretamente um objeto OataTable; objOataAdapter . Fi 11 (objOS, "Di se") Dim objTable As OataTable objTable'" objDS.Tables("Disc") Depois que tiver esse objeto Da ta Tab 1e, poder acessar seu contedo por meio do conjunto Rows, que retornar um objeto DataRowCollection: Dim drRows As DataRowCollection dr Rows = objTable.Rows Esse objeto representa todos os registras da tabe la como um conjunto de objetos DataRow. O prprio conjunto fornece um mtodo, Add, para criar novos registras. Esse mtodo pode ser chamado de lima entre duas maneiras: com um array de valores para o campo do novo registro ou com um nico objeto OataRow representando as infonnaes a adicionar. O segundo mtodo, que chamado COm um OataRow, requer urna mane ira de obter um novo objeto de linha que possua o mesmo esquema (os mesmos campos, com os mesmos tipos de dados e tamanhos) do resto das linhas da tabela, e o prprio objeto OataTable fornece esse recurso por meio do mtodo NewRow. Voc ver um exemplo dos dois estilos nas Listagens 12.10 e 12.11 . A Listagem 12. 10 mostra o uso de um array, que nos forar a conhecer a ordem dos campos e resultados em um cdigo que mu ito menos claro que o segundo mtodo. A Li stagem 12.11 mostra o segundo mtodo - empregando um objeto DataRow.

Dia 12

LISTAGEM 12.10

Usando um Array (listagem parcial do cdigo)

1 Dim drRows As DataRowCo llect ion 2 Dim objNewRow As DataRow 3 drRows =' objTable.Rows
4

5 6 7 8
9

'Neste caso, temos 3 colunas 'A rti stIO 'A rti stName 'CDTitle 'Usando o mtodo do array produziremos Dim arrFields(3) As Object arrFields(O) = 10 arrFields(I) = USting U arrFields(2) = uO ream of Blue Turtles" objNewRow =' drRows . Add(arrFields)

10 11 12 13 14 15

LISTAGEM 12.11

Fornecendo um Objeto OataRow como Parmetro para o Mtodo Add

1 Dim drRows As DataRowCo llect ion 2 Dim objNewRow As DataRow 3 drRows =' objTable.Rows
4

5 6 7 8
9

'Neste caso , temos 3 colunas 'A rtistIO 'A rtistName 'CDTitle objNewRow =' objTable.NewRow{) objNewRow(UArtistro") =' 3 objNewRow(UArtistName U =' uGeorge Orwell u ) objNewRow(UCOTitle U =' "Party like it 's 1984 U ) drRows.Add(objNewRow)

10 II 12 13 14

Nos dois casos, os dados foram ad icionados tabela, mas isso no sign ifica que sero retornados ao banco de dados. As alteraes efetuadas no banco de dados do servidor depoi s do momento em que os dados foram carregados nesse DataSet poderiam impedi r que os registras adicionados fosse m vlidos (voc poderia espec ificar um artista que tivesse sido excludo da tabe la Artist, por exemplo), mas voc no veria esse tipo de erro at o estgio da atuali zao. J que est trabalhando em um estado desconectado, ou off-line, quando usa um OataSet, qualquer problema relacionado ao servidor no ser descoberto at que haja a tentativa de atual iz-Io.

Acessando Dados com a Platafo rma .N ET

331

Editando Registras
Editar regist ras seme lhante a adicionar; rrabalhase atravs dos objetos Da taRow que represen~ tam os registras da tabela. No caso da edio, no entanto, queremos trabalhar com um objelo DataRow existente, em vez de criar um novo como fi zemos na seo anterior, "Adicionando Registros". Como nos exemplos anteriores, precisamos primeiro criar uma conexo, um coman do, um adaptador de dados, e ento carregar os dados em um objeto OataSet para criar um objeto DataTable. Depois que tivennos esse OataTable, teremos acesso a seu objeto DataRowColl eet i on, e estaremos prontos para comear a ed itar os registras. objOa taAdapter. Fi 11 (obj OS. "Di se ") Dim objTab1e As OataTable objTable " objDS.Tables("Disc") Dim drRows As DataRowCollection Oim objRow As OataRow dr Rows " objTable.Rows objRow " drRows(S) Cada objeto OataRow possui vrios mtodos que afetam diretamente a ed io: BeginEdit, EndEdi t e Cancel Edi t. BeginEdi t e EndEdi t colocam o objeto DataRow dentro ou fora do modo de edio, que um estado especial no qual a linha contm as informaes sobre a edio em progresso e, portanto, eventos de alterao no sero acionados para cada mod ificao de um campo. Voc aprender mais sobre os eventos de alterao ainda nesta li o, na seo "V inculao de Dados". BeginEdi t opcional, mas indica sua inteno de maneira clara. E possvel acessar e alterar os valores por meio da propriedade Itemusando o nome ou a posio do campo: objRow . BeginEdit() objRow("au_lname") " "Exciting" objRow.EndEdit() Quando EndEdi t for chamado, se Begi nEdi t tiver sido usado, as alteraes da linha sero confirmadas dentro do objeto OataTab l e, momento em que qualquer erro que tenha ocorrido durante a edio se r lanado pelo ADO.NET. Sem a utilizao de BeginEdi t e EndEdi t, todos os erros ocorrero no instante em que cada campo for ed itado. Voc aprender a usar um DataSet contendo campos alterados, registros novos e at exclu dos, e atualizar o banco de dados de origem posteriormente nesta lio.

Excluindo Registras
A excluso de um registro em uma tabela de dados efetuada pelo mtodo Delete do objeto DataRow em questo. Isso sim ples de fazer, mas h um problema com o qual se preocupar. O mtodo Oelete marca a linha como excl uda, mas, na verdade, no remove o objeto OataRow de DataRowColl eet i on. Isso crt ico porq ue permite que o objeto no seja excludo e fornece as informaes necessrias para atualizar o banco de dados de origem excl uindo esse registro quando ataele estiver novamente na tabela original. H outros mtodos, Remove e RemoveAt, da classe O

Dia 12

RowCollection, que realmente removem o objeto OataRow especfico do conjunto. Usar Remove ou Rem oveAt ser adequado quando voc empregar um objeto DataTabl e sem um banco de dados de back-end, mas se a inteno for usar todas as alteraes feitas no objeto DataSet para atualizar a(s) tabela(s) de origem, ser preciso utilizar o mtodo Delete.
A Li stagem 12.12 fornece o exemplo de um lao em uma tabela, que localiza certas linhas especficas e, em seguida, as exclu i. Nenhuma dessas excluses afetaros dados da fonte, o SQL Server, por exemplo, at que voc atualize o servidor.
LISTAGE M

12.12 O Mtodo Delete Marca uma Linha como Excluda

1 Modu le ModuleI Private Const 2 3 sConnection As String" 4 "Provider"SQLOLEOB.l;" & 5 "Password"i" &_ 6 "Pers i st Security Info"True;" & 7 "User ID=sa ; " &_ 8 "Initial Catalog"CD; " & g "Oata Source"(local)" 10 11 Sub Main() 12 Dim sSQL As String 13 sSQL " "SELECT ArtistIO, DiscID, CDTitle From Oisc"
14

15 16 17 18 19 2D 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

Dim objConn _ As New OleOb.OleDbConnection(sConneetion) Dim ob j OataAdapter _ As New OleOb . OleDbOataAdapter(sSQL , objConn) Dim objOS _ As New OataSet("COs") Try ob j Conn . OpenO Catch myException As System . Exception Console . WriteLine(myExeeption.Message) End Try If objConn.State " ConnectionState.Open Then Try objOataAdapter . Fil 1 (objOS. "Di se") objConn. Close () Oim objTable As OataTable objTable " objOS.Tables(UOise") Dim drRows As OataRowCollection Dim objCurrentRow As DataRow

Acessando Dados co m a Plataforma .N ET

333

LISTAGEM 12.12 O Mtodo Oelete Marca uma linha como Excluda (continuao)
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
71

drRows

objTable . Rows

OisplayTable{objTable) Console.Write{"Se pretende exclu ir . press ione return para iniciar!") Console.Readline() For Each objCurrentRow ln drRows If CType{objCurrentRow{HArtistIO"), Integer) obj CurrentRow.Delete() End If Next

3 Then

Console.Write{"Aps a excluso . press i one return para visua li zar") Console.Readline() OisplayTable(objTable) Catch myException As System.Exception Console.WriteLine(myException.Message) End Try Console.ReadLine() End If

End Sob
Sob DisplayTable{ByRef objTable As DataTable)

Oim objRow As DataRow Dim objCol As DataColumn Dim i. j As Integer For j = O To objTable.Columns.Count - 1 objCol = objTable.Columns(j) Console.Write{"{OI:{11 ". objCol . ColumnName._ objCol . DataType . Name) Next Console.WriteLine() For i = O To objTable.Rows.Count - 1 objRow = objTable.Rows{i) Select Case objRow . RowState Case OataRowState.Oeleted Console.Write{"[Oeleted] Case OataRowState.Modified Console.Write("[Modified] Case OataRowState.Added

72

73 74 75 76
77

") ")

78
79

80

Dia 12
O Mtodo Delete Marca uma Linha como Excluda (continuao)

LISTAGEM 12.12

Console.Write("[New] ") 81 Case DataRowState.Unchanged 82 ") Console.Write("[Unchanged] 83 [nd Selec t 84 For j = O To objTable.Columns.Count - 1 85 If objRow.RowState <> DataRowState . Deleted Then 86 Console .Write( "{O) ", 87 objRow.Item(j)) 88 Else 89 Console.Write{"{O) ", 90 91 objRow.Item(j, DataRowVersion.Original) 92 End If 93 Next 94 Console.WriteLine() 95 Next 96 End Sub 97 98 Eod Module Observe que na linha 90, dentro da rotina DisplayTable, uma sintaxe diferente foi usada para acessar o valor de um campo. Pela incluso do segundo parmetro, DataRowVersion.Origina l , esse cdigo especifica que o valor do campo aps a atualizao mais recente, ou no momento em que for carregado, deve ser exibido em vez do valor do cam po atual (o padro). Nesse caso, isso particu larmente importante porque uma linha exclu da no possui valores vlidos para o campo atual, e um erro ser gerado se voc tentar acess-los.

Atualizando O Banco de Dados


Depois de adicionar, edi tar ou exc luir os registras, voc ter de atualizar a fonte original dos dados (o banco de dados) antes que essas alteraes tenham efeito. O proced imento que usa um Da taSet alterado para atualizar o banco de dados de origem o mesmo, independentemente das mod ificaes feitas , e envolve o uso da classe de adaptadores de dados.

Especificando os Comandos de Atualizao, Inser o e Excluso


Quando voc criou um adaptador de dados para carregar informaes em seu DataSet, forneceu um objeto de comando ou uma instruo SQL que o adaptador, em seguida, usou para recuperar os dados de seu banco de dados. Esse comando na verdade um entre os quatro aos quais o adaptador de dados pode dar suporte, tendo cada um sido projetado para manipu lar uma taret diferente na transmisso de dados entre o banco de dados e os DataSets. S um dos comandos, aquele quej foi usado, manipula a extrao de dados do banco de dados e chamado de Select-

Acessando Dados com a Platafo rma .N ET

335

COlTflland. Os outros trs (UpdateColTflland, DeleteColTflland e InsertColTflland) manipulam edies, excluses e inseres no banco de dados. Cada um desses comandos deve conter um valor apropriado, seja uma instruo SQL ou uma chamada a um procedimento armazenado no servidor, antes que a ao que lhe compete possa ser executada. Cada propriedade dessas representa um objeto COlTflland do tipo apropriado (01 eDBColTflland ou SQLColTflland), que ser criado ou inicializado antes de ser atribudo propriedade. Novo Para que voc mesmo crie esses comandos, prec isar usar um tipo de consulta que no fo i abordada at agora nesta lio, um comando com parmetro.\". Um comando dessa espc ie deixa espaos reservados especia is em sua instruo SQL - parmetros - que so preenchidos com valores especficos antes que o comando seja executado. Os pontos de interrogao so usados na instruo SQL para representar os parmetros, como mostrado na Listagem 12.13:
TERMO

LISTAGEM

12.13 Os Adaptadores de Dados Preci sam de Comandos com Espaos Reservados

1 Dim objDeleteCommand As New 01eDb .OleDbCommand() 2 Dim sDeleteSQL As String


3

4 sOeleteSQL ,,"DElETE FROM Artist WHERE ArtistID " ?"


5

6 objDeleteCommand . Connection " objConn 7 objDeleteCommand.CommandText = sDeleteSQl Os detalhes devem ser fornecidos para cada espao reservado pela incluso de um objeto de parmetro (01 eOBParameter ou SQLParameter, dependendo do ambiente em que voc trabalha) no conjunto de parmetros do comando. Cada objeto de parmetro vincu lado a um campo especi ficado do OataSet por meio da propriedade SourceCol umn, e tambm pode ser associado a uma verso espec ificado campo por meio da propriedade SourceVersion. A Listagem 12.14 mostra o cdigo necessrio para adicionar um parmetro e configurar algumas das propriedades disponveis.
LISTAGEM

12.14 Criando Parmetros em um Objeto de Comando

1 Oim objParam As OleOb.OleObParameter 2 3 objParam = objDeleteColTflland . Parameters . Add{_ 4 "@ArtistID" , OleDb.OleObType .Integer)
5

6 objParam . SourceColumn = "AristID" 7 objParam . SourceVersion = DataRowVersion.Original Nesse exemplo, o nico ponto de interrogao fornecido para a SQL foi associado a esse novo objeto de parmetro. Os espaos reservados foram assoc iados aos parmetros com base na posi-

Dia 12

o: o primeiro espao reservado foi vinculado ao primeiro parmetro. Depois que o objeto de parmetro foi criado, o campo e sua verso correspondentes fo ram especificados nas linhas 5 e 6. J que estamos lidando com lin has excludas aqui, exatamente como na Listagem 12. 12 anterior, importante espec ificar SourceVers i on. A verso-padro a do valor atual (Da taRowVers i on. Cu r rent), que no est disponvel para uma linha excluda. A ltima etapa que voc ter de executar antes do comando ser usado pelo adaptador ser atribu-lo propriedade DeleteCorrmand: objOataAdapter . DeleteCommand ; objOeleteCommand A Listagem 12.15 mostra um exemplo completo e muito extenso que cria uma conexo com o banco de dados e um adaptador e, em seguida, configura os comandos individuais para Upda teConmand, Oe 1eteComnand e I nsertConmand. Por fim, para testar esses comandos, um dataset criado, carregado com dados e alterado e, depois, a fonte de dados atualizada pelo mtodo Update do adaptador.
LISTAGEM

12.15 As Alteraes No Tm Efeito at Que o Mtodo Update Seja Chamado

1 Module ModuleI 2 Private Const 3 sConnection As String =_ 4 "Provi der;SQLOl EDB . I: 'o & 5 "Password;;" & 6 "Persist Security Info=True;" & 7 "User ID=sa;" &_ B "Initial Catalog;CO ; " & g "Data Source=(local)" 10 11 Sub MainO 12 Dim sSQl As String 13 sSQl = "SElECT ArtistID. ArtistName From Artist" 14 Dim objConn _ 15 As New OleOb.OleDbConnection(sConnection) 16 Dim objOataAdapter _ 17 As New OleOb.OleObOataAdapter(sSQL. objConn) 18 Dim ob j OS _ 19 As New OataSet("Artists") 20 Dim objOeleteCommand _ 21 As New OleOb.OleDbCommand() 22 Dim objUpdateCommand _ 23 As New OleOb.OleObCommand() 24 Dim objInsertCommand _ 25 As New OleOb.OleDbCommand() 26 Dim sDeleteSQL As String 27 Dim sUpdateSQL As String 28 Dim sInsertSQL As String

Acessando Dados co m a Platafo rma .N ET

337

LISTAGEM 12.15

As Alteraes No Tm [feito at Que o Mtodo Update Seja Chamado (continuao)


=

29 30
31

sDeleteSQL

"OELETE FROM Artist WHERE ArtistI O " ?"

32 33
34

objOeleteCommand . Connection = objConn objOeleteCommand.CommandText = sOeleteSQL Dim objParam As OleDb.OleDbParameter ob j Param " objOeleteCommand.Parameters.Add(_ "@ArtlstlO". 01 eOb. 01 eDb Type. Integer) objParam . SourceColumn = "ArtistIO" objParam . SourceVersion " DataRowVersion .Ori9inal objDataAdapter.DeleteCommand sUpdateSQL
= =

35 36 37 38 39
40

41 42 43 44 45 46 47 48 49 50 51 52
53

objDeleteCommand
=

"Update Artist SET ArtistName "WHERE ArtistlO = ?"

? " &

objUpdateCommand.Connection = objConn objUpdateCommand.CommandText = sUpdateSQL objUpdateComma nd. Parameters .Add(_ "@ArtistName" , OleDb .OleObType . Char) objParam.SourceColumn = "ArtistName" objParam.SourceVersion " DataRowVersion.Current
=

ob j Param

54 55 56 57
58

ob j Param " objUpdateCommand.Parameters.Add(_ "@ArtlstID". OleDb.OleDbType.lnteger) objParam . SourceColumn = "ArtistlO" objParam.SourceVersion " DataRowVersion.Original objDataAdapter.UpdateCommand sInsertSQL
= =

59
60

objUpdateCommand

61 62 63 64 65 66 67 68 69 70 71

"INSERT INTO Artist " & "(ArtistlO. ArtistName) " & "VALUES (? ?) "

ob j InsertCommand . Connection = objConn objlnsertCommand . CommandText = sInsertSQL objParam " objlnsertCommand.Parameters.Add(_ "@ArtistID" . OleDb.OleDbType.Integer) ob j Param . SourceCo1umn = "ArtistlO" objParam . SourceVersion " DataRowVersion . Current

Dia 12

LISTAGEM 12.15

As Alteraes No Tm Efeito at Que o Mtodo Update Seja Chamado (continua o )

72
73 74 75 76
77

objParam " objlnsertCommand.Parameters.Add(~ "@ArtistName" , OleOb.OleObType .Char) objParam . SourceColumn" "ArtistName" objParam . SourceVersion " OataRowVersion . Current objOataAdapter . lnsertCommand " objlnsertCommand Try objConn.OpenO Catch myException As System.Exception Console.WriteL i ne{myException.Message) End Try Try Oim sNewArtistSQL As String sNewArtistSQL " "INSERT INTO Artist " & "(Art istID, ArtistName, " 8o~ "ArtistFirstName. ArtistLastName)" 8o~ "VAlUES (11. 'Wei rd Al Yankovich' , " & " 'A l ' , 'Yankovich')" Oim objNewArtistCmd ~ As New OleDb.OleDbCommand(sNewArtistSQL , objConn) objNewArtistCmd . ExecuteNonQuery() Catch e As Exception 'Pode causar um erro porque 'Art istIO ' 11 j existe 'Mas se ocorrer, ser correto. Console . WriteLine(e.Message) End Try If objConn.State " ConnectionState.Open Then Try objOataAdapter . MissingSchemaAction "Mi ss i ngSchemaAct i on . AddWi thKey ob j OataAdapter . Fil l {objOS . "Artist") ob j Conn . Cl ose O Oim objTable As D ataTable objTable " objDS.Tables("Artist") Oim drRows As OataRowCollection Oim objCurrentRow As OataRow drRows " objTable . Rows

78

79
80 81 82 83 84 85 86 87 88

89 90
91 92 93

94 95 96 97 98 99 100

101
102
103

104 105
106 107 108

109
110 111 112 113 114

Acessando Dados com a Plataforma .NET

339

LISTAGEM 12.15

As Alteraes No Tm Efeito at Que o Mtodo Update Seja Chamado (continua o ) DisplayTab l e(objTable) Console.Write("Se pretende excluir , " &_ " pressione re turn para in ic iar!") Console.Read l ine () 'Exclua a linha com chave primria drRows.Find(ll) . Delete{)
=

115

116
117

11B 119
120

121 122 123 124 125 126 127 12B 129


130

11

Console.Write("Aps a excluso , " & II press i one return para vi sua 1i zar os resul tados") Console.ReadLine() DisplayTable(objTable) Console.Write("Se pretende inserir , " & pressione return para in ic iar!") Console.ReadLine()
II

131

132 133 134 135


136

137

13B 139 140 14 1 142 143 144 145 146 147 14B 149 150 151 152 153 154 155 156 157

Dim drRow As Data . DataRow drRow = objTable . NewRow drRow("ArtistID") " 40 drRow("ArtistName") = "Kent Sharkey" ob j Table . Rows.Add(drRow) Console.Write("Depois de inserir , " & " pressione return para visualizar! ") Consol e.Readl ine() DisplayTable{objTable)

Console.Write("S e pretende atualiz ar," & " pressione return para inicia r! ") Console.Readline{) ' Acesse a linha com chave primria ig ual a 7 (lisa loeb) drRow = drRows . Find{7) drRow.8eginEdit() drRow{"Art istName") drRow . End Edit ()

"John Doe"

Dia 12

LISTAGEM 12.15

As Alteraes No Tm Efeito at Que o Mtodo Update Seja Chamado (continua o ) Console.Write("Oepois de atual i zar , " & " pressione return para visualizar os resultados") Console.ReadL ine () oisp l ayTable(objTable) obj Conn. open () obj Da taAdapter. Upda te (objoS , "Art i s t")

158 159 160 161 162 163 164 165 166 167 168

169 170 171 172 173 174 175 176


177

Ca teh myExeeption As System.Exeeption Console .Writ eLine( myExeeption .Message) End Try Console.Write{"Pressione Return para finalizar.") Console. Read Li ne O End If End Sub Sub OisplayTable{8yRef objTable As OataTable) Oim objRow As OataRow Oim objCol As OataColumn Oim i , j As Integer For j = O To objTable.Columns.Count - 1 objCol " objTable . Columns{j) Console.Write{"{O}:{l} ", objCol .Col umnName, _ objCol.oataType.Name) Next Console.WriteLine{) For i " O To objTable.Rows.Count - 1 objRow " objTable.Rows(i) Seleet Case objRow.RowState Case OataRowState.Oeleted Console .Write{"[Oeleted] ") Case OataRowState.Modified Console.Write ("[Modified] ") Case OataRowState.New ") Console .Write{"[New] Case OataRowState.Unchanged ") Console .Writ e{ "[Unehanged ] End Seleet For j " O To objTable.Columns.Count - 1 If objRow.RowState oataRowState.Oeleted Then Console .Write(" {O} ". obj Row. Item(j))

178 179 180 181 182 183 184 185 186 187 188
189 190 191 192 193 194 195 196

197 198 199 200

Acessando Dados com a Platafo rma .N ET


LISTAGEM 12.15 As Alteraes No Tm Efeito at Que o Mtodo Update Seja Chamado (continua o ) 201 Else 202 Conso le.Write (" {O} " . ~ 203 ob j Row.Item(j , OataRowVe r sion.Original)) 204 End I f 205 Next 206 Console.Writel ine() 207 Next 208 End Sub 209 End Module

341

ANALISE

o cdigo da Listagem 12.15 est disponvel para download no site deste li vro na Web, portanto, no necessrio digit-lo a menos que voc queira mesmo faz- lo. A primeira seo do cdigo est bem dentro do padro utilizado em todos os outros escritos nesta lio. A string de conexo foi criada, devendo ser substituda pelos valores apropriados para seu sistema, e usada para instanciar um novo objelO 01 eDBConnec t i on (l inha 14).Um objelO 01 eDB OataAdapter e um OataSet tambm foram gerados e inicializados para tomar possvel se conectar com o banco de dados e retornar os resu ltados da instruo SELECT para seu programa. Como parte do cdigo de inicial izao, trs novos objetos 01 eDBCorrrnand tambm foram criados c sero em pregados na representao dos comandos UPDATE, DELETE e IN$ERT para 0leD8DataAdapter. No entanto, esses objetos de comando no foram realmente gerados nesse ponto; essa etapa manipu lada confomle cada comando vai sendo configurado posterionnente.

As li nhas 30 a 4 1 criam e configuram o objelo de comando Delete, adicionando o nico objeto de parmetro para Art i s t ID (a chave primria). Observe corno a li nha 39 especifica que $ourceVersion seja OataRowVersion.Original porq ue os dados aluais no so vlidos para urna linha exclu da. As linhas 43 a 59 ,configuram o comando Update e, em seguida, as linhas 61 a 78 manipulam o comando Insert. E bom ressaltar que para Update e Insert, muitos parmetros so necessrios, devido ao fato de que todos os campos da tabela tm de ser enviados nesses comandos. Voltando ao cdigo que comum a todos os exemplos desta lio, as linhas 80 a 84 configuram a conexo com Obanco de dados. A seguir, uma n ica linha de dados inserida no banco de dados pe lo mtodo ExecuteNonQuery( ) de um objeto de comando. Essa linha adicionada de modo que possa ser excluda posterionnente, porque a tentativa de remover qualquer outro registro de Artist fa lharia devido existncia de registras-fi lhos (CDs desse artista na tabe la Dise). Em vez de usar o dataset e o adaptador de dados no modo desconectado, essa insero fe ita de imediato por uma operao direta. A linha 106, que ocorre depois que a conexo abelta e que o nico registro novo tiver sido inse rido, infomla ao adaptador de dados como manipular a configurao de lima tabela quando no existe nenhum esquema (as info rmaes sobre o tipo de dados e o layout referente aos dados). Essa configurao especifica, AddWi thKey, comunica ao adaptador para criar automaticamente o

Dia 12

esquema bsico (informaes sobre o campo) e incluirtambm infonnaes sobre a chave pri ~ mria. A segu ir, na linha 108, o DataSet carregado com os dados pelo mtodo Fi 11 e com um parmetro adicional para especi fi car o nome da tabela rec m ~criada, 'Artist' . Apenas para se certificar de que est claro que esse um processo desconectado, fi linha I09 en~ cerra a conexo com o banco de dados antes que a verdadei ra manipu lao de dados ocorra. De~ pois desse ponto, o cdigo exclui, altera e adiciona registros ao objeto DataTab1e para fornecer um teste de todos os trs tipos de ed ies que podem ocorrer em um DataTabl e. Para encontrar a linha correta a exc luir (linha 123) e editar (linha 152), o mtodo Find do objeto DataRowColl ec tion usado. Esse mtodo retorna um objeto DataRow dado um valor de chave primria vlido para pesquisa, um processo que requer que o objeto DataTab 1e tenha informaes sobre a chave primria (le ia o pargrafo anterior para obter uma explicao de como a linha 106 fornece essa informao). Para concluir, depois de todas as edies, a linha 164 usa o mtodo Update de 01 eDBDataAdapter para aplicar todas as alteraes de dados ao DataSet. Esse mtodo usa um DataSet como parmetro, junto a uma string indicando que tabela dentro do Da taSet deve ser utilizada para atualizar o banco de dados. Se o nome da tabe la no for fornecido, o adaptador tentar atualizar o banco de dados com todas as tabelas disponveis.
O resultado desse cdigo deve ser uma seqnciade instrues SQL executadas em um banco de dados, cada uma correspondendo a um dos comandos do adaptador. Se voc estiver usando o SQL Server e quiser ver o que acontece, poder empregar o Profiler para observar todos os comandos sendo processados no serv idor enquanto esse cdigo estiver em execuo. Fornecer detalhes sobre como utilizar o Profiler est alm do escopo deste livro, mas o resultado deve ser semelhante ao mostrado a seguir:

INSERT INTO Artist (ArtistID, ArtistName , ArtistFirstName. ArtistLastName) VALUES (11, 'Weird AI Yankovich ' , 'A I' , 'Yankovich')
90

SELECT ArtistID, ArtistName From Artist


90

exec sp_execu tesql N'Update Artist SET ArtistName ~ @Pl WHERE ArtistID = @P2' , N' @Pl char(8),@P2 int', ' John Doe', 7
90

exec sp_executesql N'DELETE FROM Artist WHERE ArtistID


90

@Pl', N' @PI int ' , 11

exec sp_executesql N' INSERT INTO Artist (ArtistID, ArtistName) VALUES (@P l, @P2)' , N'@Pl int ,@P2 char(l2)', 4D, 'Kent Sharkey '
90

Nesse exemplo, s um registro fo i inserido, alterado e excludo, mas o mtodo Upda t e simplesmente chamaria os comandos apropriados para cada registro alterado.

Acessando Dados co m a Pl atafo rma .N ET

343

Usando Comandos Gerados Automaticamente


Como alternativa a voc mesmo especificar os comandos, possvel de ixar que o ADO.NET crie automaticamente os comandos necessrios, o que pode ser mais simples, embora haja algumas etapas a seguir para se alcanar esse objetivo. O primeiro requisito para os comandos gerados de modo automt ico que seu oataSet deve conter pelo menos informaes sobre a chave primria das tabe las re levantes. Essas informaes podem ser fornec idas de uma entre vrias maneiras, j que todas elas produziro o efeito desejado. Primeiro, voc pode especific- Ias manualmente usando a propriedade PrimaryKey de um objeto oataTable. Essa propriedade configurada com o campo apropriado, que pode ser obtido pelo conjunto Columns de oataTable: oim PK(O) As oataColumn PK(O) " objTable . Columns("Art istIo") objTable.PrimaryKey " PK Voc tambm pode de ixar que o adaptador de dados obtenha as informaes apropriadas na fonte dos dados, incluindo a chave primria e muitos outros detalhes sobre a tabela, por meio do mtodo Fi IISchema. Esse mtodo cria o objeto oataTable antes de carreg-lo e preenche a tabela com sua lista de colunas, informaes sobre a chave primria e qualquer outra restrio que possa descobrir na fonte de dados: objoa taAdapter . Fi 11 Schema (obj OS , Schema Type . Mapped . "Art is t") Para concluir, voc pode fazer com que o adaptador crie as infonnaes necessrias para o esquema durante o carregamento dos dados, configurando o valor da propriedade Mi ssi ngSche maAc t i on antes de chamar Fi 11. Essa propriedade possui algumas configuraes interessantes, mas AddWi thKey necessria para esse fim. Add (o valor padro) cria automaticamente as informaes sobre a coluna (nomes e tipos de dados) se esses detalhes j no exist irem na tabela, enquanto AddWi thKey adiciona informaes sobre essa mesma coluna e tambm configura a propriedade PrimaryKey a cada tabela que preencher. objoataAdapter .M ssingSchemaAction _ i " MissingSchemaAction .AddW ithKey objOa taAdapter. Fi 11 (obj OS. "Art is t") Independentemente do mtodo que voc usar, depoi s que o objeto OataTabl e, ao ser atualizado, tiver informaes sobre a chave primria, os comandos Update, Insert e oel ete podero ser gerados de modo automtico. Primeiro, uma instncia da classe apropriada do criador do comando (01 eOBConmandBu ; der Oll SQLConmandBu; 1der) deve ser gerada e inicial izada e, em seguida, quando o mtodo Update do adaptador for chamado, se algum comando necessrio est iver faltando, ele ser criado. A Listagem 12. 16 demonstra esses conceitos carregando alguns dados simples em um DataSet, fazendo algumas alteraes e chamando Update .

Dia 12

LISTAGEM 12.16 D Mtodo Update Executa os Comandos Correspondentes no Banco de Dados de Dr; gem 1 Module ModuleI Private Const 2 3 sConnection As String = 4 "Provider=SQLOLEOB.l j" & 5 "Password = j" &_ 6 "Persist Security Info"True " & 7 "User ID"saj" & 8 "Initia1 Catalog"CD;" & 9 "Oata Source=(loca1)"
10

11 12 13 14 15 16 17 18 19 20 21

Sub Main() Dim sSQL As String sSQL" "SELECT ArtistlD. ArtistName From Artist" Dim objConn _ As New OleOb.OleObConnection(sConnection) Dim objDataAdapter _ As New OleOb.01eObDataAdapter{sSQL. objConn) Dim objCommandBui1der _ As New OleOb.OleObCommandBuilder(objOataAdapter) Dim objDS _ As New DataSet("Artists") Try obj Conn. Open () Catch myException As System.Exception Conso1e . Writeline(myException.Message) End Try If objConn.State " ConnectionState.Open Then Try objOataAdapter.MissingSchemaAction " Mi s s i ngSchemaAc t i on. AddWi thKey objOataAdapter.Fill(objDS. "Art i st") objConn. C1 ose () Dim objTable As DataTable objTab1e" objOS.Tables("Artist") Dim drRows As OataRowCollection Dim objCurrentRow As DataRow drRows " objTab1e.Rows DisplayTable(objTable)

22
23 24 25 26 27

28
29 30 31 32 33

34
35 36 37 38 39 40
41 42

43

Acessando Dados co m a Platafo rma .N ET

345

LISTAGEM 12.16 O Mtodo Update Executa os Comandos Correspondentes no Banco de

Oados de Origem (continuao)

44 45 46 47 48
49 50

Console . Write("Se pretende editar , " & " pressione return para inic i ar!") Console . ReadLine{) 'Exclua a linha com c have primria " 11 drRows.Find(7)("ArtistName") " "Kent Sharkey" Console.Write("Depois de editar , " &_ " pressione return para visualizar os resultados") Console . ReadLine() DisplayTable{objTable) objConn.Open{) ob j OataAdapter . Update (obj OS , "Art i s t") Catch myException As System.Exception Console.WriteLine{myException.Message) End Try Console.Write("Pressione Return para finalizar.") Console . ReadLine{)

51 52 53 54
55

56 57
58
59

60 61

62 63 64 65
66 67 68 69 70
71

End 11
End Sub Sub DisplayTable(ByRef objTable As DataTable) Dim objRow As OataRow Dim objCol As OataColumn Dim i , j As Integer For j " O To objTable.Columns.Count - 1 objCol " objTable.Columns(j) Console . Write("{O} : {1} " , objCol . ColumnName , _ objCol.OataType.Name) Next Console . WriteLine() For i " O To objTable . Rows . Count - 1 ob j Row " objTable . Rows(i) Select Case objRow . RowState Case DataRowState.Oeleted ") Conso l e . Write("[Oeleted] Case DataRowState.Modified Console.Write("[Modified] ") Case DataRowState.Added

72 73 74 75 76 77 78 79 80 81 82

83 84
85

86

Dia 12 O Mtodo Update Executa os Comandos Correspondentes no Banco de Oados de Origem (continuao)

LISTAGEM 12.16

87 88 89
90

91
92 93

94 95
96 97

98

99 100 101 102 103

Console.Wri te(" [New ] ") Case DataRowState.Unchanged ") Conso 1e. Wri te (" [Unc hanged J End Select For j : O To objTable .Columns . Count 1 If objRow.RowState <> DataRowState.Deleted Then Console.Write("{OI ", obj Row. !tem(j) ) E1 se Console .Write("{OI ",_ objRow .ltem(j . DataRowVersion .Original)) End If Next Console.Wri teLine() Next End Sub End Module

Como em todos os exemp los desta lio, esse cdigo poderia ser mod ificado para trabalhar com as classes SQLCl i ent precisando apenas de algumas alteraes menores. A string de conexo te~ ria de ser alterada pe la remoo da seo Provi der, e todos os objetos declarados como classes 01 ED8 precisariam ser substitudos por seus equivalentes SQLCl i ent .

Trabalhando com Mltiplas Tabelas


Quando os dados so carregados cm um DataSet, so inseridos em tabelas individuai s, o que per~ mite que um nico DataSet possua os resultados de mui tas consultas diferentes. Depois que voc tiver um DataSet com mais de uma tabela, ser possvel especificar relacionamentos entre elas, como entre as tabelas Artist e Disc (baseado nos exemplos que desenvolvemos at agora). Todos os relacionamentos que ex istem dentro de um DataSet so representados por objetos do conjunto Re1ations , que pode ser acessado como uma propriedade do prprio objeto DataSet. Para criar um relac ionamento entre duas tabelas, use o mtodo Add do conj unto Rel at i ons. Esse mtodo possui muitas opes de parmetros, perm it indo que seja chamado de sete maneiras di~ ferente s, mas se qui sermos configurar um relacionamento sim ples com base em um nico cam~ po (coluna) da t abe l a~pai c um da tabe l a~ filha , ento, esta sintaxe funcionara bem: objNewRelation
=

objDS.Relations .Add(RelationName , ParentColumn ,Ch ildColumn)

Como exemplo dessa situao, a Listagem 12.17 cria uma conexo com o banco de dados e car~ rega as tabelas Artist e Disc em um novo DataSet. Depois que tudo for carregado, um relaciona~ menta ser estabelecido ent re as duas tabelas.

Acessando Dados com a Platafo rma .NET

347

LISTAGEM 12.17 O OataSet Reflete Algo Semelhante

Fonte de Dados

1 Modu le ModuleI 2 3 Private Const 4 sConnection As String =_ 5 "Provider=SQLOLEOB.l;" &_ 6 "Password=321dweksp302axn ; " & 7 "Persist Secu r ity Info"'True;" 8 "User ID"'sa ; " & 9 "Initial Catalog=CD;" & 10 "Data Source=(local)" 11 12 Sub MainO 13 Dim sSQLArtist As String 14 Dim sSQLDisc As String

&

15
16 17 18 19 20 21 22 23 24 25 26 sSQLArtist = "SELECT ArtistID. ArtistN ame From Artist" sSQLOisc = "SELECT ArtistID. CDTitle From Oisc" Dim ob j Conn _ As New DleDb.OleDbConnection(sConnection) Oim ob j OataAdapterArtist _ As New DleDb.OleDbDataAdapter(sSQLArtist, objConn) Oim ob j DataAdapterDisc _ As New OleDb.OleDbOataAdapter(sSQLDisc . objConn) Dim ob j OS _ As New OataSet("CD") objOataAdapterArtist.MissingSchemaAction '" MissingSchemaAction . AddWithKey objOataAdapterOisc.MissingSchemaAction '" MissingSchemaAction.AddWithKey objOataAdapterArtist.Fill (objOS . "Artist") ob j OataAdapterOi sc . Fi 11 (objDS. "Di sc")

27
28 29 30 31

32
33 34

35
36 objOS . Rel ati ons . Add ("Oi scArti s t" '_ 37 objOS . Tab 1es ("Arti st") .Col umns ("Arti stIO"). _ 38 objOS. Tabl es (" Oi sc") .Col umns ("Art i stIO" 39 End Sub 40 End Module

Com os relacionamentos definidos, possvel usar essas infonnaes para perm iti r o acesso estruturado de uma Iinha de dados-pai a qualquer Iinha relacionada com ela na tabela-filha. O cd igo da Listagem 12.18, que pode ser adicionado no local exato que antecede o final do

Dia 12

procedimento da Listagem 12. 17, executa um lao por meio dos registros da tabela Artist e exibe os CDs associados a esse artista.
LISTAGEM 12.18

Acessando as li nhas - Filhas de Qualquer linha - Pai Especfica po r Meio do Mtodo GetChildRows

2
3 4 5 6 7 8 9 10 11

Dim objDRParent As OataRow Dim objDRChild As DataRow Dim objChildRows()As DataRow For Each objORParent ln objDS.Tables("Artist").Rows Console.WriteLine("{O} {I}", objDRParent("ArtistIO to) ,_ obj DRParen t (" Art i s tName" obj Ch i 1dRows '" obj DRPa rent. GetChi 1dRows (" Di scA rt i s t") For Each objORChild ln objChildRows Console.WriteLine(" lO}" , objDRChi I d ("CDTi t I e"}) Next Next Console.Readline{)

12

13 14 15

A parte essenc ial do cdigo desse exemplo est na linha 9, em que o mtodo GetChi 1dRows do objeto DataRow usado para retornar um array de DataRows da tabela-filha. Esse array inclui todas as linhas da tabela-filha em que os campos Art i stlO da tabela-pai e da fil ha tm uma correspondncia.

Visualizaes

o ADO.NET inc lui o conceito de visualizaes de dados, a capacidade de especificar a ordem de


classificao, um fi ltro sobre as linhas e um filtro com base no estado da linha (alterada, excluda, inalterada ou nova). Essa visualizao (OataView), quando criada, pode ser acessada pe la propriedade Oefaul tV i ew da prpria tabela ou pelo conjunto ReI ations, que uma propriedade do prprio DataSet. A Listagem 12. 19 apresenta o cdigo-padro para a abertura de um banco de dados, o preenchimento de uma tabela com dados e, em seguida, a criao de um objeto O ataV i ew usando a tabela como seu construtor. Depois que a visualizao for gerada, ela poder ser configurada com uma combinao aleatria de trs propriedades diferentes: RowStateFil ter, Sort e/ou RowFil ter. A visualizao propriamente dita pode ser vinculada a um cont role dos forrnulrios Windows (veja a prxima seo para obter informaes sobre a vinculao de dados), ou voc pode acessar seu contedo diretamente como um conjunto de objetos OataRowView.

Acessando Dados co m a Platafo rma .N ET

349

LISTAGEM 12.19 Vrios Objetos DataView Apontando para o Mesmo DataTable

1 Modu le ModuleI 2 Private Const 3 sConnection As String =_ 4 "Provider=SQLOLEOB.l;" &_ 5 "Password= ; " & 6 "Persist Security Info"True " & 7 "User ID"sa ; " &_ 8 "Initial Catalog=CD;" & 9 "Data Source"(local)"

10
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Sub Main() Dim sSQLArt i st As String sSQLArt i st" "SELECT ArtistID , ArtistName From Artist" Dim objConn _ As New OleDb.OleObConnection{sConnection) Dim objDataAdapterArtist _ As New OleDb.OleObDataAdapter(sSQLArtist, objConn) Dim objDS _ As New DataSet{"CD") objDataAdapterArtist.Missi ngSchemaAction " MissingSchemaAction . AddWithKey objDataAdapterArtisLFill (objOS , "Artist") Dim objDR As DataRow Console.WriteLine{"Na tabela " ) For Each objOR l n objDS . Tables("Artist") . Rows Console.W r it eLine{" {O} {l}" , obj OR{"ArtistID"J._ objOR{"ArtistName" Next Dim objDV As OataView objOV "New OataView{objDS.Tables("Artist" objOV . Sort" "ArtistName" objOV . RowFilter" "ArtistIO < 8" Dim objDRV As DataRowView Console . WriteLine{"No objeto DataView") For Each ob j ORV ln objOV Console.WriteLine("{O} {l}" , objORV("ArtistID") ,_ objORV("ArtistName" Next Console.Read Line{)

36
37 38 39 40 41 42 43 44

Dia 12 12.19 Vrios Objetos OataView Apontando para o Mesmo DataTable

LISTAGEM

(continuao)
45 End Sub 46 End Module At a linha 22 no temos nada to diferente dos outros exemplos que vimos at aqui: uma conexo com o banco de dados foi aberta, e os dados foram carregados em um DataSet. Depois do carregamento de dados, um lao rpido (linhas 26 a 30) os exibiu sem dar a impresso de que percorreu um objeto DataView (na verdade percorreu a visuali zao de dados-padro). Em seguida, um objeto OataView foi criado e configurado com uma ordem e um filtro sobre os valores das linhas (linhas 32 a 35). Para concluir, esse objeto Da ta Vi ew foi usado para acessar as linhas (linhas 39 a 43), dessa vez exibindo-as aplicando sua ordem e filtro. O resultado desse cdigo, presumindo que voc tivesse feito todos os exemplos at este ponto, deve se parecer com o apresentado a seguir: Through Table 1 Natalie Imbruglia 2 The Trag ica ll y Hip 3 Sting 4 Queen 5 Soney M. 6 Sarenaked L adies 7 Kent Sharkey 8 Janet Jackson 9 Matchbox Twenty 10 Madonna 40 Kent Sharkey Through DataView 6 Barenaked Ladies 5 Soney M. 7 Kent Sha rkey 1 Natalie Imbruglia 4 Queen 3 Sting 2 The Tragically Hip Mesmo se sua sa da no estiver exatamente igual ao texto anterior, observe que na li sta Through Table, I I linhas foram exibidas por ordem de identificao do artista. Em Through DataView, as linhas foram acessadas por me io da visuali zao recm-criada, e o resultado reflete tanto o filtro quanto a ordem.

Vinculao de Dados
A vinculao de dados fornece lima maneira de associar um elemento da interface com o usuri o, como uma grade, a uma fonte de dados, como um objeto OataTable ou DataSet. Depois que

Acessando Dados com a Plataforma .NET

351

um elemento da interface vinculado a uma fonte de dados, as alteraes nessa fonte sero refletidas na interface com o usurio, e as que afetarem os dados por meio da interface sero, por sua vez, retornadas fonte de dados. Para o desenvolvedor, a vinculao de dados resolve todos os problemas comp lexos de manipular as interaes do usurio com os dados e elimina a necessidade de escrever um cdigo extenso apenas para fornecer um meio de o usurio interagir com seus dados. Um recurso interessante e poderoso da vinculao de dados da plataforma .NET que ela no limitada a trabalhar com DataSets. Na verdade, uma ampla variedade de objetos pode usar a vincu lao de dados, incluindo Arrays, Coll ecti ons, OataVi ews, OataSets, OataTabl e e outros. Em nossos excmplos, trabalharcmos apenas com DataSets, OataVi ews e OataTables, mas existe o potencial para vincular todo tipo de informaes Quando um objeto DataSet ou DataTable vinculado a um controle da interface com o usurio, a vinculao na verdade se d com a visualizao-padro (objeto DataV iew ou DataSetView) de DataTable ou DataSet.

NOTA

No universo da plalafonna .NET, dois lipos principais de interfaces com o usurio podem ser criados: o cliente Windows sofi sticado (System. Wi ndows. Fonns) e o cl iente da Internet WebFonns. Os detalhes da vinculao sero abordados na prxima seo junto a um exemplo passo a passo ocorrendo entre um dalasel e uma grade. A vinculao de dados nos fonnulrios da Web e o acesso geral aos dados do ASP.NET no sero detalhados nesta lio.

Vinculao de Dados com os Formulrios Windows


Todos os contro les dos formu lrios Windows que do suporte vincu lao de dados vm em duas verses pri ncipais: os que do suporte vinculao simples e os que podem manipular a vincu lao complexa. A vinculao simples acontece quando uma propriedade de um controle associada ao campo de uma fonte de dados. A vinculao complexa ocorre quando o controle associado a uma fonte de dados comp leta (como um objeto DataTable), e entre os objetos embutidos ela tm suporte apenas dos controles DataGrid e ComboBox.

Vinculao Simples
Os controles que do suporte vinculao simples expem um conjunto DataBindi ngs que pode ser usado para vincu lar as propriedades a campos de dados. A Listagem 12.20 fornece um exemplo desse tipo de vinculao de dados como parte de um aplicativo com formulrios Windows. Para voc testar esse cdigo, crie um novo aplicativo Windows no Visual Basic e insira apenas uma caixa de texto e um boto no formulrio. Deixe os contro les com seus nomes-padro (textboxl e Buttonl) e inclua esse cdigo no evento Cl;ck do boto.

Dia 12

LISTAGEM 12.20

A Vinculao de Dados Pode Ser Criada Dinami camente em Cdigo

1 Private Sub buttonl_C l ick(ByVal sender As System.Object . 2 ByVal e As System.EventArgs) 3 Handles buttonI.Click 4 Dim sConnection As String = 5 "Provider=SQLOLEDB . I ; " & 6 "Password=;" &_ 7 "Persist Security Info=True ; " & 8 "User IO=sa ; " & "Initial Catalog=CO;" & 9 10 "Data Source=(local )"
11

12
13
14

15 16 17 18
19

20
21

Oim sSQL As String sSQL '" "SELECT ArtistIO . ArtistName From Artist" Dim objConn _ As New OleDb.OleObConnection(sConnection) Dim objDataAdapter _ As New OleOb.OleDbO ataAdapter(sSQL . objConn) Dim objOS _ As New OataSet("Artists") Dim objDV As OataView Try objConn.Open() Catch myException As System.Exception Windows . Forms.MessageBox.Show(myException.Message) End Try If objConn.State '" ConnectionState . Open Then Try obj Oa taAdapter. Fi 11 (obj OS, "Di sc") objConn . Close() Dim objTable As DataTable obj Table -; objoS . Tables("Disc") obj OV '" objTable . OefaultView textBoxl.DataBindings .Add("Text", objDV,_ "ArtistName") Catch myException As System.Exception Windows . Forms.MessageBox .Show(myException.Message) End Try End 11 End Sub

22
23

24 25 26 27 28
29 30 31

32
33

34 35 36 37
38

39 40
41

42 43

Acessando Dados com a Platafo rma .N ET

353

Alm do trecho inteiro de cdigo que voc j conhece (linhas I a 34) abrindo a conexo com o ataSet, a linha no final do procedimento (linha 37) que realbanco de dados e obtendo um D mente cria a vinc ulao de dados. O mtodo Add do conjunto Da taB i ndi ngs perm ite a especificao de uma propriedade do controle e da fonte de dados (nesse caso a visuali zao de dados-padro da tabela). Depoi s que isso for feito, o valor do campo Arti stName ser exibido (veja a Figura 12.6). Isso no to til assim, considerando que voc est visualizando s o primeiro registro e no tem COmO se mOver para a frente ou para trs atravs dos dados. Para fornecer uma funcionalidade como essa quando voc usar a vincu lao simples de dados, ser preciso aceS5ar o conjunto BindingContext do formu lrio-pai. Ao especificar a fonte de dados na qual est interessado, voc poder obter um objeto Bi nd i ngContext para ela.
FIGURA 12.6
,I!I'"..,.'
IIIII(JEI

Podemos ler ///1/(/ \'illculao simples de dados com rrios eomroles diferemes ao mesmo tempo. permitindo que voc exiba os campos de seus dados de vrias maneiras.

No exemplo a seguir, a fo nte de dados original no uma varivel no nvel do formulrio, portanto, o cdigo a acessa percorrendo o conjunto DataBi nd ; ng5 da caixa de texto. S h uma vinculao de dados, assim, especificar um ndice igual a zero retornar somente a fonte de dados disponvel. Com esse objeto de contexto, se tem acesso a vrias propriedades e mtodos para criao de uma interface que trabalhe com os dados vincu lados. Uma propriedade em particular, Position, til porque perm ite que voc se mova para a frente e para Irs atravs dos dados conforme desejar. Se adicionar um segundo boto ao formulrio e inserir um cd igo nele, voc ter a capacidade de se mover para adiante na lista de arti stas. Observe que no h nenhum recurso avanado nesse cdigo; ele ser interrompido se voc tentar ultrapassar os dados disponveis: Private Sub button2_Click(ByVal sender As System .Dbject , ByVal e As System.EventArgs) Handles button2.Click Me.Binding Context(text Boxl .DataBindings(O).OataSource).Pos i tion += 1 End Sub Esse objeto de contexto expe outros recursos como AddNew e CancelCurrentEdit, tornando-o um objeto com o qual voc trabalhar freqUentemente.

354

Dia 12

Vinculao Complexa de Dados


Novo TERMO

Vincular controles a uma fonte de dados inteira, em vez de a um nico campo, chamado de vincu/acio complexa de dados. Esse tipo de vinculao de dados tem su-

porte de dois dos controles que vm com o Visual Stusio .NET, DataGrid e ComboBox. Para configurar a vinculao de dados com um desses controles, voc definir a propriedade Oata-

Source do controle com o objclO apropriado (DataView neste caso, mas poderia ser Array, Col lect;on, DataSet e outros). Se OataSource tiver mais de um objeto que puder ser vinculado

(como um DataSet com mais de uma tabela), ento, especifique o item apropriado como um vaIar ai fanum rico na propriedade Da taMember. Portanto, se vincular DataGri d a um Da taSet, ter de fornecer o nome da tabela como a propriedade DataMember. Ocd igo para faze r isso seria idntico ao da Listagem 12.20, exceto pelo fato de ser preciso substituir as linhas 36 a 38 pe las descritas a seguir: dataGr idI.OataSource dataGridI .OataMember
= =

objDS "Disc"

Para que voc mesmo teste a vincu lao complexa, crie um novo apl icativo Windows e insira um boto e um controle OataGrid no fonnulrio (os dois esto disponveis na caixa de ferramentas). Deixe tudo com os nomes-padro e insira o cdigo da Listagem 12.20, incluindo as alteraes descritas anteriormente no evento Cl i ck de seu boto. Como resultado desse cdigo, depoi s que o boto for clicado, o controle OataGrid ser vinculado a ele e, portanto, exibir a tabela Artists de se u DataSet. Seu fo rmulrio pode no ter exatamente a mesma aparncia da Figura 12.7, mas deve ficar semelhante.
FIGURA 12.7

::!I''''''''

"filEi

Um COIIII'o/e DataGrid cria 1/m ambiente de aparllcia profi ssiollal sem ser necessria milita codificac7o.

Resumo o acesso a dados fo i totalmente redesenhado paraa plataforrna .NET, mas ainda d suporte a tecnologia subjacente do OLEDB. Usando os provedores de OLEDB (drivers), voc poder criar cd igos que sero executados em quase todos os bancos de dados necessrios, sendo prec iso apenas aprender uma manei ra de programar aplicvel a todos eles. Empregando a natureza desconectada dos DataSets, possvel gerar sistemas comp letamente interativos que no ocupem

Acessando Dados com a Platafo rma .N ET

355

conexes vai iosas com os bancos de dados. Ao construir interfaces reais com o usurio, a vinculao de dados lhe proporcionar uma maneira rpida e fcil de exibir seus dados em um form ulrio Windows.

P&R
P Em todos os exemplos desta lio, minha string de conexo estava embutida em cdigo. J que ela inclui minha identificao de usurio e senha, isso no me parece muito seguro.
R Excelente observao. Nos cdigos desta lio, a string de conexo foi inserida diretamente no arquivo. vb, que bem pouco seguro. Uma idia melhor, quando voc no est iver apenas desenvolvendo exemplos, seria inserir o valor da string de conexo no Registro ou em um arquivo de configuraes no disco. Isso fei to no s por razes de segurana; no inserindo sua string de conexo no cdigo, ser possvel a lterar os parmetros da conexo com o banco de dados, assim como de outras conexes, sem recompilar seu sistema.

P Ao atualizar o banco de dados, o que acontecer se o registro a ser atualizado tiver sido alterado depois que voc extraiu seus dados originais? R Quando lidar com atualizaes em um banco de dados, voc deve estar atento aos problemas de simultaneidade, em que duas ou mais pessoas a lteram os mesmos dados no mesmo momento. No caso dos OataSets, j que foram projetados para ser usados off-line, provvel que o perodo entre o down load e a atualizao seja re lativamente longo. Durante esse tempo, o utro usurio poderia ler alterado esses mesmos dados de alguma manei ra. Se usarmos os comandos de atualizao gerados de modo automtico, eles incluiro um cdigo que verifica esse probl ema antes de alUalizar. Caso contrrio, se constru irmos os comandos manualmente, ns mesmos leremos de confrontar os dados originais com os aluais no banco de dados.

Workshop

o Workshop foi planej ado para aj ud-l o a antecipar poss veis dvidas, revisar o quej aprendeu
e comear a pensar em como colocar se u conheci mento em prtica. As respostas do teste esto no Apndice A, "Respostas dos Testes/Exerccios".

Teste
I . Que propriedade voc precisa configurar (e com que valor) para forar o adaptador de dados a criar informaes sobre a chave primria quando carregar os dados em um OataSet?

356

Dia 12

2. Qual a diferena entre o mtodo Del ete de um objeto DataRow e o mtodo Remove do ohjeto Da taRowCo 11ec t i on?

3. Como voc deve executar esta instruo SQL?

DELETE FROM Artist Where ArtistID=3?

Exerccos
I. Crie um aplicativo Windows que use as classes que voc aprendeu nesta lio para rorne cer uma interface com o usurio que visualize, altere, adicione e exclua itens de seu banco de dados de CDs.

SEMANA

DIA
Usando o Server Explorer
Um dos principais objetivos de um ambiente integrado de desenvolvimento (IDE - lntegrated Developrnent Environrnent) fornecer fe rramentas que no esto dispon veis para os desenvolvedores que usam compi ladores de linha de comandos com um ed itor de texto. Elas podem ser recursos aperfeioados de ed io e depurao - ferramentas que permitem aos programadores desenvolver cdigos melhores e mais rpidos. Um bom IDE tambm pode incluir recursos que ajudem os desenvolvedores a gerar cd igos sem que seja preciso escrev-los. Os suplementos e assistentes que fazem parte do IDE do Visual Basic .NET so lodos desse tipo. O Servcr Explo-

rertambrn se encontra nessa categoria. Ele um recurso do Visual Basic .NET que proporciona um controle fci l dos vrios servios que compem o sistema operacional. Alm disso, ele permite que o desenvolvedor crie rpida e comodamente cd igos para usar esses servios. Nesta lio, aprenderemos O que o Server Explorer. A explorar os servios. A trabalhar com os servios. A escrever programas que usem os servios.

o Que o Server Explorer


O Server Explorer uma fe rramenta que est disponvel no IDE do Visual Basic .NET. Como o Exp lorer e o Internet Explorer, ete permite a pesquisa de um conjunto de recursos. Em vez de

358

Dia 13

pesquisar pastas em um disco rgido ou site da Web, disponibiliza a pesquisa em vrios servido res de sua rede e a visualizao dos servios que esto em execuo ne les. Alm disso, voc pode controlar ou escrever um cdigo para usar alguns servios, tudo a partir do Server Explorer. Ele pode ser visto na Figura 13.1. Se no est iver visvel, pode ter sido fechado anteriormente. Abrao selecionando View e Server Explorer no menu.
FIGURA 13.1 O Se/Ter Explorer.

(II . .,.,.

1/>/100'

""'.. ,"""_~

1131100"' _ _--.,

__ ....... I. M ''''0'' J ow

o Server Explorer apresenta uma Iista hierrqu ica dos servios disponveis no computador selecionado. Por padro, ele s exibe os serv ios que se encontram no computador de desenvolvi-

mento, mas voc poder adicionar outros quando necessrio. Esses podem ser divididos em duas amplas categorias: Conexes de dados E semelhante ao ambiente de dados disponvel no Visual Basic 6 (presumindo que voc tenha usado essa verso). Permite a conexo e visualizao dos bancos de dados sem ser necessrio sair do ambiente do Visual Basic .NET. Este recurso possui algumas fina lidades bv ias caso voc tenha de desenvolver uma programao extensa para acessar e atualizar os bancos de dados, que um dos principais usos no Visual Basic .NET. Servidores Esta a lista de servidores com os quais voc est conectado e os servios que esto em execuo (ou disponiveis) em cada um deles. As informaes desta seo incluem a capacidade de acessar os registras de eventos e a monitorao do desempenho nesses computadores, assim como outros servios, por exemp lo, filas de mensagens, o SQL Server e assim por diante. Usaremos o Server Explorer nesta lio concentrando-nos em duas de suas principais funes: visual izao de informaes e desenvolvimento de programas.
,

Usan do o Serve r Ex pl o rer

359

o Que um Servio?
NOVOTeRMO

o servio um programa executado em segundo plano, que fornece algum recurso

para complementar Osistema operac ional. Esses recursos podem inclui r programas que trad icionalmente so considerados servidores, como servidores de bancos de dados (por exemplo, o Microsoft SQL Server), servidores Web (como o Microsoft IIS) ou servidores de correio (como o Microsoft Exchange). Como altemativa, o servio pode fomeceralgum recurso adicional que outros programas podem utiliZc1r, como a monitorno do desempenho ou o registro de eventos. O Windows 95, o 98 e o ME fornecem muito menos servios do que o Windows NT ou o 2000.

Em geral os servios possuem um programa que usado na visual izao de informaes sobre ele. Por exemplo, o Event Viewer permite que voc visualize os registros de eventos de um computador, ou o SQL Server Enterprise Manager dispon ibiliza a visualizao e administrao de um SQL Server. O Server Exp lorer complementa essas ferramentas permitindo a utilizao dos servios sem ser necessri o sair do IDE.

Examinando os Servios
Para visualizar o Server Explorer, selec ione-o no menu View. Por padro, ele aparecer no lado esquerdo do IDE. Como acontece com outras telas, ele pode ser 'mant ido aberto' ou configurado para des lizar automaticamente para fora do cam po visual quando no for mais necessri o. Em um computador que estiver executando o Windows 2000 com o Microsoft SQL Server instalado, ele aparecer como mostrado na Figura 13.2. Em outro computador, com servios diferentes instalados, esses provave lmente aparecero.
.
_~_

...... v_ - - - !o* _ _

FIGURA 13.2

e-_

t"O

t.'09

O Se/wr ExploreI'.

aJ li ' ,.;:

II QII J -.

e. .,. .. : . Q.

-..

...-. ,,,....,,,...,..
,
o" ........... ,
~'"""._

""" ''''''
,~,

OIIII}(>(I,

01111'00' ./lI'O'>I

360

Dia 13
. ......... ~'''''"'''''-*[_l ''..._ 1:1'> ~ \'10'< ,""" _ aO\>
oil ' Ill'~ "CII

FIGURA 13.3

--

VislIali=alldo conexes

a_

II!.' .c IJQ

de dados COIII o Serre,. Explore,..

.... " .... ' .",,, ~ ....... ,


....... 'T...

"'0/2001 tn/>OO l
tIl0/2001

TC",,,,"".

tI1I>OOl

....... . ,,," ,, _

.... , 6"'"

Em princpio, s um link, Add Connection, deve estar disponvel na pasta Data Connections. Dar um cliq ue duplo nessa opo trar a caixa de dilogo Data Link Propel1ies (veja a Figura 13.4). Essa caixa de dilogo permitir que voc configure uma nova conexo de dados. As opes que so selec ionadas nessa cai xa variam dependendo do tipo de dados com os quais se quer coneclar. As configuraes esto divididas entre vrias guias da caixa de dilogo.

A g uia Provider usada para selecionar o provedor que ser empregado na conexo com o banco de dados. Dependendo de quais provedores voc tiver instalado, pode haver muitas opes. A Figura 13.4 mostra os provedores disponveis em minha mqu ina.

FIGURA 13.4

Prol'edores ins/alados

pal'a acesso (/ dados.

Usando o Server Explorer

361

Alguns dos provedores mais usados para o acesso aos dados so: Microsoft Jet4 .0 OLE OB Provider soft Access (arqu ivos .mdb). Permite o acesso aos bancos de dados do Micro-

Microsoft OLE OS Provi der for oose Oatabases Permite o acesso a qualquer banco de dados que possua um driver de ODBC instalado. Muitos drivers de OOSC esto disponveis, pOl1anto, esse provedor pode ser usado para acessarquase todos os bancos de dados existentes. Porm, ele s deve ser empregado em llltimo caso porque acessa as informaes utili zando tanto o OLE DB quanto o ODBe. J que h mai s camadas entre seu programa e o banco de dados, esse em geral o provedor mais lento. Microsoft OLE OB Provi der for Oracle Oracle. Microsoft OLE OS Provider for SQL Server do Microsoft SQL Server. Permite o acesso aos bancos de dados do Perm ite o acesso aos bancos de dados

Dependendo do provedor que voc selecionar nessa etapa, diferentes opes estaro d isponveis nas outras guias. A Tabela 13. 1 resume as opes disponve is na gu ia Connection.
TABElA 13. 1 Opes da Caixa de Dilogo Data li nk Properties

Campo
Select, or enter a database name User name Password Select, or enter a server name Select the data base o n the server

Provedor
Access Todos Todos SOL Server

Finalidade
Este campo identifica o banco de dados do Access (arquivo MOS) com o qual se conectar. A con t a do usurio a ser usada na conexo com o banco de dados. A senha a ser usada na conexo com o banco de dados. Este campo id ent ifica o servidor com o qual se conect ar. Selecione '(local) ' para se conectar com seu prprio computador se voc estiver execut ando o SOL Server localmente. J que o SQL Server pode conter vrios bancos de dados, este campo identifica com qual dos existentes no servidor se conectar. As guias Advanced e Ali raramente so usadas. A guia Advanced contm configuraes que a maioria dos usu ri os no precisa definir, baseadas no provedor selecionado. A guia Ali apenas outra maneira de acessar todas as propriedades. Em vez de ter vrios campos para editar, essa guia uma lista de todas as propriedades, que voc pode editar. Este boto permite que voc teste os parmetros da conexo. Isso far com que o IDE tente se conectar com o banco de dados. Uma conexo bem-sucedida garantir que o banco de dados possa ser acessado.

SQL Server

Test Connection

Todos

362

Dia 13

Depois de inserir todas as informaes necessrias para acessar seu banco de dados, d um clique no boto Test Connection para confirmar. Se o resultado for uma caixa de dilogo exibindo ' Test Connection Succeded ', d um clique em OK para fech-la e continuar. Caso contrrio, a caixa de dilogo deve sugerir uma mane ira de corrigir o erro (em geral a causa a falta de definio de lima configurao em algum local). Corrija o erro e teste a conexo novamente.

Depois de se conectar a um banco de dados, ele deve aparecer na seo Data Connect ions do Server Exp lorer. Dependendo de seu tipo, a entrada possu ir vrias sees . A Figura 13 .5 mostra os itens existentes para alguns dos tipos de bancos de dados disponveis.
A Tabela 13.2 descreve os tipos de itens que voc deve ver para os diversos bancos de dados com os quais normalmente pode se conectar.

FIGURA 13.5
Data COImeclions.

t<O:

""" _

!lO\>

.il h~ QQII

.l_ r. . . . ,o.Q

- ~ ~ m~"~

..

"., ......,
, -~........

OI,",V2001

........,

,c..........
""""","

.....,..,

""012001

.,

TABELA 13.2
Objero

Objetos de bancos de dados


Descrio

Tables (tabelas)

Contm uma lista de t odas as tabelas armazenadas em um banco de dados. Uma tabela um ag rupamento de informaes. Por exemplo, ela pode conter informaes sobre os funcionrios de uma empresa. os produt os que ela vende ou itens semelhantes relacionados. Em geral, esta a seo disponvel mais importante de Data Connections. Contm uma lista das visualizaes de dados do banco de dados. A vi sualizao uma maneira de examinar as informaes - por exemplo, ela pode no exibir todos os campos, ordenar as informaes de um modo diferente ou incluir dados de vrias tabelas. Contm uma lista dos prog ramas armazenados no banco de dados. Ai esto includas as consultas que podem retornar informaes, assim como programas que podem exclui r, atualizar ou inserir dados.

Views (visual izaes)

Stored procedures (procedimentos armazenados)

Usando o Server Explorer

363

TABELA 13.2

Objetos de bancos de dados (continuao)


Descrio

Objeto

Functions (fun es)

Semelhante aos procedimentos armazenados. porm. as funes so especficas para alguns bancos de dados. Em geral so usadas para retornar pequenos trechos de informao e. por enq uanto, so parecidas com as funes que usamos no Visual Basic .NET. Em geral s6 so encontrados no SQL Server. So usados para documentar o banco d e dados e para forn ecer uma descrio visual de suas tabelas. (Veja a Figu ra 13.6 para um exemplo.)

Databasediagrams (d iagramas de bancos de dados)

FIGURA 13.6

!!lo to<

Diagrama de bal/co de dados.

"'*" I)000o , . . _ ......... jI . \:I . ~ "QII lr.ltll e. . . .. .t' . 1:1.


_
~

1>* _

.,.

'-

~~"~~~,~~~Q.~~;';;.:~, ~.; " ;~~;~'~"'~"'""~,,~,~ :'-__~",c~,a,.c-____~.".~ ..c; .~ ~ '-; " ~ " ~, .

It' -.

.f
!

Caminho a Ser Percorrido para Estabelecer uma Conexo com o Banco de Dados
Como descrevi anteriormente, a seo mais importante de Data Connections so as tabelas. Elas representam um conjunto de informaes armazenadas no banco de dados. Com esse objeto, voc pode visualizar os dados do banco de dados, alterar as tabelas e assim por diante. Usaremos o Data Connections para a conexo e visualizao de um banco de dados. Empregaremos o ban co de dados Northwind que vem com o Vi sual Basic .NET como exemp lo. 1. D um cl ique duplo em Add Connect ion para acessar a cai xa de dilogo Data Link Pro perties. 2. Selecione a guia Provider e Mi crosoft Jet 4.0 OLE DB Provider. D um cliq ue em Nexl. 3. D um clique no boto prximo ao cam po Selecl or Enter a Database Name. Navegue para encontrar um banco de dados do Access. Deve haver um em %di rectory to Vi sua 1

364

Dia 13

Bas i c . NET% \Corrmon7\ Too 1S\Si n\nwi nd . mdb. D um clique em OK para aceitar esse banco de dados .
4 D um cl ique no boto Test Connect ion. Uma caixa de dilogo deve aparecer informando que a conexo fo i bem -sucedida. Caso contrrio, certifique-se de que haja um banco de dados 110 local selecionado. D um clique em OK para aceitar essa conexo de dados.

5. A conexo resul tante possui vrias tabelas, visualizaes e procedimentos armazenados.


Abra a pasta Tables e d um clique duplo na pasta Employees. Uma nova janela deve ser aberta, mostrando a lista de funcion rios da empresa Northwind. Tambm deve ser possvel dar um clique em outras tabelas para abri-Ias e visualizar os dados nelas ar-

mazenados.

Faa
No faa nenhuma alterao no banco de dados agora. Se voc alterar esse banco de dados, outros exemplos ou aplicativos podem no funcionar. Apenas examine as informaes por enquanto. Se quiser tent ar faze r alteraes em um banco de dados, crie um para teste.

Trabalhando com os Servios


Alm de permitir que voc visualize os bancos de dados, o Server Explorer tambm torna fcil o acesso, a visualizao e o controle dos servios. Bem, o que um servio? Um servio um aplicativo que executado em segundo plano, fornecendo alguns recursos ao sistema operacional. Eles so fami liares aos desenvolvedores que tm usado o Windows NT c o Windows 2000. No entanto, os que utilizam o Windows 95, o 98 ou o ME podem no conhec-los tanto porque esses sistemas operacionais tendem a ter menos servios em execuo. Alguns dos servios processados no Windows NT e no 2000 so o registro de eventos (um registro central que envolve o sistema, a segurana e os aplicativos), os contadores de desempenho (registram diversos valores significativos relativos ao sistema operacional e outros aplicativos) e o spooler de impresso (gerencia os trabalhos de impresso). A lm desses, outros serv ios podem ser instalados, como o 11 5, o SQL Server (banco de dados) ou o Message Queue Server (perrn ite a comunicao assncrona, ou desconectada, de um aplicativo com o outro, semelhante ao correio eletrnico). No Windows 95, no 98 e no ME, os servios fazem parte do prprio sistema operacional ou so programas que costumam aparecer na barra de tarefas.

Usando o Server Explorer

365

Visualizando os Servios
Exatamente como as opes do Data Connections, os serv ios do Server Explorer variam, de~ pendendo do que est iver instalado e em execuo no computador. Alguns dos itens do Server Exp lorer esto descritos na Tabela 13.3. Esses so os que esto disponveis enquanto escrevia este texto; muitos outros podero ser disponibilizados posteriormente.
TABELA

13.3

Servios do Server Explorer

Servio
Registro de eventos (Event Log)

Descrio
Fornece acesso aos arquivos de regiSlro dos aplicativos (Application), da segurana (Security) e do sistema (System) do Windows NT ou do 2000. Esses arquivos de registro contm erros e outras informaes sobre os aplicativos que esto em execuo no computador. Isso proporciona a mesma funcionalidade do aplicativo Event Viewer, sem que seja necessrio sairdo IDE do Visual Basic .NET. Fornece uma lista de todas as DLLs carregadas na memria e dos programas que as utilizam. Essa lista pode ser longa, dependendo do que voc esteja executando em um dado momento. Pode ser til para se saber se uma DLL especfica est carregada na memria e, caso esteja, se est sendo usada por um aplicativo. Permite ao servidor acessar o Windows Management Information (WM I). O WMI um meio de consultar informaes em um computador. Essas informaes variam de valores simples, como a CPU ou o sistema operacional instalado, a programas em execuo, e so precisas como as configuraes das impressoras instaladas. O WMI uma ferramenta poderosa e melhor quando usada para recuperar informaes, e no para alter-Ias. Concede acesso a dados sobre o desempenho do computador. O Windows NT e o Windows 2000 registram constantemente informaes quando voc executa seus programas. A esto includas info rma es sobre o tempo necessrio para executar tarefas, a memria uti lizada e muito mais. Podem ser acessados para avaliar a uti lizao da CPU, a memria e assim por diante. Fornece uma lista de todos os aplicativos em execuo. Voc pode se surpreender ao ver quantos programas so processados em seu computador. Mostra uma lista dos servios em execuo no computador. Esses so os aplicativos processados em segundo plano. Um 6timo recurso que voc pode usar essa seo para inicarou encerrar os servios (dependendo da segurana). Fornece mais uma maneira (a seo Data Connections a outra) de acessar os bancos de dados do SQL Server. Disponibiliza informaes semelhantes Data Connections (no entanto, s sobre os bancos de dados do SQL Server). Fornece uma lista dos servios da Web instalados no computador (para obter mais delalhes, veja o Dia 21, NCriando Servios da Web com o Visual Basic .N ET). Fornece uma lista das fila s de mensagens disponveis . Elas so usadas quando so criados aplicativos com base em mensagens (porm no se aplicam a aplicativos de correio eletr6nico).

Mdulos carregados (Loaded Modules)

Dados de gerenciamento (Management Dala)

Contadores de desempenho (Performance Counlers)

Processos (Processes)

Servios (Services)

Bancos de dados do SQL Server (SQL Serve r Dalabases) Servios da Web (Web Services) Filas de mensagens (Message Queues)

366

Dia 13

Conectando-se com Outro Servidor


Para examinar alguns dos serv ios listados na Tabela 13.3, pode ser necessrio se conectar a um servidor. D um clique duplo no item Add Server do Server Explorer, digite um nome de servidor vlido na caixa de dilogo (veja a Figura 13.7) e d um clique em OK. Voc deve poder (dependendo da segurana da rede) visualizaras servios carregados nessa mquina, assim como os da s ua. Voc pode especificar lima conta de usurio diferente para ser usada se esse tiver direito de acesso a outro computador.

FIGURA 13.7 Adicionando oulro

'O_lo ..... _ .......... -.... _, ... ...


~

_ _,

servidor.

., ,------"""'" '11M M" ..... " "C"

Voc pode usar esse recurso para se conectar aos serv idores com os quais trabalha. Por exemplo, muitos desenvolvedores precisam acessar um servidor de banco de dados, um de teste, e possivelmente um servidor Web quando desenvolvem um programa. O Server Explorer permitiria a conexo com todos os trs quando fosse preciso monitorar e/ou em pregar os servios.

Escrevendo Programas Que Usam os Servios


Um dos recursos mais interessantes do Server Explorer que ele pennite que voc no s visualize os servios e trabalhe graficamente com eles, mas tambm que escreva com facilidade aplicativos que se comuniquem com eles. Por exemplo, os objetos disponibilizados pelo Server Exp lorer podem ser usados para incluir em um aplicati vo o acesso aos dados. A lm disso, poss vel adicionar objetos a seu aplicativo que possam controlar ou interagi r com os servios como ler contadores de desempenho ou ainda ler ou gravar informaes nos registros de eventos do Windows NT ou do Windows 2000. Esses so recursos que precisavam de uma codificao extensa e agora podem ser obtidos em algumas linhas, com a alterao das propriedades e execuo dos mtodos dos objelos que os representam .

Escrevendo Cdigos de Acesso a Dados com o Serve r Explorer


Embora o Server Explorer sej a ti l quando se quer visualizar os servios, se torna muito mais quando a inteno acess-los. Ele pode ser usado na criao de cdigos extensos, poupando-o de ter de desenvolv-los - por exemplo, na criao de aplicativos de acesso a dados. Em geral,

Usando o Server Explorer

necessrio escrever (como voc viu no Dia I I, "Introduo aos Bancos de Dados", e no Dia 12, "Acessando Dados com a Plataforma .NET") o mesmo tipo de cd igo para rec uperar informaes e exibi-Ias para o usurio. Por que perder tempo COm isso, se seu com putador pode faz-lo para voc? Criaremos um aplicativo simples para visua li zar os dados de urna tabela em um banco de dados. Usare i o banco de dados Northwi nd; voc pode escolher qualquer banco de dados COlll o qual tenha uma conexo de sua mquina. Depois que tiver uma conexo vlida com um banco de dados no Server Explorer, crie um novo projeto de aplicati vo Windows. O meu se chama DataView; voc pode usar esse nome (no est patenteado ou algo semelhante) ou esco lher outro. Depois de criar o proj eto, excl ua o formulrio original dando um clique COm o boto direito do mouse sobre ele no Solution Explorer e se lecionando Delete. Aceite o aviso. A seguir, d um clique com o boto direito do mouse no projeto e selecione Add e Add Windows Form. Nomeie o fonnu lrio resultante como Customers. D um clique com o boto direito do mouse no projeto pela ltima veze selecione Propert ies. Configure o objeto de inicial izao (Startup object) como Customers e selecione OK. Como sem pre, a prime ira etapa na construo de um apl icat ivo do Visual Basic .NET adicionar os controles ao formu lrio. Em nosso caso, teremos uma interface com o usurio si mples - nada a no ser uma grade . Selecione o controle Da t aGri d na caixa de ferramentas e adicione-o a seu formulrio. Con fi gure as propriedades como mostra a Tabela 13.4.
TABELA 13.4
Controle

Propriedades da Grade de Dad os


Propriedade Valor

Form DataGrid

Text
Name Dock CaptionText

Customer listing dbgCus tomers Fi 11 Customers

Voc tambm pode querer usar o recurso AutoFormat (ou configurar manualmente os valores) para fazer com que a grade fique com uma boa aparncia. A seguir, queremos ad icionar o cdigo para o acesso aos dados. Em vez de faz-lo manualmente, no entanto, usaremos o Server Explorer. Selecione uma tabela em seu banco de dados (escolh i a tabe la Customers de Northwind), arraste-a do Server Exp lorer e solte-a no formu lrio. Dois ohjelos novos aparecero no form ulrio - OleDbConnecti onl e 01 eObDataAdapterl (veja a Figura 13 .8).
O objeto 01 eObConnect i onl , como voc j deve ter adivinhado, a conexo com o banco de dados. O objeto OleDbDataAdapterl o componente que extrai (e salva) as infonnaes do banco de dados. Altere o nome dos controles conforme mostra a Tabe la 13.5.

Dia 13

TABELA 13.5

Propriedades da Conexo e do Coma nd o


Propriedade
Name Name

Controle
01 eDbConnection 01eDbDataAdapter

Valor
ConNW CmdClfstomers

Agora vem a parte di vert ida. D um clique com o boto direito do mouse no adaptador de dados cmdCustomers e selecione Generate DataSet; configure o nome como Customer$et e marque a caixa que adiciona uma instncia ao projeto (veja a Figura 13.9). Voc deve ouvir mais alguns ruidos no disco rigido e um novo dataset CustomerSetl ser adicionado janela (veja a Figura 13.10). Altere o nome para dsCustomers.
FIGURA 13.8

too

*-

~"'"

tA< _

<II'" _

I"" _
~ . ....

QOI>

Objefos de conexo adicionados.

~ lJ ~!;I",

.\ibor."

"I:'

..T...

"""....

FIGURA 13.9

Adicionando o

DataSet.

_ _...._..._.... _._,._------"
r~l-

::J

,,- f" .. ""


p - _ _ .. _ .." " _
'' 0 , (0
, ,.. "

P 111" .... _

.. " " _.

Usando o Server Explorer


' ..._ _ _ - " - ' 1_1 ' <___ "'_1'

FIGURA 13.10

",~,}'ItoI)_aM

O DataSet adicionado.

(jJ .

CJ ~

1iI"

___

""_~

lo

Ie. ., . '.. q

-..

. 1M

.~, .. ,

..

1;, 00 '.,

'.i

\JI o , ,....,

Antes de escrevermos o cdigo, devemos conectar o banco de dados e o DataSet ao OataGri d. Configure a propriedade DataSource do OataGrid como dsCustomers, e OataMember como Customers. Ao faz-lo, os cabealhos da co luna devem aparecer 110 DataGr id (veja a Figura 13. 11).
FIGURA 13.11

'"

l.'Ito

Conectando o OataSet

;,i) . 1:1 ~

1iI"

"""'"

-..,

<\I"

.....-

....

....

rlo ""

. .t:'.
...

r.. -...
i: t: o:

Il!t'

""'.>1
'1:1. .. .

ao OataGri d.
~.

.$ 'I!II "~,,

:o: . '"

.. ..

1;, . 'o

.... "' ......

i:!I"j:;; EI :ii

T.......

CDIGO

Agora vem a parte trabalhosa - ai nda precisaremos escrever um cdigo. Localize o procedimento Form Load e atuali ze-o para que preencha o OataSet como mostrado

na Listagem 13. 1,

370

Dia 13

COIGO

LISTAGEM 13.1 Alteraes no Novo Procedimento

1 Private Sub Customers l oad(ByVal sender As $ystem.Object . 2 ByVal e As System.EventArgs) Handles MyBase.Load 3 cmdCustomers . Fi l l(dsCustomers)
4 End Sub

ANALISE

Load ser padro para os aplicat ivos Windows, com a adio da linha 3. Ela chama o mtodo Fi 11 do adaptador de dados cmdCu$ tomers. O OataSet dsCus tomers foi criado quando selecionamos Generate DataSet. Em outras pa lavras, em vez de tennos de d igitar o que precisvamos nessa linha, foi tudo gerado para ns. Construa e execute

o procedimento Fonn

seu programa. Se tudo funcionar, ele deve ter a aparncia da Figura 13.12.

FIGURA 13.12

Executal1do o
aplicativo Da taVi ew.
.....",.,-

-...:I "",.,

......tIoInK_ ,...,_.. 'T


tt ~ L>"I<

Solos _

....'"
UI<

~oI.nto .... ~~Oo""_

so .:...

""'". _. """.
Eventos

eldoCoo>oo
&<>o _ '
CO<I ...

_50<1 """',.". _ "-to< Go a"", ~.,;.. . f'.......,..,"~

_Sotrr.>< o...... ... '''''''' Soon


hora
____

Ton._

_Oe '" ...


~

~ l<tlI ~

~,.,.~

a - .....
I"xCoo.f ,

r. &o,...,.,
~~_

"",... ....... SoIeo ......... UI<

"'11<ili'O

o--.
t I

C....... ~f'_Ct~ _.....,"'" Moo<co eh Y>n W""l o.",... ~<!>'btd

~-

..... c:',.,..." ...... attIob tnct<o


[)o""..x",

...... ...,.,.,., Soe""""'"


" ' _~h

~
!,lO;
~

SOles .........
0<'I!t< .......

_u.tnn o.....

..."""

~.~

SoIooA_ '" ""'" _ _ ........ <Mo _ ."."., f _ _ ... c"" ~ .... h.oI

fn.."eom._Dtv>

flss,t.,.""" _ .... ."


'

-..o ... . _ . ".

-, ,~. ~

.",,,,,
~

.~

0=

<w<

,... ,... ,...

(9.)SSS ' 9'.1 ....S.


(OO4)SS'

{'l U'"
(S)SS~7

_w

u>um o ,,,..,,.

"~

{,mm

"M'."-

"".."',

Acessando os Contadores de Desempenho e os Registras de


Para exam inarmos os beneficias das ferramentas do Server Explorer, construi remos um aplicati vo pequeno que monitorar alguns dos contadores de desempenho que o sistema operacional mantm sobre ele prprio. Alm disso, registraremos a data e a hora em que o programa comear e terminar de registrar os eventos do ap licativo. O resultado fina l deve ter uma aparncia semelhante da Figura 13.13.

Usando o Server Explorer

371

FIGURA 13.13

O PelfLile em a(io.

10..._1

=.1:::::

Crie um novo ap li cativo Windows. Chame o novo projeto de PerfLite porque ele ser uma verso mais enxuta (ou ' Lite' na linguagem de marketing) do aplicativo Performance Mon itor que vem com o Windows NT e o Windows 2000. Quando o projeto estiver pronto, feche o formulrio-padro e renomeie-o como frrrtla i n. vb. A seguir, d um clique com o boto direito do mouse no arq uivo e selecione View Code . Altere todas as referncias a Fonnl para fnnMai n. Usar o comando Replace ajudar (lembre-se de se lecionar Search 1-1 idden Text). Para conclu ir, d um clique com o boto direito do mouse sobre o projeto no Solut ion Explorer, se lec ione Properties e altere o Startup Object no formulrio resultante para fnnMa i n (veja a Figura 13.14).

FIGURA 13.14
"O.'

Propriedades de PelfLile.

,,_o

":i co.mon_,,",
~
~

. ......

:J CO"Lw..... ~_<M

::,,,":,,,,,

_. . ..........

"

1 - ' - 31':::J ~':::i:'~"''',,''''''"'------------I""'


~

0A>.0t_,

..... ,..,

..... _,

...... _

"" .....-.,

c, _ _ 'r....... \

~I

Compi le o apli cativo para certificar-se de que todas as alteraes foram fe itas. Depois de tudo compilado, estaremos prontos para comear a adicionar os controles e configurar suas propriedades. Confi gure as propriedades do formulrio como mostra a Tabela 13.6.

Dia 13

T A BELA

13.6

Propriedades do Formu lrio PerfLite


Valor

Propriedade

Text Si ze

PerfLi te
480, 360

Exibiremos algumas informaes sobre o desempenho desenhando-as em um painel. Alm disso, temos de controlar a ve locidade da exibio. Adic ione os controles da Tabela 13.7 e configure suas propriedades como mostrado na tabe la.
T A BElA

13.7

Contro les para o Formu lrio PerfUte


Propriedade Valor

Controle

Panel

Name Dock Height

pnlSweep

To,
240

Button

"me

TrackBar

Text Location Size Name location Size

cmdSweep &Start 8, 248 64, 24 trkSpeed 8, 280


104, 42
1

label

l a bel

label

Minimum Maximum Value Name Location Autosize Text Forecolor Name location Autosi ze Text Forecolor Name location Autosize Text Forecolor

20
10

Timer

',me

Interval

lblCPU 240, 248 True CPU: Red (ou algo que voc goste/possa ver) lblProc 240, 272 True Processes: Green (novamente, ou algo atrativo) lblMem 240, 296 True Memory: Bl ue tmrClod 1000

Para exibinnos as informaes sobre o desempenho, precisamos ad icionar os conladores apro-priados ao aplicativo:

Usando o Server Explorer

373

1. Abra o Server Explorer e selecione um servidor (pode ser seu prprio computador). 2. Abra a seo Performance Counters . 3. Role para baixo at encontrar o item Processor e abra-o. 4 . Abra o item % Processo r Time e selecione o item Total. 5. A rraste esse item sobre o formulrio e solte-o sobre ele. Um item chamado PerformanceCounterl deve ficar visvel em uma nova seo abaixo do formulrio (veja a Figura 13.15).

FIGURA 13.15 Depois de inc/lli/' o

!oK I!tw _

....

l!w 00" _

1.... _

.....

,.,. \!l o li' g ai ;:r. II;, e.

.., . ,

.p Q

-..,

[jIo " ''''

comado/' de desempenho.

...... -<_ .

...... ..
~

" ' L,_~_ ..:l to .. ,......_n_ '_

~. '" ..d ... . _

.-

-O>~_

-,..... "'"
"

, ,

H outra maneira de adicionar um item do Server Explorer a seu aplicativo. Localize o contador de desempenho System\Processes. Observe que ele no possui nenhum item, como Total em % Processor Time. D um clique com o boto direito do mouse no contador Processes e selecione Add to Designer. Em segu ida, voc deve ver outro objeto Perfonnance Counter adicionado pr. .. Xl mo ao pnmeuo. Para concluir a insero de nossos contadores de desempenho, selecione e adicione o contador de desempenho Memory\Commited Bytes. Renomeie os trs contadores de desempenho como prfCPU, prfProcs e prfMem. Alm dos contadores de desempenho, tambm podemos adicionar objetos que tornem o acesso aos dados muito mais fcil do que j possa ter sido. Abra a seo Event Logs do Server Explorer e selecione Application. Arraste o item Application para o formulrio ou d um cliq ue com o boto direito do mouse e selecione Add To Designer (o que preferir). Um novo item deve aparecer

374

Dia 13

prximo aos trs contadores de desempenho. Con figure as propriedades desse novo objelo conforme descrito na Tabela 13.8. O formulrio final deve se parecer com o mostrado na Figura 13.16.
TABElA 13.8
Propriedade

Propriedades do Objeto Event Log


Valor

Name

logApp

Source

PerfLite

FIGURA 13.16 O PerjLile, pronlo

filo

I0OI

....

.... 1_ _

!lO'>

jl \:.I ~ gGII

:t.1Q1! "' , .. Q

. -..

III ...,..,

para a codificaiio.

"- .. ....... ..
~

_ "lEI [Q>,NOO" 'L

.. ,'"'" "'"

.... _.''o~' e''''''

.
;

_.-;~--"_

.._-"--_._-_.O'IJ

Sto<
-~

_ . ....

""--~_

-.

Agora que a interface com o usurio est pronta, hora de comearmos a ad icionar a codificao para fazer nosso programa executar algo. Nesse aplicativo, adicionaremos um cdigo para trs dos controles e um proced imento para auxi Iiar. O resultado fina l mostrar uma Iinha dei imitadora se movendo pela extenso do painel , com trs linhas coloridas acompanhando-a atrs (veja a Figura 13. 17). Para que a linha deli mitadora seja exibida period icamente, usaremos o evento Timer do controle de mesmo nome. O cdigo est na Listagem 13.2.

Usando o Server Explorer

375

FIGURA 13.17
O exemplo sendo execulodo.

i""

! - ........

-.
_

'1OO1S '"

COIGO

LISTAGEM 13.2 Cdigo do Controle Timer

1 2 3 4 5 6 7 8 9 10 11 12

Private Sub tmrClock_Tick(ByVal sender As System.Object. ByVal e As System.EventArgs) Handles tmrClock.Tick Dim sngCPU As Single ; prfCPU .NextValue() / 100 Dim sngProcs As Single ; prfProcs .N extValue() Dim sngMem As Single ; prfMem. NextValue / 1024 'desenhe o painel del imitador DrawSweep(sngCPU. sngProcs . sngM em) 'atualize os ttulos lblCPU . Text." "CPU: " & sngCPU . ToString("p") lblProc . Text ; "Processes: " & sngProcs lblMem.Text ; "Memory: "& sngMem.ToString("fO") & "KB" End Sub

ANALISE

o cdigo desse procedimento tem como sua preocupao bsica duas finalidade s:

converteras valores dos contadores de desempenho em variveis com o tipo de dado simples e atualizar os controles Label. As linhas 3 a 5 recuperam os valores de cada contador de desempenho. Observe que estamos atribu indo os valores s variveis enquanto as criamos. Em seguida, passamos esses va lores para a rotina DrawSweep (linha 7 - veja a Listagem 13.3) para a ex ibio. Para conclui r, cada valor fonnatado e exibido em cada um dos controles Labe 1 (Iinhas 9 a II). Dois itens que parecem estranhos so as chamadas ToStrin9 nas linhas 9 e II. O mtodo ToStri ng permite que um formato opcional seja aplicado quando o nmero convertido em uma string. A linha 9 formata o valor como um percentual, enquanto a linha I I o fonnata como um nmero com lima quantidade fixa de casas decimais, e essa quantidade igual a O.
COIGO

LISTAGEM 13.3 Desenhando a Li nha Oe 1 imi tadora Sub DrawSweep(ByVal CPU As Single , Processes As Single , Memory As Single) oGraf ix As Graphics = pnlSweep.CreateGraphics()

13 14 15 16

Private ByVal ByVal Dim

376

Dia 13

COOIGO

LISTAGEM 13.3 Desenhando a linha Delimitadora (continuao)

17 18
19

20 21 22 23
24

25
26

Oim sngHeight As Single = pnlSweep.Height 'para os pontos Oim sngCPUY As Single Oim sngProcsY As Single Oim sngMemY As Single 'apague a li nha deli m itadora anterio r oGrafix.DrawLine{penBack, m_sngX, O. m_sngX , sngHeight) 'desenhe os pontos dos dados sngCPUY = sngHeight - (CPU * sngHeight) - 1 oGrafix,DrawLine(penCPU,_

27 28 29 30 31 32 33 34 35 36 37 38 39 40
41

rn_sngX - incremento rn_sngCPUY . rn_sngX. sngCPUY) m_sngCPUY = sngCPUY sngProcsY = sngHeight - Processes oGraf i x. DrawLine(penProcs . rn_sngX - incremento rn_sngProcsY. rn_s ngX. sngProcsY) rn_sngProcsY = sngProcsY
'o nmero 10000 para dar a memria um valor adequado em minha mquina voc pode precisar alter-lo se a linha referente memria

42 43
44

45
46

47 48 49 50

no for exibida corretamente sngMemY = sngHeight - ( Memory / 10000) oGrafix.DrawLine(penMem. m_sngX - INCREMENT. m_sngMemY. m_sngX. sngMemY) m_sngMemY = sngMemY 'aumente x m_sngX += increment If m _sngX > pnlSweep.Width Then 'reinicia l ize para voltar ao ponto de origem m_sngX = O 'e limpe a superfcie de exibi o oGrafix.Clear(SystemColors.Control) End I f 'desenhe a linha nova oGrafix.OrawLine{penFore. m_sngX. O. m_s ngX. sngHeight)
Eod 5ub

ANALISE

Como voc j deve ter deduzido, essa rotina o ponto central do aplicativo. No se assuste com a extenso ou as chamadas grficas - uma rotina bem simples.

Comeamos recuperando o objeto Graphics do controle PaneI (linha 16). Todas os elementos grficos do Visual Basic .NET so criados em um objeto Graphi cs. Qualquer contro le que possa ser desenhado (como os controles Image e PaneI ou os formulrios) expe esse objeto Graphi cs

Usando o Server Exp lorer

com um mtodo CreateGraphics. Por sua vez, ele expe outros objetos e mtodos (e tambm o controle do continer) para que se possa desenhar nele. Antes de discutirmos o cdigo propriamente dito, iremos detenninar o que se pretende fazer. O resu ltado final ser uma linha vertical que se move (horizontalmente) pela extenso do formul* rio. Enquanto se move, ela seguida por trs linhas coloridas, cada uma representando um dos trs contadores de desempenho. Quando a linha (delimitadora) vertical chegar ao limite do for* mulrio, dever ser in iciada mais uma vez no lado esquerdo dele, sendo esse li mpo para a nova exibio. No fim deveremos ter algo parecido com o monitor das batidas de um corao (sem o ru do ' ping' ). Portanto, precisaremos de um cdigo para desenhar a linha vertical (e mov*la pela extenso do fonnulrio) e as trs linhas de desempenho. Para mover a linha delimitadora, precisamos desenhar uma outra linha (com a cor do plano de fundo) para apagar a anterior, passar um pouco para cima e iniciar uma nova exibio. Na Lista* gem 13.3, a linha 23 do cdigo apaga a linha que j havia sido exibida, e uma nova iniciada e movida das linhas 25 a 41. A razo pela qual isso se torna to extenso que tambm precisamos testar se estaremos movendo a linha em direo ao lado direito do formulrio . Se isso estiver ocorrendo (a instruo I f na linha 42), li mparemos o formu lrio e voltaremos ao lado esquerdo para comear uma nova exibio. As linhas do contador de desempenho tambm so desenhadas nessa rotina. A diferena ex isten* te nessas chamadas que tambm precisamos determinar onde desenhar a linha e lembrar do va* lor anterior para que possamos conectar a linha nova a j ex ibida. Usando o pri meiro contador de desempenho como exemplo (linhas 25 a 28), isso se resume a trs etapas: I. Decida qual deve ser o novo valor de Y (a altura) para a nova linha. A linha 25 faz isso para o contador da cru determinando que percentual da altura total ser ocupado pelo valor referente CPU (Iembre*se, o contador da CPU um percentual). 2. Desenhe a linha, conectando a anterior recm*criada. As linhas 26 e 27 fazem isso de* senhando uma linha com a cor definida para a CPU com base nos valores anteriores de X e Y para iniciar os novos. O novo valor de X determinado pelo incremento (15 unida* des) do valor anterior, enquanto o novo valor de Y foi calculado na etapa I. 3. Armazene o valor recm*calculado de Y para que seja empregado no prximo lao (linha 28). Ele ser usado na criao de uma nova linha. As rotinas para o desenho das linhas dos outros dois contadores de desempenho (linhas 29 a 35 e 36 a 39) so seme lhantes - diferindo apenas na maneira como o novo valorde Y calculado.
CDIGO

LISTAG EM

13.4 Ativando e Desativando a Li nha Delimitadora

51 52 53
54

Private Sub cmdSweep_Click(ByVal sender As Objecto ByVal e As System. EventArgs) Handles cmdSweep.Click 'Alterne entre o texto e o timer no boto (at i vado ou desativado) If cmdSweep. Text = "&Start " Then

378

Dia 13

COOIGO

LISTAGEM 13.4 Ativando e Desativando a Linha Delimitadora (continuao)

55 56 57 58
59

cmdSweep.Text '" "&Stop" tmrClock.Enabled = True


El se

crndSweep.Text = "&Start" tmrClok.Enabled = False


Eod If Eod S,b

60 61

A finalidade dessa rotina penn it ir que o usurio inic ie e interrompa a exibio. Portania, ela relativamente s imples. Com base no texto do boto, alternaremos entre ele e nosso timel'. Isto , se o timer estiver alivado, o interromperemos. Se no estiver, o alivareANLISE

mos. Poderamos usar outra varivel para registrar esse status, mas, em vez disso, empregaremos
o texto do boto. Se a propriedade Text dele for igual a &Sta rt (o valor inicial), inic iaremos o ti-

mer e alteraremos Text para &Stop (observe que os dois valores possuem a mesma chave de acesso, a letra S). Corno alternativa, interromperemos o timer e configuraremos o texto de vo lta com &Start. A seguir, precisamos perm ilir que o usurio altere a velocidade da Iinha dei im itadora. Isso fe ito na Listagem 13.5. COOIGO 62 63 64 65 66 67 68 LISTAGEM 13.5 Configurando a Velocidade

Private Sub trkSpeed_Scroll (ByVal sender As Object, ByVal e As System.EventArgs) Handles trkSpeed.Scro ll Dim iValue As Integer iValue = Clnt(trkSpeed. VaI ue) 'configure o intervalo de tempo com o valor que esco l heu tmrClock.Interval = iValue * 100 'ms End Sub

ANLISE

o cdigo para configurar a velocidade bem bsico. As linhas 64 e 65 apenas se certificam de que o va lor que usamos (a configurao atual para a velocidade) tenha sido um inteiro. Em seguida, ut ilizamos a velocidade para ajustar o intervalo definido para o timer (linha 67). Intervalos menores significam que a linha dei imitadora ser exib ida mais rapidamente.

Para concluir, h algumas variveis de que preci saremos em todo o aplicativo. Elas armazenaro as coordenadas atuais X e Y, usadas quando desenharmos, e as canetas empregadas na criao das linhas. Adicione o cd igo da Listagem 13.6 ao formulrio, exatamente abaixo da regio marcada como cd igo gerado pelo Windows Form Designer e antes de qualquer outro trecho de seu cdigo.

Usando o Server Explorer

379

COOIGO

LISTAGEM

13.6 Variveis no Nvel do Formu lrio

69 7D
71

Dim m sngX As Single Dim m_sngY As Single D m_sngCPUY As Single im Dim m _sngProcsY As Single Dim m_sngMemY As Single Dim Dim Dim Dim Dim penCPU As New System.Orawing . Pen(Color . Red) penProcs As New System. Orawing.Pen(Color.Green) penMem As New System.Orawing.Pen(Color . Blue) penFore As New System.Orawing.Pen(SystemColors .WindowText) penBack As New System.Orawing.Pen(SystemColors.Control)
=

72 73 74 75 76 77 78 79 80
81

82

Const INCREMENT As Single

ANALISE

As variveis das linhas 69 a 74 so usadas para armazenar as posies aluais da caneta quando no estiverem desenhando as linhas. Uma varivel armazena a posio atual de X, e as outras as pos ies alua is de Y para cada contador de desempenho. As canetas so empregadas no desenho de cada linha de desempenho e da linha del imitadora. Por fim, a constante da linha 82 utilizada para registrar o espao definido para o avano da linha delim itadora enquanto ela se move pelo fonnulrio.

Depois que o cdigo estiver estruturado, compi le o programa e execute-o. D um clique no boto Start, e observe por alguns segundos. Voc comear a ver a barra delimitadora se mover da esquerda para a direita no formulr io, sendo seguida por trs linhas - uma para a CPU (percentual de uti li zao), outra para os processos (programas em execuo) e mais uma para a memria (em uso). O texto no boto deve alterar-se para Stop. Altere a barra de registro (configure-a corno maior ou menor) para observar como ela afela a exibio; tente dar um clique no boto Stop para ver se ele se altera novamente para Start. Voc pode tentar adicionar alguns outros contadores exibio corno um exerccio.

Resumo
Os sistemas operacionais mais modernos como o Windows possuem vrios serv ios. Esses servios fornecem recursos que se estendem ao sistema operacional, adicionando funciona lidades, como bancos de dados ou registros, que enriquecem as capacidades centrais. O Server Explorer permite que voc visualize ou altere o estado desses servios em seu prprio computador de desenvolvimento ou em outros sem terde sair do IDE do Vi sual Basic .NET. Alm disso, ele simplifica o desenvolvimento de cdigos que usem muitos dos servios disponveis.

Dia 13

Na prxima li o, comearemos nossa saga na descoberta da verdadeira natureza orientada a ohjetos do Visual Bas ic .NET aprendendo o que sign ifica ser ' real mente' orientado a objetos.

P&R
P Tenho alguns itens em meu Server Explorer que no foram mencionados (o u no tenho alguns que foram mencionados). O que so eles? R E poss vel que outras empresas criem com ponentes para 'associar' ao Server Explorer. Isso permiti ria ao desenvolvedor trabalhar com esses servios diretamente, tal como se pode fazer com os servios comuns. Por outro lado, se o serv idor com o qual voc se conectar no fornecer um determinado servio, ele poder no aparecer na li sta. P Se os dados do Sen 'er Explorer forem alterados. isso alterar o banco de dados? R Sim, por favor, tenha cuidado.

Workshop
o Workshop fo i planej ado para aj ud-Io a antecipar poss veis dvidas, revisar o que j aprendeu
e comear a pensar em corno colocar seu conheci mento em prtica. As respostas do teste esto no Apndice A, " Respostas dos Testes/Exerccios" .

Teste
I. Cite duas sees do Server Explorer que informariam a voc que programas esto em execuo em seu computador. 2. O que um servio? 3. O que seria exibido se o cdigo a seguir fosse ad icionado a um programa e executado?

Dim prfCPU As New PerformanceCounter("processor" , "%P rocessor Time" , "_total") Console .W riteL i ne{prfCPU.NextValue{

Exerccios
I. Use o Data Connections para se conectar a um banco de dados di spon vel e pesq uisar as tabelas e outros itens cuj o acesso fo r conced ido (lembre-se de no fazer nenhuma alterao, a menos que voc realmente precise). 2. Pesqu ise o Server Explorer para descobrir o que est dispon ve l em seu computador, assim como os servidores que voc costuma usar para desenvolv imento.

SEMANA

DIA
Introduo Programao Orientada a Objetos
Na verso .NET, o Visual Basic foi reescrito a partir do zero. Uma das princ ipais razes disso foi para adicionar recursos orientados a objetos profundamente integrados. Esta lio abordar:

Uma viso geral da programao orientada a objetos (POO).


Concei tos importantes da POO.

Corno incorporar a POO nos sistemas de sua autoria.

Alm desses tpicos, no final da lio, voc aprender tcnicas da POO para ajudlo a construir aplicativos.

Viso Geral da Programao Orientada a Objetos


A programao orientada a objetos (POO) no uma tecnologia ou linguagem especfica; uma maneira de projetar e construir aplicat ivos. Para tomla ainda mais abstraIa, voc poderia pen sar nela como um modo de considerar o projeto e o desenvolv imento de aplicat ivos. A POO possui um histrico acadmico e no tentarei fornecer lima data exala na qual foi concebida pela primeira vez, mas ela foi adotada de maneira ampla pela indstria de softwares nos anos 80. Agora quase sempre presume-seque a POO est sendo usada, mas com freqU ncia o termo cmpregado com pouca compreenso do que realmente significa.

Dia 14

Na essncia da POO est o conceito de objeto, um bloco da programao que combina informaes especficas e um conj unto de comportamentos relacionados. Na POO, os cenrios so considerados em termos desses objetos em vez da abordagem linear passo a passo que era (e ainda ) usada na maioria dos programas de computador. Os objetos em geral so empregados para descreverentidades, que podem ser reais (um veculo) ou abstratas (um vo reservado em uma companhia area nacional). Essas entidades possuem atributos, como a cor do veculo ou a data de sada do vo, que descrevem o objeto. Esses objetos tambm apresentam certas aes que podem ser executadas neles, como 'Vender' para o carro e 'Cancelar' para o vo. Na POO, as entidades se tornam objetos, os atributos so conhecidos como propriedades (que voc pode configurar ou recuperar) e as aes so chamadas de mtodos. Novo
TERMO

Um objelo uma representao de urna entidade rea l ou abstrata junto s propriedades dessa ent idade e as aes relacionadas a ela que podem ser executadas .

Comparando a Programao Orientada a Objetos com a Linear


A diferena entre a programao linear ou procedmal e a POO pode parecer sim ples, mas um conceito complexo em gera l mal compreendido. Mostrarei a voc duas descries referentes a um processo de clculo do pagamento de uma hipoteca. Um descrito em etapas lineares (tambm chamado de programao proceduraf) e o outro a partir de um ponto de vista orientado a objetos : O processo linear segue estas etapas:
I. Obter a quantia principal.
2. Obter a taxa anual de juros.

3. Obter o perodo em anos.

4. Calcular a taxa de juros por ms.


5. Calcular a quantidade de pagamentos (anos
>I<

12).

6. Calcular os pagamentos.

o processo orientado a objetos inclui estas etapas:


1. Criar uma nova hipoteca. 2. Configurar as propriedades referentes ii quantia principal, taxa de juros e ao periodo da hipoteca. 3. Recuperar a propriedade do pagamento.

Introduo Programao Orientada a Objetos

383

Em cdigo, as duas abordagens tambm so diferentes. Considere os doi s blocos de cd igo mostrados nas Listagens 14.1 e 14.2, que poderiam ser executados em um formu lrio Windows ou da Web para calcular os pagamentos da hipoteca.
LISTAGEM 14.1

Abordagem procedural para um Programa de Clculo de Hipoteca

1 2 3 4 5 6 7 8
9

'Est ilo linear Private Sub btnCalc_Click(ByVal sender As System.Object . ByVal e As System.EventArgs) Handles btnCa lc . Click Dim iYears As Integer Dim iMonths As Integer Dim dbllnterestRate As Double D curPri ncipal As Decimal im D curPayment As O im ecimal iYears = Clnt(txtPayments. Text) iMonths = iYears * 12 dbllnterestRate = CType(txtlnterest . Text. Ooub le) curPrincipal -; CType(txtPrincipal . Text, Decimal) 'div ida a taxa de juros por 12 pa ra obter a taxa mensal dbllnterestRate /= 12 curPrincipal *_ (1 - (l + dbllnterestRate))_ / (1 - (l + dblInterestRate) i Months)) + dbllnterestRate) IblMonthlyPayment.Text = cu rPayment.ToString() End Sub
=
A

10 11 12 13
14

15 16
17

18 19 20 21 22 23

cu rpayment

LISTAGEM 14.2

A bordagem Orientada a Objetos para um Programa de Clculo de H ipoteca orientado a objetos Sub btnCalc_Click(ByV al sender As System. Object . As System.EventArgs) Handles btnCa lc.Click iYears As Integer dbllnterestRate As Double curPrincipal As Decimal curPayment As O ecimal

1 2 3 4 5 6 7
8

'Es tilo Private ByVal e Dim Dim Dim Dim

9 10 11
12

iYears = Clnt(txtPayments .Text) dbllnterestRate = CType(txtlnterest.Text. Ooub le) curPrincipal = CType{txtPrincipal. Text, Decimal)

Dia 14

LISTAGEM 14.2

Abordagem Orientada a Objetos para um Programa de Clculo de Hipoteca (continuao)

13 I' 15 16 17 18 19 20

Dim objMort As New Mortgage() objMort .AnnuallnterestRate '" dbllnterestRate objMort.NumberOfYears '" iVears objMorLPrin cipal '" curPrincipal lblMonthlyPayment.Text '" objMort.PaymentAmount.ToString End Sub

A Listagem 14.2 cria uma instncia do objeto Mortgage, (hipoteca) para fazer seus clculos, mas as operaes matemticas subjacentes so as mesmas. E bom ressaltar que j que o objeto Mort gage ainda no foi definido, voc no poder executar o cdigo da Listagem 14.2. Embora um resu ltado final semelhante pudesse ser obtido se escrevssemos uma fu no com o cdigo proced ural, como Cal cul ateMortgagePayment ( ), isso ainda no seria uma POO. S com o uso do objeto Mortgage, que combina as informaes sobre a hipoteca com o cdigo para process-Ias, estaremos realmente usando a POO. Esse esti lo de programao no novo para voc, se esteve acompanhando a primei ra metade deste livro; quase tudo no Visual Basic .NET construdo dessa maneira. Considere o cdigo usado para trabalhar com controles em um form ul rio Windows: txtpaymenL Text '" 1bl Resul t. Text . Os dois controles so objetos, com uma propriedade Text , exatamente como o objeto Mortgage do exemplo anterior. Empregar os objetos fornecidos pelo Visual Basic .NET e pelo .NET Framework no far com que seu cdigo seja orientado a objetos, embora mu itas pessoas possam lhe dizer que si m. possve l utilizar os objetos e ainda programar com um esti lo proceduraI passo a passo.

Usando os Objetos na Organizao do Cdigo


Na programao proced ural, sem o LISO das tcnicas da POO, comum dividir os recursos em sub-rotinas ou funes q ue podero, em seguida, ser chamadas de qualquer parte do programa. Tambm no raro agrupar essas sub-rotinas (em geral com outras sub-rot inas relacionadas) em mdulos, DLLs ou outra forma de estrutura de cdigo. A segui r, voc poderia adicionar esses grupos de sub-rotinas a seu programa como unidades individuais e chamar qualquer uma delas quando necessrio. Portanto, todas as suas fu nes matemticas poderiam ser agrupadas em um arquivo ma th. dll , e todas as funes de strings em s t ri ng. dl l, criando um sistema organizado. Essa fonua de codificao ainda seria procedural em vez de orientada a objetos. Isso no reduz seu valor como uma boa maneira de organizar o cdigo, mas comea a ficar Illu ito semelhante POO com chamadas como Math.SquareRoot(x) em execuo. Ao programar na plataforma .NET, voc precisar usar objetos para agrupar os procedimentos desse modo. Incluir 20 procedimentos diferentes como mtodo de um objeto uma tcnica ti l, mas lembre-se de que esse es-

Introduo Programao Orientada a Ob jetos

385

tilo de agrupamento no POO; si mplesmente como o cdigo organizado na platafonna .NET. Seu cdigo s ser orientado a objetos quando empregar objetos para representar as entidades e conceitos que compem seu ap licativo. Na plataforma .NET, os objetos que no representam uma entidade real ou abstrata, exist indo apenas para agrupar cd igo, em geral designam a si mesmos e a todos os seus mtodos como estti cos ou compartilhados. Voc aprender mais sobre esses tipos de objetos na prxima lio (Dia 15, "Criando Objetos no Visual Bas ic .NET), mas apenas lembre-se de que h uma maneira especfica de construir essas bibliotecas procedurais de cdigo.

Conceitos Importantes na POO


Alg uns termos foram definidos para serem usados na POO, e eles so re lativamente universais para todas as tecnologias e linguagens de programao. Nesta seo, explicarei os termos mais comuns e forn ece rei um exemplo de como cada um func iona.

Classes, Objetos e Instncias


Os prim eiros tennos q ue prec isam de discusso so aqueles usados em qualquer material que envolva a POO: classe, objeto e instncia. Esses conceitos sero a base para seu trabalho com a POO, e como tal devem fi car c laros antes de prosseguirmos. A classe um modelo para um objeto; ela descreve a estrutura bsica do objeto. Muitas analogias diferentes so usadas para descrever o relacionamento entre a classe, o objeto e a instncia. Uma das mais com uns considerar esses conceitos em termos de casas e da construo delas. Empregando uma analogia desse tipo, a classe seria o projeto para a casa, e a casa propriamente dita seria um obj eto. Mui tas casas poderiam ser criadas com base no mesmo projeto, e muitos objetos podem ser gerados com base na mesma classe. Cada objeto criado a parti r de uma classe chamado instncia dessa classe. Para examinar isso nos termos do Vis ual Basic, considere a Li stagem 14.3.
LISTAGEM 14.3

Inserindo Vrias Classes em um nico Arquivo

1 Modu le AllAboutObjects 2 Sub Ma in( ) 3 Dim x As myFirstClass 4 x " New myFirstC lass{) 5 End Sub 6 End Modu le
7

8 Public Class myFirstClass 9 '<a def inio da classe e o cdigo entram aqui> 10 End Class

Dia 14

A instruo Publ i c Cl ass myFi rstCl ass (linha 8) define uma classe nova; um projeto para os ohjetos. A linha 3 cria uma varivel do tipo myFirstC l ass, que pode conter uma instncia de myFi rstCl asso A linha4 gera uma nova instncia de myFi rs tCI ass (criando um objelo) e a atribui a varivel x. Agora x se refere a lima instncia da classe myFi rstCl asso Outro exemplo do uso de objetos mostrado na Lislagem 14.4. LISTAGEM 14.4 Variveis e Instncias No So a Mesma Coisa

1 Module AllAboutObjects Sub Main() 2 Dim x As myFirstClass 3 Dim y As myFirstClass 4 x o New myFirstClass() 5 y o New myFirstClass() 6 7 End Sub 8 Eod Module Na Listagem 14.4, duas variveis do tipo myFi rs tCI ass so declaradas (nas linhas 3 e 4) e, em seguida, duas novas instncias de myFi rstCI ass so criadas (linhas 5 e 6). Cada instncia referenciada por uma varivel. A varivel x contm uma referncia a um objeto direrente de y, mas os dois objetos so instncias de myFi rs tCI ass o Esse conceito, instncias comparadas a variveis, ser examinado mais uma vez em outro exemplo na Listagem 14.5. LISTAGEM 14.5 Instncias Comparadas com Variveis

1 Module AllAboutObjects Sub Main() 2 Dim x As myFirstClass 3 4 Dim y As myFi rstClass 5 x = New myFirstClassO 6 y " x 7 End Sub 8 End Module A Listagem 14.5 torna tudo um pouco mais confuso. Agora duas variveis foram declaradas, ambas podendo se referir a uma instncia da classe myF i rstCI asso Em seguida, uma nova instncia dessa classe criada (por meio da palavra-chave New) e uma referncia ao novo objeto inserida em x. A seguir, y atribu da a x, e o resultado que y agora contm lima referncia mesma instncia de myFi rstCI ass que x referenc ia. S h um objeto e, portanto, uma rea da memria, mas duas variveis que se referem (ou apontam) a ele. Isso ser demonstrado na prxima seo quando voe aprender as propriedades.

Introduo Programao Orientada a Ob jetos

387

Propriedades
As classes podem definir as propriedades que cada instncia delas deve ter. A propriedade um valor que ex iste como parte de um objeto, e voc pode recuperar ou configur-Ia por meio desse objeto. A Listagem 14.6 adiciona uma propri edade definio de my FirstC lass por uma varivel pblica. Essa no a n ica maneira de adicionar uma propriedade, mas abordaremos os outros mtodos no
Dia 15.
LISTAGEM

14.6

Adicionando uma Propr ieda de Definiao de myFirstClass

1M odule AllAboutOb j ects 2 Sub Main() O x As myFi rs tCl ass im 3 Oim y As myFirstClass 4 5 x = New myFirstClassO 6 y = New myFirstClass() 7 x.N ame = "Fred" 8 y. Name = "Jae" 9 Console .WriteLine("x.Name 10 Console .WriteLine("y.Name 11 Console . ReadLi neO 12 End Sub 13 End M odule
14

= =

{Q}" , x.Name) {Q}" , y .Name)

15 Public Class myFirstClass 16 Publ ic Name As String 17 End Cl ass Como antes, duas variveis so declaradas, x e y, duas novas instncias de myFi rs tCl ass s."o criadas, e so inseridas referncias nas duas varive is. A seguir, nas linhas 7 e 8, um valor inserido na propriedade Name de cada instncia de myF i rstCl ass, e essa propriedade acessada por meio das variveis que fazem referncia ao objcto. As instrues Consol e. Wri te Li ne (linhas 9 e 10) produzem a sada a seguir: x.Name y.Name
= =

Fr ed Joe

Cada instncia de lima classe possu i sua prpria parte na memria associada a ela e, portanto, os valores da propriedade so armazenados independentemente com cada instncia. Retornando ana logia da casa, todas as instncias de uma casa so criadas do mesmo projeto, mas cada uma pode ser pintada de uma cor diferente. A cor da casa uma propriedade, e seu valor no determinado pelo projeto; um atributo de cada instncia. A Li stagem 14.7 deve ajudar a ilustrar como as propriedades esto assoc iadas a uma instncia individual de uma classe.

Dia 14 As Variveis x e y Apontam para a Mesma Instncia de um Objeto

LISTAGEM 14.7

1 Module AllAboutObjects 2 Sub Main() 3 Oim x As myFirstClass 4 Oim y As myFirstClass X" New myFirstClass() 5
6
y " x

7 x.Name " "Fred" 8 y.Name " "Joe" 9 Console .Writeline("x.Name" {Ql" . x.Name) 10 Console.Writeline("y.Name" {Ql". y.Name) 11 Console.ReadlineO 12 End Sub 13 End Module A nica diferena entre as Listagens 14.7 e 14.6 est na linha 6, em que atribuda varivel y lima refernc ia x em vezde a uma nova instnciademyfi rstClass. Essa diferena sign ifica que nas linhas 7 e 8, o cdigo trabalha COm a propriedade Name da meSma instncia, e a sada dessa ro~ tina ser x.Name = Joe y.Name " Joe As duas instrues Wri teL i ne produzem o mesmo valor para a propriedade porque tanto x quan~ to y se referem mesma instncia do objeto. Esse conceito especfico, em que mltiplas v ar i~ veis se referem ao meSmO objeto, outro tpico importante, porm confuso. Verifique a seo 6.1 do Visual Basic Language Specification (parte da documentao da plataform a .NET; pes~ quise em "Tipos de Valores e Tipos de Referncia" para encontr~la) para obter mais detalhes. Na plataforma .NET, as propriedades podem ser apenas de leitura, apenas de gravao ou de le i ~ tura/gravao, permitindo a existncia de um controle sobre como esses valores so acessados. Voc aprender a controlar o acesso s propriedades de suas prprias classes no Dia 15.

Mtodos
Alm das propriedades, as classes tambm podem ter comportamentos ou aes associados a elas. Conhecidas como mtodos, essas aes permitem que uma classe possua alguma lgica in~ corporada alm das informaes que so armazenadas por suas propriedades. Urna casa no o melhor exemplo quando se quer fa lar sobre mtodos, mas uma classe casa criada para ser usada por um aplicat ivo de uma imobi liria pode possuir mtodos que listem a casa na Web (myHouse. Li st ( )), vendam a casa (myHouse . Sell ( )) ou at exibam uma propaganda (myHouse . Pri ntBrochure ("Printerl")). Esses mtodos so exatamente como qualquer outro procedimento; eles podem aceitar parmetros quando voc os chama e retornar valores tambm.

Introduo Programao Orientada a Ob jetos

389

Na Listagem 14.8, um mtodo (DoSomething) foi adicionado a myFirstClass por meio de um proced imento Pub 1 i c (Sub) na defi ni o da classe.
LISTAGEM 14.8

Adicionado um Mtodo m yFirstClass

1 M odule AllAboutOb j ects

2
3 4

5
6

7
8

Sub Main() Dim x As myFirstClass x = New myFirstClass() x. DoSomethi ng () End Sub End M odule

9 Public Class myFirstClass 10 Public Name As String 11 Public Sub DoSome thing() 12 'o cd igo entraria aqui 13 End Sub 14 End Class

Em segu ida, esse mtodo poderia ser chamado de qualquer instnc ia da classe. Exatamente como com as propriedades, no entanto, o mtodo de l1nido na classe, porm chamado na instncia. Isso significa que se o mtodo usar alguma das propriedades (privadas ou pblicas) da classe, ento, estar util izando as informaes armazenadas na instncia em questo.

Herana
Um conceito essencial na POO, mas que no era fci l de implementar no Visual Basic antes da verso .NET, a herana. Novo TERMO Herana o conceito pelo qual voc pode basear uma classe em outra, em geral para alterar ou adicionar algo nos recursos dispon veis da classe original. Acabei de almoar, portanto acho que deixarei de lado a analogia da casa e tentarei confundi-lo com uma baseada em sanduiches. Considere o ham brguer bsico: dois pes com um pedao de carne colocado entre eles. Quando o restaurante decide comear a vender cheeseburgers, ele no criado do nada. cozinhe iro informado para ' fazer um hambrguer, porm adicionando uma fatia de que ij o'. Assim, urna nova classe de sanduche criada, o cheeseburger, que herda caractersticas da classe hambrguer. Para estender essa analogia at que fiquemos saturados de sanduches, o restaurante poderia agora decidir oferecer um hambrguer de luxo, que herdasse caractersticas do cheeseburger e incl usse ai face e tomate. Em cada caso, a classe bsica usada corno origem .

Dia 14

Dessa maneira, voc pode criar uma hierarquia de objetos, em que a classe ut ilizada pode estar no fina l de vrias camadas de herana. possvel ter quantas classes desejar com base em uma nica classe, portanto o restaurante poderia oferecer um sanduche vegetariano ou de gali nha, os dois derivados da classe hambrguer e sobrepostos ao tipo de reche io uti Iizado anterionnente.
Novo TERMO

Sobreposio um tenno usado para indicar que uma classe-fil ha fornece sua prpria implementao de um recurso da classe bsica, quando comparado simples

adio de novos recursos.


No Dia 15, voc aprender a criar seus prprios objetos no Visual Basic .NET usando a sobrepo-

sio, a herana e outros recursos, mas, por enquanto, fornecere i um exemplo simples do emprego da herana na Listagem 14.9.
LISTAGEM

14.9

Usan do a Herana para Criar Hierarquias de Objetos

1 M odule AllAboutObjects

2
3 4

Pu bl i c Sub Ma i n{) Oim mySn ippet As CodeSnippet mySnippet " New CodeSnippet() With mySnippet .Contents" "txtEntry.Text " Ibllnfo .Text" .Author " "Joe" .language " "VB.NET" .Purpose" "Inserir o texto do ttulo na calXa de texto" End Wi th End Sub End Module Public Class Snippet Public Contents As String Publ i c Author As String End Class Publ ic Class CodeSnippet Inherits Snippet Publ ic Language As String Publ ic Purpose As String End Class

5
6 7 8

9 10
11 12

13 14 15 16 17 18 19 20 21 22 23 24 25

Como voc pode ver, CodeSnippet, que derivada de Snippet, ad iciona duas novas propriedades. Quando for criada uma nova instncia da classe CodeSni ppet (1inha 5), ela ter as propriedades das duas classes disponveis.

Introduo Programao Orientada a Objetos

391

Em geral, a classe nova precisa sobrepor algum recurso da classe bsica, apenas porque a funcionalidade bsica no leva em considerao as alteraes posteriores fe itas na classe. Considere um mtodo, chamado GetSni ppet ( ) que existe na classe Sni ppet e foi criado para retornar a classe Sni ppet comp leta como uma Stri ng, como mostrado na Li stagem 14.10.
LISTAGEM 14.10

Inclua Todos os Recursos de Sua Nova Classe

1 Pub l ie Class Snippet Public Contents As String 2 Public Author As String 3 4 Publie Funetion GetSnippet() As String Di m sTmp As String 5 6 sTmp = "Author: " & Author _ & System . EnvironmenLNew Line 7 & Contents 8 Return sTmp 9 10 End Funetion 11 End Cl ass Essa funo exibe apenas as duas propriedades da classe bsica, portanto se voc no as sobrepuser nova classe, suas duas novas propriedades no sero manipuladas. A classe CodeSn i ppet da Listagem 14.11 mani pula isso sobrepondo a funo GetSni ppet da classe bsica.
LISTAGEM 14.11

Sobreponha uma Fun o para Personaliz -l a a Fim de Que Manipule os Novos Rec ursos de Sua Cl asse

1 Modu le AllAboutOb j ects 2 Public Sub Main()


3 4 5

Dim mySnippet As CodeS nippet m ySnippet = New CodeSnippet{) With mySnippet . Contents = "txtEntry .Text - Ibllnfo . Text" .Author " "Joe" . Language = "VB.NET" . Purpose = "Inserir o texto do ttulo na cana de texto" End Wi th End Sub End Module

6
7 8

9
10 11 12

13 14 15 16 Publie Class Snippet 17 Publ ie Contents As String 18 Public Author As String 19 Publie Overridable Function GetSnippet() As String

Dia 14

LISTAGEM 14.11 Sobreponha uma Funo para Pe r sonaliz - la a Fim de Que Manipu le os Novos Recursos de Sua Cl asse (continuao)

20 21 22 23

2.

25 26 27 28 Public Class CodeSnippet 29 Inherits Snippet 30 Public Language As String 31 Public Purpose As String 32 33 Public Overrides Function GetSnippet{) As String 34 Dim sTmp As String 35 sTmp = MyBase . GetSnippet()&_ 36 Sys tem. Envi ronment.NewLi ne & 37 "Language: " & Language &_ 38 Sys tem. Envi ronment.NewLi ne & 39 "Purpose: " & Purpose 40 Return sTmp 41 End Function 42 End Class

Dim sTmp As String sTmp = "Author: " & Author &System.Environment.NewLine & Contents Return sTmp End Funct i on End Class

Para que essa funo seja sobreposta, ela deve ser marcada com Overridab l e na classe bsica (l inha 19) e, cm segu ida, voc precisa fornecer uma nova implementao na classe derivada (marcada com Overri des, linha 33). Para obter o resultado da funo da classe bsica como parte da implementao dessa classe, a palavra-chave especial MyBase pode ser usada (linha 35) para acessar as propriedades e mtodos da classe bsica. Outra palavra-chave especial, que no foi empregada nesse exemplo, Me. Ela se refere ao objeto atual , portanto Me. Name que foi utilizada no procedimento GetSni ppet referia-se propriedade Name da instncia aluaI dessa classe. Um recurso til da herana que as classes que so derivadas de uma classe bsica especfica podem ser usadas corno se fossem essa classe bs ica. As instncias da nova classe podem ser inseridas em variveis que utilizem o tipo de dado da classe anterior e passadas corno parmetros para os procedimentos que esperem o tipo de dado anterior, como most ra a Listagem 14.12.
LISTAGEM 14.12 Use uma Classe Herdada em Qualquer Local Que Der Suporte a Sua

Classe Bsica 1 Option Strict On 2 Option Explicit On

Introduo Programao Orientada a Ob jetos

393

LISTAGEM 14.12

Use uma Classe Herdada em Qualquer Local Que Der Suporte a Sua Classe Bsica (cont inu ao)

4 Modu le AllAboutObjects 5 Public Sub Main{)


6

7 8 9 10
11

12 13 14 15 16 17 18 19 20 21

Dim mySnippet As CodeSnippet mySnippet : New CodeSnippet() With mySn i ppet .Contents = "txtEntry.Text = IbIInfo.Text" .Author : "Joe" . Lang uage = "VB.NET" .Purpose : "Inserir ttulo do texto na caixa de texto" End With PrintSnippet{mySnippet) Console.ReadLine() End Sub

Public Sub PrintSnippet{ByVal objSnippet As Snippet) Console .Writeline(objSnippet . GetSnippet( End Sub 22 'od M odule Quando um objeto passado como seu tipo bsico, como na linha 15 da Listagem 14.1 2, as propriedades e mtodos adicionados pe la classe herdada no ficam disponveis. Portanto, objSni ppet. Language no seria compi lada se voc a inserisse na linha 20 j que ela no uma propriedade vlida para a classe Sni ppet. Os mtodos sobrepostos ficam disponveis porque existem na definio da classe bsica, mas a implementao da classe deri vada ser chamada em vez da bsica. A Listagem 14. 12 produziria o seguinte resultado: Autho r: Joe txtEntry . Text : Ibl lnfo.Text language : VB .N ET Purpose : Inserir texto do ttulo na caixa de texto Voc aprender mais sobre a herana e a capacidade de tratar um objeto derivado como se fo sse sua classe bsica, durante a prxima lio (Dia 15).

Construtores
Outro recurso novo orientado a objelos nesta verso do Visual Basic a incluso de construtores para os objetos.

394

Dia 14

Novo TERMO

o construtor uma rot ina chamada quando a instncia de uma classe gerada, e essa
pode especificar que parmetros fornecer na hora da criao. Esse conceito proporcio-

na uma maneira de in icializar seu objeto na hora da criao.

No Visual Basic .NET, o construtor representado por um procedimento New na definio da classe, e (exatamente como qualquer procedimento) voc pode ter a quantidade de verses sobrepostas que quiser dele, fornecendo vrias maneiras pelas quais o objeto pode ser criado. Na Listagem 14. 13, diversos construtores so adicionados s classes Sn; ppet e CodeSnippet, permitindo que esses objetos sejam inic ializados de muitas maneiras.

LISTAGEM 14.13 Os Construtores Criam e Inic i alizam Seu Objeto


1 Option Strict On

2 Option Explicit On
3

4 Modu le AllAboutObjects 5 Public Sub Main{) 6 Dim mySnippet As CodeSnippet 7 mySnippet "_ 8 New CodeSnippet("txtEntry. Text " 1bl Info. Text" ,_ 9 "Joe" , "VB.NET" , "Inserir texto do ttulo na caixa de texto") 10 PrintSnippet{mySnippet) 11 Console.ReadLine{) 12 End Sub 13 Public Sub PrintSnippet(ByVal objSnippet As Snippet) 14 Console.WriteLine{objSnippet.GetSnippet()) 15 End Sub 16 End Module
17
18 Public Class Snippet
19

20

Public Contents As String Public Author As String Public Sub New() End Sub Public Sub New{ByVal Contents As String) Me.Contents " Contents End Sub Public Sub New{ByVal Contents As String, ByVal Author As Stri ng) Me.Contents " Contents Me.Author " Author End Sub

21

22 23
24

25 26 27
28 29

30 31 32 33
34

Introd uo Prog ram ao Ori entada a Objetos

395

LISTAGEM

14.13

Os Const r utores Criam e Inicializam Seu Objeto (continuao)

35 36

37
38

39 40 41 42 43 44 45 Public Class CodeSnippet 46 Inherits Snippet 47 Public Language As String 48 Public Purpose As String 49 50 Public Sub New() 51 MyBase.New() 52 End Sub
53

Public Overridable Function GetSnippet() As String Oim sTmp As String sTmp " "Author: " &Author &System.Environment .NewLine &Contents Return sTmp End Function End Class

54 55 56
57

Public Sub New(ByVal Contents As String) MyBase . New(Contents) End Sub Public Sub New(ByVal Contents As St r ing, ByVal Author As Stri ng) Me.New(Contents) Me.Author " Author End Sub Public Sub New(ByVal Contents As Strin9 . ByVal Author As Stri ng,_ ByVal Language As String) Me.New(Contents , Author) Me . Language " Language End Sub Public Sub New(ByVal Contents As String, ByVal Author As String ,_ ByVal Language As String, ByVa l Purpose As String) Me . New(Contents . Author . Language) Me . Purpose " Purpose End Sub Public Over rides Function GetSnippet()As String

58 59 60 61 62
63

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

Dia 14

LISTAGEM 14.13 Os Const rutores Criam e Inicializam Seu Obje to (continuao) 80 Dim sTmp As String 81 sTmp : MyBase.GetSnippet()&_ 82 Sys tem. Envi ronment.NewLi ne & 83 "Language: " & Language & _ 84 System.Environment.NewLine & 85 "Purpose: " & Purpose 86 Return sTmp 87 End Function 88 End Class

As linhas 22 a 34 so os construtores para a classe Sni ppet, e ilustram a maneira-padro de inicializar um objeto. As linhas 50 a 77 so os construtores para a classe CodeSni ppet, e contm alguns artificios em como a inicializam . Primeiro, voc pode chamar o construtor da classe bsica por meio da palavra-chave My8ase (linhas 51 e 55), o que assegura que os cdigos sejam executados na rotina da classe bsica e, em seguida, tambm sejam processados para sua classe derivada. O segundo artifcio, empregado em todos os outros construtores, chamar seus construtores mais sim ples dentre os mais complexos. Utilizar esse esti lo de codificao ev ita a repetio de cd igos; a iniciali zao genrica inserida no primeiro construtor, e qualquer cdigo adicional , requerido para a manipu lao de cada parmet ro novo, pode ser includo apenas no prim eiro construtor no qual todos os parmetros novos aparecem.

Projetando um Aplicativo com o Uso da POO


A programao orientada a objetos no um conceito tcnico e no est relac ionada apenas programao de um sistema. A POO est envolvida na criao de um sistema com base em um projeto conceituai. Voc deve decid ir se vai projetar um sistema usando as tcnicas orientadas a objetos, e a im plementao no est envolvida nessa deciso. Antes da plataforma .NET, o Visual Basic no possua recursos para perm itir a herana, a sobreposio de proced imentos e outros conceitos da POO, mas os programadores ainda pod iam projetar um aplicativo empregando esses conceitos e, em seguida, implement-los utilizando vrias etapas ou artificios para conseguir o que o Visual Basic .NET possui embutido atualmente. Depois que voc tiver sua fase de abrangnc ia/escopo e o trabalho de anl ise dos requisitos concludos em um projeto, passar para o estgio conceituaI. Durante a fase de projeto, voc comear a incorporar objetos em seus aplicativos. Siga estas etapas para criar esse projeto: I Identifique as entidades.

2. Detenn ine as propriedades e mtodos. 3. Crie hierarquias de objetos. 4. Modele seus objetos.

Introduo Programao Orientada a Objetos

397

Cada etapa ser abordada ind ividualmente a medida que voc percorrer o processo de descrio de um jogo de vinte-e-um usando objetos. Seria ti l que voc compreendesse esse jogo de cartas, antes que lesse estas sees. Se no souber nada sobre ele, consulte as regras procurando "BlackJack" na Encarta (http://encarta.msn . com).

Identificando os Objetos
A primeira tarefa descrever os requisitos de seu sistema, que muito mais trabalhoso do que pode parecer. Nesse estgio, voc precisa esboar o sistema, apl icativo ou componente proposto com detalhes suficientes para determinar toda as entidades principais. Um artificio que gosto de usar para iniciar esse processo empregar todos os substantivos que aparecem nas descries de meu sistema. Utilizando o vinte-e-um como exemplo, d uma olhada nessa breve e provavelmente incompleta descrio do jogo (recorra ao site da Encal1a para obter informaes mais completas). O vinte-e-um umjogo de cartas com dois ou mais participantes, um deles dando as cartas. O objetivo do jogo fazer com que o valor de suas cartas chegue o mais prx im o possvel de 2 1 sem ultrapassar essa marca, e ele jogado entre os participantes incluindo tambm o jogador que distribui as cartas. Em caso de empate (quando o jogador que d as cartas e os outros obtm o mesmo valor prximo a 2 1), quem ganha aquele que distribui as cartas. Antes de cada rodada, os jogadores apostam uma quantia em dinheiro em sua probabilidade de ter uma mo melhor que a do jogador que d as cartas . Um ou mais baralhos so embaralhados e, em seguida, o jogador que d as cartas distribui uma para cada participante e para ele mesmo. Nesse ponto, os partic ipantes fazem suas apostas depo is de conhecer somente uma carta. Em seguida, o jogador que d as cartas distribui mais uma para cada participante e para ele mesmo. A rodada termina se algum chegar a um total igual a 21 com apenas duas cartas. Se ningum consegu ir esse resu ltado, chamado de ' natural', ento, o jogador que d as cartas as distribui em ordem para cada partic ipante, uma de cada vez, at que ojogadordecida parar ao atingir 21 ou quando chegar perto. Se ele exceder 21 com as novas cartas que recebeu, perder imediatamente essa rodada. Todos os participantes passam por esse processo, ped indo mais cartas at que decidam parar ou que excedam o va lor. Depois que todos os jogadores decid irem parar de receber cartas ou ti verem sido elimi nados da rodada, o jogador que d as cartas continua a receb-Ias, decidindo se pra ou permanece, segundo as regras fixadas. Depois que ele e os outros jogadores j tiverem recebido todas as cartas, ele ter de pagar a todos os jogadores com resultados mais altos que os dele, e os que tiverem resultados mais baixos tero de pagar a ele. Portanto, j que o jogador que d as cartas sempre ganha em um empate, se ele term inar com 21 , os outros pagaro a ele . E claro que essa uma descrio breve, no abordando quando as apostas so dobradas, divididas e outras caractersticas do jogo, mas est detalhada o bastante para atender a essa discusso. Considerando esse exemplo como a parte de uma declarao necessria a seu trabalho, voc pode comear a procurar as entidades que poderiam ser transformadas em objetos. Lembre-se de

Dia 14

meu conselho sobre os substantivos e tente por sua prpria conta criar uma lista de objetos antes de exam inar a que consegu i. Percorrer o exemplo apenas procurando os substantivos produzir mais entidades do que queremos, mas posso fazer uma se leo nessa li sta e obter as sugestes a seguir para os objetos: Participante Jogador que d as cartas (seria includo como um participante?) Rodada (uma jogada) Jogo (o jogo completo) Baralho Mo (cartas do participante ou do jogador que d as cartas) Carta (uma nica carta do jogo) Aposta (representando uma aposta do part ici pante)

Dada essa lista, passaramos para a detenn inao das propriedades e mtodos desses objetos, que em geral ajudam a defin ir quais deles, se houver a lgum , esto relacionados.

Determinando as Propriedades e Mtodos


Atendo-se apenas a um subconj unto das entidades encontradas, comearei a examinar Participante, Jogador que d as cartas, Baralho, Mo e Carta. Cada uma delas poss ui vrios atributos que podero ser propriedades, e diversas aes provveis que podem se tornar mtodos. Um Participante pode ter um Nome, uma Mo atual, uma Posio D que o jogador que das cartas o faz em uma ordem especifi ca entre os participantes, a posio pode ser necessria) e o Total em dinheiro como propriedades. Os mtodos do objeto Participante poderiam incluir Permanecer, Parar, Apostar e outros. O Jogador que d as cartas pode ter o Nome, a Mo aluai e o Total em di nheiro tambm, alm dos mtodos Permanecer e Parar do objeto Part icipante. S dois objetos, e j estamos vendo um certo padro. Por causa das semelhanas entre Part icipante e Jogador que d as cartas, poderia ser melhor que eles fossem o mesmo objeto ou que existisse um relacionamento de herana entre eles. Perceber esses re lacionam entos uma parte essencial do processo de identifi cao dos objetos, e pode afetar muito o aplicat ivo resultante. Se os objetos Jogador que d as cartas e Participante tivessem sido herdados do mesmo obj eto bsico, ou Jogador que d as cartas fosse herdado de Participante, ento, voc poderia escrever um cd igo que lidasse com as duas entidades apenas tratando-as como instncias da classe bsica. Continuando a percorrer a lista de objetos, o Baralho teria um conjunto de obj etos Carta e uma propriedade Quantidade (para indicar a quant idade de cartas atualmente no baralho, diminu indo quando elas fossem distribudas). De maneira semelhante, o objeto Mo, representando as cartas que um participante ou o j ogador que d as cartas estivesse segurando no momento, tambm teria um conjunto de objetos Carta e lima propriedade Quantidade. Voc tambm poderia querer

Introduo Programao Orientada a Ob jetos

399

uma propriedade Tolal no objelo Carta, para indicar o valor lolal das cartas, mas a regra ' o s pode va ler 1 Oll II ' tornaria essa propriedade difcil de implementar e seria necessrio um trabalho maior no projeto. Os mtodos do objeto Baralho incluiriam Adicionar/Remover para o conjunto de cartas e um mtodo Embaralhar para misturar esse mesmo conjunto. O mtodo Adicionar/ Remover seria aplicado ao objeto Mo, mas Embaralhar no seria to ti l. Os objetos Baralho e Mo no so apenas semelhantes, eles so quase idnticos. Em vez de pensar na herana, uma opo seria transformar os dois na mesma classe, porm contendo quantidades diferentes de cartas. Como alternaliva, voc poderia criar Mo e Baralho como classes derivadas de uma classe ConjuntoCartas mais genrica. A classe Carta bem fcil de definir: naipe (Copas, Espadas, Ouros e Paus) e valor (2-1 O, K, Q, J, A), e no uma necess idade real de que seja herdada de qualquer outro objeto.

Modelando Seus Objetos


Ao percorrer o processo de detenninao dos objelos na anlise de requisitos, seria ti l que voc criasse diagramas ou modelos para ilustrar os objetos e seus relacionamentos. O Visual Studio .NET Architect Edition fornece ferramentas de modelagem, e elas tambm esto disponveis em uma cpia autnoma do Microsoft Vis io. Por enquanto, para demonstrar a aparncia de um diagrama de modelagem de objetos, veja a Figura 14.1 .

FIGURA 14.1

A modelagem UML
(Unil-ersal Modefing

. .. . .

Lal/guage) mel/de

a IIl11a

finalidade relacionada ao proje/o. forneceI/do a \'oc lili/a visualbao do es/ado a/ual do

modelo de obje/o de seu


aplicalil'O, e represelllo

- _.
D
("J

CJ

a docllfllclltao do

/til/doI/amemo ill/erl/O
de seu sis/el1ltl.

O diagrama mostrado na Figura 14.1 foi criado com o uso de um estilo de modelagem chamado UM L ou Universal Modeling Language. Esse tipo de diagrama pode ser gerado empregando-se qualquer lima das diversas ferramentas existentes, inc lu indo o Visio e o Rational Rose. A vantagem de modelar seu ap licativo fornecer um diagrama de seu projeto inicial dos objetos e utili-

Dia 14

z- Io quando fizer alteraes com o passar do tempo. Em um ambiente que envolva uma equipe grande, os recursos de gerao de cdigos da maioria das ferramentas de modelagem tambm podem ser teis, perm itindo que voc crie o cdigo da estrutura de qualquer conjunto de objetos de seus diagramas. Ainda com relao gerao do cdigo, o Vi sio e o Rational Rose (e provavelmente outros) do suporte engenharia reversa de cdigos existentes, e podem usar essa tecnologia para produzir um diagrama de objetos a partir desses cdigos. A engenharia reversa uma tima maneira de documentar um sistema quando no se emprega a mode lagem desde o incio.

Resumo
Os objetos so uma das principais partes do Visual Basic .NET, mas urna abordagem orientada a objetos diferente de urna procedural comum. Deve-se enfocar primeiro o projeto, na tentativa de vis ualizar os conceitos e entidades de um sistema como objetos, antes de se preocupar com os detalhes da implementao do conceito desses objetos. No Dia 15, voc aprender mais sobre a criao de objetos usando os diversos recursos da POO discutidos em toda esta lio.

P&R
P O U\,j fa la r qu e a C# e a C++ fornec em melho res recursos de prog rama o orientada a objetos do que o Visual Basic .NET. Isso verdade?
R Antes da plataforma .NET, isso era verdade com relao a C++; ela fornece recursos de POO (como a herana) que o Visual Basic no poss ua. Agora, todas as linguagens .NET apresentam a mesma funcional idade de POO porque ela est sendo fornecida pela Common Language Specificat ion (com a qual todas as linguagens .NET devem estar em conformidade) em vez de ser especfica de cada linguagem. Isso significa que na plataforma .NET, o Visual Basic .NET apenas uma linguagem to boa para a POO quanto a C++ ou a CII .

P A POO melho r ou ma is r pida do que o estilo de programao ' linea r' ou comu m?
R No necessariamente. A POO no produz res ultados diferentes em um aplicativo; simplesmente outra abordagem para projetar e construir esse aplicativo. Em geral , acred ita-se que a POO gera sistemas que possuem uma manuteno mais simples e so mais fceis de expandir, mas isso decerto estar mais relacionado com o cdigo criado por voc.

Workshop
O Workshop foi planejado para ajud-lo a antecipar possveis dvidas, revisara que j aprendeu e comear a pensar em corno colocar seu conhecimento em prtica. As respostas do teste esto no Apndice A, ;;Resposlas dos TesteslExerccios" .

Introduo Programao Orientada a Objetos

401

Teste
I. Que palavra-chave permite que voc se refira classe bs ica quando escreve um cdigo dentro de lima classe derivada? 2. Que nome dado quando so criadas vrias verses do mesmo mtodo com conjuntos diferentes de parmetros? 3. Qual seria o resultado deste cdigo?

1 Module A llAboutObjects 2 Sub M ainO 3 Oim x As myFirstClass 4 Dim y As myFirstClass 5 x " New myFirstClass()
6
y " x

7 y.Name " "Fred" 8 x.Name " y.Name 9 Console . Wri teLine("x.Name - lO}" , x. Name) 10 Console.WriteLine("y.Name" lO}", y.Name) II Console.ReadLineO 12 End Sub 13 End M le odu
14

15 Public Class myFi rstClass 16 Public Name As String 17 End Class

Exerccios
Descreva o que poderia ser um projeto com objetos que registrassem os eventos de um grande estdio. Leve em considerao vrios tipos diferentes de eventos e produza uma pequena lista dos objetos que voc poderia projetar para essa finalidade.

SEMANA
Reviso

Na Semana 2, abrangemos lima grande rea, indo da introduo a uma boa mostra das classes do .NET Framework aos detalhes sobre os recursos avanados orientados a objelos do Visual Basic .NET. No geral, voc aprendeu o bastante para criar um aplicativo completo de produo com uma interface com o usuri o, conexes com bancos de dados e at algumas conexes com as

funes do servidor como o registro de eventos.


O Dia 8 apresentou vrias das parles mais teis do .NET Framework e tambm o conduziu pelo processo de explorao do Frame