Вы находитесь на странице: 1из 662

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:

(11) 3611 9686

Fone:

(II) 3613 1213

Endereo Eletrnico:

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

Endereo Postal:

Pearson Education do Brasil


Rua Em lio Goeldi, 747 - Lapa
So Paulo - SP/ 05065-110

...

...

cc

cc

CI

(II

.e
cc

CI

..,

""-cc

CI

cc

CI

-CIcc

-CIcc

'"cc

.N

II)

ln

-cc

( II

cc

CIl

-cc

:$

CI

CI

CI

C,)

.-

...

co

CI

CI

cc

cc

.>
(II

cc

-==
...c..
II)

...

-CIcc

-CIcc

:$

CI

'"C-ccI

"":$

co

..,

-CIcc

C>

<C

cc

CI

cc

CI

CI

ln
~

cc

CI

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

Controlando o Fluxo dos Programas

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

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

Dia 5

Dia 6

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 .. .. . .. ... . .. .... . .. ... . .. ... . ... .. . . .. . . . .. .

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

Arquitetura dos Aplicativos na Plataform a .NET

127

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' ....................................................

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

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

A prenda Visual Bas ic .N ET em 21 Dias

XII

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

202

SEMANA 2 Viso Geral

203

Dia 8

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

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

, , , .. , 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

Dia 13 Usando o Server Explorer

0.0

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

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 ..

381

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

SEMANA 3 Viso Geral


Dia 15 Criando Objetos no Visual Basic .NET

403
405

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

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

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

Dia 16 Formulrios Windows Avanados

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' ..................




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




.. .........

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

Dia 17 Usando o .NET Framework

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

Aprenda Visual Basic .N ET em 21 Dias

XVIII

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 ......... . . .. ... ..

... . .... ... . .. . . . . .. .. . 542


... . ... . . ... . .... . . .. . .. 545
....... . . .. .. ...... .. . .. 545
. . . .. .. .... .. . ... ...... 546
. . . . ... . ..... . ...... ..... 546
. . .. . . . . ..... .. . .. . . ..... 546

Dia 20 Introduo XML


,

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

XIX

Sumrio

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

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

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

592

600
604

605
605
605
605

SEMANA 3 Resumo

606

Apndice A - Respostas dos Testes/ Exerccios

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

597
596
597

614

615
615
615
615
615
617

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

609

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

. . . ...

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

... . ..

. . .. . . .

620

621
621

619
619

617
617

622

623
623

67'

-,

xx

A prenda Visual Bas ic .NET em 21 Dias

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

627

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

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

.. .

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

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

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

Teste ' . . .... . ...... .. . . .... ... . . . . . ... . . ... ... .. ... .... . . . 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 ' .. ... .. . ... . . ...
. .. . . ...
. ... . . . . .

Exerc c ios ... .. .. ... .. . .. . .. . .. .....


. ... . . . . .
Respostas do Dia 21 .. .. . .. .
.. . . . . . .
Teste' .. . . . .. . ... .. . . . . . .. . .. .. ... . . .. . . ... . .. .. .
ndice

63 1

63 1
63 1
633
633
633
638
638

638
639
639

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 ...

Novo TERMO

. .. e ruins que devem ser evitadas.

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.

CDIGO

Os cones Cdigo so usados em exemplos de cdigo que o usurio deve inserir.

ANLISE

Os cones Anlise apontam para discusses com explicaes sobre os exemplos de


cdigos.

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
Hoje, o introduzirei no universo da programao do Visual Basic respondendo s perguntas
.

a segUI r:

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

Iwrdll'lIrc.

Aplicativo do Usurio (incluindo seus programas!)

Sistema Operacional
Drivers de Dispositivos

Drivers de Dispositivos
Componentes do Hardware

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

~~ ...

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

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

UseI' Ime/faces.

fme/faces gr4ficas com


o usurio) como esta
caixa de dilogo. o que
fa= pane do. servios
que ele fornece aos
programas.

daIo(J boxl

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

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

" , (crie/Edite o Cdigo)

Compile
)
C------'-~

Encontre erros)

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

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

1iI"

... . . .

peJ'mi/ell/ que voc crie

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

"-

Distribuio

Projeto

'\

./

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).

FIGURA 1.7

"13

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

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

.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.

Aplicativo do Usurio (in cluindo seus programas!)

.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

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

15

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

Aplicativo. Cliente,

Windows 2000 '"'"''''''' , ' _


Servios di Web

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

II

SlIIdio .N ET deseja

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

111 0 >< _ ' "


Iil~"""'"

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


L

.. ,,_.,_

O lil~ ' ''_.o._

Iil.v _ _ _ """"",--",
i/l.~ _""'_'_"

til i/l~ _""'sro


1II 1il ~ "' ....... _
___
ill~'
.
Iil

..

. ... .

_._.....

-..-_~ I

_o.w, ...

Iil~

___

,~_

..... ",

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

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

. Iil~ , _

.__ ...

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

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

localmetl/e para que se

.... "" I , .... , , - ....:,


TI>O _ ..... ." _
... _

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

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

oblenl1ll mais
velocidade.

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

_ _ 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', ..


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

............ " 01 " .................. ,~ , """"

"'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

TERMO

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

um programa que no faz nada de til, ou mais espec ificamente, nada mais til do
que apenas exibir a mensagem solicitada.

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

.~ .

~"'

III/I

(1l"(llIil'O de lexlo e
muilOS Olllros

documelllos.

_...

0 .~

9><>"'"

~_<MO

fl _

...

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

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

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

_ _

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 Framework, System, portanto, adicione a linha Imports System ao incio do arquivo de cdigo.
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

COOIGol
RESULTADO

Dia 1

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 Class Step3
Shared Sub Main{)
System.Console.WriteLi ne{ System.Environment.OSVersion.ToString{))
End 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

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

31

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

"QEI

.-

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

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

. , ' " l ....

~--------

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

I"',..' ,"'.

1.... , , ..- o.......

... ,ou<,

... ,...,

CJ
CJ
CJ

j(.. .....j

..... 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.,'

,,_._,.

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

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

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

~,

J...

......

"''''

...

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

sees da pgina
inicial do Visual
Sllfdio.

0 ... _
~,~

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

""cWTd "."""

,_~ ~

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


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

c_

,"'11_ 1 _..... _ '


'M_n
...... o.ww .......... _r........ 01 SQL .......

PKtK"""" .....

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

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

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


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

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.

33

Trabalhando com o Vis ual Basic .N ET

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

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.

._
~

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

too _

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

f~'..

I'Ir;J1:!

__

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

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


. . . ao . . .... O

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

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

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

... ....

"t" ...

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

,o.o<ud

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

"

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

" Ou_'''' _.
_

."" "

'D<l "

.. .. ..... _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

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.

. _ _ ......... , ...... " " ... ...... , ( _ ) .... . ....


!!lo
_
_
_
_
tJOI>
~'"

..tl!3

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

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

, , ..... "..

.....,,,.,

..,.,.."

,- .

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

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

~,

H,O.,

.....

~. '

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

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

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
.......

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.

2.7
As j anelas de

.~....... _, ............. _ " " I _ J ' .... ' ... I _ J

"r::IEJ

FIGURA

ferramentas podem ser

fechadas por meio do


peq1leno bouio X q1le

, ....,

I"lflEJ

as ocultar da te/a at

que sejam lIecessrias


f/OI'Gmente.

..-

~,

ii ' ... ' .. ~


0 -

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

FIGURA

Di a 2

2.8

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

.~ejalll

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

'w.. '

-,,,"'

!!O\>

. '""""

_.,"'~~~

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.

FIGURA

Trabalhando com o Visua l Basic .N ET

37

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

..r:lD

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

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

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

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

1'I' .. m'

jerramelllas abertas
cnqllalllO OCllpam o
mesmo espao precioso
da tela.

"
~

",'

_ 'lO'

.." ,' '.0 .

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

<00

,,

--. . . 0;,

-,
'-,--

..

.....""'

"

"'r.JC!

-,

~~

'-,-

<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-_
J;IlI"'~_

