You are on page 1of 662

I I

I

"da Visu em

Duncan Mackenzie Kent Sharkey

Tradução: Aldir José Coelho Co rrea da Silva

Revisc7Q Técnica:

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

Analista de Sistemas

PEARSON

Makron Books
São Paulo
Brasil Argentina Colômbia Costa Rica Chile Espanha

Guatemala México Peru Porto Rico Venezuela

©2003 Pearson Education do Brasil Tilulo Original: Sams, Teach Yourself Visual Basic .NET in 21 Days ©2002 Sams Publishing 1! Edição em inglês 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: Gisélia do Carmo Costa Produtora Editorial: Marileide Gomes Designer de Capa: Marcelo da Silva Françozo (sobre o projeto original de Aren Howell) Editoração Eletrônica: ERJ Composição Editorial e Artes Gráficas LIda Impressão: São Paulo - SP

Dados Internacionais de Catalogação na Publicação (CIP) (Câmara Brasileira do Livro, SP, Brasil)

Mackenzie, Duncan Aprenda Visual Basic .NET em 21 Dias I Duncan Mackenzie, Kent Sharkey; tradução: Aldir José Coelho Correa da Silva; revisão técnica: Marcos Jorge. -- São 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 programação para computadores) 2. Microsoft Visual Basic 3. Microsoft Windows (Programa de computador) I. Sharkey, Kenl. II. Titulo. 02-4239
,

CDD-005-133

Indices para catálogo sistemático 1. Visual Basic.NET: Linguagem de programação: Computadores: Processamento de dados 005.133

2003 Proibida a reprodução total ou parcial. Os intratores serão punidos na forma da lei. Direitos exclusivos para a língua portuguesa cedidos à Pearson Education do Brasil, uma empresa do grupo Pearson Education Av. Ermano Marchetti , 1435 CEP 05038-001 - Lapa - São Paulo - SP Tel. (11) 3613-1222 Fax: (11) 3611-0444 e-mail: vendas@pearsoned .com

Dedicatória

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

oulra região e es/ou com um 1I0VO trabalho na Microsoft. Gostaria de dedicar este livro a minha esposa, Laura, que sempre apoiou a iniciativa de escrevê·lo, independentemente de quantos meses ultrapassamos o prazo inicial, e a meu filho , que não linha a mínima idéia
de que este livro eslava sendo escrito e mesmo assim eslava mui/o feliz e solidário. Para

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

De Kent SI/Grkey:

Em princípio, pretendia parecer inteligente e escrever um poema aqui, mas esse lado de meu cérebro está com problemas nestes últimos dias. Portanto, em vez disso, essa será uma lista bastanle típica 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 "não" 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 são e salvo e a Cica por deixar meu/aptop aquecido e, às vezes, sem a/ividade. Por último, mas não 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 dinâmico do Visual Basic .NET que possui o aborrecido hábito de escrever artigos ocasionais. Duncan também alua como instrutor de Visual Basic e ministra muitos cursos, que abrangem da programação intermediária à avançada do VB. Escreveu vários livros e colaborou , em tantos outros sobre as tecnologias da Microsoft. E ainda orador em muitas conferências que cnfocam o desenvolvimento da Microsoft.

Kent Sharkc)' é MCSD, MCSE, MCT e MCP+SB. No momento trabalha na Microsoft corno Instrutor Técn ico no Grupo de Soluções .NET, em que sua ocupação atual é o .NET Framework e o Visual Studio .NET. Antes de entrar para a Microsoft, Kent já possuía anos de experiência
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 exposições regularmente em conferências de desenvo lvedores dando ênfase ao desenvolvimento da Microsoft.

Diga-nos o Que Você Acha!
Como leitor deste livro, você é nosso crítico e colaborador mais importante. Valorizamos sua opinião e queremos saber o que estamos fazendo corretamente, o que poderíamos fazer melhor, sobre quais áreas você gostaria de nos ver publicando c qualquer outra sugestão importante que deseje passar para nós.

Receberemos com satisfação seus comentários. Você pode enviar um fax , e-mail ou escrever direlamente, para que possamos saber do que gostou ou não neste livro - assim como o que pode-

mos fazer para tornar nossos li vros me lhores.

Por favor, entenda que não podemos ajudá-lo com problemas técnicos relacionados ao tópico

deste livro e que, devido ao grande volume de correspondência que recebemos, talvez não possamos responder a todas as mensagens.

Quando você escrever, cenifique-se de incluir o título e o autor deste livro, assim como seu nome e número de telefone ou fax . Examinaremos seus comentários cuidadosamente e os compartilharemos com os autores e ed itores que trabalharam no livro.

Fax: Fone:

(11) 3611 9686 (II) 3613 1213

Endereço Eletrônico: Endereço Postal:

clientes@makron .com.br e livros_infonnatica@pearsoned .com.br
Pearson Education do Brasil Rua Em ílio Goeldi, 747 - Lapa
São Paulo - SP/ 05065-110

...
CI

...
~

-

cc

CI

-

cc

N

CI

-

cc

.e
cc

(II

CI

"" cc E

..,
~

cc CI

cc CI

~

.N

,

E

II)

ln

N
~

.( II

z

~
• C,)

CI
o
o

cc -

CI

:$

'" cc
~

CI

-

-cc
(II

CIl

cc

...
CI

co
~

.>
cc
II)

=

-

cc

CI

-

cc

-= = ... c..
<C

cc CI

..,

C>
~

...
~

cc CI

cc CI

N

CI

:$

cc '"I C

"" :$
~

CI

~

CI

-

cc

co
CI

ln
~

-

cc

CI

-

cc

Sumário
Introdução- ............. .. .. ••...•• .. . .... . . . • •. .. ••.. ... . . .. . ..... XXI

SEMANA 1 Visão Geral
Dia 1 Bem-Vindo ao Visual Basic .NET

1

3 Compreendendo a Programação de Computadores ' .. ... . .. ... .. . .. ••. .. .. 3

A Função dos Sistemas Operacionais .. .. .. .. . .... . ... .. .. . .... . .. . · 4 O Papel das Linguagens de Programação' .....................•...... 5 Por Que Escrever Programas de Com putador? ..... . ................. ... . 8 Um Breve Histórico sobre o Visual Basic" .........•••............... 10 O Que É ,NET? . .. ... . .. .. ... . ... .. .. .. .. . ....••.. .. .. . .... . .. . 13
Servidores .NET · · . .. .. ... .. .. .. .. .. .. .. ... .•• • . ... .. .. .. ..... .NET Framework ... . .. .. ... .• .. .. .. .. ... . ...• • . ... .. . ........ Serv iços .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 Código· .....••. . . . . .. . .. • •...• • . . . ... 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' . ... . . • • .......•. • ••. . .. . Soluções e Projetos ' .. ... . ... .. .. .. .. .. ... . . • •. ..... . • . • ••. . .. . Arqu ivos' .. . .. ...... .. ... ... . .. . ... .. .. .• • .. . . . . . . . •• • ... . . Criando Nosso Primeiro Aplicativo Windows .......• •.. .. . . . . . ••...... Crie o Projeto' ............................ • • .. .. .. . . .. ••..... Desenvolva a Interface com o Usuário' . .. .. ... . .• • . . . . .. .. . .•.. . .. . Executando o Projeto· ... . ... . ... .. .. .. ... . .•• • ... .. .. . .... . .. . Construindo o Projeto' .. ... .. . ... .. .. .. ... . .• • .... .. .. . .... . ... Adicionando Seu Próprio Código ..............••• . ............... Resumo' .. . ... . ...........................•• .. ...............

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

x

Aprenda Visual Basic .N ET em 21 Dias

P&R ......... .. .. .. ••...• ... . . . . .. .. ••. . . ••.. .. . . . . . •••. . .. . 60
Workshop . ... . .. . . .. • •. . .• • ... . . .. . . .••.. .• • .. .. . .. . . • •• ... . . 61

Teste ··· ··· · ·· ··· · ·· ·· ··· ··· · ·· · ··· ·· ·· ··· · · · · · · · · · · ··· · ·· · 61 Exercíc ios' .. .. ... . .. .. ... . ... .. .. .. .. .. ... . . , ... , • . • ••. . .. . 61
Dia 3 Introdução à Programação com o Visual Basic .NET

63

Variáveis e Atribu ição' . .. .. ... . ... .. .. .. ... . ... . .. ... .. .• .•. .. . . 64 O Que É uma Variáve l? . .. ... .. .. .. .. .. ... . ... . . . . . . . . .• •.. . .. . 64
Tipos de Variáveis Disponíveis' .... .. . . .. ••... ••.. .. .. . . .• ••..... 64

Variáveis Simples' . .. .. ... .. . ... . .. . .. • •...• • . . . . ... . . • •• ... . . 65 Declarando Variáveis' .. ... .. .. .. . .. .. . . .. . .. . .. . .. . .. . . .. ... . . 69 Arrays .. .. .. .. ... . .. .. .• • . .. . .. . . ..•• .. . • •. . . ....• . • ••. . .. . 70 Atribu ição' ...............................• .. . . . . . . . • •• ..... 72 Constantes' ............. ...... ............• .. .. .. . . . • ••. .... 72 Algumas Sugestões para os Padrões de Nomeação' ....• .. . . . . . . . •••..... 73 Cálculos Simples' ............................• .. . . . . . . .•• •..... 74 Usando Operadores .. .. .. ... . ... .. .. .. ......• • .. . .. .. . .•.. . .. . 75 Funções Internas' .. .. ... . ... . ... .. .. .. .. .. .• •• .. ... .. . ... .. .. . 75 Escrevendo Suas Próprias Rotinas ' . ... .. .. ... .. . . •• .... .. .. . .... . ... 80 Sub-Rotinas ...............................• .. ............... 80 Funções ' ... . .. .. .. .. ... . ... .. .. .. .. .. .. ... .. . ... .. . ... ... . . 81 Escopo ' . ... . .. .. .. .. ... . ... .. .. .. .. .. .. ... .. . ... .. . .... . ... 8 1

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

P&R························································89 Workshop ................. •. .............. •••. ............... 89
Teste' ........ .. ... . ... . • . . .. .. .. .......•• .. ............... 90 Exerc ícios' .. .. .. .. .. .. ... . ... .. .. .. .. .. ..• .. .. .. .. . .... . .. . 90
Dia 4

91 Tomando Decisões com as Instruções de Controle ' .....• • .. .. ....... . .. . 91 A In strução If· . .. .. .. .. ... . ... .. .. .. .. .. .... . .. .. .. . ... ... . . 92

Controlando o Fluxo dos Programas

Estendendo a Instrução If ....................•••............... 95 Instruções If em SeqiJência na Mesma Linha' ....••• . ............... 99 Expressões e Lógica Boo leana' ....................... •.. .......... 100 Operadores de Com paração' ....... .. .. .. ... . ... .. .•. • . .. . ... .. . 100 Operadores Lógicos . .. . .... . .. .. ...... ... . ... .. . ... ... . ... .. . 101 Avaliação Abreviada' .. .. . .... . .. ... . .. ... . ... .. .. .. ....... . .. 103 Lidando com Mú ltiplas Possibilidades: A Instrução SeI ect Case··········· 104 Laços' ...................................................... 105 For ... Next· · . . ... .. .. . ....... .. .. .. ... . ... .. .. .. ... . ... .. . 106 A Variável do Contador ' . . .... . .. .. .. .. ... . ... .. .. .. . .. .. .. .. . 106 Espec ificando O Valor do Incremento com O Uso de Step .. .. . .... .. .. . 108 While ... End While ································ ·· ·······1 09

Sum á rio
Laço 00 .............. ..• ...••. . .. .. ... . ••.... ... ...... .... Condições de Saída ' ... . ... .. .. .. .. ........ •• . .. . • . ....... . . . . Laços Infi nitos ' . . . ... . . .. .... .. ....... .. .... .. ... . . . .. ... .. . Implicações sobre o Desem penho' .. .. .. .. ... . ... .. .. .. .. .. ... .. . Ap licativos Que Farão Uso de Seu Conhecimento Recem-Adqu irido' ........ Leitura de um Arqu ivo' ....................................... Um Jogo Simples' ........................................... Evitando Laços Complexos por Meio da Recursão ' . . ... .. .... ..... .. . .. Resumo' .. ... .. . ... .. .. . .... . .. .. .. .. ... . ... .. . • ... - ..... .. . P&R .... . ... . ... . ........ . ... . ............ . ...• . • . ........ . Workshop' ...... . .... ..........• • .. .............•............ Teste' .......................................•• . .......... Exerclcios .. .. . .. ... . .. .... . .. ... . .. ... . ... .. .•• • • . .. . . . .. .
Dia 5 Arquitetura dos Aplicativos na Plataform a .NET
• O Que E a Arquitetura do Aplicativo?' .............................. Função do Arquiteto de Softwares" . .. .. .. ... . ... .. .. .. ... . ... . .. Que Partes de um S istema São Consideradas Arquitetura do Aplicativo? ' .. . Arqu iteturas Viáveis na Platarorma .NET··· . ... . ... .. ...... .. .. . .... . Os Três 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 Influenciarão Sua Decisão' ....... . •........ .. Exemplos de CenlÍrios' ...........................• . • . ......... Resumo' .. .. ... . ... .. .. . ... .. .. .. .. .. ... . ... .. . • .•. ...... .. . P&R .. . .. ... .. . ... .. . .. . • . . . ••• . .. . .... ••• . ...• .. ...... . . .. Workshop' .... . . . ........... .. ............... ...... . ..... .... Teste' ....................................................

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

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

Dia 6

O Que Fazer Quando Programas Bons Apresentam Problemas e para Se Certificar de Que Isso Não Aconteça

147

Tratamento de Exceções Estruturadas' .............................. O Que Ê o Tratamento de Exceções Estruturadas?' . .. ... . •• • . .. . . . ... Erros e Exceções .. ... . ... .. .. .. ... . .. ... . ... .. .• •• • .. . ... .. . O Bloco Try' .. . ... .. .. . .... . .. .. .. .. ... . ... .. .. •• • ...... .. . A Seção Catch' ................................••...........

148 148 148 149 149

Aninhando Blocos Try . .• End Try··················· ·· ·········· 155 ASeçãoFina l ly· · ······························· · ··········156 Lançando Exceções . .. . ... ... . .. .. .. .. ... . ... .. . • . .. . .. ... .. . 157 Depurando ' ... .. . ... .. . .. .... . •• • . . . .. ... . ... .. . •.. . . . .... .. . [57 A fonte dos Erros' . ... . .... . .. • •• . .. .. . . . . . •... . • . ... . ... ... . 158

XII

A prenda Visual Bas ic .N ET em 21 Dias

Aprendendo a Depurar com a Prática' ..... . ... . ...... ... ....... . .. Os Modos na Vida de um Programa ' ... . ...... •• . .. . • . .. .... . . . . . Percorrendo Seu Códi"o ' . .. .... .. .... ...... ....... . .... .. .. .. . " Exam inando as Variáveis' .. ... . .. ... . ...•.. •• . .. . •. .... . . .. .. . Outras Ferramentas para Depuração' ..... . .....• •..... . ...........

159 167 165 [68 172

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

P&R .............................. .. ... . ••....• .. . ... . ..... 173
Workshop .. .. . . . ...•. . •• . . . ••• . .. . . .•. • •• . .. . • .• .•... . ... . 174

Teste· ·· ··· ·· · ··· ·· ·· · ···· · ·· · ·· · ·· ··· · ··· ·· · · ···· ·· · ·· ·· · 174

Exercfc ios .. . ... . ........ . ... . ............ . ...• . • .. .. . .... . 174
Dia 1 Trabalhando com Objetos 111

Para Começar: O Que É um Objeto? ..... .. . .... . ••....• .. ....... ... 177 Classes e Instâncias···· ........... ....... . ••..... . ...... ..... 178 Referências ..................... .. .. ... . ••..... .. ...... .... 178 Passando o Conceito para o Código' ....... .. . .. . ••....• .. .. . .. ..... 179 Propriedades ' .. . ... .. .. . ....... .. . . .. ... .• •. .. . • .•.. .. .. . . .. 180 Propriedades ReadOn l y e WriteOnly · ··· · ·· · .. . ... .. . • . .. .. . ... .. . 18 1 Criando a Instânc ia de um Objeto . .. ... . ....... .. .. . • .. . . .. . .... . 182 Encapsulando Códigos em Suas Classes' ..............• . ........... 183 Tópicos Avançados' .. ... .. . ... .. .. ... . .. ... . ... .. . . •• • .. . .. ... . 187 Sobreposição ' . . .. ... . .. ... .. .. ... . .. ... . ... .. . ••• • . .. ... .. . 187 Herança ' ... .. . .. ... . .... . .. .. ... . .. ... . ... .. .•• • • . .. ... .. . 189 A Base de Todas as Classes Bás icas ' .. .. .. ... . ... .. . ••• • . . . ... .. . 194 Construtores' ..................................• . •.......... 195 Espaços de Nome' ..............................• . •........ .. 197 Membros e Objetos Compartilhados .. .. .. .. .........• . • . ......... 199 Resumo . .. .. ... . ... .. . .. ... . ... .. .. .. ... . ... .. . • .•. ...... .. . 199 P&R .. . .. ... .. . ... .. . .. ... . ... .. . ... ... ••• . .. . • .. . .... .. .. . 200 Workshop' .... . . ....... .. ••...••• . .. .. ... . ••....• .. ..... ..... 200 Teste' ........ . . .... .. ••...•• .. ... . ... . ••....• .. ..... .... ·201 Exercidos ..... . . .... .. ••...••. . . . . .... . ••..... .. ....... ... 201

SEMANA 1 Revisã o SEMANA 2 Visão Geral
Dia 8

202 203

Introdução 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

Sumário

XIII

I

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 Usuário com os Formulários Windows 225

Visão Geral dos Fo rmulários Windows' ... , ... , , . , , , .. , .... , , . Criando um Aplicativo com Fom1Ulârios Windows' , .. , , ....... . , . Configurando o Projeto' , , .. , , .. , , ...... , , , . , , , ...• .. . ... Adicionando Controles ao Fonnulário ... , ... , , .. , , ...• .. . . . . Nomeando Seus Controles . ....... .. .. .. ... . ... .. .. .. ... . Manipu lação de Eventos · . .. .. .. .. ... . .. ... .. .. .. .. .. ... .

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

Criando Vários Manipuladores de Eventos para um Unico Evento , . ... .. . 23 1 Encontrando Objctos c Eventos por Meio do Editor de Códigos' , , . , , , .. , 232 Múltiplos Eventos com um Manipu lador· . .. ... . ... .. .. .. ... . .. ... . 233 Mais In fomlações sobre os Controles· .. ... . .. ... . ... .. .. .. .. .. ... .. . 233 Criando Grupos de Botões de Opção · .. .. .. ... . ... .. .. .. . . ....... . 234 Adicionando uma Ca ixa de Seleção ao Exemplo de Fi 1er .. .. . .. . ... . .. 236 Va lidação de Entradas' ... , ... , , .. , , ... , ... , , . , , , ...... , , , . , , .... 238 Usando a C lasse MessageBox .. , , .. , , ....... , , . , , , ....... , , . , , ... , 24 1 Parâmetros' .. , .. , , ... , .... , ..•• . . , .... , ... , ...• .•.. ... , , .. . 242 Obtendo Resultados· .. .. . .....•• • . . . .. ... . ... .. . • .•. .. . ... .. . 243 Controles Ocultos· . .... . . . . •• . . .•••. .. .. .... •• . ...• .. . .... .. . .. 246 Timer' . , ... . , ... , .. . . . •• ' , .••• .. . .. ... ••• ' ...• .. .... . , ... ·247 Noti fy l con . , , .. , , .. , , ... , , . , , . . . . . . ... . •• , ...• .. .... . , , .. ,248 ErrorProvi der' . , , .. , , .. , , .. , , .. . . . ..... •• , .... .. .. . .. , , .. , 249 Controles das Caixas de Diálogo· ... .. ........ • •. .. .•. ... . .. .. .. . 250 Construi ndo Suas Caixas de Diá logo· .. .. .. ... ..... , .. . • . ..•... .. .. . 254 Criando a Ca ixa de Diálogo · ...... ... . .. ....... .. . • . .... . . .. .. . 255 Con figurando o Resultado da Caixa de Diálogo' , . , , , .. , • .. . ... . , , .. , 256 Exibindo a Caixa de Diálo"o' . , , .. , ... , ... , , .. , , ...• .. .. .... , .. , 257 Resumo' .. ... .. . ... .. .." . .. , ........ .. ... . ... .. . • .. . ... . . , .. . 259 P&R .. . .. ... .. . ... .. .. . ... . ..• •.. . .. ... . ... .. . • ... ...... .. . 259 Workshop .. .. . . .. .. .. .. ... . •• •. . . .. ... . ... .. . •. .. ...... .. . 260 Teste' , , ... , , .. , , .. , ... , , , . , , •.. , ... , , .. , , ...• .. . , , . , , , .. , 260 Excrcfcios ... , .. , ... .. ... , .. .. ••• , .... , .. , , ...•••. , .... , ... 260

. . 297 Associações: Consultando Várias Tabelas de uma Só Vez ' . .... .. • . .. .... . ... .•........... . . •..... .... ·277 Usando os Controles Va 1i dator .. 300 Criando Chaves Prim árias · · ·· ·· · · . ............ .... . . ................ ... . . . . ...... .... . ..... • •... . . . ... ........ .. .... .. ..... .... 304 MS DE e SQ L Server 2000 . ...... ... . . .. .... ........ •.. .. .... . .... ... ... .... ... ... ................ . .. .NET···· ... 3 11 OADOeoOLEDB········ · ··· · ······· ·· · ··· ······ ·· · · · ·· ·· · 3 12 . . . • . . 288 Recu perando Registros com a Instrução SELECT· . . • • ..... .. . ..... ...... ..... • •.. . . 293 Incons istências de Atualização .. ..... .. . .. . ... .. .... . ..... ...... ... . ... ....... .. . . . .. 304 Access 2000 ou Access 2002· . . . ... .... . .. . . ......... .. ... .. .... 309 Exercícios . ••• .. . ...•• ... .... .. . ...... ...... 305 Resunlo ..... ...... .... ...... ..... . . .. . .. . ...... ····265 Como a Criação de Programas com Base na Web Difere da de Programas com Base no Windo ws ' . .• • • . . . ... .. • . .. ........ . .. . ... ...... . . .. .. ... ......... . ...... ...... 300 Integridade Referencial· .. . ... ..... 293 Campos Multivalorados .XIV Aprenda Visual Basic ...... •• . . .... ... .. . . ... ..... • •...... ...... .. . . . . . • •. . .. .. . ••• . . .... ••......... .. . .. ..... 268 Usando os Controles Avançados dos FomlU lários da Web ..... . .... .... . .. .... ...... ... .. .. 291 Removendo Registros Indesejados' .... .• • ... ... .. . .. ... ... .... ....................NET em 21 Dias Dia 10 Construindo a Interface com o Usuário com os Formulários da Web 263 Modelo de Programação da Web ... ...... .. .. .. ............. . . ... .... Teste' ...... ... ... .. . . . ......... . . •.. .. ...... . .•... .... .... .. . . ... P&R .. .. ... 29" Para Onde Ir a Partir Daqui Abordando a SQL' ...NET 311 Uma Visão Geral do Acesso aos Dados na Plataforma .... ... .... .. ... ... 308 Workshop .. . .. .. ..••• ... ... Workshop ........ ..NET· .... 286 A Passagem para um Banco de Dados Real · . . . ... . . . ....... ....... . ... .... .... ........ .. ... • .. ····288 Adicionando Novos Registras' . . .. . Data · ..• ..... ...... ... ..... . . . .. 263 o ASP.. .. .... .. .... 287 Uma Introdução à SQ L' .. . ..... 29" Problemas Comuns dos Bancos de Dados e Suas Soluções' .. ..... ... .. ...... .... . .... Dia 11 Introdução aos Bancos de Dados 283 283 284 284 284 285 Um Banco de Dados É a Solução para Todos os Problemas Cot id ianos' . ......... .. . 290 Alteran do Registras' .... ........ . .. .... . ........ ............ . ....... .. . .. · · · · ·301 Criando o Banco de Dados de Exemplo ' ... .. .... ...... .. . . .. . .• ........ 298 Re lacionamentos Mu itos-para-Muitos ......... ... ...•. .....• . .. . Exerc íc io' . . .. .. ...... . 279 Resum o ' ... .... .. .. 266 Usando os Controles-padrão dos Formu lários da Web· .... .... ... . . 309 Dia 12 Acessando Dados com a Plataforma . ... .. . . ... .. .... . .... ........ . ...... ..... .. ...... ......... .. .. . .. . ....... 307 P&R ...... .... 305 Testando a Confi guração com $ystem..... .... . ..... ... .. . .... .... •. • •.•. .. . . . ..... . .. ....... . . 285 • A Dec •Isão E Tomada' .. . 308 Teste' . ......... .. .. ...... • ...

... .. . o•.... .... .. . o o•. o o... o o o. .. .. o o• .. o o o. 363 Trabalhando com os Serviços' . . .. . ... . . Objetos e Instâncias o o o.. . o. o. o o o oo o o32 1 Trabalhando com Data Sets ' . o. . . . o ... .. . o366 Escrevendo Códigos de Acesso a Dados com o Server ExploreI' .. . . .... . 355 Teste' .. ... o o380 Exercícios' .... 357 O Que É um Serviço?' ... ..... o323 Navegando pe los Dados ' . .... o o385 .0 Dia 13 Usando o Server Explorer 357 O Que É o Server Exp lorer . o.. o o oo o o323 Inserindo Dados em um DataSet .. . 364 Visualizando os Serv iços' ...... .. . •• • . .. ... o380 Dia 14 Introdução à Programação Orientada a Objetos 381 Visão Geral da Programação Orientada a Objetoso o o. . . ... . ... ... o o..Sumário 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-padrão dos Bancos de Dados o o o. ....... •• • • o.. . . o o o.... o.. . .. o o o.. o o355 Workshop . ... .. .... o . ........ . . o.. . o . . o o oo o o334 Trabalhando com Múltiplas Tabe las o... o . . o.. o o o.. ........ . o o .. . . .. o o314 Conectando-se ao Banco de Dados o o. o•. . o o. . oo o o oo o o . 350 Vinculação de Dados com os Fonnulários Windows ' . ... . .. . . ... . ... . 326 Editando Dados (Adicionar.. ....... .. .. • • o o•.. . o. . ..... ... o o o o•• o••. • ..•.. ... o o. . . o.. . o . . . .. . . .. . o. . . •.... . . • • • . .. . ... o . ..... .. .. .. .. o o• • •.. o o o. •. .. ... .. . ... ..• •• . .. . .. o• o. 387 . o. . • • o. o. . . . o o. o o o. ... .. . o o o o.. o o o. . .. o o.. o o o. .... . 3 19 Recuperando Dados o... o o.. o o. o oo o o o. o o. o o o. ... ...... o•... . o346 Visualizações ' . . o. . o.. .. . .. . ... . 348 Vinculação de Dados . . .•. . . . o o. o o.... . • • • .. o.. o ... o . . ... . o. o o381 . o o. .. o.. ......0 0. . o o o.. o o o.•. .. o o.. . o o. . Classes..••• •• o... . . . . .. . o o. o366 Resumo' .... o .... o o o. o o o.... . o. ... o•.. 329 Editando Registros .. .. o o o... o o o.. .0 0 ... . ..... . .• •• . 356 00 0 ... .. . o.... .. .. .. . o o.. o . ...... 354 P&R o.. o o o. . . o o o.. o o o o... o . ... .... o .. 359 Examinando os Serviços' o o. . . .• . • • ..... o . o• • o . o. . . 365 Conectando-se com Outro Servidor' o. . ..... . . .. •• • • o . . . • o. ... o o o. o . Comparando a Programação Orientada a Objetos com a Linear' Usando os Objetos na Organ ização do Código · ... o. .. .• o... . o• ... ... o .. o o. .. o o o. .. .... o.• •• o• . .. ..... .•. .• • o o.. . .• •• • . . . • • • ... o o ..• . • • • o .. .. o o o.... .... . . Conceitos Importantes na POO o . . . 355 Exercíc ios' . o. .. . o o•. 35 1 Resumo ' .. .••• • .. .. . o• . . .... ...... . ... .. ........ . •• o.. . ... .. o o o o. . ... . ... .. . o o o. o366 Escrevendo Programas Que Usam os Serviços' . 385 o•... .. . o o•...... . .. . o. .. ... Editar e Excluir)' . . . o o. .. .. . . . . 379 P&R .••• • ... .. ... o.. . . . o o o..... o o... .. ... o . .. o o. o o... . .. .... . o o o. ... .. o o. . . . . . ••• . ... ... • •. 380 Teste' o o. o• .. .. . .. o• ..... ... o o.. . . o. . o.. . .. .. .. . 380 Workshop' . . . . ... . .. . o o.. . . o o359 Caminho a Ser Percorrido para Estabelecer uma Conexão com o Banco de Dados . . 3 14 Executando uma Instrução SQL' .. o•... .. • • o..... . . .. o o o. o•• o o•... . o• o. .... o . o . o. o o....• o•. o o .• • • • ... o. o o o. 384 o . o o••• •• • . o . . o.. o . o . o . . o o..•• • . .. .. ...•• o o• o o o .... 33 1 Atualizando o Banco de Dados o... .. o o... o o o oo o o. .. .. . .. . o . . .. o. . . . o o o. .. . . . .. o o... . o . o o••• o o o. . .•.

.. ..... .. . ............ Usando Rotinas de Propriedade para Validar Dados' ... .... Herança' .......NET Criando Objetos . . . ... ... 400 Teste' ... . .. .. 407 . 389 Construtores' .... 439 Dia 16 Formulários Windows Avançados 407 .. . . 413 Criando Métodos' .... ..... .. ... .. ........ . ....... .. . .. . 438 P&R . ... ..... ....... . . . . .XVI Aprenda Visua l Basic ........ .. . .. ... Adicionando Propriedades ' .... 40 I SEMANA 2 Revisão 403 405 SEMANA 3 Visão Geral Dia 15 Criando Objetos no Visual Basic .. ..•. . . ... . . ........ . . .. .. ... . ... ... ..... ....•• • ... .... ... . .. . . ... ........• • •... .. ... .. ........ . . .. .. .... 401 Exercidos ... .... ........ ..... . 436 Resunlo ... .... .. ..•.. 388 Herança' .... ....••• ....•••.... . . . . . .. .. ...... . . 41 7 Adicionando Eventos' ... ... .... .. •• • . . . . ..... .... . . ...... .... ............... . ......... ... .. . . ...• • • .... ......• . . 444 Adicionando Código· . ... .... .......... 398 M odelando Seus ObjclOs' ..... ... .. . .. . .. ..... . ............... . .... . . .. . .... ... . .... ..... ..... .... . .. ...... .. ... .. . .. ... .. 423 Defin indo e Usando Interraces' ..... .. ... ... . ........ .. . . ..... .... . . .... .... ........ .. .. . .. ..NET .. 410 441 Menus ...... ....... . ....... ......... . . ........•• • ..••• • . 400 P&R .. . .. ...• .. ..•... ...... ....... .. O Que E uma Interrace de Documentos Múltiplos? . . . .... .. .. ...... ... ••... ...... .. 44 I Adicionando um Menu a um Formu lário' . . ..... .....• •• • .. .. . .... ...NET em 21 Dias Propriedades' ..... . ... .. .. .... .......•........ .... . 408 . • .. . 434 Espaços de Nome' . . ... ... .. 449 . . 400 Workshop' .. ... . • ... .. . ... .. .... ..... ........ .... ..• ........ ......... .... ... . ... .. 387 Métodos ' . 445 Algumas Sugestões ' ..• .. ...... ...... . .... .... 396 Ident ificando os Objelos ...... . . • ••. . . .... . ...... ... .... .. . ... · 425 Usando os Objetos Que Você Criou' ...... .... .. .. . .. . .. 438 Workshop' .. . . ...... 449 ... .. .• • . 397 Determinando as Propriedades e Métodos' .... . • ... .. ..... ..........• ... . . .. ........... .. .. ..• . ... . 393 Projetando um Aplicativo com o Uso da roo· .. 438 Teste' .. . . ....... .. .••.. . .... . . .. ..... .. .... .. .. . ..... . .... . ....... . ......• ....... .. . .. ....... ..... . • ..... . . . . . .... ... . . ... .. ....•• ... ..... ...... .. ... • •....•• • • . 408 . . ....... ••.. ......• • • . .... . .. .....• ••• .... ........ . .. .. 438 Exercícios' ... . 399 Resumo .. . . ... • ..... . .. ... .... Declarando uma Classe Nova no Visual Basic .. . ....... .•• .• . ..... .... . .••. ..... .• . .. . .. ... . .. .. . ....... .. .. .. 434 Criando e Usando urna DLL da Biblioteca' . .. . . . 448 Programas de Interrace de Documentos Múlt ip los .. . ... .... ...... ........ . .. .•• • .......•.... . .. ........ ..•• ... . .. ... .... ... . . ... . • •...... •• ..... .... .• •... . .. . ...... .. o • • • • • • • • • • • • 441 Os Teclados e os Menus ' ... .. . . ..

........ . . ... .. ...•• . ... .. ... .. .......• ·· ····· ·· · · ···· ····· ·· · · ·· ·· · ···· . ..... .. •• • . . ·470 P&R ·· · ·· ··· ·· · ··· ·· ··· ·· ··· ··· Worksho p·· ··· ·· · · ·· ·· · · · ···· · ·· · Teste· ·· ··· · ··· · ··· · ··· ·· ····· Exercíc ios' .. ••• • . ..• . . .. ......... ... ••• . . ..... .... .... . .. .. • . • . .... .. ..••.. .... 5 18 Nomeação de Variáveis.. ..... Controles e Objetos ' .. . ..... . . ... .. . .... .. • . . ......... .. .. ...... . ... .. . .. .....•• Dia 17 Usando o ... ... • . . .... .. 509 P&R . .. . .. ..... ... .. . .. .. .. . .. .... ... .••• . 516 Documente o Sistema. 529 . ...... ••.. 5 12 Evitando Conjecturas' ...... ...... .. . . 515 Não comente o Óbvio.... ••....•••... ....... ••• • . . .. ... . .... . ... .. .... 458 TreeView··· ·· · ·· ··· · ··· ··· · ·· ·· ·· ·· ··· · · ·· ·· · ·· ······ ·· · ·· 459 ListView·················· ·· ····· · ····· · ······ ·· ····· ····· 462 Controles Splitter····· · ········ · ··· · ····· ······ ·· ····· ····· 463 Resumo ' .• . ...• . . 529 Resumo' .....• . . . .. 473 . ... . . . ... ....•...•• .. .. .....•• • . .. ..... 519 Blocos de Comentário' .. . ... ••.. O Que E um Stream? .. ....... 5 10 Dia 18 Retoques Finais 511 Documentando Seu Aplicativo' . •.......• .... . 474 Arquivos e Diretórios' ....... .. . ... . . · 476 Gravando em um Arqu ivo de Texto ' ... .....• •• • ..•• . 450 A MD I e os Menus ' ... .... ... •....... .. ...... ... .. .... ... . ...... .•• .. .. . .. . .. .. .. .... •. 492 Onde Posso Desenhar? .... ... .... •.. . .... ....... . .. ..... ............. . ..... ... .. .•. .. . . 52 1 Usando o Controle do Código· fontc · . . ..... ... . 522 Annazenando o Código' . 5 11 Crie So luções Mais Simples ' .. ...... . ... ... ... .. .. ....... ................ .... 526 Visua lizando e Retomando Suas Alterações'" . .. ...... .. •. .... 516 Melhores Práticas e Padrões de Cod ificação ' . . ..... ... .. •. .. . ........... .. 478 Desenhando com as Classes de Figuras · . . . .. . . . .. . .. ... . . . 506 Resumo ........... ••• ... .. ..• . . .. ..... .. ••.. ••• . .... ........... ... • .. .. .... ... ..... . . ....... • . .. ........ .... .. .... .. .......... .... .. ... .. 503 Salvando Figuras ' ....... . . . . ........ .... .. ... . 522 Extraindo o Código' . ... ... ... ....... ... .. ... · ·· · 528 Cons iderações sobre Segurança no Uso do Visual Source Safe· .. .. ....... S6 o Que For Confuso' . .. . .... ... 509 Worksho p' ........... ... .. .. . .... 45 1 Controles Avançados dos Formu lários Windows' .. • .••. ..... ....S um á rio XV II I Adicionando o Fonnulário· pai· . ... ..... .. .. .... . ...... e Nào Apenas o Seu Código· ........ . ... .....NET Framework · ·· · · ··· · ·· · ·· · · ·· · ·· ··· · ··· ·· · · · · · ··· · ···· · ···· ... 510 Teste··················· · ····· · ··············· · · · ········ · 510 Exerc ícios' ... . ..••• ........ ...... ... . . .... . ••. . .......... • .... ... .. .. . ... .•.. .. . ... . . . ............ ... ·47 1 · 47 1 · 47 1 ·472 473 Fluxos e Arquivos' . ..... 498 Desenhando Fomlas . ... . ..... . ...... ...... .. ... ... ...• •• • ..... . ........ ... .. 492 Exam inando as Classes de Figuras' . ........ . .. .. ·474 Lendo um Arquivo de Texto ' . .... .. . ...•• • • ... . ... ... . . ... ... ...... .... .. ..••..••. .

. 540 Implantações de Múltiplos Projetas ' .... . .. . 56 1 Gravando XML . ... ... .. ..... .. ...• .. . 530 Workshop' ... .. ..... . . .. .. ..... ... ...... .. .. . . . ... ... ... . . .... .. .. .. . ..•• .. .. .. . .. ...• . . . .•••. .. . . . .. .. ....... ...... .. .. . ... . .. . ... .. ..•• ... 571 Teste' ... . . .. • •. . .. .... . .. ..• • . .. .....• •..... . . .... . . ...• •. ••.. . ....• • •... .... 580 Criando o Projeto ' ....•• . .•. .. . .. . .•• .. .... .. .•• . 579 Criando um Serviço Web Simples ' . ... .. .... ....• .. . .. .. .. .. ...... ..... . .. ... Workshop' ..... ..... . ...• .. .. . ........ ......... ..... . . ...N ET em 21 Dias P&R ... .• ... .. ... 589 ...... . ... .. .. . .....• .. 573 O Sim p[e Object Access Protocol .. 55 1 Atributos' ... ..... 545 . .. •••. 530 Teste' .... . .. . .. .. .. .. ......... . . . .. 57 1 Dia 21 Criando Serviços Web com o Visual Basic . .. • .... . •••.. . • • • . . .... 542 ..•.... . . . . .. ..........•. . . .. 566 Resumo ... ... . 588 Adicionando O Código' . .... .. ............ .• •• • ...• .... ...... . .... . ..• ... . ..... . . . ...... ... .. ... . ..... 552 Esquemas' . .• •.... .•• .•. .... 553 Trabalhando com a XML .••• .. ... ... ... . . ... . . . • • ... .. .... . Exercícios . . .. ..... .... . • .... . .. .. ...... ... .. ... . .. ... P&R . .... .. . .. .. .. . ....XVIII Aprenda Visual Basic ....... . ...... .. . .. . .... ..... 569 P&R . .. 546 547 O Que E XML? ...... . .. . . .. . Resum o' . . .. ..... .. .. ... Teste' .... . .. . ... ... . . .... ..... ....... • •. ...... . . .. .. ................. .. ..... .... . . ... .. . ........ ... • ••....... . ... . . . . . .. .. .. .. ........... .. ... .... .. ... • •.. ........ ... • . .. . . . .. . .. ... .. . • .. .. .. 576 Discovel)" . 585 Criando um Serv iço Web Cliente ... . . .. .. .. . 571 Exercíc ios' . ••.. .. •.. . ..•• • • .. .. ....... ... 545 . • • . 587 Criando o Projeto' .. .... Dia 20 Introdução à XML .. . •••.. 569 Workshop' ..... . ... . ...... .. ... . .•• • .. .... . .... ...... . ... . ••.......... ...... .. . . . . .. • . 584 Compilando o Serviço Web' .. 546 ....... ... . • • . . ... .... ... . .... ..... .. ...... .. 53 1 Criando uma Instalação Simples · ... . . ... ... . .. .. . •• .. •• ... ... .. . .... .. ..•• • . ... . . ........ ... .. .•.•. .... ..... ... ....•. .• . 530 Dia 19 Implantando Seu Aplicativo 53' Int rodução à Implantação ' . .. 575 Web Service Description Language (WSD L) ..... .•• • ....•.......•• • .. . . •. .. ...... .. . .•... .. . .. . ... . .... ••. .. .. . ..... .. •• •..• .. .. .....•• .•• ... ... . •.... .. . .. . .... ••.... . .. . . .. ....... .. ..NET 573 O Que É um Serv iço Web? ' . .. ... . ... . • • • ...... . .. 556 O Document Object Model ..... ... .. ... ... .. 58 1 Adicionando o Código' .. .. .. . ..... 559 LendoXML· ·· · ··· ·· · ··· ··· · ·· ·· · · ·· ··· · ··· ·· ···· · ······ · .. . ..... ........ . . • •..... .. .•••. . ... .. 533 Crie o Projeto e a Solução ' . . . . .• • .. ...... .. .. .. . 533 Arqu ivos de Configuração' .... . 547 E[ementos . . .. . . • •.. ... . . . ......• •... .. .. . . ..... ..... . .... ..... . . ... . . .. ... 556 Objetos de Leitura e de Gravação' . .... 575 O Protocolo' . ..• .• . • .... ..•• .. .. . .. .. ... .... .. .. .. . . .. . ..... . ... . .. . .. . . . . .. ........ .. . . .... . . . .. 546 .....• . . . . ... . . .. . . . .. .. .... . • ..

. Exercfc ios SEMANA 3 Resumo • • • •• • • •• • •••• •• • • • •• ••• • • 592 • • • • • • • • •• • • • • • • • • • · . .Sumário XIX Um Serviço Web Mais Complexo Criando o Serviço' ... •• • •• • •• • • • •• • 619 619 620 ••• • • • • • • • • • • •• •• • • •• • • • • • • • • • • • • • • • • • • • • • • • 621 621 •• • • • • 622 623 623 • • • • • • •• • • •• ••• • • • • •• 67' -. ... . ... · . .. . ... .. . . Testando o Serviço Web' Criando o Cliente ' . Exercícios Respostas do Dia 4 Teste' . ... Adicionando o Código • • Resumo • • P&R . . . ... . . · . .. ... • •• • • • • • • • • • • • • •• • •• • • • • • • • • • • • • • • • • • •• • • • • 605 605 605 605 606 Apêndice A . . . . . . • • • • • • • • • • • • • • • •• • •• ••• • •• • • •• • • •• • ••• • •••• •• • • •• • •• • •• ••• • •• • •• • •• • • •• • 609 609 610 61 I 611 611 611 611 612 613 6\3 614 •• •• • • • •• • •• • •• • •• • • • •• • • • •••• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •• • • • • •• • • • •• • • •• •• • • •• •• •••• • • • •• • • • •• • • 615 615 615 615 615 617 617 617 • • ••• • • • • • •• • •• • •• • • • • · ... Exercfcios Respostas do Dia 2 Teste' .. .. .. . . . ••• •• •• • • • • • •• • •• •• • · . .. Exercíc ios Respostas do Dia 7 Teste' . .. . . . . . .. .. ... • • • • • • • • • • • • • • • • • • • • •••• • • • • • • • • • 597 596 597 600 604 • • • • • • • • • • • · . . ... Exercícios Respostas do Dia 10 Teste' . Exercícios Respostas do Dia 8 Teste ' . .. Exercíc io Respostas do Dia 5 Teste' ... . Exercícios • • • • •• · . ... ... . . . Respostas do Dia 6· Teste' . • • • • • • • •• Workshop ' • Teste' .Respostas dos Testes/ Exercícios • • • •• • • • • • • • • • • • • • • • 609 Respostas do Dia [ Teste' . Exercfc io Respostas do Dia 3 Teste' . . . • • • • •• • • • • • • • • • • •••• • • •• • •• •• • • • • • • • • • • . ..... Exerc ícios Respostas do Dia 9· Teste' .. . . .. ..

xx

A prenda Visual Bas ic .NET em 21 Dias

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

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

Exerc ícios' Respostas do Dia 12 · . . .. •. . •• •

. . . . . . . . . . . . . . . . 627 . . . . . . ... ... .. . . . • • • • • • • • • • • • • • • • • • • • • • • • . . . . . 628

• • •

• •

• • • • • • • • • •
• • • • • •

••

• • • • • • • • • • • • • • • • •

.. . • • • •

627

• •• ·

· . . . .. . . .. . ...

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

· . . . . . . . .. . . . 630 · . . . . . . . . . . .. 630 Teste' . . . . . . . .. . . .. . .. . . . ... . ... . ... . . . . .. . · . . . . . . . . . . . . 630 Respostas do Dia 14 ... .. - . . .... . •• •. . . .. ... . ... .. . · . . . - . . . . . . . . 630 Teste' .. ... . . . . . ... . ... . . . . . . . . . . ... .. . .. . .. . · .. . . . . . . . . . . 630 Exercíc ios' .... . ............ .•• .. .......... . .. . ... ........ . 630
Exercíc 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' . . . . . . . . . . . . . . . . . . . . . • • • . . . . . . . . . . . . . . . • . . . . ... .. . .... .. . .. . .. Exercícios ... .. . . . . • . .. . . . . . . . . . . .. . ... .... .. Respostas do Dia 18 · . ... . .. •• .. . Teste' ............. . .. •• .. . • • • • • • • • • • • • • • • • • • .. . .. .... . .. Respostas do Dia 19 ..... . .. •• .. . • • • • • • • • • • • • • • • • • • . . . ... .... .. .. .. Teste' .............. .. •• .. • • • • • . . . . . • • • • • • • • •
• • • •• • Exerc ícios Respostas do Dia 20 .. . ... .. •• • . . • •• . . . . . .... • • . .. . • . .... . . .. . Teste ' .. ... .. . ... . . ... •• • • • . .. . . ... • • • • • • . ... . . . . .

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

63 1

63 1 63 1
633 633 633 638 638

· ........ ..... .. .. · ·.. .. · · · .. . · .. · ..... • • • • •• · . . .. . . .

638
639 639

Exerc íc ios ... .. .. ... .. . • • .. . • • • • • • • • • • • • • • • • • • · .. . .. ..... • • . ... . . . . . Respostas do Dia 21 .. .. . .. .•• • • • • .. . . . . . . • • Teste' .. . . . .. . ... .. . . . . • . ..• • • . .. .. ... .• •. .. . • . ... . .. .. .
índice

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

Introdução
Bcm-vindo a uma lição estimulante e informativa de 21 d ias sobre o Visual Basic .NET, a mais nova encarnação da linguagem de programação mais popu lar do mundo. Este livro foi planejado para fornecer a você uma introdução ao .NET Framework e ao Visual Basic .NET, e fazê-lo começar a programar aplicativos reais o mais rápido possível.

Visão Geral

o .NET Framework é o conjunto básico de conceitos e tecnologia subjacente ao mais novo grupo de ferramentas de desenvolvimento da Microsoft e constituirá a base para a nova série de servidores, apli cativos e serviços com base na Web implantados ao redor do mundo. Como já é de se esperar, a plataforma .NET não é 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 próximos 21 dias enquanto ler este livro e trabalhar com os exercícios dele. Pelo fornecimento dos elementos básicos da linguagem do Visual Basic .NET e li ma expl icação s uficiente do próprio .NET Framework, você estará pronto para já começar a programar e preparado para continuar aprendendo ao progred ir. Desde o início, é 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 própria plataforma .NET e também pode ser acessado sem problemas por qualq uer linguagem .NET (incl uindo o Visual Basic, C#, C++ e outras). Essas são notícias excelentes tanto para os desenvolvedores novos do Visual Basic quanto para os experientes. O Visual Basic não é mais uma linguagem de segunda classe, com certos recursos avançados do sistema operacional restritos apenas aos programadores que usam C++. Agora, qualquer sistema, independentemente do tipo, pode ser criado no Visual Basic. Essa independênc ia também significa que você (ou sua empresa) está livre para escolher qualquer linguagem com aqual que ira trabalhar. Dada essa opção, mu itas pessoas, incluindo os autores deste livro, irão adolaro Visual Bas ic .NET. Sua sintaxe e est ilo fáceis de usar o tornaram a linguagem de programação mais popular do mundo, mesmo com as limitações que a versão 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 série de lições, cada uma representando a lgum conceito importante no desenvolvimento de aplícativos (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 lições podem ser examinadas em qualquer ordem, mas se você for novo na atividade de programação em geral, então, será mais vantajoso seguir a partir do início, na primeira vez que o livro for usado. A maioria das lições, mesmo a primeira, inclui algum exemplo de código e exercícios para os quais será necessária a elaboração de mais um pouco de codificação. Para aprovei tar ao máximo o tempo gasto no livro, tente realizar todos esses exemp los e exercícios. Nada aumentará sua compreensão desses tópicos mais rapidamente do que co locar a mão na massa e cod ificar.

Quem Deve ler Este livro?
Embora o objetivo principal deste livro sejam as pessoas iniciantes na at ividade de programação em geral e no Visual Basic .NET especificamente, ele será út il a uma variedade maior de leito· res. Se vocêjá for um programador do Visual Basic, então, procure nos diversos tópicos do livro algumas das ótimas explicações e exemplos que envolvam os novos recursos. Será possível per· ceber que há mu itas diferenças no universo do Visual Bas ic 6.0, e o nível de abordagem forneci· do neste li vro deve ajudá·lo a fazer a transição. Se você já for um programador experiente que não conhece o Visual Basic, poderá ficar tentado a saltar ou ler de modo superficial grande parte das primei ras Iições. Independentemente de seu nível de habilidade, será bom examinar com detalhes a introdução (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 próprio ritmo, verificando por alto algumas das seções que abordam conceitos gerais de programação e se dedicando aos capítulos que explicam como o Visual Basic .NET realiza tarefas avançadas, como a criação de objetos, o acesso a bancos de dados e a geração de aplicativos na Internet.

o Que Você Aprenderá
Este livro ensi nará a você como criar vários 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 tópicos sobre o Visual Basic .NET, também 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 criação de classes e o uso de objetos, além dos princípios básicos da herança, sobreposição, anulação e outras funciona lidades avançadas fome· cidas por esse tipo de programação. Na etapa de desenvolv imento que envo lve a interface ou saída, você aprenderá a criar aplicat i· vos ' Windows' por meio dos novos recursos de formulár ios do Visual Basic .NET, a construir interfaces com base em páginas da Web usando fo rmulários da Web e a gerar um serviço simples disponível na Web que podera ser utilizado por qualquer linguagem ou plataforma de programa· ção capaz de acessar a rede e compreender a XML.

Introdução

XXIII

I

Nosso objetivo é prepará-lo nos próximos 21 dias para que você possa criar muitos de seus próprios 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 Não Abordaremos
Apesar da discussão anterior sobre a independência da linguagem e a importância das tecnologias subjacentes, este é um livro que tem como prioridade o Visual Basic .NET. Como tal, não abordaremos a C# ou qualquer outra linguagem .NET que não seja o Visual Bas ic. Mencionaremos a utilização de bancos de dados, como o SQL Server, mas você não precisará recorrer a livros sobre ele para obter detalhes completos sobre como configurar e gerenciar seu servidor de banco de dados. Também não 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 saríamos 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 necessário 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 mínimo as especi ficações básicas a seguir:
o

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 instalação de qualquer pacote de serviços. arquivos atllalizados de acesso a dados e da versão 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 vídeo com capacidade para resolução de 800 x 600 pi xels, 256 cores e no mín imo I OB de espaço em disco rígido. Uma unidade de CD-ROM é necessária para instalação, mas você pode colocar seus CDs em out ra máquina e instalar por meio de uma conexão LAN.

Além do Visual Studio, os exem plos deste livro requerem a possibi lidade de acesso a um servidor Web que esteja na mesma máquina do Visual Studio ou tenha o SDK do .NET Framework instalado nela. O melhor a fazer é se certificar de que sua máquina principal de desenvolvimento tenha um servidor Web em execução nela, como no Windows 2000 ou no Windows NT. Outro requisito básico 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ê não tiver o SQL Server, então 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 lições 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 bás icas são necessárias. 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 edição básica de texto
(recortar, cop iar, colar) são todas necessárias, e não serão explicadas nas li ções. Saber como conectar sua máquina à Internet e navegar em si les da Web também são habilidades exigidas .

Além desse conhecimento bás ico em computadores, você não precisa ser um programador ou

saber como construir bancos de dados. Qualquer conhecimento efetivo nessas áreas provavelmente será útil, mas nossos exemplos e explicações foram elaborados para serem claros mesmo para alguém que nunca tenha tentado codificar antes .

o Site da Web
Este Iivro possui um site da Web associado a ele no endereço http: //www.makron.com.br . Localize a página do livro no site, digitando seu título na caixa Pesquisa. Ao entrar na página do livro, procure o link MATERIAL COMPLEMENTAR. Você pode fazer o downJoad de todos os códigos 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 possível 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 esforço em digitação fazendo o download dos arquivos que contêm os códigos.

Layout dos Capítulos
Vinte e um dias é um período longo, portanto, além de dividir as lições em dias, organizamos o livro em seções com duração de três semanas (ou partes). Na primeira parte, nos dedicaremos a introduzi-lo nos conceitos gerais de programação e da platafonna .NET, e abordar a sintaxe e técnicas básicas para a criação de programas COI11 o Visual Basic .NET. Na segunda parte nos aprofundaremos no .NET Framework para fomecer uma compreensão mais detalhada dessa base essencial de toda a programação e também discutiremos os fundamentos da criação de programas reais, como a maneira de gerar uma interface com o usuário (com formulários Windows e da Web) e como trabal har com bancos de dados. A llltima pm1e introduzirá alguns dos tópicos mais avançados da programação .NET, incluindo a cfiação de seus próprios objetos, a implantação de seu aplicativo nos computadores de outras pessoas e o trabalho com a XML e os serviços da Web. Como falamos anteriormente, tente percorrer essas lições em ordem, mas fique à vontade para saltar adiante se houver um tópico sobre o qual queira muito ler mais no momenlo que desejar.

Introdução

xxv

Retorno
Trabalhamos duro para tornar este Iivro urna ferramenta útil de aprendizado da plataforma .N ET e uma aquisição valiosa para sua biblioteca de desenvolv imento. Se você achar que deveríamos ter gasto mais ou menos tempo em algurn tópico específico ou tiver sugestões para melhorar o livro, faça cantata conosco (c 1i entes@makron.com.br). Tentaremos incorporá-las em livros futuros e, se for o caso, na próxima revisão deste mesmo volume.

Convenções Usadas Neste Livro
Este livro usa várias convenções para ajudá-lo a priorizar e recorrer às informações que ele contém:

NOTA

As notas fornecem informações úteis em destaque, que você pode ler imediatamente ou retornar a elas sem perder o fluxo do tópico que estiver examinando.

DICA

As dicas rea lçam as informa ções que podem tornar sua programaçâo no VB mais eficaz.

Os alertas de cuidado concentram sua atençâo em problemas ou efeitos colaterais que podem ocorrer em situações especificas.

Faça
Os q uadros FaçaJNâo Faça enfatizam práticas boas que você deve adotar ... . .. e ruins que devem ser evitadas.

Novo TERMO

Os ícones Novo Termo assinalam locais onde uma nova lenninologia foi usada e definida pela primeira vez. Essa terrninologia aparece destacada com uma fonte em itálico. Os ícones Código são usados em exemplos de código que o usuário deve inserir. Os ícones Análise apontam para discussões com explicações sobre os exemplos de códigos.

CÓDIGO

ANÁLISE

o código é apresentado em fonte monoespaçada.

SEMANA

1

Visão Geral
Durante esta parte, você aprenderá varias tópicos essenciais: • • • O Visual Basic .NET c o conceito de programação (Dia 1). Configuração e uso do Visual Studio .NET para começar a escrever programas (Dia 2). A sinta"e e as técn icas de programação do Visual Basic para tipos de dados, procedimentos e variáveis (Dia 3); o controle do fluxo dos programas - laços e instruções condicionais (Dia 4); e o tratamento de erros (Dia 6). Organização e projeto de uma solução 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 básico nos quais todos os outros conceitos de programação do Visual Bas ic .NET se basearão. O Dia I preparará você para começar a explorar e aprender o Visual Basic, por meio da introdução dos conceitos fundamentais de programação e da plataforma .NET, junto com um breve histórico do próprio 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 informações sobre a sintaxe e conceitos (incluindo variáveis, laços, instruções i f e mais) que farào 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 prático da codificação cm que aprenderemos a lidar com erros e a usar objetos em programas. Esta parte fornecerá as informações de que você precisa para prosseguir com a leitura do livro, provendo todos os detalhes sobre os quais os outros capítulos se desenvolverão.

SEMANA

1

DIA
Bem-Vindo ao Visual Basic .NET
a segUI r:
• • •
Hoje, o introduzirei no universo da programação do Visual Basic respondendo às perguntas .

O que é programação 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 conheço 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 lição de hoje, usarei um pouco do tempo discorrendo sobre o que é programar e por que você gostaria de fazer

ISSO.

Compreendendo a Programação de Computadores
Embora falemos com freqüência em computadores no que diz respeito ao hardware (é comum ouvir comentários como "Tenho um Pentium III com 600 MHze 256 MB de RAM", por exemplo), sô isso não é o bastante. A CPU (Central Processing Unit ou unidade central de processamento do com putador), por exemplo, pode realizar muitas tarefas importantes como cálcu los matemáticos ou a transferência de dados entre várias partes do sistema. Sozinho, no entanto, não é capaz nem mesmo de ler um arquivo no disco rígido. Um programa de compuladoré um con-

4

Dia 1

junto de instruções para todos esses elementos de hardware, em geral escrito para execução de alguma tarefa que esse não poderia concluir sozinho. Todas as operações básicas que envolvem o uso de unidades de disco, memória, monilare impressora são complexas. Um programa que tivesse de interagir com essas operações 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 exibição e outras questões, e apenas algumas li nhas para fazer o cálcul o. Assim a programação 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 específicas.

A Função dos Sistemas Operacionais
Para fornecer essa camada básica de funcionalidade nos equ ipamentos, os sistemas operacionais foram criados. Eles mesmos são programas de computador, mas sua função é manipular todos os detalhes de gerenciamento de memória, entradas/saídas do disco (E/S) e outras tarefas de nível inferior. Quando há um sistema operacional (OS, Operat ing System) em um computador, outros programas podem ser escritos que não tenham de lidar com todos os detalhes de níve l inferior; se os programas precisarem abrir um arquivo ou formatar um d isquete, poderão solicitar ao sistema operacional que execute essa função para eles. Examinando isso graficamente (veja a Figura 1. 1), você poderá vis uali zar as relações entre o hardware do computador e o sistema operacional, ou desse com outros programas, como várias 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 códigos específicos de
FIGURA

Aplicativo do Usuário (incluindo seus programas!)

Sistema Operacional Drivers de Dispositivos Componentes do Hardware Drivers de Dispositivos

Iwrdll'lIrc.

Com freqOênc ia, os relacionamentos não são 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 não dê suporte ou para tentar melhorar o desempenho. Isso decerto foi o que aconteceu, no início, com um dos pri meiros sistemas operacionais de r es, no qual muitos programas tinham de interagir diretamente com o hardware . Essas limitações significavam mais trabalho para as pessoas que quisessem escrever softwares para rcs, já que cada programa precisava manipular suas próprias impressoras e outros detalhes. Ao mesmo tempo em que versões sucessivas dos sistemas operacionais forneciam um aumento na funcionali-

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

5

dade, se tomou mais fáci 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 usuário para outros programas. No Windows, se um programa de computador precisar mostrar uma caixa de diálogo 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 exposição de todos os recursos do sistema operacional e podem, portanto, ser usadas em seus programas.

FIGURA 1.2

O Windows manipula a

~~ ...

daIo(J boxl

exibiçtio de elementos de GU!.s (Gl'aphicaf
UseI' Ime/faces.

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

fme/faces gr4ficas com o usuário) como esta caixa de diálogo. o que fa= pane do.ç serviços que ele fornece aos programas.

II '" II

o resultado de todas essas melhori as é que cada programa tem de manipular cada vez menos
operações genéricas do computador e pode, portanto, se dedicar a sua fi nal idade real. O utro grande beneficio da remoção de códigos específicos de hardware dos apli cativos é que, quando ocorrem alterações no hardware (impressoras e unidades novas de disco rígido, 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 não 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 rígido. Você se tornará produti vo rapidamente, com a ajuda deste livro.

o Papel das linguagens de Programação
Então, agora você sabe o que o sistema operacional fornece, mas e os programas propriamente ditos - como são criados? Antes, neste capítulo, defini um programa de computador como um conj unto de instruções para o hardware. Já que o hardware só pode real izar operações re lativamente fáceis, as instruções também devem ser simples. O resultado final do programa é um cód igo que o hardware pode entender, chamado com freqüênc ia de linguagem de máquina ou código nativo. As instruções, depois de carregadas na memória pelo sistema operacional , são compostas de comandos como "transfira a memória de um local para outro" ou "execute uma função matemática com os valores". Milhares desses comandos formam um programa comp leto.

Dia 1

É possível escrever programas usando di retamente esse código nati vo, com a criação de um arquivo no disco rígido repleto de instruções, mas seria necessário muito trabalho para produzir até mesmo um programa mais simples. Para evitar todo esse esforço e permitir que os programadores se dediquem à fina li dade de seus programas, linguagens de nível superior foram criadas. Essas linguagens permitem que você use instruções mais avançadas e complexas que são, então, convertidas para as diversas instruções necessárias que sejam correspondentes às outras na linguagem de máquina. Uma única linha de uma linguagem desse tipo provavelmente poderia se transformar em dez instruções separadas na linguagem de máquina. Novo
TERMO

o processo de converter uma linguagem de computador de alto níve l em código de

máquina ou nativo é conhecido como compilação. Os programas que fazem essa conversão são chamados de compiladores.

Muitas dessas linguagens foram criadas com o passar dos anos. FORTRAN, COBOL, APL, Pascal , C e BAS IC são apenas alguns exemplos, mas centenas de li nguagens diferentes estão disponíveis. Cada linguagem poss ui seu próprio conjunto de comandos e, com o tempo, novos comandos são criados para simpl ificar ainda mais o esforço de programação. Assim como os computadores evo luíram progressivamente, o mesmo aconteceu às linguagens usadas para programá- los, sendo adicionados novos recursos às existentes ou com a criação 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 têm o objetivo de aumentar a produtividade da programação, permitindo que o desenvol vedor crie o programa desejado da maneira mais fácil possíve l.

NOTA

É simplista decla rar que as linguagens de programação evoluem apenas para tornar o desenvolvimento mais rápido. A velocidade no desenvolvimento é apenas uma das motivações por trás das melhorias que ocorreram. Outros objetivos e resultados são a produção de aplicativos mais rápidos ou estáveis (com menos falhas ) ou até mesmo a criação de aplicativos mais fáceis de instalar.

Originalmente, a maioria das linguagens de programação 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 executável, pressupondo a inexistência de erros. O resu ltado compilado era executado, testado para a verificação de erros e, então, você voltaria a seu editor de texto para fazer alterações no côdigo. Ele seria com pi lado mais uma vez, e o ciclo se repetiria. Esse processo de desenvolv imento (veja a Figura 1.3) não era de uma linguagem específica; era uma atividade comum para todos os programadores.

. ( Encontre erros) C Compile ) ------'-~ El(ecute ) Enquanto as li ng uagens de programação evoluíam. . . C. A finalidade de um IDE é combinar os componentes de edição.c". FIGURA 1..••••••••••...•••••••••. u .Bem-Vindo ao Visual Basic . depuração e compilação do desenvolv imento de softwares em lima llnica interface para o programador (veja a Figura 1. . . . .•. Integrated Development Environrn ent)...• ' ' ' •• '~.NET 7 FIGURA 1... . ."0. o código ainda é compi lado (veja a Nota a seguir para mais infonn ações) e o programador ainda cria arquivos de texto... CO_I •.. . _""o U . Na maiori a dos casos.. . inell/sire para o Visual Basic.. esse c iclo foi melhorando também.. "..4). mas o ambiente de trabalho é muito mais amigável..4 O Visual Studio é 11m IDE quefomece lima ime/face único para qualquer lipo de linguagem. · ' OO _ ' . . """ "'. . a tecnologia real é muito semelhante.. Apesar da interface llnica. resul tando no desenvolv imento de compi ladores mais avançados e no conceito de um Ambiente Integrado de Desenvolvimento ( IDE. r. . . .. (crie/Edite o CÓdigo) Os compiladores eOlll'erlem o código-fonle de lillguagells de alIo nirel em instruções qlle o computador possa compreender.. • . . 01 • ..·" ••• <0«< <o "". ..3 " ...••••••••••••••.

O Visual Basic já foi uma linguagem interpret ada. Em vez disso. Isso é rea lmente verdade no caso do Visual Basic. você verá que um I DE pode dar suporte a muitas linguagens. Essas linguagens são chamadas 'visuais' porque permitem a geração de programas que usem um a interface gráfica. um código real freqUentemente é gerado. mas ambos são em geral vistos como o mesmo elemento. "Porq ue é divertido escrevercódigos". existe um outro tipo chamado linguagem interpretada. Hoj e. já que a aná lise (a leitura do fonte à procura de comandos) tem de ocorrer sempre que o programa é executado. mas o programador tem um trabalho muito mais agradável com a criação das partes gráficas de seu aplicativo. . A criação de IDEs gerou alguma conrusão entre quais seriam os seus recursos e os da linguagem a ser usada. Depoi s de ter explicado o conceito geral do trabalho. para o qual o IDE forn ece muitos recursos que permitem ao programador criar com facilidade uma funcionalidade avançada. texto e outros itens em uma tela para constru ir uma interface com o us uário (veja a Figura 1. Esses recursos quase sempre geram o código do Visual Basic. quase sempre ouço a segunda pergunta mais com um. Mais uma vez. Outro avanço importante na história das linguagens de programação foi a criação das linguagens 'visuais'. é o IDE que adiciona a funcionalidade. na verdade. e é ele que executa o trabalho. mas esse não é mais o caso. na hora da compilação. Em geral. nas quais a análise s6 ocorre uma vez. Nessas linguagens. como o Visual Basic. parece nunca satisfazer as pessoas. Portanto. O recurso mais comum desse tipo de linguagem é a possibilidade de inserir botões. Nesse caso. e talvez seja importante compreender a diferença entre ele e sua linguagem subjacente . um programa especial executa o CÓdigo lendo o fonte e processando o que for apropriado.NET. as linguagens interpretadas são processadas mais lentamente do que as compiladas. " Por que você iria querer fazer isso?" . vale a pena ded icar um pouco do tempo considerando o que iremos escrever e por quê. Por Que Escrever Programas de Computador? Mencionei antes que a pergunta mais comum que ouço é: "O que faz um programador de computadores?" . Abordarei a posição ocupada pelo Visual Basic como linguagem de programação um pouco mais ad iante na lição de hoje. e não a linguagem.5). já que começamos a aprender aescrever programas. o cód igo-fonte nao é com pilado.8 Dia 1 ND T A Além das linguagens compiladas (em que o código-fonte deve ser processado em um compilador antes que possa ser executado). quando for introduzido o conceito do Visual Studio . A resposta.

. Antes de a cod ificação começar. No entanto. Software Oevelopment Life Cyc le) contém várias outras elapas essenc iais (veja a Figura 1.5 As jerramenlas I'isuais de desellvolvimenlo peJ'mi/ell/ que você crie [dt"-~""'_ry-l'" · tJ ·~ ~ Sl -l. mas a categoria maior de programas é a que quase nunca é mencionada. sua natureza ind ividualizada sign ifica que há uma taxa mu ito alta de trabalhos de programação por cliente.6). principalmente no mundo do software personalizado.. r d . em li nhas gerais. Quando é solicitada a dar exemplos de aplicativos. são desenvolvidos para um único cliente ou um pequeno nicho de mercado. ou seja. A menos que você esteja interessado em (ou obcecado por) programação. uma interpretação das necessidades do cl iente na fo rma de partes de um sistema de computador. elll segl/ida.. isto é. .t 1iõI" • . e mais tarde se tornará o guia por me io do qual o programador trabalhará. . ge/'e o código lIecessário. Mas o ciclo do desenvolvimento de soft\Vares (SOLC. inlelfaces graflcamenle e. algumas podem mencionar jogos de computador e muito poucas incluiriam o próprio Windows na lista.Be m-Vi ndo ao Visual Basic . Essas info rmações devem se tomar uma planta geral para o aplicativo de computador. a maioria das pessoas responde com programas como o Microsoft Word ou o Excel. Esse sistema completo . •• A primeira coisa a compreender sobre programação de computadores é o tipo de programa que será desenvolvido... deve-se saber à que o novo sistema é destinado. A função de um programador abrange muitos aspectos diferentes no desenvolvimento de soft\Vares. Podemos dizer que essa planta é.NET 9 FIGURA 1. Os programas mais comllns são os sistemas que vemos a toda hora. . Todos esses são definitivamente aplicativos de computador e alguém tem de programá-l os. seus requisitos. como o sistema de computador na locadora próxima ou o programa que o governo local usa para rastrear licenças de motori sta. . Fora de seu universo de apl icação. O resultado desejado é um sistema de computador que atenda às necessidades originalmente especificadas pe lo usuário. Esses programas. não são tão diferentes de softwares prontos como o Microsoft Word. o projeto . não pensa com freqüência nos meses ou anos da vida do programador que são gastos no desenvolvimento.

durante os 15 anos seguintes. então.já que ele é considerado por muitas delas como o caminho mais rápido para passar da idéia ao aplicativo. A finalidade efetiva da programação é fazer o hardware do computador realizar tarefas práticas./ Implementação Esse ciclo é a vida e o trabalho do desenvolvedor de softwares. uma linguagem que é facilmente assi milada e usada por programadores iniciantes.6 O de/o de vida de 1/111 projeto de de. qbasic . O BAS IC da Microsoft e seu s ucessor. e.~en\'oll'illlel1lo de software passa por várias etapas dis/imas. se transformaram nas versões do BASIC mais amplamente disponíveis nos PCs. uma versão da linguagem BASIC foi um dos primeiros produtos que ela c riou.problemas no s istema . FIGURA 1. para a maioria dos programadores. Os erros . mas era necessário um trabalho consideráve l para cod ificar uma inter- .devem ser corrigidos. com para obter recursos e Iinks sobre essa linguagem). o molivo pelo qual programam pode ser definido em tennos mais simples: eles escrevem códigos que fazem algo de úti l. Requisitos Correção de Erros e Manutenção Projeto "- Distribuição '\ . acesse o endereço http: //www . Elas ainda possuem uma quantidade bastante grande de usuários (se você estiver interessado. que conduz muitas pessoas ao Visual Bas ic. 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 nção de utilidade. O Quick BASl C estava disponível para Windows quando foi lançado. e novos recursos adicionados. Mas. o Quick BASIC (ou QBASIC. Em 1975. várias pessoas e empresas criaram compiladores e interpretadores para o BASIC.Dia 1 deve. além de fornecer a experiência para o aprendizado. é isso que guia a maioria dos desenvolvedores de softwares. como também é conhecido). quando a Microsoft era uma empresa nova. ser distribuído para os usuários. criar aplicativos úteis. Essa Iinguagem se tornou popular. É esse o objetivo real. e que se tornOllllm sucesso. com manutenção e aprimoramentos posteriores. Um Breve Histórico sobre o Visual Basic A história do Visual Basic na verdade começa com a invenção do BASIC (Beginner's A ll-purpose Symbol ic Instruction Code) em 1964.

No entanto. o Vis ual Basic era uma linguagem interpretada. _ ( _ 1 FIGURA 1.. _ . o que resultava em um desempenho relat ivamente fraco se comparado com o do Visual Ctt.0. mas fornecia realmente um ambiente veloz para o desenvolvimento de interfaces gráficas com o usuário (GU ls). o que o tornava cada vez mais uma ferramenta de desenvolvimento completamente capacitada. Esse prod uto. Delphi e outras lin- . começou com urna versão em DOS. conexões com modems e muitos outros. em particular. Toda versão atuali zada do Visual Basic adicionava novos recursos.Be m-Vi ndo ao Visual Basic .. como a geração de gráficos. - imp0l'lome foi sua forma 1'isllal de a/'/'asta/' c solta/' IIsada no descl/voh·imcllfo. ele não fo i adotado. de modo que ele não era mui to apropriado para codificação nesse novo ambiente. o programador e outros fornecedores criarem componentes de interface personalizados que podiam ser ad icionados aos programas.7). desenvolvendo componentes que adicionavam vários recursos aos aplicativos do Visual Basic. Uma alteração importante. a Microsoft apresento u um novo produto que combinava a linguagem popular e fácil de aprender do BAS IC com um ambiente de desenvolvimento que permitia aos programadores criar graficamente a interface com o us uário para um programa.. O Visual Basic cresceu em popularidade com o tempo. No início. era o Vis ual Basic 1. Isso aumentou mu ito o desenvolvimento rápido possibilitado pelo Visual Basic e ajudou a torná-l o uma das linguagens mais populares de programação. na verdade. O que pode ser uma s urpresa é que o Vis ual Basic.NET 11 face com o est ilo do Windows. foi na maneira como o Visual Basic era processado no tempo de execução..7 "·13 A primeira rersão do Visllal Bosic paro Windows fornecia IIIlIilos dos recursos essel/ciais COIIIIII/S em várias jcrromcmos ali/ais.. As empresas rapidamente entraram nesse mercado. Era a possibilidade de a Microsoft..... embora tenha s ido logo transferido para o Windows (veja a Figura 1... Um ún ico recurso se mostrou essencial para seu sucesso. e .. ° //Iais I . Até a versão 5 ser lançada em 1997. Esses componentes permitiam que o programador do Visual Basic criasse apli cativos mais avançados combinando vários componentes com seu próprio código. como você já deve ter adivi nhado.. ed ição de imagens.

Outra alteração essencial no Visual Basic foi a possibilidade de criar componentes. A versão 4. Sempre que você. Isso sign ifi ca lima curva de aprendi zado severa para as pessoas que tinham experiência na versão anter ior da linguagem. O benefício de uma mudança dessas seria lima impl ementação nova e limpa por completo. Muitos recursos complementares foram adicionados ao Visual Basic.NET. que poderia ser usado em muitos locais do programa e potencialmente até mesmo em vári os programas di ferentes.0 tomou possível criar versões compiladas ou interpretadas de programas. e romper a compatibilidade com o côdigo já existente para o usuário pode não ser bem aceito. A maioria das ferramentas de desenvolvimento progride dessa maneira. contudo há o efeito colateral de acum ular lixo. que poderi a manter o que fosse bom e desc311ar as partes invál idas da linguagem anterior. ou outra pessoa. um bloco de cód igo que é digitado um a vez no programa.d l!. precisará copiar o código para todos os apl icativos que o uti li zam. "Introdução à Programação Orientada a Objetos".0 (lançada em 1996) foi a primeira a perm itir a criação de componentes. Usar uma biblioteca é o método preferido de com partil har códigos. mas pode ser chamado de qualquer local do aplical'ivo. As versões novas de uma ferramenta tentam manter a compat ibil idade com todos os aspectos muito pouco efi cazes das anteriores. Essa biblioteca é conhec ida como componente e é criada quase sempre na forma de um arquivo . mas a motivação mai s significat iva foi a necessidade de adaptação ao novo amb iente . O comparti lhamento desse código dentro de um programa em geral é conseguido escrevendo-o como um proced imento.NET. O com partil hamento entre programas pode ser feito apenas copiando-se o código do procedimento em cada novo apl icativo que for desenvolvido. No decorrer do desenvolvimento de novas versões do Vi sual Basic. Ela reescreveu a linguagem para criar uma versão li mpa que eliminasse o lixo que se acumulou por uma década de atuali zações sucessivas. Isso foi exatamentc o que a Microsoft fez na passagem do Visual Basic 6. encontra-se com freqUê ncia um trecho de código. No decorrer . já que os concei tos ensinados neste livro terão uma vida útil muito mais longa do que aquilo que se aprenderia com um material relacionado à versão anterior.12 Dia 1 guagens compiladas. mas o resultado fi nal vale o esforço. Reescrever uma linguagem a partir do zero é quase impensável. O trabalho necessário poderia ser enonne.0 para o Visual Basic . Em programação. e hoje esse é um recurso extremamente essenci al em projetos de desenvo lvimento. fi zer uma alteração nesse bloco de código (para corrigir um erro ou melhorar a maneira do cód igo funci onar). Isso não é raro. como uma rotina de cálculo de hipoteca. mas isso gera um problema. Uma maneira de melhor compartilhar o côdigo é criar uma biblioteca de códigos armazenada em um arquivo separado dos programas que o utili zam e que possa ser alterado de modo independente . todos eles foram esti muladores dessa dec isão. e o desempenho melhorou de modo cons iderável. O Visual Basic 5. mas tudo foi construído em ci ma da base ex istente. Disc utiremos os componentes com mai s deta lhes no Dia 14. A alteração rad ical faz com que este seja um grande momento para ser iniciante no Visual Basic. sua capacidade de criar esses componentes foi avançando regularmente. Há muitos benefícios nessa mudança.

Cada uma dessas partes da plataforma .0. .NET. Da mesma maneira como o Windows 2000 é na realidade a versão 5. . A platafonna .0. ela é uma camada que existe abaixo de seus programas e fornece um conjunto de serviços e funções básicas.8 Aplicativo do Usuário (in cluindo seus programas!) . No início desta Iição. você aprenderá mai s sobre a plataforma . mas é muito mais que isso . No entanto.Bem-Vindo ao Visual Basic . Exchange.NET? À primeira vista. o que é e como o Visual Basic se enquadra nela.NET pode parecer apenas um conceito de marketing.0 do Windows NT. um conjunto básico de objetos chamado .NET pode ser explicada de maneira semelhante.NET representa toda uma gama de tecnologias e conceitos que formam uma plataforma na qual você pode desenvolver apl icativos.NET Framework.só que ele não é muito usado. não espere ouvir Visual Basic 7. havia até uma penalidade em dinheiro dentro da Microsoft para quem se referisse ao Windows 2000 como NT 5. mais ele é usado.NET (veja a Figura 1.N ET possui um número real de versão. e um conj unto de serviços que dá suporte a todas as linguagens .NET é lIIais do que apenas um i/em: é UI1l cOIyllnlO de .NET 13 desta lição. expliquei como o sistema operacional fornece um nível de funciona lidade básica aos aplicativos (como a possibilidade de ler arquivos de um disco rígido ou disquete). App Center••.NET chamado Common Language Runlime (CLR). SQL. o Que É .NET Componentes de Hardware . BizTalk. FIGURA 1. o Visual Basic . quanto mais simples ou assimilável é o nome.NET Framework Servidores . . NOTA Na verdade. 7. uma maneira de evitar mais um número após Visual Basic.wjilrares e cOl/ceitos qlle fUllciollam juntos para permilil' a criação de soluções para empresas.8) será abordada individualmente.0 com freqüên da.NET.NET Windows. Dispositivos . Essacamada contém um grupo de apl icativos e sistemas operacionais chamado servidores .

As classes básicas forn ecem um vasto conjunto de recursos. fornece dois itens essenciais: o ambiente principal de tempo de execução e um conjunto de classes básicas. Em geral. esses servi dores fornecerão os serviços básicos a seus apli cat ivos . só temos de entender que o . esse tipo de sistema faz seu trabalho no back-end. 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. Juntos. Esses produtos incluem: • • • • • • • Um sistema operacional do serv idor. . empacotando e definindo essas tecnologias como protocolos da Internet.NET é diminuir o desenvolvimento de sistemas di stribuídos. uma delas foi o desenvolvimento de uma nova base para todas as ferramentas . O verdadeiro poder dessa estrutura será exp lorado com mais detalhes no Dia 8. exec utando serviços para seu aplicativo e simpl ificando o acesso aos recursos das camadas inferiores.NET Framework é em mu itos aspectos semelhante ao sistema operacional e que fornece seu próprio conjunto de APl s a fim de facili tar aos programadores o aproveitamento de seus recursos.NET Framework Na passagem para o Visual Basic . o Microsoft Windows (Server.NET de desenvolvimento. o Mi crosoft SQL Server Um sistema colaborat ivo de correio eletrônico com armazenamento de informações de fo rma li vre.14 Dia 1 Servidores . no nível do servi dor. acesso a sistemas de arquivos. chamado Microsoft BizTalk Server Um serv idor para o acesso a sistemas legados. nos quais o trabalho é feito em vários locais difere ntes.NET Framework. conhecida como . Eles roram projetados para substitu ir os recursos de back-end necessários ao sistema distribuído. " Introdução ao . mostrando onde podem ser usados em seus sistemas . manipulação de XML e mais.NET Enterprise Servers. Este livro se referiráaeles a lgumas vezes. O ambiente de tempo de execução é seme lhante ao sistema operacional por proporc ionar uma camada entre seu programa e as complexidades do resto do sistema. A Mi crosoft fornece um conjunto de softwares quejun- tos são conhecidos como .NET o pri nc ipal objelivo do conceito . Essa base.NET Framework". chamado Host lntegration Server E mais . o Microsoft Exchange Server Um mecanismo de transfonnação de dados com base em XML (falarei mais sobre a XML no Dia 20). como o AS/400s...NET . .9 il ustra o relacionamento do Framework com o seu código e com os serv iços subjacentes do sistema operacional. formando o alicerce dos sistemas. A Figura 1. Por enquanto.NET muitas coisas foram rad icalmente alteradas.

NET 15 1. O Visual Basic e o COBOL compartilham todos os recursos do Framework. o compi lador deve produzir um código que adote um certo padrão. Neste ponto. já que são linguagens diferentes. é uma interface que outros aplicativos ou sites da Web podem acessar através de código. O resultado é que.NET Fremework Sistema Operacional Componentes de Hardware Para uma linguagem de programação se beneficiar do ambiente de tempo de execução e outros recursos do . além das linguagens fornecidas pela Microsoft. Isso é diferente de apenas di sponibilizar um site da Web. A Microsoft fornece esse padrão.1 0). Smalltalk e assim por diante) foram desenvol vidas sobre exatamente a mesma base do Visual Basic. Um exemplo desse tipo de serviço pode ser uma folha de pagamentos. também possuem suas próprias funções e sintaxe exclus ivas. como uma maneira de fazer com que qua lquer compilador possa ser usado na plataforma .NET Framework. é im portante distinguir os recursos fornecidos pelas linguagens e os proporcionados pelo . mas (ambém disponib ilizou o Common Language Especification fora da Microsoft de modo que outras empresas pudessem desenvolver compi ladores para outras Iinguagens.NET Framework. . NET. muitas outras existentes (como o COBOL. Ela criou os compiladores do Vis ual Basic.9 O .NET Framework fornece oulra camada de abslração sobre o sistema operaciollal. Um desses conceitos essenciais é a idéia de serviços da Web.Bem-Vindo ao Visua l Basic .NET Framework. APL. Serviços . você aprenderá tanto sobre os recursos específicos do Visual Basic quanto os fornecidos pelo Framework. o Common Language Specification. recurso distribuído de uma maneira consistente de modo que s ua execução fique totalmente confinada em seu ambiente.NET inclui certos conceitos que se estendem além dos detalhes de programação para descrever como os sistemas devem ser desenvolvidos e podem interagir.NET A platafonna . para a qual uma empresa possui servidores e aplicativos em sua própria organização que podem man ipulá-Ia. eX(l/amellte como esse faz para o hardware do eompUfado/'. Ao dar prosseg uim ento à leitura. mas. A empresa fornece esse serviço para outras por meio de um serviço da Web (veja a Figura 1. Vi sual C++ e C# que se destinam ao .NET. FIGURA Aplicativo do Usuário (incluindo seus programasl) .

envio de mensagens (hotmai l.com).NET. Essa . "Criando Serviços Web com o Visual Basic . corno part icipante da iniciativa. com) e outros. Se esses tipos de recursos forem serviços da Web. www. env io de mensagens (correio eletrônico) e outros. Grande QUlntidade de Serviços Dispon(Yeis Servidores Web = O. ' _ Serviços di Web Aplicativo. simples cl ientes ou Personal Digital Assistants (PDAs). A Microsoft. forneceremos urna introdução apropriada aos serviços da Web e nos aprofundaremos em corno você pode usá-los em seus aplicativos. NET. Essa tecnologia pode ser usada de varias maneiras.passport. qualquer pessoa no mundo poderá se benel1ciar deles para reduzir o tempo de desenvolv imento de seu próprio sistema. como autenticação.los Remoto. organização de calendário. todos são possíveis dispositivos utilizados pelo usuário para acessar um aplicativo . Servidores do Windows 2000 '"'"''''''' . mas o conceito de serviços da Web consiste em que há certos serv iços básicos ou fundamentais de que muitos ap licativos precisam. a partir de qualquer sislema operacional" criados com qualquer ferrsment. Dispositivos . serviços Web podem ser e><l>O$lo. há uma grande vari edade de sistemas que podem ser usados para se conseguir acesso à Internet. no Dia 21. www. Sendo eles PCs completos. à rede de sua empresa ou a suas informações pessoais. Posteriormente. está fornecendo alguns desses serviços para autenticação (conhecido corno Microsoft Passport.NET".16 Dia 1 FIGURA 1. Usu6.e de deseovolvimenlO que dê suporte" HTTP.10 Um serviço da lVeb permite que (IS empresas forneçam serviços com base em software pela IlIIemel e que O/III"OS aplica/ivos el oll siles da Web os IIlili:em.NET Atualmente. Cliente.hotmail . terminais da Internet com base em TVs.

Se já o tiver instalado.11). Com esse conceito em mente e sabendo que o resultado fina l é um desenvolvimento mais rápido na passagem da idéia para o programa conc luído.uma camada de funcionalidade que já é fornecida e fáci l de acessar pelo seu código. você deve ter o Visual Basic .NET que parecem confusas: elas precisam ser! Durante os dias restantes. Também é possível instalar de um local da rede.NET.NET E hora de escrever seu primeiro trecho de cód igo do Visua l Basic .N ET. A primeira tela que você verá quando inserir o disco I ou executar a instalação pelo CD ou pela rede. e a instalação começará. Você deve ter vários CDs ou um OVO (dependendo de onde conseguiu o produto) pelos quais possa fazer a instalação.Bem-Vindo ao Visua l Basic . Antes de continuar com este exemp lo.NET exige. Desenvolvendo seu Primeiro Aplicativo no Visual Basic . será solicitado a fornecer o disco de WCU.NET. lem bre-se do relacionamento entre a plataforma . que um cliente poderia estar se conectando por meio de um entre muitos dispositivos possíveis. Millennium Edition e Windows 2000 com o .) Haverá um crescimento contínuo nessa área.NET tendência direcionada a vários disposit ivos forçará você. permitindo o suporte aos recursos .NET .NET e seus programas .11 ). A primeira etapa é elevar os componentes do sistema operacional de sua máquina até o nível que a plataforma . Esses podem ser classi ficados como dispositivos . mas o processo é basicamente o mesmo nos três casos. você terá aprend ido bastante sobre a pl ataforma . será um a caixa de diálogo que apresentará três etapas distintas (veja a Figura 1. e os do resto do li vro.NET Framework instalado) e dispositivos que executam o Windows CE. Isso é chamado de Windows Component Update (WCU).NET disponíveis inclui computadores que executam o Windows (Windows 9x. vá para a seção "Onde Está meu IDE?". Hoje. e se você der um clique na primeira opção da caixa de diál ogo da instalação (veja a Figura 1. a variedade de dispositivos .NET nesta lição. sendo a principal diferença a alternância de CDs se você tiver a versão que vem em vários deles. exp lorarei o processo de instalação do Visual Basic ou do Visual Studio (incluindo o Visual Basic) em seu computador. Nesta seção. como programador.NET instalado. O que é visto durante a .uma combinação de recursos de hardware e software projetados para funcionar com os serviços e aplicativos com base na platafonna . as lições deste livro explicarão mais detalhes que ajudarão a esclarecer tudo. (O . se necessário. em vez disso.NET.NET Framework compacto está disponível para essa plataforma. e a considerar. Por enquanto. Não se preocupe se ainda houver partes da plataforma . em geral um PC. • Preparando-se para Codificar Antes de realizar qualquer trabalho com o Visual Basic . a esquecer o padrão geral de um único tipo de cliente. será preciso instalá-lo.

. O Visual C# não é necessário... Se est iver planejando programar grande parte no Visual Basic . FIGURA 1. 00"""" "'''"'. porque apenas os itens que ainda não foram atualizados o serão. mas veremos que mu itos exemplos de código estarão disponíveis nessa linguagem. Também é possível selecionar o Visual C++.7 (componentes atualizados de acesso a dados) e do Internet Explorer 6.NET Beta 2 e algumas das opções podem se alterar. você retornará à primeira caixa de diálogo de instalação. mas só é aconse lhável fazê-lo se ho uver realmente a pretensão de usá-l o já que e le ocupa mais espaço em disco do q ue qualquer das outras Ii11guagens.NET é dividido em Irês ela{Jas.11 O processo de ills/(llaç(io do Visual SllIdio . sugiro a seleção das mesmas opções que podemos ver na Figura 1..11.N ET.. Depois que as informações so licitadas forem fornecidas e o EU LA aceito. A primeira escolha digna de nota foi a seleção do Visual Basic e do Visual C# na opção das linguagens. mas fornece todas as classes e arquivos de suporte do Framework necessários à execução dos aplicativos . A Figura 1.NET. Quando essa instalação estiver concluída.NET que você deseja insta lar (veja a Figura 1.Dia 1 instalação do WCU depende do sistema. e é mais provável que façamos testes com a C# do que com a C++. que não inclui o IDE do Visua l Sludio .NET Framework. o programa de instalação pode ter de rein icia lizar seu computador uma ou mais vezes. 12 foi baseada no Visual Studio . mas no geral você deve ver a mesma lista. "" . ..NET..12.NET. • Dê um c lique na etapa 2 para iniciar a próxima parte da instalação do Visual Studio . Algumas das instalações possíveis são a do Windows 2000 Service Pack 2. do MOAC 2. Um item que será instalado na maioria dos sistemas é o próprio .. _. End User License Agreement) antes que a instalação principal possa ser iniciada. 12). Você será solicitado a inserir a chave do produto e ace itar ou não o Contrato de Licença de Usuário Final (EU LA . como mostra a Figura 1.0. Dependendo de que componentes forem precisos. surgirá uma tela com várias opções em que podcrão ser selec ionados os elementos do Visual Studio .

....13).... . .. . cert ifiq ue-se de que marcou todas as opções disponíveis em Enterprise Tools.._.. .•• .. Para conc luir.....N ET deseja il/slGlar.. ........ .13 As bibliotecas MSDN. ....''''.. ou se tiver bastante espaço em disco..... ' ""' . . _ ._ Iil~"""'" Iil.w..... . ... .... . ... . .."'" .. . R. Iil ~ .. Cj . ... . _ _ .._......... selecione MSON e mantenha a configuração-padrão Run from source... ._ ... ..... _ "' LI________________-'!~ •... mas marcá. que solic ita acesso a seu CD.. _ .. (.-_·~ I ." •• _ . .. .... .. I'u. .."" . ...:.... .. ---_ _. podendo os exemplos ser inslO!ados localmetl/e para que se oblenl1ll mais velocidade.._o L • • . "") ""'..o .. .) -. -"........ _ . _ Iil:'_ ' •• _ .... OVO ou local de instalação na rede..... .. ". ..... H " . .... . h ._(1 .. altere para a instalação em um cam inho espec ífico (vej a a Figura 1..v _ _ _ """""..... til i/l~ _""'sro 1II 1il ~ "' ._ . . i/l. .... - II 111 0 >< _ ' " O lil~ ' ''_... A seguir.. Iil~ ___ _o....""'" __.. @ . .... _ _ ....~ _""'_'_" _ . _ . 'w"' .. "" I •• . _.Ias assegurará que você tenha todos os recursos disponíveis em sua versão do Visual Studia (versões d istintas do Visual Studio possuem conjuntos diferen tes de opções de recursos)...... '"""" Nr . ...Iil..... FIGURA 1.__ . • _ _ 1'.... _' a1 •. Server Components e Toais for Redistributi ng Apps.... Não explicarei o que essas opções contêm..Iil:.... ._ ..~_ . que cOI//êm mui/os dOCl/mall/os a anigos úteis.... _ ___ ill~' ... mas a decisão cm geral é baseada no espaço d isponíve l em disco em vez de na velocidade. .--....• "•...Be m-Vi ndo ao Visual Basic ...NET 19 FIGURA 1.... . . ..w.--". .. . Iil~ ... Io..""""'"'"' ... TI>O _ .. Executara MSON do loca l de instalação é mais lento do que tê-lo em sua máqu ina local..12 Você pode examinar e selaciollar quais compol/emes do Visual SlIIdio ......" .

~ .s-c... ...... " 01 " ... s ..... .. ••... _ _"'_'... ..... _ '.. s..... ....... ':::~ ::... _ l_ o . . """" . FIGURA 1.. ..... Dar um clique nessa opção. dê um clique no link Instai! Nowl na parte inferior da caixa de d iálogo para iniciar a instalação ... Service Releases. . FIGURA 1. 14). lO<T.. ....... a terceira opção estará disponível...... .."•• [a". - Por fim. . encerrando por fim com uma tela de término (veja a Figura 1.. "".••••• "'.... será ex ibido nessa tela.::.. s...... ""_ .20 Dia 1 Depois que você fi zer Iodas as suas escol has.. "... _..::':::~ ......".." _ .... o conduzirá à outra caixa de diálogo (veja a Figura 1. Se algo der errado durante a instalação.. .. _~ "0...H.....Pod.. ........ Vários trechos de texto que descrevem os recursos da plataforma . .... . ..".... .. Setup is complete.. Se houver conectividade com a Internet."'" ."o! _... quando você ti ver retornado à tela inicial da instalação...~" .. "'0 OIOOM .14 Se algo der errado duranle a il/oSla/arao. ....15 O programa de ills/{{Iaçtio do Visual 8tudl0 .. _~_HE'f~_~ ... recomendo escolher a primei ra opção para assegurar a obtenção da lista mais recente de at uali zações. você seró iIIfo rmado do pr oblema neSla feIa. s..... .. em que poderão ser selecionadas as atualizações da instalação pela Web ou pelo di sco..15).....NET pode fazer o dOlvl/load e instalar atuali:ações pela Internet... ' ' ' ' ' _ ' ' .... _ . P". 1 _ ... ....... ...mo...NET serão exibidos enquanto a instalação progride. s _ _ •••" to .. ".oo.. .. ....... uo'....

será mais simples se concentrar na linguagem e trabalhar no nível da linha de comando de tempos em tempos. portanto. TERMO A expressão programa "Helio lVorld! " ou "Olá Mundo! " descreve o exemplo de Você vai começar com um programa que poderá executar da linha de comando e que retornará um texto peq ueno.NET separa as duas funções .NET. Novo um programa que não faz nada de útil. Não é minha intenção produzir programas "HelIo World!" neste livro. o compilador é chamado para converter esse código (pressupondo-se que não tenham sido comet idos en-os) em um programa executável. Onde Está meu IDE? Agora estudaremos o Visual Studio . você nunca precisará examinar a compi lação. .NET e o de versões anteriores é que aquele é totalmente independente do IDE. isso nunca foi alterado. A finalidade de um IDE é fornecer um ambiente único de trabalho. Uma Tarefa Simples Para criar seu primeiro programa. Já que o IDE é um programa grande e complicado. Isso é particularmente difici I quando se tenta escrever o primeiro pequeno trecho de código.Dia 2. algo para ele executar.00. é exalamente o que leu.Bem-Vindo ao Visua l Basic . Na maioria das linguagens. mas isso era o mesmo que executar o IDE de modo não visível. em segu ida. nada mais útil do que apenas exibir a mensagem solicitada. não há nada que você possa fazer no IDE que não possa ser feito com o uso apenas do compilador da linha de comando e o Bloco de notas.NET está instalado e deve estar pronto para ser executado. aqueles que não possuem uma finalidade. A lição de amanhã . expliquei que muitas linguagens de program ação eram compostas apenas de um compi lador. você precisará de um objetivo. Em urna Iinguagem desse tipo. você pode passar para a próxima seção em que começará a escrever alguns códigos. Antes do Visual Basic . Sim . no lançamento do Windows 2000 houve uma versão n° 5. O Visual Basic . os programas são escritos como arquivos de texto e. compilação e edição. Com O IDE. um dos mais avançados pacotes de desenvolvimento di sponível . e seu primeiro programa vai ser elaborado com o uso do Bloco de notas e do prompt de comando.NET. Em seguida. ou mais espec ificamente. No início desta lição. urna linha de comando podia ser usada para compilaras programas. mas demonstra o conceito básico de sua criação. "Trabalhando com o Visual Basic . mostrarei como esse programa ilustra quase tudo que é prec iso saber para desenvolver um utilitário proveitoso que exiba informações sobre a versão de seu sistema operacional (por exemplo. execução e compi lação de seus programas.introduzirá o IDE e percorrerá os fundamentos de seu uso para edição. mas ainda assim será executada.2195). o prompt de comando. Ela será manipulada de modo automático. A principal diferença entre o compi lador do Visual Basic . Isso pode ou não ser útil como um utilitário de linha de comando.NET" . mas ele ainda estará usando a mesma seqUência de edição/comp ilação/execução do processo manual. pelo fornecimento do compilador como um programa completamente distinto.NET 21 [ Agora o Visual Studio .

precisará de um código.. Isso abrirá uma caixa de diálogo por meio da qual será poss ível selecionar o Bloco de notas ou outro editor de texto (o Word Pad . tente resolver o caso em várias etapas. ~ . por exemplo). 0 ..~ . O código a segu ir representa a estrutu- ... Isso significa que será preciso configurar a estrutura básica de seu programa antes de começar a escrever um código que seja compilado corretamente.:1 <1_~ Com o arquivo renomeado e no diretório correto. Execução Passo a Passo Sempre que você escrever um código. vb . dê um clique com o botão direito do mouse na pasta apropriada e selecione New (Novo) e Text Document (Documento de texto) (veja a Figura 1. Dessa maneira. você se certificará de que pode criar um aplicativo por meio do compilador de linha de comando. crie um diretório em seu computador chamado C: \ TYVB\Cl \ . para os exemplos deste livro. I!il -.n _ _ lfI __ f'«I ... Abra o arquivo no Bloco de notas dando um clique nele com o botão direito do mouse e selecionando Abrir com. Para tanto. você terá de adicionar tudo que o fará func ionar.. Apenas terá de apresentar o formato correiO. _. ~ . você poderá dar prosseguimento e começar a configurar seu cód igo efetivo... e o arqu ivo a princípio estará vazio. 'sso criará um arquivo de texto com extensão txt._"''''''''l ~w ':!l __ '" .~ . nada será feito de modo automático... Depois de ter selecionado um programa..16). . Renomeie esse arquivo para que indique seu conteúdo final alterando para Stepl. e o arquivo será aberto.. porém ele não precisará executar realmente nada.. e principalmente quando fi zer algo novo. ao se deparar com um problema. saberá que partes do programa fun cionaram e quais não tiveram êxito. O menu de ala/IIo do Explorer fomecerá (l l'ocê lima maneira direla de criar muilOS Olllros III/I ~"' _. crie um arquivo novo de texto em algum local de seu computador. Na primeira elapa...toO.-. dê um clique em OK. .. Não deve haver nada nele neste momento.22 Dia 1 Escrevendo o Código Já que você começará em um editor de texto (corno o Bloco de notas) em vez de no IDE..... Para gerar o novo arquivo de texto... (1l"(llIil'O de lexlo e documelllos.. Para iniciar..~ 9><>"'" fl _ ~_<MO _ ~---_ @ ..16 . FIGURA 1 .

. Por causa da tendência do Bloco de notas de criar arquivos de text o e dependendo das con figurações de seu sistema com relação às extensões. \ .NET é a melhor mal/eira de (rabalhal' COIII *:*_0 .. vb..vb... navegue para o diretório que contém seu arquivo Step I..Bem-Vindo ao Visua l Basic . . pode terminar com um arquivo chamado stepl... _ ...NET.17 Seleciollor o prolllpl de comal/do do Visual SllIdio .. vb. Se quiser empregar uma linha de comando habitual . . Isso apresentará um console de comando (como mostra a Figura 1. salve-o como Step1. Agora você pode compilar seu programa.NET como o compilador do Visual Basi c (vbc. • ...NETTools.. digite-o na janela de seu Bloco de notas e...vb. '".exe). Public Class Stepl Shared Sub Main() End Sub End C1 ass Ao tentar salvar seu cód igo como Stepl. como na Figura 1. J C l c ."""'o. Desse local."'-'. porque só através dela será possível conseguir que o(s) caminho(s) correto(s) seja(m) configurado(s) para executar ferramentas . -..(8)..NET '"'=\""'" . J _ -* E essencial que você use essa opção para acessar a linha de comando. você pode acabar com alguns resultados estranhos. 0ffI>0 " "" a plataforma .. certifique-se de ter desmarcado a opção Ocultar extensões de tipos de arquivo conhecidos (guia Modo de exibição em Opções de pasta no menu Ferramentas do Windows Explorer) ... Para evitar isso... em seguida. txt em seu disco rígido . A seguir...17.exe para encontrar o diretório que precisa estar em se u caminho) à sua máquina... ... . terá de adicionar a configuração do caminho apropriado (execute uma pesquisa em vbc... inicie um promptdecomandodo programa Visual Studio .NET 23 ra básica de um programa do Visual Basic . FIGURA 1. ='..."" '''' a IJarlil' de lili/O finha de cOlI/ando.

exe. veria que já há um novo arquivo Stepl. você poderá eliminá·lo corno fonte de qualquer pro· blema que encontrar ao tentar compi lar um programa efetivo. na verdade. e se você estivesse examinando essa pasta agora. por meio do Windows ou emitindo um comando OIR.00.9254 for Microsoft (R) .9254 for Microsoft (R). deve aparecer este resultado: Microsoft (R)Visual Basic. Isso significa que a comp ilação foi bem-sucedida. Processar esse executável (dig itando Step I no prompt de comando e pressionando Enter) não produzirá nenhum resu ltado visível. Step1. • O sistema pôde encontrar o arquivo vbc. Continuando esse raciocínio. mas adie um pouco mais adicionando uma etapa complementar antes da compilação. Você possui as permi ssões apropriadas para executar o comp ilador.NET CLR version 1.NET instalado.vb. Se tudo der certo. digite vbc e pressione Enter.00. Se isso func ionar.00. No prompt de comando. não tem uma fina lidade.24 Dia 1 criando um executável. FIGURA 1. Step1.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).NET Compiler version 7. Al1 rights reserved. O fato de que foi compilado e executado demonstra que ele até aqui está correto. . ago· ra podemos compilar seu programa salvo. em seguida. vb. Ao testar primeiro o vbc automat icamente.2914.00.NET Comp iler version 7. o que é de esperar porque o cód igo de Stepl. All rights reserved. você terá confirmado vários itens: • • Você rea lmente tem o Visual Basic . Visual Basic Compiler Options seguido por uma grande quantidade de in formações de ajuda sobre o liSO do compilador do Visual Basic. pressionando Enter.NET CLR version 1.16 Copyright Microsoft Corp 2001.vb jt:exe e. inserindo um comando do vbc. exe.2914. Você deve ver este resultado RESULTADO Microsoft (R)Visual Basic.16 Copyright Microsoft Corp 2001.

só foram usados dois. Nesse exemplo. por enquanto. Por padrão. Salve esse novo arquivo de código alterado (que deve se parecer com o código a seguir) como Step2. Esse objeto permite que os usuários leiam e gravem através da interface de linha de comando. No entanto.Be m-Vi ndo ao Visua l Basic . foi uti lizado o texto É aqui que entrarão as informações sobre a versão do sistema operacional! para deixar claro que esse é só um espaço reservado. do . exe. Todas essas opções serão abordadas depois. tente exibir algum texto. foi informado ao vbe que arqu ivo compi lar. System. o resultado a seguir deve aparecer em resposta a seus comandos: . Nesse caso. empregue a instrução Console. Antes de conseguir um resultado efetivo em um programa do Visual Basic . Um dos membros ou partes da classe System do Framework é o objeto Conso I e. é preciso informar ao compilador que partes. como você pode ver na execução automática do vbe. Vejamos a Exibição do Resultado Agora. e usar seus recursos em seu código. exe. A execução dessa instrução de compilação produzirá um arquivo chamado Step2. portanto.NET Framework serão usadas. em seguida. ele usará It :exe. lembrando-se de seu objetivo fina l de retornar a versão do sistema operacional. mework. nesse caso. exceto por você especificar o nome do novo arquivo-fonte. é apenas um teste de exibição de informações. volte para ajanela do comando a fim de compilá-lo: Imports System Public Class Step2 Shared Sub Main() System. adicione a linha Im Agora você pode se referir a esse objeto. mas. Com o fornecimento do nome do arquivo-fonte . em seguida.WriteLine("É aqui que entrarão as infonnações sobre a versão do sistema operacional !") End Sub End Class A instrução de compilação será quase a mesma da etapa anterior. quando vbe fo r executado. será empregado ape nas o root (raiz) ou o objeto do níve l superior do Fraports System ao início do arquivo de código. uma biblioteca ou um módulo. System. Em seu código. Não importa que texto será retornado.NET. uma linha de comando ou apl icativo do console (que é nosso objetivo). vb e. winexe cria um ap licativo do Windows e exe. Se sua compi lação funcionou e não houve problemas no código. s tepl. A segunda opção para I t (que significa ' destino' e também pode ser digitado como Itarget) pode ser um programa winexe. se houver alguma. ser executado do prompt de comando digitando-se Step2 e pressionando-se a tecla Enter. vb. vbc Step2.Wri teU ne para retornar algum texto àjane la do comando. só as duas primeiras são particularmente relevantes. que poderá. vb I t: exe. em geral separados por barras [IJ).Console .NET A chamada ao vbe pode aceitar lima grande variedade de parâmetros opcionais (comandos complementares adicionados à linha de comando.

vb jt:exe Microsoft {R)Visual 8asic. mas seu nome pode ser fac il mente alterado para algo mais próximo de sua final idade real.exe.Console. O aplicativo é cham ado de s tep3 . Altere o código de Slep2. o acesso aos dados sobre o sistema operac ional at ual. como o Windows 2000. 0 Observe que o resultado indica um computador Windows 2000 (NT 5. empregaremos Syslem. ex ibi ~las no lugar do trecho genérico de texto. Imports Sys tem Public C lass Step3 Shared Sub Main{) System.00.NET CLR version 1. por exemplo). ele fornece um bom ponto de partida para a próxima etapa. decerto ele será útil pe lo menos para admini stradores de rede. você usou um compilador de linha de comando para especificar dois itens. Teremos de usar o .WriteLi ne{ System.ToString{)) nd E Sub End Cl ass A compi lação do código vbc step3.Console.vb para que tenha a aparência do descrito abaixo e. por meio de outro rec urso que ele fornece.16 Copyright Microsoft Corp 2001. C: \TYVB \Cl>step2 Eaqui que entrarão as informações sobre a versão do sistema operacional! Adicionando a Funcionalidade das Informações sobre a Versão Você sabe que o cód igo está correto até este ponto (porque funcionou). O que precisamos fazer agora é obter as informações reais sobre o sistema operacional e.2914.OSVersion. Executar esse programa exe. vb. 0.NET Framework novamente para conseguir essas informações. Essa compilação produzi rá um programa executável com o nome step3 .0). salve o arquivo como Step3 . 9254 for Microsoft (R) . em seguida. O compilador fu ncionou muito bem com essas duas opções. vb.26 Dia 1 COOIGol RESULTADO C: \TYVB \C1>vbc step2. o desti no dele (ft: exe) e o arquivo-fonte a ser compilado (step I . produzindo automaticamente programas . Essas informações são disponibi lizadas pelo mesmo objeto Syslem . mas em vez de usar Syslem.NET Compiler version 7 . então.exe. outros resultados serão gerados para com putadores diferentes. 00 . digitando Step3 En t er na janela aberta da linha de comando. vb It :exe não será diferente do que foi fei to nos dois exemplos anteriores.EI/\Jironmenl. All rights reserved.Environment.2195 . gerará o resultado a seguir: C: \ T V \ C1 step3 Microsoft Windows NT 5. Agora você tem um pequeno programa exe que retornará a versão do sistema operacional . Usando o Compilador de Linha de Comando Nos exemplos anteriores. portanto.OSVersioll.

Devo aprendê-Ia em vez do Visual Basic .Web do . em certos pontos. a C#. precisaria adicionar uma linha Imports System . o Visual Basic e a plataforma . e já cobrimos um d ia na direção que conduz ao seu domínio. vb) para gerar o arqu ivo de saída (Stepl. 1i brary. usada em nossos exemplos. web . O Visual Bas ic é uma das linguagens de programação mais popu lares do mundo. especi ficar Ir: sys tem. Em seus exemplos. Web no início de seu código e.NET Framework.Net ou estudar as duas? . Aq ui estão alguns parâmetros de linha de comando que podem ser mais úteis quando começarmos a fazer testes com o Visual Basic . você está pronto para passar ao aprendizado da linguagem propriamente dita e escrever programas mais complexos. mas que estejam destinadas a fazer parte de outro aplicativo. são util izadas na criação de resultados que não possam ser usadas di retamente. uma revisão maior como a da plataforma . ou modul e> (pode ser chamado como It) especifica que tipo de resu ltado deve ser criado pelo compilador. Resumo Nesta lição abordamos um pouco do histórico da programação.exe. P Ouvi falar sobre outra lin guagem . o resultado será uma listagem deta lhada de lodos os parâmetros disponíveis. você o omitiu. exe.NET.NET antes de cri ar um programa pequeno. A opção wi nexe cria um apl icat ivo do Windows. por exemplo). As duas outras opções. lout:<nomedoarquivo> é usado para especificar o nome do arquivo criado. em seguida. fazendo com que vbc empregasse o nome de seu arquivo-fonte (Stepl. • • • • Ihel p (ou I?) é eq uivalente a executar o vbc sem opções : em q ualquer das duas fo rmas. mas. Por exemplo. Agora. P&R P Por que o Visual Basic . se você quisesse trabalhar com as partes de System. 1 i brary e modul e.NET era necessária para assegurar que a li nguagem acompanhasse o utras alterações da indústria.NET é tão diferente das versões unteriores do Visu. Cada versão tem sido muito semelhante à anterior.NET: • Itarget :<wi nexe. A opção exe.Be m -Vi n do ao Vis u a l Basic . Ireference:<nomedoorquivo> (abreviando-se temos Ir :<nomedoarquivo» é L1sado para informar ao com pilador que seu código requer alguns arquivos complementares além do que está incluído como padrão. como a Internet e a computação distribuída.NET executáveis com o mesmo nome do arquivo-fonte . mas há muitas opções complementares disponíveis como parte desse comando. dI 1 quando o compi lasse. Iverbose faz o compilador produzir resultados mais detalhados durante a compilação e pode aj udar a solucionar problemas. gera um aplicativo do console ou de linha de comando e é o padrão se nenhum parâmetro It for empregado . Você aprenderá mais sobre todos esses tipos de saída nos dias posteriores..1 Ba sic? R O Visual Basic tem evoluído com o tempo.

Nos exemplos desta lição. o que fez com que o compilador usasse o nome do arquivo-fonte como padrão. que possui várias outras propriedades úteis. Considere o código a seguir: Public Class MyClass Shared Sub Main{) End Sub End C1 ass Se esse código fosse sal vo em um arquivo chamado MySourceCode .llb. Por que todas as linguagens . definindo um nome para o arquivo de resultado igual a WhatOS. apenas porque é uma linguagem que tanto os programadores do Visual Basic quanto da C++ acham relativamente fácil de ler. crie outro programa para ex ibir uma ou mais dessas propriedades complementares. Teste I. se você puder criar um certo tipo de apl icativo em C#. que arquivo seria criado? Exercícios I. Como se denomina o processo de converter o cód igo-fonte (seus programas) em código nati vo de máquina (como um arquivo exe)? 4. métodos de criação e uso de objetos e mais)? 3. Para obter informações sobre a versão. Todas as linguagens . em seguida. Use a documentação de ajuda que está instalada no Visual Basic (veja a seção "Preparando-se para Codificar" ) para saber o que mais está dispon íve l e. E possivel que as pessoas achem que muitos exemplos da Microsoft aparecerão em C#. As respostas do teste eslão no Apêndice A. Envi ronment. uma maneira mais simples e fáci l de usar aC++. Recompile s tep3.NET.lo no Vi. suai Basic .NET (Visual Basic.exe. fosse executado o comando vbc jt:exe MySourceCode. C# e outras) compart il ham certos recursos com uns (o . " Respostas dos Testes/Exercíc ios" . Workshop o Workshop foi planejado para ajudá-lo a antecipar possíveis dúvidas. poderá fazê. você não tem de aprendê-la. mas não. 2. você não especificou um nome para o arquivo de resultado quando compilou. em seguida. Qual produto da Microsoft foi o predecessor do Visual Basic? 2. você empregou o objeto System. lIb e.28 Dia 1 R A C# é umaótima linguagem nova.NET são ig uais em termos de suas capacidades. revisara quejá aprendeu e começar a pensar em como colocar seu conheci mento em prática. .NET Framework. vb.

mas incluirei urna revisão rápida sobre seu sign ificado e finalidade.SEMANA 1 DIA Trabalhando com o Visual Basic . o IDE do Visual Studio A finalidade do IDE (Integrated Development Environment. há poucos programadores que concordariam em trabalhar com uma linguagem que não possuísse algum tipo de . abordaremos os tópicos a seguir: • • • O IDE do Visual Studio Soluções. você aprendeu algumas informações gerai s sobre programação. projetas e arquivos Criação e execução de um exemplo de projeto no Windows Começarei com uma visão geral do IDE do Visual Studio (VS). Os IDEs foram abordados na lição anterior (Dia I).NET. por exemplo). Nesta lição criaremos um aplicativo Windows real por meio do Visual Basic e. Apesar disso. e compiladores podem ser usados na linha de comando sem muito problema.NET" . no processo. " Bem. portamo. que lhe forneceram o conheci mento necessário para começar a desenvolver aplicativos. Visual Basic e plataforma . Em geral.Vindo ao Visual Basic . tecnicamente o IDE é desnecessário. o cód igo-fonte é composto apenas de texto e poderia ser inserido e ed itado em qualquer ed itor de texto (o Bloco de notas. ou Ambiente Integrado de Desenvolvimento) é ser um ambiente (mico de trabalho para os desenvolvedores.NET No Dia I.

Essa d isponib il idade de padrões me levou a escolher rapidamente as configurações mostradas na Figura 2.NET será uma interface parec ida com uma página da Web (que foi chamada de Visual Studio Home Page) so li citando a confirmação das configurações de seu perfil. Dê um clique em Get Started para sai r da página de configurações de perfil. Ela também inc lui um navegador da Web interno. depois de algumas horas de LISO. As opções bás icas fornec idas foram projetadas para fac ilitar sua transição para este ambiente dependendo de sua experiênc ia part icu lar. No entanto. como o código ed itado ou as páginas da Web projetadas. A primeira. essa página fornece tanto uma lista dos projetos recentemente abertos quanto um link para a criação de um novo. Iniciando Antes que você possa usar o IDE do Visual Studio. selecione o perfi I Visual Basic Developer. você encontrará várias opções úteis. Por enquanto. Por hora. ele deve ser instalado em sua máquina.2). permiti ndo que sedê prosseguimento com um s imples clique cm algum local dela. Projetada como uma preparação in icial para seu trabal ho. Get Started. ele é usado para mostrar uma interface para o Visual Studio com jeito de Web.Dia 2 IDE. Na Home Page (veja a Figura 2. Configurações do Perfil O prime iro item que você verá quando iniciar o Visual Studio . . Mesmo as tarefas simples de edição e compilação de seu código serão muito simplificadas pelo IDE do Visual Studio que fornece muitas possibilidades complementares que apenas não existi riam sem ele. leia esta seção se precisar conc luir a instalação antes de continuar. É provável que você faça o mesmo. uma variação da idéia de preferências do usuári o que provê a capacidade de configurar muitas opções diferentes em um único perfil. portanto. e depois você poderá voltar á caixa de diálogo para alterar essas configurações se desejar. uma localização geral que contém conteúdo de vários tipos. O que apareceu agora é considerada a área principal de trabalho do IDE do Visual Sludio. que é aberto por padrão.1. O processo usado para faze r isso foi detalhado na lição de ontem. O conceito de perfil é novo nesta versão do Visual Studio. selecionaremos uma das opções de navegação que se encontram no lado esquerdo da página. as alterei para algo um pouco diferente de qualquer dos perfis-padrão. é a página q ue será mostrada sempre que o Visual Studio for aberto.

s-.. ... FIGURA .....2 A págilla il/iciol jomecida pelo Visual Sludio disponibiliza 1IfI/O visualização fUllciol/al dos projetos que você abriu recentemente.. .... "....vd<f...... • .....•. H....... ••......j CJ CJ CJ . além do acesso a I'árias fontes de informação. .... veja a Figura 23) Um link direto para pesquisas na Web (Search On line) ... J. .... __ _ • ~ .. t.. ...._.. 1.. .' 2. a' .._ • .._..... .' ....... ~-------- I"'.ou<........NET.o.. As opções laterais restantes apresentam : • • • Detalhes dos novos recursos do Visual Stud io .... ..' ••. ....... '_.. ... I ~. _ o.N ET 31 "QEI 2. j(.""... ..•_ ~ . ."'... ( ... . til""'" ~. "'''' t . FIGURA ~t.... ' " l .. What' s New (O Que Há de Novo) está vinculada a vários recursos on-li ne como newsgroups (Online Communi ty) Uma página de notícias ao vivo sobre o Visual Studio e outros tópicos relacionados a desenvolvedores (Head lines. inc/uindo a l'ersão al/ferior do Visual 8asic..... . _ .... ..... .... ..Trabal hando co m o Vis ual Bas ic ... ~ " " e...."' . '_1 "".... -.. ..... _... ... ..' .1 O IDE do Visual Sludio · NET pode ser personali::ado para lornar mais fácil a Iransiçr/o por meio de oulras jerramelllas de dese IIvolvimelllo.

você já terá diversas janelas visíveis : o navegador da Web interno discutido anterionnente. " A Janela Principal do IDE do Visual Studio Mesmo sendo tão liti l. ...fo tdI. o que torna essa página in icial um bom ponto de partida para muitas pessoas. _ . 0 ...~ ....... "0' Toom T...."c_.. No entanto.. essa página in icial é apenas uma das várias janelas disponíveis como parte do Visual Studio..... 01 SQL .as páginas-padrão não são simples. que abordaremos nesta lição.."... " _"'IT ""cWTd ". Properties e Toolbox no lado esquerdo. NET\HTML." ...to.. ' • .. _ _ .... As outras janelas. _r. _ >001 .. Faça uma cópia do d irelório como backup antes de começar a personali zar ! FIGURA 2.. e seria Fácil danificá-Ias sem que possam ser reparadas.>IfT...• .. o'" A<H'" 0 . -0 <>tU CoM_' . o Solut ion Explorer... se você quiser adicionar algo a essas opções ou substit uir por completo o conjunto de páginas. ..3 !......... .. ~ " " . Porém...."" ... aí vai um aviso .... "'" C' .....' _ ..."" 'H"'_~'"h". mais adiante no livro.. _ ~....... wo"'o_o... são: • • • • • Objecl Browser Cornrnand/Immediate Task List Class View Server Explorer Há oulras janelas que abordarei q uando se tornarem irnp0l1anles. c_ .. a fonte integral da página padrão está dispon ível em \Program Fi 1es\Mi crosoft Vi sual Studio ... _ • ~ 1'1.... _ _ o . 1.ww ..32 Dia 2 • Um lin k de retomo à página de seleção de perfis que é apresentada por padrão na primeira execução do IDE (My Profile) Todos esses recursos estão disponíveis para o desenvolvedor do Visual Studio...."_"'. ' ... com....... _ ' 'M_n ..... c""" ... PKtK"""" . _ IIIformações relel'OlIles ._~ ~ seções da página inicial do Visual Sllfdio.""" .. qlle é realçado alllomalicamenle em 0 ."'11_ 1 _... Com o perfil Visual Basic Developer selecionado..Microsoft.....NET podem com freqiiéncia ser e nconlradas 110 sile da lVeb msdn.... _.. " ". para programadores do Visual 8asic . mas que não se tornam visíveis no perfi l atual por padrão...... o.. e iremos percorrer a maioria delas nesta lição..~ r.. "'..

J1:! ~ __ Quando o Visual Sflldio ."" " . N.. O .'(1 · .."'. .. e principalmente no Vi sual St udio . . I _ .. .. . .4). O '.. """' ... ao ....Trabalhando com o Vis ual Basic . . ..N ET 33 Recursos Comuns das Janelas Todos os recursos destas jane las.. Agora...o<ud " " O u_'''' _. d . Elas são chamadas indiv idualmente dejanelas defe/"/"amel7las. . deve-se dar um clique e manter pressionado o botão do mouse na barra de título da janela de ferramentas e.. se estiver encai xada em um canto).._ ~ too _ ...' ••••• o. outros métodos foram desenvolv idos. ""'.'" • ... e Toolbox fi ca no lado esquerdo (veja a Fig ura 2.. incluindo o conceito de mú lti plas janelas.. . "0'. Para mover uma jane la encaixada para outra área da tela. . . . Uma sol ução para esse probl ema é uti Iizar um monitor de 2 1 polegadas (ou maior! ).. arrastá-la para a . <o el ... portanto... " . mas a área de seu monitor não é.II u ". ele ol"gani=a suas jallelas de fo rmo aproximada ii do ID E do Visual Basic 6.• . corno a capacidade de estar encaixados/desencai xados.. ·· ... .... ajanela é bloqueada por essa área em um ou dois lados (dois lados. O posicionamento de uma j anela rente à outra área é descrito como encaixar essa j anela... ·'. Um deles é dividir as opções d is poníveis em janelas diferentes. Todos os membros de urna janela de ferramentas comparti lham alguns recursos com uns.. . . FIGURA 2 ..."'""_ "'.<d C!tOvo 10<1> _ • f~'.. a quantidade de opções e ferramentas disponíveis é quase infin ita....o.. fo ram desenvolvidos para proporcionar urna uti Iização mais efi ciente do espaço. . associados em grupos de guias de janelas e assim por diante. "t" . _u .... Quando está encaixada.... . Encaixando/Desencaixando No perfil Visual Basic Developer. I..00<1> ""«".. . .. essa medida ainda não fo i adotada. . u e.. _. '~.. .. Ho<b... Por alguma raz<lo desconhecida. ""'. ...NEr é cOI/figurado com o pelfil de desel/l'olt'edor do Visual Basic.. u · IiÔ' Qc.."".... que é a abordagem usada pelo Visual Stud io . ocultos.. ....NET. oe '14d ~. ·• . . 'D<l " .jJ· ql . Todas as janelas de ferramentas do Visual Stlldio .. Todos eles podem ser redimensionados de várias fo rmas.. . '~I'1:" .. ~.... o objetivo é tornar o posicionamento dessas janelas fácil e fl exível o sufici ente para que os desenvolvedores cri em seu ambiente ideal de trabalho..NET....0. .NET podem ser encaixadas e não há limite para as margens nas quais é possível alinhá-Ias ..4 . em seguida.. ... .. Em qualquer I DE.... ~ I'Ir. "" N. _' _ t. «d b.. . . tanto o Solution Exp lorer quanto Properties fi cam alinhados no lado di reito da tela do Visual Studio. • .

6).... . pos ição na qual ela não estaria mais fixada a nenhuma borda do IDE....6 Se I'Vcê liwr bastante espaço lia leIa. ' . mantendo o botão do rn ause pressionado e soltando-o quando o contorno da jane la mostrar o resultado desejado.... Se você deixasse ajanela de ferramentas nesse ponto.. " " . .. a • • ..5 ...... x . . ... .Nf1 .. ..." . ..." """"t" •.. !!lo _ _ _ _ tJOI> ~ '" ~ ~ . "..." .. • · \lJ · ~ IiI!1' :II ~e.. apenas arraste-a para uma borda dele.. . ..o</oo.. FIGURA 2 ....... . ......... ~.. i· • v.... ..tl!3 O comQmo de lili/a janda q/le e....".''''1<... ~ .".~ VI.' ..... H. _ _ ...".. CIo<> ".slij sendo arrastada se altera para indicar o que ocorreria se você parasse de arrastá-Ia cm 11111 IlIgar espec ffico. ( _ ) ...... pode-se ter a impressão de que o contorno não foi encaixado em nenhuma parte do IDE (veja a Figura 2... .. ela ficar ia ' desencaixada' .._. Enquanto ela estiver sendo arrastada. Para encaixar a janela em outro lado do IDE.....~ .. St. ........34 Dia 2 nova posição. ..... 'h. o que também é conhecido como jane lajlutuallle (vej a a Figura 2... ......... .... " .. " .. FIGURA 2 ........ ... tIO'" ...O. ~..... - .. .. No trajeto.... .. poderá deixaI' sI/as jane/as desencaixadas......5) ....... um contorno aparecerá na tela para mostrar onde a janela seria posicionada se você soltasse o botão do mouse.

dê um cliq ue duplo na barra de títul o.. aí va i uma pequena dica: em vez de arra star a janela para encaixar e desencaixá-Ia... as janelas ainda ocupam espaço em sua tela. Por exemplo. I _ J ~ 2. ' . .N ET 35 Quando as janelas esti verem desencaixadas.... Dar um c li que nesse botão fechará ajanela de ferramentas.. ..... semelhante ao ícone comum de fechamento de outras janelas. _. se der um clique no botão X do Solution Explorer..o rec urso Auto-Hide.... você precisará usar uma opção do menu. esse desaparecerá da tela.. Para trazê. é preciso selecionar Solulion Explorer no menu View (ou pressionar Ctrl +R).. . Todajanela de ferramentas encaixada possui um icone em sua barra de tít ulo que se parece com um pequeno pino (veja a Figura 2. ~ Para trazer ajane lade volta. mas e aquelas que podem não estar sendo usadas agora. tornando-as ainda assim fác il de acessar . .7 As j anelas de FIGURA "r::IEJ ferramentas podem ser fechadas por meio do peq1leno bouio X q1le as ocultará da te/a até • .~. portanto. o são? O Visual Studio ..Trabalhando com o Visual Basic . mas é possível ocu ltar ou fechar jane las específicas que você não queira que permaneçam visíveis. Ocultação Encaixadas ou não. I"lfÕlEJ • que sejam lIecessárias f/OI'Gmente. _ " " I _ J ' .. ~. você poderá reencaixã·las seguindo o mesmo pro· ced imento que acabou de usar.. . removendo-a da te la. ii ' .. 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... Não é tão d ifíc il. NOTA Pode ser complicado levar uma janela encaixada de volta ao local exato do qual a moveu.8). ' .. Toda janela de ferramentas possui um boião X (veja a Figura 2.­ .NET fornece uma maneira de recuperar o espaço da tela ut iIizado por essas janelas.lo de volta..0 - . principalmente para uma jane la que não é util izada com freqUência. porém...... em geral..7).

.~e jalll . onde o có-digo aparecerá quando você tiver aberto um trabalho. • ".. o que s ignifica que só ocupará espaço quando for necessária. . diversas janelas já foram agrupadas (o Solution Explorer compart ilha o espaço com ajanela Class View. é utili zado por mim para configurar o Vi sual Studio com a aparência que desejo (veja a Figura 2. Isso deixa o máximo de espaço para ajane la principal... . '"""" · 'w. Passar o ponteiro do mouse por cima dessa guia fará com q ue o Server Explorer se torne visíve l por comp leto. •! ~ Esse é um botão de doi s estados que controla se ajanela deve ou não ser automaticamente oculta quando não estiver em LISO.~ .36 2.9).8 Di a 2 FIGURA T()(!as as janelas de ferram ellfas possuem 1/11/ pequeno pino que permite que . No perfil Visual Bas ic Developer. junto da opção do menu Window. mas qualquer combinação de janelas de ferramentas é possível....... _.: •• $I. Qualquer janela de ferramentas com a opção Auto-H ide ativada será minimizada automaticamente em uma gu ia na lateral do IDE onde estiver encaixa· da. Auto Hide Ali."' _. 1O) .E! confinadas em 1/1110 posição onde ficam abertas. mas. a acho perfeita. aparece apenas como uma guia ou botão cinza no lado esquerdo do IDE. Por padrão.. Ajanela oculta será trazida á leia sempre que o usuário passar o mouse sobre essa guia. e Pro· perties e Dynamic Help foram configuradas de maneira seme lhante). _ ot<o l"'" _ . ' • o -... Guias Outro recurso para econom izarespaço: as janelas de ferramentas múltiplas podem ser agrupadas em uma única área da tela onde automaticamente se transformarão em guias individuais de uma jane la com várias gu ias (veja a Figura 2.\ ~ II!."'~~~ • f~: í.Q !!O\> .. portanto. deslizando para a te la.. como usuário de laptop. ajanela do Server Exp[orer é configurada para empregar esse recurso e. Esse recurso. Uma interface extrema como essa pode ser desnecessária quando se trabalha em um monitor grande.

. .-.10 .... w ..m''''I_) ~e..' -. FIGURA 2. " .:_ . 0.. " .9 Você pode IIsor AlIIo-l-lide para maximizar sI/a área celllral de trabalho.: .N ET 37 FIGURA 2.0 ...' '. em seguida. " ""'" "... arraste-a para o novo local desejado e solte.. '. qj .. Para adicionar uma janela a um grupo de guias ou criar uma janela com guias. <00 • _ 'lO' ".. exibindo a extensão de uma pequena guia na parte inferior dele.... ._!""'-~ $I._""""' . I ".. • . <J _ -. . '. Consegue-se a remoção de uma janela de manei ra parecida.- -..Trabalhando com o Visua l Basic .. :O:'!'!' ..""' "'r.r:lD • • As gllias permitirâo que você tenha IIIl1ita.. .. m' •" ~ jerramelllas abertas cnqllalllO OCllpam o mesmo espaço precioso da tela. que é onde editará /01110 códigos (fllanto objetos visl/ais.'1_) ' ...JC! . • . soltando o botão do mouse quando o contorno se a lterar para mostrar uma janela com guias. . Apenas arraste uma das guias para fora do grupo até que o contorno perca o formato de guia e.~ janelas diferentes de . . ... arraste uma janela de ferramentas (dando um clique em seu título e arrastando) para Qltlra.. ~~ • '-. • 1'I' . _ " __ .

. A seleção de itens mostrados dependerá do que estiver sendo edi tado no momento najanela principal do IDE.. L> .. _ J... como o cód igo HTML da página inicial do Visual Stud io (dê um clique com o botão direito do mouse no navegador da Web e se lccione Ex ibir código fonte).. só o poderá ser ao longo de suas bordas desencaixadas . então.'-_EJ _.IlI"'~_ <. ... se estiver encaixada....·.-. mova o ponteiro do rnouse sobre a margem dela.JS-_ IZ r.38 Dia 2 Redimensionando Qualquer janela de ferramemas pode ser redimensionada.1 ~t.-.."-" """". IOdos os elementos de Ullipicos da finguagem ficam dúponil'eis 11(1 Toolha. . "_ _ lJO !.. mas.11 Na ediçüo de código HTML.11) contendo vários itens que representam diferentes tags HTML... elementos de interface com o usuário e outros itens que são disponibilizados para serem adicionados aos projetos. Por exemplo.. '" 0 _• D •• 0 .. . Para redimensionar uma janela. '.. "( . 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.. Se você estiver editando algo. Quando o ponteiro indicar que você está com o mousc na posição certa. uma guia HT ML foi adicionada (veja a Figura 2.~- . dê um clique e arraste para estender ou retrair a borda da janela até o tamanho desejado. a Toolbox (caixa de ferramentas) fornece uma listagem de vários trec hos de texto...- ..> . o único item disponível na Toolbox seráo ícone Pointer. FIGURA 2 . Toolbox Uma das janelas mais usadas.. No caso da ed ição do código. se nada ou apenas o navegador da Web for selecionado na janela principal ... .. até que ele se transforme cm um indicador de redimensionamento. guias complementares serão adicionadas àjanela Toolbox. mostrando a direção pennitida para a alteração.. q ue está sempre presente. é fornecido como uma maneira de desmarcar qualquer outro item da janela Too lbox.·_ . Esse ícone..

Esses dois métodos de uso dos itens estão disponíveis para qualquer tipo de documento que estiver sendo editado.12 ""'""" .'I .'_ . ·· &\· r. o novo item em geral é apenas criado no centro do documento. o . mas.... em vez de aparecer um ponto de inserção do cursor. o que fará com que seja adicionado àjanela de ed ição no ponto de inserção selecionado (q ualquer que seja o local onde o cursor estiver posicionado na janela de edição quando houver o clique duplo sobre ele).1 .. será mostrado um contorno real do item quando você mover o mouse sobre o documento. . em seguida.. mas. • Dar um clique duplo também func iona. _ ' . e o novo item será criado de acordo com o definido (veja a Figura 2. e. c " " '" Jl ... as duas opções anteriores se comportarão de maneira um pouco diferente.Trabalhando com o Visual Basic . . Isso esboçará o tamanho e o local no qual você deseja que haja a inserção no documento. • Dê um clique duplo no item.. que não está disponível para edição de texto. é selecionaro item dando um clique nele. Uma terceira opção também está disponível: • Dar um cl ique e arrastar o item para o documento visual funciona da mesma forma que para um texto. como caixas de lexlo. . com exceção do especial ... realç{l-lo na Toolbox e.. •• . . se uma interface gráfica com o usuário (algum documento visual sem texto como um formulário Windows) for o documento atual. FIGURA 2. 12). Pointer. . • Uma terceira opção. pode ser usado de uma das duas maneiras: • Dê um clique e arraste o item para ajanela de edição (soltando quando você tiver movido o mouse para o local desejado). "". então.NET 39 Qualquer item . dar um clique e arrastá-lo para o documento visual. já que um documento visual nem sempre possui um ponto de inserção selecionado naquele momento.. em /1/1/ forll/ulário depois qlle os rireI" selecionado na Too/box. ••• . mas. .. _ l<d> _ ~ Você pode desenhar elemenlos l'is/lais.

Para conseguir esse excelente fe ito de produtividade. "".. seu comportamento exalo (ou de Qualquer parte dele.. Independentemente da guia que você arrastar. ..."'1 •• .' _ • ' ••. Portanto.. mas é possíve l dar um clique nele com o botão d ireito do mouse e selecionar Rename Item para fo rnecer urna descrição apropri ada. ''"' . Bem. ....13 ~'" 'fJ<w _ Códigos...• "t •• <& . desenvolvimento de formu lários e muitos outros tipos de trabal ho.« C... no aspecto geral. . _ _ ._. Voilà! Agora temos um novo item personalizado na Toolbox.p ·ql . nem t odas disponíveis hoje. .. o item apresentará um nome inoportuno e bastante sem sentido. ~ • • •• .' •• .. linguagem HTML ou outros trechos de lexlo podem ser inseridos na Toolbox e. A Toolbox pode conter qualquer trecho arbitrário de texto.. - .. Esse recurso é uma maneira útil de selecionar um fragmento de texto (que pode ser.· .. independentemente da linguagem utilizada. " .. código) que se espera utilizar com freqüência e torná-lo faci Imente disponivel. Apresentarei de modo detal hado um exemplo de uso da Toolbox com um documento visual posteriomlenle nesta lição.. Como podemos ver na Figura 2.T u ' . . ' ...' " .--" • • 7 .. "0 '_ dela.. Ch... .. usados (arrastados para ajal1ela de ediçlio de códigos e NTML) exa/Gmellfe como qualquer Olllro comrole · 1.. 1" . e' .. selecione o texto desejado na janela de ed ição (o que pode incl uir primeiro a d igitação do texto) e arraste essa opção para a j anela da Toolbox. .13."". ele sempre funcionará como o descrito.. a falta declareza é resultado da natureza do IDE do Visual Studio. . . '. _ .. .. que fo i projetado para atender a uma grande variedade de linguagens de programação. . 'Ta . T. . ' yot_ .. . ""7_1 ... .. Mas. ~oS . . .... ..J ·. .. e provave lmente será.~ .. .... : ... co. . . c_ . ... além de fornecer alguns para a ed ição de HTML. : • ·· ..mU . que pode ser usado sempre que se desejar apenas arrastando-o para a janela de ed ição . como HTML Fragment.. o texto de la determinará onde seu item aparecerá.. ~iI i."""' .~ ... pode esta r certo de que. .. . que podem fazer você pensar que a Toolbox é mais difícil de usardo que parece. em seg uida. quando você criar um formu lário Windows como parte de seu primeiro aplicativo empregando o IDE. como a Toolboxl é difícil de descrever. o que s ignifica ser possíve l gerar seus próprios itens que representem seções do texto.N. .. ...40 Dia 2 NOTA Há um pouco de imprecisão nas descrições anteriores.. "'''' . _ _ 1_ _ ti<\> 11'190 FIGURA 2.ot_. .

Uma fez parte do Visual Basic por algum tempo. renomeá. Para passar essa janela para o modo Immediate. depois que tiver aprend ido dois itens essenc iais: como alternar o modo dajanela (de Command para lmmediate e více-versa) e como infonnarem que modo ajanela está atualmente. Other Windows e Command Window no menu. podemos examinar a final idade e o LISO de cada um. 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. Primeiro.tornemos essa janela visível. mas foram associadas para tornar a operação um pouco mais confusa. digite crnd e pressione Return (sim. O Visual Studio . Você pode considerá-las como duas janelas (sei que vou fazer isso). Ne Pro ect para realizar a mesma tarefa que seria executada se selecionasse os itens File. O modo Command dessa janela permite que você controle o IDE por meio de comandos digitados .> (quase exatamente como o console de comando ou o prompt do DOS com o qual está acostumado). assim como o resto do IDE.N ET 41 A Toolbox. ajane la Immediate e a outra esteve presente no Fax Pro por mu itos anos e acabou adicionada ao Visual Stud io. agora com o nome de Command Window. Essa janela. Agora. e você pode inserir o comando que quiser e executá. como a capacidade de ad icionar mais guias (guias são aquelas seções deslizantes da jane la Toobox). corno alguns gostam de chamá-lo) para efetuar uma tarefa? Para muitas pessoas.> de seu texto efetivo. selecione View. Agora que sabemos como alternar rapidamente entre esses dois modos.». digitando File . Esses outros recursos podem ser acessados por meio do menu suspenso da Toolbox (o menu que é acessado com um clique no botão direito do mouse) e também estão documentados nos arquivos de ajuda do IDE. Já que a produtividade do programador é o objetivo final . você mesmo precisa incluir o prompt . ajanela Command. distinto do modo anterior pelo acréscimo de . mas o modo mais rápido de encontrar muitos deles é .las e alterar a visualização da lista de ícones de qualquer seção. deve conter apenas urna linha em branco seguida de um prompt . ajanela terá passado para o modo Immediate. menus e caixas de diálogo. qualquer método que puder ser mais veloz vale a tentat iva. Command/lmmediate Você já se surpreendeu executando o console de comando (ou a jane la do DOS. apenas digite o comando i nvned (e pressione Return ou Enter) no prompl fornec ido. Uma interface do console em geral pode ser mai s veloz do que uma interface gráfica com o usuário.por exemplo. Elajá está no modo Command.Trabal hando co m o Vis ual Bas ic . New e Project no menu. Essa duplicação de func ionalidade é fornecida como uma maneira potencial de acelerar seu trabalho dentro do IDE.Invnediate em sua barra de título e pela remoção do prompt. exibindo assim essa nova janela. Em termos de utilização. Uma grande quantidade de comandos está disponível .NET possui uma janela que fornece duas fonnas com base no console de interagir com o IDE . Para retornar ao modo Command. o prioritário . elas são realmente duas janelas.lo pressionando Relurn . possui muitas opções complementares que não abordarei.

um pouco do trabalho que é necessário para gerar e in icializar o novo formulário em branco. e você ainda precisa adicionar seu próprio código. selecionando View. Iremos desenvolver um exemplo simples de projeto. Agora. Aqui está uma lista curta de comandos que é bom conhecer: Fi l e . Digite o comando File. Depois que tiver digitado um nome (como Edit ou Fil e). Dê um clique em OK para fechar a caixa de diálogo. uma janela de cód igo que exibe aquele associado a esse formu lário.Ne Pro ect e press ione Enter. (O ponto de interrupção será abordado com mais detalhes no Dia 6. na caixa à di rei ta. portanto. Você usará ajane la Command no início deste exemplo apenas para ter uma noção de como ela poderá ser útil no futu ro. Já que nada fo i adicionado ao formu lário. solicitando a criação de um novo projeto. Uma ca ixa de diálogo aparecerá. gerando um novo projeto em branco. no qual usaremos um 'ponto de interrupçào' para provocar o encerramento da exec ução do programa em uma certa linha de código. em que se interrompe a execução de um programa em curso. Uma é dar um clique na margem (a área cinza-c laro no lado esq uerdo da janela do código). AutoHideAl l A janela Im med iate fornece a capacidade de avaliar as instruções do cód igo diretamente (de imediato!). o Visual Basicjá inseri u de modo automático um pequeno trecho de código ne le.SaveAll Window . e vera um ponto vermelho aparecer na margem próxima à linha. adicione o ponto de interrupção. outra é dar um clique com o botào direito do mouse e selecionar Insert Breakpoint. NewProject Flle. Agora.Ia. se necessário. mas suficiente para o exemplo. Se lecione a pasta chamada Visual Basic Projects na lista da esq uerda e o tipo individual de projeto chamado Windows Appl ication. Empregando o método que quiser. "O Que Fazer Quando Programas Bons Apresentam Prob lemas e para Se Certificar de Que Isso Não Aconteça". Isso pennitirá que você insira uma única linha de código e veja os resultados sem ter de criar um protótipo inteiro do projeto. Esse recurso é útil quando se está no modo de interru(r ção. Other Windows e Command Window na barra de menu. No entanto. Esse procedimento ira adicionar e se lecionar uma guia nova na janela central. ajanela Command deve estar vis ível com um prompt > mostrando que está no modo Command. adic ione um ponto. pressionando F9. Selecione a linha Fonnl '" Me. rolando para baixo a fi m de encontrá. Ela ind ica a presença de um ponto de interrupção. Há três mane iras diferentes de marcar a lin ha. Esse código pode ser visto com um cl ique no botão direito do mouse sobre o novo formulário (na janela central do IDE) e selecionando-se View Code.42 Dia 2 percorrer os nomes dos menus visíveis. O projeto cri ado contém apenas um formu lário Windows. porque ele é realmente uma ferramenta de depuração). e será mostrada uma lista suspensa com os comandos disponíve is para esse nome de menu. Certifique-se de que ajane la Command fique visível e no modo Command. e a terceira é usar o atalho do teclado para essa função. . a execução desse código será encerrada ou 'interrompida' quando ele a atingir. você quer marcar essa li nha com um ponto de interrupção. o código é um pouco limitado.

e a tercei ra é empregar o atalho do teclado.Width " 50 ? Me . e o processamento será encerrado quando ele atingir essa linha. Agora você pode inserir qualquer instrução do Visual Basic.14). Muitos programadores acham que. 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.. você poderá executar o projeto. Width ? 3 + 5 ?3" 5 .Width Me. outra é utilizar as opções Debug e Start do menu. Nesse ponto. IIsando ícones parecidos com os eOlllroles de videocasseles. Agora. ainda deve estar presente.veja a Figura 2. como indicado por [break] na barra de título do IDE do Visual Studio. F5.14 Debu!I .l· fornece boIões para iniciar e imerromper li II • ai exeClIçiio de programas.. abra-a usando as opções View. os atalhos do teclado são a forma mais fácil de acessar as funções mais comuns. Como para o ponto de interrupção. A seta amarela que pode ser vista na margem da janela do código ind ica a linha que está para ser executada (processada). É claro que a ofr ção a ser usada é uma preferência pessoal. há três maneiras principais de iniciar um projeto: uma é usar o botão da barra de ferramentas (que se parece com o botão de reprodução dos CD players ou videocassetes . 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.NET 43 Com esse ponto de interrupção inserido. pode-se alterar a janela Command para o modo Immed iate e testá-lo. X A barra de fermmenra. ele será rapidamente encerrado e exibirá a linha de código marcada com um ponto de interrupção. FIGURA 2. Other Windows e Command Window do menu. Quando você iniciar a execução do projeto. Tente as instruções a segtll r: ? Me. no fina l das contas. estamos no modo de interrupção. Se sua janela Command estava visível antes da execução do projeto.Trabalhando com o Visua l Basic . e ela será avali ada imediatamente (daí o nome). Se a janela Command não estiver visível.

mas. Com base em sua opção ou tarefaatual . com suas novas alterações. essa janela em geral exibe um link para vários tópicos mais genéricos como (nesse caso) a seção Coding Techniques and Programm ing Practices (Técnicas de Cod ificação e Práticas de Programação) da documentação. Se você selecionar uma l inha que já passou (na janela) e começa r a adicionar texto nela. o que a faz uma ótima ferramenta de depuração. Como pode ver. é possível afetar pmtes de seu programa a partir da janela Immediate. sem ele. 3 + 5 produzirá 8. Essa janela de ferramentas também fornece um link direto para as seções de pesqu isa. Por exemplo. e o formulário aparecerá na te la maior do que o tamanho original se você processou as instruções do exemplo fornecido anteriormente. Dynamic Help Estajane la de ferramentas é configurada como uma guia com ajanela Properties (se você estiver usando as configurações do perfil Visual Basic Developer) e fornece referências. Além dos tópicos relacionados. Em vez de esperar que você solic ite aj uda.Width "Me.Width * 2 são trechos de código válidos do Visual Basic e não precisam do ponto de interrogação em sua frente. Em vez disso. Notou o ponto de interrogação em frente a algumas das instruções anteriores? Isso indica ' exi~ bir' e. . o Vi sual Basic não saberá o que fazer com as instruções que retornam um valor. Pressione F5 para fazer com que a execução do código continue após o ponto de interrupção. a janela de fe lTamentas Dynamic Help mostra um conjunto de tópicos de ajuda sobre a tag HTML atualmente se lecionada na janela de ed ição de códigos. poderá passar pelos comandos executados. se você já t iver começado a inserir algum texto. ela exibi rá uma lista de tópicos relacionados. 15. Na Figura 2. esta janela de ferramentas age de modo proativo quando a tecla F I é pressionada ou algo é selecionado no menu Hel p. Por outro lado.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. com base no contexto. 8 não será um comando válido do Visual Basic. será criada de modo automático uma cópia dessa linha. instruçõescomoMe. da documentação dos arquivos de ajuda do Visual Studio. sem a instrução de exibição. Isso torna qualquer texto antes da última linha da janela efetivamente de leitura. conteúdo e indice da documentação de ajuda por meio de três ícones da barra de ferramentas. na parte inferior da janela.

. .. I ..._. ".-~. . _1 ..._ . .... •• _ ..... "Usando o Server Explorer".... L. O primeiro conjunto de recursos representa todas as conexões estabelecidas entre seu projeto e vários servidores de banco de dados... ..""''''''S".... .. ... _ .. ...r... Servers. " .. ."" . ... . " . registros de eventos. Esses recursos incluem contadores de desempenho.. Jooh _ tIOI> • • 45 I!IIIIgE! FIGURA 2 ...16) fornece uma listagem visual de dois recursos es" senciais. -_ .... ... . ... ...." .. _ ..... O segundo conjunto de infonnações. . ..... ... ... ~ .. . .... e perm ite que você explore esses bancos de dados para examinar tabelas. ... ... Sy".H_ " "r. ' '.. ..._. _ •• • •• .Ld ... ) s.. " " .. h'OS'.._. ~ ...... representa qualquer máquina com a qual você possa se conectar e que forneça uma interface visual para os recursos que ela possa tornar disponivel para seu programa. . .... bancos de dados e servidores......$).......mlO anles qlle você • ' \!J ...l~ ~I ·~ -. .. ~ • as solicite..." .~"OI'..". . . .. ' . _ ~ :!O<' _ .. . .". .. ' Tono' • • ... .. . . " "ro••" ..... . L. "II. . . .. .. ' '' '[ .. . se aprofunda no uso dessa janela de ferramentas para en" contrar e man ipu lar recursos de servidores.. ..... .'... . Server Explorer Estajanela de ferramentas (veja a Figura 2.15 A janela Dyllamic Help tellla !/IOSlra/" informações IÍleis me._.... ~ ... .. ... ... ..í: g " ..... ' •.N ET • _ " " " ... 1'0"01 ......t. .. . ". IN..... procedimentos armazenados e OUlras informações úteis.•• . . .. ..... ..".Trabal hando co m o Vis ual Bas ic .... filas de mensagens e mais... todos fac ilmente encontrados por me io desta janela de ferramentas.. Chn'S"...""" " . . ." ... C... . ........ .. O Dia 13. _• •••• ...>.._ ".-.. _. '. .. .

.. ." . .• ... ...NET...s..... .. Alguns desses atributos podem ser de leitura (não podem ser alterados). . projetas.16 O Sen'er ExploreI" fornece /lma maneira vis/lol de examil/ar e IIsar recursos fanl a do sel1'idor local qllal/lo de outras máquinas... o cód igo que você criar poderá ser organizado em camadas diferentes de agrupamento: soluções. Sempre que um item for selecionado no IDE... -_L.••""' .. soluções. mas.. ... . Essas propriedades são in formações que descrevem o item. ••. " ono" . em seus respectivos grupos ou janelas.. aplicativos e componentes individuais. .'''. o Solution Explorer é semelhante ao recurso do Windows Explorer usado no Windows..NET.. r • .C ••""... form ulários e outros elementos).. .... ... ( •• ..c•• .. . . ~. A janela Properties fornece essa funciona lidade.. _ " .. além de outros recursos.. .. então.. h .. Properties O IDE do Vi sual Stud io permite que você trabalhe com muitos itens.""" " ... se ass im o for. n.. .. To .. ".... É a interface de gerenciamento de arquivos do Visual Studio ...... como o nome de um projeto. c . será possível dar um clique neles na janela Properties e alterá-l os quando necessário......" •• $. ''"I'"'... 'oOC.... isto é.46 Dia 2 FIGURA 2.. todos possuindo atributos c propriedades.. projetos e arqu ivos... os atributos desse objeto serão exibidos nesta jane la de ferramentas (veja a Figura 2. • 'onol • . . A janela Solutiotls contém projetos. como um sistema completo. Solution Explorer De muitas maneiras.yo. 17). formu- lários c classes diferentes...) !! . .O<u' .. Dentro de cada janela Project estão todos os arquivos efetivos do projeto (classes. . .. incluindo componentes executados tanto no cliente quanto no servidor.. com valores-padrão.. A janela Solution Explorer permite que sejam vis ualizados todos os objetos que estejam abertos no momento.. Embora as propriedades sejam em geral preenchidas automaticamente.. ._••.. No Visual Studio . é preciso lima maneira de alterá-las.«o .

. ajal/ela Properties exibirá todos os seus 0- atribllfos. expliquei que poderia haver muitos arquivos diferentes envolvidos em um único projeto OLl solução. Por meio dela. Se o item sobre o qual houve o cl ique dup lo não estiver disponível como parte de se u cód igo. Class View o conduzirá para a definição dessa parte da classe dentro do Object Browser (veja a próxima seção) . ! ~r _~ o o o o -.. I formulário /lesse caso). . A jane la Class View (veja a Figura 2. ...N ET 47 FIGURA 2. _ """' . você pode min imizar e expand ir os objetos exib idos. ajane la Solution Explorer fornece vários recursos. 18) foi projetada para permitir que você visua li ze a estrutura do objeto de seu projeto e use essa visualização para navegar em seu código. mas não há um requisito para que a organização do arqu ivo se pareça com a organização conce ituai das classes no projeto. Dentro desta janela. . -.~m' se/eciollado lia jalle/a de ediçiio (lima caixa de texto em UIII . . Esses arquivos em geral correspondem às classes criadas (como uma classe Veículo o u Conta).. ~ _.. Dar um clique duplo em um item específico de Class View o levará para essa classe. A janela Class View é útil como uma mane ira de exami nar seu projeto através das classes definidas nele... .17 Quando IIfIl objeto for ·.o o • • • • A lém de permitir que você visualize o que está aberto no momento. o~ ''''1. propriedade ou procedimento.Trabalhando com o Vis ual Basic . ~~ o~ o~ ~ ~ . para acessar as diversas propriedades e métodos que eles expõem. podemos Adicionar novos arquivos a um projeto (dê um cliq ue com o botão direito do mouse no projeto e selecione Add) Remover arquivos (dê um cl ique com o botão direito do mouse em um arquivo específico e selecione Remove) Adic ionar e remover projetos inteiros de um grupo Solution (dê um clique com o botão direito do mouse na solução para adicionar um projeto e em um projeto para a opção de removê-lo da solução atual) Class View Como parte da discussão sobre o Solution Explorer. o o p' . ignorando os detalhes físicos dos arquivos reais. o .. -_0... método. evento.. -. .-0.

.48 Dia 2 FIGURA 2.lo no trabalho com todos esses objetos. As seções do programa podem prec isar de ajuste no desempenho. Lista de Tarefas Em qualquer projeto de desenvolvimento. os que você criar e até os que outros participantes de sua própria equipe desenvolverem.. Na Figura 2. exibindo infonnações detalhadas que vão até o nível dos parâmetros necessários para uma celta chamada de método. ' ''J r-R ''o:'' . ...NET é baseada em objetos . Todos esses objetos possuem propriedades e métodos por meio dos quais é possível interagir com eles.. o Object Browser vai além da funcionalidade dessa outra janela.. Pode haver erros conhecidos ou recursos que necessitem ser remediados. Quando os programadores incluem consistentemente certas palavras-chave como TODO ou BUG nesses comentários. mesmo os concluídos. Quando as tarefas pendentes podem ser relacionadas em uma área do código. Esse catálogo inclui os objetos (c lasses) expostos por qualquer biblioteca de classes que for referenciada... além das classes contidas em seu próprio projeto.oata..18 A janela C/oss View moslra seu {)ro)elo • l ltle. permitindo que você navegue e pesquise em um catálogo de objetos disponíveis. arq/lil'os físicos.." .NET Framework. como s uas propriedades e métodos. " .NET Framework ou outras bibliotecas de c lasses e seus detalhes visualizados. há a probabilidade de ficarem várias tarefas pendentes para serem completadas. Object Browser Toda a programação na plataforma ."M/ r . 19. uma prática comum entre os programadores é marcar essa área com comentários... r lOIREI • R ' ' ..'" • OIgani::ado por seus objelos e 11(10 por sellS .. podemos ver o Object Browser sendo usado para pesquisar o conteúdo da biblioteca System . permit indo que classes sejam encontradas dentro do . é mais .*:I _ (>oco !«II> _ • '"' ... mas como saber o que está disponível? O Object Browser foi projetado para ajudá. ._" "'.os objetos fornecidos como parte do . Semelhante em alguns aspectos à Class View..· ·. e fomece acesso direlo 00 il//erio/' desses objelOs.. .c·~ p. incluindo objetos externos ao seu projeto. Essa janela é mais ütil como uma maneira de documentação ou referência.

FIGURA 2. O Visual Studio . fomeddas pelo .19 O Objecl !JrOll'sel" ~~-_ o ' w . NeTA Você pode adicionar suas próprias palavras-chave à lista de sim bolos reconhecidos por meio da caixa de diálogo Options. como a referência a erros compi lados e outros itens perceptíveis.I. . ""'.20)... que serão criadas quando essa palavra-chave for encontrada.. O Visual Studio adiciona outras tarefas automaticamente... mas também o arq uivo e a linha onde foi encontrado (veja a Figura 2."'~ CII o .. Mas você também pode acrescentar dois tipos de tarefa a essa lista: atalhos de código e tarefas definidas pejo usuário.. _ " ' _ I i . detalhando não somente o próprio comentário... você pode especificar a palavra-chave que qu iser). As palavras-chave só serão consideradas quando fo rem encontradas nos comentários de seu código.por si só bastante úti l -. em seguida. Com um rápido clique duplo em uma tarefa pendente. . ... ...Trabalhando com o Visual Basic .NET Framell'ol"k e de qualquer oufra "..NET forma lizou esse processo fornecendo uma lista real de tarefas que é preenchida de modo automático com referências a qualquer seção de seu código que contenha uma das várias palavras-chave como TODO (mas. relacionado em uma lista fácil de usar.. .. .. o bibliOleca que você fel/ha criado 011 refel·ellciado. a lista de tarefas pode conter várias outras espécies de tarefas. é possivel acrescentar novos sim bolos e especificar configurações para a tarefa. -. no qual poderá trabal har no que ela indicar..··Ç!· . Além dessa funcionalidade .. permile qlle sejam examinadas as classes . .. Na sua seção Environment\Task Ust.. "' I"-rl o . Cada comentário encontrado será....' .. você será levado de imed iato para o cód igo. . ~ e. ..NET 49 fácil varrer o código procurando-as para encontrar os trechos apropriados.

. . semelhante a uma tarefa-padrão do Outlook.20 Cada comentário marcado COI/1 1/111(1 palavra-chore especial FIGURA é lIIos/rodo em lili/a lisra de farefas bem orguni=ada. . que não está associada a nenhum trecho em particular do código.ycl1< ~ ( • .._ oh. . ""u•• . . . você com certeza achará mais útil gerar um atalho de código e alterar a prioridade e a descrição para fornecer mais detalhes sobre a questão real.. e provavelmente deva. Quando um atalho é criado. só têm dois campos disponíveis. . C~. a descrição e a prioridade (baixa... ..... ex istem vários níveis nos quais seus cód igos podem ser agrupados.. O prime iro. você poderá retornar rapidamente para essa linha apenas com um clique duplo nessa tarefa.... a solução.50 Dia 2 2....... ' ...) . ''f<»(). Em segu ida.. . querda da janela do código próxima à linha apropriada. e. Para adicionar um atalho de código à lista de tarefas. a lterar isso para outra descrição que queira usar). Não precisam de nenhuma palavra-chave especial. ~. <OCoprC " · · · 1 ' oO .... . com o padrão para a descrição sendo a linha de código selecionada (embora você possa. • lO •• " .. o outro tipo de tarefa que você pode criar é uma tarefa do usuário. normal ou alta).. dê um clique com o botão direito do mOllse na janela de edição de códigos e se lecione o item Add Task List Shortcut no menu.. ."_ . Uma nova tarefa será adicionada a sua lista. essa não possui campos de arquivo/linha preenchidos e. l •• _ . <0. '" Os ata lhos de código são semelhantes às tarefas com base em comentários.< ~ ~_". diferente das outras tarefas. . Se qu iser criar uma observação sobre uma área específica do cód igo.. . mas são uma referência a alguma linha do código. Observe que."" .. portanto.. uma seta azul é posicionada na margem es. Uma tarefa do usuário é ad icionada com um clique na seção C lick Here to Add a New Task da lista de tarefas e preenchendo-se os detalhes.... Soluções e Projetos Como discut imos na seção "Solution Explorer".oeO'7 .l'<' . representa o sistema completo que está sendo cria- .. b. ... E possível remover o atalho dando um clique com o botão direito do mouse na linha do código e selecionando Remove Task List Shortcut ou selecionando o item novo da lista de tarefas e exclui ndo-o diretamente. Pnv.

altere o caminho sugerido.. .. na seção logo a seguir. A seguir apresento um resumo desses tópicos. desenvolveremos projetos com base nas opções da pasta Vis ual Basic Projects.. Essas opções apresentam uma caixa de diálogo que mostra todos os diferentes tipos de projetas que o IDE pode gerar (veja a Figura 2. passaremos a praticar essas habil idades gerando um exemplo com pl eto de um aplicativo.2 1). Por enquanto.. digite um nome para seu novo aplicativo e. ele perg untará se você deseja salvar o que esteve usando e fechará tudo de modo automático. _ . Para que se possa voltar a um projeto anterior. logo haverá todo um grupo de projetas com os nomes WindowsApplicat ion I e WindowsApplication2.. Para criar um ap licati vo que seja executado localmente em sua máquina e usar uma interface com o usuário com base no Windows (com caixas de diálogo e outros elementos UI do Windows).. Dê um • clique em OK..21 O Visual Studio possui 111110 caixa de diálogo chamada Neli' Projecto que permite que 1I0~'OS projetos sejam acrescentados quando você il/stala modelos ou linguagens adicionais. ..y>oo . New e Project do menu. dificultando a localização de algo em que tenha estado trabalhando. enquanto os componentes individuais dele são representados por projetas separados.~.. ~~ ""_ lo. Antes que você possa desenvolver qualq uer código no IDE do Visual Stud io.. Nesta seção.. percorreremos os princípios básicos da organização do código. Criando um Novo Projeto Existem algumas maneiras de criar um novo projeto. esse precisará .. E uma boa idéia dar a seus projetas nomes significat ivos. a caixa de diálogo mostra as opções com base nas linguagens que você tem instaladas e podem apresentar uma aparência diferente da exibida na Figura 2. ~1H1 .. selecione Windows Application na lista de tipos de proj etas. caso contrário. ~. _ t FIGURA 2..Trabal h ando co m o Vis u a l Bas ic .. se quiser.N ET 51 do....~~~~~~~~~~~==~ . . mas o método mai s comum usa as opções File. criando novos proj etas e traba lhando com projetas e arquivos existentes.. Jáque o IDE do Visual Studio trabalha com várias linguagens.. . precisa configurar a sol ução e pe lo menos um projeto.2 1. mesmo quando você estiver apenas fazendo testes..11 3 I~~~~~'~'. Abrindo um Projeto Existente Quando o Visua l Studio for encerrado. mas. e o Visual Studio gerará seu novo projeto. L. Para conclui r o processo de criação. _ ..

...22). como um novo formu lário Windows (form1..' _ "" • I """. Nesse local. uma página HTML que lista os últimos projetas uti lizados.:!li iD ~~ ~ . Adicionando Arquivos a um Projeto Além dos arquivos que são criados de modo automático corno parte de seu novo projeto. é possível dar um clique no projeto específico que se quer abrir ou até criar um novo através de um link adicional. Open e Project ou diretamente pe la opção Recent Projecls próxima à parte inferior do menu Fi le.. com exceção de Add Existing Item....no . a opção Add New Exist ing Item do menu apresentará. a menos que sejam empregadas as opções Fite e Adct Project do menu. Outro método é por meio da seção Gel Started da página inicial do Visual Sludio. I - I ~ I ~ I . para esse fim . 8 U""~'. em vez de criar um novo item. é possível optar por acrescentar qualquer arquivo de vários tipos... Arquivos As soluções e projetos existem quase apenas para fin s de organização. "'- . você quiser ad icionar um arquivo existente ao disco." "'lO o .qK"t _ ~ Da mesma maneira qlle a caixa de diálogo Neli' Projecl.. FIGURA 2 . em geral são gerados certos arquivos. você também pode querer adicionar módulos.. todas o conduzirão à caixa de diál ogo Add New ilem (veja a Figura 2. a ime /face para adicionar ilens lIoms ao pr ojeto é expallsh·eI... Abrir um projeto novo faz com que qualquer oulro projeto que já esteja sendo usado seja fechado.vb) ao ser criado um ap li cativo Windows e um novo módulo (Modul elo vb) para um apl icativo do console..... O Visual Studio fornece algumas maneiras fáceis de abrir projetas passados.§] -'. Independentemente da opção especí fica do menu que foi escolhida. -O'~ c. Por meio do menu Project ou do que surge com um clique no botão direito do mouse sobre o projeto da janela Solution Explorer..52 Dia 2 ser aberto no IDE. ".. uma caixa de diálogo para abertura de um arquivo-padrão.. - ''' '1fIT'\ _""" <I... classes e formulários complementares ou outros tipos de arquivos de código. que adicionam um projeto novo ou ex istente à so lução aberta recentemente. Se..__ . Quando você cria um projeto novo...-··~ . o cód igo efetivo reside em um ou mais arquivos individuais." -!m .22 . ~ [ii..~ [j. permi tindo que um único arquivo seja compartilhado por vários projetos se isso fo r desejado. c. Esses arquivos são gerados em disco e existem independentemente de seu projeto. Um método é llsar o menu através de File.

.. _ ~ _ ..NET 53 Salvando Tudo Com todos esses grupos diferentes (soluções.. . projetos e arquivos). C<b.. "II r r o.... criaremos um apl icativo Windows (um apl icativo que lisa a interface com o usuário do Windows e é executado localmente em sua máquina) que permite ao usuário inserir dois números..(noW_ 0 _" c""" ..>Id .... _· ....""" .. isso é feito através de dois comandos diferentes: Save e Save AlI. ficará especialmente interessado em uma das opções do IDE. .23)... todos os arquivos abertos que tenham sido alterados..hot ~ ..._-.-... se o IDE falhar em algum momento. _ "' _ . D_ Cl l.. é importante saber como salvar os trabalhos que fo ram executados.23 Ao usar IIfIl cOlI/plllador noro.. Se você tem medo de perder seu trabalho. . No IDE do Visual Studio. . exibindo o resultado final...c"' . Em segui da.. Essa opção fornece lima maneira fácil de assegurar que todas as suas alterações sejam sempre sa lvas antes da execução de seu código. como eu. No exemplo. ""' .o~ FIGURA 2. " .... )'erifique sempre essas configurações para sall'ar 110 momelllO do deselll'oll'ime/1/o.. D_ O 0 . por meio do comando Save Ali. ~ • ... mesmo se estiverem localizados em mais de um arquivo. ü<t... é possível expandir o grupo Environment e se lecionar o item Projects and So lutions para ver um conjunto de três botões de opção sob o cabeçalho On Build/Run (veja a Figura 2. ". ot.... ~ t.. é bem mais provável que isso aconteça quando seu código estiver em execução.. Esse exercício se concentrará no uso do próprio IDE. EdOor _ .-... _ . Esses comandos... Essas opções controlam se o IDE salvará algum arquivo alterado antes de começar a executar um projeto...nl . . -~ p _ """""'" _ _ _ bo.. o que significa que iremos gerar um aplicativo relativamente simples. Essa é uma configuração importante porque. r...... """""" .. "91 I'... situados no menu Fi le e na barra de ferramentas.. .... _ 1«1< ~" -~-~------'§' Criando Nosso Primeiro Aplicativo Windows Agora que você aprendeu alguns princípios básicos relativos ao uso do IDE do Visual Studio.Trabalhando com o Visual Basic .. o aplicativo adicionará os números..... . de modo qlle el'ite a perda de algumas horas de codificação.. pode usar essas infonnações para desenvolver um aplicativo sem precisar codificar muito.."'.. Na caixa de diálogo Opt ions (acessada por meio dos itens Tools e Options do menu). . "'" El I ~ _ . permitem que seja salvo apenas o arquivo selec ionado no momento (selecionado najanela Server Explorer) com o uso do comando Save ou.

apresentando ass im a caixa de diálogo New Project. com o formu lário no modo Design.24 O'gani=e as Irês caixas de lexto e o único boIão em sell ~ A. Para inserir um desses controles em seu formulári o. Quando ele estiver no formulário. Trabalhe com o redimensionamento e a posição desses controles até que consiga que todas as três caixas de texto e o ún ico botão estejam no formulário com a aparência do exemplo (Figura 2.. trazendo-o para a janela de projeto no centro do IDE._ -_.~ • 'Il1o 'Ii. O novo proj eto já terá um formulário. mas você pode desejar que sua interface tenha uma aparência semelhante à da Figura 2.24. Na categoria Visual Basic. altere algumas propriedades desses controles.. Dê um cl iq ue duplo em Form 1 no Server Explorer.. Dê um clique em OK depois que tiver inserido os nomes corretos do projeto e da solução.54 Dia 2 Crie o Projeto Nos menus. New e Project. I I I I . selecione o ícone Windows Application e altere o nome do projeto de Wi ndowsApp 1i cat ion(x) . 111-(:1 o I I . . também dando o nome de Adder a ela. o ~ __ o . Agora. Desenvolva a Interface com o Usuário Você precisa de três caixas de texto e apenas um botão no formu lário.para Adder (a menos que você seja importunado por intromet idos.. selecione os comandos File. • formulário para que lenllam lima aparência semelhanle a esta jigum. . A posição nào é assim tão importante. que é tudo de que você precisa para começar a trabal har no apli cativo. Depois que tudo estiver posicionado. O Visual Studio criará automaticamente uma pasta Solution para armazenar seu projeto novo. FIGURA 2 . selecione o controle e use suas alças para redimensioná-lo até a forma e tamanho desejados. Essajane la.o nome-padrão numerado . contém um controle TextBox e um controle Button.. selecione ou abra ajanela Toolbox. situação na qual poderá nomear o projeto da maneira que quiser). :. I I .24). dê um clique nele e arraste-o para a posição correta. que mostrará todos os objetos disponíveis que podem ser colocados em seu formulário.

(Name) para btnAdd e Text para Add.Trabalhando com o Vis ual Basic .exe. Executando o Projeto Mesmo se você não tiver inserido um cód igo. o qual poderemos configurar como Simple Adder no exemplo. Você também alterará somente dois valores desse objeto. deixando sua propriedade Text em branco e alterando seus nomes para txtSecondValue e txtResult . Continue com as outras duas caixas de texto. Tente isso agora. tudo por causa do . você alterará uma das propriedades do próprio formulário. se a janela já não estiver visível). Mais informações sobre os aplicativos de depuração serão fornecidas no Dia 6.N ET 55 Selecione a primeira caixa de texto (a mais próxima da parte superior do formulário) e exiba ajanela Properties (pressione F4 ou selec ione View e Properties Window no menu. ou outro tipo de arq uivo de resultado de seu projeto. altere para txtF1rstValue. pressione F5 ou use o botão da barra de ferramentas que se parece com uma seta para a direita (ou com o botão de reprodução de um videocassete). o fonnu lário parecerá bem fu ncional. Exclua o conteúdo desta propriedade para fazer com que a caixa de texto fique vazia quando o programa for iniciado. respectivamente. Selecione o formu lário (dê um clique em algum local dele que não seja Outro objeto) e role pela lista de propriedades para encontrar a propriedade Text no grupo Appearance. o que é mais importante. só porque tem esse recurso. que tem como padrão um nome relativamente irrelevante. A criação de um executável. mas. é essencial observar que há uma diferença entre processar seu código no IDE e gerar um arquivo executável real. é chamada de construção e será abordada na próxima seção. mas você só irá alterar duas de las: • Text (no grupo Appearance) Representa o conteúdo da caixa de texto. Agora selecione o botão para exibi r seus atributos na janela Properties. por exemplo). Ele poderá ser arrastado pela tela e minimizado. Mesmo sem que tenha sido escrita uma única linha de código. É possivel processar rapidamente o trecho de cód igo necessário durante o desenvolvimento e. executar várias tarefas de depuração enquanto o programa estiver sendo processado. essa propriedade representa seu titulo (o texto exibido na barra de título). • (Name) (no grupo Design) No código. Neste exemplo. Para concluir. Várias propriedades diferentes serão listadas. Para executar um projeto no IDE. com o projeto Adder que você já abriu. o projeto poderá ser exec utado da maneira como se encontra.NET Framework e do IDE subjacentes que permitem a criação visual de uma interface com o usuário e produzem o cód igo necessário para fazê-Ia funcionar. como Text2 ou Textl. Para um formulário. e verá o formulário sobre o IDE do Visual Studio. sem a existência de um programa executável (um arquivo . . por enquanto. se lecione Start no menu Debug. você se referirá a essa caixa de texto usando o nome desta propriedade. O IDE do Visual Stud io permite que o programa seja processado dentro de le.

• Output type Infonna ao IDE que tipo de arquivo será criado na construção deste projeto. inserindo-o no subdiret6rio bin da pasta de seu projeto. ou . se você alterar. as configurações-padrão de Build criaram um arquivo Adder . ele deve estar localizado em My Oocuments \ Vi sua 1 Stud i o Proj ects \Adder. Para um aplicativo Windows como o do exemplo. exe dentro desse diretório. A menos que você tenha optado por personal izar Ocaminho exibido quando criou este projeto. ela deve ser Adder. A caixa de diálogo das propriedades de seu projeto contém várias configurações. Sem fornecer muito em termos de informação. Altere-o para MyAdder. mas são fáceis de entender). e ficam visíveis como parte das informações das propriedades do . Cancele todo o processamento da caixa de diálogo de propriedades do projeto (dando um clique no botão Cancel na parte inferior do formulário) se você perceber que alterou algo que não sabe como corrigir.dll. Adder . Observe que. Construindo o Projeto Construir um projeto é a criação de um executável ou outros arquivos de resultado. Todas as configurações de Common Properties\Version são armazenadas nos arquivos de saída quando o projeto é construído. Em Common Properties\General: • Assembly name Este valor fornece a primeira parte do nome do arquivo de seu arquivo de resu ltado. que parecerá ser de muito pouca utilidade. e é ela que é executada quando o projeto é processado.Dia 2 Embora você não tenha escrito nenhum código. No caso do exemplo. Configurações para a Construção de Projetos Para construir um projeto. portanto. exe será criado quando você iniciar a construção. • Startup object Indica a parte do projeto que deve ser executada por padrão quando o aplicati vo for processado.exe. Output Type de Windows A pplication para qualquer outra opção. mas as que são relevantes para o processo de construção estão descritas a seguir. e o arquivo executável em \bi n\Adder. essa propriedade também será modificada e pode acabar configurada de modo incorrcto. No exemplo. selecione Build no menu Build (não são nomes muito criativos para os menus. Essa é uma etapa essencial se você pretende que um projeto seja usado por outras pessoas que não sejam desenvolvedores. FonnI para indicar que o formulário deve ser executado de maneira automática.exe se Windows Appli cation ou Console Application for selecionado. se Class Library for selecionado. e. embora possa ser evitada durante o desenvolvimento pela execução dentro do IDE. isso significa a compilação de seu código em um arquivo .exe fo i criado. Para examinar todas essa configurações-padrão. mesmo temporariamente. uma codificação extensa já foi gerada pelo IDE. com a extensão . alterá-Ias. e MyAdder .exe que possa ser executado fora do IDE do Visual Studio. ele é Adder. dê um clique com o botão direito do mouse em seu projeto na janela Soluti on Explorer e selecione Properties no menu suspenso que aparecerá. quem sabe.

. 0Ih0r .exe no Windows e permite que você se lecione o arqu ivo de ícones (. assim corno a configuração de Output Directory. Por padrão. <icn 1. as informações inseridas nessa caixa de diálogo podem ser irre levantes. apesar do nome. Outras Configurações de Construção Na parte superior da caixa de diálogo Projcct se encontra uma lista s uspensa chamada Configumlion. No mínimo. poderá examinar fodas (/s informações FIo .Trabalhando com o Vis ual Basic . que permite que você crie mais de um grupo de configurações para o mesmo projeto... duas configurações são fornecidas (Release e Debug). mas. . FIGURA 2. Enquanto você esliver aprendendo o Vi sual Basic. O valor de Application Icon determina a aparência do arquivo tinal . quando criar um apl icativo que será distribuído para os usuários. Nesse loca l você encontrará várias configurações relacionadas com a depuração.25).0. rl'.N ET 57 arquivo executável final (veja a Figura 2. As definições para essas con fi gurações-padrão são um bom exemplo da fi nalidade do Solution Configurations. que define o status de vários recursos de depuração e até de um local diferente de resultado para cada um deles. que determina onde o arquivo executável ou outros que forem criados serão posicionados. é recomendável levar em consideração as informações dessa página com muito cuidado.16 especificadas antes de sI/a cOllstruçc7o. projetadas para indicar se estão sendo construídos resultados para fins de teste (Debug) ou para desenvolvimento real (Re lease). os últimos itens que mencionarei estão em Configurat ion Propert ies\Build. certifique-se de que inseriu os números corretos das versões na página porque eles fornecem um método conclusivo para os usuários verificarem que versão de um aplicati vo possuem. encontramos apenas uma propriedade que é claramente relevante para o processo de construção."".2'314..':"'~ ------- Em Common Properties\Build.ico) que desejar. Embora não sejam as únicas configurações adicionai s que aretam a construção."i_".25 Qual/do você visualizar as propriedades de /1111 arquivo execlltárel 011 DLL. O Solulion Contigural ions é um recurso útil do IDE do Visual Sludio..

use o Windows Explorer para encontrar o arquivo e. exe. My Documents\Visua l Studio Projects\Adder). Esse arquivo. Esse arq uivo executável. cada IIlIIa podendo ter configurações diferemes no lIIel/lI Build. aparecerá para mostrar que o programa está sendo processado e continuará a ser até que esse mesmo formulário seja fechado.26). se você não a tiver mudado de lugar). Se tudo correr bem e não houver erros em nenhum código que tenha sido adic ionado ou alterado. e verá uma infonnação piscar rapidamente na janela Output (exibida na parte inferior de sua tela.NET Framework. esse aplicativo adi~ danará valores à primeira e segunda ca ixas de texto e colocará o resultado em uma terceira e ú l ~ ti ma. que tem sido ótimo para mostrar O formu lário. I Criando um Arquivo Executável A melhor maneira de entender um recurso do IDE é usando-o. que foi chamado de Adder . o exemplo do projeto em que você esteve trabalhando continha apenas o código gerado pelo IDE do Visual Stud io. será criado no subdire~ tório bi n da pasta de seu projeto (por padrão. em se~ guida. aCeifaç(io do 1I. e Debug no teste. com suas diversas caixas de texto e botões. selecionando a versão Release do resultado quando estiver implantando o projeto.WÓI'iO.26 Conflgural lon M<lMg~r 13 O Configuratioll Mal/ager permite que \'océ crie co/!figuraçõcs diferenles para fillalidades distintas (leste. Minim ize o IDE do Visual Studio. Dê um cl ique na opção Build do menu de mesmo nome. Como já deve ter sido percebido pelos nomes e layout do forrnu lário. . você poderá criar quantos grupos diferentes de configuração ou até mesmo remover uma existente . o que significa que é hora de construir O projeto do exemplo e produzir um arquivo executável. mas não faz mais nada. o processo de construção produ~ zi rá um arquivo executável. depuração. liberaçüo e ol/Iras). Por enquanto. será preferível deixar as configurações como estão. é tudo que é necessário para fazer a distribuição para a máquina de um usuário de modo que esse possa executar seu programa. Adicionando Seu Próprio Código Até aqui. dê um clique duplo nele para executar seu ap licativo Windows recém~criado. Para tanto. O formu lá~ rio.58 Dia 2 Com o Configuratioll Manager (yeja a Figura 2. será preciso acrescentar um código ao projeto que será executado quando o usuário der um clique no botào Add. FIGURA 2 . j unto com o .

11m' 1'1'0'" I Agora que você já sabe como executar um código que responde ao clique em um botão. FIGURA 2. disponíveis por meio da propriedade Text desses controles. tente dar um clique no botão. É possível criar procedimentos que serão executados quando um desses eventos ocorrer e. Podem-se associar proced imentos a eventos. e. dê um clique duplo no botão Add. Adicione a li nha de código anterior à sub-rotina btnAdd_C1 ick e. o procedimento btnAdd Cl ick será executado se o usuário der um clique no botão. A classe MessageBox permite que uma mensagem seja exibida em uma caixa de diálogo com uma única linha de código. poderá criara cód igo efetivo de seu projeto. em seguida. temos de convertê-los de strings (texto) . M=. Isso o conduzi rá para a visualização do código do formulá rio e a uma sub·rot ina que foi ad icionada pelo IDE. como esse botão. como esta: MessageBox .NET Framework que fornece os formulários. Cada clique deve provocar o aparecimento da caixa de mensagem. selecionados e desmarcados.27.".I em gera/usada fases de depuraçâo/lesfe. em seguida. A maioria dos eventos de um controle representa açôes executadas neles como serem clicados. segu ido do evento. o que soa mais fácil do que é na realidade. Show("O botão foi clicado") Esse código exibe uma ca ixa de diálogo como a mostrada na Figura 2 . por padrão. botões. pode ter eventos associados a ele. caixas de texto e outros elementos de interface. portanto. caixas de texto ou outros componentes do formulár io. mas antes que possamos usá-los em uma equação matemática(somando-os). C1 i ck).NET 59 o uso do IDE faz com que esse processo seja muito direto: dê um clique duplo no formulário do Solution Explorer para assegurar que a visualização do projeto esteja ativada e. clicados duas vezes. mostrando a você que o código de btnAdd Cl i ck é executado sempre que o botão é pressionado. btnAdd. execute o projeto pressionando F5.Trabalhando com o Visual Basic . Ele tem de somar dois valores para produzir um resu ltado. esses procedimentos são designados pelo seu nome (o nome do controle. A simpli cidade do uso dessa classe a torna perfeita para ser empregada como uma ferramenta de teste ou de depuração. Depois que o formulário aparecer.27 A classe MessageBox fornece uma mal/eira fácil de exibir iliformaçães lia tela e é I T. É fácil testar essa funcional idade usando um recurso muito útil do . independentemente de seus nomes. mas neste caso. Um controle. está disponível para qualquer projeto no qual se esteja usando esses objetos. Os valores que queremos são os conteúdos de suas caixas de texto.

Portanto. o IDE é a ferramenta que você usará para fazer sua programação de modo que. fará o que prec isamos : txtResult .Dia 2 para números. e la se tornará familiar. P Posso adiciona r meus própr ios recursos ao ID E do Visual Studio? R Com certeza! O IDE dá suporte à personalização por me io de vários métodos diferentes. converte o resultado de novo para lima string (texto) de modo que ele possa ser inserido na terceira caixa de texto. " Introduçâo à Programação com o Visual Basic . em seguida. O código a seguir. adicionada anteriormente. com o tempo. apesar de nem sempre trabalharmos com elementos visuais (como formulários e controles). mas o IDE fornece uma grande quantidade de recursos para tornar o desenvolvimento um processo mui to mais fácil. incluindo macros e complementos. faz a soma e. além de ser difícil ficar sem os recursos de depuração. editar.NET.Text)). mas. .Text) +Clnt(txtSecondValue. São necessárias algumas etapas para fazer algo que aparentemente é muito fácil quando descrito pela primeira vez. a estrutura das instruções e a edição codificada em cores. Tudo ficará mais claro ao darmos prosseguimento no Dia 3. Daqui em diante. se colocado no lugar da chamada de MessageBox. Esta lição abordou os recursos básicos do IDE e a fi nalidade de cada uma de suas jane las princ ipais. P&R P Preciso usar o IDE ou posso apenas empregar um editor de texto e a linha de comando? R No Visual Basic . neste caso). O Intel li Sense. tudo faz com que a criação de códigos seja mais agradável. é possível fazer qualquer coisa usando apenas a linha de comando e um editor de texto. e o do Visual Stud io fornece todos esses recursos e ma is.ToString Esse cód igo converte o conteúdo das duas caixas de texto em números (inteiros. e o resultado final pode parecer um pouco confuso. Também o conduziu pela criação de um aplicativo Windows simples. aprenderemos mais sobre ele e seus recursos o tempo todo. por hora. examine os óti mos exemplos de macros nas opções TooIs.NET". Macros e Macros IDE do menu. Embora possa parecer um pouco confuso e cansativo agora. executar e depurar seus programas. Resumo O objetivo do I DE é fornecer um ambiente no qual você possa escrever. estaremos usando o IDE freqUentemente. Text =(Clnt(txtFirstValue. Não abordarei a personalização do IDE neste livro.

Se você quisesse ver todos os arquivos que fazem parte de seu projeto. Teste I. " Respostas dos Testes/Exercícios".N ET 61 Workshop o Workshop foi planejado para ajudá-lo a antecipar possíveis dúvidas. Se a janela Command estiver no modo lmmediate. use a classe MessageBox para adicionar mensagens ao procedimento de outros eventos e verifique quando forem chamados. como posso passar para o modo Command e depois voltar? Exercícios Exatamente como você fez nesta lição. na segunda lista para trabalhar com esse evento. TextChanged. revisara quejá aprendeu e começar a pensar em como colocar seu conhecimento em prática. Qual é o local-padrão dos novos projetas do Visual Studio? 3. Tente selecionar txtResul t na primeira lista suspensa da janela de edição de cód igos e. que janela do IDE usaria? 2. . em seguida.Trabalhando com o Vis ual Basic . Como você pode escolher um ícone para um aplicat ivo que esteja desenvolvendo no Visual SlUd io? 4. As respostas do teste estão no Apêndice A.

.

NET Agora que você se fami liarizou com o ambiente . será necessário um bom conhecimento sobre variáveis. ele precisará manter o registro das infonnações e executar cálculos elementares e tarefas semelhantes.NET.NET. De maneira parecida.NET.NET sej a fácil escrever um programa simples sem o uso de muita codificação. .NET de desenvolvimento. é criada a base para ass imilação do Visual Basic .NET. exalamenle como quando iniciamos o aprend izado da aritmética simples. é hora de começar a escrever códigos. Alguns operadores e funções simples disponíveis no Visual Basic . você aprenderá: o o o Os tipos de variáveis que pode criar com o Vi sual Bas ic . inclusive como desenvolver procedimentos. Embora com o V isual Basic . precisaremos aprender alguns operadores fundamentais que podem ser ut i Iizados no trabalho com variáveis numéricas e ai fanuméricas. mesmo se for mais sim ples que uma versão de demonstração. Os princípios básicos para escrever códigos no Visual Basic . Por meio da compreensão do emprego e dos tipos de variáveis. Para escrever códigos que executem essas tarefas.SEMANA 1 DIA Introdução à Programação com o Visual Basic . Nesta lição.

mas também do espaço da memória que o computador terá de man ipular para registrar a variável. em geral precisa de mais memória. nas vanavcls. Alguns números. /-lá três tipos abrangentes de variáve is que você pode criar com o Visual Basic . cada uma foi projetada para conter valores de vários tamanhos. As variáveis permitem que você armazene informações para uso posterior e a atribuição é a maneira de inserir informações . Uma variáve l gerada para conter um número dec ima l deve ter uma manei ra específica de manlero registro dos valores depois da vírgula. O Que E uma Variável? Uma variável é um depósito. Além disso. . 14 I 59265358979 e 16. Portanto. não possuem casas decimais. como I ou 5280. Você usará variáveis em toda a extensão de seus programas para reter valores temporários durante os cálculos. A terceira categoria é a das variáveis de objeto. Há muitas desse t ipo. E fácil deduzir que uma variável que contém strings deve executar algo diferente de outra criada para annazenar números. O primeiro conjunto engloba as variáveis que mmazenam valores simples. que contêm alguma combinação de variáveis simp les e incluem arrays e tipos definidos pelo usuário. como nümeros ou strings. Tipos de Variáveis Disponíveis Exatamente como acontece com as calças. É um local para guardar as informações até que sejam necessárias. Os tipos definidos pelo usuário (também conhecidos como estruturas) e as variáveis de objeto serão abordados no Dia 7.64 Dia 3 Variáveis e Atribuição Variáve is e atribuição são a base de toda linguagem de programação. que isso significa que os números decimais provavelmente consumirão mais memória. "Traba lhando com Objetos".50 apresentam essa característica. Os arrays são variáveis que armazenam muitas outras. . mesmo tipos diferentes de números requerem tipos d istintos de variáveis. enquanto 3. é importante lembrar não só do tipo de informação que você prec isa annazenar. Sempre que um computador ou programa realiza um trabalho maior.. essa nem sem• pre é a melhor solução. A segunda categoria é a das variáveis complexas. só um tamanho não atende a todas as variáveis. Embora seja poss ível criar e usar uma variável que seja capaz de conter o que for. . É claro. armazenar ent radas do usuário e preparar as informações que serão exibidas posteriormente para eles. e os tipos definidos pelo usuário permitem que o usuário crie novos tipos de variáveis.NET. A discussão desta lição se concentrará nas variáveis simples e arrays.

por exemp lo. pode fazer com que seu programa seja executado mais lentamente porque teria de manter registras de seções maiores da memória. se estiver escrevendo um programa que execute cálculos científicos ou de engenharia. números que não possuem casas decimais. As strings e os caracteres compõem o terceiro grupo. números sem casas decimais). Em algumas vezes. elas devem ser seu tipo preferido quando for preciso trabalhar com nllmeros. ou uma combinação de uns e zeros. Essas variáveis são as que você usará com mais freqOência nos programas e as mais fáceis para os computadores tratar. na verdade. A Tabela 3. o que e apenas uma maneira técnica de dizer que cada byte possui oito algarismos um ou zero. Examinemos cada um desses grupos e vejamos quando qual é apropriado usar em que situação. A quantidade de memória utilizada é medida em bytes. e o quarto seria me lhor descrito como ' diversos' . mesmo que essas nunca fossem utilizadas. As variáveis simples podem ser divididas em quatro subgrupos. Além disso. terá de trabalhar com números grandes . os tipos simples de variáveis ' arrnazenam ' valores como números e palavras. Em outras. ela consum irá mais memória. (Um byte contem oito bits.por exemplo. Tente usar o melhor tipo de variável para a situação. TERMO . Porém.1 mostra diversas variáveis de inteiros diferentes. O primeiro e maioré o dos inteiros. Portanto. Variáveis de Inteiros Novo As variáveis de inleiros (integer) amlazenam os conhecidos números inteiros (isto é. O segundo grupo é usado para números com casas deci mais. Por causa dessa comodidade.) Embora não haja problema em usar uma variável projetada para conter valores maiores do que o necessário. só será preciso manter o registro de um número peq ueno . há vários tipos diferentes de variáveis simples . você pode achar que só é necessário exist ir dois tipos de variáveis: de números e de palavras. se estiver armazenando os meses do ano.N ET 65 Variáveis Simples Como descrito anteriormente. cada uma fo i criada para armazenar numeros de tamanhos distintos e para empregar quantidades diferentes de memória.cada um criado para armazenar tamanhos ou ti pos disti ntos de números ou stri ngs.Introdução à Prog ramação co m o Visua l Basic .

808 a 9 . diferente dos outros tipos de dados inteiros. o inteiro é o tipo mais ve loz de variável para Curto (Short) 2 -32.483.3 72 . por exemplo. requerem que você também possa armazenar valores decimais. como os dias de um mês ou os meses de um ano. Um emprego para esse tipo de variável seria registrar a quantidade de ovelhas da Nova Zelândia (aproximadamente 47. Decidirqual usar depende do grau de precisão que for necessário manter.483.372.147. Út il quando se mantêm registros de numeros pequenos que nunca são negarivos.775.8 54. A Tabela 3. o Byte não dá suporte a números negativos. o computador usa uma parte de cada byte para guardar a porção 'negativa' .000 em 1997). Um tipo longo seria útil se você esti vesse annazenando a quantidade de estrelas no universo (estimada em cerca de 10").807 ca em que estamos trabalhando com números mu ito.2 descreve os dois principais tipos de variáveis dec imais. Caso não se .647 se usar. O tipo de variável perfeito para esta épo- Longo (Long) 8 . A variável de inteiros-padrão.2. se estivesse escrevendo um programa para contar a quantidade de empregados de urna empresa que só tivesse alguns milhares de funcionários. finanças e ciênc ias. Para armazenar números negativos. No entanto. mais cálcu los. já que ele requer menos trabalho do computador.223.223. Uma variável de inteiros pequena e prática.767 Inteiro (Integer) 4 .Dia 3 Tipos de Variável de Inteiros Tamanho (Bytes) Abrangência Comentários TABELA 3 . muito grandes (isso sign ifi ca -9 quintilhões a +9 quintilhões ou aproximadamente 9 x lO ' ~ para a manutenção de registros).394.9. principalmente em engenharia. Isso acontece porque ele representa o valor que o computador realmente am1azena em cada byte da memória. Números com Casas Decimais Uma grande quantidade de processamento numérico é realizada sem casas decimais.036. Em geral. 1 Tipo de Dado Byte I o a 255 Um pouco limitado e.768 a 32. em vez do tamanho dos valores.648 a 2.036. já que todos eles podem ter números bastante grandes.775.147. Você pode usar um tipo curto sempre que não precisar de todo o intervalo de um tipo inteiro. 854.

000. não é tão preciso quanto os outros.9406564584124 7 x 1O·ll.J!' a 1. para números negativos.Introdução à Programação com o Visua l Basic . O tipo duplo é uma variável de Duplo (Doubl e) 8 . O tipo de variável simples seria útil em um programa em que menos exatidão fosse necessária.401298 x 10"'s para números negativos.401298 x \0-1 1 a 3. mais o expoente (o númcro acima do algarismo 10). embora o tipo simples seja bom para armazenar tanto nllmeros grandes quanto pequenos. 4.000.402823 x lO>! para números positivos Não se preocupe muito com o tamanho desses números do intervalo.1. Observe que possuem um número antes da casa decimal e seis a seguir. O tipo simples pode manter o registro de números muito grandes (ou muito pequenos). 106 é lO seis vezes ou 1. e poderia causar erros de arredondamento se você fizesse muitos cálculos com valores realmente altos ou muito baixos. Esse é o significado do jargão da infonnática: "Ele só é realmente bom para annazenar sete dígitos impoltantes". Use um tipo duplo sempre que você fizer cálculos com números grandes ou quando quiser evitar os erros de arredondamento que podem acontecer no tipo simples. O im portante para este tipo de dado é a precisão. o número 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).797693 1348623 I x IOJ<J~ a -4.402823 x 10JOa .3.94065645841247 x 1O.1. annazena duas vezes mais dígitos sign ificativos que o tipo simples ou 15 casas decimais. O nome 'simples' quer dizer que este tipo de variável é para nlÍmeros com pomo flut/lonte de precisão simples. como ao efetuar cálculos em aplicativos científicos ou de engenharia. portanto.79769313486232 x IO para números lm positivos 'ponto flutuante com precisão dupla'.2 Tipos de Variável Decimal Tamanho (Bytes) Tipo de Dado Abrangência Comentários Simp les (Single) 4 . Portanto. e 10" é igual a 0. TABElA 3.000001. Examine cada um dos números do intervalo.NET 67 lembre da notação científica que aprendeu na escola. 1. Portanto. .

japonês e tailandês. sai· ba que uma única variável alfanumérica pode conter 1. Se estio ver calcu lando cinco caracteres em méd ia por palavra e 250 palavras por página. Para reso lver esse problema. TABElA 3. Portanto. se todas as linguagens empregassem o mesmo conjunto de caracteres. 10 + 2 por caractere Até dois bilhões de caracteres Use um tipo Stri ng para armazenar aque le romance que sempre quis escrever.68 Dia 3 Strings e Caracteres Os números são adequados se você precisa armazenar quantidades ou espaços de tempo. você não precisa de dois bytes (65. popular no passado. Em ASC II . há apenas 25 caracteres usados no idioma português. e cada caractere de um tipo String acrescenta dois bytes de espaço complementar de armazenamento.3 descreve os dois tipos de dados com mais detalhes. Porq ue cada tipo Char e cada caractere de um tipo String ocupam dois bytes? Afinal . bem como os dos idiomas russo. Em Un icode. Se você quisesse fazer o mesmo com todos os outros símbolos que as pessoas usam na escrita. e o símbolo '@' possuíava loriguala64. cada caractere é representado por dois bytes . Isso permite o armazenamento de todos os caracteres da li sta ASCI I. o valor65 em ASC II era sempre a letra ' A'. chamado Unicode. e todos os computadores que usa· vam essa linguagem sempre dispunham os mesmos caracteres na mesma posição da lista. Novo finiu. . mas 8800 é o caraclere [iJ . A Tabela 3.536 valores poss íveis). 65 ainda representa a letra ' A' . mas com freqUênc ia também é necessário lidar com palavras na programação. O caraclere japonês Hiranaga "IEM' ('não') é representado por 12398.NET usa os valores Unicode para todos os caracteres.7 milhão de páginas de texto. precisaria de mais caracteres. os dos matemáticos e ass im por diante. O Visual Basic . um novo sistema fo i desenvolv i· do. grego.decerto. de· No Unicode. O tipo Char é apropriado para o armaze namento de apenas um caractere (daí o nome). no en· tanto. além dos números e símbolos . portanto o ti po Cha r usa dois bytes. TERMO o cenário é o que o conjunto de caracteres ASCII (ou ANS I).NET fornece variáveis para armazenamento de strings: os tipos de dado Char e Stri n9. enquanto o tipo Stri ng pode conter strings de comprimento maior.3 Tipos de Variáveis de Strings Tamanho (Bytes) Tipo de Dado Abrangência Comentários Cha r String 2 Um caractere Adequado para annazenar um ún ico carac- tere. um byte é igua l a um caractere. Não precisari a. O Visual Basic .

existem dois desses tipos de variáveis 'd iversas'.4. TABELA 3. se acrescentannos I ao valor '28 de feverei ro de 2000' da variável de data. pelo tipo da variável. seguida pelo nome da variável. Da mesma maneira. Veja algumas declarações de variáveis possíveis: . para que dois bytes? O Visual Basic tem usado trad icional mente Oe. No Visual Basic . Data (Date) 8 1° de jane iro de 100a3 1 de dezembro de 9999 Você poderia usar outro tipo de dado para armazenar datas como strin gs ou inteiro representando o período em dias após alguma dat a específica. A única limitação efetiva da variável de data é seu tamanho. Ela também segue todas as regras do calendário (como adicionar um dia em anos bissextos). obteremos '29 de fevereiro de 2000'.NET. portanto. Algo sempre desafia a categorização (apenas imagine o primeiro zoólogo que se deparou com o ornitorrinco). a resposta será' 1° de março de 200 1' .N ET 69 Outros Tipos de Variável Simples Nunca fal ha quando se tenta categorizar as coisas. Esta variável pode conter a maioria das datas com as quais você lidará (a menos que seja um historiador ou geólogo).Introdução à Prog ramação co m o Visua l Basic . Eles são descritos com mais detalhes na Tabela 3. Definir esses dois va lores requer dois bytes . Declarando Variáveis Agora que você conhece os ti pos de variáveis dispon íveis. A aparência é a seguinte: Dim iAlgumNumero As Integer Isso criaria a nova variável iA 1gumNumero. que possui quatro bytes e pode annazenar um número com um tamanho aproximado a 2 bilhões. o lipo booleano (Boolean) e a data (Date). há algumas variáveis que não se encaixam bem nas categorias descritas anteriormente. mas se fizenn os o mesmo para '28 de feve reiro de 200 I'.4 Ti pos Diversos de Variáveis Simples Tamanho (Bytes) Abrangência Comentários Tipo de Dado Booleano (Boo 1ean) 2 Verdadeiro (True) ou falso (False) Se está annazenando apenas verdade iro ou falso . por fim .I para fa lso e verdadeiro. como criá-las em seus programas? A maneira mai s si mples é com a palavra-chave Dim (abrev iatura de ' Dimensão'). a palavra-chave As e.

1 mostra três maneiras possíveis de declarar arrays. por exem plo. Também pode ser preciso manter o registro de uma lista de strings. você pode precisar armazenar vários itens relacionados. No entanto. Sempre que for necessário armazenar uma li sta de itens. No programa do jogo de xadrez. Como na declaração das variáveis simples. se est ivesse escrevendo um programa de jogo de xadrez. A Listagem 3.Dia 3 Dim sPrimeiroNome As String Dim dblProdutolnternoBruto As Double Dim bAprendido As Boolean Um recurso novo no Visual Basic . o tabul eiro provavelmente seria armazenado como um array de posições. teriam de ser empregadas 64 variáveis separadas. a de um array é feita com a palavra-chave Dim.12151 Dim lPessoasNaTerra As Long = 6000000000 Examinaremos algumas outras maneiras de declarar variáveis posteriormente. quando discutirmos o escopo.1 Declarando Arrays 1 'Declaração 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. No entanto. COOIGO LISTAGEM 3. Use os arrays para criar variáveis que armazenem juntos todos os itens relacionados. há algumas diferenças entre declarações de variáveis simples e declarações de arrays porque esses são conjuntos de variáveis. pronuncia "Tenho um sonho" . Arrays A capacidade de uma variáve l de armazenar qualquer coisa é prática e até mesmo essencial em programação. Se não fosse usada uma variável de array. os quadrados do tabuleiro precisariam ser representados como um conjunto de itens re lacionados. Faça isso usando a mesma linha da instrução Dim: Dim dtDataDeAssinaturaDaCartaMagna As Date =IJune 15. Por exemplo. cada uma contendo o tipo de peça (ou nenhuma) dessa posição. dos nomes dos al unos de lima sala. use um array.NET é a capacidade de fornecer um valor à variável quando ela estiver sendo criada.

Nesse caso. é possível fazer o mesmo com arrays. Tudo faz sent ido. contudo. "Dez"} ' Usando arrays Console . principalmente no que diz respeito a arrays. o segundo membro do array está na posição I. coloq ue cada elemento do array em uma lista delimitada por vírgulas. "Set" ."Fev". É melhor deixar a verdadeira razão disso nos recônditos de suas minúsculas mentes de silicone. eles estarão numerados de O a II . Esse tipo de declaração é útil se o tamanho do array depender do valor de outra variável. sMonths(10) seria "Nov".portanto."Jun". diferente das pessoas.1 Declarando Arrays (continuação) 71 dtDates(2)="20 j7jI969" 'A Apollo 11 aterrissa na Lua dtDates(3)="14 j 2j 1946" 'ENIAC revelado ao púb lico 'Declaração com Inicialização Dim sMonthsOAs String ={"Jan".."Maio". isso não seria conhec ido até o tempo de execução.. Portanto. com os meses do ano.NET COOIGO 13 14 15 16 17 18 19 20 21 22 LISTAGEM 3. "Nov" . Todos os itens do array são inteiros (I nteger). e não 2. Next no próximo capítu lo). "Abr". Isso é mostrado no laço For . com cada elemento contendo uma string. Isso criará um array de 12 membros. os itens do array dinâmico estão numerados de zero a I menos 1.WriteLine("Terce i ra date em dtDates " {O}".WriteLine("") Console . A parte potenciahnente confusa está na maneira usada para fazer referência a cada membro do array. Observe que os três membros do array estão numerados de Oa 2.WriteLine("Décimo primei ro mês do ano = {O}" . mas precisamos estar conscientes desse detalhe. você poderá usá-l o como qualquer outro. Como nos outros tipos. "Out" . i Val ues foi declarada como um array de três membros.WriteLine("Segundo valor em iVa l ues '" {O)" .. Depois que o array fo r dimensionado.iValues(I») Console . como mostrado na linha 16.dtDates(2» Console . no entanto. "Ju 1" . o segundo array criado. Exatamente corno você pode in icial izar variáveis simples quando as declara."Mar" . portanto. NOTA Vale a pena ressa ltar que os computadores. Next que vai da linha 5 à 7 (abordaremos o laço For .. e nâo "Out". A úl ti ma declaração é de um array dinamicamente dimensionado. Lembre-se. Esse array pode depois ser redimensionado para o tamanho correto com a palavra-chave ReDim como mostrado na linha 10. de que se quiser se referir a cada um. .sMonths(IO» ANÁLISE No primeiro exemplo. "Ago" . sempre começam sua contagem com o zero.Introdução à Programação co m o Visua l Basic . envolvida em chaves. fo i declarado e in icializado.

72 Dia 3 ALERTA Tenho repetido o fato de que todos os arrays começam com O no Visual Basic . anteriormente.0) possuem duas maneiras d iferentes de atribu ir um valor a uma variável uma para variáveis simples (incluindo estruturas e arrays) e outra para variáveis de objeto. o valor de pi e o serv idor de banco de dados a parti r do qua l seu programa recupera dados. o Visual Basic podia não ser operado dessa maneira. ao declarar arrays.NET.NET . Você vai atribuir valores às variáveis (simples ou de objeto) colocando~as à esq uerda de um sinal de igllal~ dade. Em suas versões anteri ores ao Visual Basic . COllstallles são valores que não se alteram nunca ou durante a vida út il de seu programa. seria possivel definir os membros in icial e final do array.NET. a linha de CÓdigo a segui r não é válida no Visual Basic .0 a 6.NET: Dim s~gvalues(lS To Sl)As Single Atribuição A atribuição foi simplificada no Visual Basic . todos são valores constantes. É possível definir um valor como constante quando ele for declarado. Portanto. e a Microsoft removeu a necessidade dessa palavra-chave. as regras de quando usar Set eram con f usas. As constantes são declaradas usando-se as duas formas mostradas no código a seguir: . como será mostrado na decla ração a seguir.0 à 6. Constantes As constantes são outra classe de valores que você pode usar em seus programas do Visual Basic .N ET porque. Por exemplo. você poderi a usar a declaração Opt i on Base 1 no inicio de um módulo para assegu rar que todos os arrays criados nele começassem em l o De modo alternativo. 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.NET. os desenvolvedores do Visual Basic . Versões mais antigas do Vi sual Basic (Vi~ suai Basic 4 . Nenhuma dessas opções está d isponível para os arrays do Visual Basic . Feliz~ mente. as li nhas de atribuição mostradas anteriormente teriam aparecido com a seguinte f o rma: iSomeVar =1234 Set oObjectVar =New Something Contudo. como mostra o código a seguir: iSomeVar =1234 oObjectVar =New Something() NOTA Da versão 4.NET decidiram remover o método de atribu ição usado para as variáveis de objeto e empregar apenas o utilizado para variáveis simples. os meses de um ano.0 do Visua t Basic.

há muitos nomes que podem ser empregados ao declará-las.) Para qualquer valor com caracteres. O prefixo identifica o tipo de variável. pode ser preciso algum tempo para compreender como ele nomeou suas variáveis.5 mostra sugestões para um conjunto de prefixos. As convenções de nomeação. o compilador terá de usar o tipo de valor que melhor se encaixar.NET 73 COOIGO Const PI " 3. se o tipo do valor não é inclu ido. se o código for herdado de um escrito por outro desenvolvedor. A Tabela 3. o Visual Basic . ele nem sempre se leciona o melhor tipo posslvel. ele será truncado.1415 As Double Const DSN As String" "Random" ANALISE Se o tipo da constante não for descrito em uma declm-ação.NET cria os tipos de variáveis a seguir: • • Longo (Long) Para qualquer número inteiro declarado. Uma convenção de nomeação normalmente usada é adicionar um prefixo em minúsculas aos nomes das variáveis. No entanto. Em geral. poderão existir dificuldades para se conhecer o tipo da variável. De maneira semelhante. exatamente como faz com as variáveis."g . (Observação: se o valor fo r efeti vamente muito grande para um tipo duplo. quando constantes são declaradas. TABELA 3 . Duplo (Oouble) Para qualquer nümero decimal declarado. Isso pode levar a um problema quando as examinarmos posteriormente.5 Convenções de Nomeação Sugeridas Prefixo Exemplo TipO de Variâvel Byte Curto (Short) Inteiro (integer) Longo (Long) Simples (Single) byt sht bytldade shtContagem iOvelhas 1Popul acao sngGolpe i ou i nt l ou lng . A menos que a declaração esteja visíve l.Introdução à Programação co m o Visua l Basic . Algumas Sugestões para os Padrões de Nomeação Com lodos esses tipos diferentes de variáveis e tantos programadores usando-os. • String NOTA Defina o tipo que quiser quando declarar constantes. de preferência comparti lhadas. reduzem essas duas espécies de dificuldade pela identificação do tipo da variável.

NET fornecerá alguns deles. você pode acha r que são um pouco confusos. contudo. e as informações que fornecem são inestimâveis. simples (Si n91 e) ou Stri n9. Cálculos Simples Apenas ter alguns valores definidos não produz um programa. para li mitar a desordem que os prefixos causam. Você precisa fazer algo COm eles. O Visual Basic . alguns deles só iriam provocar mais confusão . Por exemplo. Para tipos de dados que começam com a mesma letra. com cada palavra separada pelo caractere sublinhado U Dois ou três caracteres significativos Constantes Enumerações disDiaSemana. O nome é todo em maiúsculas. que executam muitos dos cálculos matemáticos COmuns. De maneira semel hante.5 TABELA Convenções de Nomeação Sugeridas (continuação) Prefixo Exemplo Tipo de Variável Duplo (double) Char String Booleano Data (Date) Tipos definidos pelo usuário d ou db 1 dblJuros cIniciaisIntermediarias sNome bEstaAberto dtDataA I uguel Variáveis criadas. qual seria o tipo de dado de sVa 1ue? Poderia ser o curto (Short). No entanto. outros terão de ser escritos. TAXA_IMPOSTO c s ou s tr b dt Dois ou três caracteres importantes do nome da estrutura Nenhum prefixo. com base em estruturas equivalentes a um ponto ou retânguio poderiam ser chamadas de ptLocal e retTamanho PI. Devo admitir. para tomar seus programas mais compreensiveis. que ainda tendo a usar a letra s para strings porque tem sido empregada com freqüência. (Você tem de fazer alg uns sacrifícios para evitar a síndrome do esforço repetitivo. . Esses procedimentos vão de operadores.Dia 3 3. com freqUência será preciso usar ou criar procedimentos. . corCorFundo NOTA Por que essa confusão de um. a funções mais complexas que poderiam afetar strings ou números. No entanto. dois e três caracteres? Tenho de adm itir que alterei os prefixos que uso com o passar dos anos. E necessário efetuar cálculos matemáticos com os valores ou gerar algo mais substancial.) Quando começa r a usar esses prefixos. eles logo se tornam familiares. estendi o prefixo em alguns caracteres. Minha filosofia básica era originalmente empregar só um caractere.

cálc ulos matemát icos.4 (Y é igual a 2) y " X • 2(Yéiguala (2) y " X / 2 (Y é igual a 3) y " X \ 3 (Y é igual a I) • / \ Mod & y :: X Mod 3 (Y é igual a 2) S " "01 ã " & "Mundo" (S é igual a "Olá Mundo") X +:: 2 (X é igual a 8) X -= 3(Xéiguala5) . mas só retoma um número inteiro Abrev iatura de módu lo.NET Uso Exemplo Operador :: + Atribu i um valor a outro Soma dois va lores Subtrai um valor de outro Multi plica dois valores Divide um valor por outro Divide um valor por outro. . retorna o reslO de uma divisão Associa duas strings Sím bolo para adicionar um valor e atribuir o resultado Sím bolo para subtrair um valor e atribu ir o resultado Símbolo para mu lt iplicar um va lor e atribuir o resultado Símbolo para dividir por um valor e atribuir o resultado x" 6 Y " X• 7 (Y é igual a (3) y " X .6 Opera dores Com uns do Visual Basic ." .NET. A maioria dos operadores deve ser fami liar a você como símbolos algébricos comuns.NET.6 lista os operadores mais usados.N ET 75 Usando Operadores No Visual Basic .NET possui muitas funções internas. John") 3"4 (3 elevado a 4. TABElA 3. manipulação de strings e assim por diante. o Vi sual Basic .~ x *" 6 (X é igual a 30) X I" 5 (X é igual a 6) &~ Símbolo para acréscimos a strings e atribuição do resu ltado Eleva um valor a potência de um expoente S &= " . alguns deles são exclusivos da programação. A Tabela 3. os operadores executam cálculos simples e ' fu nções' semelhantes. No entanto.NET Framework . retoma 8 I) Funções Internas Além das fornecidas pelo . Essas funções geram vários recursos lIteis. incluindo a conversão de um tipo de dado em outro. John" (S é igua l a "Olá Mundo. Você deve conhecer algumas delas para poder prossegu ir com o estudo do Visual Basic .Introdução à Program ação co m o Visua l Basic .

Convene para um tipo longo (Long). Se você quiser que o Visual Basic . TABElA 3. O que for avaliado como falso (Fa 1se) ou Dserá configurado como falso (Fa 1se). ele será perdido. no entanto. Converte para uma data (Date).NET são as de conversão. será definido como verdade iro (True). Converte para uma String. As frações são arredondadas para o valor mais próximo. As frações são arredondadas para o valor mais próximo. apresentará o formato abreviado. Converte para um tipo curto (Short). Convene para um tipo Byte. As frações são arredondadas para o valor mais próx imo. Se o valor for maior do que 65. As funções de conversão se torna· mm ainda mais importantes nessa versão do Visual Basic porque ela é muito mais restrita com relação aos tipos de dados.7 descreve as principais funções de conversão. Todos os valores maiores do que 255 ou informações fracionárias serão perdidos.7 Funções de Conversão Descrição Função CBool Converte para um booleano (Bool ean). Todas as funções de conversão do Visual Basic . poderá desativar a verificação restrita de tipos adicionando Option Stri ct Off no inicio de seus arquivos. Converte para um tipo duplo (Doubl e). CByte CChar CDate CObl Clnt CLng CSht CStr .76 Dia 3 Funções de Conversão Algumas das funções mais importantes disponíve is no Visual Basic .NET converta de modo automático os tipos de dados. só o primeiro caractere será alterado. Se o valor for uma data (Date). Ctype.NET começam com a letra 'C' (como na palavra conversão) e terminam com uma forma abreviada do novo tipo. e não converte automat icamente um tipo em outro como as anteriores faziam. CDate pode reconhecer alguns dos formatos mais com uns de inserção de datas .NET converter uma variável quando essa operação não for esperada. Se voce converter uma St ri ng. erros) se o Visual Basic . Elas permitem que um tipo de dado seja convertido em outro. É bom saber. Converte para um único caractere. que isso poderia levar a resultados inesperados em seu código (ou seja. caso contrário. que pode efetuar conversões para qualquer tipo. Converte para um inteiro (Integer). Além disso. Uma das fun ções ma is avançadas de conversão. há uma função genérica.535. A Tabe la 3.

NET pela funciona lidade interna da classe String (exam inaremos a classe String com detalhes no Dia 7).NET 77 TABELA 3. NovoTipo) onde oNova Variave 1 e oVori ave lAnterior são lugares reservados para as variáveis resultante e original da conversão. O tipo que surgirá após a conversão será o inserido em NovoTipo. começando com o da extrema esquerda. portanto. ('iValue é eh. 2) Right sValue" Right("O lc'i Mundo". respectivamente. ('sValue é igual a undo). é possível usar essa função para efetuar conversões para tipos de objeto.Introdução à Programação com o Visua l Basic . enumerações e estruturas.7 Funções de Conversão (continuação) Descrição Função CType Converte para qualquer ti po. Portanto. assim como para tipos simples. SINTAXE A s intaxe de Clype é oNovaVariavel = CType(oVariavelAnterior. É uma função poderosa que permite a conversão de qualquer tipo de dado em outro. Funções de Manipulação de Strings A maioria das fun ções anteriores re lacionadas a stings no Visual Basic foi substituída no Visual Basic . No entanto. Também precisa da quantidade de caracteres a retomar. Retoma o valor ASCII ou Unicode Retorna caracteres de uma string. Também precisa da quantidade de caracteres a retomar. sValue " Chr(56} ('sValue é igua l a letra A). você pode ver alg umas das funções do código anterior listadas na T abela 3. TABelA 3. iValue" Asc("A") ('iValueé igua la 56). ('sValue é igual a O).8 Funções de Manipulação de Stri ngs Descrição Exemplo Função Retorna o comprimento de uma string. sValue" Left("Olc'i Mundo". Retorna caracteres de uma string. começando com o da extrema direita (o oposto de Left). Ase Left Retorna o earaetere com base no valor ASCII oU Unieode inserido.8 para se familiarizar com e las. Ele pode ser qualquer variáve l ace ita depois de As em uma declaração. a sintaxe dessa função é um pouco diferente das outras. iValue " Len("Olc'i"} igual a 3). 4) .

Comprimento) onde Inicio é o caractere a part ir do qual retornar. e Comprimento é a quantidade de caracteres (inclu indo Infcio) a retomar. St ringPesquisada. . a pesquisa diferenciará maiúsculas de minúsculas. como a de iValue = InstrO. .8 Funções de Manipulação de Stri ngs (continuação) Descrição Exemplo Função Mid Retorna caracteres que não estão em nenhuma das extremidades de uma string. não diferenciarã. Um recurso interessante é que se você omitir Comprimento. onde o programa iniciará a busca (a contagem começa em I). Se a string procurada não for encontrada. "1") ('iValue é igual a 2). 3. Instr Encontra uma string dentro de outra. E úti l quando se procura a lguma string em um arquivo. Se for ignorado ou config urado como 1 (correspondência textual). Mid retorna qualquer número de caracteres. Se estiver configurado como O (cOliespondência binária). ('sValue é igual a Mu ndo). "Olá Mundo" . Lembre-se de que a string que você está procurando pode ter vários caracteres. A sintaxe da função Instr é iReturn = Instr(CaractereInicial .Dia 3 TABELA 3. CoractereInicial é a posição na StringPesquisado. A variáve l i Retu r n seria igua l a posição na StringPesquisoda onde o ltemProcu rodo começa. Sua sintaxe é sReturn " sValue = Mid("OU Mundo". i Return será igual a O. portanto. 5» ('sValue é ig ual a ã Mun). TipoCorrespondêncio deteml ina se a busca irá diferenciar maiúsculas de minúsculas. "Olá Mundo". em uma busca por "Mundo".Mid("Olêi Mundo". sVa lue . TipoCorrespondência) iVa l ue = Instr(l. ltemProcurado. InIcio. StringPesquisodo é onde será executada a busca e ltemProcurodo é a string que se quer encontrar. produzirá o retomo de todos os caracteres desde InIcio . "Mundo"» 'i Val ue é igual a 5. 4) Mid(String.

Aqui encontraremos as que pennitem a determinação do tipo de uma variável. "o") 'iValue é igual a 9. no resto. TypeName(sName) retomaria "String" . Remove todos os espaços que precedem uma string Remove todos os espaços que sucedem uma string Remove todos os espaços que antecedem e sucedem uma string sValue sValue Value sValue sVa lue = LCase("OIc1 Mundo") UCase("OIc1 Mu ndo") 'sValue é igual a olá mundo = 'sValue é igual a OLÃ MUNDO = Ltrim(" Olé Mundo ") 'sVa 1ue é igual a "01 é Mundo = " Rtrim(" Trim(" Olé Mundo ") Olé Mundo" Mundo ") 'sValue é igual a" = oa 'sValue é igual a "Olé Mundo" Outras Funções Úteis Finalizaremos com algumas funções geralmente úteis que não se enquadram nas outras categorias. por exemplo. assim como funções de manipulação de datas. I nstrRev será útil quando você estiver pesqu isando uma string que apresente um caminho de diretório e quiser visualizar primeiro os diretórios infe• nores. A Tabe la 3. TABELA 3. Retoma True se o parâmetro for reconhecido como um número.8 Função Funções de Manipulação de Strings (continuação) Descrição Exemplo InstrRev pesquisa do lado direito da string.Introdução à Programação com o Visua l Basic .9 Funções Internas Diversas Descrição Função IsArray IsDate IsNumeric IsObject TypeName Retoma True (verdadeiro) se o parâmetro for um array. iValue = InstrRev("OIc1 Mundo".NET 79 TABELA 3. Converte uma string em maiúscu las. . Retoma True se o parâmetro for reconhecido como uma data. Lcase Ucase LTrim Rtrim Trim Converte uma Slring em minúsculas.9 descreve algumas dessas funções. Retoma o nome do tipo de dado do parâmetro. é idêntica a Instr. Retoma True se o parâmetro for algum tipo de objeto.

mas não retoma nenhum valor.NET tornará fác il a criação de suas rotinas.porexempIo. estou cozinhando o jantar enquanto escrevo isso. Escrevendo Suas Próprias Rotinas Embora as funções internas sejam bastante úteis.m. "Adicione uma porção de vinagre a três de óleo". Sim. As sub-rotinas permitem que um pequeno trecho de seu programa seja isolado.. Para criar suas sub-rotinas. . São as chamadas sub-rotinas (ou.. se tiver de usar um código em vários aplicativos. Em geral é aconselhável inserir em uma sub-rotina um código que será executado mais de uma vez. de modo que. Pode ter de selecionar um conjunto de funções internas que sejam chamadas da mesma maneira ou talvez gerar alguma funcionalidade excl usiva. Por exemplo. use a palavra-chave Sub: SINTAXE Sub NomeSubRot i na{Parametrol As Type. Em um momento pode-se misturar uma xícara de vinagre a três de óleo. Isso não significa que a sub-rotina sem pre executará exatamente as mesmas etapas. O outro tipo de procedimento executa algo. mas que realizará alguma tarefa. sempre haverá vezes em que você precisará criar suas rotinas. . só seja preciso referenciá-lo pe lo nome. o Visual Basic . podem ser somente três co lheres de sopa de vinagre para nove de óleo. ParametroN As Type) 'I nsira o que quiser aqu i End Sub Nessa sintaxe. De maneira semelhante. sub). Ele exibe infonnaçõcs na tela. . De qualquer modo. na abreviatura. (meia-noite). é bom que também o coloque em uma sub-rotina. Sub-Rotinas Uma sub-rotina é um bloco de código do Visual Basic . mas não retorna nenhum valor.9 Funções Internas Diversas (continuação) Descrição Função Now Today Retorna a data e a hora atual. Use as sub-rotinas para executar tarefas em seus programas. fo i executada a sub-rotina CrieVinagrete. enquanto em outro. Há dois tipos de rotinas usadas no Visual Basic . Essas são denominadas funções.NET.. De qualquer modo. cada parâmetro define um valor que tem de ser passado para a rotina.2 mostra a declaração e o uso de uma sub-rOlina.Parametr02 As Type. Retoma a data atual. WriteLine que você vê em muitos dos exemplos.Dia 3 TABELA 3. A Listagem 3. o método Console . em vez de repetir todo o bloco de código. Um deles é a rotina que executa algo. porém retornando um valor.NET que executa alguma tarefa . um receita pode instruir. com a hora configurada como 0:00:00 a.

ParametroN As Type) As TipoRe- 'Insira o que quiser aqui Return VolorRetornado End Function Nessa sintaxe. A linha 4 mostra urna maneira possível de chamar a sub-rotina. Gerar uma função é semelhante a definir novas sub-rotinas. passando a string "Olá Mundo do V.2 Criando e Usando uma Sub.NEl" . Ela termina com a palavra-chave End Sub (linha 3). ela apenas exibe o conteúdo do parâmetro na janela do console. corno vemos na linha I.Write Li ne( Messa ge) 2 3 End Sob 4 ShowMessage("Olá Mundo do Visual Basic . TipoRetornodo é o tipo de dado que a função retoma. Funções Criar suas funções permitirá que você insira novos recursos em seus ap licativos.Introdução à Programação co m o Visual Basic .. ByVal Hei ght As Integer) As Integer 3 Return length *Width *Height 4 End Funct i on 5 6 Conso l e. Nesse caso.MEl") ANÁLISE Nossa sub-rotina começa com a palavra-c have Sub. Formalmente. o valor que será retomado pela função.4. sua 1 Bas.. como mostrado abaixo: SINTAXE Function NomeFunção(Parâmetrol tornado As Type .NET 3. A sub-rotina se chama ShowMessage e usa um parâmetro quando é chamada. cada parâmetro define um valor que terá de ser passado para a rotina.3 mostra a declaração e o uso de uma função sim ples. 2 ByVal Width As Integer . .5» Escopo Novo TERMO Escopo é uma dessas palavras adoráveis do jargão da infomlática que signi fica "Quem mais pode me ver?". identifique o valor a ser retornado. e ValorRetornado. exceto por ter de ser definido o tipo de valor retornado. No interior está o código real executado pela sub-rotina.3 Cri ando e Usando uma Função 1 Function Volume(ByVa l leng th As Integer . o escopo define a visibi lidade das variá- .Writeline(Volume(3. CÓDIGO LISTAGEM 3. A Listagem 3. c . Dentro do procedimento.rotina 81 COOIGO LISTAGEM 1 Sub ShowMessage(ByVal Message As String) Console.

As variáveis Priva te ficam disponíveis no módulo ou classe onde são declaradas. o Escopo e os Procedi mentos Exatamente como as variáveis podem ter um escopo. introduzindo um erro em seu programa. Criando-a com a palavra-chave Pri vate. No entanto. Elas são usadas com freqüência em apl icat ivos quando se precisa de uma (mica variável que possa ser empregada em vários procedimentos. que rotinas poderiam usar uma cena variável.você poderia reutilizar com freqüência (propositada ou acidentalmente) uma variável em qualquer local de um programa. Se fizer isso.82 Dia 3 veis de um programa. mas serão úteis quando você precisar de algum valor que será empregado em muitos pontos de seu programa. Muitas versões mai s antigas do BA SIC não ti nham o recurso do escopo. que existem globalmente. Elas são variáveis globais. Alé agora. Isso poderia levar a uma fa lha se o va lor fo sse a lterado em algum ponto. Se você só for usar uma variável em um procedimento. os procedimentos (sub-rotinas e funções) também possuem um. só para que se cometesse o erro de Icr posteriorm ente o novo valor. estaremos perm itindo que todos os procedimentos de um módulo ou classe acessem a variável . ou. como um valor intermediário que possa ser utilizado por funções diferentes para executar um cálculo. quando o pretendido fosse o original. por todo o ap licativo. Imag ine escrever um programa naquela época . poderá usar duas outras palavras-chave. O escopo para os procedimentos significa o mesmo que para as variáve is: . Penn itir que todas as rotinas conheçam todas as variáveis poderia levar uma rotina a 'acidentalmente ' alterar o valor de uma variável. Devem ser usadas parcimoniosamente. Use as variáveis Private e PlJbl ic no nivel de módulos com m oderaçã o. Public e Private: • As variávei s Pub 1ie ficam disponíveis em todo o aplicat ivo. isto é. temos em geral declarado as variáveis por meio da palavra-chave Oim dentro dos proced imentos. As variáveis Pri va t e são útei s para comparti lhar informações com uns necessárias a uma tarefa. é bom declará-Ia o mais próximo possivel de onde ela for necessária . declare -a dentro dele. Você pode não querer que todas as rotinas acessem todas as variáveis. corno a conexão a um banco de dados. ou um arquivo. e todas as variáveis podiam ser acessadas e alteradas de qualquer parte do programa. Por Que o Escopo É Importante? o escopo permite que você isole os dados usados pelos procedimentos de se u aplicativo. você também pode declarar as variáveis externamente para torná-las disponíveis a vários procedimentos. • DICA Quando for criar uma variável.

Exam inaremos essas palavras-chave posterionnente.129.000 .4 most ra o cód igo de uma execução do programa. com juros fixos de 5 %. ele também possui o mesmo significado.Introdução à Prog ramação co m o Visua l Basic . mas as outras não precisariam usá-lo. Exemplo de Aplicativo: Calculando um Valor Futuro Agora que você já explorou a criação e uso de variávei s e proced imentos. Depósito Mensa l : 200 Período do Invest imento em Anos: 30 7 Se você começa r com U$$10. poderá gerar um aplicati vo que execute o cálcu lo de um investimento. Neste exemplo de apli cativo do console evitaremos a complexidade que uma interface gráfica com o usuário adicionaria. OO 8 e investir US$200.N ET 83 ele descreve em que outro local de seu programa você pode usar o procedimento (ou fora de seu programa. 11 Seu saldo final ser á: $211. .17 Aqui vemos o resultado de se começar com um saldo de US$1 0.000 adicionando US$200 por mês durante 30 anos. • • Publ i c O procedi mento pode ser chamado de qualquer parte do ap li cat ivo. as palavras-chave adicionais de escopo serão aplicadas quando você estiver criando objetos no Visual Basic . Private O procedimento só pode ser chamado a partir de outro que esteja situado dentro do mesmo módulo ou classe onde foram definidos. CÓDIGol RESULTADO LISTAGEM 3. como veremos quando começarmos a criar objetos). Do mesmo modo que com as variáveis. Isso será úti l quando você estiver escrevendo várias rotinas de suporte usadas no decorrer de um cálculo. O escopo do procedimento é definido com o uso das mesmas palavras-chave empregadas para o das variáveis. para 5% insira 5) :5 . Esse é o padrão se você não ad icionar nenhuma outra palavra-chave.4 O Programa de Cálculo de Investimentos 1 2 3 4 5 6 InvestCalc.exe Saldo Inicial : 10000 Juros Anuais (por exemplo .NET. Em geral. A Listagem 3. Esse ap licativo pennitirá a aná lise dos beneficias maravilhosos do investimento regular e dos juros compostos.OO por mês 9 durante 30 anos 10 a 5% de juros.

Dê um clique com o botão dire ito do mouse no projeto do Solution Explorer e selecione Properties. e o Visual Basic . .NET. Altere o nome de Startup Object também. Por sua vez. Precisa de ao menos quatro variáveis para armazenar a entrada do usuário. Modul eI.1 ) .. Juros Anuai s. O visual Basic .NET a inclu i como uma de suas funções internas. Selecione um novo aplicativo do console. Comece criando um novo projeto no Visual Basic . altere o Startup Object para Invest. Na página General . com exceção de Periodo. no Solution Exp lorer e selecione Rename.Dia 3 o programa requer que o usuário insira os quatro valores (Sal do Ini ci al .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.6. 2.5 Declarações para o Cálculo do Valor Futuro I 2 3 4 Private Private Private Private dblJurosAnuais As Double = O iPeriodo As Integer = O decSaldolnicia l As Double = O decOepositoMensal As Oouble = O 5. Use a rot ina Mai n para chamar as rotinas de obtenção das entradas do usuário. Essas declarações devem ocorrer entre as linhas Modul e e Sub Mai n( ) porque as variáve is estarão no nível do módulo. Essa operação é conhecida como cálculo do valor futuro (FV). ele calculará o saldo final. A fórmula do Valor Futuro é A FV = DepositoMensal *((1 + JurosMensais) A Meses . Dê um clique com o botão direito do mouse no nome do arquivo. 4. Feche ajanela do arquivo e o renome ie usando o Solution Explorer. vb.NET criará um projeto com um módu lo. Declare-as como mostra a Listagem 3. execução dos cálculos e exibição do resultado. Você está pronto para começar a cod ificar. jJurosMensais )+ Saldolnicial * ( 1 + JurosMensais ) Meses As etapas a seguir descrevem esse procedimento para que você possa compreender melhor como funciona: 1. como na Listagem 3. 3. CÓDIGO LISTA GEM 3.5. Ele deve estar na lista suspensa. Altere o nome do arquivo para modInvesLvb. CÓDIGO LISTAGEM 3. Depôsito Mensal e Período do Investimento em Anos). A maioria desses valores é de numeros de ponto flutuante.

cada fu nção principal do apli cativo é uma sub-rotina ou função separada.7 A Rotina das Entradas Console . Dessa maneira. Já que esse é um aplicativo do console.N ET 85 CÓDIGO LISTAGEM 3.Introdução à Program ação co m o Visua l Basic . 9 decSaldolnicial) 10 'exib icao do resu lt ado 11 DisplayResults(decResultado) 12 End Sub Na Li slagem 3 . Read 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Private Sub GetlnputValues() Console . CÓDIGO LISTAGEM 3. Em vez de reescrever o cód igo para solicitar informações ao us uário várias vezes.7. o código res ultante para GetInputVa 1ues será simplificado.6 Rotina Main (continuaçào) 7 iPeriodo . Adicione o código da Listagem 3. Isso permitirá que você altere ma is rapidamente as técnicas para obter as entradas ou exi bir o resultado posteriormente. isole-o e crie um proced imento para executar a tarefa. nem retorna um valor. para 5% . você empregará a rotina Cons01 e. Writeline() decSaldolnicial " CDec L GetValue("Saldo Inic i al: ")) dblJu rosAnua i s " CDb l(_ GetValue("Juros Anuais (por exemplo . ins ira 5) : ")) decDeposHoMensal =COec(GetValue{"DepõsHo mensal : ")) iPeriodo " Clnt(GetValue{"Período do i nvest imento em anos: ")) Console.Readline End Function O bserve que a sub-rotina GetInputVal ues chama a função GetVal ue. O procedimento não usa nenhum parâmetro. Read para obter valores.Writeline() End Sub Private Funct i on GetValue(ByVal Prompt As St r ing) As String Console . . Write(Prompt) Return Conso l e. Esse é um exemplo da criação de rot inas de suporte. _ 8 decDepositoMensal .7 para permi tir ao usuário inserir informações. 6.

_ 4 ByVal Saldoln i cial As Double) As Double 5 'divida por 1200 para torná-lo um percentual mensal 6 Dim decJurosMensais As D ouble = CDec(Juros Anuais /1200 ) 7 Dim iMeses As Integer = Período * 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 . mas por enquanto.1) / decJurosMensais) 14 + (Saldoln. composta de várias chamadas a Consol e.Write Li ne(U durante {O) anos". CÓDIGO LISTAGEM 3. CÓDIGO LISTAGEM 3. _ 3 ByVal DepositoM ensal As Double . Esse procedimento deve pegar o valor a ser exibido e não retornar nada.WriteL i ne() Console. mostrado na Listagem 3.". " .cia l * decTemp» 15 R eturn decReturn 16 End Function . Escreva a rotina que exibirá a saída quando for calculada . WrlteUne(U e investir {O:c} por mês" . No final .8 A Rotina de Saída Console . 2 ByVal Peri odo As Integer. Execute a cálculo do valor futuro.9 mostra a função CalculateFV.WriteUne("Se você começar com {O:c). Resultado) 9 End Sub Essa é uma rot ina simples. para exibir as informações.86 Dia 3 7. WriteL i ne.8.9 A Função CalculateFV 1 Private Function CalculateFV(ByVal JurosAnuais As Double . decSaldolnicial) Console . A Li stagem 3. Como possu i um valor de retorno. dblJurosAnuais) 7 Console. esse proced i· menta ê um a fu nção. WriteLine 1 Private Sub DisplayResults(ByVal Resultado As Double) 2 3 4 5 6 Console .Wr"iteLlne("Seu saldo final será : 10:c)" .Wri teL i ne() 8 Console . iPe riodo) Console . llse o procedimento Canso 1e . Essa rotina deve usar os quatros valores como parâme· tros e retornar o resultado do cálculo. decOepositoMensal) Console. Wri teL i ne para exi· bir os valores inseridos e o resu ltado do cálculo. WriteUne(" a {O) % de juros. ela poderá ser exibida em uma janela. 8.

você poderia ter isolado o código que calculou o valor de decTemp.W rite(Prompt) 38 39 . já que só precisamos desse cálculo nessa rotina e é bem provável que ele não seja mais necessário.N ET 87 Exatamente como em GetInputVa 1ues. A Listagem 3. _ ByVal DepositoM ensal As Double . iPeriodo. ByVal Periodo As Integer.Introdução à Programação co m o Visua l Basic . foi melhor não fazê-lo. CÓDIGO LISTAGEM 3.10 O Programa Completo de Cálculo de Investimentos 1 Modu le Invest 2 3 Private dblJurosAnuais As Ooub l e = O 4 Priv ate iPeriodo As Integer " O 5 Priv ate decSa ldolnicia l As Double = O 6 Private decDepositoMensal As Double " O 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 Sub MainO Dim decResultado As Double 'obtenção dos valores das entradas GetlnputValues() 'cãlculo decResultado = Ca l culateFV(dbIJurosAnuais. decSa ldoInicia l) 'exibição do resultado DisplayResults(decResultado) End Sub Priv ate Function CalculateVF(ByVal JurosAnuais As Double . _ decDepos itoMensal .lo um pe rcentual mensa l Dim decJurosMensais As Double " CDec(JurosAnuais / 1200) Dim iMeses As Integer = Periodo * 12 Dim decTemp As Double Dim decReturn As D ouble 'precisaremos desse valor em alguns loca is decTemp = CDec«1 + decJurosMensais) A iMeses) decRe turn " COec( OepositoMensal * «decTemp -1) / decJurosMensais)_ + (Saldolnicial * dec Temp) Return decReturn End Function Pr iv ate Function GetValue(ByVal Prompt As String) As Stri ng Console . 10 mostra o cód igo completo para o exemplo do aplicativo._ ByVal Saldolnicial As Doub l e)As Double 'divida por 1200 para torná . No entanto.

O resultado deve ser semelhante ao mostrado no início desta seção. Você pode tentar fazer uma experiência surpreendente com esse programa decá1culo.WrHeLine("Se você começar com {O:c}.NET e serão usados cm todos os t ipos de aplicativo. decDepositoMensal) 57 Console. A lém disso. dblJurosAnuais) 59 Console. é provável que a janela exibida desapareça muito rapidamente para que se possa ver a resposta.NET e como empregá-las.WrHeLineO 60 Console. WrHeLine(" e investir {O:c} por mês". ".WrHeLine("durante {O} anos". Wr'iteLineO decSaldoln i cial = CDec(GetValue("Saldo Inicial : ")) 43 44 45 46 47 48 49 50 51 dblJurosAnuais = lO» CObl (GetValue("Juros Anuais (para 5% insira 5): .WrHeLine("a {O} % de juros.". Execute o aplicativo.NET quanto as que podem ser criadas. .WrHeLine("Seu saldo f inal será: 10 : c)".88 LISTAGEM 3. decSaldo Inicial) 56 Console . tanto as que estão embutidas no Visual Basic . examinando os diversos tipos de variáveis que você pode criar no Visual Basic . 10 Dia 3 COOIGO O Programa Completo de Cálculo de Investimentos (continuação) 40 41 42 Return Console . cigarros. ReadLine End Function Private Sub GetlnputValues() Console . explorou o conce ito de fu nções e sub-rotinas. No entanto. WrHeLine() End Sub 52 53 54 Private Sub DisplayResults(ByVal Resultado As Oouble) Console. Insira os valores dos depósitos que representam quanto você costuma gastarem um hábito mensal (almoço no trabalho. Esses dois tópicos são fundamentais para sua compreensão do Visual Basic . Em vez disso. dispositivos eletrônicos) . iPeriodo) 58 Console. Resultado) 61 End Sub 62 End Module 9. Resumo A lição de hoje avançou bastante. O valor futuro resu ltante em gera l é perturbador.WrHeLineO 55 Console. execute o programa a partir do prompt de comando processando o executável criado. decDepositoMensal = CDec(GetValue("Depósito mensal: "») iPeriodo = Clnt(GetValue("Período do investimento em anos : ") Console . Você pode executar o apl icativo a partir do IDE dando um clique no botão Pl ay da barra de ferramentas.

P&R P Li que o Visual Basic .Ia no Object Browser. Além disso. " Respostas dos Testes/Exercicios" . define certas regras: que espécie de informações ela representa. selecionar qual tipo de procedimento será criado é uma questão de op inião pessoal e/ou empresarial. . O Visual Basic . revisar o que já aprendeu e começar a pensar em como colocar seu conheci mento em prática.efelivamente levam a uma escolha.Introd ução à Prog ramação co m o Visual Bas ic . Se for preciso gerar um procedimento que execute alguns cálculos ou mani pulações e retorne o resultado. poderá encontrá. Object Browser Se tudo que você precisa é de uma descrição breve de um a fu nção interna. ele deve ser uma s ub-rotina ou uma função ? R Uma resposta breve seria.dll . "Controlando o Fluxo dos Programas".li ne contém descrições e exemplos de cód igo de todas as fu nções internas. onde pode ser usada e assim por diante. Algumas pessoas e empresas sempre usam funções. continuaremos a explorar a criação de códigos no Visual Basic . é bom usar uma função. Você pode encont rá. P Quando quiser criar um procedimento. As funções internas se encontram na seção Microsoft. As respostas do teste estão no Apêndice A. A lguns são óbv ios. Outras rotinas . O que é isso? R Quando você declara o tipo de uma variável ou função . " Depende". • Workshop o Workshop foi planejado para aj udá-lo a antecipar possíveis dúvidas. Todas as variáve is são. apenas preferênc ias.NET é o único membro da famí lia Visual Studio que dá s uporte a esse tipo de programação. Se for evidente a inex istência de um valor a ser retomado.NET examinando como você pode gerenciar as decisões em se us programas. objetos que podem conter qualquer tipo de informação. out ras criam sub-rotinas quando necessário . P Como posso encontrar a lista d e todas as funçõ es internas? R Há duas maneiras pelas quais você pode encontrar informações sobre as funções internas: • Aj uda on-line A ajuda on. não há escolha co rreta. A programação sem lipos ocorre quando o ti po não é declarado.Net dá suporte à prog ramação ' sem tipos' .los (on-U ne) procurando por Visual Basic Language Reference. Vis ualBasic. Other Wi ndows e Object Browser. então.N ET 89 No Dia 4.aquelas q ue podem ou não ter de retornar um valor . Você deve criara tipo de procedimento que forneça a fu ncionali dade necessári a. Abra-o selecionando View.

o período em meses e calcular o valor de seus pagamentos.90 Dia 3 Teste I. onde poderá ser usada em um programa? Exercícios I. Como devo decidir que ti po de variável usar quando estiver trabalhando com nluneros? 2. os juros anuais. 4) B: RaiseToPower 3. ByVal Power As Integer)As Long A: Dim lValue ~ RaiseToPower(3 .4)) O: Dim lValue =Ra iseToPower 3. vate. A fórmula para esse cálculo é Pagamento = Quontiofmprestimo * (JurosMensois * «1 Meses) I «(1 + JurosMensois) A Meses) .4 3.1)) + JurosMensais) A . Se uma variável for declarada com o uso da palavra-chave Pr.4 C: Console. Qual a maneira correia de chamar esta sub-rotina? Function RaiseToPower(ByVal Number As Integer . Ele deve sol icitar a quant ia do empréstimo.WriteLine{RaiseToPower(3. Reescreva o exemplo do aplicativo para cálculo do valor futuro de modo que represente o pagamento de um empréstimo em vez de um investimento.

este livro abordou a criação de programas de computador. abordarei di versas variações dos tipos. e o Visual Bas ic . Até o momento. mas para escrever um que seja realmente útil. você precisa de mais alguns elementos essenciais.SEMANA 1 DIA Controlando o Fluxo dos Programas Até agora. Para que um programa seja realmente interativo. para que use caminhos diferentes no decorrer do código dependendo das entradas que receber. e você aprenderá que instrução específica é melhor para uma situação em particular. A determinação ocorre . cada linha era executada em ordem quando o programa era processado. uma instrução de controle. Tomando Decisões com as Instruções de Controle As inslruções de COnlrole são aque las parles de lima linguagem de programação que existem apenas para determinar que outras partes do programa serão executadas. Quase toda linguagem de programação possui instruções de controle. Nesta lição você aprenderá sobre as duas categorias de instruções de controle: • • Instruções condicionais Jnstruções de laço Em cada categoria. estivemos desenvolvendo prog ramas compostos de uma série linear de instruções.NET não é uma exceção. é preciso um novo tipo de instrução.

Novo TERMO Quando descrevemos um prob lema por meio de uma linguagem que é algo entre nossa maneira habitual de falar e códigos de computador. use urna instrução de controle a fim de que possa verificar uma cond ição (nesse caso. ela determina se o bloco de código interno será executado ou não. para perm itir que o programa ex iba uma mensagem diferen te dependendo da hora do dia. Se for antes do meio -dia. você poderi a dizer. porém antes das 6 da tarde. Usando a li nguagem com um para descrever o que esse código faz. A Instrução I f A instrução de controle I f é a mais sim ples. essa provavelmente seria a descrição integral fornec ida. Ela possui vários formatos diferentes. a hora) e. e é a mai s comum em quase toda li nguagem de programação. Muitas pessoas. o pseudocódigo poderia ter a aparên• • cla a seguIr: Quando o programa for iniciado . Por exemplo.. a saudação na hora da conexão. Pode ser muito mais fác il descrever um programa inteiro em pseudocódigo antes de compor o código real (isso se tomará excessivamente importante quando você lidar com programas mais complicados). consideremos um código que consistiria apenas em uma pequena parcela de um aplicativo. exiba "Bom Dia !" Se for depois do meio-dia . Mesmo esse exemplo simp les mostra a necessidade de tomar algumas dec isões no código. cm seguida.. e a cod ificação poderia ser iniciada exatamente nesse ponto. usando a saudação apropriada dependendo da hora do dia". mas basicamente tem a segu inte aparência: If <condição >Then Código a ser executado se a condição for verdadeira End If A <condi ção> é a parte essencial dessa instrução. Esta Iição fornece vários exemplos do uso desse tipo de lin- guagem para descrever o que seus programas devem fazer. "Dá as boas-vindas ao usuário que iniciou O programa.92 Di a 4 por causa do valor de algumas variáveis ou outra circunstância. Para transformar isso em código. A necessidade desse tipo de com portamento é evidente quando você percorre a maioria dos program as que usam pseudocódigo. acham essa maneira útil para planejar o fluxo de seus programas de um modo que lei- gos também possam compreender. Com relação a essa tarefa específica. Para um trecho tão pequeno de cód igo.. que é uma combinação de valores e operadores avaliada no tempo de execução para gerar um único valor. incl uindo os autores deste livro. escolha que ação tomar. Já que a instrução . exiba "Boa N oite!" Continue com o restante do programa . permiti ndo que o programa aja diferentemente dependendo da situação .. exiba "Boa Tarde!" Para qualquer out ra ho ra. Essa condição torna a fonna de uma expressão. chamamos essa descrição 'quase em código' de pseudocódigo.

Expressões que retornam verdadeiro ou fa lso são conhecidas como boo/ealTas. Estamos em um horário depois do meio-d ia. O que isso sign ifica? A expressão "3 + 5" não tem um resultado que possa ser avaliado como verdadeiro ou fal so e. iremos voltar ao exemplo original do pseudocódigo. exiba "Boa Noite!" Continue com o restante do programa .Controlando o Fluxo dos Programas 93 I f dá suporte a apenas duas ações possíveis . então.. Quando o programa for iniciado . elas se enquadram como a condição de uma instrução I f . portanto. considere estas expressões: • 3+5 • John • Quarta-feira Agora. encerre o programa". Não há meio lermo e. exib indo uma saudação no início de um programa. Se a hora atual no s i stema for menor que meio-dia então . a instrução I f não faz nenhum sentido. Se fo r antes do meio-dia.. porém antes das 6 da tarde. Cada uma dessas expressões é verdadei ra ou não. Se você tiver alguma dúvida sobre a conformidade de urna expressão em particular.NET. portanto.. A seguir. como estes exemplos: • • • Estamos em um horário antes do meio-dia. pode valer a pena aproximar essas mesmas li nhas (legíveis pelo usuário) um pouco mais do que seria um código. teste uma dessas expressões em seu pseudocód igo: "Se 3 + 5. exiba "Bom Dia !" Se for depois do meio-dia . exiba "Boa Tarde!" Se a hora atual no s i stema for igualou maior que 6 da tarde . exiba "Bom Dia!" Se a hora atual no s i stema for igualou maior que meio-d ia e a hora atual do sistema também for menor que 6 da tarde então . Isso significa que qualquer expressão usada como uma condição tem de apresentar um resultado definitivo "sim ou não" (Verdadeiro ou Fal so). abordarei esse assunto com mais detalhes ainda nesta lição. .. Isso pode ser feito apenas pe la reformulação do texto para fornecer mais detalhes : Quando o programa for iniciado .. exiba "Boa Tarde!" Para qualquer ou tra hora . apenas teste-a no pseudocódigo.. Por exemplo. porém antes das 6 da tarde. a expressão só deve ter dois valores. A quantidade de alunos excede à de cadei ras.o código é executado ou não . Antes de você converter esse pseudocód igo em um programa do Visual Basic .

para escrever esse programa. exiba "Boa Noite!" Continue com O restante do pr ograma . que tam bém inclui infonnações sobre a data atual e exibe várias propriedades úteis como Hour.WriteLine{"Boa Ta r de!") End If If (iHour >= 18) Then Console. Now() 9 iHour = dtCurrent.vb. portan to. A hora atual do sistema está disponívclno objcto Now{ ). Vá para o console de comando (prompt do DOS). tudo que você precisa saber é como obter a hora atual do sistema. Agora. nesse caso. . vb. vb e compil e o programa digitando vbc r:System. que retornará a hora atual representada em um período de 24 horas (valores de Oa 23). podemos nos dar por satisfe itos usando apenas Hour. o resto não deve ser tão dific il. Traduzir da mane ira mais literal possíve l do pseudocódigo para o Visual Basic.Writeline("8om Dia !" ) End If If (iHour >= 12)And (iHour < 18)Then Console .dll t:exe Greeting. DayofWeek e Seconds.. salve-o como Greet i n9. Para com pilar esse programa. 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. alterar diretório) para se assegurar de que está trabalhando no mesmo diretório do arqu ivo Greeti n9. e a maioria dos exemplos desta lição.DateTime 7 Dim iHour As Integer 8 dtCurrent = dtCurrent. LISTAGEM 4 .Dia 4 então .1 Greet i n9 . um programa executáve l com o mesmo nome do arquivo-fonte.Hour 10 11 12 13 14 15 16 17 18 19 20 21 22 23 End Class If (iHour < 12) Then Console . em seguida. por padrão. O compi lador criará. Mi nute.1.WriteLine("Boa Noite!") End If End Sub Você pode fazer o download de G reeti n9.. use o comando cd (change director)'.1 nele e. insira o código da Listagem 4. faça o download desse arquivo ou crie um arquivo de texto. NET produzi rá o programa da Listagem 4. Para nossa final idade. vb na página deste livro na Web e testá-lo.

End If.. ANALISE A primeira linha executada foi a 9. dependendo da hora do dia em que ele for processado. o que parece ser o caso aqui. e o processamento imediatamente passa para a linha 14. chamado Greeting. um valor fa lso informa à instrução I f para não executar seu bloco de código. Essa instrução tem a expressão (iHour >= 18) como sua condição. não há nada que o infonne que não há motivos para conti nuar. i Hour. portanto. A variável iHouré igual ao valor da hora atual . que se toma (l3 >= 18) e tennina como falsa. na última instrução da linha 18. A execução do programa executável recém-criado produzirá o resultado apropriado. e a tão estimulante mensagem 80a Ta rde! é exib ida no console. a expressão (iHour < 12) é avaliada. exiba "Bom Dia!" caso contrário . exibimos a mensagem correta para essa hora do dia. Essa instrução na verdade é apenas um espaço reservado. que inicializa a variáve l de data com a hora e data atuais. a instrução If tennina com uma condição verdadeira. Você poderia fazer isso dentro do IDE do Visual Stud io. ao menos não pe lo que aprendi em matemática). Nesse ponto.. no entanto. a intenção era realmente passar para a próxima instrução If. que é 13 (de acordo com o relógio do sistema. para os fins deste exemplo. nosso programa executou todo o seu trabalho. em seguida. efetivamente levanta uma questão: por que se preocupar com a execução de um código depois que você tiver obtido sua resposta? Esse é um bom ponto. Felizmente a execução passa para a última instrução End I f na linha 20 e. poderia haver muitas outras sobrando no final de um programa no mundo real. Nesse programa. portanto. Se a hora atual no s istema for menor que meio-dia então. Para compreender me lhor como essas três condições I f funcionaram. O código não encerrou sua execução. percorreremos o código e examinaremos o que aconteceu. nada acontece até a li nha 15. primeiro é red uzida para (13 >= 12) And (13 <:: 18) e. em seguida. 1 fossem apenas algumas linhas adic ionais de execução. Portanto. em segu ida.exe. A primeira instrução If é executada na linha 12. Assim . para True And True (Verdade iro e Verdadeiro). a expressão. só consegu imos um resultado verdadeiro se ambos o forem . a linha 10 salva a hora atual em outra variável. que foi reduzida a 13 < 12. Poderia ter sido mais claro em meu pseudocódigo escrevendo-o da maneira a seguir: Quando o programa for iniciado . o bloco de código é executado (linha 16). (iHour >= 12) And (iHour <:: 18). Estendendo a Instrução If Embora a Listagem 4. Nesse caso. Quando comb inamos (And) dois valores booleanos. Agora. no mesmo diretôrio. depois. apenas suponha que a décima terce ira hora é I da tarde). mas usaremos o papel para deixar todo esse esforço da máqu ina para mai s tarde. só se a aluai fosse falsa. encerra o programa.Co ntrol ando o Flu xo dos Prog ramas 95 tenninaremos com um arquivo novo. a próxima instrução If. será reduzida ainda mais para um si mples valor booleano Fa 1se (13 não é menor do que 12. Mesmo que as linhas 18 a 20 da Listagem 4.1 seja bem direta e decerto não é o programa mais complicado do mundo. Agora. a instrução If. a execução prosseguirá em End If e.

o bloco de código será executado. portanto. então. LISTAGEM 4. a sintaxe se parecerá com a descrita a seguir: If <condição> Then bloco de código # 1 El se bloco de código ' 2 End If Nessa nova estrutura. Reescrever o código para se beneficiar dessa nova instrução If aperfeiçoada produzirá a Listagem 4 . Como já deve ter sido percebido.2 Greeting_IFELSE . Agora. mas agora está claro que você só passará para a próxima instrução I f quando o valor da expressão não atender à condição da aluaI.. exiba "Boa Noite!" Conti nue com o restante do prog rama . é uma necessidade comum na programação de computadores. e o programa continuará depois de End I f. um dos dois blocos de código terá de ser processado. a capacidade de aninhar inst ruções If. se obtiver Fa l se. exiba "Boa Tarde!" caso contrário Se a hora atual no sistema for igualou maior que 6 da tarde então. No entanto. o Visual Basic e a maioria das outras linguagens fornecem uma maneira de expressar exatamente esse conceito com a instrução I f. o bloco será ignorado. Esse exemplo é quase o mesmo que o do código anterior. o bloco de código #2 será executado. essa instrução nunca fará com que os dois ou nenhum deles sejam executados ao mesmo tempo. Estivem os examinando a forma simples desta instrução: If <condição> Then bloco de código End If Se a avaliação da condição apresentar como resultado True. vb 1 Imports System 2 3 Public Class Greeting 4 'Execute o aplicativo . então. o bloco de código # I será execUlado. Já que a condição deve ser uma expressão booleana e todas elas são verdadeiras ou falsas. El se.Dia 4 Se a hora atual no sistema for igualou maior que meio-dia e a hora atua l do sistema também for menor que 6 da tarde então. e a execução continuará depois de End If.3. Você pode tornar isso um pouco mais complexo adicionando uma nova cláusula. como aqu i. e o programa continuará depois de End If.. se a condição obtiver Fa 1se. se a condição encontrar um resultado True.

Não é só um código desse tipo que pode se r inserido em uma cláusula E1 se. a instrução E1 self. para testar mais uma cond ição caso aanlerior fosse fa lsa. mas como essas instruções I f aninhadas são freqUentes. Sua sintaxe é uma condensação do que você teria de escrever se usasse I f e E1 se.vb (continuação) Shared Sub MainO Oim dtCurrent As System. vemos a sintaxe de uma instrução I f em que a cláusula E1 se contém outra instrução I f aninhada.2 5 6 7 8 Greeting_IFELSE. depois que a saudação correta foi exibida. seguida pela sintaxe que seria usada com a instrução E1esIf: If <condição #1> lhen bloco de código ' 1 E1 se If <condição '2> then bloco de código 12 End I f End If passa a ser If <condição '1> l hen bloco de código ' 1 . A seguir.OateTime Oim iHour As Integer dtCurrent =dtCurrent . Nesse programa específico. Nessa nova versão da solução. o Visual Basic acrescentou mais uma melhoria.WriteLine("Boa Tarde!") E1 se Conso1e . Essa instrução combina a funcionalidade de E1 se.Hour If (iHour <12)Then Conso1e. nem tanto. aninhei outra instrução I f dentro de cada cláusula E1 se.Write1ine("Bom Dia!") E1 se If (iHour >" 12)And (iHour <18)Then Conso1e.WriteLine("8oa Noite!") End If End If End Sub 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 End C1ass Mais simples? Não.2 é mais eficiente que a 4. Nenhum código desnecessário foi executado. mas a Listagem 4. com a possibilidade de oulra instrução If ser aninhada ou aparecer imed iatamente a seguir.Controlando o Fluxo dos Programas 97 LISTAGEM 4. o programa fo i encerrado.Now iHour =dtCurrent.1.

portanto. LISTAGEM 4. A instrução E1 seI f é considerada apenas uma cláusula e. a exibição da saudação apropriada dependerá da hora do dia.Hour If (iHour < 12)Then Conso l e . Voltando ao primeiro exemplo. Ainda seria possível inserir uma cláusula Else naquela segunda cond ição ou até mesmo outra cláusu la ElseIf.vb 1 Imports System 2 3 4 5 6 7 8 9 Public Class Greeting 'Execute o aplicativo Shared Sub Ma in() Oim dtCurrent As System.3 Greetings_Elself. e a cláusula El self (veja a Li stagem 4. Esses dois exemplos são mostrados aq ui: If <condição #1> Then bloco de cód i go I I ElseIf <condição 12> lhen bloco de cód igo 12 Else bloco de cód igo 13 End If If <condição I I> Then bloco de cód i go 1 1 ElseIf <condição '2> lhen bl oco de cód igo 12 ElseIf <condição '3> lhen bloco de cód igo 83 End I f Mesmo com outra cláusula E1 self. e só uma instrução End I f é necessária.Writeline(nBom Dia!") Elself (iHour >~ 12)And (iHour < 18)Then 10 11 12 13 14 . Now iHour ~ dtCurrent.OateTime Oim iHou r As ln teger dtCurren t ~ dtCurrent. também faz parte da instrução I f origi nal.Dia 4 Elself <condição 12> lhen bloco de código 12 End If Observe que falta um a instrução End I f complementar na segunda sintaxe do exemp lo. todo o bloco é considerado parte da instrução I f origi nal .3) permitirá que você simpli fique bastante o código.

Controlando o Fluxo dos Programas 99 LISTAGEM 4 .4. Colocar todo o código em uma linha não fará com que seja executado mais rápido. é produzir um código-fonte que ocupa menos espaço em disco e é muito mai s dincil de entender. Aqui está um exemplo. Essas situações são muito raras para j ust i ficar o uso de outra sintaxe em uma instrução tão simples. Wri teU ne (" Boa la rde! ") Else 15 16 17 18 19 Console. essa versão de linha única pode dar a seu código uma aparência melhor. tudo em apenas uma linha: If iHour > 11 lhen System. Não há nada que você possa fazer com a instrução If em apenas uma linha que não seja possível fazer com a forma habitual em bloco. Ocasionalmente.Console. Nessa listagem. LISTAGEM 4. também é possível expressar urna instrução If em urna única linha. várias instruções If foram necessárias. como mostramos na Listagem 4. como na linha a segu ir: If iHour > 11 lhen DoSomething{): DoMore{) Else DoSomethingElse() Incluí essa instrução mais para fins de complementaridade do q ue por alguma necessidade real. Tudo que se consegue.3 Greetings_Elself. na qual um conjunto interno de código é inserido entre as instruções If e End If. todas executando um código simples se suas condições forem verdadeiras.WriteLine{"Boa Noite!") End If End Sub 20 21 End Class Instruções If em Seqüência na Mesma Linha Além da forma em bloco apresentada anteriormente.4 Instruções If em uma Única linha Podem Dar ao Código uma Aparênci a Mel hor 1 If X=5 lhen strChar = "A" 2 If X=23 lhen strChar = "8" .WriteLine("Nâo é de manhã!") Esse conceito da linha única pode ser ampliado com a introdução de urna cláusula E1 se: If iHour > 11 lhen DoSomething{) Else DoSomethi ngEl se( ) Ele pode até ser usado com mais de uma instrução a ser executada em blocos de código verdadeiros ou falsos (ou em ambos) já que instruções múltiplas podem ser separadas com o uso de doispontos. em que urna condição é verificada e uma ação tomada. Recomendo a adoção da OUlra forma dessa instrução para que não provoquemos dores de cabeça em nossos colegas programadores. na maioria das vezes.vb (continuação) Conso 1e.

4 Instruções If em uma Única linha Podem Dar ao Código uma Aparência Melhor (continuação) 3 If X=2 lhen strChar " "C" 4 o •• Expressões e Lógica Booleana Todas as instruções de controle dependem. term inam com um desses dois valores. todas as expressões booleanas. duas expressões não booleanas com um operador no meio. quando avaliadas. Independentemente de que valor esteja sendo verificado. não há muitos programas que os usem diretamente. Esses são os únicos tipos de expressão e valores permitidos como parte de uma instrução de controle porque e la precisa tomar urna decisão com base nesse valor. No entanto. Em vez disso. de tomada de decisão. também está disponível para verificar a correspondência de padrões nas strings. um tipo de variável que só pode conter valores verdadeiros ou falsos. e o programa não saberia o que fazer. igual a • <>. Li ke. ma •ior que • <. menor que • =. <=. >=. Como já discutimos. o resu ltado só pode ser verdadeiro ou fa lso. O operador Li ke perrnite que você compare uma variável de string com pa- . " Introdução à Programação com o Visual Basic . verdadeiro Oll falso. constante ou fato relacionado com a situação alua i. não produziriam urna resposta positiva/negativa ou verdadeira/falsa. todas as expressões booleanas geram uma entre duas respostas: sim ou não.NET'. Operadores de Comparação O tipo mais comum de expressão usado em programas é uma comparação.100 1 Dia 4 LISTAGEM 4. Os dois estados mais simples das expressões booleanas são verdadeiro e falso. de alguma maneira. operações lógicas com valores booleanos ou uma combinação desses dois tipos de expressões. Os operadores de comparação a seguir estão d isponíve is para serem usados em expressões: • >. são criadas expressões mais complicadas que são comparações entre dois valores não boo leanos. Expressões que não são booleanas apenas não funcionam. diferente de maior ou igual a menor ou igua l a • • Todos esses operadores funcionam tanto com strings quanto com valores numéricos. Um operador de comparação adicional. com base no valor de uma variável. você aprendeu sobre as variáveis booleanas. No Dia 3.

Controlando o Fluxo dos Programas 101 I drões que empreguem caracteres especiais e comuns. você poderia *T usar um padrão como C e tentar testar valores como CAT. por exemplo) para especi ficar que qualquer caractere dentro dele deve ser considerado uma correspondência Desenvolveremos um pequeno programa para testarmos a instrução If e o operador Li ke. para representar um dígito (0-9) Intervalos ( [a -g)). Console. Por exemplo. verificará se o valor de teste coincide com o padrão . Esses operadores trabalham com expressões ou valores booleanos e produzem um resultado . ct e assim por diante. em seguida. LISTAGEM 4. tente executar esse programa com várias entradas.vb 1 Pub1ic C1ass PatternMatcher 2 3 4 5 6 7 8 Sha red Sub Main{) Dim sInput As String Dim sPattern As String Dim sMatch As String System . Operadores Lógicos o outro tipo de expressão que pode ser usada corno booleana é a que emprega operadores lógicos.WriteLine(sMatch & " Matched with " & sPattern) E1se System .Console.ReadLine() sMatch = sInput If sMatch like sPattern Then System.WriteLine(sMatch & " não coincid iu com "& sPattern) End If End Sub End Class 9 10 11 12 13 14 15 16 17 18 19 20 21 Depois de inseri-lo em um arquivo de texto (ou fazer seu download) e compilar (vbc It :exe PatternMatcher. ReadLine{) sPattern = sInput System.Console .5) aceitará um valor de teste e um padrão como entradas e. vb). para representar um caractere #. coat.Write("Insira um padrão:") sInput = System.5 PatternMatcher. Entre os caracteres especiais que podem ser usados com Li ke estão: • • • • *. Console.Console. para indicar a quantidade de caracteres adic ionais ?.Console.Write("Insira uma string para a comparação:") sInput = System. Esse programa (veja a Listagem 4.

então o resultado também será. Já que os valores booleanos são muito semelhantes aos bits (valores binários. se um dos valores for verdadei ro e o outro for falso. 1 ou O).1 Combinaçóes Booleanas Resultado TRUE FAl SE FAl SE FAl SE TRUE TRUE TRUE FAl SE FAl SE TRUE TRUE FAl SE FAl SE TRUE Expressão TRUE ANO TRUE FALSE ANO TRUE TRUE ANO FAl SE FALSE ANO FALSE TRUE DR TRUE TRUE DR FAlSE FALSE DR TRUE FALSE DR FAlSE TRUE XDR TRUE TRUE XDR FAl SE FALSE XDR TRUE FALSE XOR FA LSE NDT TRUE NOT FALSE A dispon ibil idade dos operadores lógicos permite que você combine outras expressões e valores para produzir expressões booleanas mais compl icadas. posterionnente em alguns exercícios envolvendo instruções If. de comparação e lógica. também chamado de exclusil'eOR. ou I f (((X+3) * 5):> (Y*3)) ANO (SystemIsRunning{) DR iHour < 5) Then. Com DR. os operadores lógicos são freqüentemente chamados de comparações bit a bit. como: If X :> 3 ANO X < 8 Then. e NOT. Em todos os exemplos. se um dos valores for verdadeiro. você só obtém um resultado igual a verdadeiro se os dois o forem . O operador XOR.1 lista todas as combinações possíveis de valores e o que os diversos operadores lógicos produziriam em cada caso . seria possível subst ituir os valores True (verdade iro) e Fa 1se (falso) por expressões que pudessem ser aval iadas até chegar a um valor booleano. NOT é apenas um operador de negação: retoma o oposto de qualquer valor que for usado com ele. A Tabela 4. que comparam dois valores ou expressões. . TABELA 4. gera um resultado verdadeiro. DR e XOR. que usa um único valor Oll expressão booleana.102 1 Dia 4 booleano.Usaremos os dois tipos de expressões. Ao usar o operador ANO entre dois valores booleanos. Os operadores dessa categoria são ANO.

mas o Visual Basic . por padrão. No entanto.6. então. Dev ido à natureza da instrução ANO. independentemente de que valor for retomado pela outra extremidade. então. A execução do código da Listagem 4.NET. ANOALSO e ORELSE . saberá que o direito é irrelevante. Cons idere esta expressão booleana: (X >l)AND (X <10). "Esquerda" . assim que você avaliar o lado esq uerdo da expressão (obtendo falso). .Co ntrol ando o Fluxo dos Prog ramas 103 Avaliação Abreviada De maneira semelhante ao resu ltado de uma eleição. e o programa exibirá tanto "Esquerda" quanto "Di rei ta". você precisa usar formas alternat ivas dos operadores ANO e DR.Console. um programa simples de teste (veja a Listagem 4. vb LISTAGEM 1 Public Class ShortCircuiting 2 3 Shared Sub Main() lf Test("Esquerda")ANOAlSO Test("Oireita")Then 4 5 'execute algo End lf 6 7 End Sub 8 9 10 11 12 13 Shared Function Test(sInput As String) As Boolean System. Se Xfor igual a I. Para fazê-lo abreviar uma expressão booleana. não é bom apenas confiar que ele se comportará dessa maneira.WriteLine(sInput) Test = FALSE End Function 14 End Class Se a função Test{ ) retornar fa lso. como fez na Listagem 4. Para testar o comportamento-padrão dos operadores booleanos.6) pode ser usado para que examinemos exatamente o que acontecerá. você saberá o resultado da expressão inteira apenas avaliando o lado esquerdo. tente alterar ANOALSO para somente ANO. nesse caso. Se Test ( ) retornar verdadeiro. e veja que resultado obteve.6 ShortCi reuit i n9. Chegaríamos a essa conclusão sem precisar pensar muito ao avali armos as expressões booleanas. é chamado abreviação (çhort-circuiting) . Novo TERMO o comportamento que esperamos.6 produzirá só uma linha de resultado. não há ne~ cess idade de avaliar o outro lado. mas nem sempre está tão claro para o computador. não trabalha desse modo. os dois lados precisarão ser executados. não avaliando partes desnecessárias de uma expressão. A expressão inteira será falsa. 4. o de uma expressão booleana em geral é co~ nhec ido antes que ela tenha sido integralmente aval iada.

Com o liSO das instruções I f. Para manipular o teste COm múltiplos valores ou vários conjuntos de valores. as instruções I f poderão se tornar inadequadas. LISTAGEM 4. todas as diversas cláusulas If se tomarão excessivamente complexas. • 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 RetornalmpostoOomicílioMédio () 8 Elself IngQuant i dadePessoas > 4 ANO lngQuantidadePessoas < 10 Then 9 Call RetornalmpostoOomicílioGrande() 10 El se 11 Ca 11 Retorna Impos toOomi cíl i oMuitoGrande () 12 End If 13 • • • Quando você começar a testar mais do que algumas opções possíveis. A categoria do cliente é baseada na quantidade de pessoas em um endereço domicili ar. foi criada para lidar com opções de apenas uma ramificação.104 Dia 4 lidando com Múltiplas Possibilidades: A Instrução Se 1ect Case A instrução If pode manipuJarquase todo l ipo de requ isito para tomada de decisões. que tem a sintaxe a segu ir: Select Case <variável ou expressão sendo comparada> Case <valor ou intervalo de valores> bloco de código Case <valor ou intervalo de valores> bloco de código Case El se bloco de código End Select . o código pode ficar com a aparência da Listagem 4.7..7 Usando Muitas Instruções If Aninhadas 1 . Se diversos valores diferentes precisarem ser verificados e uma ação d ist inta for tOmada para cada um. mas na verdade. o Visual Basic incluiu a instrução SeI ect Case. Você prefere d iredanar os usuários para a rotina correIa com base nesse valor. Considere o exemplo de um programa para inserção de dados de imposto de renda com roti nas separadas para manipular cinco categorias diferentes de clientes.

a sobreposição de condições pode ser confusa para o programador. cxceto por. as sobreposições não são evitadas de modo algum pelo Visual Basic. o que faz muito sentido.8 . Isso capturará toda ent rada inesperada para as quais voeê não usou outra instrução Case. na Listagem 4.Co ntrol and o o Flu xo dos Prog ramas 105 o uso da instrução Se I eet LI STAGEM Case no lugar das instruções If da Listagem 4. Faça Aborde sempre toda condição possível incluindo uma cláusula Case El se. Observe que. só a primeira condição que tiver uma correspondência será executada porque o programa sai da instrução SeI ect Case depois que uma correspondência foi encontrada e o bloco de código apropriado fo i processado. Se esse for O caso. nesta lição. Não use mú lt iplas condiçóes em sua instrução Seleet Case se um único valor puder ter correspondência com mais de uma delas.8 O Comando Select Case Pode Simplificar Muito Seu Código 1 Select Case lngQuant i dadePessoas 2 Case 1 3 Call RetornalmpostoPerCapta () 4 Case 2 5 Call RetornalmpostoDuasPessoas () 6 Case 3.4 7 Call RetornalmpostoDocmicílioMédio() Case 5 to 9 8 9 Ca 11 RetornalmpostoDomi cil i oGrande () 10 Case Else 11 Call RetornalmpostoDomicílioMuitoGrande () 12 End Select A cláusula Case El se é usada exatamcnte como a cláusula El se em uma instrução 1f. apenas uma das condições poderia ser verdadeira a cada vcz. nesse exemplo. e é mel hor evitá-la apenas por isso. mas será d ifícil de entender o que não é muito desejável.8. você aprendeu a controlar que código será executado com o uso das instruções lf e Select. é possível ter condições sobrepostas nas quais mais de uma condição Case pode co incidir com um valor especifico. Não há sobreposição entre as diversas condições Case. Laços Até agora.a de processar o mesmo código . Na verdade. ser executada se nenhuma das condições for atendida.7 produzirá o código alternat ivo mostrado na Listagem 4. Embora não cause um erro. mas há outra necessidade mu ito comum . Esse t ipo de código não é um erro para o Visual Basic. Seu programa fica rá mais consist ente. 4.

o laço encerra sua execução. Também é importante se certificar de empregar o tipo de dado correto para essa variáve l. Começaremos nosso est udo da repetição examinando o mais básico dos laços.. Para visualizar esse conceito com alguns valores reais. Para obter mais informações sobre os diversos tipos de dados.9). Next.9. Na Listagem 4. portanto. For ••• Next Oobjet ivo do laço é executar um bloco de código várias vezes. deve ser declarada antes de • você usá-la como parte de seu laço. Quando esse valor fi nal é atingido. precisar de um inteiro longo (Lo ng I ntege r ).9 Ex i bi ndo Seu Nome Repet i damente 1 Dim iCounte r As Integer 2 For iCounter = I to 10 3 System. pois adoro ver meu nome rolando na tela! A variável do contador é real e.. mas cada um foi projetado para atender a uma finalidade específica.NET do pri meiro programa que escrevi (veja a Listagem 4. todos podem executar a maioria das tarefas. Como já mcncio- . do valor inicial ao final.Dia 4 várias vezes. recorra ao Dia 3. LISTAGEM 4. For . (Embora um laço não tenha de parar realmente.) O laço For executa um bloco de código um nÍlmero específico de vezes.. poderíamos estar lidando com números muito maiores e. e o programa continua na linha imediatamente após a instrução Next ..Wri teL i ne( "Ouncan Mackenzie") 4 Next iCounter E claro que em geral uso valores na casa dos milhares . o que torna os tipos de dado intei ro (I nteger) e byte os mais adequados. A Variável do Contador A variável do contador é incrementada a cada passagem pelo laço. exatamente como na Li stagem 4. criaremos uma versão no Visual Basic . Em outras situações. A sintaxe desse controle é For <variável do contado r> Código a ser executado Next <vari6vel do contador> = <valor inicial> to <valor final> A inclusão da variáve l do contador depois da instrução Next final é opcional. mas ela ajuda a in- dicar à que laço For essa instrução Next pertence e é boa prática de program ação. a variável i Counter seria utili zada para armazenar va lores de 1 a 10. em gera l parando quando alguma condição é verdadeira. o laço (loop). Console . essa situação é chamada de laço infinito. Esse requisito é manipulado por meio de outra espécie de instrução de controle. incl uindo que intervalo de valores cada um pode conter.9. Vários tipos diferentes de laços estão disponíveis no Visual Basic.

Não Faça .WriteLine{WeekdayName(iCurrentDay)) Next iCurrentOay End Sub Shared Function WeekdayName{ByVa l iDayNumber As Integer)As String Dim sWeekdayName As String Select Case iDayNumber Case 1 sWeekdayName • "Sunday " Case 2 sWeekdayName • "Monday " Case 3 sWeekdayName • "Tuesday 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 II . certifique-se de usar o tipo de dado que melhor manipule o maior intervalo possível para o contador. ela só resultará em erros desconhecidos e em um código incompreensível. 10 mostra como você poderia lIsar a variável do contador como parte de seu código . Uma pequena função chamada WeekDayName produz uma listagem dos dias úteis da semana.Controlando o Fl u xo dos Programas 107 nado. não empregue o inteiro longo se o inteiro puder atender bem. A Listagem 4. Resista à ten tação.Console. A funciona lidade interna do laço For aumenta o valor da variável do contador sempre que o código do laço é executado. Sendo o intervalo fechado ou podendo crescer muito.~ Não altere o valor da variável do contador dentro do laço. o que com freqüência é úti l porque ela pode ser usada em seu código.10 Usando a Variável do Contador 1 Public Class DaysOfTheWeek 2 3 4 5 6 7 8 Shared Sub Main() Dim sOayName As String Dim iFirstDay As Integer Dim i LastOay As Integer Dim iCurrentDay As Integer iFirstOay = 2 iLastOay = 6 For iCurrentOay = iFirstDay to iLa stOay System. mas você não tem impedimentos para alterar por sua própria conta esse valor. Faça Use o tipo de dado mais apropriado para a situação. a variável do contador é incrementada a cada passagem pelo laço. LISTAGEM 4 .

108 Dia 4 LISTAGEM 4 . você pode inserir Step <valor do aumento>. portanto. Especificando o Valor do Incremento com o Uso de Step Nos exemp los anteriores. mas é possível espec ificar o valor desse aumento.10 (continuação) Case 4 • "Wednesday" • "Thursday" • "Friday" • "Saturday" 27 sWeekdayName 28 29 Case 5 sWeekdayName 30 31 Case 6 sWeekdayName 32 Case 7 33 sWeekdayName 34 35 Case [1 se 36 sWeekdayN ame 37 E Select od 38 Return sWeekdayName 39 40 End Function 41 Eod Class • "Inval id Day Number" Observe que na Li stagem 4. Retornaremos a esse tópico no Dia 8. Sunday é considerado o pri meiro dia.10. " Int roduçã o ao . um pouco mais complicadas. . não levando em consideração as configuraçôes da máquina . Usando o exemplo do cód igo na Listagem 4 .NET Framework" . a variável do contador era incrementada em I cada vez que o laço era percorrido. esse cód igo pro· duziria os resultados a seguir: Monday Tuesday Wednesday Thursday Fr i day NOTA Esse exemplo ainda não está pronto para produção porque gerará a lista de nomes ape nas em inglês. Last e Increment e veja os res ultados.1 1 corno ponto de partido. de conseguir essa funci o nalidade integ ral com o suporte a t oda as con figu rações regionai s dos usuários. Depois do trecho com o valor final da instrução For. tente valores diferentes para Fi r st . e a variável do contador será incrementada com base no valor que fo r fornecido . Há outras manei ras.

porque last já será menor que Fi rst. e agora os va- lores são listados de trás para a frente.11 ForExample. Wh. o Visual Basic possui dois laços mais flexíveis. Foi projetado para situações nas quais você sabe quantas vezes quer percorrê-lo. É dificil acreditar que possa ficar melhor do que está. O iLastValue : 100 ilncrement : 10 For iCounter = iFirstYalue to iLastYalue Step ilncrement System .Co ntrol and o o Flu xo dos Prog ramas 109 LISTAGEM 4 . 1e . Nada será exibido. Ah.. WriteLine{iCounter) Next iCounter 10 11 12 13 14 15 16 17 End Sub 18 End Class Uma característica interessante e úti l de ter a opção Step no laço For é que ela penn ite que você percorra um intervalo de valores de manei ra invertida. Espere até chegarmos ao laço Do! hile • •• End hile o laço For. é limitado. algo interessante acontecerá (não aceite simp lesmente o que digo. End Wh i 1e. O primeiro deles. Last e Increment. você conseguiu um laço que é executado o número exato de vezes que quiser. tente!). Console . Por estar atualizado com relação a esse fato. mas pode . embora útil . como o descrito a segUI• r: While <expressão booleana> Código a ser executado End Whil e .. continua sendo executado enquanto uma expressão booleana específica for verdade ira. mas se o valor de Increment for alterado de 1 para -1. Tente os valores 10. O e 1 para as variáveis Fi rst. o que não é sempre o caso.vb 1 Imports System 2 Public Class ForExample 3 4 5 6 7 8 9 Shared Sub Ma i n{) Dim iCounter As Integer Dim iFirstValue As Integer Dim iLastValue As Integer Dim iIncrement As Integer iFirstValue . respectivamente.

LISTAGEM 4 . como varrer um array em busca de um trecho especifico de dados. um laço Whi 1e pode fornecer com facilidade a mesma func ionalidade do laço For. exatamenle como em lima instrução If e. é possível dar suporte a cond ições complexas. 4. você se preparará para essa pesquisa carregando um array com algumas strings.13 . . temos de utilizar todos! E preferível empregar o laço Wh i I e na exec ução de operações mais compl icadas. Em segu ida. Não precisamos selecionar apenas um laço. portanto.13 Whi l eSearch. Por exemplo.12 WhileExample . vb 1 Imports $ystem 2 Public Class WhileExample 3 Shared Sub Main{) 4 Dim iCounter As Integer 5 Dim iFirstValue As Integer 6 Dim ilastValue As Integer 7 Dim i Increment As Integer 8 iFirstValue = O 9 10 iLastValue " 100 i Increment " 10 11 12 13 14 15 While iCounter <= iLastValue '<Insira o bloco de código aqui> iCounter = iCounter + iIncrement End While End Sub 16 End Class E claro que reproduzir a funcionalidade do laço For não é uma maneira útil de usar seu tempo.110 1 Dia 4 Qualquer expressão booleana válida pode ser lIsada. LISTAGEM . usando o laço Whi I e."Seattle" arrList(3) • "Londres" arrList(4) • "Nova York" . como demonstramos na Listagem 4.vb 1 Imports System 2 Public Class WhileExample Shared Sub Main{) 3 4 Dim i Counter As Integer • O 5 6 7 8 9 10 11 12 13 Dim arrList(9)As String D iMatch As Integer ~ -1 im Dim sMatch As String sMatch = "Winnipeg" arrList(D) • "San Diego" arrList(1) • "Toronto" arrList(2) . Na Listagem 4.12. varrerá o array até ultrapassar a extensão dele ou encontrar a correspondência que procura.

Esse problema é facilmente contornado porque a instrução Do dá suporte a duas maneiras de iniciar as condições de saída. Console . Laço Do O laço Do. Se você for como eu. apresenta a estrutura de laço mais flexível d isponível no Visual Basic. na forma mais básica.vb (continuação) 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 arrList(5) • "Paris" arrList(6) • "Winnipeg" arrList(7) "Sydney" arrList(8) "Calgary" arrList(9) • "Orlando" Whi 1e iCounter <= 9 ANO iMatch = ~1 If arrlist(iCounter)Like sMatch Then iMatch = iCounter El se iCounter = iCounter + 1 End I f End While If iMatch . contudo. O laço Whi 1e é muito úti l. o cód igo interno continuará a ser executado de modo infinito. Whi 1e ou Unti I? Tecnicamente. mas ainda há outro tipo de laço disponíve l.1 Then System .Controlando o Fluxo dos Programas 111 LISTAGEM 4 . Ao percorrermos esse código. Qual deve ser usada. provavelmente esquecerá tudo que viu sobre a instrução W 1e. além de ser mais si mples. é : Do C6diga a ser executado Loop A si ntaxe. que permite a continuação do processamento do laço enq uanto a condição for falsa. poderemos perceber que o programa passa para outra etapa logo depois que cada uma das condições de saída é aval iada como verdadeira. Sua sintaxe. q ue faz com que o laço sej a executado enquanto a condição for verdadeira e Unti 1 <condição>.Write Line("Matched" & iMatch) End If End Sub End Class ~ ~ o operador de comparação l i ke é usado na Listagem 4. você pode tranqüilamente empregar qualquer das duas opções apenas utilizando uma negação em s ua con- . portanto.13 WhileSearch.13. o que perm ite que as correspondências sejam examinadas com o uso de curingas. Do. As opções disponíveis são Whi 1e <condição>. não tcm nenhuma im portância. depois hi de ter usado o laço Do. não especifica nenhuma condição de saída.

examinaremos alguns itens para ajudar nessa decisão: • • Você pode alternar entre Whi 1e e Unt i 1 apenas usando uma negação na expressão booleana. então. mais simples em geral é melhor.l Not (iMatch 'iMatch Loop = 3) 3 também funcionaria Portanto. • • . e o código não será executado nem mesmo uma vez. o método mais nexívcl de executar laços. Você pode colocar a cond ição de saída (usando a cláusula Unt i 1 ou Whi 1e) no início (com Do) ou no final (com Loop) do laço. mas o laço Do oferece Qutra opção que fornece ainda mais flexibil idade. Se essa condição não for atendida. Independentemente do valor da condição. tornando-a. ele nào será executado de forma alguma se essa condição não for atendida. Se você colocar a cond ição no início do laço. Ao escolher entre Whi 1e e Unti 1. O posicionamento da instrução condicional é muito importante. então. Isso significa que é possível criar laços como o descrito a seguir: Do Loop Until bFound ar iCounter > iTotal Diferente de apenas escolher entre Whi 1e Oll Unt i I. a posição de sua condição de saída terá um efeito maior sobre como seu laço será executado. se a condição for colocada na instrução Loop. Ao contrário. ela será verificada depois de cada passagem pelo código. Escolha entre as duas posições possíveis definindo se realmente não quer que o laço seja executado caso a cond ição não seja atendida ou se quer que o processamento sempre ocorra pelo menos uma vez. Isso resu ltará em uma expressão booleana um pouco mais simples. Você ainda terá de escolher entre essas quatro opções. portanto. Com todas essas opções. e em termos de codi fi cação. o código sempre será executado pelo menos uma vez. antes até da prime ira vez que isso acontecer. há um total de quatro configurações diferentes para a instrução do laço Do. Esses dois exemplos de código se comportarão da mesma ma~ tle lra: Do While iMatch Loop = 3 Do Unt.112 1 Dia 4 dição de saída quando apropriado. Se você colocá-la no início do laço. o laço não será iniciado. use a que não precisar de uma negação na instrução condicionaI. ela será veri fi cada antes de cada passagem pelo código. Se for inserida no final . Whi 1e ou Unti 1 não são tão diferentes em seu efeito. de longe. então. o laço sempre será processado uma vez.

veremos algumas maneiras comuns de empregar as instruções Exit e o código correspondente que poderia ser usado como alternativa. o laço Do Condições de Saída Novo A condição de saída de qualquer laço é a expressão que será avaliada para detemlinar quando ele deve tenn inar. Console . No caso de um laço Whi 1e ou Do. Quando a instrução apropriada for executada. Exi t Do e Exi t Whi 1e). você na verdade só terá especificado uma parte comp lementar de sua condição de saída. For i If = 1 to 100 arrNomes(l) = "Joe" Then System .Co ntrol and o o Flu xo dos Prog ramas 11 3 NOTA Whi le pode ser usado no lugar de Whi le porque eles possuem exatamente o mesmo efeito. mas não sabemos antecipadamente quantos laços teremos de executar. elas são claramente definidas e aparecem no início ou no fina l dele. Uma maneira de tornar esse código mais objetivo seria empregando um laço Do que controlasse a passagem pelo li mite superior e procurasse a correspondência. Entretanto. Há uma instmção Ex i t correspondente a cada laço (Exi t For. Usando a instrução Exit. c a execução do programa continuará na linha seguinte ao fim do laço. elas são um dos muitos exemplos de prática imprópria de programação. ele será abandonado de imed iato. Exemplo 1: Usando um Laço For para Pesquisar um Array Você poderia criar um laço For para executar uma varredura em um array de tamanho fi xo. A melhor forma de fazer isso seria adicionar essa segunda condição à condição principal de saída de seu laço. mas de uma maneira mais do que óbvia. abortando-o com Exit For quando a correspondência fosse encontrada. Nos exemplos a seguir. a condição de saída é deduzida pela configuração dos I im ites superior e inferior. para cada um desses tipos de laço há outra maneira de espec ificar quando sair deles com o uso da instmção Exi t. TERMO Embora possam ser encontradas muitas ocasiões em que essas instruções pareçam um meio perfeito de fazer o programa se comportar corretamente. Writeline("Encontrado em I" & i) Exit For End I f Next i o problema existente aqui é que o laço For não devia de modo algum ter sido usado. No laço For. como descrito a segu ir: i =1 Do Until i Loop > 100 or arrNomes(i) = "Joe" i = i + 1 . Não é raro ver os programadores deixarem o laço Whi le de lado para empregar essa instrução.

Uma solução apropriada seria: iCurrentGuess = O iTarget = 5 Do Until (iCurrentGuess = iTarget) Dr (iCurrentGuess = -1) iCurrentGuess Loop = GetNextGuess() Se essas instruções Exi t não são adequadas. embora saiba que poderá evitá-Ias em um código de sua autoria. Bem.114 1 Dia 4 Exemplo 2: Procurando um Valor de Escape Nos laços em que se quer capturar a entrada do usuário e ainda permitir que eles a cance lem. mas um incômodo em particular é quando ele é executado continuamente. a maioria dos programadores em geral trabalha com códigos escritos por outra pessoa. Se estiver utilizando o IDE do Visual Basic. use a combinação de teclas Ctrl+Break para encerrá-lo. você deve estar querendo entender por que as abor- do. Laços Infinitos Qualquer laço pode ter erros. e é importante com preender o que pode ser encontrado neles. a condição efetiva de saída é mais complicada do que esse laço a faz parecer. se ele for baseado em DOS. Algumas causas comuns dos laços infinitos são o esquecimento de que a variável do contador precisa ser aumentada progressivamente (em laços diferentes de For). Se o programa for executado e parecer não terminar nunca. duas condições de saída e lima instrução Exit em geral são usadas em um deles: iCurrentGuess iTarget " 5 = O Do Until iCurrentGuess = iTarget iCurrentGuess = GetNextGuess(} If iCurrentGuess = -1 Then Exit Do End If Loop Mais uma vez. e. Não torne sua condição de saída muito complexa. Faça Certifique-se de ter uma condição de saida em qua lquer laço que criar. a reiniciai ização de Lima variável que deveria ser crescente e o li SO de uma cond ição de saída que nunca possa ser atingida. ela precisa ser avaliada a cada passagem pelo laço. . forçando você a interromper o programa para encerrá-lo. use a combinação de tec las Clrl+C para causar sua interrupção. O fato de não ser preciso especificar nenhuma condição em seu laço Do o torna um pouco mais propenso a esse tipo de erro.

Environment. qualquer melhoria no desempenho desse código é incrementada pela quantidade de iterações. lembre-se sempre de que toda otimização do desempenho em um laço muitas vezes é mais benéfica do que em outro local do programa. Primei ro. Como exemplo. é mu ito mais efi ciente usar um laço de sua autoria em vez disso. LISTAGEM 4. Já que o cód igo do laço é executado repetidamente.NET Framework para obter suas informações atuais de segurança.000 vezes. 14. considere o código da Listagem 4. A chamada à função UserName ocorre dentro do laço. como mostra a Listagem 4.15 2 loopPerfonnance _Better . 15 .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. 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. vb 1 Public Class LoopPerfonnance 3 4 5 6 Shared Sub Main() Dim i As Integer Dim sName As String sName = UserName{) . o que significa que ela será executada 1.UserName 14 UserName " sName 15 End Function 16 17 End Cl ass o nome do usuário é fornecido por me io de uma pequena função que usa o . Já que não se espera que o usuário atual seja alterado nesse laço. não será incluído nessa segunda listagem. portanto. cada uma provavelmente resultando em alguma fonna de chamada do sistema operacional para obtenção do nome do usuàrio aluaI. LISTAGEM 4. O valor da função UserName não é alterado e.Console .14 LoopPerfonnance.14 é que ilustra erros comuns relacionados ao desempenho. mas o mais importante da Listagem 4.Co ntrol and o o Flu xo dos Prog ramas 11 5 Implicações sobre o Desempenho Há várias dicas úte is para ajudá· lo a conseguir o melhor desempenho com os laços em seu códi· go .

Com essas versões dos operadores booleanos. Securi ty. eles podem trazer para os programas um conjunto enorme de recursos para que os programadores não precisem desenvolver essa fu ncionalidade individualmente. . Pri nci pal for empregado. Console. Para desenvolver esses exemplos.N ET Fra· mework.Securi ty . é possíve l que apenas o lado esquerdo da expressão seja avaliado. Aplicativos Que Farão Uso de Seu Conhecimento Recém-Adquirido Agora que você sabe como usar instruções condicionais.NET.15 LoopPerformance_Better. ao usar expressões booleanas. portanto. Considere esses ob· jetos como parte da platafonna . estaremos trabalhando com lima parte do . não se preocupe se não parecer muito claro neste momento. essas classes são conj untos de códigos já existentes que foram empacotados e disponibilizados para os programas pelo fato de o Visual Basic ser uma linguagem . será necessário algo além dos recursos do Visua l Basic aprendidos até agora. como If e Sel ect Case. e vários tipos de laços. Sempre que um objeto como System .NET. Presentes de alguma fonna em todos os exemplos anteriores. em seguida.vb (continuação) 7 8 9 10 11 For i " 1 to 1000 System . Esse é um conceito crítico do Visual Bas ic . é certificar·se de que as partes mais simples da expressão sejam colocadas em seu lado esquerdo e. uti lizar as cláusulas de abreviação ANDALSO e ORELSE. portanto é preferível que ele contenha a mai s rápida das duas cláusu las. Esses conj untos de cód igo são fornec idos como objetos. Para fazer isso.Environment.WriteLine(sName) Next i End Sub Shared Function UserName() As String Dim sName As String sN ame " System.UserName UserName = sName 12 13 14 15 16 17 18 19 End Funct i on 20 21 End Class Outra dica de desempenho impoltante.NET. precisaremos das classes do .Console ou System. Pri nci pal em seu cód igo. poderá usar essas instruções para criar alguns exemplos interessantes de programas. mas ainda o abordarei nos próximos capítulos.Dia 4 LISTAGEM 4 . o que é em essência uma maneira de representar um conceito ou entidade dentro de códigos. em geral é prec iso informar ao Visual Basic que se cogita ulil izá·lo incluindo uma li nha como Imports System.NET Framework.

17 Etapa 2: Insira Este Código Acima da Instrução End Sub da Listagem 4.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. em vez de um operador comum de igualdade. através de seu método ReadL i ne até que alcance o fina l do arquivo. respectivamente.IO.17) para ler o arquivo. sendo necessário especificar o caminho e o nome do arquivo que se deseja abrir. o arq uivo real no disco e sua leitura na memória. Para verificar se esse foi atingido. a prime ira etapa é inicializar todos os seus objetos. você usará dois objetos diferentes que são parte da seção System.StreamReader. para ler cada Iinha do arquivo. LISTAGEM 4 . a fi m de tornar possível saber qua l sua função. Na Listagem 4.txt" 9 srFileReader " System. Eles representam.IO. 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. aponta o objeto StreamReader para o arquivo que você deseja ler. mas qualquer de seus outros exemp los de arquivos de programa . enquanto .IO.OpenTextCsFileName) 10 11 End Sub 12 End Class Depois de obter seu objeto StreamReader. Já que Nothi n9 é um tipo especia l de valor. também imprimiremos cada uma das li nhas ao serem lidas. compare o último valor lido com a constante especial Nothi n9. que foi inicializado de modo que apontasse para o arquivo de teste. você poderá usar um laço Do Whi 1e (veja a Listagem 4. System. portanto é fornec ida pelo . uma linha por vez. vb deve serv ir. utilize o operador i s para comparar sua string com ele. 16 1 2 sInputLine " "a l go" Do Until sInputline is Nothing .IO do Framework. O objelo StreamReader é criado com o uso do método OpenFi 1e do objeto Fi le.StreamReader Dim sInputline As String 6 7 8 sFileName" "MySampleFile. LISTAGEM 4 .16. Para que esse programa produza alguma saída. uma por vez. Você pode usar o objeto StreamReader.16 Etapa 1: Configure 1 Public Class ReadFromFile 2 3 Shared Sub Main{) 4 Dim sFileName As String 5 Dim srFileReader As System. E necessário um arquivo de texto para fazer este exercício.NET Framework.IO.File e System. Nesta lição.File.

Na Listagem 4. inicialize s InputL i ne para assegurar que não seja Nothi ng. LISTAGEM 4.19).17 3 4 5 Etapa 2: In s ira Este Código Acima da Instrução End Sub da Listagem 4 .StreamReader 6 Dim sInput l ine As String 7 8 sFileName = "MySampleFile. portanto.txt" 9 srFileReader = System .IO. você poderia usar um método de laço um pouco diferente e assegurar que uma saída não seja exibida depois que o final do arquivo tenha sido atingido.Console.ReadLine() System. 16 (continuação) sInput Line = srF il eReader. mas seria bom adicionar uma instrução If para verificar essa poss ibilidade.OpenText{sFi l eName) 10 sInputline = srFileReader.WriteL i ne(sInputL i ne) End I f Loop Alternativamente (veja a Listagem 4. você tentará exibir sInputl i ne mesmo quando for Nothi ng.ReadLine() 11 Do Until sInputL i ne i s Nothing 12 System.Dia 4 LISTAGEM 4.WriteLine(sInputLine) 13 sInputline = srFileReader.Console.ReadLine() 14 Loop 15 End Sub 16 End Class .18.18 1 2 3 4 5 6 7 Adic i onado uma Verificação de Nothing sInput Line = "algo" Do Until sInputLine is Nothing sInputLine = srFileReader.19 Um Laço Me l hor 1 Public Class Rea dFromFile 2 3 Shared Sub Main{) 4 Dim sFileName As Stri ng 5 Oim srFileReader As System.I O. é melhor certificar-se de que suas condições sejam atendidas. LISTAGEM 4.ReadLine() If Not sInputLine is Nothing Then System.Console. Fi l e.WriteLine(sInput Line) L oop Antes de percorrer o laço pela primeira vez.

mas no tipo certo de programa. Essejogo em particu lar foi a maneira que meu pai encontrou para me manter ocupado enquanto esperávamos ser atendidos em restaurantes. e.Next{ilowerBound . você criará um jogo simples de adivinhação de números. Detenn inar um número aleatório dentro desse intervalo. criaremos um programa de computador para jogar "Adivinhe o número!". Se o palpite estiver correto. I e 100. Se você qu iser executar esse código. informar o usuário se o palp ite é mu ito alto ou muito baixo e voltar à eta- pa 3. Um Jogo Simples Outro uso comum para o laço é consultar repetidamente o usuário solicitando uma resposta. Neste exemplo. 5. Solic itar ao usuário um palpite. terá de criar um arq uivo de texto com um conteúdo de teste no mesmo diretório que seu programa executável compilado. sendo informado a cada vez se meu palpite era mu ito alto ou muito baixo. System. Solicitar ao usuário um limite numérico superior e inferior.Random iUpperBound = lDD i LowerBound = 1 iTargetNumber = objRandom. 3. Seria melhor reformular rapidamente os detalhes em uma defin ição mais clara do que o programa deve fazer: 1. Com esse objeto. iUpperBound + 1) . Caso contrário.19 produziu o código mais simples (e. portanto. Os aspectos básicos deste programa foram esboçados acima. até que se consiga a desejada. essas informações de certo fac il itaram bastante. Primeiro. parec ido com as perguntas de uma criança). embora o jogássemos de lima mane ira menos tecnológica.Co ntrol and o o Flu xo dos Prog ramas 11 9 Qualquer um dos métodos funcionará. o . Felizmente. Isso pode soar incômodo (de algum modo. Esse pseudocódigo não é complexo. poderíamos usar minha pequena história como o pseudocódigo para o programa. 4. encerrar o jogo e informar ao usuário quantos palpites foram necessários. selecionava um número aleatoriamente (a maneira aleatória de meu pai . por exemplo. Eu começava a dar pa lpites de números até que encontrasse o correto. ele escrevia um lim ite superior e um inferior nas extremidades de cima e de baixo de um guardanapo.NET Framework fornece lima classe para esse fim. a geração de números aleatórios. e não a dos computadores) e o escrevia atrás do guardanapo.iLowerBound As Integer Dim objRandom As System. 2. mas o aplicativo final fornecido na Listagem 4. Emboraduvido que eu ten ha sido metódico com relação a isso.iUpperBound.Random = New System. pode ser lltil. é possível gerar um número aleatório entre um limi te superior e um inferior com um código como o descrito a seguir: Dim iTargetNumber. melhor) dentro do laço. Random. mas há um conceito novo nele que você ainda tem de aprender. em seguida. ele é o alvo. Como parte da luta contínua para informatizar tudo que não precisa ser informatizado.

21) teria de ser inserido antes da instrução End Sub para encerrar O programa. Agora que sabe como obter um número aleatório. você exibiu o número depois que o gerou. é preciso criar um laço que solici tará repetidamente um novo palpite até que o alvo seja ad ivinhado.Write("Insira o limite superi or: ") sInput = System. System. você poderá chamar seu método Next sempre que desejar. ) para ind icar que não deve ser compilado) na versão final. tam bém precisaremos de outra variável para manter o registro da qllant idade de palpites que foram necessários para chegar ao alvo. mas teria de ser removido ou isolado (marcado com um caractere de comentário no início ( .Random() 13 14 15 System . Isso é útil para testar seu programa.Next(iLowerBound. Você precisa especificar um valor superior que seja maior do que o mais alto que deseja permitir. e obterá um novo número aleatório a cada vez. pode gravar o código mostrado na Listagem 4. Esse cód igo (veja a Listagem 4. .20. usar esses valores para obter seu alvo.20 Obtendo as Infonnações Neces sãrias com o Usuário 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.Console. em seguida. Clnt(sInput) System.20 para solicitar os limites ao usuário e.Write("I nsira o limite inferior: ") sInput .ReadLine() iLowerBound .Console.Random 10 11 12 ~ New System.Console.Console.120 Dia 4 NOTA Esse método de gerar números aleatórios retorna valores que sào maiores ou iguais ao limite inferior e menores que o superior li LowerBound <: )( " iUpper· Bound).Console. Em seguida. Depois que o objeto Random tiver sido inicializado. Enquanto o programa estiver executando o laço.ReadLi ne() iUpperBou nd = Clnt(sInput) 'Adivinhação do número iTargetNumber = objRandom.iUpperBound + 1) System. LISTAGEM 4.Writeline{iTargetNumber) 16 17 18 19 20 21 22 23 End Sub 24 End C1 ass Na Listagem 4. O CÓdigo deste exemplo já faz isso.

Console .I)(n-2) .I »)( 1).Write("Insira um palpite : ") sInput : System . o cálculo de um fatoria!. Console.WriteLine{"Seu palpite é alto!") End If Loop System .Console. Para um valor como I O.. 2 1 antes de jogar. Evitando Laços Complexos por Meio da Recursão Em geral.21 O Laço das Entradas de seu Jogo 1 2 3 4 5 6 7 B 9 iCurrentGuess : O iGuessCount : O Do While iCurrentGuess iTargetNumber System. Você pode apenas fornecer a cada palpite um valor intermed iário para o intervalo. Os problemas que podem ser solucionados por meio da recursão são aqueles nos quais um subconj unto de les tem exatamente a mesma estrutura que o seu todo. ou pode ficar muito fácil. q ue usa de I a 100. para criar um novo intervalo (com a metade da extensão) entre seu palpite e os lim ites inferior e superior. Você sabe que fó rmula info rmará a quantidade de palpites necessários para qualquer intervalo de valores? A resposta estará na seção de exercícios desta lição. pode existir um modo mais simples. No jogo do exemplo. . a recursão ocorre quando um programa a li proced imento chamaa e le própri o em um esforço para resolve r um problema. há ma is de lima mane ira de resolver um certo problema e. embora um laço-padrão possa fu ncionar. WriteLine{"Seu palpite é ba i xo ! ") El seIf iCu r rentGuess > i TargetNumbe r lhen System. portanto. Console. as duas listagens de códi go anteriores produzem o jogo completo que você poderá compilar e tentar ganhar. será possível usar a recursão como alternativa aos laços com uns. chata de jogar.Console.ReadLine() iGuessCount : i GuessCount + 1 iCurr entGuess : Clnt(sInput) If i CurrentGuess < iTargetNumber Then System. A melhor maneira de explicar esse conceito é com um exemplo. a fónn ula seria 10* 9 * 8 * 7 * 6 * 5 * 4 * 3 * . que garante a obtenção da reposta correta com uma cel1a quantidade de palpites. Se um problema for estruturado de modo correto ou você puder reestruturá-lo da maneira certa.WriteLine("Você conseguiu em " 10 11 12 13 14 15 &iGuessCount & " palpites") Combinadas. A fónn ula para o fatori al de um valor (n !) é n( n. esse método assegura a descoberta da so lução em sete palpi tes (ou menos). É bom remover o últ imo comando Wri teL i ne da Listagem 4.Control ando o Fluxo do s Prog ramas 121 LISTAGEM 4 . com base em uma fórmula matemática. por me io do critério altolbaixo. Há um a maneira bastante raci onal e. (n-(n. Em programação. então.

LISTAGEM 4. ou seja. No entanto.23). Se tiver de dar suporte a va lores mais altos. você precisará manter o valor de seu teste (10 em nosso exemplo) menor ou igual a 12. (n-(n-I »( 1) e. essa não é a ünica maneira de gerar um fatorialjá que essa fórmula também pode ser expressa como n * (n-l)!. essa é lima definição mais clara que a da fórmula n(n-I )(n-2) .WriteLine{iFactorial) End $ub 16 End Class NOTA Quando experimentar esse programa.122 Dia 4 2· 1 = 3628800. Portanto.Console ..22 Factor.1) i Factori aI . como vemos na Listagem 4. use outros tipos de variável como o longo.) Essa fórmula pode ser expressa com o uso de um laço For. Factor i aI Next i Counter la 11 11 13 14 15 System.(i Input . Qualquer valor maior produzirá um fa torial que excederá o tamanho máximo de uma variável de inteiros (veja o Dia 3). LISTAGEM 4.Console . produzirá um código que também será mais simples do que a rotina correspondente da Listagem 4. aI. (Observe que o resultado é bem grande com relação ao valor de n.Write(UInsira um número: lO) 8 9 sInput " System.i Counter) * . se você o escrever desse modo (veja a Listagem 4. n multip licado pelo fatorial de n-1.22. 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.23 Recursivefactorial. Essa expressão define a fórmula recursivamente.ReadLine() iInput " Clnt(sInput) iFactoria l " 1 Fo r iCounter " O to (iInput .22..Console.vb 1 Public C lass Recursivefactorial Shared Sub Ma ln() 2 3 Dim sInput As String Dim ilnput As Integer 4 . a solução de um fatorial inclui outro fato ria!.

você procura n =. Com essas instruções. é possível começar a converter processos reais em programas. o programa nunca terá s ua execução encerrada. em seguida. mas é mais si mples e. esse é um resultado válido.Console.Writeline(Factorial (ilnput» End Sub Shared Function Factoria l (n as I nteger)as Integer If n Else lhen Return 1 = 1 12 13 14 15 16 17 18 Return n * Factori al (n-l) 19 End If 20 End Funct i on 21 22 'od C1 ass o código produzido pode não ser mais curto que o da Listagem 4. A recursão pode ser usada para reso lver muitos problemas.ReadLine{) iI nput = Cl nt{sInput) System. Observe que na fun ção Factori a 1 ( ). o laço For .22. Console.23 RecursiveFactoria l . Sem ela. No final .Controlando o Fluxo dos Programas 123 LISTAGEM 4.vb (continuação) 5 6 7 8 9 10 11 Dim iCounter As Integer Dim iFac toria l As Integer System . examinamos as instruções de controle. como no laço. tudo que importa é que se u código seja o mai s claro e simples que puder. P&R P Meu colega me disse que os laços hi 1e são melhores que os laços Do e que nunca devo usar o laço For! Que laço é o melhor? R Embora seja possível usar apenas um laço em lodos os seus programas. não se ganha nada fazendo isso.= 1. só por isso. semelhante ao que se consegue com a condição de saída em um laço. Empregue o laço que melhor resolver o problema .Console. e veremos códigos que a empregam em sistemas de vários tipos (e espero que você escreva o seu). usando esse recurso para gerar o código real necessário. Resumo Nesta lição. Essa verifi cação assegura que as chamadas recursivas fin almente sejam encerradas.Write("I nsira um número: U) sInput = System. Em geral. a base de muitos dos programas de computador que você criará no futuro. primeiro passando-os para pseudocódigo e.

VisualBasic). Por que você deve te ntar fazer com que o bloco de código interno em um laço seja o ma is simpl es possível? 4 . use um laço Do ou Wh i 1e quando esse não for o caso.já que as próximas versões do Vi· suai Basic podem não inclu ir a instrução I IF. por~ tanto. "Respostas dos Testes/Exercícios". usei uma forma da instrução lf chamada IllIl1ediate If I1F.. ela pode ser usada no meio de outra expressão. Mas só como elemento de um conjunto especial de objetos (Microsoft. Qual dos três métodos de laço é o mais flexível ? 3. você deve evitar seu uso se possível. como função.124 Di a 4 funciona melhor quando ê preciso uma quantidade fixa de iterações. Suponhamos que você tivesse a expressão booleana a seguir em seu programa: Ca 1cul atedTotalNetWorth(iCustomerIO) < 10000 ANO dtCurrentDate. Teste I.Hour > 12. End If? R Não. Qual dos três métodos de laço disponíveis é mais adequado para um intervalo fi xo de va· lores? 2. existe.NET? R S im. A variante rIr é uma forma muito útil da instrução If.. O fato de essas fun· ções não estarem embutidas na versão mais recente do Visual Basic pode sign ificar que elas rea lmente não estarão disponíveis em futuras versões. não há diferença na velocidade de execução desses dois formatos. projetado para fomecer acesso à instrução I I F e muitas outras partes da última versão do Visua l Basic que não existem mais no Visual Basic . O compilador do Visual Basic converte as duas formas no mesmo res ultado. Ela existe no Visual Basic . por exemplo. quando uma string é exibi da. P Em versões anteriores do Visual Basic c no Visual Basic for Application (VOA). P As instruções If de uma linha são mais rápidas que a forma If . No entanto. A d iferença principal está na facilidade de manutenção e leitura do código. Oque poderia fazer ser fei to para assegurar que ela seja o mais efi ciente poss ível? . Workshop O Workshop foi planejado para ajudá·lo a anteci par possíveis dúvidas.NET. As respostas do teste estão no Apêndice A. revisar o quejá aprendeu e começar a pensar em como colocar seu conheci mento em prática.

Se preferir usar o método racional nos palpites de seu programa. .Limite Inferior) onde N é a quantidade máxima de tentativas. Escreva o inverso do programa NumberGuesser criado nesta lição . a quantidade máxima de tentati vas necessárias poderá ser encontrada na resolução dessa equação: (t-l >= Limite Superior .um programa com lim ites superior e inferior que tente determ inar que valor foi selecionado pelo usuário. Para cada palpite que o programa de computador gerar. " B" para muito baixo ou = para correto. então. Por exemp lo. em 1 um intervalo de I a 100.Co ntro land o o Flu xo dos Prog ramas 125 Exercícios I. você terá de permitir ao usuário responder com " A" para muito alto. a equação resu ltaria em 7 porque 2" = 64 e 2 = 128.

.

NET fornece? O que está envolvido na escolha de uma arquitetura de aplicativo? Além da abordagem de alto nível desses tópicos. Esta lição abordará • O que é 'arqu itet ura do ap licativo' ? • • Que opções de arqu itetura a plataforma . No decorrer desse processo.NET para criar aplicativos. . o arquiteto com toda a equipe do projeto. essa lição também inclui uma discussão de alguns cenários e um estudo da determinação de arquiteturas para cada um de les.SEMANA 1 DIA Arquitetura dos Aplicativos na Plataforma . são criados esboços que mostram as particularidades do edifício proposto com maior transparência e formam a base do projeto detalhado que deve ser criado antes que qualquer trabalho de construção seja iniciado. um arquileto manipulou a fase do projeto. mas as questões mais importantes se encontram na fase de projeto do processo de desenvolvimento. o Que É a Arquitetura do Aplicativo? Anterior à construção e muito antes de um prédio estar pronto para ser usado. é responsável por produzir o resultado correto. Depois que se obteve um consenso sobre sua concepção básica. não só no começo.NET No decorrer deste livro você está aprendendo a usar o Visual Basic .

Se os prédios fossem construídos da mesma maneira que a ma ioria dos sistemas de software. as semelhanças podem ser traçadas. mas o que estará ocorrendo é que você (ou outro membro da equ ipe de desenvolvimento) terá informalmente assumido essa função. ê possivel gerenciar sem um arquiteto. NO TA Em projetos menores. então. Um arquiteto de softwares (ou sistemas) desenvolve um planejamento para construir o sistema com base em requisitos. foi tomado emprestado pela indústria de desenvolvimento de softwares. e a função de um arquiteto é de extrema necessidade em sistemas de quase todos os tamanhos. Função do Arquiteto de Softwares Independentemente da apropriação do nome de uma profissão existente. Mas isso não altera a necessidade de compreender o processo e as decisões sobre a arquitetura que serào tomadas em qualquer projeto com seu envolvimento. Análise das Necessidades e Projeto (veja a Figura 5. e não os culpo por ficarem incomodados. 1). o planejamento no final se toma um projeto detalhado de como deve ser construído. o mesmo processo ocorre. uma arquitetura terá sido escolhida (talvez de modo informal) e estará sendo usada. Com os softwares. Muito do que está envolvido no desenvolvimento de softwares empresariais é feito sem planejamento sufic iente. Talvez não queira assumir o papel do arquiteto de sistemas no futuro próximo. No ciclo de evolução do desenvolvimento de softwares. Quando um edifício está em fase de projeto. Nos dois casos. a equipe inteira deve estar envolvida no processo integral. tanto o profissional quanto os aspectos do projeto pelo qual ele é responsável. o desenvolv imento de softwares é complicado. os arquitetos usam seu conhecimento avançado tanto da função quanto do projeto para idealizar e planejar sua estrutura e fundação geral com base nos requisitos que forneceram a eles.128 Dia 5 o conceito de arquiteto. A semelhança sugerida entre as duas áreas não deve agradar aos verdadeiros arquitetos. Você pode ser um iniciante no Visual Basic ou também no desenvolvimento. Independentemente da dimensão do aplicativo que você estiver construindo ou de quào pequena for sua contribuição individua l para o sistema. porém o arquiteto é o principal condutor do planejamento nas fase s inicias da Definição/Escopo. . passaria o resto de meus dias vivendo a céu aberto. com manutenção difíci l e quase sempre com um orçamento muito alto. O problema das pessoas que assumem a função de projetista informalmente ê que a equipe não tem consciência de quem ê o responsável por nenhum dos aspectos especificos do projeto. resu ltando em sistemas que são instáve is. e outras equipes de profissionais se encarregam de manipu lar a implementação real. Embora algumas pessoas não consigam ver essa atividade como algo próximo à complexidade do projeto e construção de um imenso arranha-céu.

produzindo resultados indesejados. em sistemas . e não com as opções de implementação que serão selecionadas dentro dessa estrutura. Em geral. em que o sistema é projetado.Arquitetura dos Aplicativos na Plataforma . a maioria dos itens discutidos na fase da arquitetura será abordada novamente no projeto detalha- . com bastante conhecimento técnico para avaliar todas as opções disponíveis e habil idade operacional suficiente para interpretar com correção os requisitos do sistema. Pode ser difici l de acreditar. Os aspectos que envo lvem a arquitetura de um sistema são os ' grandes detalhes'. para os grupos de implantação.1 No ciclo de evolllçao do desenvolvimento de sofiwal'es. mas ela é muito abrangente para ser útil . em seguida. o papel de arquiteto é desempenhado por mem bros da categoria sénior de um grupo de desenvolvimento. será envo lvido na fase de impl ementação. O essencial é o nível de detalhes. mesmo se parecer que todos os 'grandes detalhes' já foram determinados e só restaram os mais fácei s relacionados à implementação.NET 129 FIGURA 5. O arquiteto. Para responder a pergunta mais especificamente. Ele continua engajado por duas razões principais: para veri ficar se a arquitetura escolhida provou ser a correta (fazendo os ajustes necessários para lidar com os problemas que aparecerem) e para se cert ificar de que o projeto esteja sendo impl emcntado como foi plancjado. O ideal é que a pessoa que assumir a função de arquiteto seja altamente experiente. O aspecto principal é que a arquitetura do sistema tem relação com a base e a estrutura do aplicativo. Depois dessas fases iniciais. como que tipo de interface com o cliente será usada. no entanto. se serão executados aplicativos Windows ou da Web e como o código da página da Web se comunicará com o banco de dados de back-end. mas às vezes os desenvolvedores se desv iam do projeto de um sistema. Que Partes de um Sistema São Consideradas Arquitetura do Aplicativo? Uma resposta breve para essa pergunta seria ' todas'. o foco passa para a equipe de implementação (desenvolvedores de software) e. a arqlli/elllra está ellvolvida prim:ipa{mellfe lias primeirasfáses. a arqu itetura deve fornecer urna visão geral de alto nível de cada aspecto do apli cativo.NET.

130 1 Dia 5 do e na implementação. No entanto. mas a arquitetura é a comb inação de todos esses fatores em um projeto que funcion e como um todo. código de segurança. Embora ela aborde tudo em um nível superior. para as finalidades do projeto. abordarei o conceito de camadas. mas esses detalhes decerto não fazem parte da arquitetura do sistema. Essas camadas são. . o próximo níve l se tornaria mais detalhado e poderia incluir informações sobre que áreas do aplicativo serão protegidas e a quem será concedido acesso para cada área específica. Na real idade. não deixe que a realidade o bloqueie. o programador teria de determ inar exatamente como encontrar o logon do grupo e do usuário do Windows. as decisões podem ser tomadas com base em uma organ ização pretend ida. as áreas-chave a segui r devem ser reconhecidas como parte de qualquer arquitetura de aplicativo: • Distribuição tisica e lógica dos códigos (que código será executado onde?) • Tecnologias usadas na interface com o usuário. A finalidade de cada área será abordada nas seções seguintes. é importante categorizar os cód igos mesmo se essa organização nunca existir efetivamente. Distribuição Lógica e Física dos Códigos No nível da arquitelUra. As dec isões a respeito de onde executar cada camada de um aplicativo e de quantos serv idores serão usados para cada uma delas constituem esse elemento da arqu itetura do sistema. qualquer divisão de códigos depende de cada programador e do resto da equipe do projeto. O que deve ser deterrninado sobre esses grupos é onde serão executados. bancos de dados e lógica operacional • Método de comun icação entre componentes diferentes do sistema e entre esse e os outros sistemas da empresa • Segurança • Acesso aos dados • Escalabilidade e dispon ibi lidade Cada uma dessas áreas é por si só importante. os quais podem ser movidos à vontade. e nesse nível a declaração a segu ir poderia ser suficiente para abordar esse tópico: " O aplicativo baseará suas perm issões de segurança nos usuários e em grupos do Windows 2000 já em uso na empresa".NET (ou qualq uer outra ferramenta de desenvolvi mento) o forçará a manter os cód igos agrupados de maneira organizada. tratadas como se fossem conj untos de cód igo independentes. Nada relacionado à plataforma . Essa declaração é o bastante como ponto de partida. Na fase de implementação ou desenvolvimento. parle da arquitetura do sistema pode ser uma discussão sobre segurança. código de intelface com o usuário e outros. em que toda a funcionalidade de um aplicativo é dividida de modo lógico. serão todos processados como parle de um único aplicativo em apenas uma máqu ina ou o cód igo de acesso aos dados será executado em um servidor independente? Mai s à frente nesta lição. Por exemplo. penni lindo que os códigos sejam categorizados em grupos como código de acesso aos dados. então.

alguma forma de comunicação precisa exisl'ir entre os diversos componentes. na verdade ele não estava nem perto de ser concluído e ainda tinha de transmitir tantas infonnações úteis quanto o Exemplo 2. Dentro dessa camada.0 (Serv ice Pack 5) e com suas propriedades configuradas como Publ ic. Nessa área. os quais executarão o Windows 2000 Advanced Server (Service Pack 2). Exemplo 2: A interface com o usuário será baseada em formulár ios e usará o DCOM para se comunicar com a camada intermed iária. só é preciso ser específico com detalhes quejá forem definitivos ou relevantes devido a algum outro aspecto do projeto. então. Várias janelas serão criadas. para ser executado em várias máquinas. mas no níve l da arquitetura. Esses formulários empregarão o DCOM para se conectarem com os servidores da camada intermediária. Os servidores da camada intennediária hospedarão cinco componentes dentro do ambiente de serv iços do componente do COM+ do Windows 2000. os objetos operacionais do COM terão sido instalados no COM+ e manipularão a comunicação com a camada de dados.. Cada componente será composto de . Considere esses dois trechos (não se preocupe em compreender os detalhes. Outra regra interessante é nunca passar muito tempo discut indo tecnologias específicas. que é consegui r descrever a arquitetura. O ADO será empregado para conectar a camada intermediária COm os dados de back-end. Comunicação entre Componentes Se você estiver desenvolvendo um sistema distribuído. pode ser necessário definir o protocolo de comunicação se ti vermos de nos conectar com outro sistema ou se os detalhes técnicos forem cruciais para um projeto paralelo como a configuração da . só existem para atender à finalidad e do exemplo): Exemplo 1: A equipe do projeto desenvolverá a interface com o us uário por meio do Visual Basic 6.0 (Serv ice Pack 5) e de um controle de grade Act iveX do Janus. O segredo nessa área é disponibilizar informações suficientes para ser útil. e todas as informações serão retornadas para a camada de apresentação depois de passarem pela comercial.. Embora o Exemplo I tenha sido interrompido. enquanto detalhes que possam não ter sido detenninados ou sejam irrelevantes no nível da arqu itetura devem ser evitados . todas com menus. Esses componentes operacionais serão DLLs do COM. construídas com o uso do Visual Basic 6.A rqu itetura dos Aplicativos na Plat aforma . Há muitas opções diferentes.NET 131 Tecnologias Uma das áreas mais objetivas. uma grade principal e diversos botões funcionais. A inda falta m o projeto detalhado e as fases da implementação para manipu lar a entrada nesse nivel de particularidades. O segredo é se lembrar sempre do pr incipal . esse elemento da arquitetura do sistema traça um esboço ' geral' das tecnologias que serão usadas. Tente se concentrar e só discutir a tecnologia em termos do que ela trará para esse projeto.

7 dias por scmana). A disponibilidade é uma medida que avalia com que freqüência o sistcma está em execução e pode processar so licitações. 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. A escalabilidade descreve a capacidade de um sistema de manipular cargas ma iores. quanti dade de solici tações por segundo e assim por diante) por meio de um incremento no hardware. a necessidade de sistemas que estejam sempre disponíveis está sendo difundida. 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.9% (três algari smos nove) ou maior que um sistema possui . por exemplo) e conceituaImente como será implementada ("as opções de interface ficarão ocultas" ou "a segurança será verificada a cada página/formulário"). Isso quase parece ridículo.999%). A arqu itetura deve detalhar como a segurança será proporcionada (usando o Windows 2000 Acli ve Direclory. É necessário detalhar exatamente como os programadores implementarão esses recursos. A platafonna . Eles estão re lacionados de mu itas manei ras: as técnicas e a arquitetura usada para fornecer um serviço em geral são utilizadas para disponibilizar o outro. são mais bem defi nidas na fase do projeto detalhado ou como parte da implementação final. Segurança Um título indefinido para uma área vaga. 99.132 1 Dia 5 redelfirewall.NET fornece várias opções diferentes para esse tipo de comunicação incluindo o SOAP. como o projeto e a organização do banco de dados efetivo. Escalabilidade e disponibilidade Esses são dois tôpicos importantes e complexos e uma das principais razões pela qual a arquitetma dos aplicativos recebe tanta atenção. alguns sistemas de uso comercial foram registrados com um tempo de fu nc ionamento igual a cinco algarismos nove (99. Em termos práticos. Acesso aos Dados Que áreas de cód igo acessarão os dados? Como fa rão isso? Esta seção detalha como o ap li cativo se conectará aos dados (provedor OLEDB usando a segurança do SQL Server. Como assegurar que um apl icativo possa ter uma boa escalabilidade está além do escopo desta lição e deste livro. a segurança é um tópico que deve ser considerado apenas porque toda d iscussão acaba por abordá-lo e permanece aí se ele já não tiver sido detalhado. Questões mais complexas. Enq uanto redigia esta seção. mas um link para outros recursos será fornecido no final deste capítulo caso você esteja interessado em uma abordagem mai s profunda desse tôpico. por exemplo). O termo 'algarismos nove' sc rcfere ao tempo de func ionamento de 99% (dois algarismos nove). Lembre-se de que essa não é uma medida de desempenho. um sistema pode scr cscalonávcl e tcr um péssimo desempenho. e excede muito meu tempo ativo no . fornecendo o mesmo nível de serviço (tempos de resposta. Agora que os apl icativos da Web com interface públ ica estão sendo desenvolvidos.

Arquiteturas Viáveis na Plataforma . componentes distribuídos na quant idade de servidores que se desejar. o código que realmente faz o trabalho do sistema. então.. na criação da interface com o usuário ou outros aspectos da camada de apresentação. Independentemente do aplicativo em particular. e tudo causa impacto na sua capacidade de manter uma disponibilidade alta.todas as opções diferentes poderiam ser combinadas para produzir um universo dc variações .NET 133 trabalho. junto a uma descrição breve: • Apresentação Esta camada representa a interface com o usuário e Olltros sistemas. mas se você estiver executando um site como o Amazon. Os Três Elementos de Qualquer Aplicativo As di ferenças entre todas as arquiteturas possíveis residem em como as três camadas di stintas de um sistema de computador são distribuídas. • Dados O banco de dados (ou outra fonte de dados como a XML) e o código que o acessa são considerados a camada de dados. Do ponto de vista do processo. Do ponto de vista do projeto. Por exemplo.com . ou um simples site da Web. As discussões sobre o tempo de funcionamento em geral se concentram no sistema operacional ou na tecnologia específica do servidor de banco de dados Iservidorde componentes/servidor Web em uso. mas esse pode assum ir várias formas: um ún ico programa executável.NET Não há uma quantidade fixa definida para as arquiteturas que podem ser desenvolvidas . ficar inativo de alguma mane ira pelo espaço de tempo que for é inaceitável. . Esta camada representa o núcleo do aplicat ivo. tudo é ainda mais comp lexo. o sistema deve estar completamente a salvo de estouros de memória ou outras falhas que impediriam o uso cont ínuo e deve poder ser executado em várias Qlltras máq uinas. é útil descrever todos os sistemas com relação a essas três camadas. em particular. o aspecto fisico público do sistema. no entanto. mas existem certas arquileturas generalizadas dentro das quais a maioria dos sistemas . Essas três camadas são li stadas aqui . O sistema operacional ou o servidor do banco de dados é só uma parte do sistema. atual izações de software terão de ser feitas de maneira seqüencial para que o conjunto de servidores nunca fique integralmente inativo.NET falharia. • Lógica Operac ional Todo os códigos que não estejam envolvidos. Criar um sistema com esse nível de disponibi lidade é uma combinação de projeto e processo. Essas três camadas são a representação lógica de um sistema completo. Essa não é uma discussão realista. digamos. que o Windows 2000 fornece uma certa quantidade de algarismos nove de tempo de funcionamento.Arqu itetura dos Aplicativos na Plataforma . sugerindo. já que mú ltiplos grupos de hardware têm de ser usados para fornecer redundância.

em que o programa (apresentação. portanto. de Apresentação. Com base na idéia geral de que todo aplicat ivo pode ser dividido em três camadas. então. isso significa que algum tipo de código cliente. e um banco de dados de back-end estão sendo usados.NET se tornar di sponível era chamado de Windows DNA . é bem adequada para aplicativos com base na Internet. Essa arquitetura está se tornando mais popular porque fornece muita flexibil idade para a manipulação de diversos usuários e. que chama um código executado em outro servidor ou conjunto de servidores para mani pu lar a lógica operacional . o código-cliente era executado como um aplicativo Windows padrão ou como uma interface da Web criada com o Active Server Pages. Windows DNA O Windows Distributed Network Architecture (ou Distributed interNet Architecture. A arquitetura mais simples é apresentada como um sistema de camada única. como um site interativo da Web ou talvez um aplicativo Windows. mas o layout fisico pode exceder três grupos distintos. e o servidor de arquivos apenas fornece um local na rede para armazenar dados. Por outro lado. Essa é a arquiteturaempregada pela maioria dos aplicativos comerciais como o Microsoft Office e muitos softwares empresariais projetados para serem usados por alguns usuários ao mesmo tempo. lógica operacional e dados) está todo em uma máquina. Um programa em que os arquivos de dados estejam localizados em um servidor de arquivos também é considerado um aplicativo de camada lInica porque todo o trabalho efetivo é feito em uma máquina.134 Dia 5 Quantas Camadas? Uma das maneiras mai s comuns pelas quais as arquiteturas de aplicativos têm sido descritas é em termos da quantidade de máquinas diferentes que executam partes do sistema. dependendo de onde você encontrar sua definição). Só as máquinas que executarem alguma forma de processamento são importantes. e le é considerado uma segunda camada porque realmente executa um processamento. Em um aplicativo Windows DNA. Em geral.NET para criação de sistemas de três camadas. quando um servidor de banco de dados (como o SQL Server ou o Oracle) é usado. Os sistemas que possuem um software cliente (em geral na máquina de mais de uma pessoa) que se conecta de modo direto com um banco de dados de back-end são chamados de aplicativos de duas camadas ou cliente/servidor. é o conjunto de tecnologias e diretrizes da Microsoft anteriores à plataforma . Ela permite que muitos usuários 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. Lógica Operacional e Dados. Há várias maneiras técnicas diferentes de criar aplicativos de três camadas. a forma mais recente de arquitetura de aplicativo é chamada de três camadas ou várias camadas e descreve sistemas em que o código é executado em três ou mai s seções distintas. mas o método recomendado pela Microsoft antes da plataforma . O código-cliente con- . o Windows DNA esboçou a ' melhor' maneira de desenvolver sistemas distribuídos. A divisão lógica de um sistema desses também é composta de três camadas. A arquitetura cliente/servidor é comum nos aplicativos empresariais.

a impl ementação real pode ter uma entre várias configurações diferentes. O primeiro conceito novo envolve a comun icação entre as camadas. então. por sua vez. que é um padrão binário usado para ligar todos os aplicati vos con fi gurados para COM através de uma conexão de rede . ou criar uma interface totalmente nova sem ser necessário alterar a camada operacional a lIO banco de dados. as páginas da Web se comunicavam com os objetos operacionais do COM usando o DCOM (Distributed COM). A camada de apresentação nu nca acessa diretamente o banco de dados e.NET Se Encaixa? A plataforma . Onde a Plataforma . No entanto.NET for usada. Agora. No Windows DNA tradicional. A tecnologia pode mudar (AS P. funci onariam com uma instalação local do SQL Server.NET 135 tinha apenas a lógica relacionada à interface e acessava toda a operacional chamando componentes do COM localizados localmente ou em outro servidor. Um princípio essencial do modelo Windows DNA para desenvolvimento de aplicativos é que tudo fl ui através de três camadas. acessariam um par de servidores processando o SQL Server em uma configuração de grupo. e esses manipulam toda a com unicação com o banco de dados. cliente/servidor ou até como aplicativos Wi ndows. A flexibilidade obtida nesse modelo mais do que compensa qualquer trabalho adicional envolvido para assegurar que as três camadas sejam apropriadamente independentes. Muitos sistemas . que. embora o modelo Windows DNA seja bem detal hado. o mesmo modelo está sendo adotado. NET em vez de ASP. A abstraçào entre as camadas é li mitada por esse método de comunicação porque só é possível empregar as tecnologias que podem usar o . Apesar da implementação em escala muito maior. o ap licativo poderia executar tudo em um servidor. de modo que a camada de apresentação se comunica apenas com os objetos operacionais. que se conectaria a um agrupamento de máquinas com bal anceamento de carga executando o mesmo conj unto de com ponen tes do COM. Em um caso.Arquitetura dos Aplicativos na Plataforma . componentes que. De modo alternati vo. com o Acti ve Server Pages (interface da Web) se comunicando com os componentes (provavelmente escritos em Visual Basic 6. se encarregariam de interagir com o banco de dados.NET é uma mudança radical no desenvolvimento. Apenas uma máquina é usada. por sua vez. o mode lo também pode ser expandido para quantas máq uinas fo rem necessárias a fim de man ipu lar a carga do sistema. o que demonstra a flex ibilidade e escalabilidade do Windows DNA de três camadas que o tornou tão popu lar.NET em vez de objetos do COM e assi m por diante). o que proporciona a possibilidade de alternar o banco de dados sem que sej a preciso reescrever toda a interface com o usuário. mas podem ser aplicados a e la os mesmos conceitos gerais de arquilet ura.0). portanto.NET seguem os modelos e exemplos di scutidos anteriormente e podem ser classificados como de somente uma camada. todos atendendo ao Acti ve Server Pages. e o modelo Windows DNA é mant ido. mas as três camadas ainda são distintas. que. mas a arquitet ura ainda é a mesma. classes . Um sistema possível poderia empregar um grupo de 20 servidores Web. as t rês camadas são abstratas. a lg umas outras opções estão disponívei s para aprimorar a arquitelura do Windows DNA quando a platafo rma .

você poderia reescrever seus objetos operacionais sem ter de alterar a camada de apresentação ou de dados. e não no cliente.NET são as mesmas que já estão disponíveis por algum tempo.Dia 5 COM nas camadas de apresentação e operacional. A plataforma . . Escolhendo uma Tecnologia de Cliente Uma das escolhas mais polêmicas quando se projeta um sistema é que tipo de cliente será criado. Podem ser desenvo lvidas páginas AS P. abordando seus benefícios e problemas.NET ou um ap licativo Windows . Também é possível escrever as páginas da Web de modo que elas retornem o conteúdo HTML mais simples já visto. em vez de um fo rmato binário. Seria possível que os componentes já existentes em sua empresa estivessem escritos em Java. que em geral é uma discussão sobre a possibi lidade de do t ipo'thick' ou do t ipo 'thin'. ASP. O ASP. Sistemas de cliente do Tipo 'Thin' (ASP. mas essa é urna opção exclusivamente sua. Posso fornece r a você lima regra simples para informar que tecnologia usar em qual situação? Não. As seções a seguir descrevem as duas tecnologias.NET padrão (como o Vis ual Basic. que poderia fornecer a camada de apresentação do sistema. As principais opções na platafonna . isso significa que qualquer linguagem/ferramenta poderia ser usada para criar as camadas do sistema.NET será executado no servidor Web. e é executada antes do conhecido protocolo HITP.NET introduz uma nova mane ira de comunicação que pode permitir a abstração real entre as camadas. O segredo é determinar qual é mais adequada para um sistema ou projeto específico . mas ainda nesta lição.NET que exibam um conteúdo HTML mais sofisticado e que term ine com uma saída que precise da maior e mais recente versão do Internet Explorer.NET não possui nenhum requisito de cliente além do acesso à rede e alguma forma de navegador.NET usando o AS P. No Windows DNA convencional. disponibilizarei uma lista geral de perguntas que pode ser usada para ajudar a tomar várias decisões sobre a arquitetura.NET do Windows DNA é até me lhor do que antes quando ele empregava o conjunto antigo de tec nologia para desenvolvimento. Exatamenle como na Web. O código que você escrever para urna página ASP.NET) e são projetadas para processar solicitações recebidas de usuários e retornar o resu ltado apropriada em seus navegadores. inclu indo que tipo de cliente usar. mas apenas se estivesse utilizando uma linguagem compat ível com o COM (em geral o Visual Basic ou o VC++). enquanto o front-end estaria na plataforma .Ias.NET) As Aclive Server Pages são desenvolvidas com o uso das linguagens .NET para criar um aplicativo da Web ou Windows Forms (Fonnu láriosou Aplicativos Windows) para gerar um aplicativo Windows. A versão . que é o ponto mais importante quando se compara esse tipo de interface com qualquer outra. o SOA P (Simple Object Access Protocol). suas páginas podem ser visualizadas de qualquer plataforma em que a Internet esteja disponível. permi tindo que até o primitivo navegador Mosaic consiga visualizá. A comun icação do SOAP é Ioda feita com o uso da XML. Para o desenvolv imento de ap licativos distribuídos. O sistema operac ional do cliente também não é um problema.

como uma experiência o ff-tine igualmente funcional e satisfatória. e há muitas vantagens em desenvolver um sistema dessa maneira.NET. você pode estar se perguntando por que não usar sempre uma interface da Web.NET. a falta de requisitos de cliente significa que para seu apli cativo ser executado. e não é o único. É possível produzir uma interface na Web que seja semelhante. Um programa projetado para trabalhar com arquivos ou outros aspectos 'locais' de seu sistema não terá um desempenho tão bom se transferido para urna interface com o us uário com base na Web. Quando você atualizar seu site. mas sua contrapartida na Web. Considere alguns dos ap licativos Windows que você tem util izado. é 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.NET Framework deve se r instalado no cl iente. Concluindo.NET. . O Framework só é executado em platafonnas Windows. Um aplicativo AS P. • Alguns itens apenas não funcionam em um sistema com base na Web.são exemplos do que pode ser desenvol vido com o uso dos recursos do Windows Forms da plataforma . Aplicativos Windows (Windows Formsl Em geral. é dificil encontrar razões contra o uso de uma interface da Web. enquanto no caso do ASP. só é necessário no servidor Web. e perceberá que quase nada na Web chega próx imo do níve l da interface com o usuário. um ap licativo Windows é algo que você pode criar usando uma combinação dejanelase caixas de diálogo para ser executado na plataforrna Windows. o Outtook Web Access. Depois de ler a seção anterior sobre o ASP.NET em geral só func iona quando o usuário está conectado e seus recursos são afetados pela ve locidade dessa conexão. Basicamente. alterando as páginas armazenadas em seu servidor. o Adobe Photoshop e outros. e nenhum outro problema relac ionado à atualização ou distribuição. Um aplicativo do Windows Fonn s possu i alguns requi sitos para a máquina cliente: • • • o . Seu aplicativo deve ser instalado. o Outlook é capaz de funcionar on-line ou off-l ine. Quase todos os aplicativos que estamos acostumados a utilizar .o M icrosoft Oftice. o Visual Studio . o Quicken e até o Solitai re . não possui nenhuma funcionalidade off-li ne.NET 137 Continuando nessa mesma linha de raciocínio. Por exem pio. nada (além do requ isito básico de um navegador da Web de algum tipo) precisa ser instalado no computador do usuário. mas o trabalho necessário será muito maior se compararmos com um aplicat ivo Windows.NET. o próximo usuário a acessá-lo verá a nova versão. como o Microsoft Office. exceto por dois pontos: • A expe riência que o usuário tem com um navegador da Web ainda não é tão boa quanto com um aplicativo Windows. Todos esses beneficios que resultam da falta de requisitos de cliente tomam a escolha de uma interface da Web relativamente fácil .Arqu itetura dos Aplicativos na Plataforma .

NET é ma is difícil de usar no desenvolvimento do que o Windows Forms. é aí que ele se torna compl icado. Todos esses requisitos fazem parecer que a opção entre cliente do tipo 'thick' (mais robusto) e do tipo ' thin ' (mais simples) não é absolutamente uma tomada de decisão. Se tomar adec isão errada nesse momento.138 Dia 5 • Atualizar seu aplicat ivo em geral significa lidar com todos os microcomputadores de alguma maneira (ferramentas automatizadas ou opções de download de rotinas ou drivers específicos podem eliminar um pouco desse esforço). ainda é mais difícil gerar lima interface complexa nesse local do que no Windows. algumas vantagens do ASP. NOTA Com o uso do Dynamic HTML. NOTA Muitos desenvolvedores da Web não concordariam com m eus comentários de que o ASP. A primeira grande vantagem é que o desenvolvedor que usar o Windows Forms poderá criar interfaces com o usuário completas e funcionais e será possível fazê-lo muito mais rápido do que com o ASP. Para conc luir. Na verdade. mesmo antes das alterações específicas do aplicativo serem feitas . A dependência da máquina-c li ente possui um efe ito colateral perni cioso quando se está li dando com aplicativos públicos. ainda há várias vantagens interessantes nos ap li cativos do Windows Forms que valem a pena mencionar. o desempenho de seu aplicativo dependerá de uma máquina sobre a qual você não tem nenhum controle. no entanto. a última vantagem em usara Windows Forrns é que há aqueles itens (uso off.NET. Apesar de todos os avanços na tecnologia da Web. Urna segunda vantagem está no desempenho da interface eom o usuário. arquivos) que simplesmente nâo podem ser realizados na Web. mas apesar das diversas virtudes que apresenta. processamento mais rápido de objetos locais. Decidindo Que Arquitetura Usar Tomar uma decisão efetiva quanto à arquitetura.line. controles ActiveX e outras tecnologias mais complexas da Web é possível melhorar algumas das questões descritas anteriormente. Ao fazer isso.NET serão perdidas já que você estará criando um aplicativo com suporte restrito às plataformas (os controles ActiveX só são executados em certos sistemas operacionais e processado res. e o Dynamic HT ML não tem suporte em qualquer navegador) e que pode até ter alguns requisi t os de implantação . todo o pro- . contudo. uma interface do Windows em geral responde melhor (responde mais rápido aos cliques e oulras ações do usuário). decerto valerá a pena independentemente de quanto você precisar pagar para um desenvo lvedor de sistemas experiente. como por exemplo.

estabeleça um tempo maior a seu projeto para revisar a anál ise dos requisitos existentes e para examinar qualquer parte obscura pesquisandO diretament e a fonte (o pessoal operacional por trás do projeto. e por ter observado a de outras pessoas que não foi mu ito agradável. Após conhecê-los. Por outros quero dizer alguém que não seja você ou um membro de sua equipe em cujo trabalho confie. É claro que os erros sempre poderão ser corrigidos. NOTA Com base em minha experiência. Você pode analisar um resumo dos requisitos de sistemas na seção " Exemplos de Cenários" para ter uma percepção dessa tomada de decisões. obtidos com os Iíderes operacionais do projeto e seus futuros usuários. o segredo será projetar um sistema que possa manipular essas necess idades. mas primeiro fornecerei um conjunto de perguntas para serem formuladas quando for interpretar os requisitos ou examinar um grupo já existente deles. culpar os requisitos fornecidos não irá ajudar. Depois de ocorrido. Algum dos computadores clientes é um laptop? O acesso off. certifique-se de que você ou um membro de sua equipe est eja envolvido na documentação deles. os usuários ou mesmo um sistema anterior que executasse as mesmas ações).NET 139 jeto pode estar fadado à falha. Fatores Essenciais Que Influenciarão Sua Decisão o fator mai s importante na esco lha da melhor arquitetura são os requisitos do sistema. Esses detalhes. a instalação do software e a proteção contra vírus? So luções extremas para essas questões seriam um serv idor só para terminais burros em urna extremidade e computadores públicos de propriedade dos usuários na OUlra. mas nesse caso. muito trabalho poderia ser eliminado se uma nova arquitetura precisasse ser selecionada. portanto. devem especificar minuciosamente o que o sislema precisa fazer . Requisitos incorretos em geral resu ltam em um sistema inadequado e terminarão defin itivamente em uma estimativa invál ida .Arqu itetura dos Aplicativos na Plataforma .line ou remoto é necessário? Serão precisos serviços de discagem ou eles já existem? o . então. Se isso não for possivel. você precisa saber alguns detalhes sobre a plataforma em que seu sistema será executado: • • o Que sistemas operac ionais estão instalados nos sistemas de destino? Quais sâo as especificações de hardware das máquinas de destino (CPU/RAM/espaço em disco)? Qual o nível de controle que a empresa tem sobre as máqui nas de deslino? Ela controla a configuração. recomendo nunca desenvolver um sistema (ou pro jetar estimativas ao desenvolver um) com base nos requisitos interpretados pelos outros. Plataforma Cliente Como parte de seu planejamento.

corno o tipo de c li ente. Conjunto de habil idades da equipe de desenvolvimento. possivelmente com restrições para os recursos do aplicativo que poderão usar? Outras Considerações Outros fatore s essenciais no desenvolvimento de uma arquitetura serão li stados aq ui . a repl icação de bancos de dados e o protocolo usado dependem da rede em que o sistema será executado: • • • • Qual a velocidade de comunicação disponível entre os usuários e os servidores de back-end (ou o que estará d isponível. Com relação a esses pontos. NetBEU I c outros) de rede está em uso? Segurança Todo sistema precisa ter pelo menos algumas especificações de segurança.:'lção também do cliente. mas que não é fác il de converter em uma si mples pergunta. as perguntas a seguir serão pontos de partida úte is na determinação das necessidades de segurança do apl icativo: • • • • • Corno os us uários serão autenticados na rede existente? As máqui nas clientes pertencem a um domín io do Windows 20001NT? Se público. mais dificei s do que outras.Algumas formas de desenvolvimento são mai s complexas e. Na maioria dos casos. se os servidores de back-end ainda não existirem)7 Os serviços de acesso remoto serão necessários e/ou fornecidos? VPN? Dial -up? Os computadores-cliente têm acesso à Internei? Há algum software/hardware de firewall entre os usuários e os servidores de back-cnd? • Que tipo (TC P/IP. É mais uma questão de conseguir informações su fi cientes a fim de incluí-las no planejamento da arquitetura.Se a lógica operacional que conduz o s istema se alterar rapidamente. isso afetará a freqüência com que o cl iente em um sistema cl ieme/servidor teria de ser atual izado . o acesso será anônimo ou os usuários terão de se ident ificar? Esse aplicativo será responsável por alterações na senha ou pelo gerenciamento de outros recursos de segura nça? Os us uários te rão diferentes níveis de acesso. Uma informação essenc ial que preci sa ser detenn inada. A lém dessa parcela da informação. é qual o nível de im portância que será dado à segurança do apl icat ivo e seus dados? Tanto um s istema fin anceiro quanto um que registre a pontuação em jogos de golfe consideram a segurança. não há respostas defi niti vas. mesmo um aplicat ivo não protegido deve possuir uma declaração de que foi projetado dessa maneira. • .140 1 Di a 5 Rede Muitas opções relacionadas à arquitetura. portanto. • Velocidade das alterações na lógica operacional. IPX. é nessas áreas que o nível de experiênc ia do desenvolvedortem a maior importância. porém . Alterações maiores na lógica operacional decerto precisariam até mesmo de um a atualiz. mas o grau de preocupação provavelmente será um pouco mai s alto em um deles.

eu consideraria um sistema em que os dados ficariam armazenados nesse escritório e seriam replicados para cada local durante períodos lentos ou à noite. Nesse caso.NET sempre será uma opção. Exemplos de Cenários As discussões anteriores sobre os falares essenciais se concentraram no que você precisa apreender durante a fase de análise dos requ isitos. mas isso na verdade envolve exam inar várias descrições cam estilo de narrat iva e tentar decifrar as informações que elas contêm.Arqu itetura dos Aplicativos na Plataforma . desenvolva um sistema que possa ser aprimorado. No mínimo. Sistema de uma Videolocadora Narrativa dos Requisitos: "Uma cadeia de videolocadoras precisa de um novo sistema para rastrear as fitas. mas que será aberto para a comunidade da Web em alguns meses. depois que cada loja fechasse. e um escritório central que deseja ser atualizado regu larmente cam os dados desses locais (veja a Figura 5. As máquinas no local cliente parecem (de acordo com essa breve di scussão) serde um padrão comum e bastante novas de modo que um aplicativo do Windows Forms é uma possib ilidade. os clientes e as locações. e um do ASP. imagine um sistema planejado para ser usado por duas pessoas. • Requisitos/planos futuros . Os computadores são novos. que em geral são s uficientes para os propósitos da loja.múltiplos locais ou filiais executando a entrada de dados. mesmo se não tiver informações sobre quais serão os planos futuros. .Ao desenvolver a arquitetura para um sistema. Cam esse comentário e uma conexão relativamente lenta retornando para o escritório central. você poderá tentar desenvolvê-la de acordo com o nível de habi lidade da equipe ou basear a aptidão necessária na arquitetura se lecionada. Como exemplo desse tipo de infonnações. o fator decisivo terminará sendo a declaração que diz que a atual ização noturna dos dados atenderá. mostrarei alguns exemplos breves de requis itos de sistema e as informações sobre a arquitetura que podem ser obt idas por meio deles.NET 141 um sistema cliente/servidor é mais simples de escrever do que um completo com três camadas. Os dados sobre as Vendas/Clientes/Vídeos de cada loja não precisam estar disponíveis no escritório central em tempo real. Todos os locais atualmente estão conectados ao escritório central por meio de modems. com placas Pentium II. Cada loja possui um ou mais computadores agindo como term inais de ponto-de-venda. o sistema atual executa à noite alguns comandos em lote que transmitem os dados para o escritório central. você terá de enxergar a lém dos requisi tos al uais e consideraras de amanhã.2). Nesta seção." Discussã o Esse é um cenário bem COmum . Se já souber os detalhes específicos. documente-os em seus requisitos e projete de modo apropriado. Quando escolher uma arquitetura.

e uma carga programada desses dados seria enviada para o escritório centra l toda noite. com todos os escritórios executando o seu trabalho através de uma conexão dial-up." Essa declaração provoca mais alterações do que você pode imaginar. assim . seria difícil de criar. A decis{io !Jrincipal é se o clienle deve se cOllectar dire/amel/le ao escritório celllral ou usar algum lipo de depósito de dados local. em vez disso. . eliminando. Isso produziria um sistema que teria de ser redefinido logo que a empresa passasse para a próxima etapa de seus planos.2 Dados Escritório Central Dados da Filial A l'id&olocadOrll possui lima arquir&IUra COII/IIn1. FIGURA 5. Em vez d isso. é preferível tentar desenvolver uma arquilelura q ue aborde os planos atua is e possa manipular os requisitos futuros. Um banco de dados local de algum tipo (MSDE ou Access) seria instalado em cada loja. proporcionaríamos a vantagem de ter os dados de todas as lojas disponíveis e alualizados no escritório central. fosse usado um banco de dados centra l. mas o desempenho de lima conexão via modem provave lmente seria um prob lema. Um front-end com base na Web que desse suporte a funções que uma videolocadora em geral precisa (seria necessário pesq uisarmos mais para determinar isso). corno a impressão de recibos e talvez cartões de associados. Se. poderíamos apenas ignorá-lo e projetar o sistema com base no resto da informação. Escritório da Filial Dados Dados Acesso Público Considere o que seria diferente se a Iinha a seguir fosse incluída nos requis itos da videolocadora: " Por fi m. COII/ IIII/ilas filiais se coneclando (I 1/11/ escritório cel/lral. no qual eles poderão procurar filme s e verificar se um certo film e existe em estoque em uma loja específica. a necessidade de um servidor Web.142 Dia 5 Os sistemas para cada loja seriam aplicat ivos do Windows Form s. Como é um ' requisito futuro'. esperamos criar um site da Web público para nossos clientes.

FIGURA 5 . O comentário sobre "alguns comandos em lote transmitem os dados para o escritório central toda noite" de certo já é incorreto. Com esse novo requisito. Mas um site da Web não teria um níve l de resposta tão bom quanto um aplicat ivo do Windows Forms com o armazenamento de dados no local da loja. mas estivesse atrasado em um dia. um apli cativo da Web parece mais adequado porque todos os dados seriam armazenados no escritório central e alguns códigos poderiam ser compartilhados entre os dois sistemas. de abrangência nacional. assim como de um recurso para inserir listagens novas.~ Escritóri o da Filial ~­ ~ ­ l\. porque você com certeza iria precisar colelar mais informações sobre os planos futu ros a fim de criar uma arquitetura adequada para o si te público da Web.3 ). deseja informatizar suas li stagens de imóveis.f} Escri tório da Filial da FilTal da Filial Serviço de Listagens Imobiliárias Narrativa dos Requisitos: "U ma grande empresa imobi liária.NET 143 Sem enlramos em muitos detalhes. então. Os corretores adicionariam as listagens direlamente a um sistema de computador. e acessariam os doi s de se us . mas um atraso aceitáve l teria de ser determi nado (talvez 15 minutos) . Para um sistema de computador. ( \. não seria tão útil! Não é necessári o obter as informações em tempo real. e seria preciso uma largura de banda muito menor do que em uma conexão contínua..3 A decisão de ler 11m sile público da "'eb allerou a ar{fuilelura da I'ideolocadora para asseguror qlle os dados do escritório celllral fiquem alllali=ados.~ ..-+~ . considere as alterações básicas que seriam necessárias (veja a Figura 5.Arquitetura dos Aplicativos na Plataforma . . Esses precisariam do serviço de li stagens. 15 minutos é muito tempo. e um site público da Web seria disponibilizado para os clientes pesquisarem as que estivessem dispon íveis e enviarem mensagens para os corretores apropriados. ' ~--?::~. ( ~ - Dados Escritório . " Escritório da Filial Escritório da Filial Internet {\.: _ da Filial ~ Central \. talvez o sistema também possa ser projetado com um armazenamento de dados loca l e atualizações em lote. Se o site da Web disponibil izasse informações sobre os filmes. Se o tempo de espera planejado não for tão curto.

lima nova li stagem não chegaria a eles ou suas listagens novas não seriam carregadas por cerca de um dia. Biblioteca Pessoal com Informações sobre CDs Narrativa dos Requisitos "Como projeto prático. Devido à baixa velocidade (atual) desses modems celu lares. voltar aos diversos entrevistados e pedi r dados adicionais.com . mas essa não é . anal isá-los e. De modo alternativo. você agora teria duas escolhas: continuar ut ili zando o ap li cativo off-li ne. Esse processo pode ser apenas para escl arecer as perguntas originais. como o COMA). você irá desenvolver uma bibli oteca pessoal com informações sobre C Ds que os usuários poderão instalar em suas máquinas para registrar s uas colcções. a arquitetura do aplicativo não é um conceito definitivo. Já que esses corretores em geral estão viajando durante todo o dia. você poderá extrair alguns elementos essenciais logo de imed iato. Como você pode ver. Haverá um site da Web. e o sistema permi tirá a geração de alguns relatórios simpl es que usem esses dados. brjagentes. gostaria de considerar as duas opções e executar alguns testes. Poderíamos sincronizá-los com o sistema quando estivessem no escritório. os corretores poderiam usar modems sem fio (com a tecnologia dos cel ulares. Eles têm de poder acessar e ai nda adicionar. Em geral. no entanto. eles usam seus lap· tops re motamente a maior parte do tempo. atualizar e excluir as listagens que inseriram no serviço. Por meio dessa opção. A questão é "como manipu lar a interação com os corretores". O único item realmente desconhecido nele é a pesquisa de detalhes sobre os CDs na Internet." Discussão: Dada a descrição anterior. e a arquitetura para desenvol vê-lo também deve ser. Todos os detalhes sobre a coleção de CDs do usuário serão armazenados. é preciso sol icitar todos os requisitos possíveis.los ao escritório central ou à Internet de qualquer locaI. Isso é aceitáve l? Talvez. portanto.te. nomedos. tudo enquanto viajam o dia inteiro. ou talvez novas perguntas surjam das respostas fornecidas. principalmente quando se lida só com uma quantidade li mitada de informações sobre a situação. Ela dará suporte à pesquisa por nomes de CDs e ao rastreamento de títulos na Internet. centado. que poderiam conectá. porém executando sua sincronização através de uma conexão sem fi o (resultando em atualizações mai s freqüentes) ou desenvolver o recurso adicionar/editar/excluir em uma parte segura do site públ ico da Web da agência imobi l iária. preci samos de mais informações. E provável .144 Dia 5 laptops. em seguida. que eles só passem pelo escritório ocasionalm ente e. que já está defi nido. ht tp : j jwww . mas o site público poderia ser iniciado sem espera." Discussão: Esse sistema é bem simples. pelo menos com relação à interface com o público. fazer o download das listagens em suas máquinas e carregar qualquer listagem nova que tivessem acres. que os agentes acessariam com um navegador comum pelo modem celular.

O projeto e a arq uitetura de seus sistem as são críticos para a obtenção de êxito.0. mas tudo precisa de uma base. na verdade.NET existe. porém você deve escol her um banco de dados que não seja o SQL Selver porque é preferíve l fazer a distribuição sem precisar de nenhum software adicional nas máqui nas dos usuários.NET ou sistemas que não sejam .NET.NET 145 uma questão relacionada à arq uitetura. como o Vi sual Studio 6. P&R P Ou. separando as de apresentação. mas a plataforma . Cert ifi~ que~se sem pre de basear suas escolhas nos requisitos que obtiver e não esqueça de planejar para o futu ro! Como foi mencionado.NET.0. O SOAP é excelente para a comunicação com a platafonna .asp para encontrar muitos recursos úteis. Os sistemas q ue já foram desenvolvidos com o mode lo do Windows DNA serão fáceis de transferir para o universo da plataforma . Apesar dos novos recursos e alterações radicais na tecnologia subjacente.NET é novo e poderoso. mas. P No universo da plataforma . todas as infonnações poderiam ser annazenadas apenas como XML em um conj unto de dados (DataSet).microsoft.NET e é especialmente bom quando se trabalha entre . operacional e de dados) ainda é vál ido. foram s ubstituídas pelas eq uivalentes da plataforma .emvezdecomo velho pa ~ drão binário do DCOM? R Você está correto com relação ao fato de que o DCOM não é mai s o método preferido. Um aplicativo do Windows Fonn s seria o mai s ad equa~ do. mas o MSDN dedicou uma seção de seu site da Web para a arquitetura dos aplicat ivos . N ET não é tão diferen~ te do que era para um sistema do Visual Basic 6. com/l i brary Idefa u1t. a arquitetura de um sistema. mdb) ou um banco de dados MSDE atenderiam sat isfatoriamente a esse projeto. Um arquivo do Access ( .NET. Acesse http://msdn. muitos aspectos da arquitetu ra dos sistemas estão além do escopo desta lição. Resumo o un iverso da plataforma . Algum as das tecnologias a ele incorporadas. não é um recurso ultrapassado? R O Windows DNA representa tanto alguns conce itos quanto tec nologias.Arquitetura dos Aplicativos na Plataforma . Você afirmou que ele ainda é empregado. mas o conceito do Windows DNA (computação distribuída em várias camadas. Como alternativa.NET fornece mai s do que apenas o SOAP como um meio para dois aplicati vos se comunicarem. muitas opções ainda são as mesmas. asp? ur 1=11 i bra ry len -u sl dnbdal html/daag. todos os meus componentes se comunicarão uns com os outros por meio do SOAP (XML acima do HTTP).ri dizer que o Windows DNA foi abandonado e não é mais aplicado agora que a plataforma .NET.

2.NET (não é só procurar um site da Web criado com e la)? . Workshop o Workshop foi planejado para ajudá-lo a anteci par possíveis dúvidas. ele será considerado um sistema cliente/servidor ou de uma única camada? 3. Teste 1. Se um apl icat ivo usar um arquivo do banco de dados Access localizado em um serv idor. "Respostas dos Testes/Exercícios". mas há várias outras fo rmas de comunicação inc luindo os formatos binários. revisar o quejá aprendeu e começar a pensar em como colocar seu conheci mento em prática. O SOAP é uma opção. O que tem de ser instalado para que um computador execute um aplicativo criado com a plataforma .146 Dia 5 duas redes porque ele passa com fac ilidade através de firewa lls. As respostas do teste estão no Apêndice A. Nomeie uma vantagem relevante cm usar uma interface com usuário com base na Web em vez de um aplicativo Windows.

você deve detectar quando as falhas ocorrerem em seus programas e lidar com elas em vez de permitir que a mensagem de erro padrão surja como resposta. Hoje. algo bem pior poderá acontecer (você pode não ser pago). seria melhor se pudéssemos evitar esses problemas antes que acontecessem . Se ocorrer no momento em que um cliente estiver processando seu programa. você aprenderá as duas princ ipais maneiras de evitar problemas em seu código: • • Tratamento de exceções estruturadas Depuração . Em segundo lugar. Primeiro. Portanto. é bom se certificar de que seu aplicativo tenha a menor quantidade de erros possível. Há duas técnicas importantes que o ajudarão a ev itar erros.• SEMANA 1 DIA o Que Fazer Quando Programas Bons Apresentam Problemas e para Se Certificar de Que Isso Não Aconteça Pode acontecer um erro quando seu programa estiver sendo executado (normalmente causando a interrupção dele).

poderá proteger o código que a calcula. NOTA Sou daqueles que crê ser difícil usar em demasia o SEH. o Ira/ame/1/o de exceções estruturadas é uma estratégia para lidar com erros de hardware ou software. quando seu programa tenta acessar LIma parte da memória que não deveria ou um evento semelhante que ocorra com base no hardware. o código necessário para processá-las será mais fáci I de escrever e mais consistente.ou até uma exceção neio eSfrulllrada. leitura ou gravação em arqu ivos. ou qualquer outro momento em que você ache que um erro possa ocorrer. Por exemplo. quando estiver para efetuar uma divisão. não saberá o que está tralando. em que um erro difere de uma exceção? Se você estiver fam iliarizado com outras versões do Visual Basic ou mesmo com a maioria das linguagens de programação. Há dois tipos de exccções . seus programas e usuários de erros compensam em muito uma pequena redução no desempenho que resu lte da utilização do SEH. seja sensat o. deve aprender apenas o que significa urna exceçt70 eSlrulllrada . Uma exceçiío é algo que sa i da rotina (e em geral de maneira inesperada) cm seus aplicativos. Os benefícios que pode obter protegendo a si mesmo.o tratamento de exceções estruturadas. Outras vezes cm que se deve usar o SEl-I são na leitura em bancos de dados. decerto se deparou com o conce ito de erro. Se não ho uver nenhuma possibilidade (e quero dizer. realmente não existir a possibilidade) de um erro ocorrer. Se por causa de um erro que você cometeu no programa ou um valor que o usuário inseriu . trataNovo TERMO mento de exceções estruturadas). Por out ro lado. É claro que uma exceção de hardware é aquela causada pelo hardware . Qual é a diferença? Porque precisamos de uma palavra nova e de algo que soa tão extravagante como o tratamento de exceções estruturadas? .NET é a primei ra versão adar s uporte a um conceito melhorem linguagens de programação . O Que E o Tratamento de Exceções Estruturadas? Antes que você possa examinar o que é Structured Exception Handl ing (SEH. mas não de exceção. Erros e Exceções Bem. Uma exceção de software ocorre quando se tenta atribuir um valor incompatível a uma variável ou um erro parec ido acontece.por exemplo. Execute o tratam ento de exceções estruturadas para 'proteger' as seções de código que est iverem propensas a serem alvos de exceções. abertura.148 Dia 6 Tratamento de Exceções Estruturadas As versões mais antigas do Visual Basic usavam o tratamento de erros para proteger um aplicativo.o programa tentar fazer a divisão por zero. Tratando os dois tipos de exceção da mesma maneira.exçeções de hardware e de software. O Visual Basic . deixe de lado a digitação adicional. . Caso contrário. o cód igo protegido poderia lidar com a exceção resultante.

ou organizada. Cada bloco Try .o Que Faze r Qu and o Programas Bons Apresentam Problemas e . End Try na verdade não produz nenhum resulta· do. mas a tratasse em outra.. Se decidir ter várias seções Catch em seus blocos Try. assegu· rando que tudo seja nonnali zado depois do fato. Capture a ex· ceção com a pa lavra· chave Catch.. como você verá.. End Trya fim de tratar asexceçõcs sem· pre que ocorrerem. quando algo acontece em seu código fora do fluxo normal de controle. A Seção Catch Marcar apenas uma seção de código com Try . Parte do problema.. é que um erro s i gn i ~ fica muito mais. no entanto. Uma exceção é mais forma l. um outro recurso adequado das ex· ceções é que hoj e elas são compartilhadas entre todas as linguagens que tenham suporte da plataforma ... ela deve ser ' capturada' e tratada. A exceção ocorre.. Além disso. A li· nha Catch marca a seção do bloco que realmente trata as exceções que possam ocorrer. A maioria dos erros no Visual Basic tem sido tradicionalmente tratados com o uso da instrução On Error. A Sintaxe de Try . Isso significa que seria possível ter um código que causasse uma exceção em uma linguagem . 149 Primeiro. também é recomendável ter uma seção Catch genérica que capturará todas as exceções . . Inicie o código que deseja proteger com Try e fina lize a seção com End Try.. Se uma exceção ocorrer no código protegido. uma exceção na verdade é um erro. End 1'y Catch Ex As Exception Try: [nd Try onde Try é o início da seção do código a ser protegido e [nd Try fina liza o bloco de cód igo. Se resolver inseri r todas essas seções Catch.... End Try pode ter uma ou mais seções Catch. cada seção deve capturar tipos diferentes de exceção. o Bloco Try Você deve proteger a seção dos códigos com Obloco Try .NET. para repetir a definição anterior. O SEH define uma maneira particular de lidar com exceções. As exceções são tratadas com a ut ilização de uma abordagem mais estruturada. End Try SINTAxe o código a seguir mostra a sintaxe do bloco Try . Você pode querer fazer isso para permitir que cada tipo de exceção seja tratado de modo diferente. Essa instrução lião é estruturada e pode resultar em um código confuso que salte de um local para outro de um proced imento. Um exemplo de erro poderia ser uma função que retornasse um resultado que não fosse esperado ou se o programador usasse o algoritmo errado. Cada seção Catch em geral se dest ina a um ou mais tipos de exceção.

Chame-o de Exceptions. Acesse a caixa de diálogo Project Properties dando um clique com o botão direito do mouse no nome do projeto do Solution Explorer e selecionado Properties. End Try teria uma aparência seme lhante à mostrada na Listagem 6. Se existisse apenas uma seção Catch. Esse erro pode ser demonstrado com facilidade divid indo-se um número por uma variável não iniciali zada. Configure o Startup Object como modE xceptiona1. Altere o nome do módulo criado para modExcepti onal.1 Capturando Várias Exceções 1 Try 2 3 4 5 6 7 8 Catch eNoFile As Fi l eNotFoundException ' trate aqui a exceção causada por arquivos não encontrados Catch elO As IOExcept ion ' trate aqui a exceção causada por uma entrada/resultado (atch Ex As Except i on ' trate aqui as outras exceçóes 9 End Try ANALISE Esse bloco Try foi projetado com a fina lidade de capturar erros em um procedim ento que processa arq uivos. fica mai s evidente que código é usado para cada tipo de exceção. Em seguida. Crie um novo aplicativo do console. de EIS (I OExcept i ons) c outras. que ocorre quando há uma div isão por zero. Exam inaremos seus res ultados e o que ela faz ao programa. Para atender a finalidade deste exemplo. (É uma das causas ma is comuns dessa exceção). adicionaremos o tratamento da exceção. . 2. Dessa maneira.150 Dia 6 que possam passar pelas outras seções. A Listagem 6.1 . Criaremos um programa com uma exceção intencional .1. Essa fonna do bloco Try . e saberemos como ele pode proteger o código. CÓDIGO LI STAGEM 6. 3. . você usará uma exceção simples e surpreendentemente comum.2 mostra que aparência o código final deverá ter: . de modo que você possa ver como ela func iona. 1. 4 . você precisaria de algum código que detenninasse a exceção específica. Division By Zero. As configurações fina is devem ficar como as que são mostradas na Figura 6. Há seções separadas para tratar exceções por arquivos não encontrados (Fi 1eNotFoundExecpt i ons).

..... •._: "_fi" ww... ' <." . Se você selecionar Break. Portanto. 151 A caixa de diálogo ['roj ecl Properlies para 1/11/ programa com lili/ti exceç[io.. ele será final izado.~ ~. ReadLine() 13 End Sub 14 15 End Module ANALISE As linhas 6. LISTAG EM 6 ... 0""" .. Você usou decimais aqui.. uma exceção ocorrerá.... não foi alterado. Se você executar esse programa no IDE.. .Console . c ..-. ... 5 7 Dim dDivisor As Decima l = O 8 Dim dResult As Decimal = O 9 'Essa 1 i nha é a que causará 10 ' uma Exceção Di vi s i onByZero 11 dResult = dOividend jdDivisor 12 System. ::II ' : tv«<'. mas no modo Debug (depuração). portanto selecione Continue neste momento... . 7 e 8 declaram suas variáveis.....o Qu e Faze r Qu an do Progra m as Bons Apresentam FIG URA 6 .. o programa ainda será executado... verá um erro como o mostrado na Figura 6. Neste caso... --.... o valor com o qual o divisor foi inicializado.. ' ..2 Um Programa com Exceção 1 Module modExceptional 2 3 Sub Main() 4 '***Este código contém uma exceção.. ::..... _ -- .... quando o compulador tentar efetuá-la. """".."". ~_ ..2. Examinaremos melhor o modo Debug ainda nesta lição....... 5 'e portanto não será executado até o f i nal 6 Dim dDividend As Decimal... Os valores também foram inicial izados..1 Prob lem as e ..... O..... Isso fará com que o programa continue a ser executado. ".... Antes da divisão na linha II .. mas também poderia empregar outros tipos de variável numérica.......

porém sua correção será mais difíci l.Main. em um computador de desenvolvimento (que tenha o Vi sual Basic . como System.Decimal. e este resultado aparecerá: RESULTADO 1 Unhandled Exception: System.Decimal. você deve procurar uma possível causa em seu código..NET instalado).OivideByZeroException informa principalmente dois dctalhes: A exceção que acabou de ocorrer é uma das 'comuns' . Aqui. no entanto. I """ Se você reproduzir o exemplo e tentar executá-lo em umajanela do prompt de comando. Fi leNotFoundException). Em geral (mas nem sempre). Selecione No. Ao encontrar uma exceção. Várias mensagens de erro relacionadas a exceções são muito mais longas.modExcept i ena 1 .. Primeiro. Portanto. Algumas outras exceções comuns estão descr itas na Tabela 6. Ma i n () i n 5 C:\Code\Day06\Exceptions\modExceptional . deve aparecer a caixa de diálogo Jusl. . ' . A primeira linha sempre identifica o tipo de exceção que acabou de ocorrer. Mais ad iante. As outras linhas são uma lista invertida dos procedimentos que estavam efetivamente em execução quando a exceção ocorreu . A principal função de todas essas informações é localizar candidatos ao erro. todas contêm informações semelhantes.modExceptional. Decimal d2) 3 4 a t Except i ons .r:ceçüo. o erro se encontrará em um deles.Divide.152 Dia 6 FIGURA 6. 10. Mensagelll-padnio de e. • • De maneira seme lhante.2 . at System. o restante da exceção disponibiliza muitas informações. A exceção que acabou de ocorrer envolve lima operação de divisão.OivideByZeroException was thrown. Na saída do exemplo. descobriremos que foi uma do tipo Sys tem.Oi vi deByZeroException. vemos que na verdade ela surgiu no procedimento System.DivideByZeroException: 2 An exception of type System. nesta lição. Esse procedimento foi chamado por Exceptions. modExcept i ona 1 . o resultado fina l será semelhante. seu programa conti nuará. O tipo de exceção em geral é uma grande indicação da natureza do erro e pode até proporcionar idéias de como corrigi-Ia. onde estiver efetuando uma divisão.Divide(Oecimal dI . que faz parte do espaço de nome System (e não de outro espaço de nome. Ma i n) e percorra-a até o final.vb:l i ne 11 ANÁLISE Essa é uma mensagem-padrão que você verá quando uma exceção ocorrer.In-Time Debug . exam inaremos algumas ferramentas que tornarão esse trabalho mais fácil. Comece com o prime iro item da lista (nesse caso. o tipo de cxccção System. isto é. Neste caso. .1 . você deve primeiro examinar o código de cada um desses procedimentos.

por favor consulte a ajuda do Visual Basic . Há muitas outras. deve adicionar o SEH a seu programa para fornecer ao usuário mais informações quando um erro ocorrer.. TABELA 6. lançar essa exceção de qualquer método. Incluí ArgumentNul1 Exception e Argumen t OutofRangeException. ~Introdução ao . Isso pode acontecer porque talvez ele não tenha sido criado ou o ca minho está incorreto . Ocorre quando é passada uma variável que é grande ou pequena demais para o método. Isso assegurará que conclua todos os seus procedimentos. entre 1 e 12). 153 NOTA Esta não ê uma lista completa de todas as exceções possíveis. se você passar o número -1 a um método que foi criado para conter um valor relativo ao mês (isto ê.1 Exceções Comuns Ouando Ocorre ? Categoria geral para erros que ocorram quando o tipo (ou vaIar) errado for passado para um método.NET para obter mais detalhes . na atribuição a segui r: Dim iSmal1ishNumber As Short = 50000 O exemplo de um erro que não é definido no espaço de nome $ystem. . Esta exceção ocorre quando você tenta acessar um arquivo que não existe..o Que Fazer Quando Programas Bons Apresentam Problemas e . Ocorre quando seu programa não tem memória suficiente. como veremos ainda nesta lição. em seguida. Em geral acontece por causa de erro do programador. Ocorre quando você passa um valor nulo para um método. Enquanto continuar no aplicativo. Em geral só acontece quando há erro do programador. e ele não o aceita. como. Você pode criara shell para seu aplicativo e. você pode criar suas próprias exceções para adicionar a essa lista se precisar. por exemplo. Isso poderá acontecer ao preencher arrays extensos ou ao executar um laço . para obter mais informações sobre os espaços de nome). Ocorre quando se tenta acessar o membro de um array que não existe. Uma exceção bem comum que ocorre quandO você tenta inserir um valor que é muito grande em uma variável. TipO de Exceção ArgumentException ArgumentNul1Exception ArgumentOutOfRangeException OivideByZeroException I ndexOutofRangeExcepti on NotlmplementedException O urOfMemoryException OverflowException FileNotFoundException Agora que você já vi u a exceção e tem (espero) uma idéia me lhor do que seja. A lém disso. Nesse caso. por exemplo.NET Framework~. Ocorre quando se tenta efetuar uma dívisão por uma variável não inicializada ou que contenha o valor zero. mas também poderia ser causada por entradas inválidas do usuário. Geral mente usada como um espaço reservado quando o desenvolvedor está trabalhando pela primeira vez no programa. a exceção é definida no espaço de nome System_ 10 (veja o Dia 8 . substitua a exceção pelo código efetivo. Pode surgir por causa de um erro do programador ou nas entradas de dados do usuário.

em seguida. portanto. como mostram as etapas a seguir: a1tera~ I. Save Excepti on. Adicione um bloco Try . ReadLine() End Sub End Module 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ANÁLISE A linha 11 inicia o bloco Try. Ad icione um código para exibir uma mensagem mais am igáve l quando a exceção ocorrer. 3 Ad icionando o Bloco Try . vb As. 'e portanto não 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 exceção OivisionByZero Try dResu l t = dOividend I dDivisor Catch Ex As Exception System. selecione File.3. Use uma instrução Catch genérica para capturar a exceção Di visioll By Zero .154 Dia 6 Abra o projeto Exceptions no Visual Basic . 2.NET.Consol e. . sc lecione File. CÓOlGO LISTAGEM 6. End Try ao cód igo que efetua o cálculo. Save Exception As no menu. Faça isso se lecionando o arquivo no Solution Explorer e. 4. Quando essa exceção ocorrer. o programa será interrompido e procurará algo para tratar dela. a única linha executável é aque causa a exceção da divi são por zero na linha 12. o código desse local até o primeiro bloco Ca tc h da linha 13 está protegido. Altere o nome do arquivo que contém o código para Excepti ons2 . Já que a seção Catch da li nha 13 é genérica. ") End Try System. Em .. vb. WriteLi ne ("Verif iq ue o di vi sor. e você poderá empregar as propriedades dessa variável para visualizar mais informações sobre a exceção.Write Line("Ocorreu um erro de divisão por zero. em seguida.Console. o novo código deve ficar com uma aparência semelhante ao da Listagem 6. Altere o nOlne do projeto para Excepti ons2.. capturará qualquer tipo de exceção. A variáve l Ex será usada pam armazenar a exceção criada.") System. Nesse caso.Console . Faça isso selecionando o projeto no Solution Explorer e. 3. Você copiará o projeto anterior e fará ções para capturar a exceção.. End Try 1 Module modExceptional Sub Main() '***Este código contém uma exceção.

Write) Tcy 10 11 12 13 14 15 16 17 18 19 20 21 'Grave no arquivo strOut =New System.• End Try Você pode encontrar LIma si tuação na qual que ira proteger duas seções de código com blocos Try .WriteLine{"Não foi poss í vel gravar no arquivo: {O} .4 An i nhando Blocos Try .FileStream Dim strOut As System .. System. •. não haverá prob lema. . Write(DateTime . End Try..OpenOrCreate .". 10.. COOIGO LISTAGEM 6.IO. mas deseja lidar com as exceçôes de maneira diferente. Portanto.ToString(» Catch elO As Exception Console.WriteLine("Não foi possivel abrir o arquivo: {O}. Porém . Um dos blocos Try (o que começa na linha lO) está todo contido dentro do outro bloco Try (o que começa na linha 4). IO ..Out ". não há opção. como mostra a Listagem 6.out".o Que Fazer Quando Programa s Bons Apresentam Pro blemas e . Se os doi s forem blocos separados de código.. IO. se um dos blocos estiver contido no outro (veja a Listagem 6. End Try.FileStream(FileName. é preciso aninhar os blocos Try .IO.. Além disso. End Try 1 2 3 4 5 6 7 8 9 Sub WriteToF i le{ByVal FileName As String) Dim fsOut As System. Nesse caso.StreamWriter Tcy 'Abra o arquivo fsOut = New System. começando na linha posterior a instrução End Try. e o código continuará até o final . System.StreamWriter(fsOut) strOut . Today . há dois blocos Try . se o arqu ivo não puder ser aberto. Fi 1eName) End Try Catch eFile As Exception Console. 155 seguida. . a in strução Catch da linha 15 a capturará. o bloco Try interno está aninhado no outro bloco. End Try neste exemplo. .4). No entanto.4 é um exemplo de gravação em um arqu ivo.4 . FileMode . e o usuário verá "Não foi possível gravar no arqu i vo SomeFil e .". exibindo "Não fo i possível abrir o arquivo: SomeFile . o bloco Catch da linha 18 capturará a exceção.. FileName) End Try End Sub ANALISE A Listagem 6. Aninhando Blocos Try . IO. será exibida uma mensagem de eITo. Se uma exceção ocorrer na gravação que acon tece na linha 14. Você examinará esse assunto com mais detalhes no Dia 8.F ileAccess .

WriteLine{"Não foi possivel abrir o arquivo: {O} .Write) Tcy 13 14 15 16 17 18 19 20 21 22 23 24 25 26 'Grave no arquivo strOut "New System. " . FileNam e) Fina lly fsOut. ".5 mostra a inserção de uma seção Finally no cód igo da Listagem 6. End If e outros blocos. aninhar blocos perm ite que a escrita do código seja fe ita de uma mane ira mais organizada do que se eles não fossem aninhados. terá de executar algo. con fi gurar variáveis com Nothi ng Oll excluí.StreamWriter Try 'Abra o arquivo fsOut " New System. ocorrendo ou não um erro durante a gravação.Write(OateTime. se você escrever um códi go que grava informações em um arquivo. COOIGO LISTAGEM 6.ToString(» Catch elO As E xception Console . deve fechá -lo. A Listagem 6.CloseO End Try Catch eFile As Exception Console. Essa seção surge depois de todas as seções Catch . IO .F ileAccess. mesmo se uma exceção ocorrer. às vezes se deparará com situações nas quais. não há lim ite para a maneira de an inhá· los.5 Usando a Seção Fi nall y 1 2 3 4 5 6 7 8 9 10 11 12 Sub WriteToFile{ByVa l FileN ame As String) Dim fsOut As System.IO. IO.lO .Write Line("Não foi possível gravar no arquivo:{O} .Ias quando desejar. .OpenOrCreate ._ System. e deve conter apenas o código que sempre terá de ser executado. Por exemplo. lO. Esse é um bom local para fechar arquivos.StreamWriter(fsOut) strOut.4. FileName) Finally strOut.CloseO End Try End Sub .Dia 6 Exatamente como com If .. A Seção Finally Quando você escrever blocos Try.FileM . ode System. Às vezes.FileStream Dim strOut As System .F ileSt ream{FileName .Today.IO. Ad icione essa funcionalidade com a seção Fi nal1y.

CÓDIGO LISTAGEM 6.6 A Instrução Throw 1 Dim oCust As Customer " New Customer("Bob" . Pode ser algo relacionado ao seu aplicativo ou uma exceção ' normal ' . Depurando Novo TERMO Tão importante quanto a tratar apropriadamente os eITos e exceções é a depuração• o ato (e arte) de tentar encontrare corrigir os erros do código. tanto StreamWri ter quanto Fi 1e serão fechados. E claro que isso leva com freqüênc ia à pergunta. 157 Aqui. mesmo se erros ocorrerem. causando o surg imento do depurador (se houver um ambiente de desenvolvimento instalado) ou de uma mensagem de OITO . Assim. Ali ."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("Não é possível atribuir Employee a Customer.. o tratamento de exceçôes fornece uma maneira estruturada e limpa de proteger seus programas de erros devido a problemas no hardware. "Em primeiro lugar.. é boa prática fazer uma limpeza sempre que não precisar mai s de uma variável. "Sjerunk l lO) 2 Dim oEmp As Employee " New Employee("Phil".o Qu e Faze r Qu an do Progra m as Bons Apresentam ANALISE Prob lemas e . Talvez queira gerar lima exceção se o programa tentar atribuir uma instância de Empl oyee a uma variáve l criada para conter objetos Customer.") 9 [nd If ANÁLISE A linha importante do exemplo é a oitava.6. você pode ter criado dois objetos nesse aplicativo. por que há eITos no código? Os desenvolvedores . Em vez de criar um novo tipo de exceção. uma nova exceção Inval i dCastException poderá ser gerada e usada como notificação do aplicativo através da instrução Throw. Emp 1oyee (funcionário) e Cus tomer (cliente). Embora isso não seja necessário. você criou uma nova instância do objeto InvalidCastException e a ' lançou' . Issoé mostrado na Listagem 6. pode-se querer not ificar um usuário de que algo de muito errado aconteceu. é possível reutilizar Inval idCastExcepti on. Lançando Exceções Ocasionalmente. Qualquer programa se tornará mais robusto se você adicionar o tratamento de exceção a um código que poderia gerá-la. Por exemplo. entradas invál idas do usuário ou a seus próprios enganos. Isso gerará uma exceção adicional que deve ser capturada por uma instrução Ca tch ou tratada pela rotina-padrão.

Esses podem ser fáce is ou dificeis de resol ver. o código a seguir seria compilado. a enxergo da manei ra 'correta' . poderá cometer um erro acidental ao digitar um nome de variável posteriormente. o que pode não ser o desejado. 1 Imports System 2 Module Typo 3 4 Sub Main 5 Dim sName As String 6 7 8 9 10 11 End Console .já que o Visual Basic . um erro de digitação. É possível que • surja como • Um engano na estratégia usada para executar alguma tarefa . mas o modo usado para fazê-l o não levou em conta todos as possibilidades. há um subconjunto desses tipos de erros que. esses erros devem desaparecer quase inteiramente.NET verifica rá a digitação das palavras-chave. Option Explicit fa ria com que o Visual Basic . Essas falhas são em geral chamadas de erros lógicos que às vezes são os mais difíceis de corrigir. Mesmo sendo verdade que todos os desenvolvedores são talentosos (você está lendo este livro. Nessas situações. Porém.158 Dia 6 não têm de ser astutos?". chamamos sempre outra pessoa.NET crie de modo automático uma nova variável. não?). sNmae) End Sub Module Como já fo i dito.WriteLine("D nome digitado foi {DIli . No entanto. . Examinei durante alguns minutos uma seção de código na qual sabia que havi a um erro de digitação. A Fonte dos Erros Um erro (em um programa de computador) pode aparecer de várias maneiras. Por exemplo. se você não configurar Option Expl i ci t em seus módulos. passemos mais algum tem po examinando corno eles podem surgir. ReadL i ne () Console. Por exemplo. por razões que desconheço. Toda vez que leio a palavra escrita incorretamente. WriteLine("Digite o nome : ") Name = Console. o cérebro sempre lê corretamcnte. os erros de digitação podem se tornar um problema. fazendo com que o Visual Basic .NET capturasse esse erro. De certa maneira. mas não vi nada. Essa variável nova seria inicial izada com o valor O(em variáve is numéricas). Sem ele. você também poderia capturá-lo sem grandes dificuldades. mas nunca retornaria nada. alguém com o sobrenome St. Se não o fizer. Antes que você possa remover os erros de seus programas. às vezes enganos acontecem. Você poderia estar ordenando lima lista de nomes. Jean deve vir antes ou depois de uma pessoa que tenha como primeiro nome Santana? • Um engano ao inserir o cód igo. Eles ocorrem quando se escreve o cód igo de mane ira errada. sem Opt ion Expl i ci t .

Isso ajudará o Visual Basic . Depois de alguns momentos de brincadei ras. Consciente de sua necessidade.. para ter certeza de que são apropriados e proteger as seções de código que possam gerar exceções usando o tratamento de exceções estruturadas.7 contém a saída procurada envo lvendo um empréstimo de 100 mil dólares. .20 .25 1060. RESULTADO LISTAG EM 6 . pode haver muitas fontes de erros em seus programas. ou depurar. o Visual bas ic .79 1072. Além disso. você poderá executar a tarefa de modo mais apropriado .o Qu e Faze r Qu an do Progra m as Bons Apresentam Prob lemas e . você depurará um programa que calcula uma tabela de valores de hipoteca. Aprendendo a Depurar com a Prática Como já foi dito. Esses são erros difíceis de corrigir depois que ocorrem. Essa opção assegurará que você sempre esteja a par quando um valor for passado a uma variável de um tipo diferente. Aconversão automática pode levar a erros traiçoeiros. De qualquer modo.66 790. Bem. Você examinará alguns dos controles que podem ser usados para isso posteriormente neste livro.NET a detectar muitos erros que você possa por acidente adicionar a seu código digitando incorretamente nomes de variáveis.82 673. ser um 'programador defen sivo' também ajudará . Faça Use Qption ExpliCit em todos os módulos.96 584. os dois voltam ao trabalho. a depuração é quase tanto uma arte quanto uma ciência. A melhor sol ução para a entrada ou dados incorretos é reduzir a chance do usuário inserir infonnações inváli das.92 803.25 552. Algumas delas estarão sob controle.59 536. Pressuponha que os dados sejam inválidos .88 659. tenho a impressão de que umas das melhores manei ras de aprender a depurar é utilizar esta técnica em um programa real .00 5. Por isso. e não apenas examinar suas ferramentas (o que pode ser um pouco subjetivo). Portanto. causando algum embaraço.NET fo rnece a você mui tas ferramentas para ajudá-lo a corrigir. seus programas. • Um erro causado por entradas do usuário ou pelos dados. ela requer urna certa destreza para que se descubra o que pode estar causando um erro. Ele most ra os diversos pagamentos mensais que seriam necessários a empréstimos de vários períodos e taxas de juros. enquanto outras não.7 Resultado de um Programa Que Calcula a Tabe la de Pagamentos de uma Hi pateca Digite o valor do empréstimo: 100000 Anos 10 15 20 25 30 Juros 5. • Não esqueça também de ativar Opti on Stri ct.você deve veril1car os valores. Às vezes.84 599. A Listagem 6. 159 que olha por cima de nossos ombros e imediatamente percebe o erro.

14 1239.45 751.67 675.43 644. 07 648.89614.74 A Listagem 6.30 599.86 1187.25 8. 69830.75 10.27 867.50 8.75 9.08 629.01 1200 . 41 836.11 583. 68 1044.53 970. 62 1029.15 1074.57 1226.57 760.81 682.01 912.09567.00 7.19 915 .02908.02 927.60 665.50 9.8 mostra a tentativa ini cial de criar esse programa e seu resultado.00 9.4887 1. 73 839.50 6.82 733. 11 1148 .79 1097 .36 948.14 859.70 1321.42 1135.85 1059.70 1266 . 11 94 1.86 984.ControlChars 4 5 Modu le modMain 6 7 8 9 10 11 12 13 14 15 16 Sub Main() Oim sInput As String Oim dblReturn As Oouble 'Armazena a entrada do usuário Dim dblPayment As Double Console .52 891.Readline{) dblReturn = CObl (sInput) 17 .95 755. 98 1307.Visua18asic.30 659.8 U Programa Que Preci sa de Depuração m 1 Option Explicit On 2 Imports System 3 Imports Microsoft.21 843 .99 699.160 1 Dia 6 LISTAGEM 6.00 8.75 8.23768.22 932.18 805.91 1253.13 873.25 6.25 7.07 788.30 790.44 771.76 852.33 716 .00 730.86 716.57 1110.27 999.20 804 .65 7. 83 1174.82805.45 883.61965.75 Resultado de um Programa Que Calcu l a a Tabela de Pagamentos de uma Hipoteca (continuação) 687.70 840.38 822 . COOIGOI RESULTADO LISTAGEM 6 . 80 857.59 738.21 690. 33 1293 .78 615.91 706.7 5.51 1014.21 820.72 632 . 76 1280 . 91 1161.00 6. confirmando que você precisa executar uma depuração.14 786. 87 856. 26 817 .93 745. 24 884 .55 1085 . 08 1122 .08898 .41 702.27 899 . 28 1213.36 775.75 6.70877 .28 955.50 5.25 9.Write(UDigite o valor do empréstimo:") sInput = Console.71 822.50 7.38 722.

iYears * 12). 161 LISTAGEM 6.Writeline() Next End Sub 42 43 44 45 46 47 48 Public Function Payment(ByVal Principal As Double. ByVal Annuallnterest As Double .Write("Pressione ENTER para continuar") Console .Writeline(Tab &"Years" &Tab & "10" &Tab & "15" & Tab & "20" &Tab & "25" &Tab & "30") Conso 1e .o Que Fazer Quando Programas Bons Apresentam CODIGOI RESULTADO Prob lemas e . _ 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 empréstimo: 100000 . _ dblAnnualInterest.8 Um Programa Que Precisa de Depuração (continuação) 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 'Crie a tabela OutputMortgageTable(dblReturn) Console.. 00") & Tab) Next Console.#O")& Tab & Tab) 'iYears * 12 para obter o número de meses (pressupondo " pagamentos mensais) Conso 1e. ReadLine() End Sub Private Sub OutputMortgageTable(ByVal Principal As Oouble) Oim iYears As Integer Oim i Rate As Integer Oim dblAnnuallnterest As Oouble Console..Write(Fonnat(dblAnnuallnterest . Wri tel i ne (" Juros ") For iRate : 500 To 1000 Step 25 dblAnnuallnterest = iRate / 100 For iYears = 10 To 30 Step 5 Console. "0 . Wri te (Fonna t (payment (pri nc i pa 1. IO .

50 707 .67 811.00 6.25 519 .50 9.NET e estiver trabalhando em um programa.33 5.00 665 . 75 561.00 7.25 686.00 8. 50 7. 67 9. 75 6. 75 728 .50 644. 00 8.00 769. 75 811. 50 8. 50 7.25 9. 67 5.50 10 . 50 624. 50 624.83 6.25 7. esse . 00 644. 33 457. 33 5.75 10. 67 8.00 Os Modos na Vida de um Programa Durante a criação dos programas no Visual Basic .25 436 .50 9. 50 707. 50 582. 50 582 . 50 6. 33 7.25 603 . 67 5.50 540.25 790.50 707 .25 436.67 9.25 540.75 832.00 519 . 00 415 . 00 7.50 478 .50 10.1 7 5.83 8.162 Di a 6 CODIGOI LISTAGEM 6. 17 499. 33 728.17 6. 33 603. 75 644 .67 436. 17 5. 50 832.17 8.50 561. 00 644.00 582 .17 624 .25 707 .00 749 .83 6. 33 5. 67 8.67 8.00 519.67 811.83 8.00 6.50 457.50 728.67 6.00 9. 75 644 .50 5.83 665. 50 7.25 8. 33 8.00 7.00 9. 50 8. 75 9. 75 561.00 686.33 478 . 33 7. 17 7.00 15 5. 25 7.83 540.00 832 .00 499 . 00 9.33 10 .1 7 9.50 811.25 6.83 7. 50 7.33 5.50 707.00 9.75 749.50 540.33 478 .7 5 478.50 5.25 624 .00 582 .17 749. 00 6.50 790 .75 582 .25 603 .50 8.25 686.00 769 .75 811.75 8.17 749.NET.00 519.00 499 .25 8. eles passarão por três modos distintos. Quando você iniciar pela primeira vez o VB .33 6.67 686.25 769.83 9.50 8.50 457.67 561.33 603.50 790 . 00 20 415.67 6. 50 5.83 665.25 519 . 83 790.00 415.50 8.67 9.50 6. 33 728.00 749 .1 7 9.25 5.00 665 .00 769.83 790. 25 9. 17 7. 75 665.33 5.75 728 .17 624 .83 6.00 832 .67 25 415. 75 478.83 9.00 9. 00 5.00 436 .00 603 .00 7.25 457 .33 8.17 6.83 9.50 832. 33 7. 75 8. 50 9.8 Um Programa Q ue Precisa de Depuração (continuação) RESULTADO Anos Juros 10 415 .33 8. 25 6. 50 5.67 436.75 7.00 6. 75 499.25 5. 75 9.83 540. 75 10.67 6. 50 5. 00 7. 17 7. 00 5.50 457.50 30 5.67 561. 00 6.67 686. 75 7.25 769.75 499 .50 6.

.... .. Observe que a barra de título inclui o marcador [break]. . . . " ) ...."" . .. Depois das palavras ' Microsoft Visual Basic' . próximo à linha na qual gostaria que estivesse o ponto de interrupção.. ... ou o modo Break pode ser introduzi do no IDE. <. . De maneira semelhante. 1'" _ tlot> ~ O Visuall3asic . . . . .. • . ou Debug.. 'Co • .. .u.· . Essas ferramentas terão um valor inestimável na revelação e correção de erros em seus programas. ... ..3 para ver um exemplo do IDE no modo Break. .. 0._ .. . .< •••." . . Como alternativa.. t . .1.0 . ' ....""Par-'" Use o modo Break para auxiliar na depuração de seus programas. . passará para o modo Break e retornará ao IDE. Um círculo vennelho deve aparecer na margem. .. aparecerá [design]..... o.. Ele será executado normalmente até que atinja a Iinha e. . . '. . Nesse modo. ... . em seguida.. Dê um clique com o botão direito do mouse na linha do código e selecione Insert Beakpoint.. . .uh • c. O últ imo modo é Break. veremos [run].. modo Break.. como mostra a Figura 6. ... você pode inseri r um ponto de interrupção na li nha onde gostaria que o programa fosse interromp ido. . . ..... ' ..3 [00 [<II. Essa interrupção pode se dar devido à ocorrência de uma exceção. Veja a Figura 6. Seu programa ainda estará em processamento em segundo plano. Um círculo vermelho deve aparecer na margem. são disponibilizadas várias ferrame ntas por meio das quais você poderá visualizar o conteúdo de variáveis. quando um programa for executado no IDE. Se quiser introduzir o modo Break.. 163 será o modo Design... .... Esse modo surgirá se o programa que est iver em execução for interrompido de alg uma fonna.".. examine a barra de título da janel a. em pregue a palavra-chave Stop. significando que esse é o modo Run.. •• . ou testar blocos de código. .. Um ponto de interrupção pode ser inserido em seu código de uma entre três maneiras: • Dê um clique na margem colorida esquerda da janela do código.NEr 110 ·u ·!ii:g" 1o r.>J.. . -. monitorar ou alterar o fl uxo do programa. ....3. mas se encontrará em uma pausa.... . FIGURA 6..ta r. _ .' Oo"_ T"" .. Para confinnação sobre qual modo está em uso... . . .o Que Fazer Quando Programa s Bons Apresentam Prob lemas e .. ..(. "'" _ ~ . _ ..

. próximo à lin ha dblReturn : CObl(sInput) Deverá aparecer um círcu lo verme lho perto da linha. I.- II ""'<""'" 1 ' 1 ' I. dê um clique na margem colorida..4 Caixa de diálog o Ne li' Breakpoilll... 1_ .. New Breakpoint no menu.. perrnitindo que seja digitado um valor para o empréstimo.. Com o módu lo modMai n. Você deverá ser enviado novamente ao IDE onde uma seta amarela será adicionada ao círculo vermelho...5..... como também que os crie para situações em que uma variável for alterada ou alcançar um valor específico..164 Dia 6 • Selecione Debug. ou simplesmente em que uma certa cond ição for verdadeira..4). Essa caixa é o meio mais flexível de criar um ponto de interrupção... Insira 10000 e pressione Enter. vb aberto no editor. 1_ 1 -. Ela não só permite que você defina um ponto de interrupção para encerrar o programa quando uma linha for at ingida.. de modo que você possa testar os pontos de interrupção. . _~. __... A seta amarela sempre mostra a próxima linha a ser executada. Isso abrirá a caixa de diálogo New Breakpoint (veja a Figura 6... como vemos na Figura 6. - ~ . Se isso acontecer."".. . 1- 3 Usando Pontos de Interrupção para Examinar o Programa de Exemplo Carregue a versão inicial do programa no IDE (do diretório OriginalMortgage)... A janela do console deve surgir. FIGURA 6 .. inic ie o programa no IDE.n ..

e não nas que declaram variáveis novas.. _C . -. e você deverá passar para o proced imento OutputMortgageTabl e. '. • Step OUI Ocasionalmente este comando será úti l se você passar por um procedimento no qual sabe que não há erros. " . 165 6. Ele permite que o usuário visualize o fluxo ou lógica de um programa. •.I .Write Line(Tab & "Years" &Tab & "10" &Tab & "15" & Tab & "20" & Tab & "25" & Tab & "30") Observe que a linha amarela não se detém nas instruções de declaração de variáveis. .... Isso acontece porque elas não são consideradas código executável. '''-'''. Selec ione-o mais uma vez. .." ...... a próxima ação disponível será executada. Depois que você tiver entrado no modo Break.".1 Percorrendo Seu Código Um dos recursos mais úteis d isponíveis no modo Break é a capacidade de percorrer o código... possivelmente encontrando erros em laços ou durante chamadas de procedimentos.*>l .. e estará na linha Console . 'Go< U. Ç)C~~... ~'.. .. disponíveis no menu Debug ou na barra de ferramentas de depuração. Selecione-o de .. .. ' R " • Co .. 11111 . . Selecione-o de dentro do procedimento Ou tputMortgageTable. _ Iotlo ~ Iro ....:.. .. &:I.o Oue Fazer Ouando Programas Bons Apresentam FIGURA Problemas e ...(1)00 .••."""_T... poderá começar a percorrer seu código linha a linha.o<.. ' . . U · IlUHIIl • • • a OM Ootu> I. Elas são: • Step Into Esse é o comando de etapas mais usado.. _ _ .... . . .. ... Toda vez que você selecioná-Io.. ...... .U<l ·C . .. ...-.......... • :3 ~I!... " ." . A seta amarela só parará em linhas que executem algo.. Ele faz com que o resto do procedimento seja executado e move a seta amarela para a primei ra linha depois da chamada original. f'o Execlltando t'"' jlooo _ ii: .. • (0 . ... " _""" " 1 .. ..5 1/111 ..«< . . e você deve ver a seta amarela se mover para a linha OutputMortgageTable(dblReturn) Selec ione-o novamente.J "'. Isso permitirá que examine o efeito de cada uma delas sobre as variáveis ou que se certi fique de que os programas executem realmente as etapas que planejou.". Há quatro funções principais relativas às etapas.. ) .. .. . . _ . .. ...... 1"'. -... .. . ~ prog rallla com pOlllo de inlerrupçcio."t. . .. .... . ).. .. . - ....

O comando Run To Cursor penn itirá a execução de todo o código até a linha se lecionada. Exam ine a jane la do co nsole (veja a Figura 6. Inicie o programa. em vez dos cinco que você esperava (um para cada coluna de 10 a 30). Esses podem ser laços que terminam precocemente ou que não são executados o suficiente. . • Step Over Também é útil quando há uma depuração nos procedimentos em que sabemos que não existem erros.166 Dia 6 dentro do procedimento OutputMortgageTabl e. O comando Step Over tratará o proced imento como se fosse apenas uma linha de código. Por exemplo. Quando as info rmações fore m sol icitadas. Para percorrer o programa de exemplo. se a seta amarela estivesse na linha OutputMortgageTabl e de Sub Ma i n. Remova o ponto de interrupção que você criou anteriormente dando um cl ique no círculo vermelho da margem e gere um novo no início do primeiro laço For dentro de Output MortgageTab 1e. • Run To Cursor Outro comando útil quando você sabe que uma seção de código não possui erros. Encerre o programa selecionando o botão Stop Debugging na barra de ferramentas ou selecione Stop Debugging no menu Debug. e você seria tran sferido para a próxima linha de Sub Main. O valor da taxa dejuros está sendo repetido a cada passagem pelo laço quando só deveria ser executado uma vez antes do laço. faça o segu inte: I. Para usar este modo. e Step Over fosse selecionado. ou testes lógicos que não produzem os resultados esperados.6). O programa deve entrar no modo Break na linha For i Rate = 500 To 1000 Step 25 4. por exemplo. Observe que na verdade há dez itens na linha. 2. Usando o Recurso de Percorrer o Código para Examinar o Programa de Exemplo Percorrer um programa às vezes pode revelar erros causados pelo desenvolvedor. selecione a linha ate onde deseja executar o código e a opção Run To Cursor no menu Debug ou no de atalho. e deverá ser enviado de volta ao procedimento Sub Main. digite 100000 como quantia do empréstimo.WriteLine{) 5. 3. Percorra o cód igo (ou se lec ione Run To Cursor) até que alcance a linha Console . todo o código de OutputMort gageTable seria executado.

. Eles ainda serão valores incorretos.7. O resultado deve ter a seguinte aparência: Antes: For iYea rs ~ 10 To 30 Step 5 Console. mas pelo menos um dos erros foi corrigido. "0. 8. Em seguida.10") & Tab & Tab) Depois: Console . 6. Observe que a seta amare la está novamente no início do proced imento OutputMortgageTa ble. 9. Pressione Step [nto para continuar a execução do programa. FIGURA 6. como na Figura 6.6 Prob lemas e .Write(Fonnat{dblAnnuallnterest .o Que Fazer Quando Programas Bons Apresentam FIGURA 6 ..7 Primeira correr. O Visual Basic . Após interromper o programa. Agora se você percorrer o código até a linha da etapa 4.Write(Forrnat(dblAnnualInterest . . Examine ajanela do console para ver os va lores errados (eles são os mesmos para todas as linhas).l1o. retorne ao [DE e selecione Continue para finali zar o programa. transfira a li nha de código que exibe a taxa dejuros em cada linha da tabela para que fique antes do início do segundo laço For. deverá ver apenas cinco valores exi bidos nessa linha.NET recompi lou e recarregou o procedimento com as alterações.. "0 . 167 Exibindo o cabeçalho. Execute o programa até o final usando antes Step Oul para retornar a Sub Main. 10") & Ta b & Tab) For iY ears ~ 10 To 30 Step 5 7.

o valor atual será exibido. sem precisar que todo ele seja executado. . assim como seu tipo e valor no momento. Algumas das mais úteis são mostradas na Figura 6. Outro beneficio dessa ferramenta é que se pode sclecionar a parcela de um cálculo para saber seu valor. há várias ferramentas que você pode usar para moni lorar as variáve is. A janela Locais mostra todas as variáveis do proced imento atual .168 Dia 6 Examinando as Variáveis Além de invest igar o flu xo da lógica de seu aplicativo. Encerre o programa se ele est iver em execução agora. será possível monitorá·las durante toda a sessão de depuração. E recomendável depurar a função Payment para se certificar de que apenas os valores corretos estarão em uso. "O nome [nome de sua varióvel] não foi declarado". Essa é uma ferramenta útil e prática se só quisennos fazer uma verificação breve de um valor ocasionalmente . Senão. Janela Locais Estajanela em geral aparece na parte inferior da te la quando se está no modo Break. Dê um clique com o botão direito do mouse nas variáveis e se lecione Add Watch para adicioná·las àjanela. Caso contrário. Exatamente como quando percorreu o código. A janela Watch mostrará as variáveis as quai s você estiver interessado. porque os valores ficarão com a cor vermelha quando forem alterados. o ún ico erro que ainda . ela o informará que. uma pequena janela aparecerá most rando seu valor no momento.NET fornece ferramentas que pennitem a visuali:wção do conteúdo das variáveis. poderia existir estaria no cálculo de cada variável. A janela Locais será útil sempre que você depurar um procedimento que altere os valores das variáveis. selecione·a na opção Windows do menu Debug. Esta janela é úti I para monitorar um grupo de variáveis. A linha deve ser esta Dim dblMonthlylnterest As Double ~ Annuallnterest I 1200 2. Remova todos os pontos de interrupção existentes e adic ione um à primeira linha da função Payment. Ad icione um segundo ponto de interrupção à linha End Sub de Sub Main para permit ir que você vis ualize a tabela antes que o programa se ence rre. Caso contrário. Isso é prático quando se está percorrendo um código. Siga estas etapas: I. Janela Watch Estajanela em geral aparece na parte inferior da tela quando se está no modo Break. em que a variável dbl Return atualmenle annazena o valor 100000. o Visual Basic .8 e descritas a segu ir: • Pesqu isa em janela suspensa Se você mantiver o cursor do m Ollse posicionado sobre uma variável do procedimento aluai.8. selecione·a na opção Windows do menu Debug. É possíve l ver isso na Figura 6. Isso penn ite determinar se se us conteúdos representam o que você defi niu e se o cálculo está correto. • • Examinando Variáveis para Depurar o Programa de Exemplo Já que você deu uma aparência melhor para o layout da tabelada hipoteca. Em vez de só exam iná·las quando est iverem na janela Locais. Se elas estiverem no escopo.

169 6. ~ ..... . Execule O programa até que alcance o ponto de interrupção... . Podemos notar que a variável dblMonthlyInterest se alterou e ficou vermelha na janela Windows. U .. _ _ . essa linha é executável porcausa da atribuição. . Acrescente parênteses ao cálculo de modo que as adições sejam executadas antes e.. Interrompa o programa e altere a linha de cálcu lo para que fique como a descrita a seguir: . . Uma janela suspensa aparecerá... mantenha o cursor do mouse sobre o texto selecionado. No entanto. 1l '\:. 7. se você mantiver o cursor do mouse sobre uma variável (por exemplo.. a adição. Annua 1Interest) no IDE._ t'ol ~ 1«'0 Examinando os I'a/ores das Wlriáveis. Observe que ela inclui todos os valores de Principal . 6. Do mesmo modo. e só então elevaríamos o resultado à quantidade referente aos períodos.. ~ g" J ~e. . Esse erro será repet ido na segunda metade da função .. Avance uma etapa para processar essa linha.o Qu e Faze r Qu an do Progra m as Bons Apresentam FIGURA Prob lemas e .. De maneira semelhante. -. o cálculo como um todo sofre de uma grande carência de parênteses. " (.. examine ajanela Locais.. o valor certo deveria ser aproximadamente 1. .. Quando o programa entrar no modo Break. Selecione o código 1 + dblMonthlylnterest A Periods Em seguida. deverá ver uma jane la s uspensa mostrando o valor atual. 5.. então... "..8 !lo "" ~ e. teste o valor novamente. . Insira 100000 para o valor do empréstimo.647 porque a adição deve ser efetuada antes... .p . . Um cálculo rápido em algum local confirmará que isso estará correto se você executar primeiro a operação exponencial e..I . informando que o valor é 1. ..1. 3. "' ... ... 4.. em seguida. <11 ~~ ~ . Annuallnterest e Periods. NOTA Mesmo começando com uma declaração.

é possível colocar cada etapa em uma linha. você pode criá-Ia como uma operação isol ada . não economize em seu uso . Declare uma variáve l temporária do tipo duplo para annazenar o conteúdo e substitua o cálculo por essa variável. Isso permitiria s ua posterior substituição por um código que processasse uma função semelhante. DIC A 8. remova o ponto de interrupção na linha da função Pay ment e reexeeLite o programa.empregue quantos precisar pa ra se certificar de que as operações sejam efetuadas na ordem correta. DICA Uma boa idéia é isolar seções de código que sejam especificas do sistema operaciona l ou da interface com o usuário nos procedimentos. Retoques Finais no Programa de Exemplo Há algumas outras alterações menores que você pode fazer para organizar melhor este programa . só terá de substituir o procedimento. Quando você estiver escrevendo uma função matemática. porém com formulários Windows. e não o código que o utiliza. Você deve ver a tabela correta da hipoteca. . Outra alteração seme lhante é simplificar o cálculo da função de pagamento da hipoteca. quando você precisar alterar a interface com o usuário. 6. Por exemplo. Como alternativa. ou em alguma outra tela.9 FIGURA Tabela correia da hipoteca. embora isso exija mais va riáveis temporárias no cálculo. da Web. Encerre o aplicativo. como mostra a Figura 6. Já que a expressão (1 + dblMonthlylnterest) " Periods) aparece duas vezes no cálculo.170 Dia 6 Return Principal * (dblMonthlyInterest *_ ((1 + dblMonthlyInterest) A Periods) 1_ (((1 + dblMonthlylnterest) A Periods) .9.1)) Os parênteses não custam nada. Assim. o cód igo que é usado para formular uma pergunta ao usuário poderia ser inserido em uma função.

dblAnnualInterest .WriteLine(Tab & "Vears" & Tab & "l O" & Tab & "IS" & Tab & "20" & Tab & "25" & Tab & "30") Console.o Que Fazer Quando Programas Bons Apresentam Pro blemas e .IO") & Tab & Tab) For iVears = 10 To 30 Step 5 'iVears * 12 pa r a obter o número de meses (pressuponha pagamentos .mensai s) Console.Write(Fonnat(Payment (Principal . iYears * 12)." O.9 Código Depurado Option Explicit On 2 Imports System 3 Imports Mi crosoft.Visua 18asic.ControlChars 4 5 M odule modMain 1 6 7 8 9 10 11 12 13 14 15 Sub M ain() Dim sInput As String Dim dblReturn As Double 'Solicite a entrada do usuário Dim dblPayment As Double Console. Readline() End Sub Private Sub OutputMortgageTable(8yVal Princ ipa l As Oouble) Dim iVears As Integer Oim iRa te As Integer Oim dblAnnua l lnterest As Oouble Console. ele deve ficar semelhante ao mostrado na Listagem 6. CÓDIGO LI STAGEM 6."0 .Write ("Pressione ENTE R para continua r" ) Console .ReadLine() dblReturn = CDbl(sInput) 'Crie a tabela OutputMo r tgageTab l e(db l Return) Console .Write{"Oigite a quantia do emp réstimo:") s Input = Console. 00")& Tab) Next Console.. 171 Depois que você tiver feito todas as alterações no programa do exemplo.WriteLineO 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 ..W rite(Fonnat(db lAnnualInterest .WriteLine{"Juros") For iRat e = 500 To 1000 Step 25 dblAnnualInterest = iRate / 100 Console .9.

Esse recurso fi cou um pouco ultrapassado por causa da janela suspensa que já exibe o valor das variáveis.1» End Func ti on A M odule Outras Ferramentas para Depuração Muitas outras ferramentas estão disponíveis para ajudá-lo na depuração .9 44 45 46 47 48 49 50 51 52 53 54 55 56 57 End Next End Sub Public Function Payment{ByVal Pr incipal As Double. mas você deve ao menos saber que ex islem.172 Di a 6 Código Depu r ado (continuação) CÓOIGO LISTAGEM 6 . Por exemplo. Um emprego comum para esta janela é exibir o conteúdo das variáveis ' disponibi lizando-o' nesse local. Windows. a jane la Quickwatch também é útil para testar as expressões tanto quanto as variáve is. Esta janela pode ser empregada para depurar problemas em que a decisão errada seja selecionada em uma instrução If. a pi lha de chamadas exibiria os do is proced imentos (em ordem inversa). se seu Sub Ma i n chamasse QutputMortgage Tao 1e. 16666666666667 [ -D3 • Quickwatch Window Disponível no menu Debug quando se está no modo Break. • Ca]] Stack Dispon ível no menu Debug. _ 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) . Abre uma janela que permite inserir uma li nha de cód igo a ser executada imediatamente. pode-se usar a janela lmmediate para testar pequenos cálcu los enquanto os programas são escritos. isso permitiria a visual ização da linha de Sub Main que chama o segundo procedi mento. por exem pl o: ?db l Mo nthlylnterest 4. Abre uma janela que mostra o valor das vari áve is. Abre umajanela que mostra a li sta de procedimentos ativos no momento. Já que está disponíve l havendo ou não a depuração. quando se está no modo Break. Isso possibil ita o teste de pequenos trechos de código. Entre elas destacamos • lmmed iate Window Está sempre disponível no menu Debug. Muitas de las são avançadas e não fazem parte do escopo deste livro. Você pode usar esse recurso para navegar nos dois procedimentos. No entanto. ByVal Annuallnterest As Double . .

Assegure que as variáveis armazenem os valores corretos e que os cálcu los sejam exatos. quando se está no modo Break. você pode proteger o programa de erros adicionando o tratamento de exceções estruturadas às seções críticas de código.como onde o código abre arquivos. permitindo perfeitamente que o us uário cont inue a usar o programa.o Que Fazer Quando Programas Bons Apresentam • Problemas e . Você deve se esforçar para tornar seus programas tão livres de erros quanto possível.. percorra-o minuciosamente. Algumas vezes. Vi sua 1Basic. A melhor maneira de conhecer as ferramen tas e saber quai s delas o auxi liarão mai s.NET. há realmente uma falha ou erro no código. já estamos fazendo isso. é sua res ponsabi lidade... 173 Disassembly Disponível no menu Debug. como desenvolvedor. Na próx ima lição. Resumo Todos os programas têm erros. o objeto Err está disponível para você. Catch . Pontos propensos à falhas . no entanto. ou faz cálculos . Uti l quando se executa urna programação com múltiplas linhas de execução no Visual Basic . você trabalhará com objetos. Em qualquer dos casos. Esses blocos tratam os erros de modo sofisticado. P&R P O que acontecerá se cu tiver algum código antigo que use n Error Preciso reescrevê-lo para empregar o tratamento de exceções estruturadas? R Não. investigue os valores das variáveis utilizadas e isole as falhas empregando essas ferramentas. Est~ é uma ferramenta avançada que mostra as li nhas de execução ativas em um programa. lê ou grava informações.. Se incluir a referência Mi crosoft . Isso pode acontecer porque o autor do programa não testou todas as possibilidades de entradas ou não protegeu o programa da falta de arquivos ou bancos de dados. Em vez de tentar el im inar os erros com a leitura do cód igo.. Esta é uma ferramenta avançada que mostra a linguagem de máquina efetiva criada para o programa e só será realmente útil se você conhecer a montagem.devem ser inseridos em blocos Try . Threads Dispon íve l no menu Debug. Como poderá ver. • O Visual Basic . Além disso.NET o ajudarão nessa tarefa. quando se está no modo Break. "Trabalhando com Objetos". o erro está na pessoa que executa o programa. é testá-Ias. Certifique-se de usá-Ias para percorrer seu código e de que o fluxo se encontre da forma que foi planejado. poderá continuar a usar On Error Goto e On Errar Resume Next. As ferramentas de depuração do Visual Basic . tentar assegurar que nenhum desses erros faça o usuário perder informações. De manei ra semelhante. Em outras. estudaremos o ass unto com mai s detalhes no Dia 7.. End Try .NET fornece muitas ferramentas que o ajudarão a disponibilizar programas sem erros. .

Você acabou de herdar o bloco de código a segui r.iHigh As Integer Oim sInput As String 'Permita várias execuções da geraçao da tabela Do 12 13 'solicite valores Console .VisualBasic. o resultado deve ser semelhan te a RESULTADO Tabela de Multip li caçâo 5 6 7 (de5a9) 5 25 30 35 40 6 30 36 42 7 8 40 9 35 42 49 48 56 64 45 54 63 72 8 9 45 48 56 56 63 72 81 Adicione o tratamento de exceções e depure o código da Listagem 6.10 para assegurar que ele gere o resultado desejado.ControlChars 3 4 Module modTable 5 6 Sub Main() 7 8 9 10 11 Dim iLow. se o usuário inserir 5 e 9. Em seguida. As respostas do teste estão no Apêndice A. Ele solici ta ao usuário dois valores. "Respostas dos Testes/Exercícios". Exercícios I. O para finalizar): ") .10 Código da Tabela de Multiplicação 1 Imports System 2 Imports Microsoft. Write("Valor mínimo (máximo igual a 20 .174 Dia 6 Workshop o Workshop foi planejado para aj udá-Io a antecipar possíveis dúvidas. Teste I. calcula e exibe uma tabela com a mu ltipl icação de todos os va lores entre os dois números inseridos. revisar o que já aprendeu e começar a pensar em como colocar seu conhecimento em prática. Por exemp lo. Dê o nome de três ferramentas que podem ser usadas para visualizar o conteúdo de uma variável enquanto você estiver no modo Break. Código LISTAGEM 6.

ByVal MaxValue As Integer) Oim iCount.WriteLine(Tab & CStr(iCount» Next Console. Conforme avançar no livro e ti ver problemas com seu código. 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 ..WriteLine{) 'Exi ba cada uma das linhas da tabela For iCount = MinValue To MaxValue For iCount2 " MinValue To MaxVa l ue Console. 175 LISTAG 6. Empregue pontos de interrupção para isolar seções que você achar que possam conter erros.WriteLine{) Console.Write{"Pressione ENTE R para continuar") Console.MaxValue) ' exiba o cabeçalho For iCount = MinValue To MaxValue Console.Write("Valor máximo (máximo ig ua l a 20): ") sInput = Console.ReadLine{) iHigh " CInt(sInput) OutputTable{iLow.10 EM Código da Tabe la de Multiplicação (continuação) 15 16 17 sInput " Console. iCount2 As lnteger Console.WriteLine{"Tabela de multiplicação ({O) a {l}" . percorra o código e util ize as janelas Locais e Watch para monitorar as variáveis. .o Qu e Faze r Qu an do Progra m as Bons Ap resenta m Código 14 Prob lem as e ..ReadLine{) iLow = CInt{sInput) If iLow <>0 Then Console.Write(CStr(iCount)& Tab & CStr(iCount * iCount2» Next Console. tente usar as ferram entas de depuração para corrigir o programa. MinValue.ReadLine{) End Sub Private Sub OutputTable(ByVal MinValue As Integer.WriteLineO Next End Sub End Module 2.High) End If Loop Unt i 1 iLow " O Console.

Use o aplicativo do exemplo para testar os tipos diferentes de pontos de interrupção. do Windows. Corno altemativa. pesquise a li sta selccionando Exceptions no menu Debug. ad icione o Iralamento de exceções . . 4 . Ten- te configurar um quando o pagamento est iver abaixo de um certo valor.176 Dia 6 3. Se você encontrar exceções em seus programas. Procure na ajuda on-t ine a palavra-chave ' Exception' para examinar os diversos tipos de ex- ceçôes.

poderíamos retornar no tempo até o lat im medieval . esta lição será dedicada a esse tópico e abordará: • • O que são objetos. ou usar no trabalho.NET. Um objeto é uma descrição genérica de qualquer coisa que se pode querer discutir. em que mu ito pouco é realmente tisico.SEMANA 1 DIA Trabalhando com Objetos Tanto o uso quanto a criação de objetos são essenciais para o desenvolvimento no Visual Basic . Em conversas corriqueiras. o temlO objeto em geral se desti· na a descrever apenas coisas materiais. pessoa Oll prédio como um objeto. Corno runcionarn. Embora vocêjá tenha trabalhado com eles no decorrer deste livro. 'obiect urn ' ou 'coisa colocada na frente da mente ' . • nham. nica recebida. mas para usarmos um termo mais si mples começaremos apenas com a palavra ' coisa' . essa definição é ampliada para incluir qualquer entidade. Onde os objetos serão inseridos em seus programas. . mas também é aceitável usar esse termo para descrever algo menos tangível como uma taxa dejuros ou lima regra que será apl icada à correspondência eletr(}. Podemos nos referir a um carro. mas em programação. Começaremos com a definição básica de objeto e todos os termos e conceitos que a acompa- Para Começar: O Que É um Objeto? Para definir o termo ' objeto'.

como um modelo. É com o uso dessa classe. cuj o objetivo final será prod uzir sistemas que sejam fáce is de compreender e aprimorar. como nas classificações. Portanto. marca. e todos os objetos são membros de alguma c lasse. Esses com portamentos em geral são chamados de métodos do objeto. "A vançar". Essa classe é então usada para criar muitos carros. Classes e Instâncias Para compreender os objetos você terá de passar rapidamente para o conceito de classe. o T-Bi rd azul de Bob seria um objeto. mas todos eles baseados na mesma especificação. individualmente. Cada um desses objetos é. Criar um carro com base na especificação é equ ivalente a gerarmos um objeto com base em uma classe. ou descrição. e um objeto carro poderia ter métodos como "VirarEsquerda". uma instância da c lasse e não há lim ite para quantas podem ser criadas. Ela nos relataria que as informações a seguir estariam disponíveis sobre um carro: s ua cor. cada um com uma existênc ia própria. " DarRé" e assim por d iante. cada instância terá valores próprios para suas propriedades. Todas as instâncias compartil ham o mode lo. o da referência a um objelo. Em vezde um programa em que todas as informações e códigos relacionados a apenas Lima entidade estejam espalhados por todo o aplicativo.Dia 7 o uso de objetos permit irá que seus programas sejam dedicados às entidades com as quais você estiver trabalhando. No entanto. que fornece in (ormações sobre as propriedades e métodos do objeto. por exemplo. mas cada um pode ter um valor diferente para essas propriedades (carro azul . o projeto que descreve como ele funcio na e se parece. junto a alguns outros detalhes. mas cada um deles possui uma cor diferente. As c lasses. Todos possuem as mesmas propriedades porque elas provêm da especifi cação. Todos os carros também compart il hariam os mesmos comportamentos ou ações (os métodos da classe). Referências Em programação. a classe também descreve o que o objeto pode fazer e como. Isso signi fica que todas as instâncias da classe Car terão as mesmas propriedades e métodos e se comportarão da mesma maneira. que os objetos são criados. como "Avançar" e os que fossem construídos a partir da mesma especificação executariam essa ação da mesma maneira. a classe seria a sua especificação. Retomando ao exemplo do carro. ter uma classe Car (carro) . qualquer variável dec larada como um objeto de algum tipo (Dim myCa r As Car). carro amarelo e assim por diante). descrevem um grupo ou tipo de entidade. todos os carros têm uma propriedade em comum que é a cor. . uma abordagem com base no objeto consolidará essas informações trazendo-as para a definição do objeto. Todos esses ítens são atributos do objeto. peso. veloc idade. parcelas descrit ivas de informação às quais nos referimos como propriedades. fornecido por sua classe. Uma variável de objeto. enquanto o Ford Thunderbird seria uma classe. Além dessas propriedades. Elas são a descrição de um objeto. Poderíamos. modelo e ano. carro verme lho. como a cor. um conceito adicional é introduzido. fornecendo deta lhes que definem seu componamento e relatando que tipos de informação estão disponíveis sobre ele.

Isso adicionará uma classe vazia ao projeto (chame-a clsCar. um conjunto de classes pré-existentes que podem ser usadas em seus programas.Trabalhando com Objetos 179 não contém o objeto propriamente dito. foi criado um shell de uma classe nesse arquivo. fornecendo o cód igo a seguir: Public Class clsCar End Class Neste ponto. mas apenas uma referência a ele. e ele fornecerá uma visão inicial para o desenvolvimento de seus próprios objetos no Dia 15. no entanto. Abra o Visual Studio . "Introdução ao . porque é algo simples de fazer. portanto precisamos adicionar um a ele. Agora. podemos começar a descrever as propriedades e métodos dos objetos de nossa classe CaroQualquer item que inserimlOS nessa classe fará parte de todas as instâncias do objeto criadas a partir dele. esse não é o caso. Por enquanto. Car. O objeto é criado e usado em uma variável. . Primeiro.NET Framework no Dia 8.vb). criaremos nossa própria classe. um ótimo ponto de partida para esse exercício. adicionaremos as propriedades M Model e Colar. Em geral. Passando o Conceito para o Código Passemos alguns desses conceitos para código. Existem muitas classes disponíveis que foram criadas por outras pessoas. Agora. Em nosso exemplo. para criar objetos.NET Framework". como os inteiros ou strings. ao mesmo objeto. Esse conhecimento será útil para se aprofundar no .NET Framework inteiro é uma ' biblioteca de classes'. você deve ter urna classe. nos quais elas armazenam diretamente o valor. dentro desse she ll. e sim o sufi- ciente sobre a construção de classes para que você compreenda as que já foram criadas. na verdade. Isso significa que mais de urna variável de objeto pode se referir. É diferente dos tipos comuns de variáveis. Esse projcto não contém arquivo de nenhum tipo. selecione Project. uma classe foi criada. mas está comp letamente vazia. Add Class no menu. NOTA A finalidade desta lição não é ensinar tudo a respeito de classes. "Criando Objetos no Visual Basic . o . mas é importante compreender a diferença entre os objetos e outros tipos de variáveis a esse respeito. ake.1).NET e crie um novo projeto (Empty Project) na pasta Visual Basic Projects (veja a Figura 7.NET". ou apontar.

e que podem ser adicionados a lima classe de uma entre duas maneiras.1... . representam a recuperação do valor dela e a configuração desse valor.. qualquer item que for declarado como Publ ic estará disponíve l para todas as pessoas que usarem essa classe. Para implementar a propriedade da cor em clsCar.. UI lO" "... ! . I I " AOdto_ _ ... :J... Instruções de Propriedade Como alternat iva.'''''''_ ._'" _ . :::J . Em nossa classe. I I I • I ~ Propriedades As propriedades são atributos de um projeto que você pode recuperar e configurar.NET'. ....... é declarar uma variável como Publ ic. Pub 1i c descreve o escopo da variável."""..." . _ _ ""._. e o de Set insere um valor (que é for necido por meio da palavra-chave especial Va 1ue) na mesma variável interna... Como discutimos no Dia 3.. -" 'q G J ... a ."...1 VIII projeto m=io ti iniciado sem comer nenhul/I orq/lh'o. In ~- ... .J_ç. então.." _ .. " Introdução à Programação com o Visual Basic . Em geral.'f"Sol. ~. • " õiiI~ [ii~ ~ e na ..o ~_ ....g=::..:1 _ (........ .. 1 " - ói " ... No caso de uma classe...-. """"'''''''1....... --_: "-'''''-. e também o mais sim ples. _ . Get e Set. O primeiro método..... apenas incluir a linha Dim Year As Integer não criaria uma propriedade exposta porque Year só estaria disponível internamente.b>o ' .. ~t FIGURA 7 . o código de Get só retorna o valor de uma variável interna (uma variáve l no nível da classe que representa a propriedade.._ . Se Tossemos declarar Yearcomo Pu blic Vear As Integer.. -..·..... 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 definição da propriedade.. .- . de repente ela seria exposta em Iodas as instâncias desse objelo..- "" ®l1 .. .. c... "" ' .:: '-'"'' ' ' -0 _ _ ""'" 1 "-' I~ """'-=_ " _ 1. poderíamos usar um código como o da Listagem 7..180 Dia 7 _". normalmente com o prefixo mpara indicar um valor membro)..

No aspecto geral.1 Criando Propriedades em Classes 1 Publ ic Class clsCar 2 3 4 5 6 7 8 9 10 11 Dim m sColor As String Public Property Color()As String Get Return m sColor End Get Set(ByVal Value As String) m sCola r " value End Set End Praperty End Class Agora. nesse caso. versão ou talvez uma data de criação . Propriedades Read nlye rite nly Não será faro surgi rem propriedades que você achará melhor serem de leitura. adicione o cód igo da propriedade aos de M e Model . 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 gravação é Wri teOnly e. essa segunda maneira de declarar propriedades pode produzir resultados semelhantes. Se uma propriedade de leitura estiver sendo criada. mas é muito mais fle xíve l porque permite que você defina qual o código necessário para controlar apropriadamente a configuração e a recuperação de um valor da propriedade. na verdade. porém ReadOnly deverá ser especificada como pala. não faria muito sentido gravá-lo. você poderia criar essas propriedades de leitura e de gravação apenas optando por não im pl emelllaro trecho Set ou Get de suas definições. E muito menos comum . Não seria interessante configurar uma propriedade como Description porque. Isso é parcialmen te o que se faz no Visual Basic . Em versões anteriores do Vi sual Basic. como a de uma . portanto.NET. só é inserido o trecho Set em sua defi nição: 1 Dim m_sPassword As String 2 Publ ic WriteOnly Property Password() As String . que é um valor calculado e. haver uma propriedade que possa ser alterada. se não imposs ível. ela é apenas o resultado de um cálculo.Trabalhando com Objetos 181 COOIGO LISTAGEM 7. lembrando de também acrescentar ake duas variáveis internas complementares (essas duas propriedades devem usar strings como seu tipo de dado). vra-chave ad icional. o trecho Set de sua definição não deve ser incluído. porém não lida. E o que mostra o código a seguir com a propriedade Descri pt ion. como um campo de senha.

Aqui .Model " "Esco rt" Essas propriedades podem ser recuperadas com muita fac ilidade: Dim sCarDesc As String . como uma string ou um inte iro. não temos nada em objCar. o que podemos faze r com a palavra·chave New: objCa r = New clsCar() Agora sim criamos uma instância de cl sCar e atribuímos à variável objCar uma referência a esse novo objeto. Adicione um módu lo a ele (se lecione Project. Nesse ponto. Quando declaramos urna variável alfanuméri· ca. seu módulo deve ser semelhante ao cód igo da Listagem 7. primeiro lemos de criar uma variável do lipo apro· priado: Dim objCar As clsCar 'ou Chapter7. por meio de objCar. acessar as propriedades desse objeto: 1 objCar. Já podemos. Add Module no menu) chamado Ma i n.2 Criando um Módulo 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 ução. a próxima etapa é criar uma instância de nossa classe.Make " "Ford" 3 objCa r. poderemos gerar uma instância dela em outra parte de nosso projeto. Seu código será executado quando processarmos esse aplicativo. CÓOIGO LISTAGEM 7. vb e crie uma sub-rotina Sub Mai n{ ) em seu interior. urna string é criada. mas que na verdade não armazena nada. Nesse caso. mas ela é muito diferente.2. temos uma variável que poderia conter a referência a um objeto do tipo cl sCar. Portanto.Color " "Red" 2 objCar.clsCar .182 1 Dia 7 3 4 5et(ByVal Value As String) m sPassword " Value 5 End 5et 6 End Property Criando a Instância de um Objeto Depois que você tiver essa classe. ela realmente existe. Para começar a usá·la. examinaremos melhor esse ponto posteriormente Essa linha parece estar declarando lima variável comum. e é aí que escreveremos as instruções que trabalharão com nossa nova classe. Embora possa não ter nenhum dado.

Dessa maneira. Dando continuidade.Trabalhando com Objetos sCarDesc " objCar. a instanciação de objetos com base nessa classe e a manipulação das propriedades desse objeto. logo que elas saem de escopo (veja o Dia 3 para obter mais informações sobre as variáveis e o escopo).NET. podendo incluir também o comportamento.Color & " "& objCar. ele se tornará inacess ível e acabará sendo elim inado pelos serviços em segundo plano da plataforma . Em nossa classe clsCar. a criação de uma c lasse. limpando tudo que é desnecessário. as regras que controlam a eliminação dele são um pouco diferentes. todas apontando para o mesmo local: 1 2 3 4 5 6 7 8 Oim objCar As clsCa r Oim objCar2 As clsCar Oim sM ake As String objCar " New clsCar() objCar2 " objCar objCar. Esse processo. 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. Em sua est rutura atual.Make " "Chevy" 'objCar2 . que descreva mai s do que apenas um conj unto de valores. que é chamado de co/eta de lixo. podemos demonstrar esse recurso adicionando um cód igo de validação a nossas propriedades. M ake " "Ford" objCar2 . deixam de existir. fornecendo outro serv iço s ubjacente para que nenhum dos cód igos precise se encarregar desse t ipo de operação. no cód igo. Quando todas as variáveis que faze m referência ao objeto não existirem mais.NET faz a limpeza para seu programa. como uma string. permite que o programa crie e libere livremente os objelos sabendo que o sistema o acompanha. considere a idéia de lima classe. veja o Dia 3 para obter mais informações sobre as estruturas ou t ipos definidos pelo usuário). você poderia con- . diferente de um UDT . Encapsulando Códigos em Suas Classes Agora você já viu. Já que múltiplas variávei s podem apontar para um único objeto. podemos criar variáveis adicionais. Para fornecer essa implementação do comportamento. quando lidamos com variáveis.Model 183 Já que os objetos funcionam por referência.Make &" "& objCar. ela também poderá possuir um código para executar a validação da propriedade e outras ações. (novamente. a plalafolma . Make Compare isso com uma variáve l que não seja de objeto. Make é i gua l a objCar . a classe apresentará mais do que apenas simples códigos de configuração e recuperação de valores.

Como descrito nessa lição. uma tentativa de configurar a propriedade com uma cor inválida (inválida na lista interna de nosso código. como inadequada) resu ltará no lançamento de uma exceção. . . CÓOIGO LISTAGEM 7. veja o Dia 6.ToUpper() Case "REO" m sColor = Value Case "YELLOW" m sColor = Value Case "BLUE" m sColor = Value Case Else Oim objException As System.3. Isso envo lve reescrever a rotina da propriedade Color como mostra a Listagem 7. Co 1ar = "John"). .3 Adicionado Validação à Propriedade Color 1 Public Class clsCar 2 Oim m sColor As String 3 4 5 6 7 8 9 Public Property Color() As String Get Return m sColor End Get Set(ByVal Value As String) Select Case Value. Para tornar nossa representação do objeto Car um pOllCO mais sofisticada.4. por exemp lo. mesmo se ele nem fosse uma cor (obj Car.Dia 7 figurar a propriedade Color com qualquer valor alfanumérico. que considera a cor popular 'lilás' . podemos tratar corretamente essa exceção reescrevendo nosso cód igo de teste (contido em Sub Mai n( )) para que inclua uma estrutura Try . Catch.Exception objException = New System. Esse código alterado é mostrado na Listagem 7.ArgumentOutOfRangeException() Throw objException End Select End Set End Property 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 End Class Agora. Para obter mais informações sobre as exceções e o tratamento de erros com base nelas. "O Que Fazer quando Programas Bons Apresentam Problemas e para Se Certi fi car de Que Isso Não Aconteça". podemos adicionar um trecho de código que verifique qualquer valor informado em uma lista de cores e rejeite o que não tiver uma correspondência.

Year = 1999 Try 7 8 9 10 11 12 13 14 15 16 objCar.Description) 19 End Sub ob j Car. Conso I e.Make = "Ford" 17 objCar .ArgumentOutOfRangeException 'Opa! Trate o erro! Sys tem. a nova propriedade: 1 Dim m dtManufactured As Date 2 3 Public Property Manufactured() As Date 4 Get 5 Return m dtM .Trabalhando com Objetos 185 COOIGO LISTAGEM 7.Model'" "Escort" 18 System. e adicionar esse método é mesmo tão fáci l quanto criar LIma função pública na definição de nossa classe. geralmente chamada método. Será do mesmo modo como a propriedade anterior exceto que é uma data. uma classe pode conter uma função ou sub-rotina que não faça parte de nenhum cód igo de recuperação ou configuração da propriedade. um método útil pode ser gerar o tempo de existência do carro comparando a data e a hora aluais com uma propri edade desse que represente sua data de produção. Wri teL i ne ("Opa! ") End Try seolor = objCar.anufactured 6 End Get Set (ByVal Value As Date) 7 m dtManufactured = value 8 End Set 9 10 End Property . Prime iro.4 Incluído Tratamento de Erros em Nosso Códi go de Teste 1 Sob MainO Dim objCar As cl sCar 2 Dim sColor As String 3 4 5 6 objCar :: New cl sCarO objCar.Console. Os métodos são criados para fornecer uma funcional idade relacionada a um objeto e em geral agem com base nas informações da propriedade (porque estão disponíveis). Criar a propriedade da data de produção é relativamente simples.Color = "Green" Catch objException As System .WriteL i ne(objCar. Para nossa classe cl sCar. que por si só j á é poderosa.Color Além da validação da propriedade.

e não uma ação) porque na verdade não executa nenhuma ação e só retorna um valor. já que seria um atributo.) A Listagem 7. DateTime. um exemplo melhor de método poderia ser algo relacionado à ação. Como alternativa. o novo método seria mais adequado como uma propriedade (que.. cuja implementação é fornecida na listagem 7.Manufactured = 130/1/2 0001 System. como na Listagem 7. ~Implan t ando Seu Aplicativo".7 Nosso Novo Método Orientado à Açao 1 Public Sub StartEngine() 2 Sys tem. Vroom . poderemos chamá-lo por meio de qualquer instância (objCar. mas não estaria disponível para nenhum outro CÓdigo. System .GetAge()) Em algumas situações. mas que elas estejam ocultas (privadas) para qualquer códi go externo à montagem da classe. por enquanto considere-as como as várias partes de uma mesma solução.GetAge( ). . COOIGO LISTAGEM 7.7.6. (As montagens serão abordadas com deta- lhes como parte da implantação no Dia 19. Wri teL i ne (" Vroom . Console.5 mostra o novo método. ! ! ! ") 3 End Sub . então. Essa declaração assegura que CÓdigos dentro da mesma montagem possam acessar essas partes da classe como se fossem públ icas. sub-rotinasl como Friend.5 O Método GetAge 1 Publ ic Function GetAge() As Long Dim l ngDays As long 2 Dim dtCurrent As Date 3 4 dtCurrent . funções. Para nossa classe Car. COOIGO LISTAGEM 7.Today 5 lngDays = dtCurrent. renomearíamos para Age. COOIGO LISTAGEM 7.Days 6 Return l ngDays 7 End Funct i on Depois que tivermos adicionado esse código a nossa classe.WriteLine(objCar.186 Dia 7 NO TA Se criássemos essa função como privada. Conso 1e.Subtract( m_dtManufactured). como StartEngine. também podemos declarar etementos de nossa classe {propriedades. ela poderia ser util izada a partir dessa classe.6 Usando Nosso Método Novo 1 2 3 4 Dim objCar As clsCar objcar = New clsCar() objCar.

Isso possibilita que um só método. Lem bre-se de que todos os objetos que compõem o . herança. aceite os parâmetros em combinações distintas ou usando tipos de dados diversos.Console e outros) foram construídos de acordo com essas regras. Today 4 5 1ngDays = dtCurrent. por exemplo. voltando ao nosso exemplo de c1 sCar. A sobrepos ição permite que uma única função ou s ub-rotina com vários parâmetros d iferentes seja chamada. COOIGO LISTAGEM 7.Subtract(m_dtManufactured). Sobreposição Esta seção aborda os aspectos básicos da sobreposição. DateTime .Days . como na Listagem 7. A única di ferença existente entre os objetos do . construtores. teríamos de criar uma função d iferente para cada chamada possível.NET possu i muitos outros recursos além desses básicos.Subtract(m_dtManufactured).8 Criando Vãria s Opções em um Único Método 1 Pub1ic Function GetAge()As Long 2 Dim lngDays As long 3 Dim dtCurrent As Date dtCu rrent = System .Trabalhando com Objetos Com esse código adicionado a clsCar. é possíve l criar obj etos complexos. Portanto. Por meio de uma combinação de propriedades (algumas com código e outras sem) e métodos. deta lhes adic ionais serão discutidos no Dia 15. seria possível projetar o método GetAge de modo que ele pudesse funcionar de uma entre várias maneiras. 8. teríamos disponível um método mais orientado à ação. A implementação existente não usa parâmetros e relorna a diferença em dias entre a data aluai e a dc produção. mas talvez também qui séssemos perm itir que o usuário de nosso objeto soli citasse a diferença entre a data da produção e qualquer outra aleatória e ainda especificasse a unidade de tempo a ser usada. Apesar de esse s uporte ser amplo. espaços de nome e membros estáticos da classe. produzi ndo um sistema mais simples em termos de utili zação. forneceremos uma v isão geral das cinco áreas principais: sobreposição. o suporte ao objelo na plataforma .NET Framework e os seus é que esses não precisam ser escri tos no Framework! Tópicos Avançados Embora as propriedades e métodos pennitam que você crie objetos complexos e poderosos. Para fazer isso sem esse conceito de sobreposição.NET Framework (como System. Os recursos avançados facilitarão a representação de conceitos e ent idades em nosso cód igo. manutenção e expansão.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. quando criarmos nossos próprios o bjetos. e os que você criar terão as mesmas características deles.

mas cada lista de parâmetros diferente e seu cód igo correspondente precisa de seu próprio nome de função.Today 20 tsDifferenee : dtCurrent.DateTime. .Oays \ 365 33 End Select 34 Return lngUnits 35 End Function Todas essas funções na verdade são apenas variações de GetAge. Para usar esse recurso.Mi nutes 28 29 30 31 Case "Years" 32 lngUnits : tsDifference. já podemos escolher qualquer uma das três declarações que ela pode uti lizar (veja a Figura 7. eliminamos essa restrição e podemos criar todas essas funções usando o mesmo nome.8 Criando Várias Opções em l. TimeSpan 19 dtCurrent : System. Hours 24 25 26 27 Case "Days" 1ngUnits : tsDi fference. GetAge.188 Dia 7 COOIGO LISTAGEM 7. Com a sobreposição. tudo que precisamos fazer é adicionar a palavra-chave Overloads à frente de cada (incluindo a original) declaração de função (antes de Publ ic) e alterar todos os nomes das funções para que usem apenas um : Public Overloads Function GetAge() As Long End Function Public Overloads Function GetAge(ByVal dtPointlnTime As D ate) As Long End Function Public Overloads Function GetAge(ByVal sUnit As String) As Long End Function No cód igo de nosso exemplo que usa essa função.I11 Unico Método (continuação) 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.2). Days Case "Mi nutes" 1ngUnits : tsDi fference .Subtraet(m_dtManufaetured) 21 Seleet Case sUnit 22 Case "Hours" 23 1ngUnits : tsDi fference.

.2 Todas as I'ersões di~pollh·eis de 1111/0 FIGURA função serlio mostradas por meio do ImelliSense qllal/do você IIsar o Visual 5/l/dio .. os objetos são maneiras de você representar conceitos ou entidades no código. .. que pode ser chamado usando qualquer uma das 18 listas diferentes de parâmetros.Trabalhando com Objetos 189 NOTA Cada declaração de fun ção deve ser diferente de alguma maneira . . l C....."""'!. .<d' $':!I )O . por exemplo. ... Não vou questionar essa opinião. . o método Sys tem.. mas de alguma forma consegui desenvolver sistemas por muitos anos.. Essa técnica é lIsada em todo o .p . . essa é uma maneira útil de sim plificaros objelos e fornecer mais opções aos programas que os usam..CO!% fi. Como já abordei nesta lição.NET Framework para permitir a chamada de funções com vários conjuntos de parâmetros diferentes. antes que a plataforma ." Herança Para algumas pessoas. ' ."' . . a inclusão da herança na linguagem do Visual Basic é um recurso importante e vale uma pequena discussão. Considere.. ou não poderá ser usada..CO''' ' . NET para criaI" 1/111 c/ieme... .. . c. L.. A sobreposição representa o conceito de que a mesmaação ou solicitação pode ser usada de várias maneiras e pennite que você use esse recurso na modelagem de seu objeto sem ter de recorrer à criação de diversos métodos diferentes (GetAge.quantidade de parâmetros. I _ "..Consol e.. este é um dos recursos mais estimulantes do Visual Basic .. ... .. . GetAgeFromDate e outros).. d • " I>O" DON ""'C" " ""• ..... ..0"'_ 0) . . e todos os recursos de objetos no Visual Basic foram projetados para ajudá-lo a tornar a representação o mais úti I possível. I?. Wri teL i ne. ' ' .NET . Como o Framework demonstra. .OOIle"" .. Em muitas situações. 7.. ~ .. sem a herança...' '''.um recurso considerado fundamenta l para a criação de sistemas com base em objelos e que raltava no Visual Basic alé esta versão.. .. tipo de dados do parâmetro ou do valor de retorno -. ....... Independentemente disso.. " llUI ...... .. .. "" •• $':!I .u L. . uma entidade ou conceito na verdade ... ..ç!!f .. .oa "" ' 9I>. ç ...NET chegasse. .

como um Ford Mustang. MaxSpeed e Colar. poderíamos ter uma classe básica Vehi c1e para representar qualquer tipo de veiculo (barco. A classe teria várias propriedades. Considere nossa classe de objetos criada para representar carros. cam inhão. av ião) e que possuísse as propriedades MaxSpeed. como Hatchbacks e Conver• ti bl e5. entre Car e suas subclasses. Usemos o mesmo ponto de partida. O exemplo anterior foi iniciado com nossa classe Car e segu iu daí em diante. MaxSpeed . NumberOfPasssengers. Hatchback e Convertible. como 00 ors (quantidade de ponas que o carro possui). Car.190 1 Dia 7 é o que chamaríamos de um subobjeto de lima entidade ou conceito mai s básico. Color e Qutras. ela também possu irá todas as propriedades e métodos herdados do seu pai. A classe Car geral.9 .9 Nossa Classe de Veículos 1 Public Class Vehicle 2 3 4 5 6 7 8 9 Public Property MaxSpeed () As Long Get End Get Set(ByVal Value As Long) End Set End Property Public Property NumberOfPassenge r s{) As Long Get End Get Set(ByVal Value As Long) End Set End Property Public Property Color() As String Get 10 11 12 13 14 15 16 17 18 19 20 . mas também poderiam ter propriedades exclusivamente suas. COOIGO LISTAGEM 7 . Car. Para começar. e o método para representá-lo em nossos sistemas é chamado herança. como Do- or5. contêm várias subclasses de objetos. Esse relacionamento. Caro Esse relacionamento sign ifica que. Diz-se da classe Hatchback que ela é herdeira de sua classe bás ica. carro. além de qualquer método e propriedade criados na classe-filha . como mostra a Listagem 7. um Toyota Celi ca ou um Chevy Cavalier. e sigamos em direção a um exemplo mais detalhado de herança. Essa classe seria facilmente representada em um cód igo do Vi sual Basic. Um carro de dois módulos poderia ter propriedades que descrevessem o tamanho e o com portamento de sua porta traseira. Co 1or e Oescri ption . seria considerado um relac ionamento pai-filho. Vários exemplos disso são usados em livros de programação e infelizmente não apresentarei nada tão revol u- cionário. E claro que essas classes teriam todas as propriedades de sua classe-pai . na verdade.

como na Listagem 7. perceberíamos que é possíve l criar objetos do tipo Vehi cl e e trabalhar com suas propriedades. Já que estamos gerando uma classe projetada para tratar apenas de carros.10 Trabalhando com Nossa Classe de Veículos 1 Module UseVehicle 2 Sub Main() 3 Oim objVehicle As Veh ic le 4 objVehicle = New Vehicle() 5 6 objVehicle.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 . podemos criar uma classe (Ca r) que herde característ icas de Vehi c I e. como em exemplos anteriores).10.Traba lh a ndo com Objetos 19 1 COOIGO LISTAGEM 7 .Color = "Red" 7 objVehicle.9 Nossa Classe de Veículos (continuação) 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 cód igo que é usado em vários proced imentos dessa classe não é re levante para nosso exemp lo. 11). COOIGO LISTAGEM 7 .11 Cri ando uma Cl asse .MaxSpeed = 100 8 End Sub 9 End Module Agora. adicionando urna classe complementar a nosso projeto (veja a Listagem 7. Se passássemos para algum outro código. portanto o deixaremos de fora por enquanto. CÓDIGO LISTAGEM 7 . exatamente como a classe real de objelos Car é uma subclasse ou filha da classe Vehi cl e. tentando usar nosso objeto (que poderia ser o da sub-rotina Sub Ma i n ( ) de nosso projeto. podemos ad icionar duas propriedades (NumberOfOoors e NumberOfTi res) específicas dessa subclasse de Vehi ele.

Novamente. sem nenhum esforço adicional. permitindo que você crie versões especializadas da propriedade ou método básico. em seguida. podemos criar um objeto do tipo Car.Filha (continuação) 8 9 10 11 Set(ByVal Value As Integer) End Set End Property 12 13 14 15 16 Public Property NumberOfOoors() As Integer Get End Get 17 18 19 Set(ByVal Value As Integer) End Set 20 21 End Property 22 End Class A parte essencial desse código é a li nha Inheri t s Vehi cl e. que informa ao Vi sual Basic que a classe é fil ha de Vehicle e. portanto.192 Dia 7 COOIGO LISTAGEM 7. portanto. as classes-filhas não poderiam forn ecer suas próprias imp lementações. Por exemplo. poderemos ver o efeito da instrução Inherits. na versão de Veh icl e listada anteriormente. essa parcela deve ser marcada com Overridab 1e na defin ição da c lasse básica. Depois que esse código estiver posic ionado. Voltando a nosso procedimento Main{ ). também é possível que uma classe-filha sobreponha alguma ou toda a funcionalidade da classe básica. e logo veremos ele expor tanto suas propriedades quanto as da classe-pai (veja a Figura 7. o cód igo da Listagem 7. não há nenhum cód igo inserido na definição de qualquer dessas propriedades porque isso não é relevante no momento. Em uma de monstração de como a sobreposição é configurada nas classes básica e fi lha. 12 marcará a função Description{ ) como podendo ser sobreposta e. Isso acontece quando a classe-filha implementa um método ou propriedade que também é definido na c lasse-pai ou bás ica. deve herdar todas as propriedades e métodos dessa classe. o código da classe-fi lha será executado em vez do cód igo do pai. Nesse caso. Quando uma classe herdada adiciona novos métodos ou propriedades. Para uma classe-filha sobrepor alguma parte da classe básica.11 Criando uma Classe . a sobreporá na classe-filha CaroObserve que as pmtes não relevantes das duas classes foram removidas para dar maior clareza. diz-se que a classe bás ica está-se estendendo. . Além da extensão. nen huma de suas propriedades possuía a palavra-chave Overridable e.3).

. .. .~...CoLo.. para se referir ao método Descript ion{ ) ex istente na classe Vehi c1 e.. 15 Pub1ic Overrides Function Description{) As String 16 Return "Essa é a descrição do meu carro" 17 End Funct i on 18 19 End Class Quando sobrepuser um método ou propriedade..12..... ... ...... "'J<o< • Cu!) I..." LOO _....~ ft . ~.. Por exemplo......... 4 5 Public Overridable Function Description() As String 6 Return "Essa é minha descrição genérica de veiculo!" 7 End Function 8 End C1ass 9 10 Pub1ic C1ass Car 11 Inherits Vehic1e 12 13 14 'Código remov i do para fins de simpli f icação ..Chave Overridable e Overrides 1 Public Class Vehicle 2 3 'Código removido para fins de simplificação ... As classes expõem · • tJ ·~iilGII • __ ~_!OOk_'" :t.. "')'"e. o.. ' "'lV. poderíamos chamarMyBase......· • . ..L.c. como fize mos na Listagem 7..'o.. .. q Iodas as suas propriedades e mélodos público.12 Usando as Pa l avras ...'.. ' '"". Descri pti on ( ) de dentro do método Descri pt i on ( ) de Caro Esse recurso permite o .. .' CÓOIGO LISTAGEM 7. u o".>J ...... além dos da classe em que esliiv baseadas.3 (do. V_«" .'.'v.Traba lh a ndo com Objetos 193 FIGURA 7 . ""Co< .. você poderâ se referir novamente ao membro origi nal da classe básica usando o objeto interno MyBase. <O..

tanto Vehicle quanto Car (e todas as outras classes da plataforma .13 U Classe-Filha Agindo como uma Instânc ia da ma Classe-Pai 1 Sub MainO 2 Dim objVehicle As Vehicle 3 Dim objCar As Car 4 objCar " New CarO 5 6 7 8 objCar. Se criannos o parâmetro de urna fun· ção com esse tipo. você estará pronto para começar a projetar alguns apl icativos que se benefi· ciem desse recurso dos objetos.NumberOfDoors " 4 objCar. mas com as informações for· necidas nesta Iição. e a palavra-chave MustInheri t significa que essa classe não pode ser usada sozinha (você deve basear . se percebe na área dos tipos de dados. que decerto vale a pena mencionar. outras classes nela). Como disc utimos no Dia 3. ela própria deve ser marcada com MustInherit. Isso significa. A Base de Todas as Classes Básicas Se você examinar a li sta do que é exposto por essa nova instância da classe Car. então. que podemos inserir nossos objetos Car em argumentos de procedimentos e variáveis que sejam do tipo Vehi c1 e. então. A herança é um tópico extenso e não o abordamos completamente. a classe-fi lha atua como se fosse urn a instânc ia da classe-pai. Em uma situação de herança. e os objetos não são exceções. Essa classe básica definitiva fornece alguns métodos que automaticamente farão .194 1 Dia 7 fornecimento de uma funcionalidade adicional podendo-se empregar a sobreposição sem que depois seja necessário recompor todo o código original. também é possível marcar um método ou propriedade como MustOverri de e lima classe como Mustlnheri t. parte de toda classe que criarmos.NumberOfPassengers " 6 objVehicle " objCar 9 . A palavra-chave MustOverride indica que toda fi lha dessa classe deve fornecer sua própria versão dessa propriedade ou método. em nosso exemplo. Além de marcar o código como Overridabl e. CÓDIGO LISTAGEM 7. Enquanto Car herda características de Vehic1e. Quando declaramos urna variável corno do tipo Car. isso é tão res· trito quanto a tipificação de dados corno inteiros e strings. Urna conseqüênci a adicional da herança. apenas esse tipo de objeto poderá ser passado para ela. A Listagem 7.13 mostra um exem plo. toda variável se enquadra em algum tipo de dado. Esses métodos são na verdade ou· tro resultado da herança . E importante observar que se lima classe tiver um método marcado com MustOverride.NET) herdam características da classe básica Sys tem Obj cct. mas não fazem parte dessa classe ou de sua classe·pai. verá mais do que as propriedades de Vehi c1 e e de CaroOs métodos ToStri ng ( ) e GetType( ) são expostos por esse objeto.

fornecendo uma mensagem de erro como parâmetro para seu construtor. MaxSpeed = 100 13 End Sub A instância de Ca r representada por obj Ca r foi fac iImente inserida na variável obj Veh i c 1e. permite a criação de um cód igo genérico que funcionará com urna classe ou qualquer uma de suas subclasses . de que um objeto-filho pode ser usado corno se fosse urna instância da classe-pai. e desse ponto em diante poderia ser tratada como um objeto Vehicle. Essa mensagem de erro será lIsada de modo automático pelo novo objeto para preencher uma das propriedades. esse tópico e outras abordagens relacionadas a objetos serão examinados com mais detalhes no restante do livro. Os cOl1slrulores são uma maneira de fornecer infonnações para essa classe no momento em que é gerada para permitir que ela mesma se inicialize ou execute outras tarefas de configuração nessa hora. em geral é possível fornecer parâmetros no momento da criação.Exception(sMessage) A criação de um construtor para nossa classe Vehi cl e é relativamente fácil. nada diferente acontecerá. como parte da chamada a New. você verá pouca diferença em seu cód igo. Public Sub New() End Sub Após conclu ir a criação desse construtor (isso ainda não produz nenhum resultado).Color = "Red" 12 objVehicle. pode ser usado como . Dim exError As System .Pa i (continuação) 11 objVehicle. Essa é urna das maneiras como a herança pode ser empregada para gerar soluções melhores. A instânc ia de um objeto é gerada com a palavra-chave New. Por essa razão.13 Uma Classe . O código a seguir mostra esse trabalho na criação de um novo objeto de exceção (veja o Dia 6 para obter mais infonnações sobre as exceçõcs e outros tópicos de tratamento de erros). Se uma classe for um construtor. você precisa gerar um método chamado New que seja público e não tenha parâmetros. Apresentei uma visão geral do assu nto herança.Filha Agindo como uma Instância da Cl asse . Construtores Quando você deseja usar um objeto. mesmo sem parâmetros. e muitas classes do .NET Framework são. e ele merece uma discussão adicional tanto do ponto de vista do projeto quanto da implementação. então. tem de trabalhar com uma instância ex istente ou criar a sua. Exception Dim sMessage As String sMessage = "Essa será a mensagem de erro . Esse fato. que emprega a classe especificada e estabcl ece uma área na memória para a instância dessa classe. mas há muitas outras. e até que adicionemos alguma fun cionalidade a essa sub-rot ina New( ). O construtor. Primeiro." exError = New System.Trabalhando com Objetos 195 COOIGO 10 LISTAGEM 7.

Ao contrário dos outros métodos. e cada uma será tratada como uma versão disponível do construtor.Now() 4 Exatamente como com qualquer outro método de um objeto. empregando um código como MyBase. Você pode apenas criar mú ltip las versões do procedimento New. Isso pode ser feito fac il mente com o uso do objeto especial MyBase.Now() 4 5 6 7 8 9 Public Sub New(ByVal sColor As String) m dtManufactured = system. sobrepor o construtor não requer o uso da pa lavra-chave Overloads.15 Sobrepondo o Construtor de uma Classe para Fornecer Maneiras de Inicializar Objetos = 1 2 3 Public Sub New() m dtManufactured End Sub System.14 Usando um Construtor para Inicializar os Membros de uma Cl asse = 1 2 3 Public Sub New() m dtManufactured End Sub System.Di a 7 um local para inicializar variáveis internas. Em nosso caso.Oate. 14).Now m seolor = sColor End Sub Public Sub New{ByVal dtManufactured As Date.Oate. no entanto. você pode querer chamar o construtor da classe básica de seu procedimento New. ByVal sColor As String) m dtManufactured = dtManufactured m sCo l or = seolor End Sub 10 11 12 13 14 15 16 17 No caso de uma classe-filha. CÓDIGO LISTAGEM 7.15) cons iderando as diferentes mane iras nas quais alguém pode querer inicializar nosso objeto.Oate. aquela que herda características de outra classe. CÓDIGO LISTAGEM 7.New( l. como a data de produção de nossa classe Vehicle (veja a Listagem 7. é possível sobrepor esse e fornecer mais de uma maneira de chamá-lo. . poderíamos rapidamente gerar alguns construtores úteis (mostrados na Li stagem 7.

em seguida. Há duas maneiras de criar um espaço de nome de nível inferior. CÓDIGO LISTAGEM 7 . tendo Namespace Chapter7 no in ício de nossas classes e End Namespace no fin al. Car). portanto. como uma maneira de gerar uma área privada para assegurar que os nomes de sua classe sejam exclus ivos. que contém todas as nossas classes dentro dele.Trabalhando com Objetos 197 Espaços de Nome o espaço de nome é um conceito abstrato usado para agrupar vários módulos ou classes. o código integral desta lição seria inserido sob o espaço de nome Dia7). Defina-o usando o nome totalmente qualificado (veja a Listagem 7. 16) ou aninhe as definições dos espaços de nome (veja a Listagem 7. Portanto. Os espaços de nome são hierárq uicos. precisará se certi fi car de especi ficar o nome completo da classe sempre que fi zer referência a ela de fo ra de seu espaço de nome.17). criamos de modo efet ivo um agrupamento chamado Chapter7. O agrupamen to de classes sob espaços de nome de nível superior resulta em um código que é definido claramente por algum esquema de categorização sendo. não entrará mais em conn ito com nenhuma outra classe criada com o nome Caro Outra razão mais sutil para usar os espaços de nome é porque produzem um código em que a manutenção é mais fác il. e não são poucas delas a base do 'espaço de nome' identilicador. lima classe só tem de ser exclusiva dentro de seu espaço de nome especi fi co. será usado corno padrão para referências a objel0s feitas em um código dentro do mesmo espaço de nome. Nossas classes poderiam ser criadas apenas corno Di a7. Há muitas razões pelas quais você pode querer criar e usar espaços de nome. permi· tindo que você categorize logicamente todos esses objetos dent ro de um único objeto de nível superior. Pe la defin ição de um espaço de nome. portanto. o que penn ite que você crie um esquema com vários níveis para agrupar suas classes e objetos. poderíamos ter criado espaços de nome com base no título da lição (por exem plo. podendo todos eles. e. Em nossos exemplos no decorrer deste livro. Esse método de agrupar classes é semelhante ao conceito de escopo que foi discutido no Dia 3. então. Car. nossa classe Car se torna Chapter7 . ser posicionados sob um espaço de nom e mais abrangente com relação ao livro chamado AprendaV8.16 Decla r ando um Espaço de Nome com Vária s Partes 1 Imports System 2 Namespace MyApp. tam bém poderíamos nos referir a elas com seu nome totalmente qual ifi cado (Aprenda V8 . Di a7 . mais legível e sua manutenção mais sim ples. mas para assegurar que não houvesse ambigüidades.NET Framework. exatamente como dentro do próprio . Depois que esse espaço de nome exist ir. Se por acaso você criar uma classe que com partilhe seu nome com outra que exista em um espaço de nome diferente.Console 3 Modu le Main 4 Sub Main() . por exemplo). Ca r. mas também poderá ser declarado exp licitamente (Dim objCar as Chapter7 .

Mach i neName) 15 Conso 1e.GetlogicalOrives{» 17 Consol e.GetLogicalDrives{» Console.Writeline(Environment.Writeline(Environment. Wri tel i ne (Env i ronment. Version. Wri tel i ne (Env i ronment.Console .MachineName) Console.Writeline(Environment.Version.Wri tel i ne{Envi ronment.Utilities() objHW.198 Dia 7 COOIGO LISTAGEM 7.PrintOut() End Sub End Module .17 Usando Espaços de Nome Aninhados para Criar Hie - rarquias de Objetos 1 Imports System 2 Namespace MyApp 3 Namespace Console 4 Module Main 5 Sub MainO 6 7 8 9 10 11 Publlc Class Utilities 12 'Run the application 13 Public Sub PrintOutO 14 Conso 1e.SystemDirectory) Console.16 Declarando um Espaço de Nome com Várias Partes 5 6 7 Dim objHW As New MyApp.ToStri ng(» End Sub 18 End Class 19 End Namespace COOIGO LISTAGEM 7. Sys temOi rectory) 16 Console. ToStri n9 O) 18 End Sub 19 End Class 20 End Namespace 21 End Namespace Oim objHW As New MyApp.WriteLine(Environment.Console.PrintOut() End Sub 8 9 10 11 12 End Module Public Class Utilities 'Run the application Public Sub PrintOutO 13 14 15 16 17 Console. Utilities() objHW.Writeline{Environment.

NET Frame\Vork é Lima biblioteca de classes que você pode usar em seus aplicativos. comuns às linguagens. é isso que acontece. Há uma maneira de expor uma certa funcionalidade por meio da própria classe. Da teTime (cujo exem plo é mostrado na Li stagem 7. Essa palavra-chave. você pode usar os espaços de nome como lima maneira de agrupar códigos conceituai mente relac ionados.18 Funções Internas do Visua l Basic 6. NET. todos os membros de um módu lo são considerados compartilhados (Shared) por padrão. Em geral.18).NET 1 Imports System 2 Module M ain 3 Sub Main() 4 Dim dtToday As Date 5 dtToday = DateTi me . ev ite usar esse recurso a menos que seja realmente necessário porque ter muitos membros comparti lhados é quase o mesmo que apenas criar um módulo cheio de proced imentos e reduz o sign ificado de seus objetos. O . com o uso da palavra-chave Shared. como a propriedade exposta Today da classe System. Lembre-se de que Modul es é um tipo especial de Class. no entanto. Esses princípios (o conceito de classes. Iodas elas construídas a partir dos principios básicos da programação orientada a objetos. instâncias. no entanto.NET Frame\Vork usa esse recurso em suas classes. Em geral. propriedades. Pri vate e Fri end). herança e assim por diante) também serão a base da criação das classes de sua autoria dentro do Vi- . Membros e Objetos Compartilhados No começo desta lição. mas além de seu efeito no escopo das classes. quando descrevemos o relacionamento entre as classes e os objetos. você aprendeu que para usar qualq uer propriedade ou método especificado em uma classe teria de empregar ou criar uma instância dessa classe. significa que parte de uma classe está disponível sem a criação de uma instância. sem a sobrecarga de gerar um objeto. apenas com as instâncias dela que forem criadas. como os outros descritores que foram vistos (como Publ i c. métodos. eles não são realmente necessários na construção de um sistema. Resumo o . não é possível trabalhar diretamente com uma classe. independentemente de qualquer instância particular dela. CÓDIGO LISTAGEM 7.Today() End Sub 6 7 End Module Esses membros compart ilhados podem ser criados em seu próprio cód igo quando você quiser que um método ou propriedade em particu lar esteja se mpre acessível.0 Foram Substituí das pelos Métodos Compartilhados no Visual Basic .Trabalhando com Objetos Em seus aplicativos.

NET. revisar o quejá aprendeu e começar a pensar em corno colocar seu conhecimento em prática. Em geral. será necessário empregar o . e eles si"io verdadei ros? R Quando se trabalha com objetos. será d ifícil fazer com que um certo trecho desse seja executado sempre que um objeto for destru ído. no Visual Basic . P&R P Nunca trabalh ei com uma linguagem orientada a objetos antes. O código inserido em um procedimento desse tipo teria sua execução garantida sempre que o objeto fosse elim inado. o enfoque inicial para um desenvolvedor que não conheça objetos é se familiarizar com sua ut ilização antes de passar para sua criação.NET. No Vis ual Basic .Dia 7 suai Basic . por meio da criação de nossas classes como exemplo. As respostas do teste estão no Apêndice A. portanto.NET. havia um mecanismo disponível para adicionar um código ao procedimento de um ' evento de el iminação' .NET. não é possível dizer exata mente quando um objeto será eliminado e que esse é um fat or limitante por vá rias razões. s ua eliminação nem sempre ocorre em um ponto definido do código. P Li que. conceitos básicos orientados a objetos e mostramos como implementá-los em um código de sua autoria. introduziremos as classes disponíveis no .NET.NET Framework. como o . " Respostas dos Testes/Exercícios".NET Framework e. mas achará difícil usar essa linguagem sem empregar pelo menos alguns de les.NET Framework e ilustraremos como empregá-Ias para desenvo lver poderosos aplicat ivos . mas não é passiveI criar um código que seja processado na hora da destruição. Nesta lição abordamos. tornando a utilização de objetos uma habilidade essencial para todos os programadores da platafonna . Para desenvolver qualquer aplicativo que vá além do exemplo mais si mples. mas às vezes (principalmente quando se transfere um código antigo do Vis ua l Basic) há a expectativa da execução de um código no fi nai do ciclo de vida do objeto. o subsistema de coleta de lixo e liminará os objetos quando necessário. Por essa razão. Na próxima lição. Workshop o Workshop foi planejado para aj udá-lo a antecipar possíveis dúvidas. Em algumas linguagens.NET. essa ' limitação' não causa mu itos problemas. O qu e significam esses comentários.NET. também será preciso gerar suas próprias classes. posso fi car a penas nos procedimentos e módulos? R Você não precisa criar objetos no Visual Basic . Dia 8. e isso não é fac ilmente transferido para uma implementação do Visual Basic . com freqüênc ia. incluindo as versões anteriores do Visual Basic. .

Now() 10 11 12 13 14 Public Sub New(ByVal sColor As String) m dtManufactured = System.Now() m sColor =sColor End Sub Public Sub New(ByVal sName As String) End Sub Public Sub New(ByVal dtManufactured As Date.19 Versões Diferentes de Construtores Disponíveis para a Classe Vehicle 1 Public Class Vehicle Dim m dtManufactured As Date 2 3 Dim m_lngNumberOfPassengers As Long 4 Dim m_sColor As String 5 6 7 8 9 Public Sub New() m dtManufactured End Sub = System .DateTime. . DateTime.Traba lh a ndo com Objetos 201 Teste I. o que mais acontecerá? 2. das propriedades e dos métodos. O que está errado nos construtores sobrepostos desse cód igo (veja a Listagem 7. Se uma classe tiver um método marcado com MustOverride. Qual a palavra-chave que você pode usar em um construtor para chamar o de uma classe básica? 3. crie um exemp lo de hierarquia de classes começando em Animal e descendo alguns níveis com algumas classes ilustrativas. das classes. ByVal sColor As String) m dtManufactured = dtManufactured m sColor = sColor End Sub 15 16 17 18 19 20 21 22 - 23 24 End Class Exercícios Por meio da herança. 19)? CÓDIGO LISTAGEM 7.

tente modificar o código para alterar como o programa funciona. lIsandotantoo IDE quanloa linha de comando para compilá-los. as técnicas de tratamento de erros abordadas no Dia 6 permitem que você lide com o problema de mane ira sofisticada.N ET pode ser usada para criar. já que grande parte do . laços.m akron. Leia o material. Com essa experiência. Todas essas informações. do Visual Basic .202 Dia 7 SEMANA Revisão 1 Agora que você terminou sua trajetória pela primeira semana de lições.lhe uma boa introdução à programação simples.NET. erros sempre ocorrem em programas. o Dia 4 abordou as opções de arquitetura para desenvolver todas as espécies dist intas de sistemas que a plataforma. Não importando se eles poderiam ser ev itados. il ustra o uso de instruções condicionais. arrays. (Dias 1 e 2). Esse projeto. Quando estiver pronto para seguir em frente.NET Framework é baseada em objetos.br (veja a Introdução para maiores detalhes). criando a sua própria variação dele. Também criou alguns exemplos de programas na plataforma . que você pode encontrar acessando a página Web deste li vro no site www .NET ( Dia 3) forneceu. bem com o a prática da codificação que as acompanhou. cnar os seus.NET e de como tudo se encaixa.çom. além de conduzi-lo na criação de um programa real completo. O Dia 4 apresen tou as instruções condiciona is (inclus ive as instruções If) e laços. Pelo fato de o Visual Bas ic . desenvo lva o projeto e faça testes com os resultados durante algum tempo. A lição sobre os tipos de dados e as técnicas básicas de programação usadas na criação de aplicativos do Visual Basic . já deve ter uma boa com- preensão da programação. por meio de uma grande variedade de projetas e diversos arquivos-fonte. já pode testar todos os exemplos deste livro e até . variáveis e até técnicas de tratamento de erros mostradas no decorrer das lições que acabamos de concluir. o enfoque da lição do Dia 7 foi sobre os termos e conce itos necessários para possi bilitar o uso de objetos em se us próprios programas.O Jogo da Vida).lo preparado para encarar o primeiro projeto como bon ifi cação (The Game of Li fe . devem tê.NET permitir a geração de tantos tipos diferentes de programas. Para concluir. Independentemente da sua habilidade em programação. dois itens que serão empregados em quase todos os programas que vier a escrever. .

O trabal ho com os bancos de dados introduzirá você no Server Explorer. mas o Dia 13 mostrará como usar seus vários recursos. O Dia 12 dá prossegu imento à lição sobre dados mostrando como se conectar ao banco de dados de seu exemplo e desenvolver um aplicativo que permita adicionar. você se aprofundará realmente no estimulante mundo do . O Dia I I aborda os conceitos subjacentes aos bancos de dados e o conduz pela criação de um deles para um aplicativo de registro de CDs. e informações sobre toda a exce lente funciona lidade das listas e arrays forneci- da pelo Framework. para Wi ndows (usando os formulários Windows.Math .NET.informações valiosas quando você iniciar projetas de sua autoria usando a plataforma . trabalharemos com contadores de desempenho e registras de eventos. portanto. Quase todo aplicativo empresarial existente usa algum tipo de banco de dados. abordada no Dia 10). Ela começa com uma lição no próprio Framework (Dia 8). . Random e Envi ronment. incluindo detalhes sobre o uso das classes Consol e.NET Framework por sua própria conta . Dia 9) ou para a Web (usando a tecno logia dos fonnulári os da Web. o que torna essas duas lições absolutamente essenciais. você passará duas liçôes exam inando esse tópico. Nessa lição. editar e excl uir CDs de sua coleção. Dias 9 e 10. essa li ção também inclui uma introdução a como encontrar o recurso necessário no . Poucos programas são exec utados sem alguma interface com o usuário.SEMANA 2 Visão Geral Durante esta semana.NET Framework. Além de todas essas particularidades. e aprenderemos uma maneira mais fáci l de configurar uma conexão de banco de dados. enfocam a criação de uma interface com o usuário em seus aplicativos. As próx imas duas lições.

no Dia 14. você aprenderá alguns dos mais avançados recursos orientados a objetos do Visual Basic .NET. Essa lição realmente tomará mais claro o poder dessa versão do Visual Basic e mostrará como é possível usar esses recursos para projetar sistemas que sejam mais fáceis de estender e tenham uma manutenção mais simples. você terá aprendido tantos recursos do Visual basie . No final da Semana 2. O projeto de bonificação número 2 (Parte I do Projeto de Bônus 2) fornecerá a prática por meio de algumas dessas técnicas novas. incluindo a herança e a sobreposição.NET que estará pronto para criar aplicativos complexos. .Semana 2 Para conc luir.

mas conhecer os termos-chave e a maneira como o Framework é organizado são co- nhecimentos valiosos que o aj udarão no desenvolvimento de mais aplicati vos com o Visual Basic .NET porque ele é compartilhado com mu itas li nguagens (mais de 20 no momento em que esse texto foi escrito). • Com o encontrar o que precisa no . O Framework fornece um poderoso conjunto de componentes para você usar em seus programas.NET Framework.NET Framework foi o nome dado a vários componentes e serviços que foram combinados para criar um ambiente poderoso de desenvolvimento.Semana 2 • DIA • Introdução ao .NET Framework o . Ele contém uma quantidade imensa de classes que executam várias funções. crie elementos gráficos e muito mais . o Que É o .NET Framework não é especificamente um novo recurso do Visual Basic . Isso permitirá que você escreva aplicat ivos com base no Windows e na Web. Hoje.NET Framework. acesse a rede. da manipulação de strings ou números à criptografia e o acesso à rede. • Algumas classes importantes do .NET Framework? o tenno . você aprenderá: • O que é o .NET Framework é um processo contínuo. . Assimilar o .NET. 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.NET Framework.

Em seguida. ou de linha de comandos.NET Framework quando desenvolver aplicativos no Visual Basic . isso é simples. O CLR pennite que os desenvolvedores ut il izem a linguagem com a qual se sentem mais confortáveis. . Essa é a utilização mais importante da classe Conso 1e.NET Framework Você usará muitas classes do .NET Framework possui o COlllmOI1 Langl/age Rl/l1lime (CLR). Alguns dos métodos essenciais desta classe são mostrados na Tabela 8. Permite a geração de números aleatórios. Random Inclui vários cálculos matemáticos. Math Co 11 ect i ons Fornece várias classes para diferentes estratégias de armazenamento de conjuntos de itens. poderia ter de executar algumas conversões para interpretar de modo apropriado a variável.já que as duas linguagens empregarão o mesmo tipo de dados. O resultado final é que você se beneficiará do desempenho de um código totalmente compi lado. empregará algumas delas com mai s freqüência do que outras. Isso significa que é muito mais fáci l para duas (ou mais) linguagens interoperarem. se você precisasse passar infonnações de uma linguagem (como a C++) para outra (d igamos o Visual Basic). o . No entanto. Environment Pemlite a leitura e a gravação nas variáveis de ambiente do sistema. A principal alteração é que agora todas essas linguagens são compiladas para a Microsoft Itermediate Language (MS1L). e não de um que seja interpretado no tempo de execução. todas as linguagens que têm suporte do CLR usam o mesmo tipo de dados. que é responsável por executar seu código. Os métodos Wri teL i ne e ReadL i ne dessa classe têm sido usados com freqUência para exibir resu ltados e ler códigos de vários dos aplicativos do console. criados no livro até agora. Ainda há mais. ela é convertida pel o CLR em código nativo quando é executada pela primeira vez. ele em geral funciona em segundo plano. O CLR oferece várias inovações importantes que afetam os desenvolvedares de aplicativos . há alguns recursos menos empregados dela que vale a pena examinar.Dia 8 Além d isso. No entanto.NET no Visual Basic .NET ou em outras linguagens que tenham suporte. Entre as classes mais úteis estão • • • • • Console Permite a lei tura e a exibição na linha de comando. 1. Anteriormente. Classes Importantes do . Embora o CLR seja importante.NET Framework que você deve examinar são algumas das classes que o compõem. Console Vocêjá viu algumas das classes Conso 1e quando desenvolveu aplicativos anteriormente.NET. Agora. podendo ainda se comunicarem com outras. A parte essencial e visíve l do .

quando se quer exibir uma string que contém informações armazenadas em variáveis. sem incluí-lo.1 Métodos da Classe Conso 1e Descrição Metodo Read ReadLine SetError Setln SetOut Write Wr. seria bom se tornasse sua vida mais fác il quando você executasse essa tarefa.Introd ução ao . Não precisa que a linha termine com Enter. Em vez de somar as strings com o símbolo +. teL. Pode ser usado na criação de um mecanismo sim ples de registro de erros em seu aplicativo. Pode ser usado na alteração de um aplicativo de linha de comandos para que leia um arquivo ou local de rede.NET Framewo rk TABELA 8 . é usado o símbolo & como em . Quando empregamos os métodos Wri te ou Wri teL i ne para exibir informações. como fazemos com os números. Felizmente. ". Ela é a variável ITEM COUNT das instruções anteriores. ela faz isso. Pode ser usado na alteração do destino da saída para registro ou outra finalidade. Em geral. Exibe informações na linha de comandos (ou outra saída).WriteLine{"Insira" & ITEM_COUNT & _ "itens. ne Lê informações da linha de comandos (ou outro código). como descrito a seguir: Console. Em vez de constru ir uma string complexa usando a concatenação. ITEM_COUNT) o item {O} é um espaço reservado para a variável que você inclui u no final da string. Resultados Mais Simples Já que a classe Ccnso le com freqUência é usada para saídas.WriteLine("Insira {O} itens . Termina a saída com uma linha nova. Altera o destino dos métodos Wri te e Wri tel ine. pode ser difícil lidar com todas as aspas e E comerc iais. mais adiante nesta lição. Pressione ENTE R entre os itens. uma técnica conhecida como concatenação é usada. Altera a origem da entrada de Read e Readl ine. Veja a seção "Redirecionamento". Novo TERMO COl/calel/açeia é mais uma palavra sofist icada que quer dizer 'combinação de strings' . Lê informações da linha de comandos. Console. Altera o destino das mensagens de erro a serem exibidas enquanto seu programa estiver em execução. Exibe informações na linha de comandos (ou outra saída). é possível utilizar esses espaços reservados nos locais certos e incluir posteriormente as variávei s que serão empregadas em seu preenchimento. Não termina com uma nova linha. mais à frente nesta lição.") Se você tiver uma st ring complicada. Epossível inserir vários espaços reservados (ou até . Pressione ENTER entre os itens . Lê todos os caracteres até o Enter. Veja a seção "Redirecionamento". nos beneficiamos de sua capacidade de utilizar espaços reservados para as variáveis.

e uma sub-rotina Ma i n (linha 4).". você deve sempre importar esse espaço de nome na maioria dos aplicativos. {I}. E nesse local que a classe Conso 1e é definida. Dentro da única classe definida em seu arquivo.WriteLine() 13 Console." & _ 8 Pressione ENTE R entre os itens. Portanto.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.1 To O Step . .WriteLine("Itens em ordem inversa:") 14 For I ~ ITEM_COUNT .Dia 8 mesmo usar o mesmo diversas vezes) na string. A Listagem 8. assim como muitas outras classes importantes. em vez de ter de procurar todas as ocorrências desse vaIar no aplicativo inteiro. prevendo o caso de se querer alterar o valor posteriormente. você declara apenas lima constante. O ID E do Visual Basic . {2} e assim por diante).1 é bem simples e pretende demonstrar apenas algumas das maneiras como você tem usado a classe Conso 1e nessas sete lições.ReadLine 11 Next 12 Console .1 demonst ra esse recurso.NET fará isso automaticamente para aplicativos que forem criados quando ele estiver em uso. ANÁLISE o código da Listagem 8. Se tivéssemos repetido o número 10 em todos os locais e examinássemos esse código seis meses depois. as variáveis que forem incluídas depois da string serão inseridas nela em ordem. começando com o item "0<'" (primeiro item) e dando continuidade. Assim. . É muito mais fácil alterar só o valor da constante. ITEM COUNT (linha 3). O uso de uma constante também mostra que o desenvolvedor sabe que os valores estão re lacionados. percorrendo as variáveis e espaços reservados em seqüência ({O}.WriteLine(sItems(I)) 16 Next 17 End Sub 18 End Class . A linha I im porta o espaço de nome System. CÓDIGO LISTAGEM 8. poderíamos não lembrar se todos indicariam o mesmo valor ou se seria somente uma coinc idência.1 15 Console .WriteLine("Insira (Olitens.ITEM_COUNT) 9 For I ~ O To ITEM COUNT-I 10 sItems(I)= Console. A constante é usada para substitu ir a inserção do número 10 em todo o código.

os elementos são exibidos na tela em ordem inversa.WriteLine(valuel & "+" sSource) & value2 & ":" & result & " : " & Embora isso possa pa recer mais ' natura l'. Essas são incluídas depo is da string na chamada de Consol e. começa ndo com Oque é o primeiro. A stri ng anterior poderia ser construída e exibida com o cód igo: Console . A Listagem 8. Pressione ENTER entre os iten s.2 Executando o Apl i cati vo do Console 1 2 3 4 5 6 7 8 [c: \ code]Consolel. I. ela teria a seg uinte apa rência: Console . o primeiro método executaain do em um aplicativo. se fará ou não sentido dependerá um pouco de critérios pessoa is. As variáveis podem ser nu méricas. Porco-da-terra Rato gigante da Índia C asuar Dugão Équi dna Tentilhão . Cada linha da entrada é lida (linha IO) e exibida em um dos elementos do array. COOIGOt RESULTADO LISTAGEM 8. Usar a abordagem de ca racteres na construção de uma string pode ser útil. cada uma dessas li nhas será preenchida com variáveis. Nela você constrói a string concatenando stri ngs e variáveis. 1912") Os desenvolvedores experientes do Visual Basic podem estar um pouco mais familiarizados com uma abordagem alternativa. Posteriormente. Wri te).Wri teL i ne. Dentro do item exibido com Console. Por exemplo. Eles são exibidos um por vez na saída atual. Seu programa falharia na compilação ou na execução. A li nha 7 é digna de nota. como você já viu muitas vezes. ReadLine. você pode esquecer de incluir um caractere de concatenação ("&") quando adicionar as strings. se você quisesse usar essa técn ica para escrever uma string com quatro va riáveis incluídas. mas.Introdução ao .NET Fram ework o procedimento Shared Sub M é. como fi zemos com a constante ITEM _COUNT. como o item la} no meio da string da linha 7. como vemos na linha 15. Isso é fe ito com o uso da cláusula Step da instrução For . Dentro do procedimento. Wri teL i ne (ou Canso 1e.exe In sira 10 itens. você declara um array de strings (li nha6) e o preenche com o método Console .• Next (linha 14). I.WriteLine( "{O}+{I} '" {2} : {3} ". Nessa técn ica. Observe que esses elementos são numerados de O a 9 (li nha 9).2 demonstra esse tipo de saída. 2. "Bertrand Russell.. alfanuméricas ou qualquer outro tipo que possa ser convertido em uma string. cada va lor substituirá um caractere na ordem que eles aparecerem. Para concluir. você pode inseri r vários caracteres.

o resultado ou as informações de erro de seu programa. "Trabalhando com Objetos" e o Dia 14. Observe que os comandos de Consol e. Essas informações podem ser red irecionadas para qualquer destino onde houver TextReader (para entradas) ou TextWri ter (para saídas e erros). IO .2 para que envie o resultado para um arquivo em vez de para a janela das linhas de comando. o redirec ionasse a um arquivo a fim de criar uma ferramenta simples de registro para ele. é preciso gerar uma das classes que implementará ou herdará caracteristicas de TextReader ou TextWriter (veja o Dia 7. "Introd ução à Programação Orientada a Objetos". para obter mais detalhes sobre a abstração e a herança). ela poderia ser usada para exibir o resultado de um apl icativo que recebesse entradas de linhas de comandos ou de um arq uivo. já que são abstratas.WriteLine não foram alterados. Quando lidamos com a classe Console.1210 LISTAGEM 8. De maneira semelhante.WriteLine quando depurasse o apl icativo em testes e. em seguida.3 Redirecionando a Saída do Console 1 Imports System 2 Imports System .3 mostra como se pode alterar o exemplo mostrado na Li stagem 8. Algumas das imp lementações dessas duas classes permitem ler e gravar em arquivos. locais na rede e ass im por diante.2 Dia8 Executando o Aplicativo do Console (continuação) CÓDIGO! RESULTADO 9 Girafa 10 Hipopótam o 11 Iguana 12 Chacal 13 14 15 16 Itens em ordem . Observe que não é possivel criar nenhuma dessas duas classes diretamente. nversa: Chacal Iguana Hipopótamo 17 Gi rafa 19 Équidna 18 Tentilhão 20 Dugão 21 Casuar 22 Rato gigante da Índia 23 Porco -da -terra Redirecionamento Redirecionamenlo significa apenas'env iar algo para um local diferente' . Por exemplo. você poderia empregar CO Ilsole. somente o destino foi. Em vez disso. A Li stagem 8. Você pode redirecionar a entrada. isso quer dizer que você pode alterar o local onde fará a leitura ou ex ibição. COOIGO LISTAGEM 8.

Introd ução ao .WriteLine("ltens em ordem inversa:") For I = ITEM_COUNT . Pressione ENTE R entre os .WriteLine( "lnsira (Of itens. Pressione ENTER entre os itens.Out Console.Read L ine() 24 End Sub 25 End Class Executando o aplicativo: 1 [c: \code]Console2.WriteLine(sItems(I}} Next oFile.WriteLine("Conc l uído") Console. 3 Porco-da-terra 4 Rato gigante da Índia 5 Casuar 6 Dugão 7 Équidna 8 Tentil hão 9 Girafa 10 Hipopótam o 11 Iguana 12 Chacal ._ITEM_COUNT) For I = O To ITEM COUNT-l sltems(I) = Console.ReadLine Next Console.SetOut(oFi le) Console .SetOut(oOut) Console . " .txt") Dim oOut As TextWri ter = Console.exe 2 Insira 10 itens.Close() Console.NET Framewo rk 211 COOIGO LISTAGEM 8.CreateText("Output.itens .WriteLine() Console .3 Redirecionando a Saída do Console (continuação) = 3 Public Class ConsoleTest 4 Private Const ITEM COUNT As Integer 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 10 Shared Sub Main() Dim I As Integer Dim sItems(ITEM_CDUNT)As String Dim aFi le As TextWriter = File.1 T O Step -1 o Console .

De maneira semelhante. Se em vez disso quisermos continuar a preencher um arquivo existente. 8.Wri te e CansaI e. 20. Essas são as linhas que criam o arquivo. Se já houver um arquivo com esse nome. assim como muitas variáveis e outras confi gurações que afetam seu computador. portanto ele poderá ser con fi gurado mais uma vez na linha 21. Se não consegu irmos fechar o arquivo. Observe que todas essas propriedades e métodos são compartilhados. . txt empregando o método CreateText da classe Fi 1e. Observe que na verdade não é preciso criar uma instância da classe Fi 1e. 9.2 1e22 . ele será excl uído. 10. o código da Listagem 8. como o local do diretório de seus arquivos temporários. ou do ambiente. A linha 2 importa o espaço de nome $ystem. devemos utilizar AppendText no lugar de CreateT ext. Esse ambiente permite que você consulte configurações para o usuário. já que Ométodo CreateText é comparti lhado. txt com o conteúdo a segu ir: RESULTADO I Itens em ordem inversa: 2 Chacal 3 Iguana 4 Hipopótamo 5 Girafa 6 Tent il hão 7 Équidna 8 Ougão 9 Casuar 10 Rato gigante da Índia II Porco -da -terra [nvi ronrnent (Ambiente) Saber seu lugar em geral produz a diferença entre sucesso e constrangimento.2 foi o acréscimo das linhas 2.2.Dia 8 13 14 Concluído ANALISE A única alteração entre as Listagem 8. A linha 15 provoca o redirecionamento para seu arquivo. O ambiente em que seus programas são executados é composto de informações sobre o sistema operacional. WriteLi ne após esse redirecionamento serão enviadas para seu arquivo em vez de para ajane la das linhas de comandos. em programação. você é envolvido por um ambiente específico. Ele será necessário já que contém a definição para as classes TextWriter e Fi le que você usará depois. A última linha importante é a 20. e provocam e encerram o redirecionamento da saída. o conteúdo não poderá ser gravado e terminaremos com um arquivo sem bytes (vazio). o conteúdo de seu caminho de pesquisa ou até outros itens sobre a linha de comandos.1 e 8. 15.3 deve produzir um arquivo Output . E essa percepção vem freqüentemente da vizinhança. Todas as saídas que empreguem CansaI e. A linha 9 é usada para sa lvar o destino original da saída. A linha 8 gera o arqu ivo Output. Algumas das propriedades e métodos mais importantes da classe Envi ronment são listados na Tabela 8.

3. em geral um inteiro (I nteger) ou um duplo (Double). Retorna o caminho do diretório do sistema (\winnt\system32 no Windows NT ou no 2000) . Esse retorno é feito na forma de um arrav de strings. Os métodos importantes dessa classe estão listados na Tabela 8. opcionalmente retornando um código de erro que pode ser usado pelo sistema operacional.Introd ução ao . Traz informações armazenadas no ambiente com o comando Set. o NT ou o 2000. por exemplo. Esse retorno é feito na forma de um arraV de strings. Métodos Exit GetCorrmandL i neArgs Encerra um aplicativo. destinada a criar números aleatórios. Retorna todos os itens listados na linha de comandos quando o aplicativo foi iniciado. como o ca minho de pesquisa (path). Retorna a lista de unidades disponíveis. TABELA 8. Retorna um interi ro entre O e o valor de MaxValue (a lgum inteiro). O próprio executável é o elemento zero (primeiro) do arrav· Retorna o valor de uma variável de ambiente solicitada. se é o Wi ndows 9x.N ET Framewo rk TABELA 8.2 Membro Métodos e Propriedades da classe Environment Descrição Propriedades 213 CorrmandLine Currentoi rectory O$Version SystemOi rectory Version Representa a linha de comandos completa que iniciou o aplicati- vo. Next Next(MaxValue) . Retorna o caminho do diretório atual. Retorna informações sobre a versão de uma montagem .3 Método Métodos da Classe Random Descrição Retorna um inteiro entre Oe o valor máximo possível para um inteiro (aproximadamente 2 bilhões). GetEnvironmentVariable GetLogicalOrives A classe Envi ronment é út il quando você precisa de informações sobre o sistema que está ao redor da execução de seu programa. O pri meiro (item DI elemento geralmenteéA:\. como quando tem de saber onde gravar seus arquivos temporários ou em que sistema operacional está sendo executado. o diretório para arquivos temporários (templ ou outras configu rações. Random Random é uma classe simples. Retorna informações sobre o sistema operacional atual.

1 214 8. Arredonda um número para o número intei ro mais próximo. se você quisesse gerar um inteiro aleatório entre 1e I00 (inclusive). Simplesmente lembre-se de converter seus ãngu· los de graus para radianos antes de empregar qualquer dos métodos de Math relacionados aos ângulos.Next(1. Retorna um tipo duplo representando o valor de e (2. Retorna o valor máximo entre dois valores.4 Métodos da Classe Math Método Descrição Retorna o va lor absoluto de um número (se for negativo. Retorna um tipo duplo representando o valor de pi (3.4. ele retornará o valor positivo do número). . Porque um número tão redondo? Os radia nos estão relacionados à circunferência de um circulo . Essa é a variaçáo mais usada quando se precisa de . Método Next(MinValue.7182818284590451).296 graus. como valor mínimo. Abs Cós E Max Min PI Round NOTA Para aqueles entre nós que dormiram durante as aulas de geometria.10Q) Math A classe Math contém muitas das constantes e funções matemáticas importantes. veja a Nota a seguir). estão além do escopo deste livro.a medida exata é I Radianos = (I graus * pi) / 180 Os radianos são usados em computação devido aos cálculos e. escreveria Oim oRand As New Random Dim iValue As Intege r : oRand. Os métodos mais relevantes são descritos na Tabela 8. Retorna um tipo duplo entre O e 1. portanto. verá que há muitos outros métodos disponíveis. A maioria delas são métodos compartilhados e. TABELA 8. Retorna ocosseno de um ângulo (medido em radianos. um ra· diano é aproximadamente igual a 57 . podem ser usados sem a criação de uma instância da classe Math.3 Dia8 T ABELA Métodos da Classe Random (continuação) Descrição Retorna um inteiro entre os valores min i mo e máximo. portanto. MaxValue) NextOouble Por exemplo. Retorna o valor mínimo entre dois valores. Se você examinar a classe Math na ajuda (Help). 1415926535897931).

cria um novo ArrayList. Várias classes de conjuntos (a maioria no espaço de nome System. O uso da classe ArrayL i st será adequado se você tiver um conjunto muito dinâmico que possa aumentar ou diminui r com o passar do tempo e se não precisar dos recursos dos outros conjuntos. verifique nesse espaço de nome antes de procurar em outro local. recuperar ou excluir membros do cOI~ unto. Se precisar de outros tipos de coleções. cria um novo ArrayList.5 resume alguns dos principais membros. Introduçâo à Programação com o Visual Basic .com 20 membros inicialmente Oim arrList3 As ArrayList Set arrList3 = New ArrayList(52) . ArrayL i st foi criado para armazenar um conjunto de variáveis Object.NET Framewo rk A classe Math em geral é útil para calcular valores. A principal diferença é que foi projetado para permitir um crescimento fác il conforme forem sendo adicionados mais elementos. Uma versão permite a definição da capacidade inicial do conjunto. e outra configura o tamanho inicial como 16: Oim arrList As New ArrayList . Classes de Conjuntos no .com 16 membros inicialmente Oim arrList2 As New ArrayLi st(20) .NET Framework possui várias outras classes de conjuntos que adicionam mais recursos a Array.Co 11 ecti ons.Introd ução ao . além disso. é na classe Math que a encontrará.NET". mas. elas têm recursos como a ordenação de listas e a possibi lidade de inclu ir e recuperar com maior facilidade na lista. O .Collections) estão dispon íveis. Essas classes permitem o armazenamento de uma lista de informações exatamente como nos arrays. Algumas serão descritas ainda nesta lição. '.com 52 membros inicialmente As outras propriedades e métodos importantes da classe ArrayList são usados para ad icionar. ArrayList ArrayL i st é Oconjunto que mais se parece com um Array. cria um novo ArrayList. Mesmo se você não lembrar (ou nunca tiver aprendido) o que é urna tangente hiperbólica. . pode ser usado para conter qualquer tipo de dado. Como as outras classes do espaço de nome System .NET Framework Você já conheceu o tipo de dados Array no Dia 3. A Tabela 8. Portanto. Você pode criar uma nova instância da classe ArrayL i st usando um dos construtores disponíveis.

São dois tipos ' clássicos' de conjuntos. Em geral.5 Membro Dia8 Métodos e Propriedades da Classe ArrayList Descrição Propriedades O tamanho aluai da classe ArrayL i st. Add Clear IndexOf Insert Remove RemoveAt 50rt ToArray TrimTo5ize Adiciona um novo elemento à ArrayL i st em uma posição solicitada. Ordena os membros de ArrayList. Remove todos os itens de ArrayList . na fila do almoço ou na passagem pela alfândega. prime iro a sair' (FIFa. Em geral removem o item quando é visualizado porque foram projetadas para armazenar o conjunto temporariamente. Elas diferem no modo como os itens são adicionados em cada conjunto e. essa propriedade será aumentada (com sua quantidade inicial .1216 TABELA 8. A classe Queue é um conjunto 'primeiro a entrar. em como são removidos dos conjuntos. principalmente. Se isso fi zer com que Count ultrapasse (apacity. ° daaumentará. As filas são freqUentemente usadas em pro- . Retorna a posição de um certo objeto na classe ArrayL ist oEsse método é útil quando usado depois de uma ordenação. Configurado pela primeira vez quando ela é criada (16 por padrão). As duas classes são conjuntos que permitirão que você adicione com faci lidade novos itens. Essacaracterística é semelhante à da maioria das fi las (ou formações em seqUência) que você possa ter visto.sabemos que o taclasse mais adequado de arrays quando manho não de até onde o Seu crescimento USO ArrayL i é ilimitado permite que os itens sejam adicionados quando necessário. Remove o objeto solicitado de ArrayList. mas Capacity não é alterada. Diminui ArrayList de modo que tanto Count quanto Capacity sejam iguais à quantidade atu al de elementos na classe . sendo úteis em muitos esforços de programação.16 por padrão). Capaci ty Count Item Retorna um elemento especifico da classe ArrayList. em um ponto de ônibus. Métodos Adiciona um novo item à ArrayLi st . Copia toda ou pane de uma classe ArrayList em um array.in. first-out). Isso significa que os itens são remov idos da fila na mesma ordem que foram adicionados. as pessoas que chegam primeiro são atendidas antes. A quantidade efetiva de itens na classe ArrayList. Queue e Stack Os conjuntos Queue e Stack são semelhantes. mas st tivermos noçãona substit uiçãoconjunto avançará. Remove o elemento da posição solicitada. podendo aumentar conforme mais elementos forem adicionados. first. Count é co nfigurada com O.

Nota Extrai e retorna um objeto para a fila. TABelA 8 . Em seguida.6 descreve alguns dos métodos e propriedades importantes da classe Queue. Remove e retorna o próximo item para a pilha. As pilhas são a solução clássica para li dar com problemas que requerem a inversão de uma ordem de operações. Exatamente como a fila possui Enqueue e Oequeue. A classe Stack é um conjunto 'primeiro a entrar. Isso significa que os itens são removidos da pilha na ordem inversa à qual foram adicionados. Mu itos cálculos são processados internamente com a ajuda das pilhas. Métodos Remove todos os itens da fi la. Por exemplo. as mensagens são colocadas em lima fila para o objeto receptor. last-out). A ordem FILO é análoga a lima pilha de pratos: o prato adicionado por último sempre é removido primeiro. A Tabela 8. quando dois programas (ou objetos) estão se comunicando. esse termo.N ET Framewo rk gramação quando esse comportamento é desejado. Métodos Remove todos os itens da pilha. Permite que você examine o próximo item sem removê·lo da fila. Insere um novo objeto na fila.7 Métodos e Propriedades da Classe Stack Descrição Membro Propriedades Count Clear Pop A quantidade de itens na pilha.6 Métodos e Propriedades da Classe Queue Descrição Membro Propriedades Count Clear Dequeue Enqueue Peek A quantidade de itens na fila. TABelA 8 . fi rst-in. Os programadores sempre se referiram ao ato de adicionar um item a uma fi la como enfileirar o item. foram adotados. NOTA Por que os métodos são chamados de Dequeue e Enqueue? Por que não Add e Remove? É simplesmente uma questão de manter os nomes tradicionais. os dois métodos usados tradiciona lmente para lida r com pilhas são Pop e Push. Isso é útil porque removê-lo poderia imped ir outro método de lidar com a fila adequadamente.7 descreve alguns dos métodos e propriedades da classe Stack.Introd ução ao . . assim como desenfileirar. portanto. ele poderá processá-las na ordem que foram recebidas. A Tabela 8. último a sair' (F ILO.

Queue e Stack são conjuntos interessantes. Como em NameValueCollection. é recomendável lembrar deles.7 Métodos e Propriedades da Classe Stack icontinuação) Membro Pus h Peek Descrição Insere um novo objeto na pilha.1218 Dia8 TABELA 8. A quantidade efetiva de itens em SortedList. Isso é muito útil após a execução de Sort. Semelhante à ArrayL is t. ela será útil sempre que você precisar de uma Iista de itens organizados que possa 'crescer".8 descreve alguns dos metodos e propriedades sign ificativos da classe SortedList. essa propriedade sera aumentada com sua qua ntidade inicial . cada item é identificado por um nome. Permite que você examine o próximo item da pilha sem removê -lo. e apresenta as mesmas propriedades Count e Capaci ty daquele conjunto. Métodos Count Add Adiciona um novo item à SortedList. mas também porque resolvem probl emas especificos de programação. em parte por uma perspecti va histórica. Retorna todas as chaves armazenadas em SortedLi st. TABELA 8. . Propriedades Clear IndexOfKey Item Keys Remove Propriedade Propriedade Método Remove todos os itens de SortedLi st . assim como alguns recursos úteis adicionais específicos. a classe SortedLi st pode alimentar. Além disso. Assim. Configurado pela primeira vez quando ela é criada (16 por padrão). A Tabela 8. Remove o objeto solicitado de SortedList. Quando for necessá ri o um conjunto com o comportamento desses dois objetos. Retorna a posição de um certo objeto em SortedL ist. como os participantes de lima con ferência ou os resu ltados de uma bateri a de provas de uma turma escolar. podendo aumentar conforme mais elementos forem adicionados. mas Capaci ty não é alterada. os valores de SortedL i st são ordenados com base no nome fornecido a cada item.8 Membro Métodos e Propriedades da Classe SortedList Tipo Descrição Propriedades Capaci ty O tamanho atual da classe Sorted Li st. Se isso fizer com que Count ultrapasse Capaci ty. Retorna um elemento específico de SortedList.16 por padrão. Count é confi gurada como 0. SortedLi st A classe SortedL i st possui característ icas tanto de ArrayL i st quanto de NameVal ueColl eeti on.

No . im agine tentar encontrar um li vro nela. Em geral quando você trabalhar com listas. O . As classes Mi crosoft são em geral específicas para o Visual Studio e dest inadas a um ou . Nessas situações. em ordem de suas chaves. Espaços de nome inferiores (os que possuem mais trechos) não estão contidos dentro dos superiores. encontrar o que você precisa às vezes será a parte mais difici l de seu uso. Diminui SortedLi st de modo que tanto Count quanto Capac i ty sejam iguais à qua ntidade atual de elementos na classe.NET Framework. Elas podem usar o sistema decimal de Dewey.NET Framework Com mais de 6 mil classes no .Data . demonstrando como se faz para encontrá-Ias. Se uma bibl ioteca não fosse organizada. Os espaços de nome $ystem são aq ueles que fazem parte do . há dois nomes de nível mais elevado. separados por um ponto. Reto rna todos os valores armazenados em SortedList. Espero que isso seja útil em suas próprias buscas. exatamente como achar um li vro em sua livraria favorita ou um site na Internet. assim como para os de outras li nguagens que em preguem o Framework. mas relacionados a eles. Muitas pessoas tentam encontrar classes no . System e Microsoft. conhecer algumas regras básicas o aj udará a encontrar a classe de que necessita para termi nar seu apli cativo. Por exemplo. Encontrando o Que Precisa no . precisará mantê-I as em ordem porq ue terá de exibi-I as para o usuário em uma seqüênc ia organizada.Introd ução ao . Esta seção o auxi liará a descobrir várias classes diferentes no Framework. algum outro método de catalogação ou apenas a ordem alfabética (por títul o ou sobrenome do autor). No entanto. Data. os livros se encontram organizados. a classe SortedL i st pode ser útil.NET Framework e estão disponíveis para os usuários do Visual Basic .$qlCl ient está relacionado a $ystem. o espaço de nome System.NET Framework. Você teria de vagar de modo aleatório até acidentalmente se deparar com o li vro desejado. As Regras da Busca Na maioria das bibliotecas.NET Fram ework TABELA 8.NET Framework é organizado de maneira hierárquica.8 Membro Remo~eAt Métodos e Propriedades da Classe SortedList Tipo Descrição (continuação) TrimToSize Values Método Método Propriedade R emove o elemento da posição solicitada.NET.NET Framework de maneira semelhante. mas não está contido ne le porque se encontra em um nive l hierárqu ico inferior a Sys tem. A denomi nação para cada espaço de nome é composta de urna série de trechos.Data.

Você poderia considerar que. apenas selecione a cor na Iista suspensa apropriada (por exemp lo. teria uma tonali dade cinza-clara. a de descrever uma cor. pode-se querer identificar uma cor pelo nome . há dois conj untos de cores: a estrutura Co 1or e a classe SystemColors. existe um espaço de nome Mi crosoft.isto é.NET Framework. ou com um valor de 128.9. No entanto.NET podem ser descritas com base nos percentuais de vermelho. Vi sua 1Bas i c que contém muitos dos recursos que eram encontrados no Visual Basic antes dessa versão. estaria errado. pennitem que você crie uma core descubra seu valor numérico. quando 'vermelho' for mais relevante do que saber que o valor da cor é -65536. Nessa linguagem cada uma das três cores citadas varia em vaIar dentro de um intervalo entre Oe 255. Dentro do espaço de nome Sys tem. Em outras situações. na primeira busca). A primeira é seu aspecto 'funcional'. Drawi ng. BackCo 1ar ou ForeCo 1or). Que Cor Tem Aquele Pincel na Janela? Nomeando Cores Essa pesquisa fo i iniciada por uma necessidade simples.Dia 8 mais ambientes. por serem as cores tão importantes. Portanto. ou outras respostas dentro do . se pensasse assim (e foi o que aconteceu comigo.NET Framework. Todas as cores do Vi sual Basic . verde e azul. apresentarei o processo de busca de três procedimentos. verde e azul que as compõem. para alterar uma cor no tempo de execução. Por exemplo.58 1. Uma cor composta com cada uma dessas outras três com 50% de saturação. Pode haver outras maneiras de rastrear a funcionalidade procurada. você pode identi ficar qualquer cor através de suas proporções de vermelho. Tentarei descrever alguns dos erros que cometi ao tentar encontrar o recurso e o resultado obtido. A Saga pela Classe Perfeita A fim de demonstrar algumas das técnicas que você pode usar para encontrar recursos dentro do . Drawi ng.3 75. A estrutura Color tem duas finalidades principais. Alterar a cor no tempo de projeto é fáci I. elevando a quantidade total de cores disponíveis para 16. . As cores com denominações conhecidas e a capacidade de criar outras novas são encontradas 110 espaço de nome System. descritos na Tabela 8. Os controles podem ser coloridos e a cor pode ser alterada no tempo de execução. Dois métodos. suas denominações apareceriam no espaço de nome System. você precisará saber como ident ifi cá-I a. No entanto. mas essas são as que encontrei.

Não é necessário criar urna nova instância da classe antes de utilizar os valores. Esses são atalhos úteis se você quiser colorir algo. Se você embut ir as cores em códigos. você pode estar tentando acessar alguns recursos ou serviços do sistema. Também há outras versões dessa função. seu programa deverá se impor nos microcomputadores dos usuários. você poderia colorir o plano de fun do de um formu lário com a cor já definida Desktop por meio do código a seguir: frmMain . Mais vantajoso ainda do que os nomes é que você não tem de criar uma instância nova da estrutura Co 1or antes de usar essas cores.Introd ução ao . Alpha varia de Oa 255. Portanto. BackColor : SystemColors . Uma variação usa um va lor Alpha além dos de vermelho. Ga i nsboro e Bur 1yWood. Portanto. Quem Sou Eu? Encontrando o Nome de Seu Computador Muitos programas prec isam conhecer o nome do computador em que estão sendo executados. enquanto outra é empregada para adicionar o valor Alpha a uma cor existente. verde e azul.N ET Framewo rk TABELA 8. Por exem plo.SeaShell Um problema na definição de suas próprias cores. a estrutura Calor contém várias cores identificadas. mu lticoloridos. Para evitar isso. é que sua percepção delas pode ser diferente da de seus usuári os. verde e azu l (cada um entre Oe 255). podendo se tornar irritante. e outros que embutiram todas as cores em códigos de sombreados cinzas. poderá empregá-las em um programa utilizando um cód igo semelhante a frmMain. Como os outros valores. estive com programadores que tinham criado apl icativos estranhos. saber a maneira de criá-las é importante. A última variação de FromARGB utiliza um valor intei ro e retorna a cor. mas não estiver certo do valor numérico exato que deseja. Retorna o inteiro que representa uma composição da cor que usa Alpha. Tenho encontrado pessoas que configuram seus microcomputadores com as cores mais extravagantes. e outras que nunca alteram os padrões. programadores educados configuram a cor dos elementos da tela usando as do sistema (aquelas definidas no painel de contro le). muitas com nomes representativos e evocativos.9 Método 221 Métodos da Estrutura Colar Descrição FromARGB ToARGB Cria uma cor nova com base nos valores de vermelho. o Controlou o Menu). como . Esse valor re· presenta a transparência da cor. verde e azul. De maneira semelhante. sendo esse último valor o correspondente a completamente opaco. vermelho. Desktop As cores estão em lodosos locais no Windows. como PapayaWhi p. Usar a classe Sys temCo 1or é semelhante a empregar a estrutura Co 1or. Além da capacidade de criar e converter cores. portanto. verde e azul) ou selecionando uma cor identificada. que possui várias propriedades representando os diferentes elementos que aparecem no Windows (como o WindowsText. Colorir as partes de seu aplicativo usando essas cores sign ifica que elas assum irão qualquer cor que o usuário selecionar para esse item . As cores do sistema estão disponíveis na classe Sys temColors.BackColor : Color. com os valores RGB (vermelho. Elas constituem uma ampla variedade de cores diferentes.

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 solução fo i iniciada por mim por uma necessidade desse tipo. Infelizmente, também 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 espaços 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 três maneiras fáceis 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 variável 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 variável 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 próxima parada. Depois de algumas tentativas sem êxito, encontrei GetHostName na classe DNS. Isso basicamente faz sentido - o DNS (Domain Naming Service) é um serviço 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 espaço de nome System.Net em seu projeto e acessando-o com um código semelhante a Console . WriteLine("Using Net.DNS : {O}" , DNS .GetHostName) Essa sol ução pode não func ionar, no entanto, se você uti lizá-la em um computador que não 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 informações 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 nições essenciais para os aplicativos, principalmente aqueles com base em formulários Windows: FrameBorderSize, CaptionHeight, MenuH ght e MousePresent. O mais importante para a sua pesquisa é que a classe SytemI nforma ei t i on possui uma propriedade ComputerName, que pode ser usada para recuperar o nome do computador se o espaço 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) Não deixe o fato de essa classe estar ocu lta dentro do espaço de nome System. Windows . Forms desanimá-Ia. Ela pode ser usada em qualquer tipo de aplicativo se o espaço de nome for carregado.

Introd ução ao .NET Framewo rk

Para que ter três maneiras de obter o nome do computador em que um programa está sendo executado em vez de apenas uma? Bem, apesar de não ser uma das pessoas que decide esse tipo de coisa, sugeriria algumas razões: • Grupos diferentes trabalhando em seções distintas criaram manei ras diferentes de resolver o mesmo problema. • Cada solução só é apropriada em certas situações (como, por exemplo, se a variável de ambiente for configurada, se você executar urna rede TCP/IP, se usar fonnulários Windows e assim por diante). Na pesquisa através do .NET Framework, em geral encontramos múl tiplas soluções. Use a que atender melhor suas necessidades, até encontrar uma ainda mais adequada.

Um Certo Dia na História
A busca dessa solução foi iniciada em lima função que existia no Visual Basic 6, WeekOayName. Essa função 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 terça-fe ira . Essa função, como muitas outras que existiam em versões mais antigas do Visua l Basic, pode ser encontrada de maneira bastante fácil, no espaço de nome Mi crosoft . Visua 1Basi c. Esse espaço de nome é carregado de modo automático quando o IDE é utilizado no desenvo lvimento, permitindo que códigos escritos para versões anteriores do Visual Basic sejam executados. Ponanto, se tudo que você deseja é uma função que ' costumava existir', provavelmente ela estará nesse espaço de nome.

Resumo
Em geral é dificil compreender onde o .NET Framework termina e o Visual Basic .NET começa. 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 nào estavam disponíveis para os progra, madores do Visual Basic antes dessa versão. 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. Além disso, é passivei obter mais informações sobre o .NET Framework na seção do MSDN (Microsoft Developer Network) sobre a plataforma .NET no endereço http://microsoft.com/net. No Dia 9, "Desenvolvendo uma Interface com o Usuário com os Formulários Windows", examinaremos outra família de classes do .NET Framework, as que permitem a construção de interfaces com o usuário do Windows. Essas classes serão usadas com freqUê ncia quando você criar soluções que empreguem as sofisticadas interfaces com o usuário dos aplicat ivos-padrão.

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 versões anteriores dessa linguagem, terá visto várias das maneiras ' antigas' de executar tarefas. Muitas dessas funções , ainda existem, dentro do espaço de nome Microsoft. Vi sua 1Basi c. E possíve l importar esse espaço de nome para fazer liSO de algumas das funções ou constantes mais antigas, como as funções matemáticas ou a constante vbCrLf (uma constante que significa' Adicione uma nova linha aqui'). No entanto, se possíve l, seria melhor empregar os recursos mais recentes do .NET Framework.
P Por que você não a bordou o espaço de nome "Fill-in- My -Favorite"? Preciso muito saber com o usá-lo em meu prog ram a.

R Com 6 mil classes disponíveis dentro do .NET Framework, uma lição como esta mal consegue abordar mesmo uma pequena porção delas com os detalhes que precisamos. Você se aprofundará mais no .NET Framework no Dia 17. Além disso, também iremos usá-lo em outros capítulos que compõem este livro.

Workshop

o Workshop fo i planejado para ajudá-lo a antecipar possíveis dúvidas, revisar o que já aprendeu
e começar a pensar em como colocar seu conhecimento em prática. As respostas do teste estão no Apêndice A, "Respostas dos Testes/Exercícios".

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 método de ordenação? 3. Qual seria o resultado da execução do código 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)

Exercícios
I. Escreva um pequeno programa do console que aceite várias palavras na linha de comandos e as exiba na tela em ordem alfabética.

SEMANA

2

DIA
Desenvolvendo uma Interface com o Usuário com os Formulários Windows
No Dia 5, organ izando programas, você aprendeu diferentes maneiras pelas quais os aplicativos .NET poderiam ser projetados. Uma decisão essenc ial era que tipo de interface com o usuário 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 lários Windows). Na lição de hoje examinaremos:

• • • •

A adição e manipulação de controles em um formulário. A manipulação em código de eventos da interface com o usuário. A aceitação e validação de entradas do usuário. O
liSO

de caixas de diálogo.

Além desses tópicos, serão abordados vários contro les especiais visíveis e ocultos usados nos formulários Windows.

Visão Geral dos Formulários Windows
Os formulários Windows (Windows Forms) são ut ilizados na criação de aplicativos que fazem uso de interfaces com o usuário com uns (com pequenas variações na aparência fina l) em todos

226

Dia 9

os sistemas operacionais Windows (veja a Fig ura 9. 1). Empregando esse conjunto de classes e funções, você poderá adicionar esse est ilo de interface com o usuário, incluindo janelas e caixas de diálogo, em seus aplicativos.

9.1 A maioria dos
FIGURA

aplicalil'os Windows
eDlI/pani/lla o mesmo

eSlilo de intelface porque o sistema operacionalmanipl/la o desenho das janelas e

,"""0:.0.«,) ..... """(1:<)
""...... P'lIàEl

S

EJ

~ Ooor

(t.)

Olllros recursos dela.

Antes que você se aprofunde na criação e configuração de um aplicat ivo Windows, faremos uma
recapitu lação dos principais termos relacionados aos formulários Windows. O primeiro e mais

difícil de definir é 'janela' . Umajallela, na perspectiva dos com putadores, é urna área da te la lIsada por um aplicativo para exi bir informações. 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 zação e minimização), mas essas opções podem ser desativadas pelo aplicativo que possui ajanela, pennitindo que ela tenha um tamanho ou urna posição fix a. Os subelementas da jane la, corno os botões, caixas de texto, listas ou fi guras (veja a Figura 9.2) compõem a interface de um aplicat ivo e são 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 também exibem informações para o usuário. As janelas podem estar em um entre doi s estados - moda l ou não-modal. Asjanelas do tipo modal devem ser manipuladas e fechadas antes que o usuário possa trabalhar com qualquer outro aspecto desse aplicativo - por exemplo, uma janela que pergunte se você deseja salvar as alterações de um documento. As janelas do tipo não-modal permitem que o usuário 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 também é conhec ida como caixa de diálogo e na plataforma .NET possui recursos específicos que a torna fáci l de usar para obter algum

Desenvo lve ndo um a Interface com o Usuário com os Formulári os Windows

227

tipo de informação de um usuário. As caixas de diálogo serão abordadas com mais detalhes ainda nesta lição .

FIGURA 9.2

Todos os elemelltos de ullla janela seio chamados de eOll/roles.

Criando um Aplicativo com Formulários Windows
Como exemplo, você pode desenvo lver um aplicativo simples com form ulários Windows que aceite entradas do us uário e demonstre como esses objetos da interface funcionam. Associado ao aprend izado sobre os formulários Windows, este exemplo também mostrará como executar algumas manipulações si mples de arquivos usando as classes System . IO do .NET Framework. Primeiro, o conduzirei pela criação deste exemplo simples e, em seguida, abordarei diretamente tópicos 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 lários 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ê COmeçar a trabalhar. O novo formul ário será chamado de Fonnl por padrão, mas não pretendemos usar esse nome porque ele não possui um sign ificado em seu ap licativo. Já que você está desenvolvendo um programa que trabalhará com arqu ivos, renome ie o form ulário como fnnFi 1er, o que deve ser feito em duas etapas : I. Renomeie o arq uivo dando um clique com o botão 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 botão di reito do mouse no novo formu lário 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 seção Design das propriedades) de Fonnl para fnnF i 1e r. É melhor fa-

228

Dia 9

zer isso antes que qualquer cod ificação seja iniciada, evitando situações em que já tenha escrito um código que se refi ra a Form1. Neste ponto, observe que o título do formu lário ainda será Form l, e não frrnFi ler como você esperava. Isso acontece porque ele não está associado ao nome do formu lário, mas o IDE usa esse título como padrão na criação. Acesse a janela de propriedades do formulário novamente e encontre a propriedade Text, que representa o título do formulár io. Alterc-o para o que desejar Fi 1er ficaria bom -, e o verá ser exib ido conforme o pretend ido.

Adicionando Controles ao Formulário
Antes que um formulário possa ler alguma ut ilidade, você precisa inserir controles nele . Todos os controles embut idos nos formu lários Windows estão dis poníveis por meio dajanela Toolbox. Exiba-a na tela e localize a seção Windows Fonns (veja a Figura 9.3).

FIGURA 9 .3

A seção Willdows Forms de Toolho.>:
fornece lima grande

I'a/"iedade de cOIl/foles para sellsformlllârios.

A l.beI
~ &.,t!M

A"''''''
~M!1rIoIenJ

[Obi ro.!So>:

d

" """'" R..wr......,
r.
GlOW6ox

I

QI Plct..e8ox

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

O,'''

l!l1 ComboIIo •

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

• " lktl'low

Nessa seção de Toolbox, você encontrará vários controles, mas por enquanto só precisaremos dos botões e caixas de texto. Adicione um controle ao formu lário dando um clique duplo nele (o que adiciona o controle ao canto superior esquerdo do formulário) , dando um clique e arrastando-o para o form ulário, ou selec ionando O contro le (dê um clique e solte) e, em seguida, dando um clique e arrastando o mouse no fonnulário para demarcar o local desejado. Qualquer desses métodos produzirá o mesmo resultado: o controle será inserido no formulá rio. Empregando um dos métodos que acabaram de ser descritos, adicione três botões, dois títulos e duas caixas de texto ao formu lário. Organize os controles conforme o layout mostrado na Figura 9.4, empregando a propriedade Text dos botões e títu los para tornar a interface do formulário igual à da figura.

Desenvo lve ndo uma Interface com o Usuário com os Formulári os Windows

229
"!:l EI

FIGURA

9.4

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

~

Uma maneira possível

de orgal1i=al" a iII/e/face no aplicatil'o
de exemplo.

_

•• _

•• __ _

•. _ .. _ _

•• x

..

Nomeando Seus Controles
Antes de criar um mani pulador de eventos, renomeie todos os nomes-padrão 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 convenção de nomeação. Veja a seguir minhas sugestões para esses controles, com base na convenção de nomeação que tenho usado (e muitas outras pessoas também) 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 botões. No Visual Basic 6.0 e em versões anteriores, os botões eram chamados de boiões de comando (em vez de apenas ' botão' como no Visual Basic .NET), portanto, muitas pessoas usavam o prefixo cmd quando os nomeavam. • lblSource e lblOestination para os títulos. Renomear um controle é igua l a fazê-l o com um formulário: selecione o controle, acesse suas propriedades e, em seguida, altere a propriedade (Name). Renomeie todos os controles antes de passar para a próxima parte do exemplo.

Manipulação de Eventos
Para programar uma interface com o usuário, você precisa entender o conceito de eventos e programação dirigida a eventos. Sempre que o usuário executa uma ação, como dar um clique em um botão ou digitar um valor na caixa de texto, elaé chamada de evenfQ. Se quisermos ter um código 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á fácil criar um manipulador de eventos para um de seus controles. Um evento comum para o qual pretendemos ter um cód igo é, por exemplo, o clique em um botão de seu formulário. Essa ação é chamada evento Cl ick de um botão, e pode-se adic ionar ou editar o código associado a esse evento dando um cl ique dup lo no botão. Você será enviado para a janela de edição de cód igos e a uma nova sub-rotina chamada <nome do botão> Click (veja a Listagem 9.1). O nome da rotina não é muito impOltante, mas é o formato-padrão que o IDE uti liza. Dê um clique duplo no bOião Copy para passar para o código apropriado. Observe que se não tivesse renomeado o botão, 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 código que você inserir nessa rotina será executado quando o usuário der um clique no botão. Neste exemplo, adicionaremos um código a todos os botões (btnCopy, btnMove e btnDelete), mas teremos de começar com um, portanto, dê um clique duplo em btnCopy e acesse o código associado aele. Nesse manipu lador de eventos, queremos adic ionar um código 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 espaço de nome System. 10. Esse espaço de nomejá foi referenciado em seu projeto porque faz parte de System.DLL, mas podemos tornar seu código muito mais simples de ler e digitar se adicionarmos uma instrução Imports System.lO no início do código de seu formu lário. Depois que a instrução for inserida, você poderá referenciar os objetos desse espaço de nome sem ter de incluir a referência completa. Para obter uma cópia do arquivo, podemos usar o método estático Copy da classe System. lO . Fi 1e, mas antes precisamos dos nomes dos arquivos de origem e de destino. Para acessar o conteúdo de uma caixa de texto, use sua propriedade Text, referindo-se ao objeto específico através de seu nome. LISTAGEM 9.2 Copiando Arquivos por Meio dos Métodos Estãticos 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 Usuário com os Formulários Windows

231

ANÁLISE

Com os valores que você precisa annazenados em variáveis alfanuméricas, a cópia efetiva do arqu ivo pode ocorrer. Já que Copy é um mêtodo estát ico da classe Fi le, não é necessário criar uma instância; basta chamar Fi 1e . Copy. No entanto, só essa linha (linha 6 da Listagem 9.2) não representa todo o processo, porque um tratamento apropriado de erros deve ser ad icionado. No caso de uma cópia de arquivo, muitos erros diferentes poderiam ocorrer, desde 'o arquivo de destino não ex iste' até 'não há espaço suficiente em disco'. Sempre que um erro acontecer, poderemos apenas comunicar ao usuário usando o método estát ico Show da classe MessageBox. Essa classe, quejá foi em pregada neste livro, faz parte do espaço de nome System. Wi ndows . Fonns e é uma maneira rápida e fácil de inserir uma caixa de diálogo. A Listagem 9.3 fornece um exemplo da utilização do método MessageBox. Show em reposta a urna exceção. U sando a Classe MessageBox para E xibir um Erro

LISTAGEM 9.3

1 Private Sub btnCopy_Click(ByVal sender As System .Object, 2 ByVal e As System.Even tA rgs) Hand1es btnCopy.Click 3 Oi m sSource As String 4 Oim sOestination As String 5 sSource = txtSource.Text() 6 sOestination = txtOestination.Text() 7 Try 8 Fi1e . Copy(sSource. sOestinat ion) 9 Catch ob j Exception As Exception 10 MessageBox.Show(objException. Me ssage) 11 End Try 12 End Sub
,

Criando Vários Manipuladores de Eventos para um Unico Evento
A parte importante da rotina do manipulador de eventos não é seu nome, btnCopy Cl i ck. mas Handl es btnCopy C1i ck que fo i adicionada no fina l da declaração. Essa instrução informa ao Visual Basic .NET que essa rotina é o manipulador desse evento. Diferente das versões anteriores do Visual Basic, que usavam apenas o nome da rotina para associar o código a eventos específicos, no Visual Basic .NET é possível ter um único procedimento manipulando múltiplos eventos ou só um evento com vários manipuladores. Copie toda a rotina btnCopy C1 i ck e a renomeie como CopyCl i ck, deixando a mesma lista de parâmetros e ainda usando Handl es btnCopy. C1 i ck. A identidade do procedimento (que é composta de sua li sta de parâmetros 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 código pode ser qualquer outro. Agora, altere o código desse segundo procedimento para que apenas exiba urna mensagem em vez de realizar todo o trabalho de cópia do arquivo (veja a Listagem 9.4). Tente executar seu projeto e dê um clique no

Dia 9

botão Copy. Os dois manipuladores de eventos serão chamados, fazendo a cópia do arquivo e exibindo a caixa de diálogo com a mensagem.
LISTAGEM

9.4

A Instruçao Handles Vincula uma Rotina a um Evento Específi 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 botões.

Encontrando Objetos e Eventos por Meio do Editor de Códigos
Em vez de voltar àjanela do projeto e dar um clique duplo em cada um dos outros dois botões, você pode passar para a roti na de manipulação do evento C1 i ck diretamente na janela do cód igo. Selecione o nome do objeto (btnMove, por exemplo) na prim eira lista suspensa (lado esquerdo) acima do editor de códigos 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 métodos podem ser usados. O código dos botões Move e Delele empregarão os métodos estáticos correspondentes do objelo Fi 1e. A Listagem 9.5 mostra uma mane ira com a qual esses do is botões poderiam ser codificados.
LISTAGEM

9.5

Transferi nd o e Excluindo Arquivos por Meio dos Métodos Estãticos 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 Usuário com os Formulári os Windows

233

Múltiplos Eventos com um Manipulador
Como alternativa, você pode mani pular os três eventos C1 i ck por meio de um procedimento, ai· terando a instrução Handl es para que inclua todos eles. Apenas a declaração dessa rotina de manipulação de eventos é mostrada na Listagem 9.6; os detalhes foram deixados para os exercíc ios desta lição.
LISTAGEM

9.6

Usando a Palavra -C have Hand1es para Vin cula r Vários Eventos a um Ú nico Proced imento ou Vários 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 restrição àq uantidade de eventos que você pode man ipular com apenas uma roti na é que todos têm de em pregar o mesmo conjunto de parâmetros. O evento Cl ick de um botão, por . exemplo, recebe dois parâmetros (System Object e System. EventArgs), enq uanto o evento ChangeUICues do mesmo botão recebe parâmetros diferentes (System.Object e System.Windows. forms.UICuesEventArgs) . Portanto, os dois não poderi am ser mani pulados por uma ún ica rotina. A fina li dade desses parâmetros é fornecer infonnações sobre oevento a seu manipu lador, porém alguns eventos passam informações de tipos diferentes das de outros.

Mais Informações sobre os Controles
O exemplo no qual você acabou de trabalhar fez com que adicionasse caixas de texto, títulos e botões a um fonnulário novo, mas muitos outros controles estão disponíveis.

A seguir encontramos uma lista com vários dos controles embutidos mais freqlientemente usados, e uma descrição breve: • labe l /li nk label Estes doi s controles proporcionam uma maneira de inse rir textos estáticos (não editáve is) em um formulário. O controle lin k lahel adiciona alguns recursos complementares, que podem fazer com que uma parte ou todo o seu texto se pareça com um link HTML e possua um evento extra (li nkCl i cked) para ind icar quando um usuário deu um cli que no trecho do hiperlink contido no nome. • Sutton O botão-pad rão, com bem mais recursos do que possuía em versões anteriores do Visual Basic. Com as propriedades do botão, você pode adicionar uma fi gura, alterar o layout do texto e da fi gura, configurar o título e muito mai s. • Text Sox Fornece uma área para inserção de texto em fo rmulários e dá suporte a uma ed ição básica . Pode ter várias linhas se a propriedade Mu I ti I i ne for configurada com True e disponibiliza um menu de atal ho-padrão (com um clique no botão direito do mouse) que dá ao usuário o recurso de recortar/copiar/colar.

234

Dia9 e Context Menu Embora não estejam juntos na Toolbox, esses dois controles s<1o usados na criaç<1o de sistemas com menus para sua janela. O Dia 16, "Formulários Windows Avançados" detalhará como constmir menus para seus sistemas usando esses dois cOlltf()les.

Mai n Menu

Estes do is contro les são usados para exibir e inserir valores simpl es si m/não ou verdadeiro/falso. Em geral são empregados para mostrar urna Iista de opções que devem ser ati vadas ou desativadas, mas a diferença entre eles está em corno manipulam a se leção de outro controle do mesmo tipo dentro de seu grupo. Em um grupo de botões de opção, a intenção é que apenas um deles seja ativado por vez. Por outro lado, várias caixas de se leção 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 gráficos.
Check Box/Radio Button

Há muitos outros, mas todos funcionam em essência da mesma maneira. Você os insere em seu formulário, mani pula suas propriedades por meio de código ou da janela Properties e escreve um cód igo para manipular seus eventos. Embora não tenha a intenção de abordar cada control e individualrnente, detalharei o uso de dois deles a título de demonstração.

Criando Grupos de Botões de Opção
Corno já mencionei, os botões de opç<1o e as caixas de seleção s<1o usados para representar as configurações que podem ser at ivadas ou desat ivadas, mas os dois tipos de contro le apresentam uma diferença importante. Os botões de opção foram proj etados para ser usados apenas em grupos de dois ou mais, e apenas um botão do grupo pode ser selecionado. Dar um cl ique em um botão de opção faz com que ele seja selecionado e, automaticamente, desat iva o botão at ivado antes. As caixas de seleção, por outro lado, também são ativadas e desativadas por meio de um clique, mas uma quantidade aleatória 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 seleção seriam adequadas para uma pergunta em que a resposta fosse elaborada como "Selecione todas as respostas corretas", enquanto os botões de opção só serviriam em perguntas do tipo "Se lecione a resposta mai s apropriada". Para criar um grupo de botões de opção, primeiro é preciso gerar um novo fo rmulário, porque o anterior, fi 1er, já está bem che io. Com o projeto que contém fi 1er aberto na janela Solution Explorer, dê um clique nele com o botão direito do mouse, selecione as opções Add e Add Windows Form no menu que aparecerá, e digite um nome para seu novo formulário na caixa de diálogo resu ltante (você poderia digitar Radio uttons, por exemplo). Dê um cl ique em OK para adicionar esse formulár io novo ao projeto atual. Agora, no fo rmulário recém-criado, use a Toolbox para adicionar um controle Group Box. Esse controle, que possui uma aparência retangular com um título e bordas de aparência bem definida, é usado na criação de grupos e contém outros controles. Mova e redimensione a caixa de modo que ocupe a tela quase toda. Para criar um conjunto de botões de opção, só temos de começar a adicioná-los a essa caixa de grupo. Insira quatro

~ .5).. eom... isso é determinado pelo fa to de que foram inseridos na mesma caixa de grupo.. General) e se chama Startup Object.'e' J . se você executar o projeto. No momento.. r ~.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. I"Ocê pode COII/rolar I'árias COI!figll/"(U. Para alterar isso a fim de que seu novo fonn ll lário seja executado em vez do primei ro.. :."'" " " ...6 VIII g/"llpo de balões de opçlio é lili/a FIGURA II/aneiro excelellle de permilir que O IIsuário escolha /fil/a opç(io entre I·árias. que se encontra na j anela Sollltion Exp lorer (do mesmo modo como quando adicionou um arquivo anteriormente). Agora.. O valor que precisamos al terar está na pri meira pági na (Common Properties. e le deve ter o valor fnnFi ler (o nome do primeiro formulário deste projeto). Isso abri rá um caixa de diálogo grande contendo várias opções e configurações (veja a Figura 9.5 Usando a caixa de diálogo das propriedades do projelo. seu novo form ul ário (com seus quatro botões de opção) será exibido (veja a Figura 9.6)....""""_..001. ao ser criado.. dê um cli que com o botão d ireito do mouse no projeto... e selecione Properties no menu de atalho. 9.·õeS. será executado quando o projeto for processado. incluindo O Slorlup Objecl.. ou outros cód igos. Não é preciso fazer nada mais com eles para que ajam como um grupo. -. A confi guração de Startup Object determina qual dos fo rm ulários.. seu novo formulário não apareceria porque. Se você executasse seu projeto neste momento. Altere-o para RadioButtons ou para o nome que deu ao formulário que ad icionou por último. o projeto é con fi g urado para exibir o pri meiro fo rmulário. FIGURA 9.

Checked Then sSelected" "RadioButtonl" Elself RadioButton2 . Insira esse código no evento C1 i ck de btnT es t e execute seu projeto para testá~ l o . Nesse formu lário.7 demonstra como poderíamos verificar que conjunto de botões de opção foi se lec ionado e exibi r o valor apropriado usando MessageBox.Checked Then sSe1ected = "RadioButton3" ElseI f RadioButton4. o código de teste ainda funcionaria.Checked Then sSe lected " "RadioButton4" End If 15 Mes sageBox . o título para "T es t" e. É possível empregar a propriedade Checked para saber se um botão de opção foi se lecionado usando um código. 2 ByVal e As System. desse um clique nos botões Copy ou Move. tente dar um clique nos botões de opção e observe que apenas um pode ser selecionado. dê um clique duplo nele para passar à visual ização do código de seu evento~padrão (C1 i ck). você pode adicionar um scri pt de teste a seu novo forrnulário. Adicione um botão qua l~ quer da Toolbox. um erro ocor~ reria. altere seu nome para btnT est. Para tentar acessar esses controles por meio de código. poderia sele~ cionar quantas delas desejasse ao mesmo tempo (ou mesmo nenhuma). Um exemplo mais útil de uma caixa de se leção pode ser criado pela alteração do primeiro rormll~ lário que você gerou (Fi 1er).Object. (presumindo que você desse às caixas de seleção o mesmo nome dos botões de opção ou alterasse o código incluindo nomes novos) porque as caixas de seleção também fornecem a propriedade Checked.Dia 9 Depo is que estiverem ativos e funcionando. O cód igo da Li sta~ gem 9. em seguida.EventArgs) Hand1es btnTest.Show(sSelected .Click Dim sSe1ected As String 3 4 5 6 7 8 9 10 11 12 13 14 If RadioButtonl.7 Usando Botões de Opção quando apenas uma Opção Puder Ser Se l ecionada 1 Private Sub btnTest_C1ick(ByVal sender As System. se o usuário inserisse o nome de um arquivo de destino que já existisse e. em seguida. No entanto. Como alternativa. "Se1ected Radio Button") 16 End Sub 17 End Class Adicionando uma Caixa de Seleção ao Exemplo de Filer Se você substituísse os botões de opção do exemplo anterior por caixas de seleção. o código poderia apenas substituir o arquivo existente sempre que a l ~ . Checked Then sSe1ected " "RadioButton2" E1seIf RadioButton3. LISTAGEM 9. Feche~o (utilizan~ do o botão X do canto superior direito) e vo lte ao seu modo estrutura.

8 mostra a alteração em btn Cl i ck. chkOverwrite. Mude o títul o para 'Overwrite Exist ing' alterando a propriedade Text na janela Properties. ByVal e As System .Message) 11 End Try 12 End Sub Manipular essa mesma situação no caso do comando Move é um pouco mais complicado. sem exibir nenhuma mensagem de erro.Copy(sSource. que manipula a nova cai xa de seleção. Para começar. LISTAGEM 9.Show(objException. sDest i nation. então.Checked) 9 Catch objExcept i on As Exception 10 MessageBox. você também pode configurar o padrão ou o valor inicial da caixa de seleção definindo a propriedade Checked na janela Properties. A Listagem 9.Text() 7 Try 8 File. A Listagem 9.9 mostra uma maneira de manipular o evento btnMove Cl ick. acesse o primeiro forrnu lário (Fi ler) no modo estrutura e. EventArgs) Ha ndles btnMove .8 Adicionando um Caixa de Se l eção a 1 Private Sub btnCopy_Click(ByVal sender As System. 2 ByVa l e As System.Object.Desenvolvendo uma Interface com o Usuário com os Formulários Windows 237 gum fosse encontrado. No momento. Movao novo controle para a posição abaixo do campo para o destino e. Text() 6 sDestination = txtDest i nation. Neste ponto. você terá de gerar uma resposta ao erro de arqu ivo ex istente e abortar a tentativa de transferência ou excluiro arquivo inadequado. em seguida.Click Dim sSource As String . a chamada ao comando Copy e a chamada ao comando Move usam apenas dois parâmetros (origem e destino).9 Ma nipu l ando o Evento btnMove Cl ick 1 2 3 Private Sub btnMove_Click(ByVal sender As System. Você pode adicionar uma caixa de seleção a esse formulário que dê suporte à ativação e desativação desse recurso de subst itu ição automática.EventArgs) Handles btnCopy.C l ick 3 D m sSource As String i 4 Dim sOestination As Stri ng 5 sSource = txtSource . LISTAGEM 9. adicione um novo controle Check Box da caixa de ferramentas (Toolbox). dê um cli que duplo no botão Copy para passar à edição do código. Serú preciso fazer uma pequena alteração tanto em btnCopy_Cl i ck quanto em btnMove_Cl i ck antes que a caixa de seleção possa ter algum efeito real. Em vez de apenas alterar um parâmetro. poderemos controlar como um arquivo existente será manipulado.Object . mas Copy dá suporte a uma opção 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 seleção.

O processo geral para o uso dessas propriedades e eventos é config ll~ .Dia 9 LISTAGEM 9 . mesmo quando esse número era descartado por eu ter dado um clique no botão Cancel! Vários aspectos das classes dos fonnulá rios Windows funcionam em conjunto para fornecer essa validação: a propriedade CausesVa 1i dat ion e os eventos Va 1ida ti ng jVa 1i dated. Dado um formulári o com vários campos de entrada (caixas de seleção. quando ele der um clique em OK . quando as informações forem inse~ ridas no sistema. é recomendável que elas passem por alguma forma de validação (verificação de datas váli das. Portanto. O . que exis~ tem em todos os controles. Quando o usuário der um clique no botão Cancel . quantidade correta de dígitos nos números telefônicos e ass im por diante).Text {) sDestination = txtDestination . Trabalhei com muitos aplicativos que me forçavam a digitar um número telefOnico adequado antes que me deixassem sair de uma caixa de diálogo indesejáve l. Ex ists(sSource)Then If File. o arquivo de destino jã existe") Return End If End If File . ou o que for apropriado em seu apli cat ivo) evitará o surgimento de problemas em locais onde ele tiver de inserir dados válidos antes que você permita que encerre seu aplicativo. Pelo menos um desses botões ind icará que o usuário já con~ siderou concluída a digitação de dados.Show(UTransferência abortada .Delete(sDestination) El se MessageBox.NET Framework fornec e um modelo para codificação dessa validação. é provável que também haja um botão ou dois. Text{) If File. não haverá motivo para se preocupar com a va~ lidação dos dados porque ele desejará cancelar o formu lário .Exists(sDestination)Then If chkOverwrite. por exemplo).Move(sSource. as janelas e caixas de diálogo são em geral usadas para per~ mitir a entrada de dados em seu aplicativo. verificando se está tudo correto nos campos. você deseja~ rá que o código de val idação seja executado. Com freqüência. Verifi car a validade dos dados apenas quando o usuário dá um cl ique em OK (ou Save.9 Manipu l ando o Evento btnMove Cl ick (continuação) 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Dim sDestination As String sSource = txtSource.Checked lhen File. sDestination) End If End Sub Validação de Entradas Como o nome 'fonnulário' sugere.

mas não em Cance l.<leNrov. Também o fez no botão OK . o evento Va1i dat.- [9E052 eSltÍ dispollírel para dOlVllload /lO site da Web desle Iil'/"o. li 1111/ exemplo de 1/111 FIGURA ~Add'M' S~eel: EJ formlllário de elllrada de dados e 1". percorreremos as etapas do processo: Você possui um fonn ulário para inserir/editar endereços (veja a Figura 9. o evento Va 1ida ti ng deve verificar o conteúdo de txtS t reet e se cert ificar de que seja válido. deixando-o na caixa de texto txtStreet. O formu lário completo também pode ser descarregado do site deste livro na Web. caixas de combinação e outros) e também em qualquer botão que faça cam que os dados sejam usados ou salvos (OK. sempre que o foco estiver em um controle em que CausesVa 1i dat i on = True. Quando o usuário tentar alternar se u foco para um controle em que Causes Va 1i da t i on = True.". o evento Va 1i dat i ng ainda seria chamado em txtC i ty. botões de opção. e várias caixas de texto para entrada de dados.7 ES/(f caixa de diálogo. insira um código no evento Validating para verificar se um campo é válido. Prev ious ou outros que. Portanto. Next e outros). Isso não depende da direção. por causa da propriedade CausesValidation de txtCi ty.... a tentativa de mover o foco também será anu lada. o que pode ajudar um pouco. projetada para entrada e edição de endereços.Desenvo lve ndo uma Interface com o Usuário com os Formulári os Windows 239 rar CausesVal idation como True (ativado) em todos os controles de entrada efetiva de dados (caixas de texto.. Em botões como Help.~ " '<bR Sl. Continue.f"i . assim. o evento Va 1idati ng de txtStreet é acionado. Ainda está confuso? A Listagem 9. . 9. se o usuário tivesse pressionado Tab ou dado um clique novamente em txtSt reet depois de passar para txtCi ty. Se os dados estiverem corretos (e o evento não for cancelado). 1Ocontém o código de vários eventos de validação para o formulário de endereços (Address Fonn). o evento Va 1i dated de txtStreet será chamado indicando que a va lidação foi bem-suced ida. com um botãoOK e um Cancel. Ele pode cancelar a vai idação se os dados não forem corretos. portanto. Agora. Se os dados não estiverem corretos e o evento for cancelado. você não prec ise saber se os dados são válidos. Isso é um pouco complexo. Cancel. Neste ponto. A segui r. o evento Validating será lançado 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. II C-:eI 1 o foco no momento está na caixa de texto txtStreet. para que você não perca tempo reescrevendo-o.7). então. ng será lançado em todos os controles de edição que tiverem recebido o foco desde a última vez em que um controle com CauseValidation igual a True foi accssado. Save. e o usuário pressiona Tab a fi m de passar para a caixa de texto txtCity. . ao serem cl icados. Você configurou a propriedade CausesVal idation de todas as caixas de texto como True. configure a propriedade CausesValidat i on como False (desativada).

Control) Dim bValidPostalCode As Boolean " False 'Aceite como válido somente o formato de código postal dos EUA/Canadá .ComponentModel. 'Verif ique se txtCountry " Canada . 43 ByVal e As System. Length " 10 Then sPattern " "\d\d\d\d\d-\d\d\d\d" ElseIf sPostalCode.Windows.Tri m. Trim. 'EUA curto 1'1" . sPattern)Then bValidPostalCode " True End If End If If bVal i dPostalCode " False Then e. Fonns.Dia 9 LISTAGEM 9 . Validated. " [ABCEGHJKLMNPRSTVX Y] \d [A -Z] \d [A -Z] \d" End If El se If sPostalCode . 15 16 17 18 19 Dim sPostalCode As String Dim sPattern As String Dim objRegEx As Regex sPostalCode" ctlSender .Validated.CancelEventArgs) Handles txtZip .10 Eventos de Va l idação do fonnulãrio de Endereços 1 2 3 4 5 6 7 8 9 10 11 Private Sub txtZi p_Va lidating(ByVal sender As Object .Length " 5 Then sPattern " "\d\d\d\d\d End If objRegEx . "Código Postal Inválido") End If End Sub II II Private Sub GenericValidated(ByVal sender As Object .EventArgs) _ 44 Handles txtSt reet . ByVal e As System. _ .Rep lace (" ". End If II ") 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 If sPattern <> Then If objRegEx . Length " 6 Then sPa t tern . IsMatch(sPostalCode.SetError(ctlSender. caso contrário pressuponha EUA 'Man i pule a possibilidade de três formatos.Cancel " True errAddress. " ") If txtCountry .Control Dim ctlSender As Control ctlSender " CType{sender. EUA longo Cdn AIAIAI 12 13 14 "'*'-"". ToUpper " "CANADA" Then If sPostalCode . Text.. txtCity. Validating 'converta o parâmetro sender em um controle da cl asse System. Text. IsM atch(sPostalCode.

que será discutido ainda nesta lição.Fonns.forms. SetE rror(ctl Sender . Usando a Classe Message ox Uma caixa de diálogo é um tipo especial de form ulário exibido de maneira restritiva. Control) If ctlSender . não é preciso algo complexo. se existir algum 51 errAddress. txtZip .ComponentModel. os recursos de val idação da platafonna .NET tornam fácil a criação de form ul ários para entrada de dados. Text. devem ser utilizadas apenas quando você tiver de se comunicar de imediato com o usuário. o que sign ifica que o usuário prec isa lidar com ela antes de poder interagi r com qualquer outra parte do aplicat ivo. Validated. só queremos formular uma pergunta si mples (cuja resposta será sim/não ou OK/cancele) ou exibir uma mensagem para o usuário. " ") 52 End Sub 45 ° 53 Pr ivate Sub GenericNotEmpty(ByVal sender As Object. Validating .Cancel " True errAddress . txtCity . Trim" " " Then e. no entanto.Windows. 57 txtState . Va l i dati ng 54 55 58 59 60 61 62 63 64 65 66 'converta o parâmetro sender em um controle da classe System.CancelEventArgs) 56 Handles txtStreet . Elas não são empregadas na ex ibição de informações de status ou progresso. Set Error (ct 1Sender . 46 txtState . ByVal e As System.Control 48 Dim ctlSender As Control 49 ctlSender " C Type(sender. Em geral.Desenvo lve ndo uma Interface com o Usuário com os Formulári os W in dows 241 liSTAGEM 9.Windows. Val i dated 47 'conve rta o parâmetro sender em um controle da classe System. Você mesmo pode criar caixas de diálogo como se fo ssem qualquer outro formulário Windows. antes de dar continuidade a algum tipo de execução. devido a sua nat ureza restrit iva.Control) 50 'Elimine erro . É aí que a classe MessageBox . e mostrarei como fazer isso da maneira correta mais tarde nesta li ção. Validating . Validated.Control Oim ct lSender As Control ctlSender" CType(sender .10 Eventos de Validação do Formulário de Endereços (continuação) txtCountry . Em geral são usadas para informar algo ao usuário (como um erro) ou obter alguma informação. "Preenchi mento ob ri gatóri o") End If End Sub Quando com binados com o controle ErrorProvi der.

.. legível da direita para a esquerda e certi ficar que a caixa de mensagem apareça apenas na área de trabalho principal do sistema operacional. MessageBoxBut tons . através do qual pode-se configurar a caixa de diálogo da maneira desejada e exibi -Ia. Button2 ou Button3. este parâmetro não é opcional.. como Text . • • • . este parâmetro detennina a barra de título que será mostrada por MessageBox. Essa classe é usada para exibir textos em lima caixa de diálogo si mples e um conjunto de botões entre os quais o usuário poderá escolher sua resposta (veja a Fig ura 9 . todas as nove opções são convertidas em uma das quatro fi guras. Este parâmetro pode ser configurado como Button1.AbortRetry Ignore fará a caixa de diálogo exibir os botões Abort. Todos os parâmetros que podem ser usados são listados a seguir.. Messa geBoxButtons. Não é possíve l criar lima instância dessa classe. este parâmetro controla os botões mostrados na caixa de mensagens. Show. ela será tratada como se ele tivesse dado um clique no botão-padrão. Pode ser qualquer um dos nove valores. Caption Outra string. se houver alguma. Retrye Ignore. Defau l tButton Quando você tiver ma is de um botão na caixa de diálogo. As opções incluem tornar o texto justificado à direita. Icon Controla qual figura.). com uma breve descrição de sua final idade: • • • Text Representando a mensagem exibida por MessageBox.. todas as sobreposições de Show o inclucm. tudo em lima só chamada. mas ela expõe apenas um método estát ico. será exibida junto à mensagem.11> _" "" é 1/11/0 jerromellfo que pode exibir 1/1110 mensagem jl/mo fi I'árias combinações de boiões.8 IÍtil A classe MessageBox . Buttons Aceitando um dos valores possíveis enumerados. Esse método poss ui 12 tipos de sobrepos ições para dar suporte a várias combinações de parâmetros. Options Estas opções controlam a aparência da caixa de mensagem e serão especialmentc úteis quando seu apl icativo estiver localizado em outro país/região. portanto.242 Dia 9 entra em cena. o que conduzirá a um dos botões apropriados. mas você pode fornecer apenas os valores que tiver. YesNo exibe os botões Yes e No e assim por diante. Parâmetros o método Shaw aceita sete parâmetros diferentes. mas as versões atuais dos sistemas operacionais só fornecem fi guras para quatro deles e. Se o usuário press ionar Return ou Enter quando a ca ixa de mensagem (MessageBox) for aberta. só um deles poderá ser o padrão. FIGURA 9.

Em geral. a MessageBox . MessageBoxButtons. LISTAGEM 9. em Seguida. FIGURA 9.11 Usando a Classe MessageBox para Fonnul ar Perguntas Simples e. Show( ) e as caixas de diálogo resultantes. A Listagem 9. 1 I mostra como formu lar uma pergunta ao usuário empregando a classe MessageBox e duas maneiras de manipular o resultado.9 e 9. desejará saber em qual o usuário deu um clique (pressupondo que você tenha exibido algo mais além de um botão OK).Show("O que deseja fazer?".10 Uma caixa de mensagem IIIO/S personali::ada.EventArgs) H l es btnTest. 1O mostram alguns exemp los de chamadas. mas está disponível.Retry lhen 8 9 10 'repita El se 'cancele . ou a cham ada do método pode ser uti lizada diretamente em uma expressão ou instrução cond icional. 5 "Exemplo" . especificaI/do o texto.Desenvo lvendo uma Interface com o Usuário com os Formulári os Windows 243 • OwnerWindow Este parâmetro especifica uma janela dentro de seu aplicativo na qual a caixa de mensagem (MessageBox) deve aparecer. 2 ByVal e As System. que pode ser armazenado em uma variável. As Figuras 9. Essa informação é retornada pelo método Show como um valor Di aI ogResult. esta funcionalidade não é necessária. chamada apenas com o lexlo da mensagem (o míl/imo).Click and 3 Oim drResult As DialogResult 4 drResult = M essageBox. o líf/llo e os parâmetrus dos botões.RetryCancel) 1 6 7 If drResult = OialogResult. Obtendo Resultados Depois que você tiver escol hi do os botões que quer exibi r.Object .9 A caixa de mellsagem-padrcio. Atuar sobre a Resposta Private Sub btnTest_Cl ick(ByVal sender As System . I <T I FIGURA 9 .

"Confirm Copy" . executando ou cancelando a ação conforme a resposta.EventArgs) Hand l es btnCopy . em Segu ida. Esse formulár io.Show para Sol i ci tar Confi rmação 1 Private Sub btnCopy_Click(ByVal sender As System. transferir e excluir arquivos.Exi sts(sSou r ce) Then Dim sConfirm As String sConfinn "String. M essageBoxButtons. Cancel 20 'cancele 21 Case E1 se 22 'hrrrn . AbortRet ry Ignore) Case OialogResult .Object . sOestination) If MessageBox. _ 2 ByVal e As System. alteradas para incl uir a etapa de confirmação. você pode adicionar uma funcional idade complementar ao fonn ulário Fi 1er origina l. .Text() 6 ) 8 9 If File .12 mostra as rot inas dos três eventos. sSource . Text() sOestination ~ txtOestination.Retry 18 'repita 19 Case Oi alogResult . mesmo quando é solici tada a excl usão do arq uivo completo. A Li stagem 9. que penn ite copiar. poderíamos usar urna caixa de mensagem para exibir a confi rmação e botões VeslNo. 14 "Processo Longo".Yes N _ o.12 Usando o M êtodo MessageBox .Abort 15 16 'abor te 17 Case OialogResult.Format("Está certo de que deseja copiar lO} em III?".11 11 Usando a Classe MessageBox para Formular Perguntas Simples e..Show(sConfirm.Show("Algo invá l ido oco rreu". 10 11 12 13 I' 15 16 . A fim de adicionar esse recurso ao fo rmulário Fi I er. Cl ick 3 Dim sSou r ce As String 4 Dim sDest inat i on As String 5 sSource ~ txtSou rc e .Dia 9 LISTAGEM 9. MessageBoxBu t tons. não apresenta nenhuma mensagem de confirmação (' Está certo de que deseja excluir c: \test . txt?' ). LISTAGEM 9. Atuar sobre a Resposta (continuação) End If 12 13 Select Case MessageBox. como cheguei aqui? 23 End Select 24 End Sub Como demonstração do uso de MessageBox em um sistema real.

Message) 24 End Try 25 End If 26 End If 27 End Sub 28 29 30 31 32 33 34 35 36 37 38 39 40 Private Sub btnMove_C lick(ByVa l sender As System.Exists(sSource)Then Dim sConfirm As String sConf i rm = String.Show{objException. "Confirm Move".Oe1ete(sOestination) E1 se MessageBox .Show(sConf irm.Yes Then 20 Try 21 File . sDestination) If MessageBox. chkOverwrite . Copy(sSource. Button2) = DialogResult . M essageBoxIcon.EventArgs) Ha nd les btnMove._ MessageBoxDefaultButton .Checked Then Fil e. YesNo. MessageBoxButtons .Question.Text() If Fi le. arquivo de destino já existe") Return End If End If File.Desenvo lve ndo um a Interface com o Usuário com os Formulári os Windows 245 LISTAGEM9.Text() sDestination = txtDestination.Exists(sOestination)Then If chkOverwr ite .Object. M ove(sSource.Clic k Dim sSource As String Dim sDestination As String sSource = txtSource.Button 2) DialogResult.Show( "Transferência abortada. Yes Then If File. sSource.Format(_ "Está certo de que dese j a transferir {O} para (I}?" . ByVal e As System. sDestination. sD i nation) est End I f End I f 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 59 58 End Sub . _ Mes sageBoxDefaultButton.12 17 18 19 Us ando o Método MessageBox .Show para Sol i ci tar Confi rmação (continuação) = Mes sageBoxIcon.Question . Chec ked) 22 Catch objException As Except ion 23 MessageBox .

Button2) : DialogResult. os controles ocultos tam bém podiam ser inseridos nos formu lários. a plataforma . No entanto.Show(sConfi rm . Esse é o tipo padrão de controle com o qual você trabalhará.NET encontramos uma maneira muito melhor de manipular esse tipo de controle.12 Usando o Método MessageBox. MessageBoxlcon.Show para Solicitar Confirmação (continuação) 60 Private Sub btnDelete_Click(ByVal sender As Object .Click 62 Dim sSource As String 63 sSource: txtSource . posicionando-os cm uma área separada abaixo da do projeto do fo rmul ário (veja a Figura 9.NET. clicar e exc lu í-los. Você ainda poderá arrastar. MessageBoxButtons. Text() 64 65 66 67 68 69 70 If File. _ MessageBoxDefaultButton. Antes do Visual Basic . mas ficando totalmente invisíveis no tempo de execução. sSource) If MessageBox.Question._ "Confi rm Oel ete". 11 ).Dia 9 LISTAGEM 9 . exceto por não possuírem lima interface visível no tempo de execução. complicando a interface do tempo de projeto. 61 ByVal e As System.Format( "Está certo de que deseja excluir {DI?" .NET também apresenta controles que são iguais aos habituais em quase tudo. . métodos e eventos e foram projetados como um a maneira modular fác il de adicionar recursos específicos a um formulário. porém sem que interfiram na vis uali zação do projeto de seu form ulário. YesNo. selecionar.Exists(sSource)Then Dim sConfirm As String sConfirm: String. Esses controles também têm propriedades. No Visual Studio .EventArgs) Handles btnOelete.Oelete(sSource) 77 End If 78 End If 79 End Sub 76 Controles Ocultos Todos os controles usados nesta Iição até agora estavam visíveis quando seu proj eto foi executado.Yes Then 71 72 73 74 75 File.

Desenvo lve ndo uma Interface com o Usuário com os Formulários Windows 247 FIGURA 9.um ap licativo Windows. Um formulário em branco será adicionado ao projeto. O uso do controle Timer envolve apenas algumas etapas: 1.1000 ms são iguai s a I s) que quer entre os eventos. REI serem confundidos com elemell/os da illlelface visÍrel. terá de configurar suas propriedades. Notifylcon. Há vários desses controles de tem po de projeto. mas abordare i nesta seção a lg uns dos mai s usados : Timer. Depois que você ad icionar esse controle a seu formul ário. Timer o controle Timer foi projetado para permit ir que os códigos sejam exec utados a certos intervalos com base em períodos de tempo. para evitar ~''''' ' . Se o controle estiver ativado.. os co/1/ro/es IXIlIIOS eSlão posicionados em lima área especial do projelo. NET. ele acionará automat icamente seu evento Ti ck a intelvalos reg ulares. Você pode testar esse controle em um projeto de s ua autoria seguindo estas etapas : I. e a propriedade Interva 1 com o período de tempo (em mili ssegundos . . Crie um novo projeto vazio . você poderá executar a tarefa que desejar de maneira programada. 2. Fonnl. ErrorProvider e os controles de caixas de d iálogo. Ad icione seu código ao evento Tick (dê um clique duplo no controle Timer para acessar rapidamente o mani pulador dele). Pela inserção de um código no manipulador do evento Ti ck.11 No Visual Sludio . Certifi que-se de estar visualizando o modo estrutura desse formulá rio vazio. Isso é tudo o que sc tcm a fazer para que o cód igo inserido no manipulador do evento Tick seja executado uma vez a cada valor de Interval em mi lissegundos. configure Enabled como True para indicar que o deseja ativo.

Esse pode não ser o me lhor local para posicionar algum aplicativo.248 Dia 9 2. .EventArgs) Handles Time r l . Adicione o código mostrado na Listagem 9. Quando o projeto for executado. a1 para ver como essa propriedade afeta o acionamento do evento Ti ck. Arraste um controle Timer de Toolbox (no Windows Farms) para o formulário. 5. e seu título renetirá a hora atual até os segundos. 4. LISTAGEM 9. Notifylcon Quando um programa precisa ser executado continuamente e é necessário algum tipo de noti fi· cação visual. Para que lique um pouco mais divertido. e Interval igual a 1000 (1 segundo). Dê um clique duplo no controle Timer para passar à visualização do código. certificando·se de que ele será o iniciado (dê um clique com o botão direito do mouse sobre o projeto no Solution Explorer e selecione Set em StartUp Project) caso tenha mais de um projeto aberto. Text = DateTlme. adicione um bo· tão ao formulário e insira essa linha de cód igo em seu evento Cl ick : Timerl. é uma área quejá está muito che ia. 3.13 Código Que Fará com Que o Titulo do Formulário Aja como um Relógio 1 Private Sub Timerl_Ti ck{SyVal sender As System. o formulário deverá aparecer. que deve mostrar a você os valores de Enab 1ed e Interval que determinam o comportamento do período de tempo. 2 ByVal e As System. e acesse a rotina de manipu lação do evento Tid.Enabled Tente executar o projeto novamente c dê um cl ique no botão algumas vezes para ver o que acontece.Object. Faça o teste com valores diferentes em I nter . . um método comum é inserir um ícone na bandeja do sistema ou área da notificaçào à extrema direita da barra de tarefas. Configure Enabled corno True. visualize a janela de propriedades.Enabled = Not Timerl. mas é útil para certos utilitários com finalidades especiais.Tick 3 4 5 Me . em seguida.ToLongTimeString() 6 End Sub Execute o projeto (pressionando F5 ou selecionando Start no menu Debug). Ele será adicionado como um contro le à área de controles ocultos (que agora aparecerão) com o nome Timerl.Now.13 ao manipu lador do evento Tick. Dê um clique em Timer 1 para selecioná-lo e.

tudo que você precisa fazer é adicionar um controle Not 1fy 1con a seu formu lário e confi gurar suas propriedades. I ~ ~ I ~ I del(los. A caixa de diálogo do exemplo (de entrada/edição de endereços) abordado rapidamente nesta lição (e que pode ser descarregado do site da Web deste livro) usa esse controle oculto em seu código e é urna boa demonstração a ser exam inada.12 Com 11m eOll/role ErrorProvider em seu formulário.~ "- - _f'í. Para usar este controle. que pode ser configurada com qualquer arqu ivo de ícone para controlar o que irá aparecer na área de not ificação .lo de ErrorProv i der con fi g urando-o com uma stri ng vazia : e rrorProviderl.será fácil mostrar aos usuários os erros de elltrada de '" I" 190001 IR_ . 12) que controles de um fo rmulário possuem erros associados a eles. Na verdade. Então. chame o método SetError do controle ErrorProvider: errorProvi der1 . podemos adicionar um controle Contex tMenu ao formu lário e configurar a propriedade ContextMenu de Not i fy1con. "Endereço da rua i nvál i do") Quando o erro tiver sido corrigido.SetError(txtStreet. o controle ErrorProvi der permite que você indique visualmente (veja a Figura 9. Se quisermos que um menu surja quando o us uário der um cl ique com o botão direito do mouse em seu ícone. apenas insira-o em seu fonn ulário e confi gure as propriedades. . a menos que quei ra empregar um ícone diferente. Seja cuidadoso para só usar esse controle quando for apropriado.NET. SetError(txtStreet.NET. Na plataforma . você poderá elim iná. há tantos aplicativos colocando ícones nessa área que foi adicionado ao Windows XP um recurso de oc ultação automát ica! ErrorProvider Outro grande recurso para o projeto de fo rmu lários de entrada de dados. adicionar um ícone à bandeja do sistema envolvia o uso de várias chamadas à APl do Win 32 e uma técnica denominada subclass ificação que poderia tomar instável seu ap li cativo do Visua l Basic.Desenvo lve ndo uma Interface com o Usuário com os Formulários Windows 249 Antes da existência da platafonna . . sempre que quiser indicar que um controle possui um erro associado a ele. A propriedade mais im portante é 1eon. você pode fazer isso com ainda menos trabal ho porque os valores-padrão costumam ser adequados para grande parte dos objetivos. " ") FIGURA 9.

Só agi assim porque esse é um exemplo.lo para que fiq ue encaixado à dire ita e que a caixa Rich Text ocupe todo o formulário. Conduzirei você através do exemplo de um programa que emprega as caixas de diálogo para abrir e sa lvar arqu ivos. apenas para ser conc lusivo. iIn l·"1 Como com os outros controles ocu ltos. mas o formulário completo pode ser descarregado a partir do site deste livro na Web.... 13). fornecerá uma interface que será alterada de modo correto quando o fonnulário for redimensionado ou maximizado. alterar a fonte ou mudar a cor dela. Observe que configurei os controles das caixas de diálogo dentro do procedimento de dar um cli que no bOIão. é possível arrastar qualquer caixa de diálogo para que seja usada em seu formulário ou em uma área de controles ocultos. átjlpO. e também podere i utilizar as de fonte e cor.... FIGURA 9.. Save. FJo. O próprio formulário contém vários controles incluindo lima caixa Rich Text... Além dos controles visíve is. mu ito embora pudesse ter configurado muitas dessas propriedades empregando ajanela de propriedades do controle de caixa de diálogo.. o que é mui to mais adequado do que ter de você mesmo criá· las.R I.. Cada um dos quatro botões usa urna das caixas de diálogo para abrir arquivos. Il . qualquer propriedade de controle que seja a mesma durante toda a existência do formulário deve ser configurada apenas uma vez. Esses controles permitem que sejam usadas várias caixas de diálogo-padrão do Windows em seu programa (veja a Figura 9. que é o que ocorre quando se manipulam as .13 A caixa de diálogo para abertura de arquil'os manipula Ioda a COfllllllicaçüo com o sislemo operacional e o sistema de a/'quil'os. comece a trabalhar com as propriedades dele a fim de configurá-l o para seu aplicativo. também inseri os quatro controles das caixas de diálogo (Open. e configurá.. sem filie você lenha de escrever nel/huIII flo_ flo . salvar.ot . Empregar um controle de painel dessa maneira. quatro botões e um controle de pai nel. !M.250 Dia 9 Controles das Caixas de Diálogo o 1I1timo tipo de controle oculto abordado nesta lição na verdade se refere a todo um grupo de controles que vão de Open e Save às caixas de diálogo de seleção de fontes.. Depois que tiver uma instância do contro le em seu formu lário. que é usado para armazenar os botões. código. Não abordarei os detalhes da configuração desses controles. Font e Color) no formulário. e seu código está listado nas seçõcs a seguir.

Ves Then 8 With dl gOpen 9 .Multi select = Fal se 15 16 If . 14) permite que o us uário se lecione um nome de arq uivo lIsando a caixa de diálogo Open e. Em seguida. sobrepondo.Show("Sobrepor o conteúdo atual?" . a caixa de diálogo Open é e laborada das linhas 8 à 14.InitialOirectory = IO. depois de declararem as variáveis necessárias.Text = trNewFile.FileName 18 If IO .C l ick 3 Dim sNewFile As String 4 Dim trNewFile As System .TextReader 5 If MessageBox . Exists(sNewFile)Then 19 trNewFi l e = New IO .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.Desenvo lvendo uma Interface com o Usuário com os Formulários W in dows 251 propriedades por meio da janela referente a elas. Caixa de Diálogo Open o manipulador de eventos do botão Open (veja a Listagem 9. MessageBoxlcon. txt) I*.Chec kFi leExists = True 12 . Uma caixa de mensagem é usada para fomlular essa questão porque ela resu lta em uma resposta simples YesJNo. 2 ByVa l e As System.File.YesNo. 7 MessageBoxOefau l tButton. E infonnado a caixa de diálogo para que retor- . Filter = "Text files (* .14 Manipulador de Eventos do Botão Open 1 Private Sub btnOpen_Click(ByVal sender As System.Question. o conteúdo atual da caixa de texto.EventArgs) Handles btnOpen.Button2)= OialogResult.ShowOialog()=Di alogResult. MessageBoxButtons.Object. portanto.OK Then 17 sNewFile = . _ 6 "Open New File". Um filtro é configurado para . Agora percorrerei o código que representa cada um dos quatro botões e discutirei como o contro le de caixa de diálogo fo i uti li zado em cada caso. IO.StreamReader(sNewFile) 20 rtfContents. confirmam se o usuário quer carregar um novo arquivo. s iga em frente e sobreponha o conteüdo atual. exibe esse arquivo no controle da caixa Rich Text.CheckPathExists : True 13 . restringir os tipos de arquivo aos somente de texto.GetD i rectoryName(sCurrentFile) 14 .AddExtension = True 11 . LISTAGEM 9. em seguida.txt" 10 . Se o usuário responder Yes.Path.

txtJI*. CheckPathExists " True .15 Us ando as Caixas de Diálogo Internas 1 2 3 Private Sub btnSave_Click{ByVal sender As System . LISTAGEM 9 . a caixa de diálogo Save será necessária. A propriedade MultiSelect também está configurada como False. MessageBoxButtons. 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 "Save Fi le". ByVal e As System. M essageBoxIcon. porque a abertura de arqu ivos é uma situação propensa a fal has devido a privil égios de segurança e o utras razões. Ela faz parte do sistema operacional .StreamWriter sNewFileName " sCurrentFile If MessageBox. tem conhec imento das unidades.Init i alO i rectory " IO.Button2) " DialogResult. comparti lhamentos de arquivos.txt" .OverwritePrompt '" True .Yes Then Wi th di gSave .OefaultExt " "txt" .YesNo . O uso das caixas de d iálogo internas torna seu sistema melhor integrado ao sistema operacional (veja a Listagem 9. Escrever Li ma caixa de diálogo desse tipo seria dificil e precisaríamos de LIma manutenção contínua. CreatePrompt" False 22 . já que os recursos do sistema de arquivos do sistema operacional são a lterados com Otempo. em seguida.GetDirectoryName(sNewFileName) .Path. A linha 16 ex ibe a caixa de diá logo e veri fi ca se o resultado está correto. as linhas 18 à 20 se certificam novamente da existência do arquivo e. pastas. Se eSli ver. Deveriam ser adicionados mais recursos de manipulação de erros aqui se esse fosse um sistema de produção.EventArgs) Handles btnSave . Click Dim sNewFileName As String Dim swDutput As IO. _ MessageBoxOefaultButton. Fi lter" "Text files (* .AddExtension " True .Question . indicando que você deseja que o usuário s6 possa selecionar um arquivo por vez. Check FileExists '" False .15). portanto.252 Dia 9 ne a extcnsãojunlo ao nome do arquivo.Show{"Salvar com um nome diferente de arquivo?" . o carregam em uma única leitura na caixa Rich Text.FlleName " sCurrentFile . 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. Caixa de Diálogo Save Quando você prec isar que o usuário forneça o nome de um arquivo de destino.Object. Unks de atalho e o que o mais o Windows possa lançar ne la.

não são apl j. Depois que o usuário con· firma se deseja salvar o arqu ivo (linha 9). Duas opções interessantes.OK lhen 5 . Overwri tePrompt controla se a caj· xa de diálogo avisará o usuário antes de pennitir que ele salve utilizando o caminho e o nome de um arqu ivo existente. ShowOialog(): DialogResult. tamanhos disponíveis e esti los das fontes da máqu ina de um usuário podem ser um conjunto razoável de informações. txt (lin ha [6). CreatePrompt determina se o usuário deve ser avisado caso tente fazer exa· lamente o contrário (usar um caminho e um nome que ainda não ex istam). as propriedades da caixa de diálogo são configuradas para criar a imagem adequada.OK lhen sNewFileName : . 16 mostra como a caixa de diálogo Fon! pode ser usada para per~ mitir que o usuário selec ione a fonte e o estilo de uma fonte. FileName swOutput : New IO . A caixa de diálogo é informada de que não é necessário ser um arquivo já exis· tente (CheckF i leEx i sts : Fal se). LISTAGEM 9.lext) swOutput. EventArgs) H andles btnFont. e essa caixa de diálogo man ipula tudo isso para você enq uanto fornec e uma interface que provavelmente aparece em muitos dos programas com as quais o usuário trabalha. mas a pasta sim (CheckPathExi sts : True). Por padrão. mas a caixa de diálogo não impedirá o usuário de salvá-lo como desejar.16 1 2 3 4 Usando a Caixa de Diálogo Font Private Sub btnFont_Click (ByVal sender As System . e se o usuário sair dela dando um cl ique em OK. então.Write{rtfContents.ShowDialog() : Dia logResult . a caixa de diálogo é exi bida (I inha 23). StreamWriter(sNewFileName) swOutput.Click dlgFont.15 23 24 Us ando as Cai xas de Di álogo Internas (continuação) If .Object . mas são imponantes ao sal var. o arqu i· vo será salvo com a extensão.Close() sCurrentFile : sNewFileName End If End Wi th 25 26 27 28 29 30 31 32 33 End If End Sub ANÁLISE o uso da caixa de diálogo Save é seme lhante ao de Open.Font = rtfContents . O nome do arquivo é configurado como padrão com o último util izado. Caixa de Diálogo Font Os nomes.Font If dl gFont . cadas à caixa de diá logo Open . o conteüdo da caixa Rich Text será gravado no arquivo (l inhas 24 à 28). A Listagem 9.Desenvo lvendo uma Interface com o Usuário com os Formulários Windows 253 LISTAGEM 9. Depois de pronta. ByVal e As System . Overwri tePrompt e CreatePrompt .

É possível transfonnar qualquer fonnu lário Win- . ex iba a caixa de diá logo (linha 5) e configure o dest ino que usará os valores selecionados nela .Dia 9 LISTAGEM 9 .17). ByVal e As System.17 Adicionando uma Seleção Gráfica de Cores a um Aplicativo 1 2 3 4 Private Sub btnColor_Click{ByVal sender As System . Abort/Rctry/lgnore).Object.Click dlgColor. então. ShowOialog{)= OialogResult . tudo por meio dessa caixa de diálogo.ForeColor = dlgColor. Caixa de Diálogo Color A menos que prec ise de alguma funciona lidade avançada. exiba a caixa de diálogo (1inha 5).Color = rtfContents. OK/Cancel . funciona perfeitamente.ForeColor If dlgColor . Mas haverá vezes em que você precisará de uma caixa de diálogo com recursos mais complexos. a caixa de diálogo Color é exatamente do que você necessita para permitir que o usuário escolha uma cor (veja a Listagem 9. em seguida.Color End If End Sub 5 6 7 8 9 ANÁLISE A caixa de diálogo Color funciona exatamente da mesma maneira que Font.contanto que o usuário dê um cl ique em OK (linha 6). Construindo Suas Caixas de Diálogo A classe MessageBox fornece uma manei ra de exibi r caixas de diálogo simples.EventArgs) Handles btnColor. Isso é tudo. Font End If End Sub ANÁLISE A caixa de diálogo Font é simples de usar: apenas carregue as configurações de fonte atuais nela (1 inha 3) e. Se o usuário der um cl ique em OK. simplesmente carregue os valores das cores atuais (linha 3).OK lhen rtfContents. mostrando uma mensagem e/ou solicitando ao usuário para que faça uma escolha em um conjunto fixo de opções (Yes/No. LISTAGEM 9. pegue as novas configurações de fonte e leve-as de vo lta ao destino (nesse caso a caixa Rich Text. Font '" dl gFont. Ele pode selecionar uma cor-padrão predefinida ou criar sua própria combinação de cores. linha 6).16 Usando a Caixa de Diálogo Font (continuação) 6 7 8 rtfContents.

chamado LogonDi ai og.Desenvo lvendo uma Interface com o Usuário com os Formulári os Windows 255 dows em uma caixa de diálogo. duas caixas de texto (UserlD e Password).:. Com PasswordChar con figu rada.14 FIGURA Este formlllário foi redimel/siollado para ler lima aparência COII/llm somenre com algllns cOlllroles ne/e. qualquer texto que for inserido nesse campo será mostrado como uma string desse caTactere. A maneira como irá organiz. dois títulos (um para cada caixa de texto) e dois botõcs (OK e Cancei). Para conclui r. crie um novo projeto (do tipo aplicativo Windows). como última parte da configuração. Nomeie os controles usando as convenções de nomeação que viu no decorrer desta lição. gerando 1b1Useri d. Adicione um novo fo rmulário a seu projeto. Existem vários estágios diferentes. 9. 1b1Password. Dê um clique no formulário e acesse ajane la de propriedades. Já que os dois balões foram adicionados ao fonnulário. btnOK e btnCance 1. . Criando a Caixa de Diálogo Uma caixa de diálogo não só se comporta de modo diferente de um fo rmulário Windows comum. isso lerá o mesmo resultado de dar um clique no botão Cancel.14 mostra como fiz. e os percorrerei enq uanto mostro como construir uma caixa de diálogo a ser empregada como a tela de login de um apli cativo. respectivamente como btnQK e btnCance 1. Para fazer com que ele se pareça com uma caixa de diálogo. mas a Figura 9. você poderá voltar às propriedades do formulário e configurar duas que não poderiam ser definidas sem algum botão disponível.l-los não é tão importante para os fins de um exemp lo. dando a ele a aparência e o comportamento de uma. txtUseri d. Para acompanhar este exemplo ao avançar nesta seção. e Logon é mais apropriado do que LogonDi ai og. o efeito produzido sera o mesmo de dar um clique no botão OK.visual ize as propriedades de txtPassword e configure PasswordChar " "*". e acesse-o no modo estrutura. configure as propriedades a seguir: Isto impedirá que a caixa de diálogo seja redimensioFonnBorderStyle" FixedDialog nada. mas ela também possui outra aparênc ia. Se o usuário pressionar a tecla Escape. Configure AcceptBut ton e Cance 1Sut ton. Este é o título. e usá-Ia em seu programa. txtPassword . • Agora ad icione os controles necessários para criar uma caixa de diálogo de logon. • Text " "Logon" • Maximi zeBox e Mi nimi zeBox configuradas como Fa 1se Não é necessário mi nimi zar ou maximizar uma caixa de diálogo. O resultado da configuração dessas duas propriedades é que se o usuário pressionar Enter nessa caixa de diálogo.

18 Us ando as Propr i edades de VaI idação 1 2 3 4 Pr i vate Sub btnOK_Click(ByVal sender As System . D a1ogResul t fosse configurada como None. A listagem 9. poderemos usar o evento Va 1i da t i ng em txtUseri d e txt Password para veri ficar a entrada do usuário. Em código. o que o usuário inseriu nas caixas UserlD e Password. se o usuário deu um cl ique em OK ou em Cancel e.Cancel Há outra maneira de configurar esse resultado. e a propriedade Oi alogResult de btnOK igual a None. e qualquer valor configurado nela será retornado para o programa que exibiu a caixa de mensagem. é sempre possível fecharmos nós mesmos o formu lário configurando a propriedade Di a1ogResul t diretamente.Show( ).EventArgs) Handles btnOK. A primeira informação. respectivamente).Object . Se esses valores forem configurados. ByVal e As System. seria recomendável usar os eventos de validação e a propriedade CausesValidation. porque nenhuma validação deve ocorrer se o usuário der um clique nesse botão.256 Dia 9 Configurando o Resultado da Caixa de Diálogo Quando a caixa de d iálogo for exibida e o usuário a fechar dando um clique em OK ou em Cancei. que botão foi pressionado. e btnOK (e corno Fa 1se em btnCance 1). E tudo uma questão de controle e de onde você planejou executar a validação. Você pode configurar essa propriedade usando apenas uma linha de código como a que aparece a segui r: MC. você pode querer executar i toda a verificação no evento Cl i ck de btnOK. que é definir a propriedade DialogResult de btnOK e btnCancel (corno OK e Cancel. Em qualquer um dos métodos.Click Oim sUserID As String Dim sPassword As String . Esse código pressupõe CausesVal idation igual a False para tudo que existir no form ulário. Como alternat iva. mas se você ti vesse urna caixa de diálogo grande com um nível alto de val idação. txtPassword. e sua caixa de diálogo a man ipulará da mesma maneira. situação na qua l seria desejável que btnOK . é semelhante ao que é retornado de uma chamada a MessageBox . dos botões. então. para que a caixa de diálogo não fosse fechada automaticamente quando dessem um clique no botão. então. 18 mostra o código para o evento Cl ic k de btnOK. Se a propriedade CausesVal idation for configurada corno True em txtUseri d. validando os dados inseridos nas duas caixas de diálogo e confi gurando a propriedade do resultado da caixa de diálogo do formulário. se u programa lerá de determinar dois itens: primeiro. provavelmente não fará dife rença. podemos deixar a propriedade D ialogRe sul t de btnCancel configurada como Cancel. e seu resultado será definido como Ovalor da caixa de diálogo do botão. LISTAGEM 9. Há uma propriedade Di al ogResul t no fom1U lário. Qual dessas duas maneiras é a melhor? Em um fonnulário com apenas dois campos de texto. em segundo lugar.Oia logRes ult = DialogResult. a caixa de diálogo será fechada automaticamente quando o usuário der um clique em um .

O a1 ogResu1t como Cance1 (de modo que sempre execute o i cancelamento.Text If sUserID.Select{) El se If sPassword. MessageBoxlcon.Oia1ogResu1t = Oia1ogResu1t. na parte .Show("A senha é obrigató r ia . " & " i ns i ra uma i dentifi cação de usuá r io adequada . Configurar esse fo rmulário como o objeto a ser in iciado em seu projeto não seri a útil porque ele exec utaria a caixa de diálogo. "Erro r ". você precisa que ela seja exibida. Configure a propriedade bt nCance1 .OK End If End If End Sub ANÁLISE A rotina C1 i ck não executa nenhuma val idação comp lexa. é perfeito para esse propósito porque é chamado antes de o formu lário ser exibido. e essa ca ixa de diálogo de logon estará pronta. A configuração da propriedade Di alogResu1 t do fonnu lário na linha 21 fecha a ca ixa de diálogo para ocultare retornar esse resultado ao programa que o chamou.18 Usando as Propriedades de Validação (continuação) 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 sUserID = txtUserid . Exibindo a Caixa de Diálogo Para usar sua nova caix. Text sPassword = txtPassword. apenas verifica se o usuá- rio inseriu uma identificação e uma senha (l inhas 9 e 15) e configura o resultado da ca ixa de diálogo corno OK (linha 21) se isso tiver ocorrido. ".OK. " & "ins ira uma senha apropriada . Trim()= " " Then 24 MessageBox. os formu lários também possuem eventos. a caixa de diálogo seria fechada ao término de seu evento C1ick independentemente de ter sido inserida a identificação/senha do usuário.Error) txtUserid. Di a1 ogResult tivesse sido configurada como OK (por meio da janela de propriedades).:'l LogonOia 1og. mas o apl icativo seria encerrado quando o usuário inserisse uma identi ficação e uma senha. e nenhuma man ipulação de evento seja necessária) por meio dajanela de propriedades. então.". Load. "Erro r" • MessageBoxButtons. MessageBoxIcon. Exatamente como os botões. e um em particular. Observe que se btnOK. Show(" Ident i fi cação do usuário é obri gatóri a. MessageBoxButtons.OK.Select{) E1 se Me. que é o objeto de in icialização desse projeto. É preciso chamar LogonDialog antes de ex ibir Forml .Trim() = " " Then MessageBox.Desenvo lvendo uma Interface com o Usuário com os Formulários Windows 257 LISTAGEM 9. Visual ize o cód igo de Forml e se lecione Base Class Events no menu suspenso da esq uerda.Error) txtPassword.

Duas variáveis são usadas (linhas 4 e 5) para registraro sucesso/fa lha da tentativa de conexão. ShowDialog()= DialogResult. e poderá editar o procedimento do evento Fonnl Load. exibi · lo como lima caixa de diálogo e. Selecione Load na lista suspensa. lext = "password" lhen 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 bLogonSuccessful . A Listagcm9. txtuserid . a próx ima linha de cód igo desse procedimento não será executada até que o formulário esteja ocu lto ou fechado. Devido a ShowDia 1og. txtpassword. 19 fornece um exemplo de como esse procedimento de evento poderia serescrito. ByVal e As 5ystem. Text = "Duncan" lhen If frmLogon.19 Exibindo um Formulário como uma Caixa de Diálogo 1 2 3 Private Sub Forrn l_Load{8yVal sender As Object . A linha 7 emprega o método ShowDia1og do formulário para ex ibi-lo de maneira restrita. Nesse procedimento.EventArgs) Handles MyBase. Selecionar essa opção preencherá a lista suspensa à direita com a relação de eventos aos quais seu formu lário dá suporte . MessageBoxButtons.258 Dia 9 superior da janela de edição de códigos. LISTAGEM 9.OK . MessageBoxIcon. e o processamento do código teria continuado antes que o usuário concluísse o logon.Load Dim frmLogon As New LogonDialog() Dim bLogonSuccessfu1 As Boo1ean = Fa1se Dim sFailureMessage As String If frmLogon . o que é necessário antes que você possa ex ibir esse formulário .OK Then If frmLogon. "Não foi possível efetuar logon". você precisará criar uma instância de seu formulário LogonOi aI og. mas usar apenas Shaw teria exibido o formulário de maneira não restrita.. lrue El se sFailureMessage = "Senha Inválida!" End If E1 se sFailureMessage = "Identificação do Usuário Inválida!" End If El se sFailureMessage = "Tentativa de Logon Cancelada" End If If Not bLogonSuccessfu l Then MessageBox .Error) Me.C10se() End If End Sub 25 26 27 ANÁLISE Uma nova instância de LogonDi a1 og é criada ( linha 3). em seguida. . Show(sFailureMessage. verificar a identificação/senha que o usuário inseriu.

Em segui da. você provavelmente verifi cará esses valores confrontando-os com algum tipo de banco de dados ou IiSla de segurança. de modo que será preciso criar instânc ias dos outros dentro de seu código e. mas não fa rá isso para um aplicativo do console. Fonns. A linha 7 verifica o valor retornado.dll na lista. selecione System.NET com interfaces do Windows. então.System . Utili zando o Solution Explorer. bLogonSuccessful será configurado como True (linha II ). sua identificação e senha não devem ser processadas. O Dia 16 dar{l cont inuidade a esse tópico e fornecerá mais informações sobre o uso desses formulári os em seus programas. Na caixa de diálogo que aparecerá. ele automaticamente adicionarâ a referência necessár ia. Fonns . Wi ndows. como discutimos anteriormente enquanto você criava o formulário LogonDi a1og . Outra boa idéia é adicionar uma linha Imports .NET. .Desenvolvendo uma Interface com o Usuário com os Formulários Windows 259 o método ShowDi a1og. portanto. que é um dos dois tipos de apl icativo que você criará (o outro seria os sistemas com base na Web). porque se o usuário cancelar a caixa de diálogo.Windows. No entanto. Ele parece não reconhecer o nome da classe. P Quero usar uma caixa de mensagem (Message ox) em um aplicativo do console que criei. se tudo estiver correto. você pode ter quantos desejar. Se a conexão não tiver êxito. P&R P Posso ter mais de um formulário Windows em um projeto/aplicativo? R Sim. apenas um formulário pode ser definido para a ini cialização. a mensagem de erro será exibida em uma caixa de mensagens (l inha 23). dê um clique com o botão direito do mouse na pasta References dentro de seu projeto e selecione Add Reference. ou a mensagem de erro apropriada será uti lizada por sFa i 1ureMessage (linha I I à 19). Resumo Os formu lários Windows são usados para o desenvolvimento de aplicativos . o sistema Windows Forms permitirá que você construa a interface que seu apl icativo precisar.Windows. mas não consigo fazê-Io funcionar. Contendo vários grandes avanços não existentes em versões anteriores do Visual Basic e fornecendo um sistema comum para o desenvolvimento de fo rmulários por toda a platafonna . Fonns no inicio de seu arquivo de classes ou módulo de modo que possa se referir à MessageBox sem ter de sempre usar o prefixo System. Quando criar um aplicativo Windows empregando o Visual Studio. Para concluir. Em seus programas reais.Fonns nessa classe. chamar seu método Show quando quiser exibi-los. os controles de caixa de texto de LogonDia log são acessados e seus valores veri fi cados em relação à identificação e senha do usuário embutidas no código (l inhas 9 e 10). R A classe M essageBox faz parte do espaço de nome System . retoma um valor de Dial ogResu 1t . e FonnI será fechado (linha 25) para bloquear o acesso ao programa.Wi ndows. exatamente como Show na classe Messa geBox. você deve tê-lo disponível antes de usâ-Ia.

Windows.Object .20 1 2 3 4 5 6 7 8 9 Usando a Palavra -Chave Handles para Crlar um único procedimento chamado por vários eventos Private Sub btnCopy_Click(ByVal sender As System . Dado que um único procedimento pode manipular vários eventos (Sub myhandl er( ) Handl es btnOpen . Fonos. Copy(sSource . btnSave. Cl i c k. btnCl ose .260 Dia 9 Workshop o Workshop foi planejado para aj udá-Io a antecipar possíveis dúvidas. Click 12 Oim sSource As String 13 Oim sOestination As String 14 sSource = txtSource.Text{) 15 sOestination = txtOestination. Teste I.Text{) sDestination = txtOestination .Click Dim sSource As String Oim sDestination As String sSource = txtSource. como você poderia reescrever esses três procedimentos de eventos em um único procedimento? Dica: Você precisa converter (usando CType) o parâmetro sender em um controle de System. revisar o que já aprendeu e começar a pensar em como colocar se u conhecimento em prática. Qual é a d iferença entre um formulário modal e um não-modal? 2. Por que não podemos configurar a propriedade CausesVa 1i dat i on de um botão Cancel COm o valor True? 3.Text{) File . 11 ByVal e As System. LISTAGEM 9. "Respostas dos Testes/Exercícios". sDestination) 17 End Sub 18 .Move(sSource . Cl i c k.EventArgs) Handles btnCopy. ByVal e As System.Wi ndows. Fonos . Contro 1 ou System. sOestination) End Sub 10 Private Sub btnMove_Click{ByVal sender As System . As respostas do teste estão no Apêndice A. Que instrução é adicionada no final da declaração de um procedimento para indicar que ele é um manipulador de eventos? Exercícios I.Object . Cl i c k).Text{) 16 File . Button antes de poder acessar o conjunto comum de propriedades de controle.EventArgs) Handles btnMove .

De le te(sSource) 24 End Sub .EventArgs) Handles btnDelete.Text() 23 File .Desenvolvendo um a Interface com o Usuário com os Formulári os Windows 261 LISTAGEM 9.20 Us ando a Palavra -Chave Handles para cr i ar um ún ico procedimento chamado por vár i os eventos (continuação) 19 Private Sub btnDelete_Click(ByVal sender As Objecto 20 ByVal e As System.Click 21 Dim sSource As String 22 sSource : txtSource.

.

Em particular. O uso dos controles-padrão dos formulários da Web. seu desenvolvimento se tornou tão fáci l quanto o de aplicativos com base no Windows. parece que todas as pessoas no mundo têm acesso à Internet. O uso dos controles avançados dos formulários da Web. Antes do Visual Basic . nada relacionado a trabalho). principalmente quando a velocidade da minha conexão fica bastante lenta porque todos estão navegando. Com o Visual Basic . É claro que um dos . você examinará como pode gerar interfaces com o usuário com base em navegador. era dineil criar esses ap licativos com base em navegador usando o Visual Basic. Nesta lição.NET. o Modelo de Programação da Web Às vezes.SEMANA 2 DIA Construindo a Interface com o Usuário com os Formulários da Web Hoje cada vez mais aplicativos são escritos com base em navegadores. Os uso dos controles Validator. As ferramentas do Visual Basic . conversando e enviando correspondências eletrônicas (porém.NET. esta lição eofoeará: • • • • Corno o modelo de programação da Web difere do tradicional com base no Windows.NET ajudam o desenvolvedor na criação de páginas da Web que fornecem interfaces com o usuário bem so fisticadas para qualquer tipo de navegador.

A Figura 10. No Windows NT 4. ela mesma. Tudo ficou mais interessante quando as pessoas começaram a criar páginas da Web dinâm icas ou que podiam ser alteradas. mas há muitos outros no mercado que o fazem. Assim. esse programa é chamado de Internet Infonnation Ser~ vice (II S). as páginas da \Veb eram estáticas. As informações são transferidas entre o navegador e o servi dor por meio de um protocolo. nunca mllda~ vam realmente. um programa. Nos ' primórdios' da World Wide Web. um programa que empregue páginas da Web em um navegador para permit ir que o usuário insira informações. o servidor (ou o projet ista da pági na da Web) pode adicionar informações de programação à própria página. seu nome é Personal Web Server. Como alternativa.0 Server. O servidor Web é outro programa processado em um computador que sabe como retornar HTML quando so licitado. Por meio da DHTML. Este livro não abordará HTML. ou linguagem . Essa foi a origem dos programas da Web. Isto é. Isso acontece em par~ te porque o desenvolvimento de aplicativos para a Web é diferente da geração dos de microcom ~ putadores. chamado HTrP (Hypertext Transfer Protoco l). grande parte do traba lho de um aplicativo é executado no servidor Web. chamamos esse recurso de Dynamic J-I TML (ou DJ-ITML). convertê-las em HTML exibindo-as para o usuário. Em gera l.NET.0 Professiona l. Por exem pl o. No Windows NT ou no 2000. No Windows 2000. o que é o ' modelo de programação na Web'? É apenas um termo usado para descrever como você pode projetar. NOTA o nome efetivo do II S foi alterado com as diferentes versões. Com eles. em seguida. com os quais temos mais contro le. O código pode ser processado no navegador sem precisar retomar nenhuma informação para o servidor. em vez de simples páginas da Web.2 mostra esse modelo em ação. os aplicativos da \Veb precisam lidar com a rede com mai s periodic idade. em vez de apenas retornar sempre o mesmo resultado HTML. aspectos da Internet é a World Wide Web (WWW ou apenas Web). foi denominado de Internet Information Services. ele é chamado Internet tnformation Server. Por sua vez. como o Visual Basic . Em geral (mas nem sempre). O processo completo é semelhante ao da Figura 10. o usuário pode so l ici~ tar informações sobre as vendas de um período em particul ar. se não o mais popular. é incluído na página algum código JavaScript (uma linguagem de programação. . o servidor poderá procurá-Ias em um banco de dados e. o servidor Web pode executar algumas tarefas e retornar o resultado HTM L apropriado. Essas informações serão passadas para o servidor. que é executada em pági nas da Web) ou de outra Iinguagem. O navegador é um aplicativo que sabe como ler HTML e exibi~la na tela. criando uma que seja. 1.Dia 10 mais importantes. Além disso. No entanto. é freqUente a falta de ferramentas de programação realmente boas para a criação de ' programas' na Web. Essas páginas da Web são projetadas com a ut il ização de HTML (HyperText Markup Language). enquanto no Windows NT 4. ou desenvolver.

b Há várias técn icas que podem ser empregadas na criação de um programa da Web.NET adicionou o conceito dos 'controles no lado do servidor' que podem gerar o resultado HTML apropriado para o navegador que o sol icitar.. -----= Resposta-+-. O ASP.NET permite que você escreva páginas da Web em um código totalmente compi lado do Visual Basic . apresentava alguns problemas que o AS P. Pesquisa Banco de Dados Servidor W. O VBScript é interpretado no tempo de execução.Co nstrui ndo a Interface com o Usuário com os Formulários da We b 265 FIGURA 10. o ASP . O ASP. • O AS P também padecia da quantidade limitada de controles que a I-ITML apresenta.NET.NET é o nome que a Microsoft deu para sua versão aprimorada do ASP.NET também fo i projetado para reso lver outros problemas do AS P que não são inerentes a essa discussão sobre a construção de interfaces com o usuário. como melhorias no redimensionamento e na ut ilização da memória. . podem representar muito da I-ITML e da cod ificação que você será poupado de ter de escrever.NET.2 O modelo de programação da DY//(lmic HTML.Pesquise · Banco de Dados Servidor W.: : .NET ASP. A técnica lItili:wda pelos fonnlllários da Web é um aperfeiçoamento do ASP. • O ASP só aceitava programas cm uma linguagem como o VBScript.1 Modelo de programação lia JVeb. ASP. O ASP.s~:"~'. Algumas das mais usadas no passado foram o ASP (Acti ve Server Pages).b FIGURA 10. mu ito menos) para tarefas comuns de programação. '0Navegador .. Embora o ASP fosse um método fáci l de constru ir páginas dinâmicas na Web. a Perl (outra linguagem de programação) ou o JS P (Java Server Pages). O ASP. não é compilado como o Visua l Basic.NET requer menos cód igo (em geral. _ Resposte .NET resolveu: • O AS P quase sempre exigia muita cod ificação para que algo fosse executado. Embora esses contro les no navegador sejam apenas HTML.

Assim . só a HTML sem formatação será retomada ao navegador cliente. em geral é impossível desenhar na página da Web. • Os aplicat ivos com base na Web dependem dos recursos do navegador usado para visualizá-los. a página da Web poderá reagir de várias manei ras. • Quando você acessar uma página da Web. portanto. Infe lizmente. provavelmente ela será estática . Algumas delas são: • Os aplicativos com base na Webtendem a ter mais código no servidor. mas os recursos avançados estarão no servidor.266 Dia 10 Como a Criação de Programas com Base na Web Difere da de Programas com Base no Windows Ao projetar um programa por meio dos fonnulários da Web. assim como por seus recursos insufi cientes de desenho isto é. a aparência de seu programa virá do navegador. a página pode ser alterada sem que seja necessário retornar informações ao servidor) se os controles detectarem que o navegador pode usá-Ia. Além disso. ele responderá de modo apropriado. torná-Ia dinâmica). Você deve se lembrar disso quando criar aplicativos da Web. produzir fo rmulários animados (ou qualquer tipo de resposta para o usuário) é mais dificil com os aplicativos com base na Web. Felizmente. Embora haja maneiras de poder atua lizá-Ia sem retornar ao servidor (isto é. Os aplicativos com base na Web são restritos. Portanto. Esse percurso de envio e retorno na comunicação pode levar algum tempo. e mui- tos desenvolvedores da Web têm-se deparado com essas diferenças no momento em que projetam seus programas. Se eles não reconhecerem o navegador que estiver em uso ou se esse não der suporte a atualização dinâmica. em geral é necessário enviar informações ao servidor. se o usuário tiver uma versão ma is antiga de um navegador instalada ou tiver desativado certos recursos. os controles dos formu lários da Web ocu ltam a maioria desses detalhes. . Para fazermos um botão ou outro controle executar algo. Isso acontece por causa da separação entre código e projeto. os navegadores possuem recursos diferentes uns dos outros. Isso também sign ifica que esses aplicativos tradicionalmente prec isam que muita codificação seja adicionada para que a aparência da página possa ser alterada conforme o navegador que a visualizar. Eles fo ram criados para produzir uma saída dinâmica (isto é. Isso assegura ao desenvolvedor que o navegador cl iente receba a página da Web como foi projetada. há várias diferenças que você deve ter em mente. em vezde no cliente. respeitando as limitações do navegador. • Muitas operações de aplicativos com base na Web requerem um 'percurso de ida e volta na rede ' . tanto pelas Iimitações do próprio navegador quan10 pela quantidade de navegadores disponíveis no mercado. Os navegadores são limitados nos tipos de controles que podem ser usados. ele só deve existir quando necessário. Isto é. Essa é uma das principais razões pela qual os aplicativos com base na Web tendem a apresentar grande parte da codificação no servidor. esses métodos fazem com que sua criação seja mais complexa.

Isso significa que as operações que poderiam levar alguns segundos se o cl iente e o servidor esti vessem próximos (ou ate na mesma máquina) poderão demorar muito tem po. alguns programas não são candidatos a apl icat ivos da Web. só terá de instalar as atualizações no servidor. possivelmente por grandes distâncias através de uma rede. pode ser preferível pelo menos considerar pri meiro a criação de programas como aplicat ivos da Web. poderá ser muito mais simples criar aplicativos da Web do que do Windows. E ainda há a velocidade da conexão. e não em cada cliente. você deve estar pensando "Por que me preocupar em criar aplicativos da Web?". Isso evitará que você tenha de ir até cada uma das máquinas clientes ou fazer com que todos os seus usuários instalem o apl icati vo. • Desempenho Melhorar o desempenho de aplicativos da Web é muito mai s fácil que fazê-lo com aplicativos comuns. operações como as animações podem fic ar desfi guradas ou não serem exib idas de maneira alguma até que o download seja concluído. mas as pessoas estão começando a criar mais aplicativos com base na Web. pode ser mais sensato criar um aplicativo com base no Windows. se não houver conhecimento de HTML ou de Windows. nem os que requerem muitas fi guras (como os jogos). Se você estiver acessando a página da Web por meio de um modem mais lento. Você pode aperfeiçoar seu desempenho adicionando mais servidores e distri buindo as sol icitações por todos eles. Com Iodas essas questões para lembrar. se só tiver um computador envo lvido (isto é. Portanto. Mui tos se encaixam em qualquer tipo. essa diferença se tornará ainda mais relevante. existem muitos beneficias: • Instalação Para tomar seu aplicativo disponível . A capacidade de fazer atualizações fac ilmente e as correções disponíveis são atraentes. portanto. O apl icativo fica rá imediatamente disponível para uso do cliente. os aplicativos com base na Web também tor· nam necessário que o desenvolvedor considere o fato de que o cliente e o servidor estão separados. Para concluir. Qualquer programa que precise de um vínculo contínuo entre o cl iente e o servidor não é apropriado. • Conhecimento Se você já conhece um pouco de HTML.Construindo a Interface com o Usuário com os Formulários da Web 267 Além das restrições em decorrência do navegador. • Novas versões e/ou correção de erros Quando você quiser atualizar uma parte de se u aplicativo com uma versão mais nova. . Então. não for um ap licati vo cliente/servidor como um programa de banco de dados) ou se o aplicativo só for usado por você. você deve criar um programa com base no Windows ou na Web? A resposta mais fác il (porém insatisfatória) é "Depende". No entanto. quando projetar um aplicativo. tudo que você precisa faze r é inserir algum endereço no URL. Eles também são ma is fáceis de assim ilar. Embora haja desvantagens em desenvolver apl icativos da Web.

"o. A Tabela 10. "li . O controle label fornece uma administração melho r da f ormat ação e permite a inserção do texto onde fo r dese jado. . Use pa ra fornecer ao usuário um campo o nde i nserir info rmações. . lo. . este contro le também possibilita a alteração dinâmica do conteúdo de seu aplicativo.. . Para concluir.:~--- . Aí estão incluídos todos os controles comuns que você está acostumado a empregar (veja a Figura 10.... FIGURA 10.1 Controle Label Contro les-padrão dos Formulários da Web Descrição Use para inserir texto no formulário da Web.. você pode apenas dar um clique no formu lário e digitar.NET.. . Os controles que estarão disponíveis na criação de um apl icati vo da Web são semelhantes àqueles que podem ser usados nos ap licativos Windows.NET é seme lhante a criar um aplicat ivo co- mum do Visua l Basic . "rt .268 Dia 10 Usando os Controles-padrão dos Formulários da Web Projetar urna página da Web usando o Visual Basic . .. o que não pode ser feito com o texto adicionado ao formu lário. TextBo x ." -' - <o" • .NET que funciona internamente.'11" · ' ~.. A única diferença é o que acontece no níve l interno.3)..~ "" " .. .. Este em geral é o controle mais comum adicionado a um aplicativo da Web. .... ' ~' . rl""' _. .. Como altern ativa.'1 . as lags HTML são inseridas na página ASP. e o código é annazenado em um arquivo do Visual Basic ..3 COII/ro/es-padnio para os formulários da lVeb.' TABElA 10.NET. Em vez de se adicionar um código para criar os controles e confi gurar suas propriedades. t apresenta uma descrição resumida desses controles.' .._.co """ •- I 1. f6Wii """ 3 0 __ ..>'I ..~-~ ..

Use este controle quando você precisar do recurso de seleção múltipla (porém. e só uma linha será mostrada. Os controles ListBox permitem que o usuário selecione um ou mais itens em uma lista de opções. exceto por não possuir um evento C1 i ck. Depois de um item ser selecionado ela será fechada. Semelhante a Li nkButton. A diferença é que Button se parece com um botão.) Semel hante no re su ltado ao co ntrole comum But ton. Mesmo sendo todos independentes. ao passo que Hyperli nk pode ser usado apenas para enviar o usuário para outro local. O controle CheckBoxli st é composto de vários controles CheckBox. Trata-se de uma lista que inicialmente só ocupa uma linha. para selecionar o código de um Estado ou país. ImageButton é um recurso no qual seus usuários podem dar um clique a fim de executar alguma ação.1 Controles-padrão dos For mulários da Web (continuação) Controle Button LinkButton Descrição Use para fornecer ao usuário algo para dar um clique a fim de executar alguma ação. lin kB utton é um recurso no qual o usuário de seu aplicativo da Web pode dar um clique. CheckBoxList também é um substituto adequado para ListBox quando se pretende que o usuário selecione vários itens. o controle Chec kBox list é uma maneira prática de adicionar vários controles CheckBox a uma página. enquanto LinkButton é um hyperlink. portanto. é recomen dável usar ListBox se houver mais de seis itens. quando quiser que o usuário possa ver todas as opções ou quando houver bastante espaço na tela. examine CheckBoxL i stj. no fato de que CheckBox não depende de outros controles iguais a ele. Outra diferença é que é possível selecionar vários itens em Li stBox. 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 usuário deve selecionar. No entanto. sublinhado em algum local. Os controles DropDownList são comuns nos formulários da Web. A diferença é que lmageButton é uma fi gu ra. Semelhante no resultado ao controle comum Button. (Ou seja. Você pode dar um clique na seta suspensa para abrir e ver a l ista completa. ImageBut ton Hype rl i nk D ropDownList ListBox Chec kBox CheckBoxLi 5t . Esses controles poderão ser usados nas situações em que seu usuário tiver de selecionar apenas um item em uma lista e quando se quiser economizar espaço na tela . Eles diferem de OropOownLi st pelo fato de a lista fi car sempre visível. É marcado ou desmarcado e.Isso significa que você só pode escrever códigos que lidem com a ação de clicar em Li nkBu tton. o usuário vê um bonito ponteiro azul.Construindo a Interface com o Usuário com os Formulários da Web 269 TABELA 10. Ele difere de RadioButton. O controle CheckBox representa a resposta afirmativa ou negativa a uma pergunta.por exemplo. contendo sua opção. usado quando se quer que o usuário selecione ou não uma opção. enquanto RadioBut t on em geral é uma opção entre muitas.

para usar os da Web. RadioButtonlist O controle RadioButtonList nada mais é que um grupo de con t roles Rad i oButton. dê um clique duplo sobre eles na ca ixa de ferramentas ou arraste-os para seu formu lário. Altere o nome do projeto para Madl ib e dê um clique em OK para poder construí-lo. Newe Project para abrir a caixa de diálogo New Projecto Abra a pasta Vi sua l Basic Projects e selecione o modelo de projeto Web Applicalion. Exatamente como deve ser feito com os controles Windows. o formulário será lima página da Web. é um ótimo recurso a ser usado quando você precisa separar ou realçar informações ou controles. porém. você deve instalar ou poder acessar o Internet Info rm ation Servi ces (ou o Internet Inform ation Server). Selecione File. Comece ad ic ionando uma figura a sua página. O controle Panei é semelh ante ao label no fato de ser apenas um espaço reservado para texto . Portanto. você pode considerar Check80x como um controle que produz uma resposta afirmativa ou negati va. Ele facilita a criação desse grupo. Portanto. A diferença entre os dois é que os controles RadioButton tendem a 'viajar em pacotes' . sua primeira etapa será dispor os controles que usará em seu aplicativo (veja a Figura [0. Embora cada Check80x de um formulário possa ser configurado independent ement e como True ou False. Ele será usado como exemplo do desenvolvimento de um aplicat ivo simples da Web para que possamos ver mui tos dos controles-padrão em ação. Inicie o ambiente de desenvolvimento se ele não estiver em execução e crie um aplicativo da Web. enquanto Rad i oButton (ou melhor. Controles semelhantes ou relacionados podem ser ag rupados em Panei para que se destaquem. NOTA Antes de criar um aplicativo da Web. Iremos criar um ap licativo sim ples com um formulário da Web para ver como esses controles noS ajudam a escrever programas na rede. Nesse caso. Image Pane i o controle lmage permite que você insira uma f igura na página. A diferença é que Panei pode conter outros controles. .4 para o resultado final). apenas um RadioButton de um conjunto pode ser True. Exatamente como nos aplicativos com base no Windows.I 270 TABELA 10. um grupo de controles Rad i oButton) se assemelha mais a uma pergunta de múltipla escolha para a qua l só uma resposta é correta. se você já tiv er uma lista proveniente de algum outro local (como um banco de dados) . Chame-o de Madl ib .1 Dia 10 Controles-padrão dos Formulários da Web (continuação) Controle Radi oButton Descrição O controle Radi oButton é semelhante a CheckBox no fato de seu valor só poder ser True ou Fal se.

. Exata~ mente como nos aplicativos Windows. '" 1..1•• ." ..tolo !"'''' "r.... ..Y ""." Idod . FIGURA 10. n.... pl&ycr . ... •.. ..".•• ~".~) "'"""'I. of_<b by typ< of_d...... ~.d md . ..~. essas palavras são inseridas em locais específicos de uma história para gerar um resu ltado di ve r~ tido e personali zado (é o que se espera) .. Quando der um clique na janela Property para acessar a propriedade ImageUrl . or • d<".. lfoIo • ..n ..rr.''' '01 ~. A seguir. _ _<II . Fornecer uma explicação de se u programa em geral é uma boa prática. :t.. O texto que inseri você encontra no primeiro parágrafo após a imagem.. (Criei uma que ex ibe Madl ib no programa Paint que vem com o Windows 2000.. ~ _ _ II A MacI UI> . .JEI I'(omo... ~d dO..bno .. b ... _ .. A Tabela 10. mot '. lOOOJ ..- ~ .... ... p<fl.r-r.Ie<l••• <fI<....! ""': ("" ("" P_I<T ("" F~d Arraste um controle Image para o formulário.~->. ' t-oJO<O _ l!t~ ' .. .m"r.." I/'f~ Formulário Ma dl i b. ... d. ele deve ter a aparência de um quadrado vazio (ou talvez de uma figura incompleta) porque você precisa configurar o caminho para a fi· gura. &l o11 • ~_ . . Acesse ajanela de propriedades e localize a propriedade ImageUrl.1OO .. Adicione um controle La· bel e uma explicação si mples na propriedade Text..motio. <. Em seguida.Constru ind o a Interface com o Usuário com os Formulários da Web 271 o programa a seguir é conhecido como MadLib. e a figura já deverá estar no formulário.. "': .. .. No início..4 . Na verdade."".. aomIo.. tn. . "" ..) Dê um clique em OK...----~" ~ · 1.. ". CI.. ~ •• . . l~' e..r.rII ~ • • " • •• L • .2 descreve as configurações das propriedades e controles usados.OI< .. verá um botão com três pontos... n..:'"":" • .. é um jogo no qual um partici pante seleciona uma série de palavras (em geral pelo tipo de palavra ou uma descrição). você adicionará à pági na os controles para os vários itens que inseri rá.. isso significa que uma caixa de diálogo o ajudará a confio gurar essa propriedade. Dê um clique no botão e procure uma figura adequada..

Veja a Figu ra 10.5 pa ra visualizar a Items o controle DropOownl is t caixa de diálogo que surgirá. Dê um clique na propr iedade Items e. em segu ida.2 Controles Usados no Formulário Madl ib da Web Propriedade (!D) Controle Valor lb l Name label Text Font Bold Your fi rst name: True TextBox label (!D) TxtName (lO) Ib l Oate A date: Text Font Bold True TxtDate TextBox Labe l (!D) ( lO) lb l Fruit A kind of fruit: True Text Font Bold DropDownList ( lO) cboFrui t possui uma ca ixa de diálogo que o ajudará a inserir itens nele. Repita isso pa ra cerca de dez itens. en tão. Banana. Kumquat.I 272 TABELA Di a 10 10. Adic ionei as f rutas: Mango (manga). dando um clique no botão Add e. confjgure a propriedade Tex1. Berry (cerejal. Labe l (lO) Text Font Bold 1b1Number A number from 100 to 1000: True TxtNumber TextBox (lO) Text SOO Ib l Emotion An emotional state: True rlstEmotion label (lO) Text Font Bold RadioButtonlist (10) . no botão resultante Build. Peach (pêssegoL Kiwi. Currant (groselha) . Ad icione vá ri as frutas. Apricot (damasco) e Plum (ameixa). Drange (laranja).

Saddened (triste). você pode querer inserir uma li nha em certos pontos para organizar melhor os controles na página . Adicione alguns de seus estados emocionais favoritos aqui . Ecstatic (extát i CO). Jea1 OUS (enci umado). Inseri o seguinte: Excited (excitado).2 Controle Controles Usados no Formulário Madl i b da Web (continuação) Propriedade 1tems Valor A propriedade Items de RadioSuttonList é semelhante a de DropDownL i st e possui o mesmo editor. Frustrated (frustrado). Intrigued (intrigado). Se estiver familiarizado com a HTM L. 3 RepeatCo I umns Label ( 10) IblVerb A verb: True TxtVerb IblOccupation An occupat i on: True txtoccupat i on cmdWrí te Wríte Story cmdClear Cl ear IblResult Deixe este campo em branco (ou seja. Happy (feliz).5 para a visualização de um exemplo. Veja a Figura 10.Constru indo a Interface com o Usuário com os Formu lários da Web 273 TABELA 10. Paníc~y (aterrorizado). também poderá adicionaras controles em uma tabe la para obter possibilidades de formatação ainda mais adequadas . Shocked (chocado) e 8lue (melancólico). . exclua o vaIar da propriedade Text) Groove 75% Text TextBox Label Font Bold (ID) (10) Text Font Bold TextSox Sutton Sutton label (10) (10) Text 10 Text (10) Text BorderStyle Width Além disso. Frightened (apavorado). Angry (zangado).

você poderá inserir controles no formulár io da Web exatamente como em um formu lári o Windows. a lgumas precisam de uma explicação adicional. como os arrays." t d"" E! Adicionado itens a DropDownList. Os controles que possuem essa capacidade podem ser facilmente identificados. Se apresentarem a possibilidade de alteração. Esse conjunto aparece najanela Property e permite que você adicione itens sem vincular um controle a um array ou a outro conjunto.5 !!' . Gri dLayout.. O controle Rad i aBu t tonLi s t possui uma propriedade relativamente rara: Repea tCo 1umns. j A maioria das propriedades usadas tem um sentido próprio. A alternativa. o controle RadioButtonList gera um código J-ITML para executar essa tarefa. Se examinar as propriedades do formulário da Web (localize DOCUMENT na lista suspensa de objetos que se encontra na parte superior da janela Property). Seu padrão é linearlayout. já que possuem um conjunto Items... em segu ida.274 Dia 10 Há outra técnica que pode ser usada na inserção de controles em um formulário da Web.. pode ajudá-lo a criar formulários sofisticados na Web. porém também podem fazer referência a outros conjuntos. FIGURA 10. Examinaremos esse procedimento 110 Dia 12.. Essa pode ser uma ótima maneira de economizar algum espaço na tela. . "Acessando Dados com a Plataforma . (011"". você verá uma com o nome pageLayout . mesmo enquanto todos os itens são exibidos. Se page Layout for con fi gu rada como GridLayout. no entanto.. Esse é um dos recursos que tornam esses controles mais fáceis de usar do que escrever seu próprio cód igo HTML. Em geral. isso significa que eles poderão ser associados às informações recuperadas em bancos de dados. Muitos controles que trabalham com listas podem ser 'dest inados' a um conjunto de itens... Você pode configurâ-la para controlar a quantidade de colunas usadas na exibição da lista de itens. ser vinculados ao controle.. deverão ser armazenados em um banco de dados e ser recuperados no tempo de execução para..N ET".. Internamente. II! c. Essa é a manei ra mais fáci [ de adicionar itens se eles não puderem ser alterados.

ByVal e As System. Começaremos com o botão Cl ear. Você só inserirá o código dos dois botões.Text sTemp &= " PicoHertz " & cboFruit.Text & "! " sTemp &= "Acho que vou sair e " & txtVerb.Text sTemp &" " e me tornar um " & txtOccupation.EventArgs) Handles cmdWrite .Constru indo a Interface com o Usuário com os Formu lários da Web 275 A próxima etapa no desenvolvimento de seu aplicativo da Web é adicionar códigos. e que será exibida nos resultados de Labe 1." " lblResult. CÓDIGO l iSTAG EM 10.EventArgs) 3 Handles cmdClear . SelectedItem. Text sTemp &" " meu novo" &&txtNumber.NET.1 Código para o Botão Clear 1 Pri vate Sub cmdClear_Click( 2 ByVa 1 sender As System. Text " " " 7 txtVerb .Text &_ " de " & OateTlme . Esse botão apagará as informações de todos os controles TextBox e dos resultados de Labelo Dê um clique duplo no botão Clear c adicione o código mostrado na Listagem 10.2 também é simples. ByVal e As System.Text • " " 6 txtDate. A idéia básica é que você crie uma string longa contendo toda a história. Isso esvaziará esses controles. ToString & "<br>" sTemp &= "Em" & txtDate.1.Text • " " 10 11 End 5ub ANALISE o código para esse botão é simples.Text & " " . Text " " " txtNumbe r. Text .Cli ck 4 5 txtName. o cód igo da Listagem 10.Object .Selectedltem.Object.Text &_ " Comecei a programar no Visual Basic." " 8 9 txtOccupation . CÓDIGO LISTAGEM 10. " sTemp &= "Estou" & rlstEmotion .Click 'é aqui que associamos as opções 'que o usuário selecionou fonnando a história final Dim sTemp As String sTemp " "Diário de " & txtName.Text . Tudo que ele faz é configurar a propriedade Text de todos os controles TextBox e os resu ltados de Label com" ".2 Código para o Botão Write Story 1 2 3 4 5 6 7 8 g 10 11 12 13 14 15 16 Private Sub cmdWrite_Click( ByVal sender As System.Today.

" ar é equivalente a: 10 11 sTemp = sTemp & "Em ii II &txtOate. '•••• ' ..NET.'. por exemplo...... Text &_ " Comecei ii program no Visual Basic... ... trI>< ofwot<l. // •••• •"'/..." FIGURA 10. Sendo um novo recurso do Visual Basic . tlo: r i. . r"'.. onde você declara a string.. f..A. A Figura 10.276 Dia 10 CÓDIGO LISTAGEM 10._" "" "' • • 0 "" •• 0> fII!..1<'... Um símbo lo que provavelmente parecerá estranho é &= que se encontra nas linhas 10 à 16. A dOlO: r. 10 11 sTemp &= "Em" & txtDate..~ .. Em seguida. execute o programa.2 Código para o Botão Write Story (continuação) 17 18 19 'a história final é annazenada no controle Label lblResult... d (" E<_ (' HoppJ (' ~d (' (' SOilil. liI<o ~d d • • ."""' .] f3 A Mad!... : (" Ezao.... rp<di< <potJ '" cr .. '" ... Depois que tiver adicionado o código.. 100 '." ar Você pode usar o operador &= para tomar seu código mai s curto quando estiver adicionando mais informações ao fina l de uma string existente.NET....... :r'----A kiod . d (" F""".......d (" Pneq (" F.6 mostra o formulário da Web em ação.Text & " Comecei program no Visual Basic .r r.d:> . e o resu ltado é inserido na propriedade Text do controle 1b1Re$U 1 t da linha 18...<d <ndftná ""<I> •'''''' oe_do (......... esse atalho é ut ilizado para executar inserções em uma string.." .. _ whon .. Isso deve iniciar um navegador e carregar sua página. h>ln (' Sboclu:d AlI ..- ~ Th< ... " . O côdigo das linhas la à I I.... Selecione Build no menu Build e. 1000: ri... r. ela é construí- da da linha 8 à 16.".. d (' A . você já estará pronto para construir e testar seu programa. Insira alguns itens e dê um clique no botão Write StOly para ver sua história...'_""'---"::J l. em seguida. ..... 0. '!J h~....W........- .aty"....UÍI: .6 O formuláriO Madl i b em ação.- AlI O""PoIi'lO: ri. . .Text " sTemp End Sub ANALISE o processo começa na linha 7..•• / .. ()<... _ .....oJ><fuIIJ) ~ f><'Ioo. NET... tio . (' m... ....

no entanto. A data mostrada no controle. como Ca 1endar. os formulários da Web se tornam ainda mais úteis (além de coloridos e fáce is de usar) quando são aplicados alguns dos controles mais avançados. empregando Ca1endar. a grafia do dia da semana ou do mês e assim por diante. que se encontra na parte inferior da janela Properties quando selecionar o controle Ca 1endar.2 por causa da mudança no nome do controle. Além disso. um calendário mensal. 1 e 10. Atualizemos o projeto Mad1i b de modo que use um controle Cal endar em vez de TextBox para a data inserida. AdRotator ou Data.3 Prop riedades Importantes do Controle Ca1endar Propriedade Descrição Item Se1ectedDate Vis i bleDate Propriedade Propriedade A data que será retornada por esse controle. . você reduz a chance de o usuário inserir uma data em um formato inválido. TABELA 10. o controle Ca1endar mostra. eles faci litam a criação das interfaces com o usuário. O controle Calendar possui uma grande quant idade de propriedades. a ma ioria delas diz respeito a sua ex ibição. Embora em geral ela seja a mesma de Se 1ectedDate.Co nstrui ndo a Interface com o Usuário com os Formu lários da Web 277 Usando os Controles Avançados dos Formulários da Web Apesar de ser fác il criar um formulário com os controles que estão dispon íveis como parte da HTML. Você pode editar o formulário antigo ou cop iá-lo se quiser visualizar os dois. você pode escolher entre testar as propriedades que afetam a aparência de Calendar ou faci litar as co isas e selecionar o Iink AutoFonnat. principalmente se você estiver tentando configurá-Ia por meio de código. pode ser diferente. Exclua a caixa de texto Date e adicione um controle Ca 1endar. Neste ponto.3 e 10. por estranho que pareça. Embora sejam construídos com o uso de controles mais simples.3 resume algumas das propriedades mais úteis do controle Ca1endar. (Por que complicar e criar algo estranho quando um profiss ional já trabalhou em uma opção de aparência adequada seria essa uma de minhas estratégias de programação?) Configure a propriedade Ca 1endar' s Name como calDate.as cores. Esse controle permite que o usuário visualize e se lecione datas ma is fac iImente do que com o uso de uma TextBox. Você também terá de alterar um pouco o código das Listagens 10. As Listagens 10. Quase tudo que está visíve l no controle pode ser ajustado .4 mostram o novo código alterado. Optei por dar um clique no link e selecionei CoI orful 2. A Tabela 10.

Em vez de recuperar a data em Text Box. . você pode reconfigurar Cal endar para selecionar o dia atual (Date Time . Today txtVerb .ToString & "<br> " sTemp &= "Em" & calDate. CODIGO liSTAGEM 10.4 Código Alterado do Botão Write Story 1 2 Pr.EventArgs) Handles cmdW rite. não pode configurá-Ia com" ".SelectedDate " DateTime .SelectedDate &_ " Comecei a programa r no Visua l 8asic. ByVal e As System. " meu novo "& txtNumber." " End Sub ANÁLISE Apenas uma linha de código foi alterada. "Acho que vou sair e " & txtVerb. Já que você não tem mais a caixa de texto txtOate.Object.NET . como fez na linha 6.Text &_ " de " & DateTlme.Click ' é aqui que associamos as opções 'que o usuário selecionou formando a história final Dim sTemp As String sTemp = "Diário de " & txtName.278 Dia 10 CÓDIGO LISTAGEM 10.Object.Text &" ! " sTemp &. a única alteração na Listagem 10. sTemp & " Pi coHertz " & cboFruit.Text sTemp &. Text" " " calDate . " sTemp &= "Estou" & rlstEmotion.vate Sub cmdWrite_Click( ByVal sender As System.Text .Text = " " txtOccupation. Text & " " 'a história final é armazenada no controle Label lblResult .Text = sTemp End Sub 19 ANALISE Novamente.Text • " " lblResult .EventArgs) 4 5 6 7 B Handles cmdClear . " e me tornar um " & txtOccupation . Em vez disso. 3 4 5 6 7 8 9 10 11 12 13 14 IS 16 17 1B ByVal e As System. o código recupera a data selecionada em Calendar com ca 1Da te. Click txtName .Selectedltem. TOday).4 foi na linha 10. Text .SelectedDate.SelectedItem .3 Código Alterado do Botão Clear 1 2 3 Private Sub cmdClea r_Click( ByVal sender As System. Text = " " 9 10 11 txtNumber.Text sTemp &.Today.

colocássemos o código no cliente. ISBNs ou números de peças. Regul arExpress ianVa 1i datar Assegura que o valor digi tado tenha o formato desejado. será considerado válido. a comparação entre campos será útil quando você quiser que o usuário digite sua senha duas vezes. em geral será necessário assegurar que eles sejam preenchidos de modo correto. e um segundo para o valor máximo.Co nstruind o a Interface com o Usuário com os Formu lá rios da Web • 279 Não é verdade que as propriedades possuem um sentido intrínseco? E por isso que os criadores não chamaram o sistema de Visual Complexo . Usando os Controles Va 1. Você pode usá-lo sempre que quiser se cert ificar se o usuário concluiu o preenchimento de um formulário antes de enviá-lo. em vez disso. Isso pode ser útil como parte de um relatório. poderíamos fazer isso escrevendo um código no servidor ou no cliente. Cinco controles de val idação estão disponíveis no Visual Basic . O intervalo pode ficar entre dois valores (como uma data inicial e uma final) ou entre dois controles. Pode ser útil quando um dos outros controles de va lidação não atende sua necessidade ou as informações válidas precisem ser detenninadas por meio de algum pro- o o o o . Em seguida. uma data). enfrentaríamos problemas com a incompat ibilidade de alguns navegadores. como números telefônicos. no qual pode-se querer que o usuário selecione uma data que esteja dentro do intervalo de informações annazenadas em um banco de dados.NET. Se.NET.NET. • Requi redFi el dVal i datar Assegura que um campo tenha sido preenchido. esse código é executado no servidor ou no cliente. Por exemplo. No primeiro caso. Sendo o mais flexível dos controles de validação. Se coincidir. O valor é comparado com uma expressão regular. CompareVa 1idator Assegura que dois campos estejam coincidindo ou que um campo seja comparado a algum valor. o controle Va 1i da tar se cert ificaria se o valor digitado em um terce iro controle estaria entre os outros dois. você pode ter um controle no qual o usuário deve inserir um valor mínimo. Vários controles Va 1i dator que tomam a validação de fomlUlários muito mais fácil foram incluídos no Visual Basic . poderia fazer com que as informações fossem passadas entre o cliente e o servidor desnecessariamente. Isso pode significar campos específicos preenchidos. Comparar um campo com algum valor será adequado se desejar que o usuário insira um número positivo ou se a entrada do usuário tiver de inclu ir um tipo especial de informação (por exemplo. CustomVal idator Permite que você adicione seu próprio código para validar o campo. ou apenas alguns deles. mas com valores que estejam dentro de um intervalo. RangeVa 1i datar Assegura que o va lor digitado em um campo esteja dentro de um intervalo. Os controles processarão a va lidação no servidor ou no cliente se detenn inarem que o navegador tem essa capacidade. No passado. dator Quando você criar formu lários de entrada de dados para a Web. Pode ser úti l para valores que precisem apresentar uma certa estrutura. Se o código estivesse no servidor.

Adicione um controle RangeVa 1i datar próximo ao controle Requi redFi el dVa 1idator que você posicionou perto do campo . Mais uma vez. há duas o utras opções. Deve ser configurada para apontar para outro controle (pelo nome) do mesmo formulário. copie ou abra o projeto ou o fonnu lário anterior para editá· lo.4 Prop riedades Com uns aos Controles de Val idação Descrição Esta é a propri edade ma is importante de todos os controles de val idação. E úti l por fornecer um único local para todas essas informações. As mais importantes entre essas propriedades estão descritas na Tabela 10. txtVerb e txtOccupa t i on). e RangeVal idator para se certificar de que um número apropriado foi digitado no cam po txtNumber. Propriedade ControlToValidate ErrorMessage É a mensagem a ser exibida se houver um erro com o controle de validação. Esse é o controle que será monitorado pelo controle de validação. txtNumber. Pode empregar o contro le Requi redFi el dVa 1idator para assegurar que o usuário tenha inserido as infor· mações nos campos certos. Se o valor fo r defi nido como Stat i c. Elas estão relacionadas com o controle que monitoram e com a maneira de exibir o erro. ErrorMessage nunca será exibida. Arraste um controle RequiredFieldVa lid ator para perto de cada um dos controles TextBox re· manescentes (txtName. Por padrão. erro de todos os controles VaI idator na mesma página. t adequado quando não se deseja espaços em branco no formu lário. Isso será úti l se você quiser garant ir a o rganização de sua página da Web. Você adicionará os controles Validator a ele. Para concluir. Você pode usar alguns desses controles para encerrar o aplicativo Madl i b do exemplo. Além desses cinco. Use a lista suspensa da ja nela Property para selecionar o controle monitorado. Dynami c ou Nane. O valor Dynamic sig nifica q ue o controle não ocupa rá espaço até que a propriedade ErrarMessage seja exibida. Essa configuração só é úti l com o controle Val idationSUlTIlIiIry (que mostrará o erro). ela é configurada como Static. Ela deve ter informações suficientes para permitir que o usuário determine o que está errado e como corrigir o erro. também há o controle Va 1i dat ionSumnary. por exemplo. se o campo for deixado em branco.280 Dia 10 cesso . Os cinco controles de validação possuem várias propriedades importantes em comum.por exemplo. se esta propr iedade for configu rada como None. se o valor tiver de ser uma entre várias entradas que se encontrem em um banco de dados. mesmo se essa mensagem não fo r exibida. TABELA 10. é possível abranger todos os erros em um resumo com o contro le ValidationSunma ry. Para concluir. que exibe todas as mensagens de . o espaço ocupado por ErrarMessage estará sempre preenchido. no entanto.4. Display Esta é uma propriedade um pouco estranha que def ine como o controle Va l idator apa recerá na página da Web.

Já que Rangev a1i da tar pode ser usado para testar vários tipos di ferentes de valores (como inteiros.5 Controle Prop riedad es para os Contro les Val idatar do Formulário Madl ib Propriedade 10 Valor RequiredFieldValidator reqName txtName Please enter a name reqNumber t xtNumber Please enter a number Dynamic rngNumber txtNumber Please ente r a number from 100 and 1000 Dynamic In teger (inteiro) 1000 100 ControlToValidate ErrorMessage RequiredFieldvalidator ( 10) ControlToValidate ErrorMessage Display RangeVa 1 i da tor (10) ControlToValidate ErrorMessage Display Type MaximumValue MinimumValue RequiredFieldValidator (10) reqVerb txtVerb Please enter a verb Oynamic reqOccupation txtOccupation Please enter an occupation Dynamic valSummary ControlToValidate ErrorMessage Display RequiredFieldValidator (10) ControlToValidate ErrorMessage Display ValidationSummary ( 10) Precisamos fazer uma pausa para descrever as três propriedades de RangeVa 1i datar que você não atribuiu antes.Construindo a Interface com o Usuário com os Formulários da Web 281 txtNumber. a propriedade Type não é tão óbvia. . Por fim .5. Embora seja evidente o sentido de Maxi m umVa 1ue e M nimumVa 1ue com relação i a algo chamado Ra ngeVa 1i datar (val idação de interva lo). Confi gure as propriedades de cada um desses controles como mostrado na Tabela 10. TABELA 10. adicione um controle Val idationSunmary em uma linha própria entre os bo~ tões e o controle 1bl Resul t.

..Io .7)...•• .SlOtY • En". Oouble (dup lo) O mesmo que o inteiro..t. Você verá mensagens de erro vennelhas aparecerem no formulário..- I -. o mesmo que o inteiro....... Para fazê-los func ionar. • Date (data) abril de 1986. "........op..8... você não prec isa adicionar nenhum outro código..... Só os va lores inteiros sào usados.... • Currency (moeda) decima is do valor. Todas as mensagens de erro devem desaparecer e nossa história será exibida...: (" P-k1 (" F"""""d (" F"' .. faz com que o controle verifique se o valor está alfabeticamente entre as duas extremidades.- f... • En« . b ln .~ de m/idação.... · ~.moti.... Construa e visualize a nova página da Web (veja a Figura 10. um valor igual a 27 de agosto de 1964: seria aceito em um intervalo entre 23 de novembro de 1963 e de Agora verificaremos por que os controles Va 1i dator são tão úteis. .. porém incl uindo as quatro primeiras casas ]2 Compara os valores como se fossem datas..'>&< ~ -.. dd t_ d (" l. > • .. a propriedade Type identifica o tipo de informação que será com· parada... .282 Dia 10 valores financeiros ou datas). FIGURA 10.. porém incluindo a parte decimal do valor e das extrem idades do interva lo.~ ~r.. • . digite valores corretos em todos os campos e selecione o botão Write Story......"f1'I (" Sbo<l«d (" S. Por fim.. tente dar um clique no botão Write Story... Se isso não acontecer. portanto. (" Bb: (" Enud !. Provavelmente surgirá algo semelhante ao formulário da Figura 10.". • • Integer (inteiro) Compara o valor com as duas extremidades para assegurar de que faz parte do intervalo. . C I •"'' ' >&< I • c . ~ .. Tente deixar alguns cam pos em branco e exclua o algarismo 500 que é o valor-padrão para o campo do número. Ela pode ter um dos valores a seguir: • Stri n9 O padrão..7 O fo rmulário Mad 1i b mostrando os COl1lrole. d (" E<.. Tente inserir um valor que esteja fora do intervalo aceito para o campo do número...(" H~ (" ~d (" lo......tioo: ~r.

....1"...... bu. e os fonnu lários da Web tomam sua criação bastante fác il.. "00) 1Ioeo pkwd """ • .: .. Ma<! IÃI • • ." .rf' .... A ..".. você começará a exam inara programação orientada a objetos. '. ajudando-o a criar com maior facilidade rotinas de validação e controles complexos.~. Colocando o código novamente em um servidor (que você possa controlar).. .. c::================Jr:rrcr: ~~_ ~... Embora apenas simular uma experiência como a que se obtém no Windows já seja o suficiente para a maioria das pessoas. 1_ _ L· .~. le ) 0Dd 1000 • l'lt....... 1_ .. wb ..m f ~"h". Aprenderá qual a relação que a POO tem com o Visual Bas ic ...li!: "..... Na próxima lição.11. • '7 9 'õ Q & . r"" nua" ••• ..".PIt.- ." ..10<1' .rio.."0 11" " .....'" • 00 . . o _ pIoyt< .. PIt." • ftII> .. mostrando os erros enCOlI/rados na I·olidaçcio.... .. 283 "'r:ll:! FIGURA 10. . <=r a.."bo"".."."_. ·•.... ·_. .... . 12. brIW ....... Eles perm item que você use as mesmas técnicas que empregaria para desenvolver ap licativos para microcomputadores na construção de um aplicativo da Web que funcione em qualquer navegador...:J 1( "d.NET Framework... " 000' l/IO~ _.rn • l'lt. os formulários da Web vão além.. "' I~ ...... .uma interface com o usuário sofi sticada e recursos compatíve is com vários navegadores... P&R P Preciso ler um servidor Web disponível para usar os formulários da Web? ...Of<l O< • <lo ... .l t:l a: ... eS.... :: Resumo • l'lt_ = • """". •••• ~" ..... "'.Co nstruind o a Inte rface com o Us uá rio com os Fo rmulá rios da We b .."._.. 100 lO 1000: "f'. 'Pt.' .... a.<d r a.. ...'_' G /à .._ . Perceberá que até aqui já esteve invest igando os objetos. na forma do ... o [..... oC_do (aIuaIy t>.... II!l . ml A n... ~ n. ".-- •.. «upolioo: r ...""lO .1..r r Fn&I~ r lt>wJ r Sbo<k..do ........0 1: r.'" . oj""....... '"' ' 0 ..&.. assim como dos formulários e controles que tem usado...NET e com a programação em geral.. 1 ..oI .8 O formulário Mildl i b rolo u....-........_ I!I'..d r P_k... ...."...-... r Fruw_ r E<_ r!totnped r ~ r SO<i<lm<d r 1.. . a~) _ _ pm«lliiod eod ... r\: .. .~_ • Os apl icativos da Web estão cada vez mais importantes..-""'13 . """"...• "I<in~ orr.. é possível extrai r o mel hor que há nas duas alternativas para chegar ao objet ivo pe lo qual os desenvolvedores se empenharam ..

O usuário deve inserir sua senha duas vezes para garanti r que tenha sido digitada de modo correto.NET. Esse campo é de preenchimento obrigatório. Como posso exibir figuras em um formulá rio da Web? Exercício Crie um aplicativo para execução de registras. Depois que as informações tiverem sido inseridas. • • Um nome de usuário para usar em seu site. Os dois campos são de preenchimento obrigatório e devem ter a mesma informação. revisar o quejá aprendeu e começar a pensar em como colocar seu conhecimento em prática. Exam ine um dos bons livros que se encontram no mercado para aprender mais. os aplicativos da Web precisam de um servidor Web que reconheça o ASP. Esse campo é de preenchimento obrigatório e não pode ter mais do que 10 caracteres. Não é possível usar o PWS para criar ap licat ivos da Web. Esse novo aplicativo da Web deve permitir que o usuário digite: • Seu nome . P Posso usar o Windows 98 ou o Windows Me para criar c implantar os aplicativos da Web? R Esses sistemas operacionais já possuem. "Respostas dos Testes/Exercícios". O 11 5 vem com um serv idor gratui to da Web que faz parte do Windows NT Server ou do Windows 2000 Server. Uma senha nova (lembre-se de que a sen ha deve ser mantida em segredo). ter uma boa formação prática nessa linguagem ajudará. Que controles o ajudarão a navegar entre as páginas de um aplicativo da Web? 3. P Como posso aprend er mais sobre escreve r códigos HTML? R Embora os fo nnulários da Web tornem o conhecimento da HTML quase opcional.284 Dia 10 R S im. Os sistemas Windows 9x podem ser empregados na geração de aplicativos da Web. As respostas do teste estão no Apêndice A. mas não são plataformas boas para sua imp lantação. ou d isponibili zam. Elas serão então mostradas para ele. Você deve criar aplicativos da Web uti lizando o [I S no Windows NT 4 Server ou no Windows 2000 . Se você pode adicionar texto a uma página da Web apenas por meio da digitação. como o Internet Informatian Server (11 5). o usuário deve dar um clique em um botão. o Personal Web Server (PWS). Teste 1. por que precisaria dos controles Labe l? 2. Workshop o Workshop foi planejado para aj udá-lo a antecipar possíveis dúvidas. .

Mesmo hoje. não conhecia sua localização. inc luindo: • • Termos importantes relac ionados aos bancos de dados. um dos autores deste livro foi ficando cada vez mais atrapalhado com a sua coleção de CDs. A preocupação com a colcção de CDs se tornou real quando ele decidiu limpar sua grande pi lha de discos e tentou organizá-los em algo parecido com uma classificação. Aspectos básicos da SQL. Só há pouco tempo. Um Banco de Dados É a Solução para Todos os Problemas Cotidianos Nos últimos anos. Uma breve introdução aos dados na platafonna .Semana 2 DIA Introdução aos Bancos de Dados Computadores são boas ferramentas para trabalhar com dados. cm que se utilizam os computadores para urna enorme variedade de tarefas.NET. quando sabia. o processamento de dados ainda faz parte de quase todos os aplicativos empresariais e de muitos outros com finalidades diferentes. principalmente em grandes quantidades. Nesta lição você aprenderá sobre os bancos de dados. . no decorrer da história desses dispos itivos. ele percebeu que quase sempre ouvia apenas um ou dois CDs específicos porque não sabia exatamente o que possuía ou. e. • • Dicas sobre proj etas de bancos de dados. a maioria dos programas foi escrita exatamcnte para fazer isso.

Pois bem . A Decisão É Tomada Todas as opções acabaram sendo muito trabalhosas. separando os discos em grupos de pop. . ArtistFirstName. vamos supor que todos os dados tenham sido inseridos em um arquivo de texto no computador. poderão ser visualizados de várias maneiras. depois que estiverem no sistema. com cada linha desse arquivo representando um CD. músicas natalinas e por aí afora.).lo no final e prej udicar seu ótimo sistema de posicionamento alfabético? No final . Os campos e entradas possíveis teriam a aparência a segu ir: ArtistName. Se preferir vê-los pelo título do CD. Se você quiser visualizar os CDs por anista. ninguém precisa de dois CDs iguais de melhores s ucessos. Sting. não é assim Ião surpreendente . mas a vantagem de usar um computador para executar a organização é que. Há tantas decisões a serem tomadas.já que há muitas maneiras diferentes de ordená-los. organizar os CDs em um único fichário não é lima tarefa tão simples quanto pode parecer. COTitle . A lgo tinha de ser feito rapidamente. O que se deve fazer se ele lançar mais um álbum? Será necessário mover todos os outros CDs para a frente a fim dc criar espaço. 1987. . A necessidade de tomar uma decisão se tornou óbvia quando. Se um novo CD tiver de ser inc luído.ele chegou a essa conclusão em muitas outras situações (tal vez muitas. mas será exibido em sua localização apropriada com base na vis ualização selecionada.. Fields Of Gold. . Pop/Best Of . Você pode organizar os dados de muitas maneiras. CDReleaseYear . ArtistLastName. a idéia de armazenar dados em um computador não é tão nova. Sting. nosso conhecido autor se deparou com dois (2t) CDs "Queen: Classic Hits. rock. apenas ordene os dados usando um campo chamado Artista. durante a limpeza de CDs.e isso não é nada contra o Queen -. Isso el imina muitos dos problemas enfrentados pelo pobre autor no cenário descrito anterionnente. Volume I" . Talvez por artista possa ser melhor (certificando-se de que os Barenaked Ladies venham antes do Boney M. Queen. ou por categoria. MusicCategories Sting. Brian Adams deve ser colocado na letra A (levando-se em consideração 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 espaços iniciais de seu fichário. a reordenação pode ser facilmente executada. na verdade ela sempre foi uma das finalidades mais comuns dos sistemas de com putador. o que parece ter sido a escolha feita pelos pais do autor nos idos dos anos 70. Nesse caso. não impona quanto ele goste de ouvir"Bohemian Rhapsody" . Pop Queen. ou será interessante apenas colocá. poderá ser adicionado ao final do arquivo de dados. No entanto. se você perguntar a sua esposa ou a um de seus poucos amigos que continuaram a sê-lo). Rock/Pop/Best Of Sting . Classic Hits Volume 1. 1994.Brand New Day. .Dia 11 Porém. pode ser mais simples decidir não comprar mais discos. e o autor chegou a uma conclusão s urpreendente: as informações sobre o CD deveriam ser inseridas em um programa de computador! Para ser sincero. 2000.

que contém uma única tabela de registras de CDs que chamaremos de Disc. então agora você conhece todos os termos que preci sará para descrever seu pequeno banco de dados. para ver um exemplo da leitura de um arquivo ou o Dia 17. e esse tipo de arquivo é relativamente fácil de ler. até o momento. mas não será preciso man ipular nada disso se COIl- . tomando esse arquivo um arquivo separado por vírgulas (ou delimitado por vírgulas). inclusive encontrar registros específicos. co/unas. Para implementar esses recursos. embora o exemplo desta lição. Uma nova linha marca o início do registro de cada álbum. Art istName. o banco de dados do exemplo é um simp les arquivo de texto. adicionar novos itens. As virgulas são usadas para separar as campos. Já que se trata de um banco de dados. Tão simples quanto parece. s6 apresente uma. não são permitidos espaços nos nomes das tabelas ou dos campos. "Controlando o Fl uxo dos Programas". CDReleaseYeare outros). excluir outros e alterar todo ou parte de um registro. indica que partes da informação estão armazenadas em cada linha. seria necessário escrever urna codi ficaç ão extensa. e um banco de dados pode conter muitas delas. às vezes chamado de linha porque os registras em geral são annazenados ou ex ibidos como linhas separadas com as informações.Introdução aos Ba ncos de Dados 287 NOTA Em muitos bancos de dados. você pode usá-lo para aprender alguns dos termos que empregará daqui em diante para se referir às diferente s partes de um banco de dados: Novo TERMO Cada CD listado nesse arquivo é um registro individual. (Veja o Dia 4.) Com seus termos e o banco de dados definidos. os campos em geral são conhecidos por oUlro nome. esse arquivo é um banco de dados e poderi a ser utilizado por um programa de computador que registrasse os álbun s. Mesmo se pudesse ler o arquivo. Como os registras. como iremos trabalhar com esses dados em seus programas de computador? Como já mencionei. A primeira linha desse arquivo. o grupo completo de registras (todos com o mesmo conjunro de campos) é chamado de tahela. seria preferível poder manipulá-lo usando alguma das maneiras-padrão. para obter mais detal hes sobre as exce lentes classes de le itura de arquivos do Framework.) No entanto. (Espero que a utilização que se faz do termo ' registro' para descrever tanto os lançamentos musicais quanto uma parte do banco de dados não gere confusão. e cada item desses é chamado de campo (nesse caso. CDTitle. " Usando o . portanto o nome dos campos teve de ser alterado para evitar problemas de compatibil idade. Novo TERMO A Passagem para um Banco de Dados Real Certo. vários trechos da infonnação sobre cada CD são registrados. corno o exemplo se encontra no mOmento. você meSmO teria de analisar cada linha dos dados e manipular todas as cal unas.NET Framework". chamada linha do cabeçalho. Novo TERMO Dentro de cada registro. porque são com freqUência annazenados e exibidos como colunas individuais com infonnações.

Dia 11 vertermos seus dados para o fonnato de um banco de dados como o Access ou o SQL Server. produzindo uma instrução como a da linha a seguir: SELECT * FROM Oisc Embora você provavelmente irá ver instruções SQL como essa em muitos exemplos e até em aplicat ivos. A SQL (Struclured Query Language) fo i desenvolv ida para fornece r uma linguagem com um de acesso aos bancos de dados. poderia executar esta instrução SQL: SELECT ArtistName. a instrução SELECT é usada para recuperar dados de um banco de dados. O que se deseja sempre é recuperar a menor quantidade possível de infor- . se você quisesse recuperar todos os títulos de CDs junto com os nomes de seus artistas. Uma Introdução à SQL Depois que os dados forem armazenados em um banco de dados. Esses sistemas gerenciadores de bancos de dados podem manipular o armazenamento de suas infonnaçôes e também responder solicitações de recuperação e alteração desses dados. COTitle FROM Oisc Ela retomaria um conjunto de dados com dois campos. Muitos comandos diferentes da SQL podem ser usados. Essa linguagem contém comandos para manipulação de registros nas tabelas do banco de dados e tem suporte até certo ponto de quase todos os softwares gerenciadores de bancos de dados dispon íveis. você ainda terá de manipulá. poderia usar * em vez de uma lista de campos. A inclusão de novos registros. tem a aparência a seguir: SINTAXE SELECT <nome dos campos> from <Tabela> Com o banco de dados de CDs como exemplo. mas os que abordarei aq ui manipu lam: • • • • A recuperação dos registras dos dados. Os sistemas de bancos de dados possuem muitos recursos. Esta instrução. Recuperando Registras com a Instrução SELECT Em SQL.los a partir do programa. Como alternativa. mas não precisará mais se preocupar com todos os detalhes. e uma linha para cada registro da tabela Disc. em sua forma básica. se você qu isesse obter todas as colunas de uma tabela. mas o serv iço comum que eles fornecem é manipular os detalhes de armazenamento de dados e liberá-lo de qualquer interação fisica com as infonnações. gerenciando todos os detalhes de layout de arqu ivo e armazenamento. A exclusão de registras. A alteração dos regist ros existentes. não é uma prát ica recomendável recuperar todos os campos de uma vez.

CDTitle FROM Disc ORDER BY ArtistName Desc. em seguida. Faça Especifique cada campo que quiser recuperar em uma instrução SQL. SELECT ArtistName. crescente. um campo especificado na cláusula ORDER BY será classificado em ordem crescente (em relação ao valor ou à ordem alfabética. ajudará a evitar confusão.Introdução aos Ba ncos de Dados mações. ordenando-os primeiro pelo nome do artista (Art is tName) e. a menos que esteja certo de que precisará de cada campo que existe na tabela e de todos os outros que possam ser adicionados posteriormente. A instrução SQL a seguir possui o mesmo efeito que a anterior. O exemplo a seguir ordenará por artista em ordem alfabética inversa e. SELECT ArtistName . de A a Z se o cam po armazenar texto. e em geral isso não significa todos os campos. CDTitle ASC Faça Especifique ASe mesmo se estiver usando DESC. CDTitle A ordem-padrão. Não Faça Não use * para indicar todos os campos. Se você quiser que a ordem seja inversa. Essa cláusula. mas você pode adicionar uma cláusu la à instrução SQL para configurar a ordem da classificação. em seguida. A instrução SQL a seguir recupera os campos Arti stName e CDTi t1 e de todos os registras da tabela Disc. decrescendo de Z a A. Não ordene mais campos do que os necessários porque isso afetará o desempenho. ORDER BY. . especifique uma palavra-chave DESC próxima ao trecho da cláusu la ORDER BY que deseja que seja classificada na ordem inversa. permitindo que possa ser espec ificado mais de um na ordenação. CDTitle FRDM Oisc ORDER BY ArtistName . mas é mais exp líc ita sobre o que está acontecendo. então. CDTitle FROM Di sc DRDER BY ArtistName Desc . Ordenando os Resultados A ordem dos registras retornados não foi especi ficada nas duas consultas mostradas até agora. Recupere a menor quantidade de dados ou de campos e registras passivei pa ra fornece r um desempenho melhor. também pode ser especificada com o uso da palavra-chave ASC eX3tamente como Desc é empregada. por título de CD em ordem crescente. pelo titulo do CD (CDTit1e) dentro de cada conjunto de regi stros de artistas: SELECT ArtistName. até atingir o ult imo registro retornado). COTitle Por padrão. usa uma lista de campos. Seja cuidadoso para não prejudicar a longo prazo o desempenho de seu código apenas para obter uma economia no tempo que leva a digitação em seu programa.

2000 .. ainda nesta lição em "Problemas Comuns dos Bancos de Dados e Suas Soluções". ArtistLastName .. Nessa cláusu la. você pode .valor 2• .. você poderia usar uma instrução I NSERT para adicionar um disco novo: INSERT INTO Oisc (ArtistName. ) Vo ltando ao exemplo da biblioteca de registro de CDs. 'Lenny' .Dia 11 Especificando um Critério As instruções SELECT mostradas até agora recuperavam todos os registras da tabela Disc. COReleaseYear FRDM Disc WHERE (ArtistName = 'St1ng' ANO COReleaseYear => 1984) DR (ArtistName= 'The Police' ANO COReleaseYear < 1984) Essa consulta levanta uma questão relativa aos bancos de dados que sempre foi incômoda: o di sco deve ser inserido como Pol i ce ou Pol ice. uti lizar o campo que quiser. ' Rock/Pop/Sest Df') Observe as aspas simples usadas em todos os valores excelO em COReI easeYear. Já que CORe I easeYea r não é um valor textual. representando o valor do campo Arti stName? Detalharei esse e outros problemas comuns relacionados aos bancos de dados. MusicCate90ries) VALUES ('Lenny Kravitz'. na maioria dos casos os registros novos são adicionados às tabelas regularmente. ArtistFirstName . " .los. . COReleaseYear FRDM Oisc WHERE ArtistName = 'Sting' Observe que o campo usado para restringir os resultados não foi um dos retornados.campo 2•. 'Greatest Hi ts' . Adicionando Novos Registras A ordem na qual esta li ção aborda essas instruções SQL se apresenta um pouco invertida. a cláusula WHERE. a instrução SELECT a seguir poderia ser empregada: SELECT COTitle. a instrução SELECT a seguir só recuperará os CDs do Sting: SELECT COTitle. Você aprendeu a recuperar dados no banco de dados antes de saber como inseri-los! Embora alguns deles sejam apenas de leitura. além das melhores mane iras que conheço para resolvê. E possível combinar vários critérios empregando os operadores ANO/DR e usar parênteses para determ inar como esses critérios serão apli cados. . COTitle. O comando SQL empregado para inserir esses registros novos é chamado INSERT e apresenta este formato básico: INSERT INTD <Tabela> (campo l. Usando esse recurso. ) VALUES (valor l. mas e se você quiser recuperar só um determinado registro ou um conjunto de registras com base em um critério específico? Outra cláusula pode ser adicionada a uma instrução SELECT para se encarregar di sso. Para recuperar os discos lançados depois de 1984 cujo nome do artista é St ing e os lançados antes de 1984 pelo grupo The Pol ice. The. " COReleaseYear. Essas aspas são necessárias em qualquer valor text ual em pregado nas instruções SQL para diferenciá-lo dessas instruções. podem ser especi ficados quantos critérios se desejar para restringir que linhas serão retornadas. não precisa ser co locado entre aspas.'Krav it z ' .

a instrução UPDATE pode ter uma cláusula WHERL Sem essa cláusula. ela executará sua atualização em todos os registros da tabela.cCategories para Pop: UPDATE Disc SET MusicCategories = 'Pop' WHERE ArtistName = 'Barena ked Ladie s' Esse tipo de reavaliação de categorias e agrupamentos em um banco de dados é algo que você pode querer fazer de vez em quando para evitar confusão. e tornar uma cláusula WH ERE tão intrincada quanto quiser. Embora os exemplos desta lição tenham sido simples. considere esta atualização em uma tabela fictícia que fornece a cada funcionário 10% de aumento: UPDATE Fu ncionaria SET Salario = Salario * 1. que provavehnente não é o resultado pretendido. a instrução UPDATE Disc SET CDTitle = 'Novo Título' configuraria todos os campos COT i t 1e como' Novo Ti tul o' . A instrução SQL a seguir atualiza todos os registros dos Barenaked Ladies na tabela Disc alterando seu valor em Mus. no entanto. contanto que a de valores esteja na ordem correta. você pode atualizar vários campos de uma só vez. Ponanto. Como exemplo.Introdução aos Ba ncos de Dados 291 É possível saltar a lista dos nomes dos campos. Por exemplo. No entanto. permitindo que você altere de imed iato um ou mais campos de quantos registros quiser.1 Na ma ioria dos casos. esse é outro exemplo de como você pode econom iZ:'lr tempo na criação do cód igo. será preferível especificar uma cláusu la WHERE para restringiras registras afetados a um grupo menor ou mesmo a um único item . Alterando Registros A SQL fornece a instrução UPDATE para que modificações sejam feitas em registros existentes. Essa instrução possui a sintaxe básica a seguir: SINTAXE UPDATE <Nome Tabela> SET <nome campo> = <valor novo> Como na instrução SELECT. porém tomando sua manutenção mai s difíci l e fazendo com ele esteja mais propenso a apresentar alguma fa lha no futuro. a instrução UPOATE pode executar ações mais complexas. é útil poder alterar vários deles com uma instrução UPDATL Novos valores configurados com o uso dessa instrução podem ser baseados no conteúdo existente no campo. Embora em geral seja atua lizado apenas um registro. separando cada atribuição com uma vírgula. .

embora seja recomendáve l ter cautela ao executar algo que não seja uma consu lta SELECT até que j á se tenha mais segurança para especificar as cláusulas WHERE. Você aprenderá mais detalhes sobre ela no decorrer desta lição. Se ti ver o SQL Server instalado. Buyens MS SQL Serva 2000 . que faz parte da instalação do Visual Studio. porém importante por- que sem ela. Se quiser praticar a SQL fora dos exemplos que executará neste li vro. Tente pesquisar os com andos SQL descritos anteriormente. Essa ferramenta fo i projetada para permit ir a execução de consultas e a visual ização dos resultados. Art istLastName 'Sumner' = WHERE ArtistName = '5tin9' DR ArtistName 'Mr. = Art i stFirstName " 'GordOrl'. Riordan Outra boa fonte. o que é mais comum. Na tabela Disc.Sting' Removendo Registros Indesejados Você recuperou. que você provavel mente já possui. é o material da biblioteca Microsoft Solution Deve lopers Network (MSDN). Alguns muito bons são : • • • Desenvolvendo Bancos de Dados na lVeb Dominando SQL Serva 2000. . mas esses exemplos não fornecem uma abordagem com pleta do assunto. adicionou e alterou seus registras. sem exec utar uma operação básica. A SQL forn ece uma instrução DELETE que usa uma sinta'(c simples: SINTAXE DELETE <Tabela> WHERE <critêrio> Nesse caso. A in strução SQL mostrada aqui removeria todos os di scos de Gordon Lightfoot (exeeto um): OELETE Di se WHERE Arti stFi rstName " ' Gordon' ANO ArtistLastName " 'Lightfoot' ANO COTitle ! = 'Summertime Oream ' Para Onde Ir a Partir Daqui Abordando a SQL A SQL é realmente importante. você poderia usar essa instrução para remover um ccrto grupo de registros ou. como com UPDATE. exclu ir apenas um. Gunderloy Pas~·o a Passo.Passo a Passo. execute o Query Anal izer (veja a Figura 11 . mas também é um tópico extenso e complexo em s ua abrangência. 1). que é uma das ferramentas que vem com o SQL Server e está dispon ível como um ícone na pasta do men u desse programa. e há vários li vros dedicados somente a essa linguagem.292 Dia 11 UPOATE Oisc SEr ArtistName = '5ting'. poderá fazê -lo com qua lquer programa de banco de dados q ue tiver disponíve l. Quase todos os bancos de dados usam a SQL em algum nível. a cláusu la WHERE ê opcional. você excluirá todos os registras da tabela especificada. a excl usão. rastreando a seção de referênc ias à SQL da bibl ioteca MSDN.

O objetivo é produzir um banco de dados que seja eficiente para a pesquisa. portanto. Problemas Comuns dos Bancos de Dados e Suas Soluções Os softwares de bancos de dados armazenarão s uas tabelas. se a linha origina l de dados fosse como a descrita a seguir: . Percorrere i cada um dos princ ipa is problemas de lima tabela desse tipo e mostrare i como evitá-los nos bancos de dados que forem criados. os dados não serão confiáveis. ~. mas... Há muitas maneiras diferentes pelas quais é possível organizar o mesmo conjunto de dados. mas o recurso mais aval/rado se el1comra lia sua capacidade de aI/alisaI' o desempellho e a eSlrl/fl/ra das COlIs/lllas. é fáci l gerar dados inconsistentes porque ela niio foi estruturada para evitar ou pelo menos minimizar esses problemas. bal/co de dados.. Inconsistências de Atualização Suponha que um usuário decida atualizar uma linha da tabela Disc porque o valor de Arti st está incorreto. . Nessa tabela.1 O Quel)' Alla/yser permite que I'oci! execute instruções SQL direcionadas a seu . Talvez Sling tenha sido especi fi cado quando o certo ser ia Bruce Willis. O usuário poderia executar essa instrução SQ L: UPOATE Oisc SET ArtistName = 'Bruce Willis ' WHERE ArtistName = 'S ting' and COTitle = 'The Return Of Bruno' Essa é uma instrução SQL perfeitamente adequada. Considere o exemplo de uma tabela. mas é aconselhável dificultar a introdução de dados inconsistentes.Introdução aos Bancos de Dados 293 FIGURA 11. é aí que a maioria dos problemas ocorre. mas como os dados serão estruturados é algo que só compete a você e. Se partes diferentes dele não estiverem em concordância. 00 • • • n ••~ . mas apenas algumas de las funcionarão bem em um sistema de banco de dados. A inconsistência é o maior problema dos bancos de dados. cam pos e registros. na qual intencionalmente cometemos alguns dos erros mai s comuns.

ArtistFirstName. irão trabalhar com os dados exatamente da manei ra esperada . Pop Barenaked Ladies. portanto. Nâo confie no fato de que seus usuários. Seria necessário atualizar cada registro que no momento tivesse o nome Prince nele. Stunt. Isso resultaria em um erro exibido para o usuário ou algo parecido. Outra inconsistência com um que pode ocorrer quando se usa urna estrutura de banco de dados como a da tabela Disc é que podem existir muitas variações de dados que deveriam ser idênticos. 1999. É claro que essa seria uma instrução simples: UPDATE Disc SET ArtistName = 'O artista anteriormente conhecido como Prince' WHERE ArtistName = 'Prince' Pressupondo que ninguém tenha escrito Prince errado em algum local. ArtistLastName.. Novamente. mas se você estivesse lidando com depat1amentos de uma empresa ou nomes de produtos em outros bancos de dados. Rock/Pop Uma consulta SQL criada para encontrar todos os álbuns dos Barenaked Ladies poderia ser escrita da segu inle maneira: SELECT * FROM Disc WHERE ArtistName . selecionemos de modo aleatório o Prince. mas Arti stFi rstName e Arti stLastName não o fazem. MusicCategories agora teria esta aparência: Bruce Willis . inclusive seus própriOS programas. mas o usuário ou o software teria de assegurar que os dados fos sem consistentes. seria um grande problema. O usuário simplesmente não conseguiria a infonnação correta. Gordon. essa instrução SQL atua\izaria todos os registras necessários. no entanto. . Maroon. Rock/Pop Arti stName reflete a informação correta. 1986. Você tem de fazer tudo que puder no nível do projeto do banco de dados para evitar a inconsistência. 2000. The Return Df Bruno. -. Isso poderia ter sido evitado se todos os três campos tivessem sido atua[izados. infelizmente. não làz parte do código ASCII e. o que é uma inconsistência. Pode ser que . Faça Estruture seu banco de dados para evita r a inconsistência. CDTitle. 1993.) Suponha que um artista. . (Essa sit uação não é comum quando se trata de müsica. Gordon . . 'Barenaked Ladies' Esse código retornaria a primeira e a ült ima das três li nhas listadas do código anterior. Pop Barenaked Ladies. mas não encontraria o CD chamado ' Gordon'.. você não poderá inseri-lo em seu banco de dados). Aqui estão três linhas da tabela Disc: . Sumner. altere seu nome da simples palavra ' Prince' para um simbolo impronunciável (que. . The Barenaked Ladies... você está confi ando no fato de que o usuário ou o software esteja ciente de que ê preciso executar várias alterações.Dia 11 ArtistName.• . o terceiro problema com re lação aos campos Arti st ocorrerá se um artista alterar seu nome. CDRelaseYear.

ArtistName . você ad icionará um campo a essa tabela que terá um valor de Art i stIO para cada registro.• 4. vinculando-a a outras tabelas. Greatest Hits.Introdução aos Ba ncos de Dados 295 eles não usem uma instrução UPDATE como a anterior. porém possui só uma chave primária (embora mais de um campo possa ser usado ao mesmo tempo para formar lima chave primária). em que Art i s tIO ident ifica apenas um artista espec ífico. obteremos a tabela Artist a seguir: ArtistID. poderia ser usado o campo Arti stName. Na tabela Disc. na tabela Artist. ele pode ser chamado de chave externa porque é empregado como um vínculo de retorno a uma tabela diferente (veja a Figura 11.5tin9 . você adicionará um campo exclus ivo para esse fim . 80n Jovi. • 3. Pop 4. Queen . Ao examinarmos o conjunto aluai de informações sobre o artista .2). e o método mais comum é gerar um campo contendo um número que seja automaticamente incrementado. você deve separar as informações sobre o artista para que fiquem em sua própria tabela e armazenar apenas um va lor com o disco para vincu lar as duas tabelas.The Barenaked Ladies . CDReleaseVear. Em geral é melhor escolher um valor que com certeza não vá ser alterado a menos que o registro vinculado.as informações sobre o art ista são armazenadas com o registro de cada disco. ArtistfirstName .. The Police . portanto. Gordon. mas isso trará problemas se ele for alterado em algum momento. COTitle. . 1988 . tornando o banco de dados mais uma vez inconsistente. 5. Brand New Day . Inserindo esse campo a seu conjunto de informações sobre o artista. Eles podem alterar apenas uma entrada para o novo valor. esse campo seria denominado chave primária. .. seja excluído.os valores de Art is tName. Portanto. A situação fica ainda pior quando descobrimos que precisamos alterar todos os registros retornando-os para ' Prince' no final! Todas essas questões resu ltam de um problema na estrutura do banco de dados . Janet. um campo adicional tem de ser criado apenas para atuar como um identificador exclusivo de um registro. Na tabela Artist. Para esse valor. Janet Jackson. Rock/Pop ••• o campo Arti stIO é chamado de chave porque é usado para identificar uma entidade individual. 5umner 2. 2000.. ArtistLastName l. Art is tFi rs tName e Arti s tLas tName . Com freqUência é isso que acontece. Uma tabela em geral contém várias chaves externas. . embora o nome do art ista na verdade seja um conjunto independente de dados. . Jackson Cada registro da tabela Disc ainda prec isa ser associado a um artista. Para evitar os problemas descritos. MusicCategories I. A tabela Disc agora teria a aparência a segu ir: Ar tistID. não há nada que possamos garantir que não será alterado. • • • 45. em vez de todos os discos de Prince.

Quando duas tabelas estão vinculadas pelo uso de chaves primárias e externas. Se um usuário ou programa remover um valor do campo Artist. A chave primária de uma tabela que é inser ida em um campo de outra tabela para vincular as duas entidades é conhecida na última tabela como chave externa. A maneira de recuperar dados necessários no banco de dados também foi alterada. Para adicionar dados. e não a cada disco. diz-se que e las estão relacionadas. . que identifica uma entidade. então. será preciso exec utar duas instruções INSERT. na seção " ]ntegridade Referencial" .2 As tabelas Ar/isl Artist pj( _ e Oisc contêm campos-chm'e qlle I'inculam lili/a à Olll/'Q. na seção "Associações: Consultan· do Várias Tabelas de uma Só Vez". uma na tabela Artist e outra na tabela Disc. A criação de tabelas vincula· das separadas elimina os problemas di scutidos anteriormente. é chamado de chave primária da tabela. ArtistlD ArtistName ArtistFirstName AnistLastName I Disc I FK1 AnistiO CD Title CDReleaseYear MusicCatego ries Novo TERMO A chave é um valor. Novo TeRMO Por causa da transferência dos dados do campo Arti st para uma tabela separada. as instruções necessárias para adicionar e recuperar informações terão de ser alteradas.296 Dia 11 FIGURA 11 . em geral um campo. de um autor ou um número de seguro social. todos os discos que fazem referência a essa identificação do artista repenti namente se referirão a um registro da tabela Artist que não existe. Os métodos que usaremos para obter esses dados também serão abordados ainda nesta lição. já que as in· formações que você deseja agora estão contidas em duas tabelas. mas a de Artist ocorrerá apenas uma vez a cada artista. Quando um campo identifica exclusivamente cada registro de uma tabe la. mas gera uma nova maneira de in· troduzir dados inconsistentes . como o nome de um estudante. Discutirei como lidar com esse problema um pouco mai s adiante nesta lição.chaves externas inválidas.

Esse tipo de campo precisa ser removido de seu banco de dados. as informações sobre o artista est ão armazenadas na tabela Artist. mas o objeti vo do projeto do banco de dados é evitar a introdução de erros devido ao layout dos dados. Mus i cCategori es. embora esse seja um problema real. Termi naríamos tendo de adicionar o novo valor a um já existente. Esse relacionamento é chamado um-para-muitos ou. Isso pode parecer um pouco estranho porque os dados incorretos são uma questào de importância relevante. só uma tabela nova não pode man ipularo relacionamento entre as categorias e os discos. Nesse caso. O relacionamento entre o di sco e a categoria é mais com plexo.es = 'Rock' Isso retornaria os discos em que o valor de Mus i cCategori es fosse igual a Rock. Na verdade nào é um problema de um projeto de banco de dados se o campo Fi rstName de Sting for configurado como George em vez do nome certo Go rdon.Introdução aos Bancos de Dados 297 Inconsistência entre Locais Versus Dados Incorretos No novo layout da tabela. Se o usuário quisesse encontrar todos os seus discos de música pop ou que se enquadrassem tanto no conjunto rock quanto em 'c lássicos' (seria RoCk/Ses t Of ou Ses t Df /Roc k?). uma tarefa que seria extremamente dificil de real izar com uma instrução UPDATE. . ou você terá vários problemas com ele. uma ún ica categoria pode ser assoc iada a muitos discos e apenas um disco pode ser associado a muitas categorias.cCategor. Para corri gir essa instrução mu ltivalorada e evitar todos os problemas decorrentes dela. Isso produz um relacionamento muitos-para-muitos que você poderá mode lar usando duas tabelas novas. a finalidade do campo Musi cCategories era agrupar os CDs de um ou mais tipos de música. nos certificando de que ele já não estivesse lá! Tudo fi caria ainda mais complicado se em algum momento decidíssemos renomear uma categoria. O software e seus usuários é que precisa m estar atentos para evitar os dados incorre tos. Sest of /Rock ou qualquer outra informação relativa a mais que apenas uma categoria . Queremos evitar situações em que duas partes diferentes do banco de dados sejam discorda ntes sobre o mesmo trecho de dados. no caso George. Campos Multivalorados Um dos campos. por meio do formato a seguir: Rock/Pop. mas não os de Rock/Pop. co ntan t o que todo o banco de dados esteja consisten te e armazenando apenas um valor. Não estamos tentando impedir a ocorrência de dados incorretos. separadas das relacionadas ao CD. • E preciso ter algum conhecimento sobre o objetivo do banco de dados. Cada art ista pode ser associado a um núm ero qualquer de discos (ou a absol utamente nenh um ). O objetivo dessa separação é coibi r info rmações inconsistentes. que se encontram em Disc. Uma armazenará as próprias categorias. o que seria mais correto. A tualizar os dados de um campo multi valorado também é quase tão difícil quanto a situação comentada. no entanto. alterando-a de Pop para Popular por exemplo. O pri meiro problema ocorrerá quando o usuário tentar recuperar dados com base nas informações contidas ali : SELECT * FROM Disc Where Mus. pode conter mais de um valor de uma só vez.3). os problemas resultantes tornariam essa categori zação inútil. separaremos os dados em outra tabela. Diferente das informações sobre o art ista. a outra vinculará os discos às cmegorias (veja a Figura 11. nenhum-para-mllifOs.

. Usando esses mesmos campos-chavejá podemos associar os dados de uma tabela com os correspondentes da outra tabela. NOTA Quando você tiver mais de uma tabela envolvida em uma instrução SELECT. ou tabelas. Nesse caso. para cada um deles..3 Modelar IIfIl relac iO/1(1l1le/llo muitos-para-II/uitos requer três tabelas: as dilas PK emidades que eSTão relacionadas e lima tabela especial qlle exiSla apel/os PK i Arti~tlD para conectá-Ias. e produzir um único conjunto de resu ltados. ê passivei que um campo com o mesmo nome exista em várias delas. porém uma se relacionando com a outra através de campos-chave. será prec iso mais do que as s imples consu ltas SELECT que executou anteriormente para obter as informações que deseja. . Neste momento há algumas tabelas distintas. essa sintaxe pode ser usada em qualquer situação.armazenada na tabe la Disc) na tabela A rti st em busca do nome correspondente do artista (Art i s tName) . - . Detalharei como fazer consultas em relacionamentos do tipo um-para-multos e mUltos-para-mu ltos na seçao a segUIr. Arti stName CT WHERE Di sc . Há diversas maneiras de constru ir a instrução SHECT quando se quer trabalhar com múltiplas tabelas. faça uma pesquisa (usando a identificação do artista . mesmo quando só houver uma t abela envolvida.ArtistIO '" Oisc. No entanto. CDTitle FR M Art ist Di sc Artist. mas veja a seguir um exemplo: COOIGO SELE Art is t . . CD litle I As tabelas resultantes obedecem um padrão que sempre poderá ser usado para representar um relacionamento muitos-para-muitos . Essa instrução informa ao banco de dados que recupere todos os registras da tabela Disc e. Associações: Consultando Várias Tabelas de uma Só Vez Agora que você separou de modo adequado seus dados em várias tabelas.ArtistIO RESULTADO Nothi ng Li ke lhe Sun Sting Brand New Oay Sting lhe Barenaked Ladies Maroon lhe Barenaked Ladies Gordon .298 Dia 11 Dis<:Category FIGURA 11 . Isso pa- . é preciso especificá-lo uti lizando o formato tabe 1a _campo em sua instrução SE CT para assegura r que o banco de dados compreenda qual o campo deLE sejado..Arti st 10 .

ArtistID) . mas não houvesse nenhum disco na tabela Disc executado por ele. Se especificar LEFT OUTER JOIN. mas não é a melhor manei ra de criar associações. será considerada a primeira tabe la aquela que estiver à direita da instrução JOIN.ArtistID i ORDER BY Artist.ArtistID = Disc.COT i tle isc FROM D sc INNER JOIN Artist ON (Artist. e a palavra INNER 'omitida' será incorporada. mas se não consegu irem encontrar nen hum valor correspondente em uma delas. felizmente. Bem. você aprenderá lima sintaxe nova com a qual poderá especificar as informações sobre a assoc iação como parte da cláusula FROM de sua instrução SQL. no banco de dados do exemplo. a consulta retorna apenas os registros em que uma correspondência foi encontrada nas duas tabe las.ArtistIO) Essa instrução gerará os mesmos resu ltados que a do exemplo anterior que usava a cláusula WHERE. e ele o faz de modo muito rápido. SELECT Artist. mesmo assim retornarão os campos da primeira e anu larão (removerão) os valores dos campos que estiverem na segunda tabela. mas o artista Limp Bizkit nâo seria mencionado nos resultados.ArtistName = Disc. Se esse não for o resultado esperado. É possível especificar Disc JOIN Arti st. se você especificar RI GHT OUTER JO lN. você tivesse o artista Limp Bizkit na tabela Artist . mas não teve nenhum registro correspondente na tabela Disc. • A última instrução SQL usava uma cláusula WHERE para associar as duas tabelas. embora você tenha removido cuidadosamente Arti stName da tabe la Disc. No exemplo.ArtistName . o que com certeza funciona rá. todo o trabal ho é manipulado pelo banco de dados.Introdução aos Ba ncos de Dados rece trabalhoso. então.COTitle FROM Oisc INNER JOIN Artist ON (Artist. porém o Access não aceita essa fonna abreviada. A instrução INNER JOIN mostrada no código a segu ir produziria um conj unto de registros. As associações externas vinculam as tabe las uti Iizando as mesmas informações. mas. ele não fará parte do resultado. A reconstrução da instrução anterior com a sintaxe correta produzirá SELECT Artist . e pode ser chamada de associação il1lerna. ainda poderá produzir os mesmos resu ltados associando as tabelas Dise e Artist. Associações Internas versus Externas Com uma associação interna. Digamos que. Portanto. A palavra-chave OUTER pode ser preced ida por LEFT oU RIGHT para espec ificar em que direção a associaçâo deve trabalhar. Disc. isso signi fi ca que se um art ista foi listado na tabela Art ist. D . Novo TERMO Vincular duas tabe las em uma consu lta para recuperar dados relacionados chama-se • Qssocwçao. Você deve estar se perguntando qual tabela seria a primeira e qual seria a segunda. poderia usar urna associação externa. Em vez disso.ArtistName. a tabela à esquerda será a primeira. se em vez disso você quisesse todos os art istas listados na tabela Artist em seus resu ltados (mesmo se não tivesse nenhum disco de alguns deles).

o campo Arti stName seria retornado contendo Limp Bi z ki t .ArtistName. Já que nenhum registro correspondente seria encontrado na tabela Disc. ter os relac ionamentos no banco de dados impediria (o banco de dados retornaria um erro) que o usuário exc luísse um registro da tabela Arlisl se a tabela Disc possuísse algum registro com a ident ificação desse art ista. Integridade Referencial Nos casos em que existem várias tabelas. ele poderá garantir sua integridade impedindo a exclusão de um registro se esse tiver correspondências em outras tabelas. se você usasse uma instrução OUTER JOIN como mostro a seguir. será preciso usar duas associações~ lima entre Disc e DiscCategory e outra entre DiscCategory e Category.COTitle FROM Category INNER JOIN (Disc INNER JOIN OiscCategory ON Disc .COTitle FROM Disc LE FT OUTER JOIN Artist ON (Artist . a instrução SQL para recuperar todos os CDs que foram atribuídos à categoria Pop é mostrada a segu ir: SELECT Disc. poderá usar instruções de associação aninhadas como as mostradas no código anterior. Relacionamentos Muitos-para-Muitos Para modelar o relacionamento mui tos-para-muitos dos CDs com as categorias.4). no qual uma tabela está na verdade sendo associada ao resultado da associação de duas outras. .CategoryIO WHERE Category. Mesmo assim. Para fazer consultas nessas tabelas. faça com que o banco de dados tenha conhecimento dos vínculos entre suas tabelas defin indo as chaves e o relacionamento (veja a Figura 11. chamada DiscCategory.DiscID = DiscCategory . você tenninou com três tabelas dist intas: Di sc. Por exemplo. esse tipo de associação é adeq uado para a maioria das consultas. se um artista for referenciado por sua identificação em um ou mais registros da tabela Disc.Dia 11 Por outro lado. Para evitar isso. ArtistID = Disc. Oisc. CoTi t 1e teria um valor llulo para esse registro. Category e uma terceira criada apenas para esse relacionamento. SELECT Artist. então você terá dados inconsistentes se ele for excluído.Category = "Pop" Quando você tiver várias tabelas relacionadas. DiscID) ON Category.CategoryID = DiscCategory.ArtistID) Como você ViUll0S exemp los. o resultado de uma associação interna pode ser enganoso porque inclui apenas os valores em que uma correspondência foi encontrada entre as duas tabelas. há mais probabi lidade de serem encontradas inconsi stências. Quando o banco de dados tiver inrormações dos relacionamentos existentes em seu sistema. No sistema específico que criamos. Como di scutimos.

essa identificação não seria retornada.uma na tabela Artist e. Usando as chaves de geração automática. s t lOna primeira inserção. em seguida. precisaríamos que o novo valor de Arti stID vinculasse o novo CD ao novo artista. e isso estaria propenso a erro. se você tivesse de adicionar um novo CD à coleção e ele fosse de um art ista não existente em seu banco de dados. outra razão será discut ida ainda nesta lição em "Identificadores Exclusivos (GU IDs . Esses campos são sempre numéricos. • • Criando Chaves Primárias No exemplo. stNa me para encontrar os dados novamente. e para iniciar a contagem em um valor específico. Essa é uma razão pela qual é necessário um método alternativo de obter as chaves. Essa é uma boa maneira de manipular as chaves porque o banco de dados real izará todo o trabalho. não adicionaríamos um valor para Art. eles podem ser configurados para acrescentar urna quantidade definida. usar GUIDs em vez de números simples. outra na tabela Disc. . mas teria de usar campos como Art . você pode criar relacionamenlos para qlle esses possam ler S//(/ integridade garantida. cálculo na hora da inserção. sob certas ci rcunstâncias. que também é quase sempre I. Você poderia fazer outra consulta no banco de dados. ou um sistema que gerencie e incremente as chaves chamado gerenciadorde chaves. Di seIO).Globally Unique Ident ifiers)" . Por exemplo. Recurso do Banco de Dados o primeiro método para gerenciar as chaves está embutido em muitos bancos de dados e é um tipo especia l de campo que incrementa automaticamente seu valor quando uma nova Iinha é ad icionada. uma chave de geração automática pode causar problemas. Entretanto. Empregando apenas a SQL.4 Em seu programa de bal/co de dados. mas Oque não abordamos é a necessidade de obter ou gerar essas chaves sempre que um novo registro for inserido. em vez disso.Introdução aos Ba ncos de Dados 301 FIGURA 11 . mas. CategoryID. ele seria gerado de modo automático. quase sempre 1. seriam necessárias duas instruções INSERT . na segunda inserção (em Disc). I-lá mu itas maneiras pe las quais é possível man ipul ar esse req uisito: recursos internos do banco de dados. você term inou com chaves numéricas para todas as tabelas (Arti stID. sendo ele o Access 011 o SQL Se/Ter.

você poderia executar esta instrução (usando a tabela Art ist como exem plo): SELECT MAX(ArtistID) fROM Artist Essa instrução retornaria apenas o registro de um campo contendo o valor mais alto relativo às identificações existentes atualmente na tabela. nos qua is há várias cópias do banco de dados e essas são regularmente unificadas. Um exemplo em que isso acontece seria quando temos ban· cos de dados distribuídos. Hã vários desses operadores de agregação. e você terá a próxima identificação.criada pe lo banco de dados ou por meio de seus próprios cálcu los . portanto eles teriam obtido o mesmo valor para a identificação. Em uma situação dessas. apresenta dois prob lemas principais. O método em geral aceito para a criação de identi fi cações aleatórias é a utilização de um GU IO (Globally Unique ldent ifier). seriam produzidas identificações dupli cadas. Essa abordagem. um nômero . sempre que as inserções ocorressem em mais de um local. uma chave crescente . Esse prob lema pode serevitado com o uso de transações.não é adequada.Globallv Unique Identifiersl Em algumas sit uações. que recu· pera um valor calculado com base em todos os campos encontrados por uma cláusu la SELECT.Dia 11 Chaves Calculadas Como alternativa às chaves geradas por bancos de dados. Ele ocorre quando um ou mais registros do fi nal da tabela (as ident ificações mais altas) são excl uídos. ter registras diferentes compartilhando a mesma identificação em momentos distintos não é muito aconselhável. O segundo problema não pode ser ev itado com tanta faci lidade. que retorna para um campo o valor mais alto extraído entre todos os registras selecionados. mas uti li zaremos o chamado de MAX. você pode usar as instruções SQL para deterrn inar a próxima identifi cação na seqüência antes de fazer a inserção necessária. embora válida em algumas circunstâncias. Adicione um a esse valor. Para determinar a próxima identificação. então. Se você usasse umachave com o recurso incremental. outro dos conceitos de bancos de dados que não abordarei nesta lição.do is ou mais usuários poderiam estar adicionando art istas no mesmo momento. As inserções podem ocorrer em quaisquer das cópias. O primeiro ocorre porque mais de um programa poderia estar usando ao mesmo tempo esse ban· co de dados . seria possível que alguns usuários executassem sua primeira instrução SELECT antes que o usuário anteriortivesse executado sua instrução INSERT. Uma solução seria empregar alguma forma de identifica· ção gerada ao acaso. Q ualquer registro novo primeiro selecionará MAX (A r t i s tI O) e obterá os valores de identificação anteriormente atribuí· dos aos registros exc luídos. Em um sistema em que se pretende que os valores das identificações sejam exclusivos. Identificadores Exclusivos (GUIOs . aleatória o suficiente para que pudesse ser criada em vários locais com pou· ca ou nenhuma chance de ser duplicada. que então será usada em uma inserção. Isso envol· ve o emprego de um tipo especial de operador SQ L chamado operador de agregação.

o que não sera abordado com detalhes neste livro. As quatro ações separadas significam que esse método compartilha o mesmo problema da existência de vários usuários encontrado na chave calculada. Gerenciador de Chaves o últ imo esq uema para a criação de identificações que discuti rei é adequado para sistemas que não são distribuídos (veja a seção anterior sobre os GU IDs). O GU 1D é aleatório o bastante para que seja usado em um cenário de bancos de dados distri buídos. FIGURA 11 . mas para os quais você precisará realmente obter a chave no momento exato da inserção do registro. você terá de procurar na tabela do gerenciador de chaves o valor da identificação aluaI. inserir seu novo registro e aluali zar essa tabela com o valor da ident ificação incrementado. mencionei que é difícil obter a chave depois de executada uma instruçã o INSERT. Esse método só estará disponível se você empregar um procedimento armazenado para inserir seus registras. há um método em gera l usado para obtenção de uma chave gerada pelo sistema depo is de uma inserção. Se quiser obter mais informações sobre esse método de inserção de registros e obtenção da nova identificação gerada. usa uma tabela ad iciona l em seu banco de dados para armazenar os valores atualmente ma is a ltos das identificações de todas as outras tabelas (veja a Figura 11 . Procedimentos Armazenados e Chaves de Geração Automática Enq uant o descrevia o tipo de dado de incremento automático como o pção para a criação de chaves. chamado sistema gerenciador de chaves. pesquise a biblioteca do MSDN.) Esse método.5). Para obter novas identificações usando esse método.Introdução aos Bancos de Dados 303 aleatório de 128 bits gerado pelo banco de dados ou pelo sistema operacional. O problema de reutilizar as chaves dev ido às exclusões é evitado porque o valor da identificação armazenado no gerenciador de chaves nunca é decrescido. (Isso torna problemática urna chave gerada pelo banco de dados. Embora esses coment ários anteriores sejam realmente procedentes.5 O método urili:ado pelo geretlciador de cllm'es para gerá-Ias reqller 1111/(/ tabela adicional que comenlla o Wllol" mais alIo de idemificaçâo de cada tabela que usará esse mélOdo. e as identificações nunca são reuti lizadas. . acrescentar um a unidade a ele. e que essa é uma das razões principais para escolher um método alternativo de geração de chaves.

O MSDE é gratui to. vbs) deve ser executado para incluí-los em seu SQL Server ou no MSDE local. Embora o processo de criação do banco de dados possa ser percorrido manualmente e essa não é uma idéia ruim se os bancos de dados forem um assunto novo para você . CO. o ún ico . portanto não será uma opção ruim se você já o ti ver. o que é um ótimo preço por um sistema de banco de dados bem completo.ldf Juntos. tentarei tornar isso um pouco mais fácil fornecendo três opções d iferentes de banco de dados que poderão ser con figuradas em sua máquina. • • CO . Ele é um servidor popular de banco de dados e provavelmente será seu instrumento de trabalho quando começar a desenvolver sistemas reais. em seguida. será preciso sua própria cópia do banco de dados do exemplo. ou que não t iverem nenhum sistema de banco de dados. Access 2000 ou Access 2002 Para os usuários que possuem o Access. O banco de dados Access. criação e alteração de tabelas. mas o melhor produto para se ter a fim de atender à finalidade atual e para a práti ca futura é o SQL Server.304 Dia 11 Criando o Banco de Dados de Exemplo Para os exemplos do restante desta lição e para o cód igo que você irá escrever no Dia 12. vbs Antes que os arquivos mdf e Idf possam ser usados a part ir de seu cód i· go. AttachDB . Se não t iver o Access. você só precisará saber o caminho para o arquivo .. não será necessário criar uma configuração. txt Este arquivo é usado no Exercício 2 no fim desta lição. "A ces- sando Dados com a Plataforma .NET que você pode usar para testar a configuração de seu banco de dados.mdb MSDE. poderá simplesmente fazer O download do arquivo . e até para a construção de suas instruções SQL (o Query Builder). mas fornecerá só algumas ferramentas para o trabalho com dados externos a seu programa. As três versões foram projetadas para ser usadas em três sistemas de bancos de dados diferentes: Microsoft SQL Server (2000). o MSDE ou o SQL Server. Descubra que produto você tem e. mdf e CD. O SQL Server e o MSDE darão suporte à versão de download do mesmo arquivo. Se quiser empregar o Access para trabalhar com os dados. esse arquivo VBScript ( . esses dois arquivos contêm todos os dados que serão usados com o SQL Server ou o MSDE.NET". siga a direção apropriada nas próximas seções. Orders. permit indo que seja criada apenas uma configuração para os dois sistemas .mdb (parte do Access abordada na próxima seção) e usá-lo sem instalar o restante do so fiware do banco de dados. Todas essas opções funcionarão . Microsoft Database Engine (MSDE 2000) ou Microsoft Access. que você pode usar se não tiver o SQL Server ou o • • • TestDB . O Access vem com várias versões diferentes do Office 2000/XP e disponibiliza várias ferramentas para a visualização de dados. mdb que usará nos exemplos.vb O exemp lo de um programa no Visual Basic .

as classes projetadas para acessar o Microsoft SQL Server (incluindo o MSDE) e as que acessam qua lquer banco de dados que possua um driver de OLE DB (o que significa quase todos os bancos de dados). já que o Access também pode estar sendo usado. Esse arquivo de script também foi projetado para ser executado (com um clique duplo nele) no mesmo diretório dos arqui vos . E possível incluir novamente esse banco de dados na sua cópia do SQL ou do MSDE. mdf e . ldf e na mesma máquina de seu sistema de banco de dados. Quando empregar um dos métodos de conexão com o banco de dados.ldf) representam . Em vez disso. Se quiser. Se seu sistema não tiver uma sen ha em branco para a conta sa.Data com o . util ize as ferramentas de conversão de banco de dados do Access a fim de atual izar o banco de dados para a mesma versão que você estiver executando. será preciso usar o espaço de nome System.NET Framcwork. por padrão. poderá criar um pequeno aplicativo de console no Visual Basic . Não me deterei muito em detalhes sobre eomoessas classes funcionam. você precisará editar esse arqu ivo. Esse é o único trecho do cód igo que terá de ser alterado para que se encai xe em sua configuração específi- . Vá em frente e dê um clique duplo nesse arquivo. Sql Cl ient podem ser utilizadas se você tiver o SQL Server ou o MSDE. será mais simples utilizar as classes que podem acessar os dois tipos de bancos de dados.Data . Data . na qual me aprofundarei no acesso aos dados por me io da platafom1a .Introdução aos Ba ncos de Dados problema que pode encontrar será se tiver uma versão diferente daquela em que o exemplo foi criado. Testando a Configuração com System. o exemplo a segu ir apenas testará se seu banco de dados está configurado corretamente antes de passannos para a próxima lição. vbs vinculará esses dois arqui vos a seu sistema de banco de dados. mas. tendo como padrão as configurações sa e uma senha em branco. MSDE e SQL Server 2000 Tanto para o MSDE quanto para o SQL Server.NET. Se esse for o caso. As classes System . O código que será usado para testar o banco de dados estabe lecerá uma conexão com ele empregando o conjunto de c lasses do OLE DB do espaço de nome System.N ET para confirmar se tudo func iona como deveria. os dois arqu ivos (cd. na verdade ele contém a identificação de usuário e a senha do administrador do sistema em seu código. Embora o arqui vo deva funcionar 'como está' para a maioria das pessoas. um banco de dados isolado. o trecho-chave da infonnação é o que é chamado deslring de conexão.Data Agora que você fez o download e configurou os dados de seu exemplo. um texto que fornece todas as informações necessárias para a conexão com seu banco de dados. Essas classes contêm tudo que é necessário para acessar dados em quase todos os tipos de banco de dados e são divididas em duas áreas princ ipais . Para tanto. depoi s que tiver feito todas as alterações necessárias na identificação do usuário e na senha armazenadas no código.mdf e cd. O código fornec ido no arquivo de script AttachOB . OLEOB. só poderá visualizar e não ed itar as diversas tabelas e outros objetos de seu banco de dados por meio do Access.

você usar SQL Server ou MSDE.mdb Certifique-se de alterar essa string de conexão a fim de indicar o caminho apropriado para CD. connCO) im Oim drCD As OleOb. Open () drCO = cmdCO.C loseO 24 connCO. a string a segu ir deve funcionar em sua máquina: Provider=SQLOLEDB . Wri teL i ne (drCO. LISTAGEM 11 . então. sua string de conexão incluirá o cam inho completo para esse arqu ivo como descrito a seguir: Provider=Microsoft. ReadLineO 26 End Sub 27 End Module Se você usar o banco de dados do Access (CD. sSQL As String 9 sConnect i onString " <consulte abaixo> 10 11 12 13 14 15 sSQL = "SELECT C OTit le FRDM Disc ORDER BY ArtistID Ase" O connCO As New OleDb . vbs com sucesso.OleObCommand(sSQL.mdb em sua máquina. A Listagem 11. e fornecerei informações adicionais so· bre os valores da string de conexão depois desta listagem.ExecuteReader() Do While drCO.OleDbDataReader connCO .mdb).4.lôUser ID=saôInitial Catalog=CDôData Source=(local) ° ° . I teme "CDTi t I e") ) Loop 16 17 18 19 20 21 22 23 drCD. e já tiver executado AttachOB. por outro lado.Dia 11 ca.1 TextOB.OLEDB.Jet.OLL jr:System. Data 7 Module TestDB 8 Sub Main() Dim sConnectionString.0ôData Source=c:\chapterll\cd. Se. em seguida.Data.vb" 5 Imports System 6 Imports System .OleDbConnection(sConnectionSt ring) im D cmdCO As New OleOb.vb 1 'Substitua a string de conexão pelo valor apropriado 2 'ã sua configuração (explicado nes ta lição) 3 'e.Read() Conso I e. compile com : 4 '''vbc jr:System.CloseO 25 Conso l e.1 contém o procedimento completo.DLL Tes tOB.

Oata Source=(local) Insira a string de conexão apropriada na Listagem I I. mas deve ter apenas uma linha em seu cód igo) pressupõe uma senha em branco para a conta 5a.User IO=sa . como testdb. exe que poderá usar para testar sua conexão com o banco de dados. Observe que esse código está incluído. I. você deve obter o segu inte resultado: RESULTADO Left Of The Midd le the tragica 11 y hip Road Apples Oay for Ni ght Phantom Power Brand New Oay Mercury Falling Fields of Go1d Classic Queen 20 Greatest Chri5tmas Songs Gordon Born on a Pirate Sh ip Maroon Tail 5 Fi recracker Janet The Ve lvet Rope Design Of A Decade 1986-1 996 Mad Season Music Com esse resultado. e você deverá ver um arquivo. independentemente do segmento empresarial para o qual desenvolver seus programas.l. você em geral irá usar um banco de dados. Ao dar cont inuidade na criação de sistemas no Visual Basic . _ ln i tia1 Cata1og=CD . você lerá criado um aplicativo que estabelece com sucesso uma conexão com o banco de dados e estará pronto para passar para tópicos mais avançados sobre bancos de dados. Resumo Esta lição apresentou uma introdução aos bancos de dados e sua função no desenvolvimento de aplicativos . Agora compile o código como foi orientado nos comentários do início do arquivo.Introdução aos Bancos de Dados Esta string de conexão SQL (que é di vid ida em duas linhas neste livro.NET. podendo ser alterada para que especi fiqu e uma senha se necessário: Provider=SQLOLEOB. . vb.Password=peanutbutter.NET. na pasta Day I I que você descarregou anteriormente do site do livro na Web. Com freqüência escreverá programas que empregarão um banco de dados já existente. Se tudo der certo.

com/data . As respostas do teste estão no Apêndice A. Não seria melhor apenas manter uma cópia das informações sobre o artista em cada registro de Disc? R O annazenamento de dados em mais de um local signi fica que. Para obter mais informações sobre o OLE DB. você terá de se cert ificar de alualizar todos os locais possíveis ao mesmo tempo.Oata. embora seja certamente lima subst ituta para alguns sistemas de bancos de dados não relacionais. seu trabal ho exigirá que você mesmo projete e implemente esse banco de dados. Qualquer banco de dados no qual você tenha um driverdo OLE DB (ou do ODBC) estará disponível para conexão com as classes $ystem.Di a 11 Às vezes. ela não substitui sistemas de bancos de dados relacionais como o SQL Server. você mencionou três tipos diferentes d e bancos de dados.Oata. passando da teoria diretamcnte para a prática escrevendo programas que lIsam as classes $ystem . . P No banco de dados dos C Ds. P&R P Nesta lição. Na lição seguinte. Ela substitui os bl1DCOS de dados? R A XML é uma maneira de armazenar dados e. revisara quejá aprendeu e começar a pensar em como colocar seu conheci mento em prática.OleOB. teve de retorná-Ias em quase todas as saídas usando uma associação em s ua instrução SQL. mas os bancos de dados da Microsoft são o único tipo com o qual posso me conectar? R Abso lutamente não. Os benefícios conseguidos evitando a associação em suas consu ltas serão perd idos pe lo trabalho adicional necessári o sempre que atualizar os registros na tabela Disc ou na Artisl. continuaremos a trabalhar com bancos de dados. acesse http://www . Workshop o Workshop fo i planejado para aj udá-lo a antecipar possíveis dúvidas. em seguida. mas possui r um driver do OOBC. para evitar inconsistências. microsoft . uma tarefa que pode ser bem complexa de realizar corretamente. também poderá se conectar passando por uma camada ad iciona l e usando o provedor do OLE DB para as conexões do ODBC. "Respostas dos Testes/Exercícios". Se você não tiver um provedor do OLE DB. você removeu as informações sobre o artista da tabela Disc. A XM L será usada com mais freqüê ncia como uma maneira de intercambiar dados entre sistemas e representará a saída gerada por seus sistemas tradic ionais de banco de dados. P A XML foi projetada para a rmazenar dados. mas.

como alteraria seu banco de dados? Considere que pre· cisaria registrar infonnações sobre os próprios usuários e sobre a propriedade dos discos. Em uma tabela de banco de dados. Como esses campos. Se você quisesse expandir sua biblioteca de registro de CDs para que armazenasse a cole· ção de CDs de mais de um usuário. . MakeI O '" Model.6. um ou mais campos são usados para identificarde ma· nei ra exclusiva cada regi stro. Dadas as duas tabelas mostradas na Fig ura 11.Mode lName FROM Make INNER JOIN Mode l ON Make .MakeName. qual seria o resu ltado da instrução SQL que vemos aqui ? SELECT Make.Introdução aos Ba ncos de Dados 309 Teste I. Model.6.MakeName. qual seria a saída desta instrução SQL? SElECT Make. como você projetaria um banco de dados para annazenar as mesmas informações? . são chamados? 2.MakeID '" Model . txt. Examinando novamente as tabelas da Figura 11.Make Exercícios I.6 Make MakelD Exibição das labe/as referemes li perg1ll1la 2 do Tesle. Model.Mode lName FROM Make LEFT OUTER JOIN Model ON Make. ou campo.Make FIGURA 11 . 2. Dado o conjunto de informações cont ido em Orders. 2 3 4 5 MakeName Ford Audi BMW Pontiac Toyota 3.

.

NET Na lição anterior apresentei uma introdução aos bancos de dados e mostrei como eles podem ser usados em vários aplicativos. Além desses tópicos. Execução de instruções SQL.NET. Conexão a um banco de dados.SEMANA 2 DIA Acessando Dados com a Plataforma . Esta lição inc lu irá: • o Uma visão geral da arquitetura de acesso a dados da plataforma . Esse longo histórico dos bancos de dados e de seu uso em programas de computador assegurou que os programas do Visual Basic já acessassem dados e bancos de dados desde suas pri meiras versões.NET. • • O uso da vincu lação de dados com os fonnul ários da Web e do Windows. Nesta li ção. exami naremos como seus programas trabalharão com dados do Visual Bas ic .NET. Da mesma manei ra. a tecnologia . no fina l da lição você aprenderá alguns dos conceitos e técnicas mais avan~ çados para o trabal ho com bancos de dados da plataforma . Eles já eram encontrados em uma dessas formas mesmo antes da criação do Visual Basic. Uma Visão Geral do Acesso aos Dados na Plataforma .NET Os bancos de dados são usados em quase todos os aplicativos empresariais que já foram criados e em muitos sistemas pessoais e de microcomputadores.

Para evitar a necessidade de se criar um código para cada banco de dados com o qual você pudesse se deparar. passando por muitas versões diferentes antes que a plataforma . considerada o principal meio de conectar os sistemas do Visual Basic ou do Visual Basic for Applications (VBA) a quase todos os bancos de dados de back-end. em segu ida. comjdatajodbc). mas vale a pena fazer um exame resumido da tecnologia mais recente de acesso a dados (anterior à platafOlma . O ADO expunha vários objetos-chave que representavam a conexão com O banco de dados.0 uma biblioteca de acesso a dados chamada ActiveX Data Objects (ADO).NET e representa o estágio posterior ao ADO/OLEDR A tecno logia OLEDB s ubjacente ainda permanece em seu lugar. usando drivers específicos de banco de dados para trabalhar com cada um deles . porém.Dia 12 de acesso a dados do Visual Basic evoluiu com o passar do tem po. No entanto.NET O ADO. .NET se comunica com sistemas específicos de banco de dados. e mu itos dos bancos de dados mais conhecidos disponibilizam o(s) provedor(es) necessário(s).todos projetados para ser fácei s de usar como parte de um programa do Visual Basic. e os provedores de OL EDB ainda são o principal método pelo qual o ADO. e não com o sistema de banco de dados. e que t inha sido projetada para ser uma maneira fácil de trabalhar com essa nova tecno logia. não existem tantos drivers desse tipo.NET Framework. o OlE DB. o ADO usaria um provedor de OlEDB para converter e transferir suas solicitações para o sistema de banco de dados (veja a Figura 12.microsoft . 1). Por meio da combinação dos provedores de OlEDB disponíveis com todos os drivers de OOBe forn ecidos.NET é a tecnologia de acesso a dados que faz parte do . fornecendo uma única interface de programação independente do banco de dados e. mas acima dessa camada há muito pouca semelhança com os objetos anteriores do ADO. embora eles sej am conhecidos como provedores de OlEDB. os comandos relacionados ao banco de dados e os resultados obtidos nas consu ltas . ADO.NET). o ADOIOLEDB usava Lima abordagem seme lhante ao ODBe (http: //www. o ADO poderia ser usado para estabelecer uma conexão com quase todos os bancos de dados existentes. O ADO também requer drivers para funcionar. Esse mesmo conce ito já tinha se tornado popular e quase todo sistema de banco de dados possu ía um driver de OOBe disponível. possuir apenas o driver do ODBe já é suficiente. já que o ADO vem com um provedor de OlEDB para os drivers de ODBe. Ele será sua maneira de obter dados quando programar no Visual Basic. O ADO era uma bib lioteca do COM que encapsulava a funcional idade da tecnologia real de acesso a dados. A arquitetura integral do ADO fo i estabelec ida no fato de que o código que você escrevesse só trabalharia com o ADO.NET entrasse em cena. Antes da existência dessa platafonna era extensivamente usada pelos programadores do Visual Basic 6. Mas já que o ADO é mais novo do que o OOBe. o ADO e o OlEDB Não obteríamos grandes vantagens percorrendo a história completa que envo lve o Visual Basic e o acesso a dados.

foi projetado para permitir que você se conecte a qualquer banco de dados para o qual possua um provedor de OLEDB ou (por meio do provedor de OLEDB para o ODBC) um driver de ODSe e é tecnicamente o equivalente â camada de acesso a dados do ADO original. System. il ustrando os dois sistemas principais. '( 7 . Data .N ET 3 13 FIGURA 12.2.oata. qlle IIsa/anto dril'crs de OLEDR q//all/o de DOBe para se COl/cclar COIII os bal/cos de dados. oata .oata.01 eoB.SQLClient. '~ j" ActiveX Data Objects (ADO) ~ . Nos exemplos desta li ção. Esse espaço de nome é divid ido em duas áreas distintas: o conjunto de classes System.1 O ADO foi projetado COIIIO 11111(1 c all1ada Aplicativos do Visual Basic acima do OI.oata. A segunda área.NET. ainda poderá testar os dois métodos porque é possíve l se conectar com o SQL Server por meio de seu provcdor dc OLEDS ou com as novas classes da plataforma . mas fornece um conjunto de recursos seme lhante às classes OLEDS. SQLCl ient. Mesmo se só tivera SQL Server. System. .NET é mostrada na Figura 12. principalmente oataSet. foi projetada para trabalhar apenas com o Microsoft SQL Server. \. Da ta também inclui várias outras classes projetadas para trabalhar com os dados independentemente de sua fonte especifica. O primei ro conj unto. como parte dos exemp los desta lição. A arqui tetu ra geral das classes de acesso da platafonna .oleoB e as classes System.7 Provedo res de aLE DB 0 pJ: Dados I Oraele I I SybaS6 I ~ Dados Dados Na plataforma . Além das classes SQLCl i ent e OLEOB para acessar os bancos de dados.EDB. você aprenderá a trabalhar tanto com bancos de dados OLEDS quanto com sistemas do SQL Server ou do MSDE. Sys tem.NET.Acessando Dados co m a Pl atafo rma . Também exam inaremos essas out ras classes. o acesso a banco de dados é manipulado pelas classes existentes no espaço de nome System .

Em versões anteriores do ADO. Svstem.Data (contém objatas para manipu lação de dados genéricos) o ADo.2 OLED/3 e SQL.-.---. . . ser criado manualmente. Conectando-se ao Banco de Dados Antes que você possa começar a trabalhar com algum dado.314 Dia 12 System. (I ADO. . o objeto da eonex. OlEOB e SOL. devemos obter a string apropriada de conexão com o seu banco de dados. esta seção enfocará as tarefas que normalmente são executadas. .Data. portanto. ela envolvia dois itens principais. a execução de uma instrução SQL ou a recuperação de dados.NET é dividido em duas seções principais. Antes de começarmos a codificar. que permitem que você S8 conecte II uma ampla variedade de fontes de dados. ainda é a chave para configurar uma conexão de banco de dados no ADO. como a conexão a um banco de dados. nlio inclulda no Visual Studio . . A string de conexão. a manei ra mais fáci l de obter uma string correta é usar um pouco de astucia.Oata. fornecerão um ponto de partida natural para a discussão dos objetos subjacentes.NET mas disponível como download da Web. em bora agora existam do is objetos diferentes de conexão (um para o OLEDB e outro para o SQL Server). Tarefas-padrão dos Bancos de Dados Em vez de abordar as classes System. . .Data em um formato referenc ial que examine cada classe. que permiTem q/le vocé se cOl/eele a lili/a ampla I'oriedade de fomes de dados. uma linha de texto que inclui algumas Oll todas as informações necessárias para o acesso a seu banco de dados.-- . A conexão representa e contém todas as configurações necessárias para que se u banco de dados seja encontrado e acessado. precisará estabelecer uma conexão. . Essas tarefas. (contém objatos especificas para conexões por meio de provedores de Ol EOB) System.OLEOB .NET é dil'idido em dilas seçõcs principais.SQLClient (contém objatas espEtel/icos para conexões com o Microsoft SQL Server) System.OOBC· (contém objatas especificos para conexões por meio de drivers de OlEOB) • Como na versão Beta 2.-. .10 e uma string de conexão. FIGUR A 12.NET. Mesmo sendo apenas um valor textual e podendo.Dat3 .

3 .NET.N ET 3 15 Apenas por ter o ADO instalado em seu computador.. Na caixa de diálogo que acabou de ser aberta (veja a Figura 12. Dê um cl ique duplo no arquivo novo. 2.0. você verá opções diferentes dependendo de qua l dos dois provedores disponíveis selecionou na etapa anterior." I .e ele está incluído como parte da inst a l a~ ção do .NET Framework. Provi der.mdb do banco de dados do Access. • Tanto para o banco de dados do MSDE quanto para o do SQL Server.l . udl seria perfe ito). então. udl (New. uma interface gráfi ca com o usuário adequada será fornecida para a geração e edição de todos os detalhes da conexão.Acessando Dados co m a Pl atafo rma .3). Na gu ia Connection. Para o Access..4). fo i registrado.mdb (veja a Figura 12.I . selecione o provedor Microsoft Jet4. . Text Docu~ ment no menu que aparecerá) e renomeie~o com um títu lo que possua uma extensão. 3.. o arquivo terá a stri ng de conexão que poderá ser copiada e usada em seu aplicativo do Vi~ sua i Basic . e configu re as informações corretas para seu banco de dados : • Para o arquivo CD . .. FIGURA 12. Siga estas etapas para empregar esse artifíc io: I.I . portanto você o tem . Depois de ter trabalhado com essa interface e selec ionado as opções apropriadas para seu banco de dados. comece com a p r ime i ~ ra guia. Crie um arquivo Microsoft Data Link vazio por meio de um novo arquivo de texto (dê um clique com o botão direito do mouse na área de trabalho e selecione New.. I ""'"'" - 4. um tipo especial de arqu ivo. Os arqu ivos desse tipo foram projetados para conter infonnações sobre a conexão com o banco de dados e se você criar um vazio. Você deve ficar atento para o ícone de alteração do arqu ivo depo is que tiver mudado sua exten ~ são. fi caixa de diálogo de propriedades do Data Lillk permite que I'ocê cO/ifigure graficamellfe os detalhes de S/I(1 conexão. e uma caixa de diálogo aparecerá com um conju nto de quatro guias para a criação e ed ição das informações sobre a conexão com seu banco de dados. o Microsoft Data Link. selecione Mi~ crosoft OLE DB Provider for SQL Server. Isso será difícil de fazer se as extensões de arquivo não est ive~ rem vi síve is para que possam ser at ivadas pelo pa inel de cont role Folder Options. indicando seu novo tipo de arquivo . só será preciso inserir o caminho para O arquivo CO.

- .316 Dia 12 FIGURA 12. A Figura 12. então. a ident ificação e a senha do usuário e com que banco de dados especifico (CD neste caso) quer se conectar. do bal/co de dados especifico e a idenlifica~:iio e senha de usuário necessárias para a cOl/exão. você conclu iu a digitação de informações . Embora haja mais duas guias. use o Bloco de notas ou algum outro editor de textos para abrir o arquivo. Agora. Se o teste for bem-sucedido. Dê um cl ique no botão Test Conneclion para ver se as informações que inseriu estão corretas. O conleúdo exalo dependerá das informações que foram inseridas na caixa de diálogo. os deralhes da cOI/exilo incluem o IIOII/e do sel1'idol'. você precisa informar o nome do servidor ou (loca 1) se ele estiver no mesmo computador.5 mostra a guia Connection configurada para um banco de dados de um servidor SQL local que usa 'sa' como sua identificação de usuário e urna senha que foi inserida mas não pode ser lida . mas devemos ver um texto como o desc rito a segui r: .4 A gllia COllneclioll será dijerellfe dependendo do prol'edor qlle você seleciOl/or: as opções para o Acce~'s incluem o camillho parQ (I arq/lh'o do banco de dados. feche a ca ixa de diálogo dando um clique em O K. udl de modo que possa examinar seu conteúdo. 5.5 Para o SOL SerreI". FIGURA 12. Para o SQL.

da senha (pas sword) e da fon te de dados (Data Source) para que esta string funcione em seu sistema: [oledb] : Eve rything after this line is an OlE DB initstring Provider=SQlOLEDB .ud l con figurado para o SQL Server é mostrado no exemplo a segu ir. Sql Cl ient. a string de conexão precisará ser um pouco alterada antes que possamos usá-la com o objeto SQLConnection. o que significa que ela apresenta uma seção Provi der. A Listagem 12. é uma string de conexão do OLEOB. A especificação de um provedor não é necessária. e deve ser remov ida quando houver uma conexão através das classes SQL.I: Password=password. 1nitial Catalog=CO ôOata Source=(loca l) Observe que a última linha é na verdade uma longa linha de texto que foi divid ida em várias outras para que a clareza fosse mantida. Persist Security Info=True ôUser 10=sa . Se estiver se conectando com o MSDE ou com o SQL Server.1 Uma String de Conexão I Modu le ModuleI 2 Private Const sConnection As String = "Provider=SQLOLEDB.OlEOBConnecti on ou de System. . a string anterior deverá ser a mesma exceto pelo caminho.N ET [oledb] : Everything after this line is an OLE DB initstring Provider=Microsof t. Para gerar uma conexão. Depois que você ti ver sua string de conexão. portanto.Acessando Dados com a Plataform a . mas pode ser preciso alterar ao valores da identificação do usuário (use r i d). LISTAGEM 12. O conteúdo de um arquivo . você precisa criar uma nova instância do objeto System . poderá começar a escrever algum código para seu banco de dados. Se estiver utilizando um banco de dados do Access. OleDB . então. que é o que você precisará usar em seu programa do Visual Basic . SQLConnect ion . e que souber que ela está correta porque o botão Test Connection executou um teste bem-sucedido com base nessas informações." & "Data Source=(local)" 7 .OlEDB." &_ 3 4 "Persist SecurHy Info=True ô" & 5 "User 1D=sa'" &6 "InHial Catalog=CD. A string é utilizada com o OleDB e. com qualquer tipo de banco de dados. que começa em Provi der. Data . Data.mdb: Persist Security Info=False 3 17 A última li nha desse arquivo. 0: Data Source=C:\CD.NET. produzindo um objelo Connecti on quejá está con fi gurado com todas as informações que você precisa para se comunicar com seu banco de dados.Jet .l ô" & "Password=password. então.1 cria uma nova instância de OLEOBConnect i on e fornece a string de conexão no construtor.4 .

para fazer .2 pela string que criou anteriormente nesta lição. Para ficar ainda mais di vert ido. vb. lente alterar alguns valores da string de conexão. Data.OleDb. é preciso chamar o método Open do objeto OleDBConnecti on: objConn . Para estabelecer o vínculo com o banco de dados." & 5 "Use r ID=sa'" &"InHial Catalog=CD . você criou o objeto de conexão e o carregou com os detalhes de seu sistema. " & 6 "Oata Source=(local)" 7 Sub Ma in() 8 Dim ob j Conn As New System .Write Line(myException.l .1 8 Uma String de Conexão (continuação) g Sub Main() 10 Dim objConn As New System . como a senha.Exception 13 Conso le.Open() 12 Catc h myException As System.OleDb .2 Abr i ndo uma Conexão 1 Modu le Modu l eI 2 Private Const sConnection As String = "Provider=SQLOLEDB. Data.2 mostra um exemplo completo do estabeleci mento de uma conexão com um tratamento simples de erros. 10 Try 11 ob jConn. mas nenhuma comunicação real ocorreu com o serv idor do banco de dados.Message) 14 End Try 15 Console . A Listagem 12.NET e insira esse código em M l el. "O Que Fazer Quando Programas Bons Apresentam Problemas e para Se Certificar de Que Isso Não Aconteça". apenas crie um novo aplicativo do console lIsando o Visual Basic . Lembre-se de substituir Ovalor odu de sConnect ion na Listagem 12.Dia 12 LISTAGEM 12. Se você quiser testar o código por sua própria conta." &_ 3 "Password=password." &_ 4 "Persist Secu rHy Info=True. e você deve inseri-l a em lima estrutura de tratamento de erros. ReadLine() 16 End Sub 17 End M odule Para obter mai s infonnações sobre o tratamento de erros. veja o Dia 6.OleDbConnection(sConnection) 9 . LISTAGEM 12.OleDbConnection(sConnection) 11 End Sub 12 End Module Nesse momento.Open() Essa linha em particu lar é a primeira que causará uma interação com seu banco de dados.

NET 3 19 com que a tentativa de conexão falhe. mas terá de ser antes da execução efetiva do comando. precisará da instrução SQL que quer executar e de um objeto de conexão (SQLConnection ou 01 eDBConnection).Open() 12 Catch myException As Exception 13 14 Console . excluir. Para essa tarefa específica. altere sua dec laração de objConn para que se refira ao objeto System. remova a seção Provi der de sua string de conexão e. Seu tratamento de erros deve produzir uma linha de saída adequada mostrando o que houve de errado em seu programa.3 mostra o código completo. LISTAGEM 12. mas sozinha ela não é particularrnente útil.Acessando Dados com a Plataforma . Primeiro. SqlConnection(sConnection) 11 Try objConn. você poderá usar um objeto de comando (SQLCorrmand ou 01 eDBConmand) para representar c. " & 6 "User ID=sa." & 7 "Initial Catalog"CD. Executando uma Instrução SQL Agora que você tem uma conexão estabelecida. que produz essencialmente o mesmo resu ltado.Data.SqlClient . A Listagem 12. Para conseguir realizar qualquer uma dessas tarefas. executar uma instrução SQL. Se tivermos nossa instrução SQL . as classes SQLCl ient poderão ser usadas com apenas algumas pequenas alterações.Wri teLine(myException .Message) End Try 15 Console. em seguida. alterar e recuperar registros. abrir uma conexão." & 4 5 "Persist Security Info'"'"True .ReadLine() 16 17 Eod Sub 18 End Module Estabelecer urna conexão será uma etapa inicial com um.3 O Tratamento de Erros É Essencial Quando Se Lida com Bancos de Oados 1 Imports System 2 Module ModuleI 3 Private Const sConnection As String sConnection" "Password"password. Antes de poder empregar um objeto de comando. com certeza desejará ter a capacidade de adicionar. O objeto de conexão não precisa ser aberto quando o objeto de comando estiver sendo criado.SQLCl ient.SQLConnect i on em vez da classe OLEDS. em seguida. você precisará de alguns outros objetos de banco de dados para começar a trabalhar com os dados." & 8 "Da ta Sou rce" (loca 1)" 9 Sub Main() 10 Dim ob j Conn As New Data.

LISTAGEM 12.OleDbCommand(sSQL.Dia 12 e nossa conexão.4 Executando Consultas no Banco de Dados 1 Modu le Modu l eI 2 Private Const sConnection As String = "Provider=SQLOLEDB. sSQL) Console.Wrlte("Pressione Return para executar a consulta: (O}" .Oata .State = ConnectionState.Exception Conso 1e.ReadLine() If objConn.ReadLineO End Try End If 34 35 End Sub 36 End Module . Wri teL i ne (myExcept i on.OleDb. Wri teL i ne (myExcept i on." & 3 "Password=." &_ "User lO=sa. Message) 19 End Try 20 21 22 25 26 27 28 29 30 31 32 33 Console.Open Then Try objCmd .4) ou confi gurá-los depois do fato (veja a Listagem 12.Oata. objConn) 15 Try 16 objConn. 'El ectronic')" 11 Dim objConn As New _ 12 System.Exception 18 Console ." & 4 "Initial Catalog=CDj" & 5 "Data Source=(local)" 6 7 Sub Main() 8 Dim sSQL As String 9 sSQL = "INSERT INTO CATEGORY (CategorylO .Open{) 17 Catch myException As System.l. Temos a opção de passar a instrução SQL e o objeto de conexão para o construtor quando criarmos o objeto (veja a Listagem 12. tudo que precisamos é criar uma nova instância do tipo apropriado de objeto de comando. Execu teNonQuery () Catch myException As System.5). Message) Console. Category)" & 10 "VALUES (7 .OleObConnection(sConnection) 13 Oim objCmd As New _ 14 System.OleOb. então.

poderá ser empregado na execução de um laço pelos dados para recuperar os va lores de alguns ou todos os campos e linhas no resultado de sua consulta. como SELECT. " &"ArtisLArtistName.CommandText = s5QL A execução da inst rução INSERT é cfetuada pelo método ExecuteNonQuery do objeto de comando (l inha 13).l. terá de usar o método ExecuteReader. Depois que o objeto leitor tive r sido retornado.ArtistID . " & "Data Source=(local)" 6 . o que for mais apropriado. ) 8 g 10 11 12 13 Sub Main() Dim sSQL As String sSQL = "SELECT ArtisLArtistID .N ET 321 LISTAGEM 12. Esse método existe nas duas variações dos objetos leitores e retorna 01 eDBDataReader ou SQLDataReader. mas os membros-chave são Read( ) e os métodos de recuperação de conj untos de dados GetS t ri n9.Acessando Dados co m a Pl atafo rma . mas esse método fo i projetado para ser usado apenas com os comandos da SQL que não retornem linhas. GetDa te Ti me além de outros. " . Disc. " &_ 3 4 "Us er ID=sa'" &5 "Initial Catalog=CD. O método Read avança o leitor de dados para o próx imo registro e retorna um valor booleano indicando se alguma outra linha está disponível." & "Password= . Recuperando Dados Se você qu iser executar uma consulta SQL que retorne linhas de dados. Connect i on = objConn 3 objCmd. então. GetDoub 1e. O objeto leitor possui muitos métodos e propriedades.5 Configurando as Propriedades Individualmente l 1 Dim objCmd As New O eDbCommand() 2 objCmd . Depois que você estiver em um registro (depois que tiver chamado Read ( »).6 foi expandido para incluir a execução de uma nova consulta SELECT e de um laço para percorrer e exibir os resultados da consu lta no console. poderá usar os vários métodos Get<t ipo de dados> para recuperar os valores de campos individuais. todos utilizando um número ordi nal para indicar de que campo devem retornar seus dados. LISTAGEM 12. O código mostrado na Listagem 12.6 Acessando os Resultados de uma Consulta ao Banco de Dados 1 Module Modu l eI 2 Private Const sConnection As String = "Provider=SQLOLEDB.CDTitle "& "FROM Artist INNER JOIN Disc ON "& "ArtisLArtistIO '" Disc.

OleOb .y 21 22 obj Conn .OleObOataReader 20 T.6 Acessa nd o os Resultados de uma Consulta ao Banco de Dados (continuação) 14 15 16 17 18 19 Dim obj Conn As New _ System. mas às vezes é preciso obter dados que proporcionem um . Na verdade. 36 objReader. GetString(I) .GetString(2» 37 Loop 38 Console .WriteLine(myException. Esse não é um grande problema e raz parte da razão principal pela qual esses leitores são tão rápidos (nada é armazenado na memória do c liente).WriteLine{myExcepti on . cada linha será recuperada diretamente do banco de dados.Write("Pressione Return para executar SQL: {O}".State = ConnectionState. Exception 40 Console. sSQL) 27 28 Console .OleDbCommand(sSQL . apenas de leitura ordenada. de recuperar dados.Oata.Dia 12 LISTAGEM 12.Message) 24 End Try 25 26 Console . objReader .ReadLine() End Try 43 44 End I f End Sub 45 46 End M odule Os leitores de dados são maneiras rápidas.Open{) Catc h myException As System.Open Then 30 T.Exception 23 Console.Message) 41 42 Conso l e._ 35 objReader .OleObConnection (s Connection) Dim obj Cmd As New _ System. enquanto estiver trabalhando com um leitor de dados. ReadLine() 29 If obj Conn .Wri teLine( "{ O) (I) (2 )". Isso significa que quando você criar um leitor de dados e executar um laço em suas lin has.ExecuteReader{) 32 Do While objReader.Oata. sua conexão com o banco de dados estará ocupada e não poderá ser usada para qualquer outro fim . objConn) Dim objReader As _ System. mas também são conjuntos de dados totalmente conectados.y 31 objReader = objCm d.Read() 33 34 Console .OleDb. Getlnt32(O) . ReadLine() 39 Catch myException As System.Oata .OleOb.

visua li zações e relacionamentos mú ltiplos. em seguida. executando ou ainda manipulando esses dados por muito tempo ou relendo-os corno uma forma de cache. devemos criar um . Um Data Set pode conter vári as tabelas com informações. Como outra opção. exibindo. o tipo de acesso a dados conectado não será a me lhor escol ha. isso pode parecer semelhante ao objelO desconectado Reco rdS et dessa tecnologia. examinaremos como retomar ao banco de dados. retornando as alterações do DataSet à fo nte dos dados para atual izar o registro original. É possível carregar informações nos Data Sets. Aprenderemos como funciona o estágio de atual ização desse processo ainda nesta lição. Depois de abordados esses aspectos. a navegar por essas informações. foram projetados para fornecer a união ou vínculo entre se u banco de dados e um objeto OataSet. A independência da fo nte dos dados é o motivo pelo qual essas in formações são cons ideradas desconectadas e podem ser mantidas pe lo tempo necessário em um ambiente total mente off-line. Nas seções a seguir. Os objetos adaptadores de dados. depoi s que tivermos ed itado. em segu ida. filtrando.Acessando Dados com a Platafo rma . embora possam provi r de outras fontes . incluindo tabelas. em seguida. em geral de um banco de dados. um modelo desconectado de trabalhar com os dados também está disponível por meio dos DataSets. você aprenderá a carregar dados em um D ataSet e. Como alternativa aos leitores de dados. Conseqüentemente. esse esti lo de acesso a dados é mais adequado quando se quer rec uperar rapidamente um conjunto de informações e não há planos de continuar a usá-las por um tempo mais longo (mais de alguns segundos). você usou um leitor de dados para recuperar informações em seu banco de dados. você precisará usar outro tipo de objeto. Esses objelos são como bancos de dados completos que usam a memória e ainda são capazes de fornecer uma ut ilização simples com um conjunto único de resultados. um adaptador de dados. então. mas antes que possamos atualizar alguma coisa.0ataSet). tornando-as independentes de sua origem. Trabalhando com Data Sets Na seção anterior. em que é preciso estar conectado com o banco de dados durante lodo o processo. usaremos alguns dos recursos mais complexos. Para concluirmos. continuarmos processando-os. a plataforma . se recuperarmos dados e. Data . excl uído e ad icionado linhas. Primeiro. Esse víncu lo funcio na em duas etapas. Se vocêjá usou a versão anterior do ADO.N ET 323 pouco mai s de controle. então. Inserindo Dados em um DataSet Para carregar as informações de seu banco de dados em um OataSet. mas possui muitos outros recursos. preenchendo o DataSet e.NET fornece um mode lo de acesso a dados totalmente desconectado por meio do Dala Set (System . mon itorar os relacionamentos entre elas e até manter ln ültiplas visualizações diferentes de cada tabela de dados. as alterações efetuadas em um dataset. alterando. temos de carregar os dados. Esse foi um tipo de acesso a dados conectado. tendo armazenado-os. É parecido com esse objeto de muitas maneiras. Como alternativa. SQLOataAdapter e 01 eDBOataAdapter.

Esta linha de código gera uma instância e rornece um nome para o OataSet corno parte do construtor: Oim objDS As New OataSet("CDs") O método Fi 11 de OataAdapter pode ser usado para carregar os dados no DataSet.7 Preenchendo um DataSet com os Resultados de uma Consulta . Fi 11 (obj OS. Rows. ta lição.Count) Mais deta lhes sobre o acesso aos dados armazenados em um OataSet serão forneci dos ainda nes.ArtistIO.Oisc.7. Count) O código completo mostrado na Li stagem 12. e o objeto de conexão no construtor do adaptador de dados.Dia 12 objeto de conexão. " &_ "Artist. "Di se") objConn . ou um objeto de comando que se refira à instrução SQL correta. Use a instrução SQL que quiser. Rows.ArtistName." Dim objConn As New 01eOb . você poderá trabal har com se u conteúdo por meio do conjunto Tables de OataSet : Conso 1e . Wri te l i ne(" {O} Rows". Após a criação dessa tabela. "Di sc") Depois que o código anterior ror executado. com o tratamento de erros apropriado. objOS. Writeli ne (" {O) Rows" . exatamente como nos exemplos anteriores. você deve conseguir abrir o objeto de conexão: objConn ." &"User IO=sa.COTit1e "& "FROM Artlst INNER JOIN Oise ON "& "Artist. Tab 1es (" Di sc") . Oim sSQL As String sSQl = "SE LECT Artist." & 3 "Password=. você poderia ter encerrado completamente a conexão com seu banco de dados antes de trabalhar com o conteúdo de OataSet : objOa taAdapter. usa um OleDBAdapter para carregar o resultado de uma consulta SELECT em um novo objeto DataSet.I. Fi 11 (obj OS." &_ . uma tabe la terá sido criada dentro do OataSet com o nome "Di se " e preenchida com os resu ltados de sua consul ta SQL. mas para que isso runcione. um objeto DataSet também deve ser criado.Open{) objOa taAdapter. E interessante ressaltar que já que o DataSet é um objeto desconectado. Close() Conso 1e .01eDbOataAdapter(sSQl .ArtistIO.ArtistIO = Oisc. LISTAGEM 12. e tudo estará configurado.01eObConnection{sConnection) Oim objDataAdapter As New 01eOb. obj OS . I Modu le Modu l eI 2 Private Const sConnection As String = "Provider=SQLOLEOB. objConn) Já que você quer preencher um dataset com o resultado de sua consu lta. Uma nova instância da classe apropriada do adaptador de dados (OLEOB oU SQL) deve ser gerada a segui r. Tabl es ("D i se") .

.Message) End Try 35 Conso1e. ArtistID . _ 31 obj OS.State = Conneetio nState. você pode executar esse cód igo por sua própri a conta colocando-o em um módulo de um novo ap licativo do console. Disc.Acessando Dados com a Plataforma .01eObDataAdapter(sSQl.Open Then 27 28 Try 29 obj Da taAdapter . ArtistIO = Oisc . Rows.objConn) Dim ob j OS As New DataSet("CDs") 13 14 15 16 17 18 19 20 Try 21 obj Conn. Open () 22 23 Cateh myExcep tion As System. " & "Data Source=(loca1)" Sub Ma in() Dim sSQl As String sSQL" "SELECT ArtisLArtistID .7 Preenchendo um DataSet com os Resultados de uma Consulta 325 (continuação) 5 6 7 8 9 10 11 12 "Initia1 Catalog=CD . " & "ArtisLArtistName . " Dim objConn As New _ 01eOb. C1 ose () 30 Conso 1e. WriteL i ne (" {O} Rows" .Exeeption 33 34 Console.NET LISTAGEM 12.Writeline(myException. Tab 1es ("Di se") .OleDbConnection(sConneetion) Dim ob j OataAdapter As New _ OTeDb .Message) End Try 25 26 If objConn.Exception 24 Conso1e.CDT it1e " & "FROM Artist INNER JOIN Oise ON " & "Artist .Readline() 36 End If 37 End Sub 38 39 Eod Module Como em todos os exemplos demonstrados até agora nesta lição. "Di se") obj Conn. Count) 32 Cateh myExeeption As System. Fi 11 (objOS .Writeline(myExeeption .

é possível executar um laço através dos campos da tabela usando For Each ou For: Dim objColumn As DataColumn For Each objColumn ln objTable. você pode usar esse nome para acessar a mesma tabe la. porq ue ele representa potencialmente várias tabe las diferentes. Writeline(objRow . e também fornece várias propriedades úteis.1 objRow = objTable . mas sim o objeto DataTab 1e correspondente aos dados carregados nos quais esti ver interessado. e dos objetos contidos nele. Esse objeto concederá acesso a seus campos por meio da propriedade Item (na qual você pode fornecer o índice ou o nome do campo que deseja recuperar). O objeto DataTab le dis- poni biliza dois conj untos que são particularmente úte is: o conjunto Rows.Columns . O cód igo a seguir mostra como poderá obter um DataTable a partir do DataSet que o contém: Dim objTable As DataTable objTable " objDS. O conj unto Col umns contém detalhes dos campos de DataTabl e. Rows Console . que contém todos os registras da tabela.Count . você obterá todas as informações sobre a estrutura de sua tabela. Rows. Writeline(objRow .326 Di a 12 Navegando pelos Dados Depois que você carregar alguns dados em seu DataSet.Tables(UDisc") Já que o código que inseriu os dados no DataSet forneceu o nome "Di se" para a tabela recém-carregada. ltem("CDTitle")) Next Qualquer um dos métodos produz O mesmo resultado nesse caso. Cada registro da tabela é representado por um objeto DataRow. Como no conjunto Rows anterior. Rows{i) Console . que retorna o estado de edição atua l do registro. pode querer exam inar essas infor~ mações. que possui um grupo de objetos DataCol umn descrevendo cada campo da tabela. ltem("CDTitle")) Next Usando um laço For simples Dim i As lnteger Dim objRow As Da t aRow For i = O To objTable . como RowState. cada um representado como um objeto DataCo 1umn. Por me io desse conjunto. Oobj eto com o qual trabalhará na verdade não éo Oata5et. e o conjunto Co 1umns. O conjunto Rows pode ser empregado de uma entre várias manei ras para executar um laço através de todos os registras da tabela: Usando um laço For Each Dim objRow As DataRow For Each objRow ln objTable .

8 mostra como você poderia usar as propriedades Rows e Col umns de um DataTabl e para escrever um procedimento genérico a fim deexibir todas as informações sobre a tabela com os cabeçalhos da coluna.Wri te(" {O):{l) " ._ objColumn . " & 2 "Persist Security Info=T rue. j As Integer For j = O To objTable.FullName) Next 327 o código do proced imento Di spl ayTabl e do exemp lo descrito na Listagem 12.WriteLine() Next End Sub 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Você pode testar esse procedimento alterando o exemplo para carregar um DataSet que inc lua lima chamada a esse novo procedimento.Columns.NET Console._ objColumn .Write("{O} " . " & "Password= .9 A Função DisplayTable 1 Private Const sConnec tion As Stri ng = "Prov ide r=SQLOLEOB . como mostro na Listagem 12.Count . Name) Next Console.ColumnName.Columns(j) Console .WriteLine{) For i = O To objTable.9.Count .8 Exibindo o Conteúdo de um OataTable LISTAGEM 1 2 3 4 5 Sub OisplayTable(ByRef objTable As OataTable) Oim objRow As OataRow Oim objCol As OataColumn Oim i . objCo l.Acessando Dados com a Platafo rma . Columns.DataType . _ objCol. Item{j» Next Conso le.Rows." & 5 "Data Source ={loca l )" 6 7 8 Sub Main() .1 Console . ColumnName. 12.1 objCol = objTable.1 objRow = objTable. " &_ "lnitial Catalog=CO.Count .l. DataType.Rows{i) For j = O To objTable . objRow .WriteLine("Column Name: {O} Data Type : (1}" . LISTAGEM 12." & 3 4 "User 10=sa .

Open{) 23 Catch myException As System.Message) 25 26 End Try 27 28 If objConn.ArtistID ô " - 15 16 17 18 19 20 21 Tcy 22 objConn. Fi 11 (obj OS.01eDbO ataAdapter(sSQL.Exception 2' Console.Message) 38 End Try 39 Console.Except ion 37 Console .2 'od S.Tables{"Disc") 33 3.Writeline{myException .Close() 32 Dim ob j Table As DataTable ob j Table " objDS. .9 A Função DisplayTable (continuação) 9 10 11 12 13 14 Dim sSQL As String sSQL " "SELECT ArtisLArtistID .WriteLine{ myException.State " ConnectionState. aprenderemos a alterar o conteúdo de seu DataSet usando tanto o objeto OataTable quanto OataRow. ele também é usado quando se edita.b Dim objConn As New _ OleDb .CDTitle " & i "FROM Artist INNER JOIN D sc ON " & i "Artist.Open Then Tcy 29 objoataAdapter . além de ser o meio pelo qual você acessa os valores do campo (como foi feito na Listagem 12.ArtistIO " Disc. Na seção a seguir. exclui e adiciona registros a um objeto DataTabl e. DisplayTable(objTable) 35 36 Catch myExcep tion As System.Dia 12 LISTAGEM 12.Ol eDbConnection(sConnection) Dim objOataAdapter As New _ OleOb.objConn) oim objoS As New _ DataSet("Cos") o objeto DataRow é importante. "Di se") 30 31 objConn.ReadLine() 40 End I f 41 . " &"ArtisLArtistName.8). D sc.

Adicionando Registras Depois de criar urna conexão. requer urna mane ira de obter um novo objeto de linha que possua o mesmo esquema (os mesmos campos. É claro que seria poss ível apenas executar cada instrução UPDATE.N ET 329 Editando Dados (Adicionar.Acessando Dados com a Platafo rma . você verá como pode man ipular facilme nte seus dados por meio dos métodos dos objetos DataTable e OataRow.adicionar. o banco de dados propriamente dito não tem conhecimento algum desses objetos DataSets e acabará sendo alterado pelas instruções SQL. como O Usando os três tipos de alteração de dados . Esse método pode ser chamado de lima entre duas maneiras: com um array de valores para o campo do novo registro ou com um único objeto OataRow representando as infonnações a adicionar. (usando métodos do objeto. INSERT e OELETE diretamente. As alterações que fo rem feitas no DataSet serão convertidas pelo DataAdapter em instruções SQL que terão de ser executadas visando ao banco de dados. em vez de instruções SQL personalizadas). que retornará um objeto DataRowCollection: Dim drRows As DataRowCollection dr Rows = objTable. que é chamado COm um OataRow. . e o próprio objeto OataTable fornece esse recurso por meio do método NewRow. 10 mostra o uso de um array. objOataAdapter . Fi 11 (objOS.Rows Esse objeto representa todos os registras da tabe la como um conjunto de objetos DataRow. Add. para criar novos registras. você escreverá um código para alterar seu banco de dados por meio do objeto OataSet. mas o modelo DataSet possui os beneficias de ser desconectado (evitando o uso de recursos do servidor enquanto aguarda a interação com o usuário) e si mples ELETE. A Listagem 12. Você verá um exemplo dos dois estilos nas Listagens 12.empregando um objeto DataRow.Tables("Disc") Depois que tiver esse objeto Da ta Tab 1e.11 mostra o segundo método . editar e excluir . O próprio conjunto fornece um método. Editar e Excluir) Nesta seção. com os mesmos tipos de dados e tamanhos) do resto das linhas da tabela. A Li stagem 12. No entanto. que nos forçará a conhecer a ordem dos campos e resultados em um código que é mu ito menos claro que o segundo método.11 . você poderá acessar diretamente um objeto OataTable.10 e 12. poderá acessar seu conteúdo por meio do conjunto Rows. um adaptador de dados e carregar alguns dados em seu DataSet . O segundo método. "Di se") Dim objTable As OataTable objTable'" objDS.um de cada vez.

mas você não veria esse tipo de erro até o estágio da atuali zação.Rows 4 5 6 7 8 9 'Neste caso . temos 3 colunas 'A rtistIO 'A rtistName 'CDTitle objNewRow =' objTable. ou off-line.Rows 4 5 6 7 8 9 'Neste caso. As alterações efetuadas no banco de dados do servidor depoi s do momento em que os dados foram carregados nesse DataSet poderiam impedi r que os registras adicionados fosse m válidos (você poderia espec ificar um artista que tivesse sido excluído da tabe la Artist. os dados foram ad icionados à tabela. Já que está trabalhando em um estado desconectado.Add(objNewRow) 10 II 12 13 14 Nos dois casos. mas isso não sign ifica que serão retornados ao banco de dados.Dia 12 LISTAGEM 12.NewRow{) objNewRow(UArtistro") =' 3 objNewRow(UArtistName U =' uGeorge Orwell u ) objNewRow(UCOTitle U =' "Party like it 's 1984 U ) drRows. Add(arrFields) 10 11 12 13 14 15 LISTAGEM 12. por exemplo). .10 Usando um Array (listagem parcial do código) 1 Dim drRows As DataRowCo llect ion 2 Dim objNewRow As DataRow 3 drRows =' objTable. quando usa um OataSet.11 Fornecendo um Objeto OataRow como Parâmetro para o Método Add 1 Dim drRows As DataRowCo llect ion 2 Dim objNewRow As DataRow 3 drRows =' objTable. qualquer problema relacionado ao servidor não será descoberto até que haja a tentativa de atual izá-Io. temos 3 colunas 'A rti stIO 'A rti stName 'CDTitle 'Usando o método do array produziremos Dim arrFields(3) As Object arrFields(O) = 10 arrFields(I) = USting U arrFields(2) = uO ream of Blue Turtles" objNewRow =' drRows .

BeginEdi t e EndEdi t colocam o objeto DataRow dentro ou fora do modo de edição. Você aprenderá a usar um DataSet contendo campos alterados. um adaptador de dados. Excluindo Registras A exclusão de um registro em uma tabela de dados é efetuada pelo método Delete do objeto DataRow em questão.Acessando Dados com a Platafo rma . O método Oelete marca a linha como excl uída. "Adicionando Registros". que é um estado especial no qual a linha contém as informações sobre a edição em progresso e. EndEdi t e Cancel Edi t. todos os erros ocorrerão no instante em que cada campo for ed itado. Isso é crít ico porq ue permite que o objeto não seja excluído e fornece as informações necessárias para atualizar o banco de dados de origem excl uindo esse registro quando ataele estiver novamente na tabela original. Sem a utilização de BeginEdi t e EndEdi t. Depois que tivennos esse OataTable. e estaremos prontos para começar a ed itar os registras. em vez de criar um novo como fi zemos na seção anterior. eventos de alteração não serão acionados para cada mod ificação de um campo. mas. mas há um problema com o qual se preocupar. queremos trabalhar com um objelo DataRow existente. precisamos primeiro criar uma conexão. e atualizar o banco de dados de origem posteriormente nesta lição. BeginEdi t é opcional. não remove o objeto OataRow de DataRowColl eet i on. mas indica sua intenção de maneira clara.Tables("Disc") Dim drRows As DataRowCollection Oim objRow As OataRow dr Rows " objTable. rrabalha·se através dos objetos Da taRow que represen~ tam os registras da tabela. Remove e RemoveAt. "Di se ") Dim objTab1e As OataTable objTable " objDS. registros novos e até exclu ídos. as alterações da linha serão confirmadas dentro do objeto OataTab l e.N ET 331 Editando Registras Editar regist ras é seme lhante a adicionar. Como nos exemplos anteriores. se Begi nEdi t tiver sido usado. portanto.NET. No caso da edição. momento em que qualquer erro que tenha ocorrido durante a edição se rá lançado pelo ADO. no entanto. um coman· do. E possível acessar e alterar os valores por meio da propriedade Itemusando o nome ou a posição do campo: objRow . Você aprenderá mais sobre os eventos de alteração ainda nesta li ção. na verdade. objOa taAdapter. BeginEdit() objRow("au_lname") " "Exciting" objRow. na seção "V inculação • de Dados". teremos acesso a seu objeto DataRowColl eet i on.EndEdit() Quando EndEdi t for chamado. Fi 11 (obj OS. da classe O . e então carregar os dados em um objeto OataSet para criar um objeto DataTable.Rows objRow " drRows(S) Cada objeto OataRow possui vários métodos que afetam diretamente a ed ição: BeginEdit. Isso é sim ples de fazer. Há outros métodos.

OleDbConnection(sConneetion) Dim ob j OataAdapter _ As New OleOb . " &_ 8 "Initial Catalog"CD.l. OleDbOataAdapter(sSQL . "Di se") objConn. Nenhuma dessas exclusões afetaráos dados da fonte. Exception Console . por exemplo. Usar Remove ou Rem oveAt será adequado quando você empregar um objeto DataTabl e sem um banco de dados de back-end." & 7 "User ID=sa .Dia 12 RowCollection. até que você atualize o servidor.Tables(UOise") Dim drRows As OataRowCollection Dim objCurrentRow As DataRow . LISTAGE M 12.State " ConnectionState. CDTitle From Oisc" 14 15 16 17 18 19 2D 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Dim objConn _ As New OleOb.Message) End Try If objConn. será preciso utilizar o método Delete. as exclu i. que realmente removem o objeto OataRow específico do conjunto. Fil 1 (objOS. mas se a intenção for usar todas as alterações feitas no objeto DataSet para atualizar a(s) tabela(s) de origem.Open Then Try objOataAdapter . DiscID. objConn) Dim objOS _ As New OataSet("COs") Try ob j Conn ." & 5 "Password"i" &_ 6 "Pers i st Security Info"True. em seguida. OpenO Catch myException As System . que localiza certas linhas específicas e. o SQL Server. WriteLine(myExeeption.12 fornece o exemplo de um laço em uma tabela. A Li stagem 12.12 O Método Delete Marca uma Linha como Excluída 1 Modu le ModuleI Private Const 2 3 sConnection As String" 4 "Provider"SQLOLEOB. " & g "Oata Source"(local)" 10 11 Sub Main() 12 Dim sSQL As String 13 sSQL " "SELECT ArtistIO. Close () Oim objTable As OataTable objTable " objOS.

Readline() For Each objCurrentRow ln drRows If CType{objCurrentRow{HArtistIO"). RowState Case OataRowState.Rows.Write{"{OI:{11 ". press ione return para iniciar!") Console. Rows OisplayTable{objTable) Console.Message) End Try Console.Write{"[Oeleted] Case OataRowState.Modified Console.WriteLine(myException.ReadLine() End If End Sob Sob DisplayTable{ByRef objTable As DataTable) Oim objRow As DataRow Dim objCol As DataColumn Dim i.Readline() OisplayTable(objTable) Catch myException As System.Added 72 73 74 75 76 77 ") ") 78 79 80 . Integer) obj CurrentRow.12 O Método Oelete Marca uma linha como Excluída (continuação) 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 drRows = objTable .Count .Exception Console.Acessando Dados co m a Plataforma . Name) Next Console.WriteLine() For i = O To objTable.Write("[Modified] Case OataRowState. press i one return para visua li zar") Console.Columns.Delete() End If Next = 3 Then Console. DataType .N ET 333 LISTAGEM 12.Columns(j) Console.1 objCol = objTable.Write{"Se pretende exclu ir . j As Integer For j = O To objTable.Write{"Após a exclusão .1 objRow = objTable.Rows{i) Select Case objRow . ColumnName.Count ._ objCol .Oeleted Console. objCol .

Atualizando O Banco de Dados Depois de adicionar. forneceu um objeto de comando ou uma instrução SQL que o adaptador.Write{"{O) ". Nesse caso.Columns.Dia 12 O Método Delete Marca uma Linha como Excluída (continuação) LISTAGEM 12. 90 91 objRow.Write("[New] ") 81 Case DataRowState. em seguida. manipula a extração de dados do banco de dados e é chamado de Select- . 87 objRow. edi tar ou exc luir os registras.Unchanged 82 ") Console. dentro da rotina DisplayTable. independentemente das mod ificações feitas .12 Console.RowState <> DataRowState . Inserçã o e Exclusão Quando você criou um adaptador de dados para carregar informações em seu DataSet. e envolve o uso da classe de adaptadores de dados.Original) 92 End If 93 Next 94 Console. O proced imento que usa um Da taSet alterado para atualizar o banco de dados de origem é o mesmo. você terá de atualizar a fonte original dos dados (o banco de dados) antes que essas alterações tenham efeito.Write( "{O) ". isso é particu larmente importante porque uma linha exclu ída não possui valores válidos para o campo atual.Item(j.1 85 If objRow. Deleted Then 86 Console . Pela inclusão do segundo parâmetro. e um erro será gerado se você tentar acessá-los. usou para recuperar os dados de seu banco de dados.Item(j)) 88 Else 89 Console. deve ser exibido em vez do valor do cam po atual (o padrão).Count . tendo cada um sido projetado para manipu lar uma taretà diferente na transmissão de dados entre o banco de dados e os DataSets. esse código especifica que o valor do campo após a atualização mais recente.Origina l . DataRowVersion. uma sintaxe diferente foi usada para acessar o valor de um campo. Esse comando na verdade é um entre os quatro aos quais o adaptador de dados pode dar suporte. DataRowVersion. aquele quejá foi usado. Especificando os Comandos de Atualização.WriteLine() 95 Next 96 End Sub 97 98 Eod Module Observe que na linha 90.Write("[Unchanged] 83 [nd Selec t 84 For j = O To objTable. Só um dos comandos. ou no momento em que for carregado.

SourceColumn = "AristID" 7 objParam . Parameters . antes que a ação que lhe compete possa ser executada. Novo Para que você mesmo crie esses comandos. Os outros três (UpdateColTflland.OleDbCommand() 2 Dim sDeleteSQL As String 3 4 sOeleteSQL . prec isará usar um tipo de consulta que não fo i abordada até agora nesta lição. Os pontos de interrogação são usados na instrução SQL para representar os parâmetros.CommandText = sDeleteSQl Os detalhes devem ser fornecidos para cada espaço reservado pela inclusão de um objeto de parâmetro (01 eOBParameter ou SQLParameter. LISTAGEM 12.13 Os Adaptadores de Dados Preci sam de Comandos com Espaços Reservados 1 Dim objDeleteCommand As New 01eDb . A Listagem 12.Original Nesse exemplo. Os espaços reservados foram assoc iados aos parâmetros com base na posi- . Um comando dessa espéc ie deixa espaços reservados especia is em sua instrução SQL . dependendo do ambiente em que você trabalha) no conjunto de parâmetros do comando.14 mostra o código necessário para adicionar um parâmetro e configurar algumas das propriedades disponíveis. Cada um desses comandos deve conter um valor apropriado. OleDb. DeleteColTflland e InsertColTflland) manipulam edições.Acessando Dados com a Platafo rma . e também pode ser associado a uma versão espec ificado campo por meio da propriedade SourceVersion.que são preenchidos com valores específicos antes que o comando seja executado.OleObParameter 2 3 objParam = objDeleteColTflland .. que será criado ou inicializado antes de ser atribuído à propriedade. exclusões e inserções no banco de dados.Integer) 5 6 objParam .\". um comando com parâmetro. como mostrado na Listagem 12. o único ponto de interrogação fornecido para a SQL foi associado a esse novo objeto de parâmetro. Cada objeto de parâmetro é vincu lado a um campo especi ficado do OataSet por meio da propriedade SourceCol umn. SourceVersion = DataRowVersion.14 Criando Parâmetros em um Objeto de Comando 1 Oim objParam As OleOb. Connection " objConn 7 objDeleteCommand.13: TERMO LISTAGEM 12.OleObType . seja uma instrução SQL ou uma chamada a um procedimento armazenado no servidor. Cada propriedade dessas representa um objeto COlTflland do tipo apropriado (01 eDBColTflland ou SQLColTflland).parâmetros . Add{_ 4 "@ArtistID" .N ET 335 COlTflland."DElETE FROM Artist WHERE ArtistID " ?" 5 6 objDeleteCommand .

Cu r rent). " & g "Data Source=(local)" 10 11 Sub MainO 12 Dim sSQl As String 13 sSQl = "SElECT ArtistID.15 mostra um exemplo completo e muito extenso que cria uma conexão com o banco de dados e um adaptador e. objOeleteCommand A Listagem 12.15 As Alterações Não Têm Efeito até Que o Método Update Seja Chamado 1 Module ModuleI 2 Private Const 3 sConnection As String =_ 4 "Provi der. Já que estamos lidando com lin has excluídas aqui. configura os comandos individuais para Upda teConmand. A versão-padrão é a do valor atual (Da taRowVers i on.CO . DeleteCommand .OleObCommand() 24 Dim objInsertCommand _ 25 As New OleOb. que não está disponível para uma linha excluída. carregado com dados e alterado e.. exatamente como na Listagem 12. para testar esses comandos. 12 anterior.SQLOl EDB .OleDbConnection(sConnection) 16 Dim objOataAdapter _ 17 As New OleOb.Dia 12 ção: o primeiro espaço reservado foi vinculado ao primeiro parâmetro." & 6 "Persist Security Info=True. LISTAGEM 12.OleDbCommand() 26 Dim sDeleteSQL As String 27 Dim sUpdateSQL As String 28 Dim sInsertSQL As String ." &_ B "Initial Catalog. o campo e sua versão correspondentes fo ram especificados nas linhas 5 e 6.OleDbCommand() 22 Dim objUpdateCommand _ 23 As New OleOb. A última etapa que você terá de executar antes do comando ser usado pelo adaptador será atribuí-lo á propriedade DeleteCorrmand: objOataAdapter . um dataset é criado.OleObOataAdapter(sSQL. é importante espec ificar SourceVers i on. Depois que o objeto de parâmetro foi criado." & 7 "User ID=sa. objConn) 18 Dim ob j OS _ 19 As New OataSet("Artists") 20 Dim objOeleteCommand _ 21 As New OleOb. Oe 1eteComnand e I nsertConmand. em seguida. I: 'o & 5 "Password. a fonte de dados é atualizada pelo método Update do adaptador. ArtistName From Artist" 14 Dim objConn _ 15 As New OleOb. depois. Por fim.

Connection = objConn objUpdateCommand. SourceCo1umn = "ArtistlO" objParam .Add(_ "@ArtistName" . Connection = objConn objOeleteCommand. Parameters . SourceColumn = "ArtistIO" objParam .SourceVersion " DataRowVersion.lnteger) objParam . OleDb.SourceColumn = "ArtistName" objParam.Add(_ "@ArtlstID".N ET 337 LISTAGEM 12.Current = ob j Param 54 55 56 57 58 ob j Param " objUpdateCommand.DeleteCommand sUpdateSQL = = 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 objDeleteCommand = "Update Artist SET ArtistName "WHERE ArtistlO = ?" ? " & objUpdateCommand.Integer) ob j Param .Acessando Dados co m a Platafo rma .OleDbType.Parameters. 01 eDb Type. CommandText = sInsertSQL objParam " objlnsertCommand.SourceVersion " DataRowVersion.UpdateCommand sInsertSQL = = 59 60 objUpdateCommand 61 62 63 64 65 66 67 68 69 70 71 "INSERT INTO Artist " & "(ArtistlO. Current .CommandText = sOeleteSQL Dim objParam As OleDb.Add(_ "@ArtlstlO". 01 eOb.15 As Alterações Não Têm [feito até Que o Método Update Seja Chamado (continuação) = 29 30 31 sDeleteSQL "OELETE FROM Artist WHERE ArtistI O " ?" 32 33 34 objOeleteCommand . Integer) objParam .Original objDataAdapter. SourceVersion " DataRowVersion .Parameters. Char) objParam. SourceVersion " DataRowVersion .OleDbType.OleDbParameter ob j Param " objOeleteCommand.Ori9inal objDataAdapter. OleDb.CommandText = sUpdateSQL objUpdateComma nd.Add(_ "@ArtistID" . ArtistName) " & "VALUES (? ?) " ob j InsertCommand . SourceColumn = "ArtistlO" objParam. OleDb . Connection = objConn objlnsertCommand .Parameters.OleObType .

15 As Alterações Não Têm Efeito até Que o Método Update Seja Chamado (continua ção ) 72 73 74 75 76 77 objParam " objlnsertCommand. ExecuteNonQuery() Catch e As Exception 'Pode causar um erro porque 'Art istIO ' 11 já existe 'Mas se ocorrer.Add(~ "@ArtistName" .OleDbCommand(sNewArtistSQL .OpenO Catch myException As System. será correto. Rows 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 . "Artist") ob j Conn . AddWi thKey ob j OataAdapter . SourceColumn" "ArtistName" objParam .Message) End Try Try Oim sNewArtistSQL As String sNewArtistSQL " "INSERT INTO Artist " & "(Art istID. ArtistLastName)" 8o~ "VAlUES (11. 'Yankovich')" Oim objNewArtistCmd ~ As New OleDb. MissingSchemaAction "Mi ss i ngSchemaAct i on .Tables("Artist") Oim drRows As OataRowCollection Oim objCurrentRow As OataRow drRows " objTable .State " ConnectionState. " 8o~ "ArtistFirstName.Message) End Try If objConn. Current objOataAdapter . OleOb. 'Wei rd Al Yankovich' . Cl ose O Oim objTable As D ataTable objTable " objDS.Open Then Try objOataAdapter .Parameters.WriteL i ne{myException.Char) objParam . Fil l {objOS . SourceVersion " OataRowVersion .Exception Console. lnsertCommand " objlnsertCommand Try objConn.Dia 12 LISTAGEM 12. " & " 'A l ' . WriteLine(e.OleObType . ArtistName. objConn) objNewArtistCmd . Console .

Readl ine() DisplayTable{objTable) Console.Find(ll) .Write("Depois de inserir . " &_ " pressione re turn para in ic iar!") Console.ReadLine() DisplayTable(objTable) Console.Write("Se pretende inserir .Add(drRow) Console. DataRow drRow = objTable .Readline{) ' Acesse a linha com chave primária ig ual a 7 (lisa loeb) drRow = drRows . " & " pressione return para visualizar! ") Consol e. Delete{) = 115 116 117 11B 119 120 121 122 123 124 125 126 127 12B 129 130 11 Console. " & II press i one return para vi sua 1i zar os resul tados") Console. Find{7) drRow. End Edit () = "John Doe" . NewRow drRow("ArtistID") " 40 drRow("ArtistName") = "Kent Sharkey" ob j Table .Write("S e pretende atualiz ar.8eginEdit() drRow{"Art istName") drRow .Read l ine () 'Exclua a linha com chave primária drRows.Acessando Dados com a Plataforma .ReadLine() II 131 132 133 134 135 136 137 13B 139 140 14 1 142 143 144 145 146 147 14B 149 150 151 152 153 154 155 156 157 Dim drRow As Data .NET 339 LISTAGEM 12. " & pressione return para in ic iar!") Console.Write("Se pretende excluir ." & " pressione return para inicia r! ") Console.15 As Alterações Não Têm Efeito até Que o Método Update Seja Chamado (continua ção ) DisplayTab l e(objTable) Console.Write("Apõs a exclusão . Rows.

Item(j)) 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 .Write ("[Modified] ") Case OataRowState.") Console. Columns{j) Console.RowState Case OataRowState. "Art i s t") 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 Ca teh myExeeption As System. _ objCol.Writ eLine( myExeeption .Unchanged ") Console . Upda te (objoS .1 If objRow. objCol .oataType.Modified Console. Read Li ne O End If End Sub Sub OisplayTable{8yRef objTable As OataTable) Oim objRow As OataRow Oim objCol As OataColumn Oim i .Write{"{O}:{l} ".Message) End Try Console.Write{"[New] Case OataRowState.Rows.Columns.Name) Next Console.Write{"Pressione Return para finalizar.1 objRow " objTable.Rows(i) Seleet Case objRow.Oeleted Then Console .Count .Columns.1 objCol " objTable . " & " pressione return para visualizar os resultados") Console.Exeeption Console .New ") Console .Write(" {O} ". open () obj Da taAdapter.ReadL ine () oisp l ayTable(objTable) obj Conn.RowState oataRowState.Count .Write("Oepois de atual i zar .15 As Alterações Não Têm Efeito até Que o Método Update Seja Chamado (continua ção ) Console.Oeleted Console .Col umnName. j As Integer For j = O To objTable.WriteLine{) For i " O To objTable.Count .Dia 12 LISTAGEM 12. obj Row.Writ e{ "[Unehanged ] End Seleet For j " O To objTable.Write{"[Oeleted] ") Case OataRowState.

Essa linha é adicionada de modo que possa ser excluída posterionnente.15 As Alterações Não Têm Efeito até Que o Método Update Seja Chamado (continua ção ) 201 Else 202 Conso le.Item(j . OataRowVe r sion. Em vez de usar o dataset e o adaptador de dados no modo desconectado.Write (" {O} " .N ET LISTAGEM 12.15 está disponível para download no site deste li vro na Web. AddWi thKey. No entanto. as linhas 80 a 84 configuram a conexão com Obanco de dados.Acessando Dados com a Platafo rma . que ocorre depois que a conexào é abelta e que o único registro novo tiver sido inse· rido. não é necessário digitá-lo a menos que você queira mesmo fazê. devido ao fato de que todos os campos da tabela têm de ser enviados nesses comandos. esses objetos de comando não foram realmente gerados nesse ponto. DELETE e IN$ERT para 0leD8DataAdapter. A primeira seção do código está bem dentro do padrão utilizado em todos os outros escritos nesta lição. portanto. ~ 203 ob j Row. Observe corno a li nha 39 especifica que $ourceVersion seja OataRowVersion. três novos objetos 01 eDBCorrrnand também foram criados c serão em pregados na representação dos comandos UPDATE. As linhas 43 a 59 .Original porq ue os dados aluais não são válidos para urna linha exclu ída. As li nhas 30 a 4 1 criam e configuram o objelo de comando Delete. porque a tentativa de remover qualquer outro registro de Artist fa lharia devido à existência de registras-fi lhos (CDs desse artista na tabe la Dise). uma ún ica linha de dados é inserida no banco de dados pe lo método ExecuteNonQuery( ) de um objeto de comando. essa etapa é manipu lada confomle cada comando vai sendo configurado posterionnente. em seguida. comunica ao adaptador para criar automaticamente o . E bom ressaltar que para Update e Insert.Original)) 204 End I f 205 Next 206 Console.Writel ine() 207 Next 208 End Sub 209 End Module 341 ANALISE o código da Listagem 12. infomla ao adaptador de dados como manipular a configuração de lima tabela quando não existe nenhum esquema (as info rmações sobre o tipo de dados e o layout referente aos dados).configuram o comando Update e. Essa configuração especifica. A linha 106. muitos parâmetros são necessários.Um objelO 01 eDB OataAdapter e um OataSet também foram gerados e inicializados para tomar possível se conectar com o banco de dados e retornar os resu ltados da instrução SELECT para seu programa. Como parte do código de inicial ização. adicionando o único objeto de parâmetro para Art i s t ID (a chave primária). essa inserção é fe ita de imediato por uma operação direta. Voltando ao código queé comum a todos os exemplos desta lição.lo. devendo ser substituída pelos valores apropriados para seu sistema. as linhas 61 a 78 manipulam o comando Insert. A seguir. A string de conexão foi criada. e usada para instanciar um novo objelO 01 eDBConnec t i on (l inha 14).

ArtistName From Artist 90 exec sp_execu tesql N'Update Artist SET ArtistName ~ @Pl WHERE ArtistID = @P2' . . Apenas para se certificar de que está claro que esse é um processo desconectado. ArtistLastName) VALUES (11. junto a uma string indicando que tabela dentro do Da taSet deve ser utilizada para atualizar o banco de dados. a linha 164 usa o método Update de 01 eDBDataAdapter para aplicar todas as alterações de dados ao DataSet. N' @PI int ' . Se o nome da tabe la não for fornecido. 4D. @P2)' . Esse método retorna um objeto DataRow dado um valor de chave primária válido para pesquisa. o DataSet é carregado com os dados pelo método Fi 11 e com um parâmetro adicional para especi fi car o nome da tabela rec ém ~criada. De~ pois desse ponto. cada uma correspondendo a um dos comandos do adaptador. 7 90 exec sp_executesql N'DELETE FROM Artist WHERE ArtistID 90 ~ @Pl'. altera e adiciona registros ao objeto DataTab1e para fornecer um teste de todos os três tipos de ed ições que podem ocorrer em um DataTabl e. 'Yankovich') 90 SELECT ArtistID. mas o método Upda t e simplesmente chamaria os comandos apropriados para cada registro alterado. 'Weird AI Yankovich ' . Para concluir. na linha 108. mas o resultado deve ser semelhante ao mostrado a seguir: INSERT INTO Artist (ArtistID. N'@Pl int . 'A I' . o código exclui. alterado e excluído.@P2 char(l2)'. Para encontrar a linha correta a exc luir (linha 123) e editar (linha 152). O resultado desse código deve ser uma seqüênciade instruções SQL executadas em um banco de dados.@P2 int'. 'Kent Sharkey ' 90 Nesse exemplo. um processo que requer que o objeto DataTab 1e tenha informações sobre a chave primária (le ia o parágrafo anterior para obter uma explicação de como a linha 106 fornece essa informação). Esse método usa um DataSet como parâmetro. A segu ir. o adaptador tentará atualizar o banco de dados com todas as tabelas disponíveis. 11 exec sp_executesql N' INSERT INTO Artist (ArtistID. 'Artist' .Dia 12 esquema básico (informações sobre o campo) e incluirtambém infonnações sobre a chave pri ~ mária. o método Find do objeto DataRowColl ec tion é usado. ArtistFirstName. N' @Pl char(8). Se você estiver usando o SQL Server e quiser ver o que acontece. depois de todas as edições. ArtistName . Fornecer detalhes sobre como utilizar o Profiler está além do escopo deste livro. fi linha I09 en~ cerra a conexão com o banco de dados antes que a verdadei ra manipu lação de dados ocorra. poderá empregar o Profiler para observar todos os comandos sendo processados no serv idor enquanto esse código estiver em execução. só um registro fo i inserido. ' John Doe'. ArtistName) VALUES (@P l.

quando o método Update do adaptador for chamado. . depoi s que o objeto OataTabl e.NET crie automaticamente os comandos necessários. 1der) deve ser gerada e inicial izada e.M ssingSchemaAction _ i " MissingSchemaAction . Esse método cria o objeto oataTable antes de carregá-lo e preenche a tabela com sua lista de colunas. enquanto AddWi thKey adiciona informações sobre essa mesma coluna e também configura a propriedade PrimaryKey a cada tabela que preencher. ao ser atualizado. embora haja algumas etapas a seguir para se alcançar esse objetivo. Schema Type . que pode ser obtido pelo conjunto Columns de oataTable: oim PK(O) As oataColumn PK(O) " objTable . Essa propriedade possui algumas configurações interessantes.Ias manualmente usando a propriedade PrimaryKey de um objeto oataTable. Columns("Art istIo") objTable. Essas informações podem ser fornec idas de uma entre várias maneiras. os comandos Update.AddW ithKey objOa taAdapter.PrimaryKey " PK Você também pode de ixar que o adaptador de dados obtenha as informações apropriadas na fonte dos dados. incluindo a chave primária e muitos outros detalhes sobre a tabela. o que pode ser mais simples. você pode fazer com que o adaptador crie as infonnações necessárias para o esquema durante o carregamento dos dados. O primeiro requisito para os comandos gerados de modo automát ico é que seu oataSet deve conter pelo menos informações sobre a chave primária das tabe las re levantes. objoataAdapter . informações sobre a chave primária e qualquer outra restrição que possa descobrir na fonte de dados: objoa taAdapter . A Listagem 12. Insert e oel ete poderão ser gerados de modo automático. der Oll SQLConmandBu. você pode especificá. tiver informações sobre a chave primária. Primeiro. configurando o valor da propriedade Mi ssi ngSche maAc t i on antes de chamar Fi 11.Acessando Dados co m a Pl atafo rma . "Art is t") Independentemente do método que você usar. por meio do método Fi IISchema. Add (o valor padrão) cria automaticamente as informações sobre a coluna (nomes e tipos de dados) se esses detalhes já não exist irem na tabela. já que todas elas produzirão o efeito desejado. Fi 11 Schema (obj OS . fazendo algumas alterações e chamando Update . Essa propriedade é configurada com o campo apropriado. "Art is t") Para concluir. mas AddWi thKey é necessária para esse fim. em seguida. uma instância da classe apropriada do criador do comando (01 eOBConmandBu . é possível de ixar que o ADO. se algum comando necessário est iver faltando.N ET 343 Usando Comandos Gerados Automaticamente Como alternativa a você mesmo especificar os comandos. ele será criado. Primeiro. Mapped . 16 demonstra esses conceitos carregando alguns dados simples em um DataSet. Fi 11 (obj OS.

Exception Conso1e . C1 ose () Dim objTable As DataTable objTab1e" objOS.Message) End Try If objConn.Tables("Artist") Dim drRows As OataRowCollection Dim objCurrentRow As DataRow drRows " objTab1e.l j" & 5 "Password = j" &_ 6 "Persist Security Info"True ô " & 7 "User ID"saj" & 8 "Initia1 Catalog"CD." & 9 "Oata Source=(loca1)" 10 11 12 13 14 15 16 17 18 19 20 21 Sub Main() Dim sSQL As String sSQL" "SELECT ArtistlD.Fill(objDS. Open () Catch myException As System. ArtistName From Artist" Dim objConn _ As New OleOb. "Art i st") objConn.16 D Método Update Executa os Comandos Correspondentes no Banco de Dados de Dr. objConn) Dim objCommandBui1der _ As New OleOb.OleObCommandBuilder(objOataAdapter) Dim objDS _ As New DataSet("Artists") Try obj Conn.OleObConnection(sConnection) Dim objDataAdapter _ As New OleOb. Writeline(myException.Open Then Try objOataAdapter.State " ConnectionState.MissingSchemaAction " Mi s s i ngSchemaAc t i on.Dia 12 LISTAGEM 12. gem 1 Module ModuleI Private Const 2 3 sConnection As String = 4 "Provider=SQLOLEOB.Rows DisplayTable(objTable) 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 . AddWi thKey objOataAdapter.01eObDataAdapter{sSQL.

Write("[Oeleted] Case DataRowState. WriteLine() For i " O To objTable . Rows . ColumnName .1 ob j Row " objTable .Find(7)("ArtistName") " "Kent Sharkey" Console.Added 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 . j As Integer For j " O To objTable.16 O Método Update Executa os Comandos Correspondentes no Banco de Oados de Origem (continuação) 44 45 46 47 48 49 50 Console . ReadLine() DisplayTable{objTable) objConn. ReadLine{) 'Exclua a linha com c have primária " 11 drRows. objCol .Columns.Write("[Modified] ") Case DataRowState. Count . RowState Case DataRowState.Open{) ob j OataAdapter . _ objCol.Name) Next Console . Write("Se pretende editar .Modified Console.Message) End Try Console. " & " pressione return para inic i ar!") Console . Write("{O} : {1} " .Write("Pressione Return para finalizar. "Art i s t") Catch myException As System.N ET 345 LISTAGEM 12. Update (obj OS .Write("Depois de editar . Rows(i) Select Case objRow .OataType. " &_ " pressione return para visualizar os resultados") Console . ReadLine{) 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 End 11 End Sub Sub DisplayTable(ByRef objTable As DataTable) Dim objRow As OataRow Dim objCol As OataColumn Dim i .Acessando Dados co m a Platafo rma .1 objCol " objTable.Columns(j) Console .Oeleted ") Conso l e .WriteLine{myException.Exception Console.Count .") Console .

Relations . que pode ser acessado como uma propriedade do próprio objeto DataSet. Wri te (" [Unc hanged J End Select For j : O To objTable .Original)) End If Next Console. ParentColumn .16 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 Console. Depois que você tiver um DataSet com mais de uma tabela.Wri teLine() Next End Sub End Module Como em todos os exemp los desta lição. será possível especificar relacionamentos entre elas. esse código poderia ser mod ificado para trabalhar com as classes SQLCl i ent precisando apenas de algumas alterações menores.ltem(j .Ch ildColumn) Como exemplo dessa situação. a Listagem 12. Count 1 If objRow.Columns . Todos os relacionamentos que ex istem dentro de um DataSet são representados por objetos do conjunto Re1ations . um relaciona~ menta será estabelecido ent re as duas tabelas.Wri te(" [New ] ") Case DataRowState. então. perm it indo que seja chamado de sete maneiras di~ ferente s. !tem(j) ) E1 se Console . A string de conexão te~ ria de ser alterada pe la remoção da seção Provi der.Unchanged ") Conso 1e.RowState <> DataRowState. use o método Add do conj unto Rel at i ons.17 cria uma conexão com o banco de dados e car~ rega as tabelas Artist e Disc em um novo DataSet. Para criar um relac ionamento entre duas tabelas. DataRowVersion .Dia 12 O Método Update Executa os Comandos Correspondentes no Banco de Oados de Origem (continuação) LISTAGEM 12. esta sintaxe funcionara bem: objNewRelation = objDS. Trabalhando com Múltiplas Tabelas Quando os dados são carregados cm um DataSet.Write("{OI ". mas se qui sermos configurar um relacionamento sim ples com base em um único cam~ po (coluna) da t abe l a~pai c um da tabe l a~ filha . Esse método possui muitas opções de parâmetros. como entre as tabelas Artist e Disc (baseado nos exemplos que desenvolvemos até agora). obj Row.Write("{OI ".Add(RelationName . o que per~ mite que um único DataSet possua os resultados de mui tas consultas diferentes. ._ objRow . Depois que tudo for carregado. e todos os objetos declarados como classes 01 ED8 precisariam ser substituídos por seus equivalentes SQLCl i ent .Deleted Then Console. são inseridos em tabelas individuai s.

ArtistN ame From Artist" sSQLOisc = "SELECT ArtistID.MissingSchemaAction '" MissingSchemaAction.Fill (objOS .l.NET 347 LISTAGEM 12. objConn) Dim ob j OS _ As New OataSet("CD") objOataAdapterArtist.OleDbConnection(sConnection) Oim ob j OataAdapterArtist _ As New DleDb.OleDbDataAdapter(sSQLArtist. Add ("Oi scArti s t" '_ 37 objOS . Fi 11 (objDS.OleDbOataAdapter(sSQLDisc . _ 38 objOS." & 10 "Data Source=(local)" 11 12 Sub MainO 13 Dim sSQLArtist As String 14 Dim sSQLDisc As String & 15 16 17 18 19 20 21 22 23 24 25 26 sSQLArtist = "SELECT ArtistID. Tabl es (" Oi sc") ." &_ 6 "Password=321dweksp302axn . " & 9 "Initial Catalog=CD.MissingSchemaAction '" MissingSchemaAction .Col umns ("Arti stIO")." 8 "User ID"'sa .18. é possível usar essas infonnações para perm iti r o acesso estruturado de uma Iinha de dados-pai a qualquer Iinha relacionada com ela na tabela-filha. " & 7 "Persist Secu r ity Info"'True. Rel ati ons . AddWithKey objOataAdapterOisc. "Di sc") 27 28 29 30 31 32 33 34 35 36 objOS .AddWithKey objOataAdapterArtist. objConn) Oim ob j DataAdapterDisc _ As New OleDb. Tab 1es ("Arti st") . CDTitle From Oisc" Dim ob j Conn _ As New DleDb.Col umns ("Art i stIO"» 39 End Sub 40 End Module Com os relacionamentos definidos.17 O OataSet Reflete Algo Semelhante à Fonte de Dados 1 Modu le ModuleI 2 3 Private Const 4 sConnection As String =_ 5 "Provider=SQLOLEOB. "Artist") ob j OataAdapterOi sc . O cód igo da Listagem 12. que pode ser adicionado no local exato que antecede o final do .Acessando Dados com a Platafo rma .

inalterada ou nova). . em seguida. A Listagem 12.18 Acessando as li nhas . 17.Tables("Artist").Filhas de Qualquer linha . a criação de um objeto O ataV i ew usando a tabela como seu construtor. quando criada. Sort e/ou RowFil ter. que é uma propriedade do próprio DataSet.Dia 12 procedimento da Listagem 12. em que o método GetChi 1dRows do objeto DataRow é usado para retornar um array de DataRows da tabela-filha. ou você pode acessar seu conteúdo diretamente como um conjunto de objetos OataRowView. excluída. Depois que a visualização for gerada. pode ser acessada pe la propriedade Oefaul tV i ew da própria tabela ou pelo conjunto ReI ations. o preenchimento de uma tabela com dados e. objDRChi I d ("CDTi t I e"}) Next Next Console. Essa visualização (OataView). ela poderá ser configurada com uma combinação aleatória de três propriedades diferentes: RowStateFil ter.Readline{) 12 13 14 15 A parte essenc ial do código desse exemplo está na linha 9. a capacidade de especificar a ordem de classificação. LISTAGEM 12. um fi ltro sobre as linhas e um filtro com base no estado da linha (alterada. GetChi 1dRows (" Di scA rt i s t") For Each objORChild ln objChildRows Console. executa um laço por meio dos registros da tabela Artist e exibe os CDs associados a esse artista.Pai Específica po r Meio do Método GetChildRows I 2 3 4 5 6 7 8 9 10 11 Dim objDRParent As OataRow Dim objDRChild As DataRow Dim objChildRows()As DataRow For Each objORParent ln objDS. A visualização propriamente dita pode ser vinculada a um cont role dos forrnulários Windows (veja a próxima seção para obter informações sobre a vinculação de dados).NET inc lui o conceito de visualizações de dados.Rows Console. objDRParent("ArtistIO to) .WriteLine("{O} {I}". 19 apresenta o código-padrão para a abertura de um banco de dados. Visualizações o ADO._ obj DRParen t (" Art i s tName"» obj Ch i 1dRows '" obj DRPa rent.WriteLine(" lO}" . Esse array inclui todas as linhas da tabela-filha em que os campos Art i stlO da tabela-pai e da fil ha têm uma correspondência.

_ objORV("ArtistName"» Next Console.Acessando Dados co m a Platafo rma ." & 9 "Data Source"(local)" 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Sub Main() Dim sSQLArt i st As String sSQLArt i st" "SELECT ArtistID . ArtistName From Artist" Dim objConn _ As New OleDb.Read Line{) 36 37 38 39 40 41 42 43 44 . Rows Console.OleObConnection{sConnection) Dim objDataAdapterArtist _ As New OleDb.19 Vários Objetos DataView Apontando para o Mesmo DataTable 1 Modu le ModuleI 2 Private Const 3 sConnection As String =_ 4 "Provider=SQLOLEOB. "Artist") Dim objDR As DataRow Console. WriteLine{"No objeto DataView") For Each ob j ORV ln objOV Console.WriteLine{"Na tabela " ) For Each objOR l n objDS .Missi ngSchemaAction " MissingSchemaAction .W r it eLine{" {O} {l}" . " &_ 8 "Initial Catalog=CD. objConn) Dim objDS _ As New DataSet{"CD") objDataAdapterArtist. AddWithKey objDataAdapterArtisLFill (objOS ." &_ 5 "Password= .WriteLine("{O} {l}" . Tables("Artist") .l.OleObDataAdapter(sSQLArtist. objORV("ArtistID") .N ET 349 LISTAGEM 12._ objOR{"ArtistName"» Next Dim objDV As OataView objOV "New OataView{objDS. Sort" "ArtistName" objOV . RowFilter" "ArtistIO < 8" Dim objDRV As DataRowView Console .Tables("Artist"» objOV . " & 6 "Persist Security Info"True õ " & 7 "User ID"sa . obj OR{"ArtistID"J.

Depois que . como um objeto OataTable ou DataSet. I I linhas foram exibidas por ordem de identificação do artista. a uma fonte de dados. presumindo que você tivesse feito todos os exemplos até este ponto. um laço rápido (linhas 26 a 30) os exibiu sem dar a impressão de que percorreu um objeto DataView (na verdade percorreu a visuali zação de dados-padrão). observe que na li sta Through Table. 7 Kent Sha rkey 1 Natalie Imbruglia 4 Queen 3 Sting 2 The Tragically Hip Mesmo se sua sa ída não estiver exatamente igual ao texto anterior. Vinculação de Dados A vinculação de dados fornece lima maneira de associar um elemento da interface com o usuári o. Em seguida. deve se parecer com o apresentado a seguir: Through Table 1 Natalie Imbruglia 2 The Trag ica ll y Hip 3 Sting 4 Queen 5 Soney M. Para concluir. como uma grade. e os dados foram carregados em um DataSet. Em Through DataView. e o resultado reflete tanto o filtro quanto a ordem. esse objeto Da ta Vi ew foi usado para acessar as linhas (linhas 39 a 43). 6 Sarenaked L adies 7 Kent Sharkey 8 Janet Jackson 9 Matchbox Twenty 10 Madonna 40 Kent Sharkey Through DataView 6 Barenaked Ladies 5 Soney M.Dia 12 12. O resultado desse código. as linhas foram acessadas por me io da visuali zação recém-criada. Depois do carregamento de dados. dessa vez exibindo-as aplicando sua ordem e filtro.19 Vários Objetos OataView Apontando para o Mesmo DataTable LISTAGEM (continuação) 45 End Sub 46 End Module Até a linha 22 não temos nada tão diferente dos outros exemplos que vimos até aqui: uma conexão com o banco de dados foi aberta. um objeto OataView foi criado e configurado com uma ordem e um filtro sobre os valores das linhas (linhas 32 a 35).

NET 351 um elemento da interface é vinculado a uma fonte de dados. OataVi ews e OataTables. Para você testar esse código. incluindo Arrays. Um recurso interessante e poderoso da vinculação de dados da plataforma . Vinculação de Dados com os Formulários Windows Todos os contro les dos formu lários Windows que dão suporte à vincu lação de dados vêm em duas versões pri ncipais: os que dão suporte à vinculação simples e os que podem manipular a vincu lação complexa.ck do botão. Coll ecti ons. mas existe o potencial para vincular todo tipo de informações Quando um objeto DataSet ou DataTable é vinculado a um controle da interface com o usuário. Wi ndows. por sua vez. dois lipos principais de interfaces com o usuário podem ser criados: o cliente Windows sofi sticado (System. retornadas à fonte de dados. Vinculação Simples Os controles que dão suporte à vinculação simples expõem um conjunto DataBindi ngs que pode ser usado para vincu lar as propriedades a campos de dados. A Listagem 12. . trabalharcmos apenas com DataSets. Em nossos excmplos.NET nào serão detalhados nesta lição. crie um novo aplicativo Windows no Visual Basic e insira apenas uma caixa de texto e um botão no formulário.NET é que ela não é limitada a trabalhar com DataSets. a vinculação na verdade se dá com a visualização-padrão (objeto DataV iew ou DataSetView) de DataTable ou DataSet.20 fornece um exemplo desse tipo de vinculação de dados como parte de um aplicativo com formulários Windows. OataSets. OataVi ews. Para o desenvolvedor.Acessando Dados com a Plataforma . A vinculação complexa ocorre quando o controle é associado a uma fonte de dados comp leta (como um objeto DataTable). as alterações nessa fonte serão refletidas na interface com o usuário. A vinculação de dados nos fonnulários da Web e o acesso geral aos dados do ASP. Fonns) e o cl iente da Internet WebFonns. uma ampla variedade de objetos pode usar a vincu lação de dados. e entre os objetos embutidos ela têm suporte apenas dos controles DataGrid e ComboBox. NOTA No universo da plalafonna .NET. e as que afetarem os dados por meio da interface serão. A vinculação simples acontece quando uma propriedade de um controle é associada ao campo de uma fonte de dados. Os detalhes da vinculação serão abordados na próxima seção junto a um exemplo passo a passo ocorrendo entre um dalasel e uma grade. OataTabl e e outros. a vinculação de dados resolve todos os problemas comp lexos de manipular as interações do usuário com os dados e elimina a necessidade de escrever um código extenso apenas para fornecer um meio de o usuário interagir com seus dados. Deixe os contro les com seus nomes-padrão (textboxl e Buttonl) e inclua esse código no evento Cl. Na verdade.

Message) End Try If objConn.Exception Windows . OefaultView textBoxl.Click 4 Dim sConnection As String = 5 "Provider=SQLOLEDB .Dia 12 LISTAGEM 12.Message) End Try End 11 End Sub 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 .Show(myException. " & "Initial Catalog=CO. "Di sc") objConn .DataBindings .Object .MessageBox .Show(myException.20 A Vinculação de Dados Pode Ser Criada Dinami camente em Código 1 Private Sub buttonl_C l ick(ByVal sender As System. objDV. Close() Dim objTable As DataTable obj Table -. Forms. objConn) Dim objOS _ As New OataSet("Artists") Dim objDV As OataView Try objConn. Fi 11 (obj OS. Forms. objoS . ArtistName From Artist" Dim objConn _ As New OleDb.State '" ConnectionState .EventArgs) 3 Handles buttonI. " & 8 "User IO=sa .Add("Text". 2 ByVal e As System." &_ 7 "Persist Security Info=True . Open Then Try obj Oa taAdapter.OleObConnection(sConnection) Dim objDataAdapter _ As New OleOb." & 9 10 "Data Source=(local )" 11 12 13 14 15 16 17 18 19 20 21 Oim sSQL As String sSQL '" "SELECT ArtistIO . Tables("Disc") obj OV '" objTable ._ "ArtistName") Catch myException As System. " & 6 "Password=.MessageBox.Exception Windows . I .OleDbO ataAdapter(sSQL .Open() Catch myException As System.

é útil porque perm ite que você se mova para a frente e para Irás através dos dados conforme desejar. a linha no final do procedimento (linha 37) é que realbanco de dados e obtendo um D mente cria a vinc ulação de dados. ele será interrompido se você tentar ultrapassar os dados disponíveis: Private Sub button2_Click(ByVal sender As System .N ET 353 Além do trecho inteiro de código que você já conhece (linhas I a 34) abrindo a conexão com o ataSet.I!I'"..OataSource).6).EventArgs) Handles button2. portanto. Isso não é tão útil assim. Ao especificar a fonte de dados na qual está interessado. você terá a capacidade de se mover para adiante na lista de arti stas.Dbject . o código a acessa percorrendo o conjunto DataBi nd . No exemplo a seguir.6 . considerando que você está visualizando só o primeiro registro e não tem COmO se mOver para a frente ou para trás através dos dados.DataBindings(O). você poderá obter um objeto Bi nd i ngContext para ela.. a fo nte de dados original não é uma variável no nível do formulário..Acessando Dados com a Platafo rma . ng5 da caixa de texto. será preciso aceS5ar o conjunto BindingContext do formu lário-pai. Para fornecer uma funcionalidade como essa quando você usar a vincu lação simples de dados.Click Me.Pos i tion += 1 End Sub Esse objeto de contexto expõe outros recursos como AddNew e CancelCurrentEdit. se tem acesso a várias propriedades e métodos para criação de uma interface que trabalhe com os dados vincu lados. ByVal e As System. Se adicionar um segundo botão ao formulário e inserir um cód igo nele. assim.Binding Context(text Boxl . . Uma propriedade em particular. o valor do campo Arti stName será exibido (veja a Figura 12. Com esse objeto de contexto. Observe que não há nenhum recurso avançado nesse código. permitindo que você exiba os campos de seus dados de várias maneiras. especificar um índice igual a zero retornará somente a fonte de dados disponível. FIGURA 12.' IIIII(õJEI Podemos ler ///1/(/ \'illculaçào simples de dados com rários eomroles diferemes ao mesmo tempo. O método Add do conjunto Da taB i ndi ngs perm ite a especificação de uma propriedade do controle e da fonte de dados (nesse caso a visuali zação de dados-padrão da tabela). Depoi s que isso for feito. tornando-o um objeto com o qual você trabalhará freqUentemente. Só há uma vinculação de dados. Position.

em vez de a um único campo. Se OataSource tiver mais de um objeto que puder ser vinculado (como um DataSet com mais de uma tabela). incluindo as alterações descritas anteriormente no evento Cl i ck de seu botão. se vincular DataGri d a um Da taSet. mas deve ficar semelhante. sendo prec iso apenas aprender uma manei ra de programar aplicável a todos eles. é possível gerar sistemas comp letamente interativos que não ocupem .NET. especifique o item apropriado como um vaIar ai fanum érico na propriedade Da taMember. depoi s que o botão for clicado. Esse tipo de vinculação de dados tem su- porte de dois dos controles que vêm com o Visual Stusio .20.OataSource dataGridI . Deixe tudo com os nomes-padrão e insira o código da Listagem 12. Como resultado desse código. Ocód igo para faze r isso seria idêntico ao da Listagem 12. então. DataGrid e ComboBox. Empregando a natureza desconectada dos DataSets. exceto pelo fato de ser preciso substituir as linhas 36 a 38 pe las descritas a seguir: dataGr idI. Seu fo rmulário pode não ter exatamente a mesma aparência da Figura 12. Resumo o acesso a dados fo i totalmente redesenhado paraa plataforrna .OataMember = = objDS "Disc" Para que você mesmo teste a vincu lação complexa. Usando os provedores de OLEDB (drivers). crie um novo apl icativo Windows e insira um botão e um controle OataGrid no fonnulário (os dois estão disponíveis na caixa de ferramentas). portanto. Portanto.NET.7. você definirá a propriedade Oata- Source do controle com o objclO apropriado (DataView neste caso. Para configurar a vinculação de dados com um desses controles. você poderá criar cód igos que serão executados em quase todos os bancos de dados necessários. exibirá a tabela Artists de se u DataSet.354 Dia 12 Vinculação Complexa de Dados Novo TERMO Vincular controles a uma fonte de dados inteira. FIGURA 12. mas ainda dá suporte a tecnologia subjacente do OLEDB.on.20. o controle OataGrid será vinculado a ele e. mas poderia ser Array.7 ::!I'''''''' "filEi Um COIIII'o/e DataGrid cria 1/m ambiente de aparêllcia profi ssiollal sem ser necessária milita codificaçc7o. Col lect. terá de fornecer o nome da tabela como a propriedade DataMember. DataSet e outros). é chamado de vincu/açcio complexa de dados.

Que propriedade você precisa configurar (e com que valor) para forçar o adaptador de dados a criar informações sobre a chave primária quando carregar os dados em um OataSet? .N ET 355 conexões vai iosas com os bancos de dados. P&R P Em todos os exemplos desta lição. Caso contrário. não inserindo sua string de conexão no código. revisar o quejá aprendeu e começar a pensar em como colocar se u conheci mento em prática. a vinculação de dados lhe proporcionará uma maneira rápida e fácil de exibir seus dados em um form ulário Windows. assim como de outras conexões. o utro usuário poderia ler alterado esses mesmos dados de alguma manei ra. vb. As respostas do teste estão no Apêndice A. Se usarmos os comandos de atualização gerados de modo automático. em que duas ou mais pessoas a lteram os mesmos dados no mesmo momento. é provável que o período entre o down load e a atualização seja re lativamente longo. sem recompilar seu sistema. Já que ela inclui minha identificação de usuário e senha. isso não me parece muito seguro. nós mesmos leremos de confrontar os dados originais com os aluais no banco de dados. Nos códigos desta lição. "Respostas dos Testes/Exercícios". R Excelente observação. o que acontecerá se o registro a ser atualizado tiver sido alterado depois que você extraiu seus dados originais? R Quando lidar com atualizações em um banco de dados. Isso é fei to não só por razões de segurança. j á que foram projetados para ser usados off-line. se constru irmos os comandos manualmente. No caso dos OataSets. a string de conexão foi inserida diretamente no arquivo.Acessando Dados com a Platafo rma . Ao construir interfaces reais com o usuário. será possível a lterar os parâmetros da conexão com o banco de dados. seria inserir o valor da string de conexão no Registro ou em um arquivo de configurações no disco. você deve estar atento aos problemas de simultaneidade. que é bem pouco seguro. Durante esse tempo. Teste I . Workshop o Workshop foi planej ado para aj udá-l o a antecipar poss íveis dúvidas. eles incluirão um código que verifica esse probl ema antes de alUalizar. P Ao atualizar o banco de dados. quando você não est iver apenas desenvolvendo exemplos. minha string de conexão estava embutida em código. Uma idéia melhor.

Como você deve executar esta instrução SQL? DELETE FROM Artist Where ArtistID=3? Exercícíos I. . Crie um aplicativo Windows que use as classes que você aprendeu nesta lição para rorne· cer uma interface com o usuário que visualize. Qual é a diferença entre o método Del ete de um objeto DataRow e o método Remove do ohjeto Da taRowCo 11ec t i on? 3.356 Dia 12 2. altere. adicione e exclua itens de seu banco de dados de CDs.

ete permite a pesquisa de um conjunto de recursos. Além disso. Como o Exp lorer e o Internet Explorer. Um bom IDE também pode incluir recursos que ajudem os desenvolvedores a gerar cód igos sem que seja preciso escrevê-los. o Que É o Server Explorer O Server Explorer é uma fe rramenta que está disponível no IDE do Visual Basic . ele permite que o desenvolvedor crie rápida e comodamente cód igos para usar esses serviços. aprenderemos • • • • O que é o Server Explorer.NET são lodos desse tipo.ferramentas que permitem aos programadores desenvolver códigos melhores e mais rápidos.NET que proporciona um controle fáci l dos vários serviços que compõem o sistema operacional.NET. A escrever programas que usem os serviços. Os suplementos e assistentes que fazem parte do IDE do Visual Basic . A trabalhar com os serviços. A explorar os serviços.SEMANA 2 DIA Usando o Server Explorer Um dos principais objetivos de um ambiente integrado de desenvolvimento (IDE . Ele é um recurso do Visual Basic . Nesta lição. O Servcr Explo- rertambérn se encontra nessa categoria. Elas podem ser recursos aperfeiçoados de ed ição e depuração . Em vez de .lntegrated Developrnent Environrnent) é fornecer fe rramentas que não estão dispon íveis para os desenvolvedores que usam compi ladores de linha de comandos com um ed itor de texto.

. você pode controlar ou escrever um código para usar alguns serviços.. filas de mensagens.1. assim como outros serviços. Se não est iver visível. • 1/>/100' ""'. .. Permite a conexão e visualização dos bancos de dados sem ser necessário sair do ambiente do Visual Basic .358 Dia 13 pesquisar pastas em um disco rígido ou site da Web. M ''''0'' J ow o Server Explorer apresenta uma Iista hierárqu ica dos serviços disponíveis no computador selecionado.."""_~ 1131100"' _ _--. Usaremos o Server Explorer nesta lição concentrando-nos em duas de suas principais funções: visual ização de informações e desenvolvimento de programas. pode ter sido fechado anteriormente. tudo a partir do Server Explorer. Ele pode ser visto na Figura 13. Por padrão. o SQL Server e assim por diante. ele só exibe os serv iços que se encontram no computador de desenvolvi- mento. I.1 O Se/Ter Explorer.... Esses podem ser divididos em duas amplas categorias: • Conexões de dados E semelhante ao ambiente de dados disponível no Visual Basic 6 (presumindo que você tenha usado essa versão). disponibiliza a pesquisa em vários servido· res de sua rede e a visualização dos serviços que estão em execução ne les.. Este recurso possui algumas fina lidades óbv ias caso você tenha de desenvolver uma programação extensa para acessar e atualizar os bancos de dados.NET. __ . por exemp lo. Abra·o selecionando View e Server Explorer no menu... Além disso. .. • (II . que é um dos principais usos no Visual Basic . • Servidores Esta é a lista de servidores com os quais você está conectado e os serviços que estão em execução (ou disponiveis) em cada um deles..NET. As informações desta seção incluem a capacidade de acessar os registras de eventos e a monitoração do desempenho nesses computadores. . FIGURA 13.. mas você poderá adicionar outros quando necessário.

.~.: IÕI QII J -.!o* _ _ FIGURA 13..-. .. o" ..... ou o SQL Server Enterprise Manager dispon ibiliza a visualização e administração de um SQL Server.. esses provave lmente aparecerão.. ç: . e. O Windows 95. .. Em um computador que estiver executando o Windows 2000 com o Microsoft SQL Server instalado. como a monitornção do desempenho ou o registro de eventos. _~_ . . servidores Web (como o Microsoft IIS) ou servidores de correio (como o Microsoft Exchange).... como servidores de bancos de dados (por exemplo...Usan do o Serve r Ex pl o rer 359 o Que É um Serviço? NOVOTeRMO o serviço ê um programa executado em segundo plano. Q. aJ · li ' .. o Microsoft SQL Server). Por padrão. ~'"""... Examinando os Serviços Para visualizar o Server Explorer.... o 98 e o ME fornecem muito menos serviços do que o Windows NT ou o 2000. ... que fornece algum recurso para complementar Osistema operac ional.. selec ione-o no menu View. o serviço pode fomeceralgum recurso adicional que outros programas podem utiliZc1r.. .. 01111'00' ... • -. ..... Esses recursos podem inclui r programas que trad icionalmente são considerados servidores. v_ . Como altemativa..2 ~ ~ e-_ t"O _ t. Em outro computador./lI'O'>I . OIIII}(>(I... O Server Exp lorer complementa essas ferramentas permitindo a utilização dos serviços sem ser necessári o sair do IDE.'09 O Se/wr ExploreI'.._ """ '''''' . Por exemplo.. ele aparecerá no lado esquerdo do IDE. ele pode ser 'mant ido aberto' ou configurado para des lizar automaticamente para fora do cam po visual quando não for mais necessári o. ele aparecerá como mostrado na Figura 13.. com serviços diferentes instalados. Como acontece com outras telas.. o Event Viewer permite que você visualize os registros de eventos de um computador.2. Em geral os serviços possuem um programa que é usado na visual ização de informações sobre ele.. .

"'0/2001 tn/>OO l tIl0/2001 TC".. tI1I>OOl .. ' . só um link. .. ~'''''"'''''-*[_l · ''.. .. Dependendo de quais provedores você tiver instalado.".3 -- VislIali=alldo conexões a_ II!......' ... A g uia Provider é usada para selecionar o provedor que será empregado na conexão com o banco de dados.. As opções que são selec ionadas nessa cai xa variam dependendo do tipo de dados com os quais se quer coneclar.. 6"'" Em princípio.._ 1:1'> ~ \'10'< .360 Dia 13 . . . •• • • .. _ ..4). .4 mostra os provedores disponíveis em minha máqu ina........ " ..... .. FIGURA 13..c· ·IJ·Q • de dados COIII o Serre.. Explore.4 Prol'edores ins/alados pal'a acesso (/ dados. ~ .."". As configurações estão divididas entre várias guias da caixa de diálogo.... A Figura 13. Add Connection......""" _ aO\> oil ' Ill'~ "CII FIGURA 13.. deve estar disponível na pasta Data Connections. 'T.." . pode haver muitas opções....... Dar um cliq ue duplo nessa opção trará a caixa de diálogo Data Link Propel1ies (veja a Figura 13. Essa caixa de diálogo permitirá que você configure uma nova conexão de dados... .

As guias Advanced e Ali raramente são usadas. TABElA 13. Este botão permite que você teste os parâmetros da conexão. Uma conexão bem-sucedida garantirá que o banco de dados possa ser acessado. A guia Ali é apenas outra maneira de acessar todas as propriedades.Usando o Server Explorer 361 Alguns dos provedores mais usados para o acesso aos dados são: • • Microsoft Jet4 . Já que o SQL Server pode conter vários bancos de dados. esse provedor pode ser usado para acessarquase todos os bancos de dados existentes. Permite o acesso aos bancos de dados do Perm ite o acesso aos bancos de dados • • Dependendo do provedor que você selecionar nessa etapa. A Tabela 13. este campo identifica com qual dos existentes no servidor se conectar. Porém. Selecione '(local) ' para se conectar com seu próprio computador se você estiver execut ando o SOL Server localmente. 1 resume as opções disponíve is na gu ia Connection. Este campo id ent ifica o servidor com o qual se conect ar. Microsoft OLE OS Provider for SQL Server do Microsoft SQL Server. SQL Server Test Connection Todos . Isso fará com que o IDE tente se conectar com o banco de dados. baseadas no provedor selecionado. Em vez de ter vários campos para editar. ele só deve ser empregado em llltimo caso porque acessa as informações utili zando tanto o OLE DB quanto o ODBe.mdb). Microsoft OLE OB Provi der for Oracle Oracle. Muitos drivers de OOSC estão disponíveis. Já que há mai s camadas entre seu programa e o banco de dados. A guia Advanced contém configurações que a maioria dos usuá ri os não precisa definir. diferentes opções estarão d isponíveis nas outras guias. or enter a database name User name Password Select. que você pode editar. essa guia é uma lista de todas as propriedades. A senha a ser usada na conexão com o banco de dados. Permite o acesso aos bancos de dados do Micro- Microsoft OLE OS Provi der for oose Oatabases Permite o acesso a qualquer banco de dados que possua um driver de ODBC instalado.0 OLE OB Provider soft Access (arqu ivos . A con t a do usuário a ser usada na conexão com o banco de dados. or enter a server name Select the data base o n the server Provedor Access Todos Todos SOL Server Finalidade Este campo identifica o banco de dados do Access (arquivo MOS) com o qual se conectar. 1 Opções da Caixa de Diálogo Data li nk Properties Campo Select. esse em geral é o provedor mais lento. pOl1anto.

. Dependendo de seu tipo. . OI. . Views (visual izações) Stored procedures (procedimentos armazenados) .. ela pode não exibir todos os campos....por exemplo. ~ t<O: _ """ _ !lO\> .. ordenar as informações de um modo diferente ou incluir dados de várias tabelas. .. Se o resultado for uma caixa de diálogo exibindo ' Test Connection Succeded '.2 Objero Objetos de bancos de dados Descrição Tables (tabelas) Contém uma lista de t odas as tabelas armazenadas em um banco de dados. assim como programas que podem exclui r....... Contém uma lista dos prog ramas armazenados no banco de dados. a entrada possu irá várias seções .. atualizar ou inserir dados.362 Dia 13 Depois de inserir todas as informações necessárias para acessar seu banco de dados. A Tabela 13.... dê um clique em OK para fechá-la e continuar.." ...~ ~ m~"~ . dê um clique no botão Test Connection para confirmar..il · h·~ QQII ...2 descreve os tipos de itens que você deve ver para os diversos bancos de dados com os quais normalmente pode se conectar. os produt os que ela vende ou itens semelhantes relacionados.. Em geral. Uma tabela é um ag rupamento de informações. Caso contrário. ele deve aparecer na seção Data Connect ions do Server Exp lorer..Q • . esta é a seção disponível mais importante de Data Connections... a caixa de diálogo deve sugerir uma mane ira de corrigir o erro (em geral a causa é a falta de definição de lima configuração em algum local).. .5 mostra os itens existentes para alguns dos tipos de bancos de dados disponíveis... Depois de se conectar a um banco de dados. . •• ". Ai estão incluídas as consultas que podem retornar informações.l_ r.5 Data COImeclions. Corrija o erro e teste a conexão novamente. A Figura 13 . ""012001 . FIGURA 13..".V2001 ... Contém uma lista das visualizações de dados do banco de dados.. -~. A vi· sualização é uma maneira de examinar as informações . Por exemplo.. .. ela pode conter informações sobre os funcionários de uma empresa... . •• """""...o.c.. TABELA 13.

~~. Dê um clique no botão próximo ao cam po Selecl or Enter a Database Name. Usaremos o Data Connections para a conexão e visualização de um banco de dados... (Veja a Figu ra 13... .6 para um exemplo.2 Objetos de bancos de dados (continuação) Descrição Objeto Functions (funç ões) Semelhante aos procedimentos armazenados. 3.. .Usando o Server Explorer 363 TABELA 13.c. Dê um cl ique duplo em Add Connect ion para acessar a cai xa de diálogo Data Link Pro· perties.~. jI . "'*" I)000o .ltll e.a..t' .6 !!lo to< Diagrama de bal/co de dados..) Databasediagrams (d iagramas de bancos de dados) FIGURA 13. . são parecidas com as funções que usamos no Visual Basic .". as funções são específicas para alguns bancos de dados.. 2. São usados para documentar o banco d e dados e para forn ecer uma descrição visual de suas tabelas.c~.. por enq uanto.:~.. Com esse objeto. . • '- • ~~"~~~. . ! ! ..~~~Q..f ! • • Caminho a Ser Percorrido para Estabelecer uma Conexão com o Banco de Dados Como descrevi anteriormente. porém. Em geral s6 são encontrados no SQL Server. Dê um cliq ue em Nexl.0 OLE DB Provider. It' -. Selecione a guia Provider e Mi crosoft Jet 4.~ :'-__~·".... . você pode visualizar os dados do banco de dados. Deve haver um em %di rectory to Vi sua 1 . _ . 1:1. _ ~ 1>* _ .~ ~ '-.~'~"'~"'""~.'.~ó~.NET.. Navegue para encontrar um banco de dados do Access. alterar as tabelas e assim por diante.~ .NET como exemp lo. .é ~. 1. Empregaremos o ban· co de dados Northwind que vem com o Vi sual Basic . \:I . " . Elas representam um conjunto de informações armazenadas no banco de dados. ~ "QII lr. a seção mais importante de Data Connections são as tabelas.. . Em geral são usadas para retornar pequenos trechos de informação e. " ~ "· ~.c-____~.

No entanto. visualizações e procedimentos armazenados. no 98 e no ME. 4 Dê um cl ique no botão Test Connect ion. Apenas examine as informações por enquanto. Se você alterar esse banco de dados. fornecendo alguns recursos ao sistema operacional. Bem. . Faça Não faça nenhuma alteração no banco de dados agora. outros serv iços podem ser instalados. mostrando a lista de funcioná rios da empresa Northwind. A conexão resul tante possui várias tabelas. o Server Explorer também torna fácil o acesso. Alguns dos serviços processados no Windows NT e no 2000 são o registro de eventos (um registro central que envolve o sistema. Dê um clique em OK para aceitar esse banco de dados . ou desconectada. Trabalhando com os Serviços Além de permitir que você visualize os bancos de dados. os que utilizam o Windows 95. NET% \Corrmon7\ Too 1S\Si n\nwi nd . a visualização e o controle dos serviços. como o 11 5. os contadores de desempenho (registram diversos valores significativos relativos ao sistema operacional e outros aplicativos) e o spooler de impressão (gerencia os trabalhos de impressão). Dê um clique em OK para aceitar essa conexão de dados. Abra a pasta Tables e dê um clique duplo na pasta Employees. Uma caixa de diálogo deve aparecer informando que a conexão fo i bem -sucedida. No Windows 95. os serviços fazem parte do próprio sistema operacional ou são programas que costumam aparecer na barra de tarefas. o SQL Server (banco de dados) ou o Message Queue Server (perrn ite a comunicação assíncrona. Eles são fami liares aos desenvolvedores que têm usado o Windows NT c o Windows 2000. Uma nova janela deve ser aberta. semelhante ao correio eletrônico). crie um para teste. Se quiser tent ar faze r alterações em um banco de dados. A lém desses. 5. Também deve ser possível dar um clique em outras tabelas para abri-Ias e visualizar os dados nelas ar- mazenados. Caso contrário. outros exemplos ou aplicativos podem não funcionar. o que é um serviço? Um serviço é um aplicativo que é executado em segundo plano. a segurança e os aplicativos).364 Dia 13 Bas i c . de um aplicativo com o outro. o 98 ou o ME podem não conhecê-los tanto porque esses sistemas operacionais tendem a ter menos serviços em execução. certifique-se de que haja um banco de dados 110 local selecionado. mdb.

Isso proporciona a mesma funcionalidade do aplicativo Event Viewer. Essas informações variam de valores simples. Concede acesso a dados sobre o desempenho do computador. Disponibiliza informações semelhantes à Data Connections (no entanto. Alguns dos itens do Server Exp lorer estão descritos na Tabela 13. NCriando Serviços da Web com o Visual Basic .3 Serviços do Server Explorer Serviço Registro de eventos (Event Log) Descrição Fornece acesso aos arquivos de regiSlro dos aplicativos (Application). O Windows NT e o Windows 2000 registram constantemente informações quando você executa seus programas. Fornece uma lista de todas as DLLs carregadas na memória e dos programas que as utilizam. a programas em execução. Esses são os aplicativos processados em segundo plano. dependendo do que você esteja executando em um dado momento.Usando o Server Explorer 365 Visualizando os Serviços Exatamente como as opções do Data Connections. Mostra uma lista dos serviços em execução no computador. Fornece uma lista dos serviços da Web instalados no computador (para obter mais delalhes. Elas são usadas quando são criados aplicativos com base em mensagens (porém não se aplicam a aplicativos de correio eletr6nico). Fornece uma lista de todos os aplicativos em execução. Aí estão incluídas info rma ções sobre o tempo necessário para executar tarefas. como a CPU ou o sistema operacional instalado. de~ pendendo do que est iver instalado e em execução no computador. Um 6timo recurso é que você pode usar essa seção para inicíarou encerrar os serviços (dependendo da segurança). Permite ao servidor acessar o Windows Management Information (WM I). a memória e assim por diante. Fornece mais uma maneira (a seção Data Connections é a outra) de acessar os bancos de dados do SQL Server. Esses são os que estão disponíveis enquanto escrevia este texto. Você pode se surpreender ao ver quantos programas são processados em seu computador. e não para alterá-Ias. sem que seja necessário sairdo IDE do Visual Basic . caso esteja. TABELA 13. e são precisas como as configurações das impressoras instaladas. O WMI é um meio de consultar informações em um computador. da segurança (Security) e do sistema (System) do Windows NT ou do 2000. Pode ser útil para se saber se uma DLL específica está carregada na memória e. Fornece uma lista das fila s de mensagens disponíveis . Essa lista pode ser longa. se está sendo usada por um aplicativo.NET. O WMI é uma ferramenta poderosa e melhor quando usada para recuperar informações. Esses arquivos de registro contêm erros e outras informações sobre os aplicativos que estão em execução no computador. veja o Dia 21.N ET). muitos outros poderão ser disponibilizados posteriormente.3. Podem ser acessados para avaliar a uti lização da CPU. Módulos carregados (Loaded Modules) Dados de gerenciamento (Management Dala) Contadores de desempenho (Performance Counlers) Processos (Processes) Serviços (Services) Bancos de dados do SQL Server (SQL Serve r Dalabases) Serviços da Web (Web Services) Filas de mensagens (Message Queues) . os serv iços do Server Explorer variam. a memória uti lizada e muito mais. só sobre os bancos de dados do SQL Server).

Você deve poder (dependendo da segurança da rede) visualizaras serviços carregados nessa máquina. assim como os da s ua. ~ _ _.366 Dia 13 Conectando-se com Outro Servidor Para examinar alguns dos serv iços listados na Tabela 13.------"""'" '11M • M" . Escrevendo Códigos de Acesso a Dados com o Serve r Explorer Embora o Server Explorer sej a úti l quando se quer visualizar os serviços.. . .. O Server Explorer permitiria a conexão com todos os três quando fosse preciso monitorar e/ou em pregar os serviços... .. Por exemplo. servidor... poupando-o de ter de desenvolvê-los .... e possivelmente um servidor Web quando desenvolvem um programa. A lém disso.. Você pode especificar lima conta de usuário diferente para ser usada se esse tiver direito de acesso a outro computador.. pode ser necessário se conectar a um servidor. digite um nome de servidor válido na caixa de diálogo (veja a Figura 13. se torna muito mais quando a intenção é acessá-los. é .. um de teste. Dê um clique duplo no item Add Server do Server Explorer. _.. " "C" Você pode usar esse recurso para se conectar aos serv idores com os quais trabalha... FIGURA 13. Em geral.7 Adicionando oulro 'O_lo . na criação de aplicativos de acesso a dados.3.. Ele pode ser usado na criação de códigos extensos... Escrevendo Programas Que Usam os Serviços Um dos recursos mais interessantes do Server Explorer é que ele pennite que você não só visualize os serviços e trabalhe graficamente com eles..7) e dê um clique em OK. muitos desenvolvedores precisam acessar um servidor de banco de dados. com a alteração das propriedades e execução dos métodos dos objelos que os representam . é poss ível adicionar objetos a seu aplicativo que possam controlar ou interagi r com os serviços como ler contadores de desempenho ou ainda ler ou gravar informações nos registros de eventos do Windows NT ou do Windows 2000.. Esses são recursos que precisavam de uma codificação extensa e agora podem ser obtidos em algumas linhas.. mas também que escreva com facilidade aplicativos que se comuniquem com eles. . -.. os objetos disponibilizados pelo Server Exp lorer podem ser usados para incluir em um aplicati vo o acesso aos dados... Por exemplo. _ .por exemplo.

Selecione uma tabela em seu banco de dados (escolh i a tabe la Customers de Northwind). "Acessando Dados com a Plataforma .4. como você já deve ter adivinhado. teremos uma interface com o usuário si mples . O objeto 01 eObConnect i onl é. Em vez de fazê-lo manualmente.OleDbConnecti onl e 01 eObDataAdapterl (veja a Figura 13 . A seguir. TABELA 13. Depois de criar o proj eto.NET") o mesmo tipo de cód igo para rec uperar informações e exibi-Ias para o usuário. Dê um clique com o botão direito do mouse no projeto pela última veze selecione Propert ies. você pode usar esse nome (não está patenteado ou algo semelhante) ou esco lher outro. Configure o objeto de inicial ização (Startup object) como Customers e selecione OK. Por que perder tempo COm isso. a prime ira etapa na construção de um apl icat ivo do Visual Basic . queremos ad icionar o código para o acesso aos dados. Con fi gure as propriedades como mostra a Tabela 13. e no Dia 12. Nomeie o fonnu lário resultante como Customers.Usando o Server Explorer necessário escrever (como você viu no Dia I I. . no entanto. A seguir. O meu se chama DataView. excl ua o formulário original dando um clique COm o botão direito do mouse sobre ele no Solution Explorer e se lecionando Delete. usaremos o Server Explorer. se seu com putador pode fazê-lo para você? Criaremos um aplicativo simples para visua li zar os dados de urna tabela em um banco de dados.8).4 Controle Propriedades da Grade de Dad os Propriedade Valor Form DataGrid Text Name Dock CaptionText Customer listing dbgCus tomers Fi 11 Customers Você também pode querer usar o recurso AutoFormat (ou configurar manualmente os valores) para fazer com que a grade fique com uma boa aparência.NET é adicionar os controles ao formu lário. "Introdução aos Bancos de Dados". você pode escolher qualquer banco de dados COlll o qual tenha uma conexão de sua máquina. crie um novo projeto de aplicati vo Windows. a conexão com o banco de dados. Usare i o banco de dados Northwi nd. Altere o nome dos controles conforme mostra a Tabe la 13. Em nosso caso. Depois que tiver uma conexão válida com um banco de dados no Server Explorer. O objeto OleDbDataAdapterl é o componente que extrai (e salva) as infonnações do banco de dados.nada a não ser uma grade . Aceite o aviso. dê um clique com o botão direito do mouse no projeto e selecione Add e Add Windows Form. Dois ohjelos novos aparecerão no form ulário .5. Selecione o controle Da t aGri d na caixa de ferramentas e adicione-o a seu formulário. Como sem pre. arraste-a do Server Exp lorer e solte-a no formu lário.

_. • • (0 ...f" ... """. _ _. "" p .10). Altere o nome para dsCustomers. QOI> Objefos de conexão adicionados. . ~ · lJ · ~!..I".. • ..8 too ~ »*- ~"'" tA< _ <II'" _ I"" _ ~ ." "I:' .T. Você deve ouvir mais alguns ruidos no disco rigido e um novo dataset CustomerSetl será adicionado à janela (veja a Figura 13._ _ . configure o nome como Customer$et e marque a caixa que adiciona uma instância ao projeto (veja a Figura 13.." " _ '' 0 .. FIGURA 13.Dia 13 TABELA 13. _... ..9).. _ ...5 Propriedades da Conexão e do Coma nd o Propriedade Name Name Controle 01 eDbConnection 01eDbDataAdapter Valor ConNW CmdClfstomers Agora vem a parte di vert ida.. Dê um clique com o botão direito do mouse no adaptador de dados cmdCustomers e selecione Generate DataSet... _ . t· FIGURA 13..._------" r~l- ::J .. " P 111" ..._. ~ . ....._.\ibor... " " _.9 Adicionando o DataSet.

. EI :ii T... CJ · ~ 1iõI" ___ ""_~ lo ~ Ie..11 '" ~ l. .'Ito Conectando o OataSet .. • -. 00 '. Configure a propriedade DataSource do OataGrid como dsCustomers. . .. o•• i:!I"j:.. 1M . 1:1 • ~ 1iõI" """'" ~ -.. Localize o procedimento Form Load e atuali ze-o para que preencha o OataSet como mostrado na Listagem 13. J rlo "" .... .. Ao fazê-lo. CÓDIGO Agora vem a parte trabalhosa . .~.. I •I 1..." . q • -....• '" • • f • ! ..... 'o •• . '.Usando o Server Explorer ' . § i: t: o: Il!t' ""'. ao OataGri d.. ........i) .. ._ _ _ .. ... • • 1.. _ . Antes de escrevermos o código. <\I" ..>1 '1:1... .. :o: . ~..}'ItoI)_aM O DataSet adicionado. •• Ç'. .. 11). 1..ai nda precisaremos escrever um código. r. FIGURA 13..- . "' . e OataMember como Customers.t:'... os cabeçalhos da co luna devem aparecer 110 DataGr id (veja a Figura 13....$ 'I!II "~. (jJ . ...i \JI o . ... o .' 1_1 ' <___ "'_1' FIGURA 13.. devemos conectar o banco de dados e o DataSet ao OataGri d. . • .~.10 ".

... ~~Oo""_ so ..12 Executal1do o aplicativo Da taVi ew.. ele deve ter a aparência da Figura 13.. Ela chama o método Fi 11 do adaptador de dados cmdCu$ tomers. r. Além disso.. 0<'I!t< ... 'T tt ~ L>"I< ~ Solos _ .1 Alterações no Novo Procedimento 1 Private Sub Customers l oad(ByVal sender As $ystem. c"" ~ ...oI fn.f . O OataSet dsCus tomers foi criado quando selecionamos Generate DataSet...... O resultado fina l deve ter uma aparência semelhante à da Figura 13.. em vez de tennos de d igitar o que precisávamos nessa linha. construi remos um aplicati· vo pequeno que monitorará alguns dos contadores de desempenho que o sistema operacional mantém sobre ele próprio..... Acessando os Contadores de Desempenho e os Registras de Para exam inarmos os beneficias das ferramentas do Server Explorer........ <Mo _ ... "~ {. Eventos eôldoCoo>oo &<>o _ ' CO<I . UI< "'11<ili'O o--.".. registraremos a data e a hora em que o programa começar e terminar de registrar os eventos do ap licativo..tIoInK_ . Construa e execute o procedimento Fonn seu programa.)SSS ' 9'...." ' -.... ~ . ~ SOles ... ".. Soe""""'" " ' _~h ~ !. attIob tnct<o « [)o"".". Em outras pa lavras.x".. f _ _ ..13.~ a ..... h. . ""'"......._Dtv«> flss.. ~.... . 2 ByVal e As System. Se tudo funcionar."eom....._ _Oe '" .. ~f'_Ct~ _.tnn o.......... I"éxCoo.... (OO4)SS' {'l U'" (S)SS~7 _w u>um o ..mm "M'..t. c:'......"...... ~~_ "".. (9. foi tudo gerado para nós.. .. '''''''' Soon hora ____ Ton.".......o . .~.. ..""" _ ..."~ _Sotrr.. &o." ..370 Dia 13 CÓOIGO LISTAGEM 13. .......12. ..".....S. _. ..........."- ""..nto . ..'" UI< ~oI.... f'....~ 0= <w< ._...:I "". _u......."'" Moo<co eh Y>nç W""l o....Load 3 cmdCustomers .EventArgs) Handles MyBase... com a adição da linha 3.""" ~.- -.>< o...".."'. ~<!>'btd ~- ....lO... ~ .... -..1 . t I C. . .. FIGURA 13.~ SoIooA_ '" ""'" _ _ ....... Fi l l(dsCustomers) 4 End Sub ANALISE Load será padrão para os aplicat ivos Windows. _ "-to< Go a"".... """.. ~ ~ l<tlI ~ ~.... ......... . SoIeo ... _5«0<1 """'....:.... _ .........Object .. .

dê um clique com o botão direito do mouse sobre o projeto no Solut ion Explorer. _.13 O PelfLile em aç(io.... _ "" .....Usando o Server Explorer 371 FIGURA 13. feche o formulário-padrão e renomeie-o como frrrtla i n. Para conclu ir.. ~ ._1 =. " 1 .. Confi gure as propriedades do formulário como mostra a Tabela 13. vb. Altere todas as referências a Fonnl para fnnMai n......''''''"'------------I""' ~ 0A>. .":. Usar o comando Replace ajudará (lembre-se de se lecionar Search 1-1 idden Text)....0t_.. Chame o novo projeto de PerfLite porque ele será uma versão mais enxuta (ou ' Lite' na linguagem de marketing) do aplicativo Performance Mon itor que vem com o Windows NT e o Windows 2000.... ..._o ":ôi co.. A seguir. estaremos prontos para começar a adicionar os controles e configurar suas propriedades.. ..... _..... _ _ 'r... . Quando o projeto estiver pronto.. .31':::J ~':::i:'~"'''.. 10.14). FIGURA 13.1::::: Crie um novo ap li cativo Windows. ..' Propriedades de PelfLile. :J CO"Lw.14 "O..-. c....."... ~ ~ ...mon_. . ~_<M ::...6. ... Depois de tudo compilado..' ... se lec ione Properties e altere o Startup Object no formulário resultante para fnnMa i n (veja a Figura 13. \ ~I Compi le o apli cativo para certificar-se de que todas as alterações foram fe itas.. dê um clique com o botão direito do mouse no arq uivo e selecione View Code ..

240 Button "me TrackBar Text Location Size Name location Size cmdSweep &Start 8. ou algo atrativo) lblMem 240. 24 trkSpeed 8. T A BElA 13. Além disso. Adic ione os controles da Tabela 13. 296 True Memory: Bl ue tmrClod 1000 Para exibinnos as informações sobre o desempenho. 360 Exibiremos algumas informações sobre o desempenho desenhando-as em um painel.Dia 13 T A BELA 13.7 e configure suas propriedades como mostrado na tabe la.7 Contro les para o Formu lário PerfUte Propriedade Valor Controle Panel Name Dock Height pnlSweep To. temos de controlar a ve locidade da exibição. 248 64. precisamos ad icionar os conladores apro-priados ao aplicativo: .6 Propriedades do Formu lário PerfLite Valor Propriedade Text Si ze PerfLi te 480. 280 104. 248 True CPU: Red (ou algo que você goste/possa ver) lblProc 240. 42 1 label l a bel label Minimum Maximum Value Name Location Autosize Text Forecolor Name location Autosi ze Text Forecolor Name location Autosize Text Forecolor 20 10 Timer '.me Interval lblCPU 240. 272 True Processes: Green (novamente.

-<_ . Xl mo ao pnmeuo.. 2. 3.:l to . Observe que ele não possui nenhum item. Dê um clique com o botão direito do mouse no contador Processes e selecione Add to Designer.·_n_ '_ ~. Abra a seção Event Logs do Server Explorer e selecione Application.... Role para baixo até encontrar o item Processor e abra-o... . também podemos adicionar objetos que tornem o acesso aos dados muito mais fácil do que já possa ter sido.15). II.. Renomeie os três contadores de desempenho como prfCPU. selecione e adicione o contador de desempenho Memory\Commited Bytes.. "'" " • . FIGURA 13. l!«w 00" _ 1.. ~ " ' L.. .• _ .. ~ Há outra maneira de adicionar um item do Server Explorer a seu aplicativo.p • Q • -...... .d . Além dos contadores de desempenho...- . 5.. I -O>~_ - -.. como Total em % Processor Time.. Um novo item deve aparecer ... Abra o Server Explorer e selecione um servidor (pode ser seu próprio computador). • [jIo " '''' comado/' de desempenho. ... A rraste esse item sobre o formulário e solte-o sobre ele.. . prfProcs e prfMem. Em segu ida. . Para concluir a inserção de nossos contadores de desempenho. '" .. Um item chamado PerformanceCounterl deve ficar visível em uma nova seção abaixo do formulário (veja a Figura 13. _ .. Abra o item % Processo r Time e selecione o item Total.... .. Abra a seção Performance Counters ._~_ .. você deve ver outro objeto Perfonnance Counter adicionado pró... . .:r. ....15 Depois de inc/lli/' o !oK I!tw _ ..•• ... Arraste o item Application para o formulário ou dê um cliq ue com o botão direito do mouse e selecione Add To Designer (o que preferir). ..Usando o Server Explorer 373 1... e. \!l o liÓ' g ai . 4 .. .. Localize o contador de desempenho System\Processes.

.NOO" 'L . Para que a linha deli mitadora seja exibida period icamente. . O resultado fina l mostrará uma Iinha dei imitadora se movendo pela extensão do painel .. ... para a codificaçiio. ".....'"'" "'" .8.._-_. • _.2. .. é hora de começarmos a ad icionar a codificação para fazer nosso programa executar algo._-"--_.I · ~ gGII :t. com três linhas coloridas acompanhando-a atrás (veja a Figura 13..16 O PerjLile..''o~' e'''''' _ .O'IJ Sto< -~ • _ .. 17). ""--~_ -.. ..374 Dia 13 próximo aos três contadores de desempenho.8 Propriedade Propriedades do Objeto Event Log Valor Name logApp Source PerfLite FIGURA 13.. Con figure as propriedades desse novo objelo conforme descrito na Tabela 13. .. . ~ _ "lEI [Q>. ~ . Agora que a interface com o usuário está pronta.. • III .. O formulário final deve se parecer com o mostrado na Figura 13. ...1Q1! "' .. _. pronlo filo I0OI ~ _ .~--"_ . Nesse aplicativo. .16. TABElA 13. O código está na Listagem 13. -.... usaremos o evento Timer do controle de mesmo nome...-.. 1_ _ !lO'> jl· \:. adicionaremos um código para três dos controles e um proced imento para auxi Iiar. ÇQ ....

CÓOIGO LISTAGEM 13. Processes As Single . Text. prfProcs ... prfMem.N extValue() Dim sngMem As Single . Dois itens que parecem estranhos são as chamadas ToStrin9 nas linhas 9 e II. Observe que estamos atribu indo os valores às variáveis enquanto as criamos. "Processes: " & sngProcs lblMem.Text . Memory As Single) oGraf ix As Graphics = pnlSweep. e essa quantidade igual a O.Tick Dim sngCPU As Single .veja a Listagem 13. Text .Object. Para conclui r..2 Código do Controle Timer 1 2 3 4 5 6 7 8 9 10 11 12 Private Sub tmrClock_Tick(ByVal sender As System.ToString("fO") & "KB" End Sub ANALISE o código desse procedimento tem como sua preocupação básica duas finalidade s: converteras valores dos contadores de desempenho em variáveis com o tipo de dado simples e atualizar os controles Label. cada valor é fonnatado e exibido em cada um dos controles Labe 1 (Iinhas 9 a II). sngProcs ." "CPU: " & sngCPU .. passamos esses va lores para a rotina DrawSweep (linha 7 . Em seguida.17 O exemplo sendo execulodo. _ '1OO1S '" CÓOIGO LISTAGEM 13.. A linha 9 formata o valor como um percentual. ByVal e As System. As linhas 3 a 5 recuperam os valores de cada contador de desempenho.Usando o Server Explorer 375 FIGURA 13.. ToString("p") lblProc . sngM em) 'atualize os títulos lblCPU .NextValue() / 100 Dim sngProcs As Single . -. NextValue / 1024 'desenhe o painel del imitador DrawSweep(sngCPU.3) para a ex ibição. "Memory: "& sngMem. i"" I ! .CreateGraphics() 13 14 15 16 Private ByVal ByVal Dim .EventArgs) Handles tmrClock..3 Desenhando a Li nha Oe 1 imi tadora Sub DrawSweep(ByVal CPU As Single .. prfCPU . enquanto a linha I I o fonnata como um número com lima quantidade fixa de casas decimais. O método ToStri ng permite que um formato opcional seja aplicado quando o número é convertido em uma string.

é uma rotina bem simples. sngMemY) m_sngMemY = sngMemY 'aumente x m_sngX += increment If m _sngX > pnlSweep. Começamos recuperando o objeto Graphics do controle PaneI (linha 16).INCREMENT. m_sngMemY. sngProcsY) rn_sngProcsY = sngProcsY 'o número 10000 é para dar a memória um valor adequado em minha máquina você pode precisar alterá-lo se a linha referente à memória 42 43 44 45 46 47 48 49 50 não for exibida corretamente sngMemY = sngHeight . m_sngX.Control) End I f 'desenhe a linha nova oGrafix.(CPU * sngHeight) .Width Then 'reinicia l ize para voltar ao ponto de origem m_sngX = O 'e limpe a superfície de exibi ção oGrafix. sngHeight) Eod 5ub ANALISE Como você já deve ter deduzido.376 Dia 13 COOIGO LISTAGEM 13. O. Qualquer contro le que possa ser desenhado (como os controles Image e PaneI ou os formulários) expõe esse objeto Graphi cs .DrawLine(penMem. m_sngX.Clear(SystemColors. rn_s ngX.incremento rn_sngProcsY.Height 'para os pontos Oim sngCPUY As Single Oim sngProcsY As Single Oim sngMemY As Single 'apague a li nha deli m itadora anterio r oGrafix. m_sngX ._ 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 rn_sngX .NET são criados em um objeto Graphi cs. sngCPUY) m_sngCPUY = sngCPUY sngProcsY = sngHeight . essa rotina é o ponto central do aplicativo.Processes oGraf i x. rn_sngX. O.DrawLine{penBack.incremento rn_sngCPUY . m_sngX .( Memory / 10000) oGrafix. rn_sngX .1 oGrafix. sngHeight) 'desenhe os pontos dos dados sngCPUY = sngHeight . Todas os elementos gráficos do Visual Basic .OrawLine{penFore.3 Desenhando a linha Delimitadora (continuação) 17 18 19 20 21 22 23 24 25 26 Oim sngHeight As Single = pnlSweep. m_s ngX.DrawLine(penCPU. Não se assuste com a extensão ou as chamadas gráficas . DrawLine(penProcs . m_sngX.

sendo esse li mpo para a nova exibição. cada uma representando um dos três contadores de desempenho. precisamos desenhar uma outra linha (com a cor do plano de fundo) para apagar a anterior. Quando a linha (delimitadora) vertical chegar ao limite do for* mulário.3. passar um pouco para cima e iniciar uma nova exibição.Usando o Server Exp lorer com um método CreateGraphics. A diferença ex isten* te nessas chamadas é que também precisamos determinar onde desenhar a linha e lembrar do va* lor anterior para que possamos conectar a linha nova a já ex ibida. A razão pela qual isso se torna tão extenso é que também precisamos testar se estaremos movendo a linha em direção ao lado direito do formulário . Enquanto se move. As rotinas para o desenho das linhas dos outros dois contadores de desempenho (linhas 29 a 35 e 36 a 39) são seme lhantes . e uma nova é iniciada e movida das linhas 25 a 41. Por sua vez. isso se resume a três etapas: I. Se isso estiver ocorrendo (a instrução I f na linha 42). No fim deveremos ter algo parecido com o monitor das batidas de um coração (sem o ru ído ' ping' ). precisaremos de um código para desenhar a linha vertical (e movê*la pela extensão do fonnulário) e as três linhas de desempenho. Para mover a linha delimitadora. EventArgs) Handles cmdSweep. As linhas do contador de desempenho também são desenhadas nessa rotina.4 Ativando e Desativando a Li nha Delimitadora 51 52 53 54 Private Sub cmdSweep_Click(ByVal sender As Objecto ByVal e As System. 2. Na Lista* gem 13.Click 'Alterne entre o texto e o timer no botão (at i vado ou desativado) If cmdSweep. Desenhe a linha. O novo valor de X é determinado pelo incremento (15 unida* des) do valor anterior. ele expõe outros objetos e métodos (e também o controle do contêiner) para que se possa desenhar nele. Antes de discutirmos o código propriamente dito. Ele será usado na criação de uma nova linha. Text = "&Start " Then . deverá ser in iciada mais uma vez no lado esquerdo dele. li mparemos o formu lário e voltaremos ao lado esquerdo para começar uma nova exibição. 3. Decida qual deve ser o novo valor de Y (a altura) para a nova linha. O resu ltado final será uma linha vertical que se move (horizontalmente) pela extensão do formulá* rio. As linhas 26 e 27 fazem isso de* senhando uma linha com a cor definida para a CPU com base nos valores anteriores de X e Y para iniciar os novos. o contador da CPU é um percentual). Usando o pri meiro contador de desempenho como exemplo (linhas 25 a 28). conectando a anterior à recém*criada. a linha 23 do código apaga a linha que já havia sido exibida. enquanto o novo valor de Y foi calculado na etapa I. ela é seguida por três linhas coloridas. Armazene o valor recém*calculado de Y para que seja empregado no próximo laço (linha 28). CÓDIGO LISTAG EM 13. A linha 25 faz isso para o contador da cru determinando que percentual da altura total será ocupado pelo valor referente à CPU (Iembre*se. Portanto.diferindo apenas na maneira como o novo valorde Y é calculado. iremos detenninar o que se pretende fazer.

precisamos perm ilir que o usuário altere a velocidade da Iinha dei im itadora. Intervalos menores significam que a linha dei imitadora será exib ida mais rapidamente. As linhas 64 e 65 apenas se certificam de que o va lor que usamos (a configuração atual para a velocidade) tenha sido um inteiro.5 Configurando a Velocidade Private Sub trkSpeed_Scroll (ByVal sender As Object. A seguir. ela é relativamente s imples. mas. VaI ue) 'configure o intervalo de tempo com o valor que esco l heu tmrClock. a letra S). e as canetas empregadas na criação das linhas. Corno alternativa. o alivareANÁLISE mos. Isto é.Interval = iValue * 100 'ms End Sub ANÁLISE o código para configurar a velocidade é bem básico. Portania. exatamente abaixo da região marcada como cód igo gerado pelo Windows Form Designer e antes de qualquer outro trecho de seu código.6 ao formulário. o interromperemos. Poderíamos usar outra variável para registrar esse status. Adicione o cód igo da Listagem 13.b 60 61 A finalidade dessa rotina é penn it ir que o usuário inic ie e interrompa a exibição.5. Se a propriedade Text dele for igual a &Sta rt (o valor inicial).378 Dia 13 COOIGO LISTAGEM 13. se o timer estiver alivado.EventArgs) Handles trkSpeed. inic iaremos o ti- mer e alteraremos Text para &Stop (observe que os dois valores possuem a mesma chave de acesso. Para concluir. usadas quando desenharmos. interromperemos o timer e configuraremos o texto de vo lta com &Start. .Scro ll Dim iValue As Integer iValue = Clnt(trkSpeed. Se não estiver.4 Ativando e Desativando a Linha Delimitadora (continuação) 55 56 57 58 59 cmdSweep. COOIGO 62 63 64 65 66 67 68 LISTAGEM 13. empregaremos o texto do botão.Enabled = False Eod If Eod S. ut ilizamos a velocidade para ajustar o intervalo definido para o timer (linha 67). alternaremos entre ele e nosso timel'. ByVal e As System. Elas armazenarão as coordenadas atuais X e Y. Com base no texto do botão. em vez disso. há algumas variáveis de que preci saremos em todo o aplicativo. Isso é fe ito na Listagem 13.Text = "&Start" tmrCloçk.Text '" "&Stop" tmrClock.Enabled = True El se crndSweep. Em seguida.

Red) penProcs As New System. e observe por alguns segundos.Pen(Color. e as outras as pos ições alua is de Y para cada contador de desempenho. Dê um clique no botão Start. Você começará a ver a barra delimitadora se mover da esquerda para a direita no formulár io. Pen(Color . Além disso. a constante da linha 82 é utilizada para registrar o espaço definido para o avanço da linha delim itadora enquanto ela se move pelo fonnulário.Usando o Server Explorer 379 COOIGO LISTAGEM 13. Blue) penFore As New System.Pen(Color .6 Variáveis no Nível do Formu lário 69 7D 71 Dim m sngX As Single Dim m_sngY As Single D m_sngCPUY As Single im Dim m _sngProcsY As Single Dim m_sngMemY As Single Dim Dim Dim Dim Dim penCPU As New System. como bancos de dados ou registros.WindowText) penBack As New System.Orawing.Orawing . Esses serviços fornecem recursos que se estendem ao sistema operacional.Orawing.uma para a CPU (percentual de uti li zação). Uma variável armazena a posição atual de X. compi le o programa e execute-o. Altere a barra de registro (configure-a corno maior ou menor) para observar como ela afela a exibição.NET. outra para os processos (programas em execução) e mais uma para a memória (em uso). Você pode tentar adicionar alguns outros contadores à exibição corno um exercício. tente dar um clique no botão Stop para ver se ele se altera novamente para Start. Resumo Os sistemas operacionais mais modernos como o Windows possuem vários serv iços. Depois que o código estiver estruturado.Orawing. O texto no botão deve alterar-se para Stop.Pen(SystemColors.Pen(SystemColors . . Orawing. sendo seguida por três linhas .Green) penMem As New System. O Server Explorer permite que você visualize ou altere o estado desses serviços em seu próprio computador de desenvolvimento ou em outros sem terde sair do IDE do Vi sual Basic . Por fim. que enriquecem as capacidades centrais. adicionando funciona lidades. As canetas são empregadas no desenho de cada linha de desempenho e da linha del imitadora.Control) = 72 73 74 75 76 77 78 79 80 81 82 Const INCREMENT As Single 1 ANALISE As variáveis das linhas 69 a 74 são usadas para armazenar as posições aluais da caneta quando não estiverem desenhando as linhas. ele simplifica o desenvolvimento de códigos que usem muitos dos serviços disponíveis.

P&R P Tenho alguns itens em meu Server Explorer que não foram mencionados (o u não tenho alguns que foram mencionados).NextValue{» Exercícios I. As respostas do teste estão no Apêndice A. ele poderá não aparecer na li sta. "_total") Console . . P Se os dados do Sen 'er Explorer forem alterados. Cite duas seções do Server Explorer que informariam a você que programas estão em execução em seu computador. " Respostas dos Testes/Exercícios" . tenha cuidado. Teste I. começaremos nossa saga na descoberta da verdadeira natureza orientada a ohjetos do Visual Bas ic . 2.Dia 13 Na próxima li ção.W riteL i ne{prfCPU. por favor. O que é um serviço? 3. assim como os servidores que você costuma usar para desenvolv imento. se o serv idor com o qual você se conectar não fornecer um determinado serviço. revisar o que já aprendeu e começar a pensar em corno colocar seu conheci mento em prática. isso alterará o banco de dados? R Sim. Por outro lado.NET aprendendo o que sign ifica ser ' real mente' orientado a objetos. Pesqu ise o Server Explorer para descobrir o que está dispon íve l em seu computador. O que são eles? R E poss ível que outras empresas criem com ponentes para 'associar' ao Server Explorer. a menos que você realmente precise). Use o Data Connections para se conectar a um banco de dados di spon ível e pesq uisar as tabelas e outros itens cuj o acesso fo r conced ido (lembre-se de não fazer nenhuma alteração. tal como se pode fazer com os serviços comuns. "%P rocessor Time" . O que seria exibido se o código a seguir fosse ad icionado a um programa e executado? Dim prfCPU As New PerformanceCounter("processor" . • Workshop o Workshop fo i planej ado para aj udá-Io a antecipar poss íveis dúvidas. Isso permiti ria ao desenvolvedor trabalhar com esses serviços diretamente. 2.

o Visual Basic foi reescrito a partir do zero. Além desses tópicos. Agora quase sempre presume-seque a POO está sendo usada. Concei tos importantes da POO. no final da lição.NET. Visão Geral da Programação Orientada a Objetos A programação orientada a objetos (POO) não é uma tecnologia ou linguagem específica. Para tomá·la ainda mais abstraIa. você poderia pen· sar nela como um modo de considerar o projeto e o desenvolv imento de aplicat ivos. você aprenderá técnicas da POO para ajudá·lo a construir aplicativos. Corno incorporar a POO nos sistemas de sua autoria.SEMANA 2 DIA Introdução à Programação Orientada a Objetos Na versão . mas ela foi adotada de maneira ampla pela indústria de softwares nos anos 80. A POO possui um histórico acadêmico e não tentarei fornecer lima data exala na qual foi concebida pela primeira vez. mas com freqUê ncia o termo é cmpregado com pouca compreensão do que realmente significa. . Esta lição abordará: • • o Uma visão geral da programação orientada a objetos (POO). é uma maneira de projetar e construir aplicat ivos. Uma das princ ipais razões disso foi para adicionar recursos orientados a objetos profundamente integrados.

Configurar as propriedades referentes ii quantia principal. Novo TERMO Um objelo é uma representação de urna entidade rea l ou abstrata junto às propriedades dessa ent idade e as ações relacionadas a ela que podem ser executadas . Obter a taxa anual de juros. um bloco da programação que combina informações específicas e um conj unto de comportamentos relacionados. Recuperar a propriedade do pagamento. Na POO. 2. Essas entidades possuem atributos. como a cor do veículo ou a data de saída do vôo. como 'Vender' para o carro e 'Cancelar' para o vôo. Criar uma nova hipoteca. 3. à taxa de juros e ao periodo da hipoteca. 3.Dia 14 Na essência da POO está o conceito de objeto. o processo orientado a objetos inclui estas etapas: 1. Calcular a quantidade de pagamentos (anos >I< 12). Calcular os pagamentos. Mostrarei a você duas descrições referentes a um processo de cálculo do pagamento de uma hipoteca. Comparando a Programação Orientada a Objetos com a Linear A diferença entre a programação linear ou procedmal e a POO pode parecer sim ples. Os objetos em geral são empregados para descreverentidades. que descrevem o objeto. 2. Obter a quantia principal. que podem ser reais (um veículo) ou abstratas (um vôo reservado em uma companhia aérea nacional). Um é descrito em etapas lineares (também chamado de programação proceduraf) e o outro a partir de um ponto de vista orientado a objetos : O processo linear segue estas etapas: I. 6. os atributos são conhecidos como propriedades (que você pode configurar ou recuperar) e as ações são chamadas de métodos. . Obter o período em anos. Esses objetos também apresentam certas ações que podem ser executadas neles. mas é um conceito complexo em gera l mal compreendido. as entidades se tornam objetos. Calcular a taxa de juros por mês. os cenários são considerados em termos desses objetos em vez da abordagem linear passo a passo que era (e ainda é) usada na maioria dos programas de computador. Na POO. 5. 4.

1 e 14.Text) dbllnterestRate = CType(txtlnterest. Considere os doi s blocos de cód igo mostrados nas Listagens 14.Object .1 Abordagem procedural para um Programa de Cálculo de Hipoteca 1 2 3 4 5 6 7 8 9 'Est ilo linear Private Sub btnCalc_Click(ByVal sender As System. Ooub le) curPrincipal = CType{txtPrincipal. ByVal e As System. Click Dim iYears As Integer Dim iMonths As Integer Dim dbllnterestRate As Double D curPri ncipal As Decimal im D curPayment As O im ecimal iYears = Clnt(txtPayments.Text = cu rPayment. Text. que poderiam ser executados em um formu lário Windows ou da Web para calcular os pagamentos da hipoteca.Click iYears As Integer dbllnterestRate As Double curPrincipal As Decimal curPayment As O ecimal 1 2 3 4 5 6 7 8 'Es tilo Private ByVal e Dim Dim Dim Dim 9 10 11 12 iYears = Clnt(txtPayments . Text.Text. Object .Introdução à Programação Orientada a Objetos 383 Em código. Decimal) 'div ida a taxa de juros por 12 pa ra obter a taxa mensal dbllnterestRate /= 12 curPrincipal *_ «(1 . As System.EventArgs) Handles btnCa lc .ToString() End Sub = A 10 11 12 13 14 15 16 17 18 19 20 21 22 23 cu rpayment LISTAGEM 14. Ooub le) curPrincipal -.2.(l + dbllnterestRate))_ / (1 . CType(txtPrincipal . Text) iMonths = iYears * 12 dbllnterestRate = CType(txtlnterest . as duas abordagens também são diferentes. LISTAGEM 14. Decimal) . Text.«(l + dblInterestRate) i Months)) + dbllnterestRate) IblMonthlyPayment.EventArgs) Handles btnCa lc.2 A bordagem Orientada a Objetos para um Programa de Cálculo de H ipoteca orientado a objetos Sub btnCalc_Click(ByV al sender As System.

como Cal cul ateMortgagePayment ( ). você poderia adicionar esses grupos de sub-rotinas a seu programa como unidades individuais e chamar qualquer uma delas quando necessário. Considere o código usado para trabalhar com controles em um form ul ário Windows: txtpaymenL Text '" 1bl Resul t. Também não é raro agrupar essas sub-rotinas (em geral com outras sub-rot inas relacionadas) em módulos. E bom ressaltar que já que o objeto Mort gage ainda não foi definido. sem o LISO das técnicas da POO.NET.PaymentAmount. exatamente como o objeto Mortgage do exemplo anterior. você precisará usar objetos para agrupar os procedimentos desse modo. Essa fonua de codificação ainda seria procedural em vez de orientada a objetos.ToString End Sub A Listagem 14. em seguida. se esteve acompanhando a primei ra metade deste livro. embora mu itas pessoas possam lhe dizer que si m. Isso não reduz seu valor como uma boa maneira de organizar o código.NET Framework não fará com que seu código seja orientado a objetos.2 cria uma instância do objeto Mortgage.NET é construído dessa maneira.NET e pelo .Dia 14 LISTAGEM 14. DLLs ou outra forma de estrutura de código. estaremos realmente usando a POO. você não poderá executar o código da Listagem 14. que combina as informações sobre a hipoteca com o código para processá-Ias.2 Abordagem Orientada a Objetos para um Programa de Cálculo de Hipoteca (continuação) 13 I' 15 16 17 18 19 20 Dim objMort As New Mortgage() objMort . Usando os Objetos na Organização do Código Na programação proced ural. Ao programar na plataforma .AnnuallnterestRate '" dbllnterestRate objMort. mas as operações matemáticas subjacentes são as mesmas.2. Só com o uso do objeto Mortgage. Embora um resu ltado final semelhante pudesse ser obtido se escrevêssemos uma fu nção com o código proced ural. A segui r. mas começa a ficar Illu ito semelhante à POO com chamadas como Math. Text . É possíve l utilizar os objetos e ainda programar com um esti lo proceduraI passo a passo. Empregar os objetos fornecidos pelo Visual Basic . mas lembre-se de que esse es- .NumberOfYears '" iVears objMorLPrin cipal '" curPrincipal lblMonthlyPayment. é comum dividir os recursos em sub-rotinas ou funções q ue poderão.Text '" objMort. Os dois controles são objetos. dl l. dll . (hipoteca) para fazer seus cálculos. Esse esti lo de programação não é novo para você. Incluir 20 procedimentos diferentes como método de um objetoé uma técnica úti l. ser chamadas de qualquer parte do programa. quase tudo no Visual Basic . todas as suas fu nções matemáticas poderiam ser agrupadas em um arquivo ma th. Portanto.SquareRoot(x) em execução. com uma propriedade Text . criando um sistema organizado. isso ainda não seria uma POO. e todas as funções de strings em s t ri ng.

NET). A classe é um modelo para um objeto. exist indo apenas para agrupar cód igo.NET.3. Classes. Na plataforma .Introdução à Programação Orientada a Ob jetos 385 tilo de agrupamento não é POO. Muitas analogias diferentes são usadas para descrever o relacionamento entre a classe. o objeto e a instância. LISTAGEM 14. Uma das mais com uns é considerar esses conceitos em termos de casas e da construção delas. e como tal devem fi car c laros antes de prosseguirmos. e muitos objetos podem ser gerados com base na mesma classe. e a casa propriamente dita seria um obj eto. os objetos que não representam uma entidade real ou abstrata. mas apenas lembre-se de que há uma maneira específica de construir essas bibliotecas procedurais de código. considere a Li stagem 14. e eles são re lativamente universais para todas as tecnologias e linguagens de programação. é si mplesmente como o código é organizado na platafonna . Para examinar isso nos termos do Vis ual Basic. Objetos e Instâncias Os prim eiros tennos q ue prec isam de discussão são aqueles usados em qualquer material que envolva a POO: classe. Mui tas casas poderiam ser criadas com base no mesmo projeto. Empregando uma analogia desse tipo.3 Inserindo Várias Classes em um Único Arquivo 1 Modu le AllAboutObjects 2 Sub Ma in( ) 3 Dim x As myFirstClass 4 x " New myFirstC lass{) 5 End Sub 6 End Modu le 7 8 Public Class myFirstClass 9 '<a def inição da classe e o código entram aqui> 10 End Class . ela descreve a estrutura básica do objeto. Seu código só será orientado a objetos quando empregar objetos para representar as entidades e conceitos que compõem seu ap licativo. "Criando Objetos no Visual Bas ic . objeto e instância. a classe seria o projeto para a casa. Cada objeto criado a parti r de uma classe é chamado instância dessa classe.NET. Esses conceitos serão a base para seu trabalho com a POO. Conceitos Importantes na POO Alg uns termos foram definidos para serem usados na POO. em geral designam a si mesmos e a todos os seus métodos como estáti cos ou compartilhados. Nesta seção. Você aprenderá mais sobre esses tipos de objetos na próxima lição (Dia 15. explicarei os termos mais comuns e forn ece rei um exemplo de como cada um func iona.

duas variáveis do tipo myFi rs tCI ass são declaradas (nas linhas 3 e 4) e. A seguir. duas novas instâncias de myFi rstCI ass são criadas (linhas 5 e 6). LISTAGEM 14.5. em seguida. mas os dois objetos são instâncias de myFi rs tCI ass o Esse conceito.4. Isso será demonstrado na próxima seção quando voeê aprender as propriedades. Só há um objeto e. Agora x se refere a lima instância da classe myFi rstCl asso Outro exemplo do uso de objetos é mostrado na Lislagem 14.4. portanto. será examinado mais uma vez em outro exemplo na Listagem 14. A linha 3 cria uma variável do tipo myFirstC l ass. que pode conter uma instância de myFi rstCl asso A linha4 gera uma nova instância de myFi rs tCI ass (criando um objelo) e a atribui a variável x. mas duas variáveis que se referem (ou apontam) a ele. um projeto para os ohjetos. uma área da memória. instâncias comparadas a variáveis. ambas podendo se referir a uma instância da classe myF i rstCI asso Em seguida. A variável x contém uma referência a um objeto direrente de y.4 Variáveis e Instâncias Não São a Mesma Coisa 1 Module AllAboutObjects Sub Main() 2 Dim x As myFirstClass 3 Dim y As myFirstClass 4 x o New myFirstClass() 5 y o New myFirstClass() 6 7 End Sub 8 Eod Module Na Listagem 14.5 torna tudo um pouco mais confuso. y é atribu ída a x. Agora duas variáveis foram declaradas. e o resultado é que y agora contém lima referência à mesma instância de myFi rstCI ass que x referenc ia.5 Instâncias Comparadas com Variáveis 1 Module AllAboutObjects Sub Main() 2 Dim x As myFirstClass 3 4 Dim y As myFi rstClass 5 x = New myFirstClassO 6 y " x 7 End Sub 8 End Module A Listagem 14. Cada instância é referenciada por uma variável. uma nova instância dessa classe é criada (por meio da palavra-chave New) e uma referência ao novo objeto é inserida em x. LISTAGEM 14.Dia 14 A instrução Publ i c Cl ass myFi rstCl ass (linha 8) define uma classe nova. .

"ío criadas. x e y.WriteLine("x.Name) {Q}" .7 deve ajudar a ilustrar como as propriedades estão assoc iadas a uma instância individual de uma classe. As instruções Consol e. duas novas instâncias de myFi rs tCl ass s. A seguir. Retornando à ana logia da casa.Introdução à Programação Orientada a Ob jetos 387 Propriedades As classes podem definir as propriedades que cada instância delas deve ter. e essa propriedade é acessada por meio das variáveis que fazem referência ao objcto. mas cada uma pode ser pintada de uma cor diferente. portanto. é um atributo de cada instância. A cor da casa é uma propriedade. todas as instâncias de uma casa são criadas do mesmo projeto. os valores da propriedade são armazenados independentemente com cada instância.WriteLine("y. x. A Li stagem 14. um valor é inserido na propriedade Name de cada instância de myF i rstCl ass.6 adiciona uma propri edade à definição de my FirstC lass por uma variável pública. mas abordaremos os outros métodos no Dia 15.Name 10 Console . Essa não é a ún ica maneira de adicionar uma propriedade. ReadLi neO 12 End Sub 13 End M odule 14 = = {Q}" . e são inseridas referências nas duas variáve is. e seu valor não é determinado pelo projeto. nas linhas 7 e 8. y . duas variáveis são declaradas.Name 11 Console . . A Listagem 14.Name = = Fr ed Joe Cada instância de lima classe possu i sua própria parte na memória associada a ela e. Name = "Jae" 9 Console .Name y. A propriedade é um valor que ex iste como parte de um objeto. e você pode recuperar ou configurá-Ia por meio desse objeto.N ame = "Fred" 8 y.6 Adicionando uma Propr ieda de à Definiçao de myFirstClass 1M odule AllAboutOb j ects 2 Sub Main() O x As myFi rs tCl ass im 3 Oim y As myFirstClass 4 5 x = New myFirstClassO 6 y = New myFirstClass() 7 x. LISTAGEM 14. Wri te Li ne (linhas 9 e 10) produzem a saída a seguir: x.Name) 15 Public Class myFirstClass 16 Publ ic Name As String 17 End Cl ass Como antes.

NET. e a saída dessa ro~ tina será x. as propriedades podem ser apenas de leitura.Writeline("y. apenas de gravação ou de le i ~ tura/gravação. vendam a casa (myHouse . eles podem aceitar parâmetros quando você os chama e retornar valores também.7 e 14.Name" {Ql". em que é atribuída à variável y lima referênc iaà x em vezde a uma nova instânciademyfi rstClass.Dia 14 As Variáveis x e y Apontam para a Mesma Instância de um Objeto LISTAGEM 14. em que múltiplas v ar ià~ veis se referem ao meSmO objeto.Name) 10 Console. o código trabalha COm a propriedade Name da meSma instância. x.7 1 Module AllAboutObjects 2 Sub Main() 3 Oim x As myFirstClass 4 Oim y As myFirstClass X" New myFirstClass() 5 6 y " x 7 x.6 está na linha 6. Verifique a seção 6. Esse conceito específico. essas ações permitem que uma classe possua alguma lógica in~ corporada além das informações que são armazenadas por suas propriedades. Métodos Além das propriedades. porém confuso. Você aprenderá a controlar o acesso às propriedades de suas próprias classes no Dia 15. Esses métodos são exatamente como qualquer outro procedimento.Name " Joe As duas instruções Wri teL i ne produzem o mesmo valor para a propriedade porque tanto x quan~ to y se referem à mesma instância do objeto. .Name " "Fred" 8 y.Name = Joe y. permitindo a existência de um controle sobre como esses valores são acessados. mas uma classe casa criada para ser usada por um aplicat ivo de uma imobi liária pode possuir métodos que listem a casa na Web (myHouse. Li st ( )). Urna casa não é o melhor exemplo quando se quer fa lar sobre métodos. as classes também podem ter comportamentos ou ações associados a elas. y.Writeline("x.ReadlineO 12 End Sub 13 End Module A única diferença entre as Listagens 14.NET. pes~ quise em "Tipos de Valores e Tipos de Referência" para encontrá~la) para obter mais detalhes.1 do Visual Basic Language Specification (parte da documentação da plataform a . Na plataforma . Pri ntBrochure ("Printerl")).Name) 11 Console. Conhecidas como métodos.Name" {Ql" . Sell ( )) ou até exibam uma propaganda (myHouse . Essa diferença sign ifica que nas linhas 7 e 8.Name " "Joe" 9 Console . é outro tópico importante.

no entanto. Para estender essa analogia até que fiquemos saturados de sanduíches. então. o cheeseburger. Exatamente como com as propriedades. que herda características da classe hambúrguer.Introdução à Programação Orientada a Ob jetos 389 Na Listagem 14. mas que não era fáci l de implementar no Visual Basic antes da versão . ° . Isso significa que se o método usar alguma das propriedades (privadas ou públicas) da classe. Quando o restaurante decide começar a vender cheeseburgers. porém chamado na instância.8. que herdasse características do cheeseburger e incl uísse ai face e tomate. Novo TERMO Herança é o conceito pelo qual você pode basear uma classe em outra. Acabei de almoçar. o restaurante poderia agora decidir oferecer um hambúrguer de luxo. porém adicionando uma fatia de que ij o'.8 Adicionado um Método à m yFirstClass 1 M odule AllAboutOb j ects 2 3 4 5 6 7 8 Sub Main() Dim x As myFirstClass x = New myFirstClass() x. esse método poderia ser chamado de qualquer instânc ia da classe. LISTAGEM 14. um método (DoSomething) foi adicionado a myFirstClass por meio de um proced imento Pub 1 i c (Sub) na defi ni ção da classe. em geral para alterar ou adicionar algo nos recursos dispon íveis da classe original. a classe básica é usada corno origem . cozinhe iro é informado para ' fazer um hambúrguer. é a herança. o método é de l1nido na classe. estará util izando as informações armazenadas na instância em questão. Assim. DoSomethi ng () End Sub End M odule 9 Public Class myFirstClass 10 Public Name As String 11 Public Sub DoSome thing() 12 'o cód igo entraria aqui 13 End Sub 14 End Class Em segu ida. ele não é criado do nada. urna nova classe de sanduíche é criada.NET. Em cada caso. Considere o ham búrguer básico: dois pães com um pedaço de carne colocado entre eles. portanto acho que deixarei de lado a analogia da casa e tentarei confundi-lo com uma baseada em sanduiches. Herança Um conceito essencial na POO.

fornecere i um exemplo simples do emprego da herança na Listagem 14.NET usando a sobrepo- sição. CodeSnippet.Text" . É possível ter quantas classes desejar com base em uma única classe. que é derivada de Snippet.Purpose" "Inserir o texto do título na calXa de texto" End Wi th End Sub End Module Public Class Snippet Public Contents As String Publ i c Author As String End Class Publ ic Class CodeSnippet Inherits Snippet Publ ic Language As String Publ ic Purpose As String End Class 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Como você pode ver. Quando for criada uma nova instância da classe CodeSni ppet (1inha 5).Contents" "txtEntry.language " "VB. em que a classe ut ilizada pode estar no fina l de várias camadas de herança. . No Dia 15. portanto o restaurante poderia oferecer um sanduíche vegetariano ou de gali nha. LISTAGEM 14.Text " Ibllnfo . Novo TERMO Sobreposição é um tenno usado para indicar que uma classe-fil ha fornece sua própria implementação de um recurso da classe básica. por enquanto.9.NET" . quando comparado à simples adição de novos recursos. você pode criar uma hierarquia de objetos. a herança e outros recursos.Dia 14 Dessa maneira.Author " "Joe" . os dois derivados da classe hambúrguer e sobrepostos ao tipo de reche io uti Iizado anterionnente. ela terá as propriedades das duas classes disponíveis. mas. ad iciona duas novas propriedades.9 Usan do a Herança para Criar Hierarquias de Objetos 1 M odule AllAboutObjects 2 3 4 Pu bl i c Sub Ma i n{) Oim mySn ippet As CodeSnippet mySnippet " New CodeSnippet() With mySnippet . você aprenderá a criar seus próprios objetos no Visual Basic .

como mostrado na Li stagem 14.11 Sobreponha uma Fun ção para Personalizá -l a a Fim de Que Manipule os Novos Rec ursos de Sua Cl asse 1 Modu le AllAboutOb j ects 2 Public Sub Main() 3 4 5 Dim mySnippet As CodeS nippet m ySnippet = New CodeSnippet{) With mySnippet . Language = "VB.10 Inclua Todos os Recursos de Sua Nova Classe 1 Pub l ie Class Snippet Public Contents As String 2 Public Author As String 3 4 Publie Funetion GetSnippet() As String Di m sTmp As String 5 6 sTmp = "Author: " & Author _ & System . Purpose = "Inserir o texto do título na cana de texto" End Wi th End Sub End Module 6 7 8 9 10 11 12 13 14 15 16 Publie Class Snippet 17 Publ ie Contents As String 18 Public Author As String 19 Publie Overridable Function GetSnippet() As String . LISTAGEM 14. chamado GetSni ppet ( ) que existe na classe Sni ppet e foi criado para retornar a classe Sni ppet comp leta como uma Stri ng. apenas porque a funcionalidade básica não leva em consideração as alterações posteriores fe itas na classe. LISTAGEM 14. Considere um método.Ibllnfo .Introdução à Programação Orientada a Objetos 391 Em geral. Contents = "txtEntry .Author " "Joe" .NET" . suas duas novas propriedades não serão manipuladas. A classe CodeSn i ppet da Listagem 14.Text . EnvironmenLNew Line 7 & Contents 8 Return sTmp 9 10 End Funetion 11 End Cl ass Essa função exibe apenas as duas propriedades da classe básica. a classe nova precisa sobrepor algum recurso da classe básica. Text" .10.11 mani pula isso sobrepondo a função GetSni ppet da classe básica. portanto se você não as sobrepuser à nova classe.

25 26 27 28 Public Class CodeSnippet 29 Inherits Snippet 30 Public Language As String 31 Public Purpose As String 32 33 Public Overrides Function GetSnippet{) As String 34 Dim sTmp As String 35 sTmp = MyBase . você precisa fornecer uma nova implementação na classe derivada (marcada com Overri des.NewLi ne & 37 "Language: " & Language &_ 38 Sys tem.Environment. linha 33). Name que foi utilizada no procedimento GetSni ppet referia-se à propriedade Name da instância aluaI dessa classe.12. Envi ronment.12 Use uma Classe Herdada em Qualquer Local Que Der Suporte a Sua Classe Básica 1 Option Strict On 2 Option Explicit On . cm segu ida. Envi ronment. Ela se refere ao objeto atual . GetSnippet()&_ 36 Sys tem. a palavra-chave especial MyBase pode ser usada (linha 35) para acessar as propriedades e métodos da classe básica.Dia 14 LISTAGEM 14. portanto Me. Outra palavra-chave especial.NewLi ne & 39 "Purpose: " & Purpose 40 Return sTmp 41 End Function 42 End Class Dim sTmp As String sTmp = "Author: " & Author &System. é Me.11 Sobreponha uma Função para Pe r sonalizá . Para obter o resultado da função da classe básica como parte da implementação dessa classe.la a Fim de Que Manipu le os Novos Recursos de Sua Cl asse (continuação) 20 21 22 23 2. que não foi empregada nesse exemplo. Um recurso útil da herança é que as classes que são derivadas de uma classe básica específica podem ser usadas corno se fossem essa classe bás ica. As instâncias da nova classe podem ser inseridas em variáveis que utilizem o tipo de dado da classe anterior e passadas corno parâmetros para os procedimentos que esperem o tipo de dado anterior.NewLine & Contents Return sTmp End Funct i on End Class Para que essa função seja sobreposta. como most ra a Listagem 14. LISTAGEM 14. ela deve ser marcada com Overridab l e na classe básica (l inha 19) e.

Text = IbIInfo.Text" .Author : "Joe" . Portanto.12 Use uma Classe Herdada em Qualquer Local Que Der Suporte a Sua Classe Básica (cont inu ação) 3 4 Modu le AllAboutObjects 5 Public Sub Main{) 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Dim mySnippet As CodeSnippet mySnippet : New CodeSnippet() With mySn i ppet . 12 produziria o seguinte resultado: Autho r: Joe txtEntry . mas a implementação da classe deri vada será chamada em vez da básica.NET" . Construtores Outro recurso novo orientado a objelos nesta versão do Visual Basic é a inclusão de construtores para os objetos.Text language : VB . objSni ppet.Introdução à Programação Orientada a Ob jetos 393 LISTAGEM 14. Language não seria compi lada se você a inserisse na linha 20 já que ela não é uma propriedade válida para a classe Sni ppet.Contents = "txtEntry. GetSnippet(» End Sub 22 'od M odule Quando um objeto é passado como seu tipo básico.ReadLine() End Sub Public Sub PrintSnippet{ByVal objSnippet As Snippet) Console .1 2. Lang uage = "VB. as propriedades e métodos adicionados pe la classe herdada não ficam disponíveis. Os métodos sobrepostos ficam disponíveis porque existem na definição da classe básica.N ET Purpose : Inserir texto do título na caixa de texto Você aprenderá mais sobre a herança e a capacidade de tratar um objeto derivado como se fo sse sua classe básica. A Listagem 14.Writeline(objSnippet . . Text : Ibl lnfo. como na linha 15 da Listagem 14.Purpose : "Inserir título do texto na caixa de texto" End With PrintSnippet{mySnippet) Console. durante a próxima lição (Dia 15).

"VB. diversos construtores são adicionados às classes Sn. fornecendo várias maneiras pelas quais o objeto pode ser criado._ 9 "Joe" . e essa pode especificar que parâmetros fornecer na hora da criação. permitindo que esses objetos sejam inic ializados de muitas maneiras. Text " 1bl Info.GetSnippet()) 15 End Sub 16 End Module 17 18 Public Class Snippet 19 20 Public Contents As String Public Author As String Public Sub New() End Sub Public Sub New{ByVal Contents As String) Me.NET. Na Listagem 14.Author " Author End Sub 21 22 23 24 25 26 27 28 29 30 31 32 33 34 . ByVal Author As Stri ng) Me. Text" . e (exatamente como qualquer procedimento) você pode ter a quantidade de versões sobrepostas que quiser dele.Contents " Contents Me. ppet e CodeSnippet. Esse conceito proporcio- na uma maneira de in icializar seu objeto na hora da criação. "Inserir texto do título na caixa de texto") 10 PrintSnippet{mySnippet) 11 Console.ReadLine{) 12 End Sub 13 Public Sub PrintSnippet(ByVal objSnippet As Snippet) 14 Console.WriteLine{objSnippet.Contents " Contents End Sub Public Sub New{ByVal Contents As String. LISTAGEM 14. No Visual Basic . 13. o construtor é representado por um procedimento New na definição da classe.394 Dia 14 Novo TERMO o construtor é uma rot ina chamada quando a instância de uma classe é gerada.13 Os Construtores Criam e Inic i alizam Seu Objeto 1 Option Strict On 2 Option Explicit On 3 4 Modu le AllAboutObjects 5 Public Sub Main{) 6 Dim mySnippet As CodeSnippet 7 mySnippet "_ 8 New CodeSnippet("txtEntry.NET" .

_ ByVal Language As String. New(Contents) End Sub Public Sub New(ByVal Contents As St r ing. Language) Me .Author " Author End Sub Public Sub New(ByVal Contents As Strin9 .Introd ução à Prog ram ação Ori entada a Objetos 395 LISTAGEM 14. Purpose " Purpose End Sub Public Over rides Function GetSnippet()As String 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 . Author .New(Contents .NewLine &Contents Return sTmp End Function End Class 54 55 56 57 Public Sub New(ByVal Contents As String) MyBase .Environment . ByVal Author As Stri ng) Me. ByVal Author As Stri ng. ByVa l Purpose As String) Me . Author) Me . Language " Language End Sub Public Sub New(ByVal Contents As String. ByVal Author As String .13 Os Const r utores Criam e Inicializam Seu Objeto (continuação) 35 36 37 38 39 40 41 42 43 44 45 Public Class CodeSnippet 46 Inherits Snippet 47 Public Language As String 48 Public Purpose As String 49 50 Public Sub New() 51 MyBase._ ByVal Language As String) Me.New(Contents) Me. New(Contents .New() 52 End Sub 53 Public Overridable Function GetSnippet() As String Oim sTmp As String sTmp " "Author: " &Author &System.

você pode chamar o construtor da classe básica por meio da palavra-chave My8ase (linhas 51 e 55). a iniciali zação genérica é inserida no primeiro construtor. Primeiro.Dia 14 LISTAGEM 14.NewLine & 85 "Purpose: " & Purpose 86 Return sTmp 87 End Function 88 End Class As linhas 22 a 34 são os construtores para a classe Sni ppet. empregado em todos os outros construtores.Environment. Antes da plataforma . Você deve decid ir se vai projetar um sistema usando as técnicas orientadas a objetos. 4.GetSnippet()&_ 82 Sys tem. 2. Crie hierarquias de objetos. mas os programadores ainda pod iam projetar um aplicativo empregando esses conceitos e.NET possui embutido atualmente. em seguida. é chamar seus construtores mais sim ples dentre os mais complexos. Envi ronment. implementá-los utilizando várias etapas ou artificios para conseguir o que o Visual Basic . a sobreposição de proced imentos e outros conceitos da POO. As linhas 50 a 77 são os construtores para a classe CodeSni ppet. você começará a incorporar objetos em seus aplicativos. 3. passará para o estágio conceituaI. O segundo artifício. Depois que você tiver sua fase de abrangênc ia/escopo e o trabalho de anál ise dos requisitos concluídos em um projeto.NewLi ne & 83 "Language: " & Language & _ 84 System. e qualquer código adicional . Durante a fase de projeto. e a im plementação não está envolvida nessa decisão. em seguida. também sejam processados para sua classe derivada.NET. e contêm alguns artificios em como a inicializam . requerido para a manipu lação de cada parâmet ro novo. e ilustram a maneira-padrão de inicializar um objeto. o Visual Basic não possuía recursos para perm itir a herança. o que assegura que os códigos sejam executados na rotina da classe básica e.13 Os Const rutores Criam e Inicializam Seu Obje to (continuação) 80 Dim sTmp As String 81 sTmp : MyBase. . Modele seus objetos. Detenn ine as propriedades e métodos. pode ser incluído apenas no prim eiro construtor no qual todos os parâmetros novos aparecem. Projetando um Aplicativo com o Uso da POO A programação orientada a objetos não é um conceito técnico e não está relac ionada apenas à programação de um sistema. Siga estas etapas para criar esse projeto: I Identifique as entidades. A POO está envolvida na criação de um sistema com base em um projeto conceituai. Utilizar esse esti lo de codificação ev ita a repetição de cód igos.

msn . decidindo se pára ou permanece. O vinte-e-um é umjogo de cartas com dois ou mais participantes. os jogadores apostam uma quantia em dinheiro em sua probabilidade de ter uma mão melhor que a do jogador que dá as cartas . em seguida. E claro que essa é uma descrição breve. Em seguida. e ele é jogado entre os participantes incluindo também o jogador que distribui as cartas. Todos os participantes passam por esse processo. quem ganha é aquele que distribui as cartas. Lembre-se de • . ped indo mais cartas até que decidam parar ou que excedam o va lor. Identificando os Objetos A primeira tarefa é descrever os requisitos de seu sistema. o jogador que dá as cartas as distribui em ordem para cada partic ipante. Se não souber nada sobre ele. Depois que ele e os outros jogadores já tiverem recebido todas as cartas. divididas e outras características do jogo. com). você pode começar a procurar as entidades que poderiam ser transformadas em objetos. Depois que todos os jogadores decid irem parar de receber cartas ou ti verem sido elimi nados da rodada. Um artificio que gosto de usar para iniciar esse processo é empregar todos os substantivos que aparecem nas descrições de meu sistema. os outros pagarão a ele . então. o jogador que dá as cartas distribui mais uma para cada participante e para ele mesmo. perderá imediatamente essa rodada. Antes de cada rodada.Introdução à Programação Orientada a Objetos 397 Cada etapa será abordada ind ividualmente a medida que você percorrer o processo de descrição de um jogo de vinte-e-um usando objetos. Utilizando o vinte-e-um como exemplo. já que o jogador que dá as cartas sempre ganha em um empate. Um ou mais baralhos são embaralhados e. você precisa esboçar o sistema. apl icativo ou componente proposto com detalhes suficientes para determinar toda as entidades principais. uma de cada vez. mas está detalhada o bastante para atender a essa discussão. Seria úti l que você compreendesse esse jogo de cartas. os partic ipantes fazem suas apostas depo is de conhecer somente uma carta. O objetivo do jogo é fazer com que o valor de suas cartas chegue o mais próx im o possível de 2 1 sem ultrapassar essa marca. que é muito mais trabalhoso do que pode parecer. até que ojogadordecida parar ao atingir 21 ou quando chegar perto. ele terá de pagar a todos os jogadores com resultados mais altos que os dele. Portanto. Se ninguém consegu ir esse resu ltado. Nesse ponto. antes que lesse estas seções. não abordando quando as apostas são dobradas. Nesse estágio. consulte as regras procurando "BlackJack" na Encarta (http://encarta. A rodada termina se alguém chegar a um total igual a 21 com apenas duas cartas. dê uma olhada nessa breve e provavelmente incompleta descrição do jogo (recorra ao site da Encal1a para obter informações mais completas). chamado de ' natural'. Se ele exceder 21 com as novas cartas que recebeu. o jogador que dá as cartas continua a recebê-Ias. um deles dando as cartas. Em caso de empate (quando o jogador que dá as cartas e os outros obtêm o mesmo valor próximo a 2 1). se ele term inar com 21 . Considerando esse exemplo como a parte de uma declaração necessária a seu trabalho. o jogador que dá as cartas distribui uma para cada participante e para ele mesmo. e os que tiverem resultados mais baixos terão de pagar a ele. segundo as regras fixadas.

então. uma Mão atual. Apostar e outros. Perceber esses re lacionam entos é uma parte essencial do processo de identifi cação dos objetos. poderia ser melhor que eles fossem o mesmo objeto ou que existisse um relacionamento de herança entre eles. o objeto Mão. estão relacionados. Por causa das semelhanças entre Part icipante e Jogador que dá as cartas. Só dois objetos. que em geral ajudam a defin ir quais deles. Percorrer o exemplo apenas procurando os substantivos produzirá mais entidades do que queremos. mas posso fazer uma se leção nessa li sta e obter as sugestões a seguir para os objetos: • • • • • • • • Participante Jogador que dá as cartas (seria incluído como um participante?) Rodada (uma jogada) Jogo (o jogo completo) Baralho Mão (cartas do participante ou do jogador que dá as cartas) Carta (uma única carta do jogo) Aposta (representando uma aposta do part ici pante) Dada essa lista. a posição pode ser necessária) e o Total em dinheiro como propriedades. Você também poderia querer . Baralho. Mão e Carta. e pode afetar muito o aplicat ivo resultante. Cada uma delas poss ui vários atributos que poderão ser propriedades. o Baralho teria um conjunto de obj etos Carta e uma propriedade Quantidade (para indicar a quant idade de cartas atualmente no baralho. uma Posição Dá que o jogador que dâas cartas o faz em uma ordem especifi ca entre os participantes. Um Participante pode ter um Nome. Os métodos do objeto Participante poderiam incluir Permanecer. também teria um conjunto de objetos Carta e lima propriedade Quantidade. você poderia escrever um cód igo que lidasse com as duas entidades apenas tratando-as como instâncias da classe básica. passaríamos para a detenn inação das propriedades e métodos desses objetos. e já estamos vendo um certo padrão. e diversas ações prováveis que podem se tornar métodos. Se os objetos Jogador que dá as cartas e Participante tivessem sido herdados do mesmo obj eto básico. Jogador que dá as cartas. representando as cartas que um participante ou o j ogador que dá as cartas estivesse segurando no momento. a Mão aluai e o Total em di nheiro também. Continuando a percorrer a lista de objetos. O Jogador que dá as cartas pode ter o Nome. começarei a examinar Participante. se houver a lgum .Dia 14 meu conselho sobre os substantivos e tente por sua própria conta criar uma lista de objetos antes de exam inar a que consegu i. diminu indo quando elas fossem distribuídas). Parar. De maneira semelhante. ou Jogador que dá as cartas fosse herdado de Participante. além dos métodos Permanecer e Parar do objeto Part icipante. Determinando as Propriedades e Métodos Atendo-se apenas a um subconj unto das entidades encontradas.

O método Adicionar/ Remover seria aplicado ao objeto Mão. Em vez de pensar na herança. A)._. e não uma necess idade real de que seja herdada de qualquer outro objeto. seria úti l que você criasse diagramas ou modelos para ilustrar os objetos e seus relacionamentos. Q. para demonstrar a aparência de um diagrama de modelagem de objetos. forneceI/do a \'ocê lili/a visualbação do es/ado a/ual do • modelo de obje/o de seu aplicalil'O. mas Embaralhar não seria tão úti l. K. eles são quase idênticos. mas a regra ' o ás pode va ler 1 Oll II ' tornaria essa propriedade difícil de implementar e seria necessário um trabalho maior no projeto.1 A modelagem UML (Unil-ersal Modefing .1 foi criado com o uso de um estilo de modelagem chamado UM L ou Universal Modeling Language. Ouros e Paus) e valor (2-1 O. Esse tipo de diagrama pode ser gerado empregando-se qualquer lima das diversas ferramentas existentes. você poderia criar Mão e Baralho como classes derivadas de uma classe ConjuntoCartas mais genérica. . Por enquanto. D ("J CJ a docllfllclltação do /til/doI/amemo ill/erl/O de seu sis/el1ltl. Espadas.Introdução à Programação Orientada a Ob jetos 399 uma propriedade Tolal no objelo Carta. O Visual Studio .. J. Como alternaliva. Os métodos do objeto Baralho incluiriam Adicionar/Remover para o conjunto de cartas e um método Embaralhar para misturar esse mesmo conjunto.NET Architect Edition fornece ferramentas de modelagem. Modelando Seus Objetos Ao percorrer o processo de detenninação dos objelos na análise de requisitos.1 . porém contendo quantidades diferentes de cartas. para indicar o valor lolal das cartas. e elas também estão disponíveis em uma cópia autônoma do Microsoft Vis io. A classe Carta é bem fácil de definir: naipe (Copas. • Lal/guage) mel/de a IIl11a finalidade relacionada ao proje/o. FIGURA 14. A vantagem de modelar seu ap licativo é fornecer um diagrama de seu projeto inicial dos objetos e utili- . uma opção seria transformar os dois na mesma classe. . Os objetos Baralho e Mão não são apenas semelhantes. . inc lu indo o Visio e o Rational Rose. O diagrama mostrado na Figura 14. e represelllo . veja a Figura 14.

NET. na tentativa de vis ualizar os conceitos e entidades de um sistema como objetos.NET devem estar em conformidade) em vez de ser específica de cada linguagem.. Resumo Os objetos são uma das principais partes do Visual Basic . . Em um ambiente que envolva uma equipe grande. Deve-se enfocar primeiro o projeto. Agora.Io quando fizer alterações com o passar do tempo. mas isso decerto estará mais relacionado com o código criado por você.j fa la r qu e a C# e a C++ fornec em melho res recursos de prog ramaçã o orientada a objetos do que o Visual Basic .NET. antes de se preocupar com os detalhes da implementação do conceito desses objetos.NET apresentam a mesma funcional idade de POO porque ela está sendo fornecida pela Common Language Specificat ion (com a qual todas as linguagens . mas urna abordagem orientada a objetos é diferente de urna procedural comum. revisara que já aprendeu e começar a pensar em corno colocar seu conhecimento em prática.Resposlas dos TesteslExercícios" . os recursos de geração de códigos da maioria das ferramentas de modelagem também podem ser úteis. você aprenderá mais sobre a criação de objetos usando os diversos recursos da POO discutidos em toda esta lição. é simplesmente outra abordagem para projetar e construir esse aplicativo. A POO não produz res ultados diferentes em um aplicativo. P A POO é melho r ou ma is rá pida do que o estilo de programação ' linea r' ou comu m? R Não necessariamente. P&R P O U\.Dia 14 zá. Isso significa que na plataforma . o Vi sio e o Rational Rose (e provavelmente outros) dão suporte à engenharia reversa de códigos existentes.NET.NET. ela fornece recursos de POO (como a herança) que o Visual Basic não poss uía. No Dia 15. A engenharia reversa é uma ótima maneira de documentar um sistema quando não se emprega a mode lagem desde o início. perm itindo que você crie o código da estrutura de qualquer conjunto de objetos de seus diagramas. isso era verdade com relação a C++. Ainda com relação à geração do código. o Visual Basic . Workshop O Workshop foi planejado para ajudá-lo a antecipar possíveis dúvidas. e podem usar essa tecnologia para produzir um diagrama de objetos a partir desses códigos. acred ita-se que a POO gera sistemas que possuem uma manutenção mais simples e são mais fáceis de expandir. . todas as linguagens . As respostas do teste estão no Apêndice A. Em geral . Isso é verdade? R Antes da plataforma .NET é apenas uma linguagem tão boa para a POO quanto a C++ ou a CII .

Leve em consideração vários tipos diferentes de eventos e produza uma pequena lista dos objetos que você poderia projetar para essa finalidade. Que palavra-chave permite que você se refira à classe bás ica quando escreve um código dentro de lima classe derivada? 2. Qual seria o resultado deste código? 1 Module A llAboutObjects 2 Sub M ainO 3 Oim x As myFirstClass 4 Dim y As myFirstClass 5 x " New myFirstClass() 6 y " x 7 y.Name 9 Console . Wri teLine("x.Name .Name) II Console. Name) 10 Console.Name" lO}".Name " "Fred" 8 x. Que nome é dado quando são criadas várias versões do mesmo método com conjuntos diferentes de parâmetros? 3. .Introdução à Programação Orientada a Objetos 401 Teste I.WriteLine("y.lO}" .Name " y. y. x.ReadLineO 12 End Sub 13 End M le odu 14 15 Public Class myFi rstClass 16 Public Name As String 17 End Class Exercícios Descreva o que poderia ser um projeto com objetos que registrassem os eventos de um grande estádio.

.

e o Dia 10 foi exatamente a lição de q ue precisava.SEMANA Revisão 2 Na Semana 2. Embora os aplicativos da Web sejam a tendência atual.NET. fornecendo infonnações sobre desempenho. manipular esses dados quando preciso.NET para se conectar aos servidores. Sua introdução aos fonnulários da Web mostrou como criar um aplicativo da Web que pudesse ser programado com o mesmo modelo dirigido a eventos que os aplicativos Windows usaram durante anos. indo da introdução a uma boa mostra das classes do .a criação de interfaces com o usuário com operações de arrastar e soltar.NET Framework aos detalhes sobre os recursos avançados orientados a objelos do Visual Basic . recuperar as informações necessárias e. No Dia 13. você aprendeu o bastante para criar um aplicativo completo de produção com uma interface com o usuári o. É claro que você também tinha de aprender a construir uma interface com o usuário com base na Web. Essa abordagem dos for· mulários Windows introduziu a razão original pela qual a palavra 'V isual ' foi adicionada ao Visual Basic . e o Dia 9 mostrou·lhe como construí· los no Visual Basic . O Dia 8 apresentou várias das parles mais úteis do . abrangemos lima grande á rea. visua· lizar e criar contadores de desempenho. abordamos outro dos principais recursos novos do IDE do Visual Studio. os aplicativos Windows ainda são comuns. . o Server Exp lorer. Data do Framework podem ser usadas para esta· belecer uma conexão com um banco de dados. conexões com bancos de dados e até algumas conexões com as funções do servidor como o registro de eventos. Essas lições mostraram como as classes System . No geral. e trabalhar com o Event Logs do Windows XP/2000fNT. e como você pode usá·lo no Visual Basic . já é possível criar seu aplicat ivo Windows.NET.NET Framework e também o conduziu pelo processo de exploração do Framework por sua própria conta. você estudou os bancos de dados . Agora os aplicativos que você criar poderão agir como programas no nível empre· sarial . conseguimos saber mais do que talvez quiséssemos sobre o gosto musical de peta menos um dos autores (e não disse qual). Nos Dias II e 12.alguma teoria. uma apt idão inestimável quando tiver de fazer algo que este livro não teve tempo de abordar. propriedades e alguma codificação. No decorrer do cam inho. erros e de auditoria por meio das ferramentas com as quais os administradores de sistemas já estão familiarizados. Esse conhecimento permiti rá que você encontre qualquer recurso de que precisar no Framework. porém muito mais prática. em segui· da. Usando os controles.

abordamos a estrutura e os recursos dos objetos e como usá-los para construir apli cativos. que começamos lá atrás no Dia 7. - . uma biblioteca de registras de C Ds/OVOs on-line. o que perm ite a criação de sistemas que vão a lém de si mples exemplos na área dos ap licativos reais.com/detaii sams . cfm?item=0672320665. Mais inform ações sobre os objetos ainda estão por vir. o Dia 14.NET.samspubl ishing.NET. você retomou ao assunto dos objetos no Visual Basic . No final da Semana 2. você já tem uma compreensão substancial do Vis ual Basic . Nessa lição avançada. O projeto de bônus da Semana 2.Dia 14 Na última lição da Semana 2. Verifique todos os três projetos de bônus na Web em http://www. colocará à prova seu conhecimento aperfeiçoado na construção de um aplicativo com uma estrutura interna mais complicada e uma interface com o us uário tanto no Windows quanto na Web.NET. Leia o Dia 15 para obter detalhes sobre como é possível desenvo lver seus objetos e sistemas com base em objetos no Visual Basic .

O último capítulo deste livro. aborda os serviços da Web. Por essa razão. . você aprenderá a criar suas classes de biblioteca e componentes no D ia 15. o lugar que os serviços da Webocupam em seus sistemas foi discutido no Dia 5.NET Framework.NET.SEMANA Visão Geral 3 Durante esta última semana. Essa lição inclui uma discussão sobre menus. Xml) que fac ilitam ao seu código a leitura.mult iple doclIment interface) e vários dos controles mais complicados fomec idos pelas classes dos formulários Windows. Primeiro. Os Dias 18 e 19 fornecem as informações sobre finalização de que você precisa para concluir seu aplicativo e instalá-lo na máquina que será o destino final. Uma discussão sobre a redistribuição do . mas essa estrutura fornece todos os recursos que serão necessários em seus aplicativos. você examinará vários tópicos avançados para complementar seu conhecimento sobre o Visual Basic e o . mas o material do Dia 21 mostrará a você como criar e testar um serviço da Web simples usando o Visual Basic . Como você viu no decorrer dos primeiros 14 capítulos. o Dia 21.NET Framework e sobre os req uisitos bás icos do cliente também está incluída nesses capítulos. códigos que podem ser chamados pe la Web por meio de tecno logias-padrão da indústria como o SOAP. aplicativos com interfaces de documentos múltiplos (MDI .NET (Systems. O Dia 16 irá mostrar-lhe os detalhes da geração de interfaces com o usuário mais complexas para aplicativos Windows por me io das classes dos for- mulários Windows. incluindo o trabalho com a funcionalidade de manipulação de arquivos e figuras da plataforma .NET. seja ele um servidor Web ou os microcomputadores de vários usuários. a XML e o HTTP.NET. a linguagem comum para os dados que fluem por toda a plataforma . o Dia 17 explora mais áreas do Framework. Esse capítulo aborda tanto a própria XML quanto as partes da plataforma . O Dia 20 é uma introdução à XML. o . gravação e manipulação de informações XML.NET Framework é amplo e complexo.

amigos e colegas. Você escreverá um jogo que poderá mostrar para sua famil ia. há o terceiro e últ imo projeto de bônus do livro.Semana 3 Para concluir. e conseguir que eles se divirtam com um programa que você criou! . um programa complexo que usa os conceitos da XML do Dia 20. requer algum trabalho com arquivos e figuras (Dia 7) e envolve a criação de uma interface com o usuário avançada (Dia 16). Esse programa também deve ser divertido. Hangman.

esta lição incluirá a criação de vários exemplos de classes e a geração de uma montagem para armazená-las. transformando-se em uma instância dela. Esta lição abordará: • o A defin ição de obj etos no Visual Basic . Portanto. Criando Objetos Os objetos nào sào criados diretamente no Visual Basic . você aprendeu a usar objetos e projetá-los. Em seguida. .NET. as etapas para definir seus próprios objetos começam com a criação de uma nova classe do Visual Basic . O uso de seus próprios objetos em seu código. em vez disso você construirá classes que se tornarão a definição do objeto. mas em algum momento pode querer ou precisará começar a construi r os seus próprios.NET Nas lições anteriores. • Para ilustrar esses conceitos.NET.NET. os objetos serão gerados a partir da classe.S EMANA 3 DIA Criando Objetos no Visual Basic . O desenvolvimento de suas classes em montagens e o uso dessas montagens a partir de outro apl icativo.

as propriedades e os eventos.NET Criar uma classe nova ê tão fáci l quanto digitar Pub 1i c C1 ass Test na janela de edição de seu código (dentro de um arquivo do Visual Basic . as variáve is e os procedimentos declarados com o escopo Fri end podem ser acessa~ dos por qualquer cód igo dentro do mesmo programa (montagem. portanto você provave lmente criará classes de escopo público. A pa l avra~chave Private é empregada quando não queremos que lima classe seja criada fora de nosso bloco de código atual. a outra opção de escopo que mencionarei é Fri end. Pressupondo que você não tenha tentado isso dentro de um procedimento real (sub-rotina ou função).NET adiciona uma linha End Class automaticamente.1 Uma Classe Pode Herdar Características de Outra Classe 1 Public C1ass Snippet 2 'definição da cl asse 3 4 5 End C1 ass 6 Public C1ass CodeSnippet Inheri ts Snippet 7 8 'definição da classe 9 End C1ass . ap li cativo Windows e assim por diante). você pode especificar apenas uma classe básica para a nova herdar características dela. mas antes é preciso compreender a declaração da classe. As classes. o que quase sempre sign ifica dentro do mesmo arquivo. Escopo Digitar Publ ic Class Test cria uma classe vazia com escopo público (Publ ic). mas de maneira nenhuma por algum outro cód igo. LISTAGEM 15. A Listagem 15. Se tivéssemos declarado sua classe dentro da declaração de outra (aninhando classes). Para concluir. usando a palav ra~chave Pri vate para produzir uma classe que só possa ser uti lizada por outro código em um escopo no mesmo nível da declaração. Isso em geral é o que se quer. o que significa que qualquer pessoa com uma referência a esse projeto pode gerar uma instânc ia de Test apenas executando my Tes t " New Tes t ( ). Herança Como parte da declaração da classe. serviço da Web. se a classe for derivada de alguma outra.408 Dia 15 Declarando uma Classe Nova no Visual Basic . poderia dizer que fo i bem-sucedido porque o Visual Basic . qualquer código da classe externa poderia acessar o novo objeto. Denlro dessa classe são definidos os métodos. Essas instruções declaram uma nova classe e indicam o inicio e o fim da definição da classe. então.NET) e pressionar Enter. 1 mostra um exemplo disso. Também é possível criarclas~ ses privadas. mas essa não é a sua única opção.

a palavra~chave MustInheri t será perfeita. Ela será útil para demonstrar que você pode em pregar a pa l avra~chave MustOve rride como parte da declaração de métodos. Se especificar essa palavra~chave.NET como System. ltSTAGEM 15. apenas como parte de sua hierarquia de objetos. e um ou mais métodos~ chave prec isam impl eme n~ tar classes derivadas antes de surgir algo útil. que é usado na C# para indicar que essa nova classe não permite que características sejam herdadas dela e é empregado na de fi· ni ção de muitos objetos da plataforma . Se utilizar MustOverride. Ela é uma classe básica útil porque penn ite a codificação de várias rotinas a partir de uma única classe e automaticamente dá suporte a todas as classes derivadas. Uma utilização comum dessa pa l avra~chave é quando a classe básica não é funcional isoladamente. Se você definir os objelos básicos que não quer que sejam empregados sozin hos.String. o contrário da criação de classes lacradas é a geração das abstratas. está apenas definindo o modelo geral de todos os ob ~ jetos que a compartilham como classe bás ica. adicionada depois do trecho do escopo na declaração da classe. por meio da palavra~chave Notlnheri t ab I e. então.Criando Objetos no Visual Basic . que devem ser usadas como classes básicas e não podem ser criadas diretamente.2 Mustlnherit e MustOverride Permitem Q Você Especifique Que uma ue Classe Não Pode Ser Usada Diretamente 1 Public Mustlnherit Class BaseShape Public MustOverride ReadOnly Property NumSides() As Integer 3 Public MustOverri de Sub Draw () 4 End Cl ass 5 6 Public Class Square 7 Inherits BaseShape 2 8 9 10 11 12 13 14 15 16 Public Overrides Sub Draw() desenhe um quadrado [nd Sub Public Overrides ReadOn ly Prope r ty NumS ides() As Integer Get Return 4 E Get nd [nd Property [nd Class I ANALISE A classe Shape é inúti l sozinha. A Listagem 15. então. Defin indo essa classe como Mustlnherit.NET 409 Além disso. .2 ilustra o uso da palavra~chave Mustlnherit. você também pode especificar que sua classe não permite que caracterí s~ ticas possam ser herdadas. Isso é equivalente ao termo 'Sealed'. a fim de forçar a incl usão deles em todas as versões herdadas dessa classe. não terá de fornec er nenhuma implementação desse método ou propriedade. ninguém poderá criar uma nova classe derivada dessa. você assegurará que os programadores não possam contrariar suas intenções e criar urna instância de Shape diretarnente.

Name " "Fred").3 As Variáveis Públicas Se Tornam Propriedades Quando São Dec l aradas Dentro de uma Classe 1 Publ i c Class Person 2 Pub I i c Name As String 3 Pub 1i c FirstName As String 4 5 Pub 1i c SecondName As String End Cl ass Criar propriedades por meio de uma rotina própria é um método mais complexo que proporcionará um contro le total sobre a propriedade. que é adequado quando se está apenas testando as classes no Visual Basic .NET.3 apresenta esse método de definição de propriedades. Criar propriedades por meio das variáveis públicas funcionará. Get e Set..NET em vez de confiar que os outros programadores sempre ajam da mane ira correta. determine o nome e o tipo de dado da propriedade que você quer adicionar e. Primeiro.e se alguém o fizesse . não haveria muitos problemas . quando essa classe for herdada desse método. em seguida. o Visual Basic . Marcar o método Draw como MustOverri de indica que. Adicionando Propriedades Há duas maneiras principais de adicionar propriedades a uma classe: criando variáveis públicas (que se tornam propriedades diretamente) ou rotinas completas de propriedades. Já que você não usa- . ele terá de estar presente na nova classe derivada. manipulam a atribuição de um valor de propriedade e o recebimento de um valor (obj Tes t.NET criará a estrutura completa de um procedimento de propriedade: Pub l ic Property Name() As String Get End Get Set(ByVal Value As String) End Set End Property As duas partes desse procedimento. essa é uma mane ira de indicar sua intenção empregando os recursos do Visual Basic . digite esta linha dentro dos limites de uma classe (fazendo as substituições apropriadas para o nome e o tipo de dado da propriedade): Public Property Name() As String Quando você pressionar Enter ao terminar essa linha. LISTAGEM 15. A Listagem 15. mas suas intenções se tomaram claras evitando a ut'i lização incorreta.410 Dia 15 É prováve l que ninguém tente gerar uma instância de Shape . respectivamente. mas você não terá nenhum controle sobre essas variáveis expostas e não haverá maneira de executar os códigos quando seus valores forem alterados. Mais lima vez.

dessa maneira. restringindo. Criando Propriedades de Leitura e de Gravação As rotinas de propriedade são definidas como de leitura ali de gravação na declaração da propriedade. o que provavelmente será preferido. provavelmente precisará de uma variável privada declarada para conter o valor da propriedade. ela será de leitura/gravação.4. podem ser empregadas para produzir lima classe útil. então.4 é pública (Publ i c).4 Os Procedimentos de Propriedade São uma Alternativa ao Uso de Variáveis Públ ic as 1 Public Class Test 2 Private m sName As String 3 4 5 6 7 8 9 10 11 12 Public Property Name{) As String Get Return m sName End Get Set(ByVal Value As String) m sName = Value End Set End Property End Class A rotina de propriedade da Listagem 15. A Listagem 15. como m _sName. duas das quais de leitura/gravação e uma apenas de leitura.N ET 411 rá uma variável pública quando empregar esse tipo de rotina de propriedade. como na Listagem 15. mas você também pode defini-Ia como privada (Private).5 mostra como três propriedades. Como alternativa. . Ad icioná-Ia. . é possível especificar Publ ic ReadOnly Property para criar uma propriedade que não possa ser lida. e você prec isará inclui r tanlo o trecho Get quanto Set na rotina. As verdadeiras vantagens das rotinas de propriedade sobre simplesmente usar uma variável pública estão no fato de que você pode criar propriedades de leitura ou de gravação e executar a validação dos dados em cada tentativa de gravação em uma propriedade.Criando Objetos no Visua l Basic . Nessa forma mais simples. Se a propriedade for declarada sem palavras-chave adic ionais. embora não sejam tão comuns quanto as de leitura/gravação. LISTAGEM 15. A variável da classe privada usa o prefixo m (que representa variável membro) para indicar que ela é uma representação interna de uma propriedade exposta. podem ser úteis em várias situações.4) será lIsado apenas para transferi r valores para fo ra e para dentro da variável interna. à classe de seu exemplo pennilirá a criação do código que será inserido na rotina Get/Set de sua propriedade. As propriedades apenas de leitura. seu LISO fora da própria classe. o código inserido na rotina da propriedade (veja a Listagem 15.

Dia 15 LISTAGEM 15.DisplayName) 12 Console. m _sLastName) End Get End Property Public Property FirstName(} As String Get Return m sFi rstName E Get nd Set(ByVal Value As String) m sFirstName = Value End Set End Property Public Property LastName() As String Get Return m sLastName End Get Set(ByVal Value As String) m sLastName = Value End Set End Property End Class 26 27 28 29 30 31 32 33 3' 35 36 37 38 39 40 41 42 43 . Fonnat("{O} {lf".LastName '" "Jones " 11 Console.ReadLine() 13 End Sub 14 End Module 15 Public Class Person 16 Private m_sName As String 17 Private m _sFirstName As String 18 Private m_sLastName As String 19 20 21 22 23 24 25 Public ReadOnly Property OisplayName() As String Get Return String . m sFirstName .5 As Propr i edades Podem Ser de Leitura/Gra vação.WriteLine(objSample. Apenas de Leitu ra ou Apenas de Gravação 1 Dption Strict Dn 2 Dption Explicit Dn 3 4 Modu le AIlAboutDbjects Publ ic Sub Main() 5 6 7 8 Dim objSamp le As New Person() 9 objSample.FirstName '" "Fred" 10 objSample.

NET 413 As propriedades apenas de gravação são um pouco mais confusas. Em algumas situações.Criando Objetos no Visual Basic . pessoalmente não vejo muitas razões para a existência de uma propriedade que o usuário pode configurar. mas não visualizar. com suas propriedades já preenchidas. pode-se querer passar uma instânc ia desse objeto ã outra rotina. por exemplo. verifica o número de um cartão de crédito antes do acesso a um objeto.6. Se ele pode configurá-Ia.6 Os Procedimentos de Propriedade Permitem a Validação de Dados 1 Option Explic it On 2 Opt i on Strict On 3 4 Public Class CreditCardValidation 5 Public Enum CardTypes 6 ccvVisa 7 ccvMasterCard 8 ccvOiscover ccvAMEX 9 10 ccvOinersClub 11 ccvEnRoute 12 ccvUndefined 13 End Enum I' 15 16 17 18 19 20 21 Private Const Numbers As Stri ng = "0123456789" Private Const sInvalidCheckSumError As String = "O número do cartão de crédito contém um erro" & "em um ou mais dígitos (Checksum Error)" Private Const slengthError As String _ = "O número do cartão de crédito não tem o taman ho certo" & "para esse tipo de cartão (Length Error)" Private sErrorMsg As String Private mCardType As CardTypes 22 23 24 .já deve saber o valor e. com uma rotina de propriedade. Usando Rotinas de Propriedade para Validar Dados o uso das rotinas de propriedade em vez de variáveis públicas apresenta outro grande beneficio. certificando-se de que ele é válido e rejeitando a tentativa se não fOL LISTAGEM 15. por que você iria querer impedi-lo de visualizá-Ia? A (mica situação que posso imaginar na qual uma propriedade apenas de gravação poderia ser úti I é quando Iidamos com senhas. então. A Listagem 15. você pode executar um código sem pre que o usuário quiser recuperar Oll confi gurar o valor dessa propriedade. inclusive a validação de dados antes do acesso a seus objetos. sem expor nenhuma informação de segurança. portanto. Isso perm ite que muitas coisas sejam feitas. Considere uma classe que vai ser usada para estabelecer uma conexão com um banco de dados de back-end e uma de suas propriedades é a senha do banco de dados.

2) . 4) " "6011" lhen Return Cardlypes. "Ca rdNumber") End If End Set End Property Private Function ClPrefix(ByVal sCard As String) As Cardlypes If CType(Left(sCard .ccvAMEX E1seIf Left(sCard .Dia 15 LISTAGEM 15. _ ByVa1 sArg As String} As Boolean If Left(sArg . 2) " "34" OrElse Left(sCard.ccvVisa ElseIf Left(sCard .ccvUndefined End If End Function 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 Private Function Prefix(ByVa1 slest As String. 2) = "36" lhen Return Cardlypes.ArgumentException(sErrorMsg.ccvDinersC1ub E1 se Return Cardlypes. 1) " "4" lhen Return Cardlypes. Integer) < 56 lhen Return Cardlypes. 2} = "37 " lhen Return Cardlypes.ccvMasterCard E1seIf Left (sCard. 2} .ccvDiscover E1seIf Left(sCard . l en(slest» = slest lhen Prefix = lrue E1 se Prefix = Fa1se .6 Os Procedimentos de Propriedade Permitem aVal idação de Oados (continuação) 25 26 27 Private sCardNumber As String Private bValid As Boolean Public Property CardNumber() As String Get Return sCardNumber End Get Set(ByVal Va1ue As String} bVa l id ~ ValidCreditCard(Va1ue) If bVa1id l hen sCardNumber " Va1ue E1se lhrow New System. Integer) > 50 AndAlso Clype( l eft(sCard .

ccvMasterCard. 1» O lhen sCreditCard " sCreditCard & Mid(sTemp. i.N ET 41 5 LISTAGEM 15. ccvAMEX If iCardlength 15 lhen ValidCreditCard = False sErrorMsg = slengthError End If Case Cardl ypes.6 Os Procedimentos de Propriedade Permitem aVal idação de Oados (continuação) 67 6