IZ r... _

.. "(

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

'"

0 _

,,-

0 .....-.._

. ..

,,,,, ',.,,,

<.....,

."-"
"""",>

,1 ~t. L>

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

""'""" .....

Voc pode desenhar


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

l<d> _

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


. - ., ..

_ ' ..'I

o
;.

Jl

.
c

" " '"

. ..

., .

40

NOTA

Dia 2

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 .
. _ _ .. _

FIGURA 2.13

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

~'"

'fJ<w

.. ,"""' ............. ""7_1 , "'''' , ...


_
_
1_ _
ti<\>

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

11'190

,p ql .--"

, .~ , ,,'

" 0'_

. "t <& , . . ~oS .. . . ~


. Ch.mU . . . . . . . . ' yot_ . 'Ta . . .

. co.., . .. . ' ........ 1" . . '.ot_.'


"" .N
_ ' ,.,'
.Tu , ...... ,.

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

qualquer Olllro comrole

''"' ...

dela.

' , ...

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

Dia 2

42

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

A barra de fermmenra.l
fornece boIes para

Debu!I

II

... X

ai

iniciar e imerromper li

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


_ " " " .......... _

FIGURA 2 .15

A janela Dyllamic Help


tellla !/IOSlra/"
informaes Ileis

:!O<'

....

..... ' '' '[ .. _1 , ~ ,..


Jooh _
tIOI>

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

me.mlO anles qlle voc

45
I!IIIIgE!

' Tono'

as solicite.

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

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

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

' .
.... IN..
".H_
"
"ro "
.. ....... " "r.,,.,,
C.~"OI'."""

.. . ... _

.... ...

. ,

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

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

"

"

~ ,, -_

,.. ,

,,_ . ,-~, .,.

'

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

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


'.,........', . .. , _ , 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

'onol

sel1'idor local qllal/lo

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

de outras mquinas.

......_L.yo.'''.,..,

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


.. ," $,,, .,_.""' .c ,,,

... ~.o .. . _

.... . ",."""

.....

" . To . . . " ono"

..,

........,
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).

47

Trabalhando com o Vis ual Basic .N ET

2.17
Quando IIfIl objeto for

FIGURA

se/eciollado lia jalle/a

de ediiio (lima caixa

..

,,~m'

de texto em UIII

formulrio /lesse caso),


ajal/ela Properties
exibir todos os seus

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

"""' . .,...

-, I

0-

atribllfos.

~r _~

o
o
o

o~

''''1
, ,
o
o

p'

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

p.*:I

(>oco

!II> _

l ltle. .c~

A janela C/oss View


moslra seu {)ro)elo

OIgani::ado por seus


objelos e 11(10 por sellS

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

lOIREI

. ...,
r

.'"

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

"

'"'

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

49

Trabalhando com o Visual Basic .NET

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"

permile qlle sejam


examinadas as classes

fomeddas pelo .NET

~~-_
o

' w ,"'~ CII


o

""'...,. . _

....

.........,

,, ~ e.I,,!

....

-,'

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

"..

,...

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., . . . . .

,.,.... , lO "
''f<(),

...... l _ , . . ' ,"_ . ~.l'<'


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

C~.ycl1< ~ (

~_"._

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.
_ .... _

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

.. .

~~

""_

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

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

_ ..

adicionais.

, ~,

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

Da mesma maneira qlle


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

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

,- ,
~

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

-O'~

"'-

"'lO
o .....,.

~~

[j,

-'!m- ";:!li- --

c,"

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

[ii.]

iD

~ ,~

..,.,.

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.

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.

""' ,o~

- (noW_

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

-~

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


~

...

p _

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

~ _

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

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

I'. r.
"II r

..... _

El I

,, "'"

"' _ - . .

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

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

......

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

D_

O 0 ..... _ 11<

D_

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

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.

Dia 2

54

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 .
~ __

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

especificadas antes de
sI/a cOllstruc7o.

FIo .... <icn

1.0.2'314.16

-------

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.

Dia 2

58

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

13

Conflgural lon M<lMg~r

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

em gera/usada
fases de

I T.". M=- I

11m'
1'1'0'"

depurao/lesfe,

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
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,

Novo

TERMO

Dia 3

TABELA 3 . 1

Tipo
de Dado

Tipos de Varivel de Inteiros


Tamanho
(Bytes)

Abrangncia

Comentrios

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.

Curto
(Short)

-32.768

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
32.767

Inteiro
(Integer)

Longo
(Long)

- 2.147.483.648

A varivel de inteiros-padro. Em geral, o


inteiro o tipo mais ve loz de varivel para

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).

- 9.223.372.036.
854.775.808

O tipo de varivel perfeito para esta po-

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

Tipo
de Dado

Tamanho
(Bytes)

Simp les
(Single)

Duplo
(Doubl e)

Abrangncia

Comentrios

- 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.

- 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 IOlm para nmeros
positivos

O tipo duplo uma varivel de

'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

Tipo

Tipos de Variveis de Strings


Tamanho

de Dado

Cha r

(Bytes)

Abrangncia

Comentrios

Um caractere

Adequado para annazenar um n ico carac-

tere.

String

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

TERMO

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

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.

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

Tipo

de Dado

Booleano
(Boo 1ean)

Ti pos Diversos de Variveis Simples


Tamanho
(Bytes)

Abrangncia

Comentrios

Verdadeiro
(True) ou falso

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 .

(False)

Data
(Date)

1 de jane iro

de 100a3 1 de
dezembro de

9999

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.

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

LISTAGEM 3.1

71

Declarando Arrays (continuao)

13
14
15
16
17

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"}

18
19
20
21
22

' 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.

Dia 3

72

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

Const PI " 3.1415 As Double


Const DSN As String" "Random"

COOIGO

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:

ANALISE

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

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

NOTA

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

TipO de Varivel

Prefixo

Exemplo

Byte

byt

bytldade

Curto (Short)

sht

shtContagem

Inteiro (integer)

i ou i nt

iOvelhas

Longo (Long)

l ou lng

1Popul acao

Simples (Single)

,"g

sngGolpe

Dia 3

TABELA

3.5

Convenes de Nomeao Sugeridas (continuao)

Tipo de Varivel

Prefixo

Exemplo

Duplo (double)

d ou db 1

dblJuros

Char

cIniciaisIntermediarias

String

s ou s tr

sNome

Booleano

bEstaAberto

Data (Date)

dt

dtDataA I uguel

Tipos definidos
pelo usurio

Dois ou trs caracteres importantes do nome da estrutura

Variveis criadas, com base em estruturas equivalentes a um ponto ou retnguio poderiam ser chamadas de
ptLocal e retTamanho

Constantes

Nenhum prefixo. O nome


todo em maisculas, com
cada palavra separada pelo
caractere sublinhado U

PI, TAXA_IMPOSTO

Enumeraes

Dois ou trs caracteres significativos

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

Operador

Uso

Exemplo

::

Atribu i um valor a outro

x" 6

Soma dois va lores

Y " X 7

Subtrai um valor de outro

y " X - 4 (Y igual a 2)

Multi plica dois valores

y " X 2(Yiguala (2)

Divide um valor por outro

y " X / 2 (Y igual a 3)

Divide um valor por outro, mas s retoma


um nmero inteiro

y " X \ 3 (Y igual a I)

Mod

Abrev iatura de mdu lo; retorna o reslO de


uma diviso

y :: X Mod 3 (Y igual a 2)

&

Associa duas strings

."

S " "01 " & "Mundo" (S


igual a "Ol Mundo")

Sm bolo para adicionar um valor e atribuir


o resultado

X +:: 2 (X igual a 8)

Sm bolo para subtrair um valor e atribu ir o


resultado

X -= 3(Xiguala5)

Smbolo para mu lt iplicar um va lor e atribuir


o resultado

x *" 6 (X igual a 30)

Smbolo para dividir por um valor e atribuir


o resultado

Smbolo para acrscimos a strings e atribuio do resu ltado

S &= " . John" (S igua l a


"Ol Mundo, John")

Eleva um valor a potncia de um expoente

3"4 (3 elevado a 4, retoma 8 I)

.~

&~

(Y igual a (3)

I" 5 (X igual a 6)

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.

Dia 3

76

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

Funo

Descrio

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).

CByte

Convene para um tipo Byte. Todos os valores maiores do que 255 ou informaes fracionrias sero perdidos.

CChar

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.

CDate

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 .

CObl

Converte para um tipo duplo (Doubl e).

Clnt

Converte para um inteiro (Integer). As fraes so arredondadas para o valor


mais prx imo.

CLng

Convene para um tipo longo (Long). As fraes so arredondadas para o valor


mais prximo.

CSht

Converte para um tipo curto (Short). As fraes so arredondadas para o valor


mais prximo.

CStr

Converte para uma String. Se o valor for uma data (Date), apresentar o formato abreviado.

77

Introduo Programao com o Visua l Basic .NET

TABELA

3.7

Funes de Converso (continuao)

Funo

Descrio

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

Funo

Funes de Manipulao de Stri ngs


Descrio

Exemplo

Retorna o comprimento de uma


string.

iValue " Len("Olc'i"}


igual a 3).

eh,

Retorna o earaetere com base no valor


ASCII oU Unieode inserido.

sValue " Chr(56} ('sValue igua l a


letra A).

Ase

Retoma o valor ASCII ou Unicode

iValue" Asc("A") ('iValue igua la


56).

Left

Retorna caracteres de uma string, comeando com o da extrema esquerda.


Tambm precisa da quantidade de caracteres a retomar.

sValue" Left("Olc'i Mundo",


('sValue igual a O).

2)

Right

Retorna caracteres de uma string, comeando com o da extrema direita (o


oposto de Left). Tambm precisa da
quantidade de caracteres a retomar.

sValue" Right("O lc'i Mundo",


('sValue igual a undo).

4)

('iValue

Dia 3

TABELA

3.8

Funes de Manipulao de Stri ngs (continuao)

Funo

Descrio

Exemplo

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).

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)

sVa lue - Mid("Oli Mundo",


('sValue igual a Mu ndo).

4)

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.

79

Introduo Programao com o Visua l Basic .NET

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.
Converte uma Slring em minsculas.

Lcase

sValue

LCase("OIc1 Mundo")

'sValue igual a ol mundo


Ucase

Converte uma string em maiscu las.

sValue

UCase("OIc1 Mu ndo")

'sValue igual a OL MUNDO


LTrim
Rtrim
Trim

Remove todos os espaos que precedem uma string

Value

Remove todos os espaos que sucedem uma string

sValue

Remove todos os espaos que antecedem e sucedem uma string

sVa lue

Ltrim(" Ol Mundo ")

'sVa 1ue igual a "01 Mundo


=

Rtrim("

Ol Mundo ")

'sValue igual a"


=

Trim("

"

oa

Ol Mundo"
Mundo

")

'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

Funo

Descrio

IsArray

Retoma True (verdadeiro) se o parmetro for um array.

IsDate

Retoma True se o parmetro for reconhecido como uma data.

IsNumeric

Retoma True se o parmetro for reconhecido como um nmero.

IsObject

Retoma True se o parmetro for algum tipo de objeto.

TypeName

Retoma o nome do tipo de dado do parmetro, por exemplo, TypeName(sName) retomaria "String" .

Dia 3
TABELA

3.9

Funes Internas Diversas (continuao)

Funo

Descrio

Now

Retorna a data e a hora atual.

Today

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

COOIGO

LISTAGEM

3.2

81

Criando e Usando uma Sub- rotina

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")

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" .

ANLISE

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

1
2
3
4
5

LISTAGEM

3.4

O Programa de Clculo de Investimentos

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

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

I
2
3
4

Private
Private
Private
Private

LISTAGEM

3.5

Declaraes para o Clculo do Valor Futuro

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

CDIGO

LISTAGEM

3.6

85

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

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

LISTAGEM

3.7

A Rotina das Entradas Console . Read

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

Console .WriteL i ne()

3
4
5
6

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 DepositoMensal 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 Double = 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 Return 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

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 DepositoMensal 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 Double
'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

37

38
39

Pr iv ate Function GetValue(ByVal Prompt As String) As Stri ng


Console .W rite(Prompt)

88

Dia 3

COOIGO

LISTAGEM 3. 10

O Programa Completo de Clculo de Investimentos


(continuao)

40
41

Return Console . ReadLine


End Function

42

43

Private Sub GetlnputValues()

44
45

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

46

dblJurosAnuais

47

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

lO

48
49
50
51

decDepositoMensal = CDec(GetValue("Depsito mensal: ")


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

52
53

Private Sub DisplayResults(ByVal Resultado As Oouble)

54

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" .

Dia 3

90

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 Noite!"
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

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

20
21
22
23 End Class

Voc pode fazer o download de Greeti 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.
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.

ANALISE

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

LISTAGEM 4.2
5
6
7

97

Greeting_IFELSE.vb (continuao)

Shared Sub MainO


Oim dtCurrent As System.OateTime
Oim iHour As Integer

dtCurrent =dtCurrent .Now


iHour =dtCurrent.Hour

10
11

12
13
14

15
16
17

18
19
20

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

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

Public Class Greeting


'Execute o aplicativo
Shared Sub Ma in()
Oim dtCurrent As System.OateTime
Oim iHou r As ln teger

8
9

10
11

12
13
14

dtCurren t ~ dtCurrent. Now


iHour ~ dtCurrent.Hour
If (iHour < 12)Then
Conso l e .Writeline(nBom Dia!")
Elself (iHour >~ 12)And (iHour < 18)Then

Controlando o Fluxo dos Programas

LISTAGEM 4 .3

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

15

16
17
18
19

99

Else
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"

Dia 4

100
1

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

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

9
10
11
12

13

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

14

15
16
17

18
19

20
21

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

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
usar um padro como C*T 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

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

Expresso

Resultado

TRUE ANO TRUE

TRUE

FALSE ANO TRUE

FAl SE

TRUE ANO FAl SE

FAl SE

FALSE ANO FALSE

FAl SE

TRUE DR TRUE

TRUE

TRUE DR FAlSE

TRUE

FALSE DR TRUE

TRUE

FALSE DR FAlSE

FAl SE

TRUE XDR TRUE

FAl SE

TRUE XDR FAl SE

TRUE

FALSE XDR TRUE

TRUE

FALSE XOR FA LSE

FAl SE

NDT TRUE

FAl SE

NOT FALSE

TRUE

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.
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.

Novo TERMO

LISTAGEM

4.6

ShortCi reuit i n9. vb

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

Shared Function Test(sInput As String) As Boolean


System.Console.WriteLine(sInput)
Test = FALSE
End Function

13

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.

Dia 4

104

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

Case no lugar das instrues If da Listagem 4.7 produzir o cdigo


alternat ivo mostrado na Listagem 4.8.
LI STAGEM

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

No 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 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

Shared Sub Main()


Dim sOayName As String
Dim iFirstDay As Integer
Dim i LastOay As Integer
Dim iCurrentDay As Integer

9
10
11
12

13
14

15

iFirstOay = 2
iLastOay = 6
For iCurrentOay = iFirstDay to iLa stOay
System.Console.WriteLine{WeekdayName(iCurrentDay))
Next iCurrentOay
End Sub

16

17
18

Shared Function WeekdayName{ByVa l iDayNumber As Integer)As String


Dim sWeekdayName As String

19

20
21

22

23
24

25
26

Select Case iDayNumber


Case 1
sWeekdayName "Sunday "
Case 2
sWeekdayName "Monday "
Case 3
sWeekdayName "Tuesday

II

Dia 4

108

LISTAGEM 4 .10

(continuao)
Case 4

27

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

"Wednesday"
"Thursday"
"Friday"
"Saturday"

"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

LISTAGEM 4 .11

109

ForExample.vb

1 Imports System
2 Public Class ForExample
3

4
5
6
7
8

Shared Sub Ma i n{)


Dim iCounter As Integer
Dim iFirstValue As Integer
Dim iLastValue As Integer
Dim iIncrement As Integer

10
11
12

iFirstValue ; O
iLastValue : 100
ilncrement : 10
For iCounter = iFirstYalue to iLastYalue Step ilncrement
System . Console . WriteLine{iCounter)
Next iCounter

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

Dia 4

110
1

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

While iCounter

12
13
14

'<Insira o bloco de cdigo aqui>


iCounter = iCounter + iIncrement
End While

15

<=

iLastValue

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


Dim iMatch As Integer ~ -1
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

LISTAGEM 4 .13

14

15
16
17

18
19
20
21

22

23
24

25
26

27
28
29
31

111

WhileSearch.vb (continuao)

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 Whi 1e, depois
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-

Dia 4

112
1

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

3)

3 tambm funcionaria

Loop

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

o lao Do

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.

NOTA

Condies de Sada
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.

Novo

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

>

i = i + 1

Loop

100 or arrNomes(i)

"Joe"

Dia 4

114
1

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

iCurrentGuess

iTarget) Dr (iCurrentGuess

-1)

GetNextGuess()

Loop

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

loopPerfonnance _Better . vb

1 Public Class LoopPerfonnance


2

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

For i " 1 to 1000


System . Console.WriteLine(sName)
Next i

11

12
13

End Sub

14
15

Shared Function UserName() As String


Dim sName As String
sName " System.Environment.UserName
UserName = sName

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

1
2

Etapa 2: Insira Este Cdigo Acima da Instruo End Sub da


Listagem 4. 16

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)
Loop

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)

Dia 4

120

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.

NOTA

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

13
14
15

16
17

New System.Random()

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)

18
19

20
21
22

'Adivinhao do nmero
iTargetNumber = objRandom.Next(iLowerBound.iUpperBound + 1)
System.Console.Writeline{iTargetNumber)

End Sub
24 End C1 ass
23

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

LISTAGEM 4 .21

1
2
3
4
5
6
7
B
9

10
11

12
13

14
15

121

Lao das Entradas de seu Jogo

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 "

&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 *

Dia 4

122

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)

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

la
11
11
13

Next i Counter

14

System.Console .WriteLine{iFactorial)

15

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 Class Recursivefactorial


Shared Sub Ma ln()
2
3
Dim sInput As String
Dim ilnput As Integer
4

Controlando o Fluxo dos Programas

LISTAGEM 4.23

RecursiveFactoria l .vb

(continuao)

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

12
13

Shared Function Factoria l (n as I nteger)as Integer

6
7

8
9
10

123

14

15

If n

16

lhen
Return 1
= 1

Else

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

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

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:

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

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.

Dia 5

142

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

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.

Dados
Escritrio
Central
Dados
da Filial

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

Dia 5

146

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

Dia 6

148

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

Try:

1'y
Catch Ex As Exception

[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

Prob lem as e ...

151

FIG URA 6 .1

A caixa de dilogo
['roj ecl Properlies

para 1/11/ programa


com lili/ti exce[io.

_
--

--,

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

::II ' : tv<'......

..........

: : . c...........

~_ ,

...

"" - _:
_fi"
ww..-,

LISTAG EM 6 .2

<.~

. ....... """".....- - - ......,.." ,,"".....

~;

..,..

'

'

0,"""

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

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:

ANLISE

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

153

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.

NOTA

TABELA 6.1

Problemas e ...

Excees Comuns

TipO de Exceo

Ouando Ocorre ?

ArgumentException

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.

ArgumentNul1Exception

Ocorre quando voc passa um valor nulo para um mtodo, e


ele no o aceita.

ArgumentOutOfRangeException

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).

OivideByZeroException

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.

I ndexOutofRangeExcepti on

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.

NotlmplementedException

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.

OurOfMemoryException

Ocorre quando seu programa no tem memria suficiente.


Isso poder acontecer ao preencher arrays extensos ou ao
executar um lao .

OverflowException

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

FileNotFoundException

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 .

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

2
3

4
5
6
7
8

9
10
11
12
13
14

15
16

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

17

18
19

System.Console . ReadLine()
End Sub

20
21

End Module

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

ANLISE

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

1
2
3
4
5
6
7

LISTAGEM

6.4

An i nhando Blocos Try .. . End Try

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)

10

Tcy

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

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 ".

ANALISE

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.
LISTAGEM

COOIGO

1
2
3
4
5
6
7

8
9
10
11
12

13

14
15
16
17

18
19

20
21
22
23
24
25
26

6.5

Usando a Seo Fi nall y

Sub WriteToFile{ByVa l FileName 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.FileMode .OpenOrCreate .
System.lO .F ileAccess.Write)
Tcy

'Grave no arquivo
strOut "New System.IO.StreamWriter(fsOut)
strOut.Write(OateTime.Today.ToString(
Catch elO As Exception
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} . " , FileName)
Fina lly
fsOut.CloseO
End Try
End Sub

o Qu e Faze r Qu an do Progra m as Bons Apresentam

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.

ANALISE

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

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

ANLISE

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
a depuraoNovo TERMO To importante quanto a tratar apropriadamente os eITos e excees

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

Resultado de um Programa Que Calcula a Tabe la de


Pagamentos de uma Hi pateca

LISTAG EM 6 .7

Digite o valor do emprstimo:


100000
Anos 10

Juros
5.00
5.25

15

1060.66 790.79
1072.92 803.88

20

25

30

659.96 584.59 536.82


673.84 599.25 552.20

Dia 6

160
1

LISTAGEM 6.7

Resultado de um Programa Que Calcu l a a Tabela de Pagamentos de


uma Hipoteca (continuao)

5.50
5.75
6.00

687.89614.09567.79
1097 . 69830.41 702.08 629.11 583.57
1110.21 843 .86 716.43 644.30 599.55

6.25
6.50

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

1085 . 26 817 . 08

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

1226.53 970.14
1239.86 984.74

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

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

Um Programa Que Preci sa de Depurao

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

17

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)

o Que Fazer Quando Programas Bons Apresentam


LISTAGEM 6.8

CODIGOI
RESULTADO

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

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()

41

161

Programa Que Precisa de Depurao (continuao)

'Crie a tabela
OutputMortgageTable(dblReturn)
Console.Write("Pressione ENTER para continuar")
Console . ReadLine()
End Sub

40
42
43
44
45
46

Um

Prob lemas e ...

Next
End Sub

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 Que Precisa de Depurao (continuao)

RESULTADO
Anos

10

15

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

5. 00

20

25

30

415.67

5. 00

415.67

5. 00

436.50

5.25

436.50

5.25

457.33

5. 50

457.33

5.50

478 . 17

5. 75

478 .1 7 5. 75

499.00

6. 00

499.00

6.00

519.83

6. 25

519.83

6.25

540.67

6.50

540.67

6.50

561. 50

6. 75

561. 50

6.75

582.33

7. 00

582 . 33

7.00

603.17

7. 25

603.17

7.25

624 . 00

7. 50

624 . 00

7. 50

644.83

7.75

644.83

7. 75

665.67

8. 00

665.67

8.00

686.50

8.25

686.50

8.25

707 . 33

8. 50

707 . 33

8. 50

728.17

8. 75

728.17

8. 75

749.00

9. 00

749.00

9.00

769.83

9. 25

769 . 83

9.25

790.67

9.50

790.67

9.50

811.50

9. 75

811. 50

9.75

832.33

10.00

832.33

10.00

Juros

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

415.67
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

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

O Visuall3asic .NEr 110

[00 [<II. "'" _

.,....,

1'" _

tlot>

u !ii:g" 1o r.ta r...,. ' . .>J.

. -...

modo Break.

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


'Co . . . . ,.,",

c.....,. . ,,,,, .. , , . ,,. , .... _ .. t , " )

.u
.
... ,.. ,.... . <,.,(.1.,""

. , .... , . 0;0 . . . ' . . . .. , , , , _ ,,

,< ,. , ....... ,.

o." .' Oo"_ T"" . ,""Par-'"


'.uh

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

, _ _ .........., ........ .. '''-''',(1)00 ... ) - . -... ).....

6.5

Execlltando

165

Problemas e ...

t'"' jlooo _
ii: . U IlUHIIl

f'o

1/111

prog rallla com


pOlllo de
inlerrupcio.

11111

OM Ootu> I.... _
Iotlo

Iro ... . ,. &:I.

.:. )C~~.J "', ~'.

:3 ~I!.

. -.,
. ' R "

.... . . ,...-.,
".,"t.< ,.."
'Go< U. . . ' .... ,

."

Co ... , ....
. , ..... -

(0 .... , . . . . _

"

...".

_""" " 1

... "

.*>l ...... _C ... , 1"',U<l


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

...,,"""_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

Prob lemas e ...

167

FIGURA 6 .6

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.

Dia 6

168

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

6.8

!lo

Examinando os I'a/ores
das Wlriveis.

""

e._

1l '\:.I . ~ g"

t'ol

1'0

~e. "' ,

.....

.. .p . ~
... _

Prob lemas e ...

. -..

169

. ,. ...

~~~

...... <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

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:

Dia 6

170

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.

FIGURA

6.9

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 Module modMain
1

6
7
8
9
10
11
12
13
14
15

16

Sub Main()
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)

17
18
19
20
21

22
23
24

'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)

25
26

27
28

Dim iVears As Integer


Oim iRa te As Integer
Oim dblAnnua l lnterest As Oouble

29
30
31
32

Console.WriteLine(Tab & "Vears" & Tab & "l O" & Tab & "IS" &
Tab & "20" & Tab & "25" & Tab & "30")
Console.WriteLine{"Juros")

33
34
35

For iRat e = 500 To 1000 Step 25


dblAnnualInterest = iRate / 100

36
37
38
39

40
41
42
43

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

172

Di a 6

COIGO

44
45
46
47
48
49
50
51
52
53
54
55
56
57 End

LISTAGEM 6 .9

Cdigo Depu r ado (continuao)

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

Module

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

Tabela de Multip li cao

RESULTADO

6
30

35

40

5
25
30
35

36
42

42
49

48
56

40

56

64

45

48
56

63
72

63

72

81

5
6

(de5a9)

45
54

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

Dim iLow.iHigh As Integer


Oim sInput As String

11

Do

12
13

'Permita vrias execues da geraao da tabela

'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

LISTAGEM 6.10

15
16
17

20
21

24
25
26

27

Cdigo da Tabe la de Multiplicao (continuao)

If iLow <>0 Then


Console.Write("Valor mximo (mximo ig ua l a 20): ")
sInput = Console.ReadLine{)
iHigh " CInt(sInput)

18
19

23

175

sInput " Console.ReadLine{)


iLow = CInt{sInput)

14

22

Prob lem as e ...

OutputTable{iLow, ;High)
End If
Loop Unt i 1 iLow " O
Console.Write{"Pressione ENTE R para continuar")
Console.ReadLine{)
End Sub

28

29
30
31
32
33

34
35
36
37
38

39
40
41

42
43
44

45

46

47
48
49
50

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

51

52

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.

Dia 6

176

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.

Onde os objetos sero inseridos em seus programas.

Comearemos com a definio bsica de objeto e todos os termos e conceitos que a acompanham.

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 Make, Model e Colar.

Dia 7

180

"
iiI~

_", . ~t

FIGURA 7 .1

VIII projeto m=io ti

iniciado sem comer


nenhul/I orq/lh'o.

,_,,,

"""'-=
1;;:1 _ _ " _
(;J_.,,_

[ii~

-'q" -G
J
.... .
-'"
_.
_
--_: "-'''''-,.
l1 .

a ....... c.......-

:J,g
=::.:: '-'"'' ' '
-0 _ _ ""'"

""

1"-'
I~

~-

""

,"

' . . _ _ ""...-.""", UI lO"

e na ,;

",-

...... In

...

...,...o ~_ ...., :::J

" AOdto_

1- "

_ .... """"'''''''1... _
, ~,

i " ...... ..",.'f"Sol.b>o

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

'

.........

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

COOIGO

LISTAGEM 7.1

181

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 Make e Model , lembrando de tambm acrescentar
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
ser includo, porm ReadOnly dever ser especificada como palasua definio no deve
,
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

Dia 7

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 &"

183

"& objCar.Model

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 sMake As String
objCar " New clsCar()
objCar2 " objCar
objCar. Make " "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.
LISTAGEM

COIGO

7.3

Adicionado Validao Propriedade Color

1 Public Class clsCar


2
Oim m sColor As String
3

4
5
6
7
8

Public Property Color() As String


Get
Return m sColor
End Get

10
11
12
13
14
15
16
17
18
19

20
21

22
23
24
25

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

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

COOIGO

LISTAGEM 7.4

185

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

7
8
9
10
11

objCar :: New cl sCarO


objCar. Year = 1999
Try

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

12
13
14
15
16
objCar.Make = "Ford"
17
objCar .Model'" "Escort"
18
System.Console.WriteL i ne(objCar.Description)
19 End Sub

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- dtManufactured
6
End Get
Set (ByVal Value As Date)
7
m- dtManufactured = value
8
End Set
9
10 End Property

186

NO TA

Dia 7

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

1
2
3
4

LISTAGEM 7.6

Usando Nosso Mtodo Novo

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

COOIGO

Dia 7

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

Case "Days"
1ngUnits : tsDi fference. Days

27

28
29

Case "Mi nutes"


1ngUnits : tsDi fference .Mi nutes

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 Date) 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

NOTA

189

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
fi.
"" "" ' 9I>,!!f .CO!%
$':!I , .... ~ .... ' ' , .<d'
$':!I )O... . ...... I _ ", ...,,I?,,' '''.CO''' ' , ...... L, .. ,.. , ,"' .p.... " llUI

""'C" " "" .,"""'!,

. . l C...... .. . . ' . .. d " I>O" DON

. , ...... 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

Dia 7

190
1

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

Public Property MaxSpeed () As Long


Get
End Get
Set(ByVal Value As Long)
End Set
End Property

10
11

Public Property NumberOfPassenge r s{) As Long


Get

12

13
14

15
16
17
18
19

20

End Get
Set(ByVal Value As Long)
End Set
End Property
Public Property Color() As String
Get

Traba lh a ndo com Objetos

COOIGO

LISTAGEM 7 .9

19 1

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

Dia 7

192

LISTAGEM 7.11 Criando uma Classe - Filha (continuao)

COOIGO

Set(ByVal Value As Integer)

9
10
11

End Set
End Property

12

13

Public Property NumberOfOoors() As Integer

14
15

Get

16

End Get

17

Set(ByVal Value As Integer)

18
19

End Set

20

End Property

21

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

FIGURA 7 .3

(do.

As classes expem

__

tJ ~iilGII

193

~_!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.'.', .. V._"
o... ""Co< ... c..

"'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

'Cdigo remov i do para fins de simpli f icao ....

14

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

Dia 7

194
1

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 Uma Classe-Filha Agindo como uma Instnc ia da


Classe-Pai

1 Sub MainO
2
Dim objVehicle As Vehicle
3
Dim objCar As Car
4
objCar " New CarO
5

6
7

objCar.NumberOfDoors " 4
objCar.NumberOfPassengers " 6

objVehicle " objCar

Trabalhando com Objetos

COOIGO

195

LISTAGEM 7.13 Uma Classe - Filha Agindo como uma Instncia da


Cl asse - Pa i (continuao)

10

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

1
2

LISTAGEM 7.14 Usando um Construtor para Inicializar os Membros


de uma Cl asse

Public Sub New()


m dtManufactured

System.Oate.Now()

End Sub

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

1
2

LISTAGEM 7.15 Sobrepondo o Construtor de uma Classe para Fornecer Maneiras de Inicializar Objetos

Public Sub New()


m dtManufactured

System.Oate.Now()

End Sub

6
7
8

Public Sub New(ByVal sColor As String)


m dtManufactured = system.Oate.Now
m seolor = sColor

10

End Sub

11

12
13
14
15
16

17

Public Sub New{ByVal dtManufactured As Date,


ByVal sColor As String)
m dtManufactured = dtManufactured
m sCo l or = seolor
End Sub

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

1 Imports System

2 Namespace MyApp.Console
3
Modu le Main
4
Sub Main()

Decla r ando um Espao de Nome com Vria s Partes

Dia 7

198

COOIGO

LISTAGEM 7.16 Declarando um Espao de Nome com Vrias Partes

Dim objHW As New MyApp.Console.Utilities()


objHW,PrintOut()

5
6
7

End Sub

End Module

9
10

Public Class Utilities

11
12

'Run the application


Public Sub PrintOutO

13
14
15
16

Console.WriteLine(Environment.MachineName)
Console.Writeline(Environment.SystemDirectory)
Console.Writeline(Environment.GetLogicalDrives{
Console.Writeline(Environment.Version.ToStri ng(

17

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

6
7

Sub MainO

Oim objHW As New MyApp.Console . Utilities()


objHW.PrintOut()
End Sub
End Module

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

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 Main
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)?
LISTAGEM

CDIGO

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

Public Sub New()


m dtManufactured
End Sub

System . DateTime.Now()

10
11
12
13

Public Sub New(ByVal sColor As String)


m dtManufactured = System.DateTime.Now()
m sColor =sColor
End Sub

14

15
16

Public Sub New(ByVal sName As String)


End Sub

17
18
19

20
21
22

Public Sub New(ByVal dtManufactured As Date,


ByVal sColor As String)
m dtManufactured = dtManufactured
m sColor = sColor
End Sub

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

SEMANA

Dia 7

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 .makron.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

Metodo

Descrio

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 Main , como voc j viu muitas vezes, o primeiro mtodo executado 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

LISTAGEM 8.2

Executando o Apl i cati vo do Console

RESULTADO

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
Casuar
Dugo
qui dna
Tentilho

1210

CDIGO!

Dia8
LISTAGEM 8.2

Executando o Aplicativo do Console (continuao)

RESULTADO

9 Girafa
10 Hipoptamo
11 Iguana
12 Chacal

Itens em ordem ; nversa:


Chacal
Iguana
Hipoptamo
17 Gi rafa

13
14
15
16

18 Tentilho
19 quidna

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

1 Imports System
2 Imports System . IO

Redirecionando a Sada do Console

Introd uo ao .NET Framewo rk

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

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

11
12
13

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

14
15
16
17
18
19

Console.WriteLine()
Console .SetOut(oFi le)
Console .WriteLine("ltens em ordem inversa:")
For I = ITEM_COUNT - 1 To O Step -1
Console .WriteLine(sItems(I}}
Next

20

oFile.Close()

21
22
23

Console.SetOut(oOut)
Console .WriteLine("Conc l udo")
Console.Read Line()

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 Hipoptamo
11 Iguana
12 Chacal

211

Dia 8

13
14 Concludo
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 CreateText. 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).

ANALISE

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

213

Mtodos e Propriedades da classe Environment


Descrio

Membro

Propriedades

CorrmandLine

Representa a linha de comandos completa que iniciou o aplicati-

vo.
Currentoi rectory

Retorna o caminho do diretrio atual.

O$Version

Retorna informaes sobre o sistema operacional atual, por exemplo, se o Wi ndows 9x, o NT ou o 2000.

SystemOi rectory

Retorna o caminho do diretrio do sistema (\winnt\system32 no


Windows NT ou no 2000) .

Version

Retorna informaes sobre a verso de uma montagem .


Mtodos

Exit

Encerra um aplicativo, opcionalmente retornando um cdigo de


erro que pode ser usado pelo sistema operacional.

GetCorrmandL i neArgs

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

GetEnvironmentVariable

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.

GetLogicalOrives

Retorna a lista de unidades disponveis. Esse retorno feito na forma de um arrav de strings. O pri meiro (item DI elemento geralmenteA:\.

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

Mtodos da Classe Random

Mtodo

Descrio

Next

Retorna um inteiro entre Oe o valor mximo possvel para um inteiro


(aproximadamente 2 bilhes).

Next(MaxValue)

Retorna um interi ro entre O e o valor de MaxValue (a lgum inteiro).

Dia8

1 214

T ABELA

8.3

Mtodos da Classe Random (continuao)

Mtodo

Descrio

Next(MinValue,
MaxValue)

Retorna um inteiro entre os valores min i mo e mximo. Essa a variao mais usada quando se precisa de , como valor mnimo.

NextOouble

Retorna um tipo duplo entre O e 1.

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

Abs

Retorna o va lor absoluto de um nmero (se for negativo, ele retornar o valor
positivo do nmero).

Cs

Retorna ocosseno de um ngulo (medido em radianos; veja a Nota a seguir).

Retorna um tipo duplo representando o valor de e (2.7182818284590451).

Max

Retorna o valor mximo entre dois valores.

Min

Retorna o valor mnimo entre dois valores.

PI

Retorna um tipo duplo representando o valor de pi (3. 1415926535897931).

Round

Arredonda um nmero para o nmero intei ro mais prximo.

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

Dia8

Mtodos e Propriedades da Classe ArrayList

Membro

Descrio
Propriedades
O tamanho aluai da classe ArrayL i st. Configurado pela primeira vez
quando ela criada (16 por padro), podendo aumentar conforme

Capaci ty

mais elementos forem adicionados.

Count

A quantidade efetiva de itens na classe ArrayList.

Item

Retorna um elemento especifico da classe ArrayList.


Mtodos

Add

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).

Clear

Remove todos os itens de ArrayList . Count co nfigurada com O,


mas Capacity no alterada.

IndexOf

Retorna a posio de um certo objeto na classe ArrayL ist oEsse mtodo til quando usado depois de uma ordenao.

Insert

Adiciona um novo elemento ArrayL i st em uma posio solicitada.

Remove

Remove o objeto solicitado de ArrayList.

RemoveAt

Remove o elemento da posio solicitada.

50rt

Ordena os membros de ArrayList.

ToArray

Copia toda ou pane de uma classe ArrayList em um array.

TrimTo5ize

Diminui ArrayList de modo que tanto Count quanto Capacity sejam


iguais quantidade atu al de elementos na classe .

manhodaaumentar,
classe
st mais adequado na substit uio de arrays quando sabemos que o tamas no tivermos noo de at onde o conjunto avanar. 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

Membro

Mtodos e Propriedades da Classe Queue


Descrio

Propriedades
Count
Clear
Dequeue
Enqueue
Peek

NOTA

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.

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

Membro

Mtodos e Propriedades da Classe Stack


Descrio

Propriedades
Count

A quantidade de itens na pilha.

Mtodos
Clear
Pop

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

TABELA 8.7

Dia8

Mtodos e Propriedades da Classe Stack icontinuao)

Membro

Descrio

Pus h

Insere um novo objeto na pilha.

Peek

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.

Count

A quantidade efetiva de itens em SortedList.


Mtodos

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

Remove todos os itens de SortedLi st . Count confi gurada como 0, mas Capaci ty no alterada.

IndexOfKey

Retorna a posio de um certo objeto em SortedL ist. Isso


muito til aps a execuo de Sort.

Item

Propriedade

Retorna um elemento especfico de SortedList.

Keys

Propriedade

Retorna todas as chaves armazenadas em SortedLi st.

Remove

Mtodo

Remove o objeto solicitado de SortedList.

Introd uo ao .NET Fram ework


TABELA 8.8

Mtodos e Propriedades da Classe SortedList

(continuao)

Membro

Tipo

Descrio

Remo~eAt

TrimToSize

Mtodo
Mtodo

Values

Propriedade

Remove 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

221

Mtodos da Estrutura Colar

Mtodo

Descrio

FromARGB

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.

ToARGB

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,
MenuHei ght e MousePresent. O mais importante para a sua pesquisa que a classe SytemI nforma 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.

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

EJ

,"""0:.0.,) ..... """(1:<)


""......

~ Ooor

(t.)

P'lIEl

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

A"''''''

~ &.,t!M

[Obi ro.!So>:

~M!1rIoIenJ

" """'"
R..wr......,

r.

GlOW6ox

QI Plct..e8ox

O,'''

1P O.toGrld
I!".1IlktSo>:
!~ Ched:edJstBox

l!l1 ComboIIo
" lktl'low

"li.:: r,o.'hlw
I

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

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

"!:l EI

FIGURA

9.4

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

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.

ANLISE

LISTAGEM 9.3

Usando a Classe MessageBox para Exibir um Erro

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.

-....

......"'"

" " - 001.....,

:. eom...""""_,,.

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

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

14

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 uma Caixa de Se l eo

1 Private Sub btnCopy_Click(ByVal sender As System.Object.


2 ByVa l e As System.EventArgs) Handles btnCopy.C l ick
3
Di m sSource As String
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

1
2
3

9.9

Ma nipu l ando o Evento

btnMove Cl ick

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

4
5
6
7
8
9
10
11

12

13
14

15
16

17
18

Manipu l ando o Evento

btnMove Cl ick (continuao)

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

formlllrio de elllrada de dados e

eSlt dispollrel para dOlVllload /lO


site da Web desle Iil'/"o.

~Add'M'

EJ

S~eel:

Sl.<leNrov.f"i
.",- -

1"'<-", - - - - ~
bR

[9E052

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

3
4
5

6
7
8

9
10
11

Eventos de Va l idao do fonnulrio de Endereos

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

20
21
22
23
24
25
26
27
28
29
30
31

32
33

34

35
36
37
38
39
40
41
42

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

")

If sPattern <>
Then
If objRegEx . IsMatch(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

liSTAGEM 9.10

241

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 " CType(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

A classe MessageBox

1/11/0 jerromellfo

que pode exibir

......11> _" ""

Itil

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.

<T

chamada apenas com


o lexlo da mensagem
(o ml/imo).

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) Hand l es btnTest.Click
3
Oim drResult As DialogResult
4
drResult = MessageBox.Show("O que deseja fazer?".
5
"Exemplo" . MessageBoxButtons.RetryCancel)
1

6
7

8
9

10

If drResult = OialogResult,Retry lhen

'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 Mtodo 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
)

If File .Exi sts(sSou r ce) Then

10
11

12
13
I'
15

16

Dim sConfirm As String


sConfinn "String.Format("Est certo de que deseja copiar lO} em III?".
sSource . sOestination)
If MessageBox.Show(sConfirm,
"Confirm Copy" ,
MessageBoxButtons.Yes No. _

Desenvo lve ndo um a Interface com o Usurio com os Formulri os Windows

LISTAGEM9.12
17
18

Us ando o Mtodo MessageBox .Show para Sol i ci tar Confi rmao


(continuao)

Mes sageBoxIcon.Question. _
Mes sageBoxDefaultButton.Button 2)

DialogResult.Yes Then

19

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

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)

40

41
42
43
44

If MessageBox.Show(sConf irm.
"Confirm Move", MessageBoxButtons . YesNo.
MessageBoxIcon.Question ,_
MessageBoxDefaultButton . Button2) = DialogResult . Yes Then

45

46
47
48
49
50
51
52
53

54
55
56
57

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. Move(sSource. sDest i nation)
End I f
End I f

58 End Sub
59

245

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

If File.Exists(sSource)Then
Dim sConfirm As String
sConfirm: String.Format(
"Est certo de que deseja excluir {DI?" ,
sSource)

70

71
72

73
74

If MessageBox.Show(sConfi rm ,_
"Confi rm Oel ete". MessageBoxButtons. YesNo,
MessageBoxlcon.Question, _
MessageBoxDefaultButton.Button2) : DialogResult.Yes Then

75

76

File.Oelete(sSource)
77
End If
78 End If
79 End Sub

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

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

-'"

"-

I" 190001
IR_
,~

_f'.

os erros de elltrada de

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

cdigo.

flo_

!M,R.... I......... FJo.ot

flo , tjlpO.

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

1
2

Us ando as Caixas de Dilogo Internas

Private Sub btnSave_Click{ByVal sender As System .Object.


ByVal e As System.EventArgs) Handles btnSave . Click

4
5
6

Dim sNewFileName As String


Dim swDutput As IO.StreamWriter

7
8

sNewFileName " sCurrentFile

9
10
11
12
13
14
15
16
17
18
19
20
21

If MessageBox.Show{"Salvar com um nome diferente de arquivo?" ,

22

"Save Fi le", MessageBoxButtons.YesNo . MessageBoxIcon.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

Desenvo lvendo uma Interface com o Usurio com os Formulrios Windows

LISTAGEM 9.15

Us ando as Cai xas de Di logo Internas (continuao)


If .ShowDialog() : Dia logResult .OK lhen
sNewFileName : . FileName
swOutput : New IO . StreamWriter(sNewFileName)

23
24

25
26
27
28
29

swOutput.Write{rtfContents.lext)
swOutput.Close()
sCurrentFile : sNewFileName
End If
End Wi th

30
31

32
33

253

End If
End Sub

o uso da caixa de dilogo Save seme lhante ao de Open. Depois que o usurio con

ANLISE

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

Usando a Caixa de Dilogo Font

Private Sub btnFont_Click (ByVal sender As System .Object .


ByVal e As System . EventArgs) Handles btnFont.Click
dlgFont.Font = rtfContents .Font

If dl gFont . ShowOialog(): DialogResult.OK lhen

Dia 9

LISTAGEM 9 .16

rtfContents. Font '" dl gFont. Font


End If

6
7
8

Usando a Caixa de Dilogo Font (continuao)

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

2
3

9.17

Adicionando uma Seleo Grfica de Cores a um Aplicativo

Private Sub btnColor_Click{ByVal sender As System .Object.


ByVal e As System.EventArgs) Handles btnColor.Click
dlgColor.Color = rtfContents.ForeColor

5
6
7

If dlgColor . ShowOialog{)= OialogResult .OK lhen


rtfContents.ForeColor = dlgColor.Color
End If

End Sub

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).

ANLISE

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.

FIGURA

9.14

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.

Dia 9

256

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
toda a verificao no evento Cl i ck de btnOK, situao na qua l seria desejvel que btnOK . Di 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 DialogRe 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

1
2
3
4

9.18

Us ando as Propr i edades de VaI idao

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

LISTAGEM 9.18

257

Usando as Propriedades de Validao (continuao)

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

24

sUserID = txtUserid . Text


sPassword = txtPassword.Text
If sUserID. Trim()= " " Then

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 . Oi a1 ogResu1t como Cance1 (de modo que sempre execute o
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

Dia 9

258

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

1
2
3

4
5

Exibindo um Formulrio como uma Caixa de Dilogo

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

7
8
9
10

If frmLogon . ShowDialog()= DialogResult.OK Then

11
12
13

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

14
15
16
17
18
19

20
21
22
23
24

25
26
27

If frmLogon. txtuserid . Text = "Duncan" lhen


If frmLogon. txtpassword. lext = "password" lhen

If Not bLogonSuccessfu l Then


MessageBox . Show(sFailureMessage. "No foi possvel efetuar logon".
MessageBoxButtons.OK . MessageBoxIcon.Error)
Me.C10se()
End If
End Sub

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.

ANLISE

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 MessageBox 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.

Dia 9

260

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

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

LISTAGEM 9.20

261

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.

..Pesquise

-----= s~:"~';
'0+-Resposta--

Servidor

Banco de
Dados

W,b

Navegador

FIGURA 10.2
O modelo de

programao da
DY//(lmic HTML.

.. Pesquisa

Resposte
Servidor

Banco de
Dados

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.

.,,>'I ,,,.co

"""

1........

"rt

,
"li

f6Wii """ 3

.'-

0 __
;:~---

11" '
~.,,,

..
.

._,-

,"o..."

lo.

' ~'.~-~
.. . ' ..

-- '

rl""' _,,'1

<o"

~ "" "

TABElA 10.1

,'

Contro les-padro dos Formulrios da Web

Controle

Descrio

Label

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.

TextBo x

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.

Construindo a Interface com o Usurio com os Formulrios da Web

TABELA 10.1

269

Controles-padro dos For mulrios da Web (continuao)

Controle

Descrio

Button

Use para fornecer ao usurio algo para dar um clique a fim de executar alguma ao.

LinkButton

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.)

ImageBut ton

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.

Hype rl i nk

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.

DropDownList

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.

ListBox

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.

Chec kBox

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.

CheckBoxLi 5t

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.

I 270
TABELA 10.1

Dia 10

Controles-padro dos Formulrios da Web (continuao)

Controle

Descrio

Radi oButton

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

o controle lmage permite que voc insira uma f igura na pgina.

Pane i

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

Formulrio Ma dl i b.

~ ,
~..

..,. ,

~",."."
I/'f~

. "" ,1 ,, , '" 1.''' '01 ~." , b ... , '


t-oJO<O _
l!t~ ' .. mot '.tolo !"''''

e. "': .. &l o11

~_

I'(omo,

, ,:'"":"

l~'

.......

,rII

"

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

lfoIo
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 , .....

A MacI UI> ... _

_<II . . _

"r.JEI

: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

Controle

Propriedade

Valor

label

(!D)

lb l Name

Text

Your fi rst name:

Font Bold

True

TextBox

(!D)

TxtName

label

(lO)

Ib l Oate

Text

A date:

Font Bold

True

TextBox

(!D)

TxtDate

Labe l

( lO)

lb l Fruit

Text

A kind of fruit:

Font Bold

True

( lO)

cboFrui t

Items

o controle DropOownl is t

DropDownList

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

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

TextBox

label

RadioButtonlist

(lO)

1b1Number

Text

A number from 100 to 1000:

Font Bold

True

(lO)

TxtNumber

Text

SOO

(lO)

Ib l Emotion

Text

An emotional state:

Font Bold

True

(10)

rlstEmotion

Constru indo a Interface com o Usurio com os Formu lrios da Web

TABELA 10.2
Controle

273

Controles Usados no Formulrio Madl i b da Web (continuao)


Propriedade

Valor

1tems

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).

RepeatCo I umns

( 10)

IblVerb

Text

A verb:
True

TextBox

Font Bold
(ID)

Label

(10)

IblOccupation

Text

An occupat i on:

Font Bold

True

TextSox

(10)

txtoccupat i on

Sutton

(10)

cmdWr te

Text

Wrte Story

10

cmdClear

Text

Cl ear

(10)

IblResult

Text

Deixe este campo em branco (ou seja, exclua o vaIar da propriedade Text)

BorderStyle

Groove

Width

75%

Label

Sutton
label

TxtVerb

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

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

l iSTAG EM

10.2

Cdigo para o Boto Write Story

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 & " "

Dia 10

276

LISTAGEM 10.2

CDIGO

17
18
19

Cdigo para o Boto Write Story (continuao)

'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

programar no Visual Basic.NET. "

equivalente a:

10
11

sTemp

sTemp & "Em

" Comecei

ii

&txtOate.Text &

II

programar no Visual Basic . NET."

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.

FIGURA 10.6
O formulriO Madl i b
em ao.

'!J h~. // "'/...., / ... ,, ' ' .." ...."

whon .,...~ ..

Mad!..d:> ... _

liI<o ~d d

....,. ..

,.1<',,,, ,,,'....

0._" "" "' 0 "" 0>

""<I> '''''' oe_do (......aty", trI>< ofwot<l. '" ...

rp<di< <potJ '" cr ..... ()<.oJ><fuIIJ) ~ f><'Ioo..W.<d <ndftn

r..... r"', ...... :r'-----

A dOlO: r,- - - - -

A kiod .r r,UI:

A."""' .. f..". 100 '. 1000: ri- -

.'_""'---"::J

AlI .... tio ... " ... :

(" Ezao.d (" Pneq (" F....... d


(" F""".... d (" E<_ (' HoppJ
('

~d

('

(' SOilil, .. d ('

h>ln

('

Sboclu:d

l....... (' m..

A ... tlo: r i- - - - -

AlI O""PoIi'lO: ri- - - - -

fII!;] f3

Th< .... _

....

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

Item

Propriedade

Descrio

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

Private Sub cmdClea r_Click(

2
3

ByVal sender As System.Object.


ByVal e As System.EventArgs)

4
5
6

Handles cmdClear . Click


txtName . Text" " "
calDate .SelectedDate " DateTime . Today

txtVerb . Text

txtNumber.Text = " "


txtOccupation.Text " "
lblResult . Text - " "

9
10
11

= " "

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

Pr;vate Sub cmdWrite_Click(

ByVal sender As System.Object.

3
4
5
6
7
8
9
10

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

11
12
13
14
IS
16

17
1B

19

End Sub

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.

ANALISE

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

Propriedade

Descrio

ControlToValidate

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.

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

Prop riedad es para os Contro les Val idatar do Formulrio Madl ib

Controle

Propriedade

Valor

RequiredFieldValidator

10

reqName

ControlToValidate

txtName

ErrorMessage

Please enter a name

( 10)

reqNumber

ControlToValidate

t xtNumber

ErrorMessage

Please enter a number

Display

Dynamic

(10)

rngNumber

ControlToValidate

txtNumber

ErrorMessage

Please ente r a number from 100 and


1000

Display

Dynamic

Type

In teger (inteiro)

MaximumValue

1000

MinimumValue

100

(10)

reqVerb

ControlToValidate

txtVerb

ErrorMessage

Please enter a verb

Display

Oynamic

(10)

reqOccupation

ControlToValidate

txtOccupation

ErrorMessage

Please enter an occupation

Display

Dynamic

( 10)

valSummary

RequiredFieldvalidator

RangeVa 1 i da tor

RequiredFieldValidator

RequiredFieldValidator

ValidationSummary

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 mumVa 1ue e Mi nimumVa 1ue com relao
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,

Dia 10

282

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)

o mesmo que o inteiro, porm incl uindo as quatro primeiras casas

decima is do valor.

Date (data)

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

]2

de

abril de 1986.

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.:
(" Enud

(" P-k1 (" F"""""d


(" F"' ..... d (" E<..- (" H~
(" ~d (" lo."f1'I (" Sbo<ld
(" S. dd t_ d (" l,,",,,, (" Bb:

,,~ ~r- - - - -

!.........,.., ..........
I

~.SlOtY

--CIo ..

"'' ' >&< I c

En",
En ,

-.

,,'>&< ~

,.....,

>

f,;.,.,......., .... b ln .. ,op.tioo: ~r- - - - -

Co nstruind o a Inte rface com o Us u rio com os Fo rmul rios da We b

FIGURA 10.8
O formulrio Mildl i b

mostrando os erros
enCOlI/rados na
Iolidacio.

,. ."0 11" " , .m f ~"h",~. ,,,.

rolo

u.

l/IO~

~"

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

1_ . '"' '

0 ..1, '.'" 00 , . "

283
"'r:ll:!

000'

_._. 1_ _

. o [;l t:l

a: .......... a.. eS._ I!I'.'_'

G / . '7 9 '

&

_.. II!l ....,,".............._ .... ...

,.. Ma<! II ...,. wb .. o _ pIoyt< ,,10<1' ....... oC_do (aIuaIy t>,,,,. oj"",Of<l O< <lo .... "00)
1Ioeo pkwd """ ...,.., .. 'Pt.&; ",""lO , ..... a~) _ _ pmlliiod eod .. ~

r.... r"" nua"


---"I<in~ orr..li!: ",."_
. .- - -""'13
1

"d.. "' I~

n.." ....do .0

1:

.. 12. ml

A n.......rf' . .. 100 lO 1000:

"f';-- 11.., ....". """","bo"",,,,

.,.:J 1(

........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.,....'" ..

l'lt_ = """".. brIW ... le ) 0Dd 1000


l'lt... <=r a..rn
l'lt....".... "'.' ,~_

~;;. c::================Jr::rr:cr: ~~_

Resumo
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

NOTA

287

Em muitos bancos de dados, no so permitidos espaos nos nomes das tabelas ou dos campos, portanto o nome dos campos teve de ser al