Desenvolvimento de Software
Desenvolvimento de Software
Desenvolvimento de Software
DE SOFTWARE
autor
EDUARDO FONSECA
1ª edição
SESES
rio de janeiro 2015
Conselho editorial regiane burger; roberto paes; gladis linhares; karen bortoloti;
helcimara affonso de souza
Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida
por quaisquer meios (eletrônico ou mecânico, incluindo fotocópia e gravação) ou arquivada em
qualquer sistema ou banco de dados sem permissão escrita da Editora. Copyright seses, 2015.
isbn: 978-85-5548-003-4
Prefácio 7
Objetivos 10
1.1 Introdução: .NET Framework e Visual Studio 11
1.1.1 Mercado de Software 11
1.1.2 Características do .NET Framework 12
1.1.3 Edições do Visual Studio 17
1.1.4 Instalando o Visual Studio 19
1.1.5 Abordagem Inicial ao Visual Studio 21
1.1.5.1 Iniciando um Projeto 21
1.1.5.2 Primeiro Programa em Visual Basic: Olá, Mundo! 24
1.1.5.3 Sintaxe básica do Visual Basic 26
1.1.5.4 A Interface do Visual Studio 28
1.1.5.5 O Visual Studio no Modo de Depuração 30
1.1.5.6 Compilação e o Arquivo Executável Resultante 30
1.2 Programação Básica com VB.NET 31
1.2.1 Histórico do Visual Basic 32
1.2.2 Comentários, variáveis, constantes e tipos de dados 33
1.2.3 Declaração e atribuição de variáveis 36
1.2.4 Palavras-chave do VB.NET 37
1.2.5 Operadores 39
Reflexão 44
Atividades 44
Referências bibliográficas 45
2. Programação Modular e
Programação Estruturada 47
OBJETIVOS 48
2.1 Programação Modular 49
2.1.1 Módulos 49
2.1.2 Métodos 52
2.1.3 Sub-rotinas e Funções 55
2.1.4 Escopo 60
2.2 Programação Estruturada 63
2.2.1 Estruturas de Controle de Decisão 64
2.2.1.1 Estrutura de controle de decisão simples
(se… então) 64
2.2.1.2 Estrutura de controle de decisão estendida
(se… então… senão) 65
2.2.1.3 Estrutura de controle de decisão aninhada 66
2.2.1.4 Estrutura de controle de decisão em sequência na mesma linha. 68
2.2.1.5 Estrutura de controle de múltiplas decisões (escolha) 69
2.2.2 Estruturas de Controle de Repetição 71
2.2.2.1 Estrutura de controle de repetição controlada por contador (para)
72
2.2.2.2 Estrutura de controle de repetição While (enquanto) 73
2.2.2.3 Estrutura de controle de repetição Do (faça) 74
Reflexão 76
Atividades 77
Referências bibliográficas 78
3. Tratamento de Exceções e
Programação Orientada a Objetos 79
Objetivos 80
3.1 Tratamento de Exceções 81
3.1.1 Exceções 81
3.1.2 Tipos de Exceções 82
3.1.3 Estrutura de um Bloco de Tratamento de Exceções 83
3.2 Programação Orientada a Objetos 90
3.2.1 Conceitos de Programação Orientada a Objetos 91
3.2.2 Orientação a Objetos no Visual Basic 93
3.2.2.1 Análise do arquivo Imovel.vb 97
3.2.2.2 Análise do arquivo Module1.vb 100
3.2.2.3 Eventos 102
3.2.2.4 Classes instanciadas e classes estáticas (shared classes) 103
3.2.2.5 Membros compartilhados (shared members) 103
3.2.2.6 Herança 105
3.2.2.7 Modificadores de Acesso 106
Reflexão 107
Atividades 107
Referências bibliográficas 108
4. Banco de Dados na
Plataforma Microsoft .NET 109
Objetivos 110
4.1 Sistemas de Banco de Dados 111
4.1.1 Sistema Gerenciador de Banco de Dados (SGBD) 112
4.1.2 Elementos de um Banco de Dados Relacional 115
4.1.3 SQL Server 118
4.1.4 Tipos de dados do SQL Server 119
4.1.5 Desenvolvendo um BD no SQL Server 123
4.2 Banco de Dados no .NET Framework 125
4.2.1 Script de Criação de BD 125
4.2.2 Script de criação de tabelas 132
4.2.3 Views 136
4.2.4 Criação de Views 138
4.2.5 Biblioteca ADO.NET 139
4.2.6 Componentes ADO.NET 140
Reflexão 143
Atividades 143
Referências bibliográficas 144
5. Interface Gráfica para o Usuário e os
Elementos de Desenvolvimento de Software 145
Objetivos 146
5.1 Interface Gráfica para Usuário 147
5.1.1 Janelas, Forms e componentes 147
5.1.1.1 Tipos de janelas 148
5.1.1.2 Criando um Aplicativo com Janelas com Visual Basic 148
5.1.1.3 Label 151
5.1.1.4 TextBox 152
5.1.1.5 Button 153
5.1.1.6 GroupBox 154
5.1.1.7 RadioButton 155
5.1.1.8 CheckBox 156
5.1.1.9 ListBox 157
5.1.1.10 ComboBox 159
5.1.1.11 MenuStrip 161
5.1.2 Programação Orientada a Eventos 163
5.2 Desenvolvimento de Software 164
5.2.1 Criando uma Aplicação Windows Forms 164
5.2.2 Adicionando uma Fonte de Dados 167
5.2.3 Formulários para as entidade de dados 171
5.2.4 Resposta a um Evento: abrindo uma janela 174
Reflexão 182
Atividades 182
Referências bibliográficas 183
Gabarito 183
Prefácio
Prezados(as) alunos(as),
7
Capítulo 3 – aborda o tratamento de exceções, seu tipo e sua sintaxe. Na
segunda parte do capítulo, o assunto é a programação orientada a objetos no
VB.NET;
Capítulo 4 – tem como objetivo abordar o uso de bancos de dados em geral
e, especificamente, apresentar o SQL Server, que é o Sistema Gerenciador de
Banco de Dados (SGBD) da Microsoft, que pode ser acessado através do Fra-
mework .NET com a biblioteca ADO.NET;
Capítulo 5 – introduz os conceitos de interfaces gráficas para o usuário
(GUI - Graphical User Interface), programação orientada a eventos e fecha a dis-
ciplina com um exemplo de aplicativo que se conecta a um banco de dados.
Bons estudos!
8
1
Introdução ao
.NET Framework
e Programação
Básica com o
VB.NET
Nesse primeiro capítulo, serão apresentadas as características básicas das fer-
ramentas da Microsoft para desenvolvimento de software: sua biblioteca e re-
cursos do .NET Framework, a linguagem Visual Basic e o ambiente integrado
de desenvolvimento Visual Studio. Serão abordadas as ferramentas disponí-
veis, como obtê-las e o processo de instalação.
Aqui também serão vistos os componentes básicos e a sintaxe da lingua-
gem Visual Basic em sua versão moderna, o VB.NET, linguagem que apresenta
recursos avançados semelhantes a outras linguagens de programação, como o
C#. Quem conhece a linguagem em versões mais antigas, como Visual Basic 6,
deve considerar que ela muito mudou desde então.
OBJETIVOS
Após o estudo desse capítulo, você deverá ter um conhecimento geral do Framework .NET
e do Visual Studio, sabendo o que são e como instalá-los em seu computador. Você saberá
as características gerais da linguagem Visual Basic .NET e alguns de seus elementos bási-
cos de programação, como: palavras reservadas, declaração de variáveis, tipos de dados e
operadores.
10 • capítulo 1
1.1 Introdução: .NET Framework e Visual
Studio
capítulo 1 • 11
Os setores de Finanças, Serviços e Telecomunicações foram os clientes mais
importantes para as empresas desenvolvedoras de software e prestadoras de
serviços de TI no país em 2013, representando cerca de 51% do mercado usuá-
rio. Em seguida, os mais representativos foram Indústria, Governo e Comércio.
O setor Comércio foi o que aumentou mais seus investimento, os quais foram
27% mais altos em relação a 2012. Ainda em 2013, no mercado mundial, os
setores de software e serviços atingiram o valor de US$ 1,039 trilhões, sendo
que o Brasil assumiu a 8ª posição com um mercado interno que totaliza de
US$ 25,1 bilhões vendidos.
Novamente enfatizando apenas dados relacionados ao setor de softwa-
re, o mercado interno foi de US$ 10,7 bilhões em 2013, representando 2,8%
do mercado mundial. As exportações de software desenvolvido no país foi de
US$ 209 milhões. Ainda segundo a ABAS, o setor, domesticamente, conta com
.302 empresas dedicadas ao desenvolvimento e à comercialização de software.
É bastante importante notar que o investimento no setor de TI é conside-
rado essencial para o desenvolvimento dos países, pois suas atividades trazem
produtividade à economias nacionais. Isso não só quando as economias estão
em crescimento, mas também quando elas se encontram em ciclos de crise,
mesmo que o capital para investimentos seja mais escasso, já que a implemen-
tação adequada de sistemas nas empresas traz eficiências que permitem pro-
duzir mais com menos recursos.
12 • capítulo 1
Segundo a própria Microsoft, "o .NET Framework é uma plataforma de desen-
volvimento popular para a criação de aplicativos para Windows, Windows Store,
Windows Phone, Windows Server e Microsoft Azure" (MSDN, 2015a). Isso significa
que o .NET é a base para criar programas que executem nos diversos dispositivos
que rodem o Windows em suas várias versões. Não apenas isso, mas há maneiras
de utilizar essas ferramentas para programar para dispositivos que usam sistemas
operacionais OSX ou com kernel Linux, o que tende a se tornar cada vez mais fácil.
No início de 2015, a versão mais recente da plataforma .NET Framework é a 4.5.
Entre seus componentes mais importantes está o compilador, que suporta
as linguagens Visual Basic e C#. O Framework também suporta muitas outras
linguagens de programação, mas elas não são compiladas diretamente por ele,
e sim por compiladores alternativos que se conformam com seu padrão e ge-
ram código intermediário que executa em seu ambiente, o Common Language
Runtime (CLR). Os compiladores de Visual Basic e C# da plataforma tiveram o
seu código aberto, sob uma licença livre, durante o ano de 2014, sendo incor-
porado à versão 2015 do .NET Framework - a tendência dessa versão, que tem o
codinome Roslyn, é receber muitas inovações no médio prazo.
As plataformas de desenvolvimento, como o .NET, costuma ser formadas por
partes com funções específicas, o que é uma estratégia de desenvolvimento mo-
dular, como veremos no capitulo 2. Para compreender a interação das partes de
um framework, é comum visualizá-lo em camadas, como na figura a seguir.
Aplicativos
capítulo 1 • 13
Até 2014, o .NET foi concebido visando apenas o sistema operacional
Windows, mas, desde então, a Microsoft tomou novos rumos estratégicos e
vem buscando criar um contexto em que o Framework passe a ser multipla-
taforma, isto é, que execute em vários sistemas operacionais. A Figura 1 ainda
mostra o Windows como a base, sobre a qual está o ambiente de execução, o
Common Language Runtime (CLR), que é como uma máquina virtual que exe-
cuta códigos intermediários, em bytecode, de maneira geral se assemelhando
ao que ocorre com o Java. Acima do CLI, está a biblioteca de componentes que
podem ser utilizados pelo aplicativos, como Windows Forms e WPF para cons-
truir interfaces gráficas, ADO.NET para se conectar a fontes de dados e ASP.
NET para construir scripts para servidores Web.
A partir da versão 4.0 do .NET, não é necessário ter as versões anteriores
para executar programas que utilizam novas funcionalidades. Entretanto, se
no momento que o usuário for executar um programa que utiliza funcionalida-
des exclusivas do .NET versão 4.0 ou 4.5, ele apenas tiver versões mais antigas
instaladas, será necessário que ele faça uma atualização, instalando a versão
exigida da biblioteca. A seguir, alguns dos aspectos da execução de código no
.NET serão descritos com mais detalhes.
14 • capítulo 1
outros desenvolvedores. Se um software for desenvolvido por uma linguagem
e essa compilada para um bytecode compatível, também pode ser executado
sobre o CLR, e é isso que ocorre no caso do IronPython, IronRuby, J# e muitas
outras.
.NET Assemblies
Execução do Código
capítulo 1 • 15
Base Class Library (BCL)
A Base Class Library (BCL) inclui muitas classes com seus métodos, tipos
de dados e interfaces com outros componentes de sistema, os quais podem ser
utilizados pelo desenvolvedor para construir seus softwares de maneira muito
mais prática. Como veremos no Capítulo 2, as classes estão contidas em módu-
los que podem ser importados e chamados seguindo um namespace (espaço
de nome), como System.Windows.Forms, o qual para criar controles de jane-
las gráficas. O conhecimento de uma ampla biblioteca de uma linguagem de
programação e seus usos é uma das coisas que, na verdade, toma mais tempo
quando se aprende uma nova linguagem de programação, e não sua sintaxe e
semântica.
CONEXÃO
Instalação do .NET
Quanto mais nova a versão de seu Windows, maior a chance de ter o .NET Framework
mais recente. Se precisar instalar uma versão do .NET, acesse:
<https://msdn.microsoft.com/pt-br/library/5a4x27ek%28v=vs.110%29.aspx>
16 • capítulo 1
1.1.3 Edições do Visual Studio
CONEXÃO
Uma tabela muito prática comparando versões do Visual Studio pode ser acessada no link:
<http://www.visualstudio.com/pt-br/products/compare-visual-studio-products-vs.
aspx>
capítulo 1 • 17
A partir de 2015, a Microsoft passou a ofertar uma versão denominada
Visual Studio Community, a qual também é gratuita, mas engloba em apenas
uma instalação as bibliotecas para desenvolvimento voltado a desktop, dispo-
sitivos móveis e web. Como há a possibilidade que esse se torne o modelo de
distribuição gratuito do Visual Studio nos próximos anos, essa será a versão
utilizada neste livro. No entanto, o Visual Studio Express 2013 permanecerá
disponível para download durante tempo não determinado, podendo até não
vir a ser extinto.
Para consultar as opções disponíveis do Visual Studio Express, acesse o en-
dereço http://microsoft.com/express, o qual o direcionará para a página atual
com as diferentes versões dos produtos. Se optar pelo Visual Studio Express
2013, há quatro alternativas, sendo que você deve utilizar o Visual Studio
Express para Desktop. As outras opções, que não serão abordadas nesse livro,
são: Visual Studio Express 2013 para Web, Visual Studio Express 2013 para
Windows (esse serve para desenvolvimento para a interface do tipo Windows 8,
aquela em que são apresentados em quadrados coloridos em sua tela inicial) e
o Visual Studio Team Foundation.
As versões gratuitas disponíveis do Visual Studio e seus links podem mudar de tem-
pos em tempos, portanto, sempre que precisar, pesquise pela mais adequada para sua
18 • capítulo 1
necessidade. É bastante provável que sempre haja uma versão gratuita. Mais do que
isso, desde 2014 a Microsoft está passando por uma grande transformação estra-
tégica e pode vir a oferecer sua plataforma de desenvolvimento em outros sistemas
operacionais, com parte das bibliotecas tendo seu código aberto.
Se o seu computador usa o Windows XP, pode ter dificuldades em instalar e utilizar o
Visual Studio Express 2013. Nesse caso, tente utilizar o Visual Basic 2010 Express, se
ele ainda estiver disponível para download no rodapé da mesma página. Entretanto, a
versão 2010 da IDE pode deixar de existir em algum momento.
capítulo 1 • 19
Para que a interface do Visual Studio seja configurada para usar a língua
portuguesa, é necessário baixar e instalar separadamente o pacote da língua.
Esse pacote está disponível no seguinte link:
http://www.visualstudio.com/pt-br/downloads/download-visual-studio-vs.
aspx
Entre as diversas opções, é necessário clicar no menu do item correspon-
dente ao Visual Basic Community (ou Express Desktop, caso o tenha escohido),
que mostrará o quadro da imagem a seguir. Tenha certeza que você escolheu o
item correto, ou o procedimento pode falhar.
No lado direito, há uma caixa de seleção que oferece todas as línguas dispo-
níveis para a interface. Escolha o português brasileiro e em seguida clique em
"Baixar agora". Como resultado, um grande arquivo chamado vs_langpack.exe
será baixado. Se o seu Visual Studio estiver aberto, feche o programa e execute o
pacote de língua portuguesa para instalação.
20 • capítulo 1
Após a instalação do pacote de língua portuguesa, abra novamente o Visual
Studio, vá ao item de menu "TOOLS > Options". Após a janela de opções abrir,
entre os itens de "Environment" que está aberto, clique em "International
Settings". Na caixa de opções de línguas haverá o português. Após aplicar essa
mudança, feche o Visual Studio e o abra de novo. Agora ele estará com a inter-
face traduzida.
Como um contato inicial com o VB.NET e com o Visual Studio, vamos fazer nos-
so primeiro pequeno e simples programa, um “Olá, Mundo!”. Com ele, percor-
reremos os passos de criar um projeto, escrever um programa e executá-lo. De-
pois disso, usaremos esse programa bastante simples para salientar algumas
características da sintaxe do VB.NET e aproveitaremos para descrever de forma
geral alguns elementos da IDE Visual Studio.
O programa “Olá, Mundo!” será executado no console, e não em uma janela
de interface gráfica. Apenas faremos um desenvolvimento de interface no ca-
pítulo 5 e, até lá, usaremos programas de linhas de comando no console para
ilustrar exemplos de código. O console, também conhecido como terminal, é a
forma de comunicação escrita mais básica com o sistema operacional, no qual
o computador e usuário trocam dados entre si, um por vez, em uma tela de texto
puro.
capítulo 1 • 21
Figura 1.3 – Primeira tela ao abrir o Visual Studio, com a interface em português.
22 • capítulo 1
A imagem mostra algumas opções e configurações para um novo projeto.
Escolha as seguintes opções nessa tela:
1. Na parte esquerda, escolha "Visual Basic", pois faremos nosso progra-
ma nessa linguagem;
2. Na parte central da tela, escolha "Aplicativo Console", pois nosso pro-
grama será voltado à tela de texto do sistema operacional;
3. Na parte inferior da tela, no campo de "Nome", escreva "OlaMundo",
onde originalmente deverá estar escrito algo como "ConsoleApplication1".
Veja que há uma opção marcada para criar um diretório para a solução.
Deixe essa opção marcada, pois todos os arquivos do projeto serão colocados
nesse diretório. A denominação "Solução" utilizada pelo Visual Basic é uma for-
ma de organização do código. A maioria das linguagens e IDEs possuem essas
formas de organizar códigos em arquivos e diretórios, mas os nomes e hierar-
quias podem variar para cada uma. O Visual Studio utiliza a estrutura Solução >
Projeto > Módulo, sendo que uma solução pode ser um conjunto de projetos e
os projetos conjuntos de módulos.
Após clicar em "OK", o Visual Studio criará as configurações de seu projeto.
Isso pode levar um tempo, dependendo da capacidade de processamento de
seu computador. Será criado e aberto um arquivo chamado "Module1.vb" com
um modelo básico de código já escrito, como na figura abaixo. Nessa figura, o
zoom está em 200% para que o código fique mais visível.
capítulo 1 • 23
1.1.5.2 Primeiro Programa em Visual Basic: Olá, Mundo!
24 • capítulo 1
mais bem organizado e legível. Em cada bloco de código, seu "miolo" fica uma
tabulação adicional à direita. Assim, fica visível que os blocos de código agem
como um contêiner para seu trecho.
Da mesma forma que a indentação dos blocos de código, as cores utiliza-
das para o texto do código servem para facilitar a leitura e compreensão. Essas
cores não fazem parte do código em si, mas são uma interpretação que a IDE
faz das instruções, palavras-chave e outros elementos. Isto é, se esse arquivo
de código for aberto com um editor de textos comum, ele não estará colorido.
Além disso, geralmente é possível mudar a configuração da IDE para alterar as
cores utilizadas por cada elemento para uma palheta que seja mais adequada
para o programador.
Você também deve ter percebido que, enquanto digitava algumas palavras, o
Visual Studio exibiu uma caixa com uma listagem de palavras abaixo do local da
digitação. Mais adiante voltaremos a isso, mas essa lista é um recurso de auto-com-
pletar, em que a IDE faz sugestões de comandos, métodos, classes e variáveis à me-
dida em que se escreve - no Visual Studio, esse recurso é chamado IntelliSense. A
IDE percebe o contexto da digitação e apenas dá sugestões adequadas à situação.
Por exemplo, no momento em que se digita um método de uma classe, ela não fará
sugestões que contenham variáveis declaradas no código fora dessa classe.
Há mais uma característica do Visual Basic e do Visual Studio que você pode
vir a perceber: a linguagem é menos restritiva que outras quanto à sua sintaxe, e
alguns erros são ignorados. Por exemplo, em alguns casos a troca de uma letra
maiúscula por uma minúscula não acarretará em erros. Mas, mesmo assim, o
Visual Studio pode corrigir o problema automaticamente para seguir o estilo da
linguagem. Essa e outras características fazem com que ela seja mais amigável
ao programador iniciante. No entanto, há erros que não podem ser contorna-
dos - se houver um sublinhado vermelho sob algo que você digitou, é porque a
IDE detectou erros de sintaxe que devem ser corrigidos antes de compilar.
Após digitar o código e verificar que não há erros, clique no botão de sal-
vamento de projeto . Esse botão salvará todo o seu projeto, o que é necessário
para se fazer uma compilação final do código. No entanto, é possível executar o
programa através da IDE durante o desenvolvimento sem fazer salvamento do
novo código digitado.
capítulo 1 • 25
1.1.5.3 Sintaxe básica do Visual Basic
A partir de agora, quando não for necessário utilizar imagens da tela do Visual
Studio e o foco for o código em si, usaremos quadros com a transcrição do có-
digo, como a seguir.
OlaMundo.vb
1 Module Module1
2
3 Sub Main()
4 'Meu primeiro programa em VB.NET
5
6 Console.WriteLine("Olá, Mundo!")
7 Console.ReadLine()
8
9 EndSub
10
11 End Module
Código 1.1 – Código do programa OlaMundo.
26 • capítulo 1
4. A instrução Console.WriteLine() é uma chamada de método dentro da
classe Console do .NET. Portanto "Console" é uma classe e "WriteLine()" é um
método. O texto "Olá, Mundo!" dentro dos parênteses é uma passagem de ar-
gumento para esse método. Nesse caso, diz-se que o texto é umaliteral, pois
ele é utilizado diretamente; em contraste, uma variável pode ser passada como
argumento. Muitas linguagens utilizam essa forma com pontos entre os nomes
de classes e seus métodos ou propriedades, e a isso se denomina notação de
ponto.
5. Chamamos de bloco de código o trecho que está embutido em uma es-
trutura de programação. Por exemplo, uma Sub-rotina possui seu próprio tre-
cho de código embutido e, por sua vez, dentro dela pode haver outros trechos
de código referentes a uma estrutura de repetição If...Then, por exemplo. Cada
uma delas é um bloco de código e, para clareza de leitura, seu miolo costuma
ser indentado. Há até mesmo linguagens de programação em que essa indenta-
ção é obrigatória, mas não é o caso do Visual Basic e da maioria das linguagens.
CONSOLE
Olá, Mundo!
Para fechar essa janela do console, basta pressionar a tecla Enter, pois o
programa aguarda a execução da instrução Console.ReadLine() para fechar.
Se no código for usada a instrução Console.ReadKey(), qualquer tecla pode ser
pressionada para fechar o console. Ele também encerra caso clique no X de fe-
chamento da janela. A janela do console também será fechada se, na IDE, for
pressionado o botão "Parar", representado por um quadrado vermelho.
Em caso de erro!
Se no momento da compilação e execução do programa o Visual Studio notificou um
erro, repasse pelo seu código com bastante atenção. Se você digitou de forma correta,
ele tem que funcionar. Procure verificar se digitou as aspas quando deveria, e se pôs o
código dentro do bloco Sub Main(), e não fora dele.
capítulo 1 • 27
Quando estiver praticando, evite copiar e colar o código de onde estiver lendo, pois,
além de o ato de digitar auxiliar no processo de aprendizado, pode ser que os caracte-
res, como as aspas, sejam modificados nesse processo de cópia.
Lembre-se que os números de linhas não devem ser digitados no arquivo do código.
Eles fazem parte da barra lateral da IDE e servem apenas para facilitar a referência a
linhas específicas do arquivo.
Ainda com o projeto OlaMundo aberto, vamos aproveitar para descrever rapi-
damente alguns dos principais elementos da IDE Visual Studio. A imagem a
seguir possui uma descrição dos componentes mais importantes quando o Vi-
sual Studio se encontra em modo de edição, que é o modo padrão quando se
está escrevendo código.
28 • capítulo 1
1. Área Principal: esse é o local onde os arquivos de código são editados.
Acima dessa área e abaixo do menu de opções do Visual Studio há uma aba com
o nome do arquivo aberto. Se houver mais arquivos abertos ao mesmo tempo,
cada uma de suas abas estará ali. Abaixo do nome do arquivo e acima da área de
escrita do código há listas de navegação para os módulos e outras declarações
feitas nesse mesmo arquivo.
2. Gerenciador de Soluções (Solution Explorer): nesse local você pode ver
a estrutura de sua "Solução", com módulos e arquivos listados. Quando abrir
um arquivo de Solução que foi salva e fechada anteriormente, você deverá cli-
car nesse local, no arquivo que pretende editar, para ver seu código. O que é
"Solução"? É a forma que o .NET impõe para a organização de código: módulos
estão dentro de arquivos, que por sua vez estão dentro de soluções, as quais
são, portanto, conjuntos de arquivos e módulos. Outras linguagens de progra-
mação costumam organizar o código com outros nomes, seguindo uma certa
filosofia de programação.
3. Propriedades: essa janela exibe propriedades de um elemento do có-
digo. Cada vez que se clica em uma parte do código, o conteúdo dessa janela
muda para o contexto adequado. Quando estiver desenhando um formulá-
rio e, por exemplo, selecionar um campo de texto, essa janela mostrará suas
propriedades.
4. Barra de status: também é sensível ao contexto, fornecendo informa-
ções sobre um elemento selecionado. Quando se clica em uma linha de código,
ela indicará a linha e a coluna em que se encontra o cursor.
5. Menu inferior: essa barra permite que se abra janelas auxiliares de
acordo com seu contexto de trabalho. No modo de edição, como no caso da
figura anterior, ele permite abrir a janela de saída de resultados e de erros en-
contrados durante a compilação e execução. Durante a execução e depuração
(debugging) do código, outras caixas de resultado são abertas.
6. Caixa de Ferramentas (Toolbox): no caso da figura, ela está oculta. Se
for aberta, nesse momento estará vazia, pois nosso programa é executado no
Console. É nessa caixa que são exibidas as ferramentas para confecção de for-
mulários, como botões e caixas de textos, os quais podem ser arrastados com o
mouse. Ela apenas mostrará itens quando se estiver desenhando um programa
gráfico com formulários.
capítulo 1 • 29
1.1.5.5 O Visual Studio no Modo de Depuração
30 • capítulo 1
Perceba que esse arquivo é menor que o gerado pela depuração. A diferença
é pequena para nosso exemplo, pois o programa que desenvolvemos também
é pequeno e simples.
capítulo 1 • 31
1.2.1 Histórico do Visual Basic
32 • capítulo 1
O Índice TIOBE é uma estatística apresentada mensalmente pela empresa holandesa
de desenvolvimento de software com o mesmo nome, a qual apresenta um ranking de
linguagens de programação mais utilizadas e sua variação em relação a períodos ante-
riores. Esse ranking utiliza várias fontes de dados para calcular seu índice. Apesar de a
popularidade de uma linguagem ser bastante difícil de medir, os sites de notícia usam
esse ranking como um indicador. Em 2015, o Visual Basic .NET é a 10ª linguagem mais
utilizada, com tendência de crescimento e subida no ranking.
A partir desse ponto, vamos entrar em detalhes de diversos aspectos dos ele-
mentos de programação no Visual Basic .NET.
Os comentários são pequenos trechos de texto que são colocados no meio do có-
digo apenas para leitura humana. O compilador não os leva em conta quando
geram os Assemblies, por isso não interferem no funcionamento ou desempe-
nho dos programas. Eles servem apenas para documentação do código, seja para
outros programadores saberem mais facilmente do que se trata certo trecho ou o
para o próprio criador se lembrar porque fez aquilo em determinado momento.
Comentar código é considerado uma prática de programação muito importan-
te. Os comentário, no Visual Basic, são determinados por aspas simples antes de
uma linha de texto, a qual o Visual Studio colore em verde, por exemplo:
capítulo 1 • 33
Uma constante é muito semelhante a uma variável em todos seus aspectos, ex-
ceto em que o valor que ela recebe no início do programa não pode mudar em toda
sua execução, e essa atribuição de valor só pode ser feita quando ela é declarada.
Um exemplo de constante seria seu uso para um software de simulações físicas em
que é necessário utilizar o número Pi com precisão de dez casas decimais:
Tipos de Valor
Um tipo de valor é aquele tipo que armazena seu próprio dado (MSDN,
2015b). Os tipos de dados que se encaixam nessa categoria são os dados nu-
méricos, os booleanos, os caracteres (Char), datas, estrutura (Structure, que
são definidos pelo próprio programador) e os tipos de enumeração (Enum, que
contém um conjunto definido pelo programador). Os Tipos de Valor recebem
um endereço de memória e ficam armazenado em um local da memória cha-
mado pilha (stack).
Tipos de Referência
Os tipos de referência são mais complexos, sendo, na verdade, conjuntos de
tipos de valor ou de outros tipos de referência. Nessa categoria se encaixam ca-
deias de caracteres (String), vetores (arrays), matrizes e classes. Os tipos de refe-
rência não armazenam dados diretamente; eles são apontadores, os quais são
armazenados na pilha da memória e apontam para os endereços de dados que
o constituem e passam a ficar armazenados na área de memória chamada heap.
34 • capítulo 1
Os tipos de dados do Visual Basic são comuns para todas as linguagens que
utilizam o .NET Framework, já que são definidas por ele em seu Commom Type
System. Alguns deles são utilizados muito mais frequentemente que outros. A
adequação de cada um desses tipo se dá pela necessidade de valores específicos
a serem manipulados e pela quantidade de memória que utilizam. Na tabela a
seguir, são apresentados os tipos de dados utilizados na linguagem.
TIPO VISUAL
DESCRIÇÃO / VALORES PERMITIDOS
BASIC
Boolean True ou False
Byte 0 a 255 (não sinalizado), ocupa 1 byte de memória.
Char 0 a 65535 (não sinalizado), ocupa a 2 bytes.
Data, pode ir da meia-noite de 1/1/0001 até 23h59min59s de 31/12/9999. Ocupa 8
Date
bytes.
0 até +/-79.228.162.514.264.337.593.543.950.335 se não for usado valor
Decimal decimal. Se for um valor decimal, pode ter até 28 casas depois da vírgula (+/-
7,9228162514264337593543950335), utiliza 16 bytes.
-1,79769313486231570E+308 até -4,94065645841246544E-324 para valores
negativos;
Double 4,94065645841246544E-324 até 1,79769313486231570E+308 para valores
positivos.
(valores em notação científica), ocupa 8 bytes.
Integer -2.147.483.648 até 2.147.483.647 (sinalizado), usa 4 bytes.
-9.223.372.036.854.775.808 até 9.223.372.036.854.775.807 (sinalizado), ocupa 8
Long
bytes.
Ele se referencia a qualquer outro objeto, podendo ser um tipo de referência ou um tipo
Object
de valor.
SByte -128 a 127 (sinalizado), utiliza 1 byte.
Short -32.768 a 32.767 (sinalizado), utiliza 2 bytes.
-3,4028235E+38 até -1,401298E-45 para valores negativos;
Single 1,401298E-45 até 3,4028235E+38 para valores positivos.
(valores em notação científica), usa 4 bytes.
String 0 até aproximadamente 2 bilhões (231) de caracteres Unicode
UInteger 0 até 4.294.967.295 (não sinalizado), utiliza 4 bytes.
ULong 0 até 18.446.744.073.709.551.615 (não sinalizado), ocupa 8 bytes.
UShort 0 até 65.535 (não sinalizado), ocupa 2 bytes.
capítulo 1 • 35
faz sentido utilizar uma variável do tipo Long para enumerar os funcionários de
uma empresa. Por outro lado, o tipo Double pode ser apropriado para softwares
científicos ou de engenharia.
CONEXÃO
Uma tabela com links para especificações e informações sobre o uso de memória para cada
tipo pode ser consultada em:
http://msdn.microsoft.com/pt-br/library/47zceaw7.aspx
36 • capítulo 1
Exemplo.vb
1 Module Module1
2
3 Sub Main()
4
5 Dim x AsInteger
6
7 x = 5
8 Console.WriteLine(x)
9 Console.ReadLine()
10
11 EndSub
12
13 End Module
Código 1.2 – Exemplo com declaração de variável.
CONSOLE
5
capítulo 1 • 37
Dim Long as Integer
Sub Module()
Console.WriteLine("A palavra Module é reservada.")
End Sub
38 • capítulo 1
CShort GoTo Operator Throw +=
CSng Handles Option To -
CStr If Optional True -=
CType If() Or Try >>
CUInt Implements OrElse TryCast >>=
CULng Imports Overloads TypeOf <<
CUShort In Overridable Variant
Date Inherits Overrides Wend
Decimal ParamArray UInteger
Tabela 1.2 – Lista de palavras reservadas do Visual Basic .NET. Fonte: MSDN (2015).
CONEXÃO
A lista de palavras reservadas no site da Microsoft está no link:
<http://msdn.microsoft.com/en-us/library/ksh7h19t(v=vs.90).aspx>
1.2.5 Operadores
Operadores aritméticos
capítulo 1 • 39
OPERADOR DESCRIÇÃO
+ Adição
- Subtração
* Multiplicação
/ Divisão
Parte inteira do resultado da divisão
\
Exemplo: 1.2 \ 1 = 1
Resto do resultado da divisão
Mod Exemplo 1: 1.2 Mod 1 = 0.2
Exemplo 2: 5 Mod 2 = 1
Eleva à potência de um valor
^
Exemplo: 3 ^ 2 = 9
Operadores de concatenação
OPERADOR DESCRIÇÃO
& Concatena duas Strings
+ Concatena duas Strings (semelhante ao & quando aplicado a Strings)
40 • capítulo 1
OPERADOR DESCRIÇÃO
Desloca uma quantidade de bits à esquerda de um valor em bits, adicionando zeros à
<<
direita.
>> Desloca uma quantidade de bits à direita de um valor em bits, eliminando bits à direita.
10 << 1
O resultado será 20, já que seu binário terá um zero acrescentado à direita
e se tornará 10100. A operação de deslocamento de bits à esquerda equivale a
multiplicar o decimal por potências de 2, por características do sistema biná-
rio. Outro exemplo: 10 << 2 = 40, portanto igual a 10×22.
O deslocamento para a direita equivale a dividir um decimal por potência de
2 e subtrair sua sobra. Por exemplo, 10 >> 1 = 5, já que resultará no binário 101
e do cálculo equivalente a 10/2. Outro exemplo: 35 >> 1 = 17, pois 35 equivale ao
binário 100011 e 17 equivale a 10001.
Operadores de atribuição
capítulo 1 • 41
OPERADOR DESCRIÇÃO EXEMPLO
Eleva à potência de um valor e atribui o variável ^= 10equivale a
^=
resultado variável = variável ^ 10
Desloca a quantidade de bits à esquerda
variável <<= 10equivale a
<<= de um valor em bits, acrescenta zeros à
variável = variável << 10
esquerda e atribui o valor
Desloca a quantidade de bits à direita
variável >>= 10equivale a
>>= de um valor em bits, acrescenta zeros à
variável = variável >> 10
direita e atribui o valor
variável &= 10equivale a
&= Concatena e atribui o resultado
variável = variável & 10
Dim a As Integer = 50
a += 10
Console.WriteLine(a)
Executando esse código, o valor impresso na tela do console será 60, já que
a segunda linha equivale a "a = a + 10", que por sua vez é igual a "a = 50 + 10".
Operadores de comparação
OPERADOR DESCRIÇÃO
< Menor que
<= Menor ou igual
> Maior que
>= Maior ou igual
= Igual
<> Diferente
Retorna True caso os dois nomes de objetos (ponteiros) apontem para o mesmo objeto.
Is
Retorna False caso contrário.
42 • capítulo 1
OPERADOR DESCRIÇÃO
Retorna True caso os dois nomes de objetos (ponteiros) não apontem para o mesmo
IsNot
objeto. Retorna False caso contrário.
Retorna True caso um padrão de string esteja contido em uma string. Retorna False
Like
caso contrário. Isto é, localiza uma cadeia de caracteres em uma String.
Sub Main()
Dim a As New Cliente
Dim b As Object = a
Console.WriteLine(a Is b)
Console.ReadKey()
End Sub
O trecho de código está testando se as variáveis "a" e "b" apontam para o mes-
mo objeto. Como "b" recebeu "a" por atribuição, o resultado do teste será True.
Operadores lógicos
OPERADOR DESCRIÇÃO
And Executa a operação AND (E) em dois valores booleanos, binários ou numéricos.
Not Executa a operação NOT (NÃO) em dois valores booleanos, binários ou numéricos.
Or Executa a operação OR (OU) em dois valores booleanos, binários ou numéricos.
Executa a operação XOR (Exclusive-OR) em dois valores booleanos, binários ou numéri-
Xor
cos. Retorna True se os dois valores forem diferentes e False se forem iguais.
Executa a operação AND (E) em dois valores booleanos, binários ou numéricos, ignoran-
AndAlso
do a avaliação do segundo valor caso o primeiro seja False.
Executa a operação OR (OU) em dois valores booleanos, binários ou numéricos, igno-
OrElse
rando a avaliação do segundo valor caso o primeiro seja True.
capítulo 1 • 43
Com isso, foram apresentados de forma geral os operadores das linguagens
.NET, além de seus tipos de dados e como declarar variáveis. No próximo capí-
tulo, ao abordar a programação estruturada, veremos como aplicá-los em fun-
ções e sub-rotinas.
REFLEXÃO
A escolha de uma linguagem de programação para aprendizado depende de muitos fatores.
Se um profissional se insere em uma empresa que adota certo conjunto de ferramentas ou
frameworks, é imperativo que ele se adapte a esses elementos, os quais podem ter sido
escolhidos de forma estratégica. Por outro lado, se o aprendizado não está condicionado às
circunstâncias profissionais, ele se dará pelo interesse pessoal por certas características de
uma linguagem e suas ferramentas.
O Visual Basic .NET é uma linguagem muito interessante para o aprendizado, pois intro-
duz o estudante ao ecossistema da Microsoft ao mesmo tempo que o faz de forma mais di-
dática que o uso do C#, e esse é um dos interesses da empresa em continuar desenvolvendo
fortemente a linguagem. Se houver interesse, após se habituar ao VB.NET, a transição para
o C# se torna bem mais fácil.
ATIVIDADES
01. Descreva com suas palavras o que são os frameworks de software.
03. Explique o que são .NET Framework, Visual Studio e Visual Basic .NET, diferenciando-os
entre si.
04. Faça um pequeno programa para o console em Visual Basic, o qual converte 150 cen-
tímetros em polegadas e imprime o valor na tela. Uma informação importante é que um
centímetro equivale, aproximadamente, a 0,393700787 polegada. Para o fator de conversão,
você deve declarar uma constante.
44 • capítulo 1
LEITURA
Uma boa fonte de informações para as tecnologias da Microsoft é o seu site da MSDN, a
Microsoft Developer Network. Lá há muitos guias e especificações do .NET e de suas lin-
guagens. A maiorias das páginas possui tradução para o português, mesmo que tenham sido
feitas automaticamente. Dois guias interessantes são os seguintes:
REFERÊNCIAS BIBLIOGRÁFICAS
ABES - Associação Brasileira das Empresas de Software. Mercado Brasileiro de Software:
panorama e tendências, 2014. 1a. ed.. São Paulo: ABES, 2014
DEL SOLE, Alessandro. Visual Basic 2010 Unleashed. Sams Publishing: Indianapolis, 2010.
MSDN, Microsoft Developer Network. .NET Framework. Disponível em: <https://msdn.microsoft.com/
pt-br/vstudio/aa496123.aspx>. Acesso em: 10 fev. 2015.
______Tipos de valor e referência. Disponível em: <https://msdn.microsoft.com/pt-br/library/
t63sy5hs.aspx>. Acesso em: 15 fev. 2015.
capítulo 1 • 45
46 • capítulo 1
2
Programação
Modular e
Programação
Estruturada
Este capítulo continuará descrevendo os elementos básicos de programação
aplicados à linguagem Visual Basic .NET. Após conhecer como se inicia um
projeto, os tipos de dados e como declarar variáveis nessa linguagem, veremos
como estruturar programas. Primeiro, serão vistos como dividir o código em
módulos e métodos e como as variáveis e os métodos ficam sujeitos a uma de-
limitação de escopo. Em seguida, veremos como funcionam os controles de
fluxo de programação estruturada, os quais se dividem essencialmente em es-
truturas de decisão e estruturas de controle.
Aqui serão vistos, portanto, alguns dos principais meios de se arquitetar um
programa, ainda se restringindo ao paradigma de programação estruturada.
Por enquanto, ainda serão utilizados como exemplos apenas programas que
interagem com o usuário através de texto na tela do console.
OBJETIVOS
Após a leitura deste capítulos, você será capaz de:
48 • capítulo 2
2.1 Programação Modular
A Programação Modular é uma técnica de arquitetura de software que separa
o código e as funcionalidades dos programas em partes, de forma que cada
módulo contenha o que for necessário para desempenhar tais funcionalida-
des. Um módulo, suas propriedades e seus métodos podem ser acessados por
outros módulos. Seu conceito é próximo ao da Programação Estruturada e da
Programação Orientada a Objetos, já que esses paradigmas têm como base a
compartimentação do código, mas todos esses conceitos se diferenciam em al-
guma maneira. Os módulos são relacionados à compartimentação em um nível
mais elevado do código, já que ele pode conter classes e funções.
2.1.1 Módulos
Sub Main()
'Aqui entra o código a ser executado
EndSub
End Module
Código 2.1 – Exemplo de declaração de um módulo.
capítulo 2 • 49
Várias coisas importantes podem ser observadas nesse exemplo de estru-
tura de um módulo. Uma delas é que o módulo está dentro de um arquivo do
Visual Basic (arquivo.vb) e, dentro desse arquivo, há apenas esse módulo o qual
recebe um nome ModuloExemplo. Quando se cria um novo projeto no Visual
Studio, por padrão ele cria um arquivo chamado Module1.vb e um módulo cha-
mado Module1. Logicamente, esses nomes podem ser alterados, mas é neces-
sário resolver alertas de erros que o Visual Studio possa levantar caso isso seja
feito. Além disso, é uma boa prática denominar o Módulo com o mesmo nome
que o arquivo em que está contido. É possível colocar dois módulos dentro de
um arquivo só, mas o objetivo de se fazer a separação é que outros programado-
res possam entender facilmente como o código está organizado, então é impor-
tante levar isso em conta.
Se você está construindo um programa executável, isto é, que executa por
conta própria e geralmente é compilado em um arquivo com extensão .exe,
dentro de seu módulo deve haver pelo menos um método principal, o Sub
Main(). Tudo que estiver dentro desse módulo será executado automaticamen-
te quando o módulo for invocado (MSDN, 2015b). Como veremos adiante, um
módulo pode conter outros métodos além de Sub Main(). No entanto, se você
programando uma biblioteca auxiliar, que não executa por conta própria mas é
invocada por outros programas executáveis, não há necessidade de uma rotina
Sub Main().
Além de um programador poder criar seus módulos, o Visual Basic possui
um conjunto de módulos básicos auxiliares cujos métodos podem ser invoca-
dos a qualquer momento em um código fonte. Essas bibliotecas possuem não
só métodos, mas também atributos e constantes. Tais módulos são descritos
de forma resumida no quadro a seguir.
MÓDULO DESCRIÇÃO
Contém diversas constantes que são utilizadas para compatibilidade com código
Constants
Visual Basic antigo.
Contém métodos para converter números decimais em outras bases, dígitos de núme-
Conversion ros para sequências de caracteres, sequências de números e dados de um tipo para
outro.
50 • capítulo 2
MÓDULO DESCRIÇÃO
DateAnd- Contém membros que obtém a data ou hora atual, realizam cálculos de data, retornam
Time uma data ou hora, configuram uma data ou hora e medem a duração de um processo.
FileSystem Contém métodos que executam operações de arquivo, diretório ou pasta do sistema.
Contém os membros que retornam, testam ou verificam informações como, por exem-
Information
plo, o tamanho de uma matriz, os nomes de tipos de dados e assim por diante.
Tabela 2.1 – Módulos básicos oferecidos pelo .NET Framework. Fonte: Adaptado de
MSDN (2015b).
CONEXÃO
Para saber mais sobre os módulos do .NET, consulte sua página de documentação:
<https://msdn.microsoft.com/pt-br/library/y76404kz.aspx>
capítulo 2 • 51
datahora.vb
Module Module1
Sub Main()
Dim data_hora AsString
data_hora = Now
Console.WriteLine(data_hora)
Console.ReadKey()
EndSub
End Module
Código 2.2 – Exemplo de uso do módulo DateAndTime do .NET Framework
Nesse exemplo, seu valor foi passado para uma variável do tipo String, para
depois ser impresso na tela do console. Em vez disso, o valor poderia ser passa-
do para uma variável do tipo Date para ser manipulado, por exemplo, calculan-
do a diferença de dias entre duas datas.
CONSOLE
20/02/2015 18:21:43
2.1.2 Métodos
52 • capítulo 2
Como exemplo, consideremos o caso de um programador que está desen-
volvendo um sistema complexo de mapas e previsão do tempo. Como é um sis-
tema internacional, ele terá que, em diversas de suas interações com os usu-
ários, converter a temperatura entre graus Celsius e graus Fahrenheit (que é
utilizado nos EUA e Inglaterra). Se a fórmula de conversão terá que ser utilizada
com frequência, o ideal é que ela seja programada de tal maneira que possa
sempre ser facilmente acessada, sem ser programada repetidamente. Veja o
exemplo de código a seguir.
exemplo.vb
1 Module Temperatura
2
3 Function CParaF(ByVal temp_celsius As Decimal)
4 Dim temp_fahrenheit As Decimal
5 temp_fahrenheit = temp_celsius * 1.8 + 32
6 Return temp_fahrenheit
7 EndFunction
8
9 Function FParaC(ByRef temp_fahrenheit AsDecimal)
10 Dim temp_celsius AsDecimal
11 temp_celsius = (temp_fahrenheit - 32) / 1.8
12 Return temp_celsius
13 End Function
14
15 End Module
16
17 Module Module1
18 Sub Main()
19 Dim temp, temp_convertida As Decimal
20 Console.WriteLine("Digite uma temperatura em graus Celsius:")
21 temp = Console.ReadLine()
22 temp = Convert.ToDecimal(temp)
23 temp_convertida = CParaF(temp)
24 Console.WriteLine("A temperatura digitada equivale a {0} Fahrenheit.",
temp_convertida)
25 Console.ReadKey()
26 End Sub
27 End Module
Código 2.3 – Exemplo de uso de métodos para acesso em outro módulo.
capítulo 2 • 53
O módulo Temperatura não possui uma sub-rotina Sub Main(), mas pos-
sui duas funções: CParaF(), que converte uma temperatura de Celsius para
Fahrenheit, e FParaC(), que faz a conversão contrária. O Module1, por sua vez,
possui a sub-rotina principal Sub Main(), isto é, esse é um programa executável
que pede um valor de temperatura em Celsius do usuário e, na linha 23, faz uma
chamada do método CParaF() do módulo Temperatura para converter esse va-
lor em Fahrenheit e imprimi-lo na tela.
É importante salientar que normalmente o módulo Temperatura estaria
em outro arquivo, e seus métodos poderiam ser invocados durante a programa-
ção de qualquer outro módulo, mas o programa de qualquer maneira funciona
com os dois módulos juntos. Assim, esses métodos funcionariam como aque-
les dos módulos padrões do Visual Basic que foram apresentados no tópico an-
terior, como os de manipulação de data e hora ou os de operações financeiras.
Nesse exemplo, ainda podem ser observadas quatro chamadas de métodos de
módulos padrões do Visual Basic: Console.WriteLine(), Console.ReadLine(),
Console.ReadKey() e Convert.ToDecimal(). Esse último método converte o va-
lor recebido do usuário como String em um tipo Decimal.
O uso da programação modular e a compartimentação de métodos pode
trazer várias vantagens no desenvolvimento de software, principalmente quan-
do se trata de um com código fonte extenso e complexo:
• Eliminação de redundância de códigos que precisam ser executados vá-
rias vezes em um programa, já que eles podem ser definidos em métodos e ser
chamados quando necessários;
• Reaproveitamento dos métodos em outros aplicativos. Para que isso pos-
sa ocorrer, é importante que os métodos sejam coesos e básicos, executando
apenas uma tarefa simples que possa ser aproveitada de muitas maneiras;
• A modularização dos módulos de um software permite que ele seja mais
organizado e legível, de mais fácil correção;
• Com a modularização, é possível que cada programador trabalhe em par-
tes específicas do código, desde que fique especificado como cada método deve
ser acessado, seguindo uma forma consistente.
54 • capítulo 2
2.1.3 Sub-rotinas e Funções
capítulo 2 • 55
Esse código resultará na seguinte impressão na tela do Console.
CONSOLE
Mensagem da Sub procedure
10
56 • capítulo 2
funções são usadas para tarefas mais complexas de cálculos, transformações
de textos, meta-programação (código que modifica código) etc. Por exemplo, as
funções WriteLine() e ReadLine() fazem parte da classe Console que pertence
ao Framework .NET, e WriteLine() pode lidar com qualquer tipo de dado que se
peça para imprimir na tela do console, o que requer variações nesse tratamento
de dados.
Para explicar mais algumas características das funções, vamos utilizar outro
exemplo a seguir.
Module1.vb
1 Module Module1
2
3 Sub Main()
4 Console.WriteLine(somador())
5 Console.WriteLine(somador(5))
6 Console.WriteLine(somador(5, 7))
7 Console.ReadLine()
8 End Sub
9
10 Function somador() As String
11 Return"A soma 0 + 0 é igual a 0"
12 End Function
13
14 Function somador(ByVal val1 AsInteger) As String
15 Dim soma As Integer = val1 + val1
16 Return String.Format("A soma {0} + {1} é igual a {2}", val1, val1, soma)
17 End Function
18
19 Function somador(ByVal val1 As Integer, ByVal val2 As Integer) As String
20 Dim soma As Integer = val1 + val2
21 Return String.Format("A soma {0} + {1} é igual a {2}", val1, val2, soma)
22 End Function
23
24 End Module
Código 2.5 – Exemplo de sobrecarga de função.
capítulo 2 • 57
O resultado impresso na tela do Console é o seguinte:
CONSOLE
A soma 0 + 0 é igual a 0
A soma 5 + 5 é igual a 10
A soma 5 + 7 é igual a 12
A parte fora dos parênteses está declarando o tipo de valor a ser retornado
pela função com o comando Return. No exemplo acima, uma frase é retornada,
ou seja, um tipo String. Por outro lado, o que está dentro dos parênteses declara o
tipo da variável "val1", que é um número inteiro, mas que na execução da função
é convertido em uma String e inserido na frase retornada pela função somador().
4. Na declaração do argumento (ByVal val1 As Integer) o modificador
ByVal faz com que a variável val1 não possa ser modificada dentro do escopo
58 • capítulo 2
da função. Isso significa que, dentro da função, por exemplo, não se pode fazer
uma atribuição como val1 = 10, garantindo que será utilizado apenas o valor
passado como argumento na chama da função em Main().
5. O método String.Format() é uma forma de converter variáveis e
inseri-las em uma String formatada. Veja o seguinte trecho do código:
Return String.Format("A soma {0} + {1} é igual a {2}", val1, val2, soma)
Return String.Format("A soma {1} + {2} é igual a {0}", soma, val1, val2)
2.1.4 Escopo
Escopo de Variáveis
No exemplo a seguir, Numero é uma variável definida para todo o módulo,
a qual pode ser acessada pelas sub-rotinas Duplicar() e Triplicar(). Perceba que
são sub-rotinas, e não funções, portanto não retornam valores. O que elas fa-
zem é simplesmente alterar o valor da variável Numero.
Module1.vb
1 Module Module1
2 Private Numero As Double
3
4 Sub Duplicar()
5 'Acessa número declarado foram da sub-rotina e o duplica
6 Numero = Numero * 2
7 End Sub
8
9 Sub Triplicar()
10 'Acessa número declarado foram da sub-rotina e o triplica
11 Numero = Numero * 3
12 End Sub
13
60 • capítulo 2
14 Sub Main()
15 Numero = 1
16 Duplicar()
17 Triplicar()
18 Console.WriteLine(Numero)
19 Console.ReadKey()
20 End Sub
21
22 End Module
Código 2.7 – Exemplo de alteração de variável de escopo no módulo.
A variável Numero é declarada como Private, o que significa que ela pode
ser acessada apenas pelos métodos internos a esse Module1. No caso desse
exemplo, declarar a variável Numero com as palavras-chave Dim ou Private tem
o mesmo efeito, permitindo o acesso por todos os métodos no escopo do módu-
lo, mas impedindo o acesso dessa variável por outro módulos que o aplicativo
possa conter. Uma variável com escopo restrito a seu módulo ou classe é cha-
mada Variável Membro.
Para permitir esse acesso externo, é necessário declarar com a palavra-cha-
ve Public, tornando-a o que se chama de variável Global, que pode ser acessada
por todo o aplicativo, fora de seu módulo:
capítulo 2 • 61
Escopo de Métodos
62 • capítulo 2
Nesse exemplo, temos dois módulos no mesmo arquivo. A chamada ao mé-
todo CParaF() na linha 23 só é possível porque a função é declarada como sendo
Public. Se fosse declarada Private, o Visual Studio avisaria da impossibilidade
de fazer a chamada de método da linha 23.
Outra mudança feita nesse código foi o uso de espaço de nome na chama-
da do método da linha 23, sendo que agora foi utilizada a forma Temperatura.
CParaF(temp), onde Temperatura é o espaço de nome, termo mais amplamen-
te utilizado em inglês: namespace. Esse namespace indica que a função utili-
zada é interna ao módulo Temperatura. Como os dois módulos desse exemplo
estão no mesmo projeto, isso não seria necessário, mas o uso do namespace é
interessante para evitar conflito de métodos e variáveis globais que tenham o
mesmo nome.
Muito ainda poderia ser visto a respeito de Sub-rotinas e Funções, mas o
interesse aqui é o conhecimento básico de sua operação e a filosofia por trás de
sua programação. A partir daqui, nosso interesse é compreendê-las no contexto
de classes e objetos, onde são utilizadas como Métodos de manipulação desses
elementos, o que será visto no próximo capítulo.
capítulo 2 • 63
A programação estruturada se baseia, principalmente, em três estruturas
de controle:
• Sequência: as instruções são executadas uma após a outra,
sequencialmente;
• Decisão ou Seleção: as instruções de decisão levam a execução de um ca-
minho ou outro do algoritmo, com base em um teste lógico e oferencendo uma
sequência diferente a ser seguida;
• Repetição ou Iteração: essas intruções criam uma repetição de uma sequ-
ência, até que certa consição ocorra ou deixe de ocorrer.
If (condição) Then
Bloco de Código
End If
64 • capítulo 2
exemplo.vb
1 Module Module1
2 Sub Main()
3 Dim valor1, valor2 As Integer
4 valor1 = 10
5 valor2 = 5
6
7 If (valor1 > valor2) Then
8 valor2 = valor2 + 10
9 Console.WriteLine("Novo valor2 = {0}", valor2)
10 End If
11
12 Console.ReadKey()
13 End Sub
14 End Module
Código 2.9 – Exemplo de estrutura de decisão simples.
If (condição) Then
Bloco de Código 1
Else
Bloco de Código 2
End If
capítulo 2 • 65
exemplo.vb
1 Module Module1
2 Sub Main()
3 Dim valor1, valor2 As Integer
4 valor1 = 10
5 valor2 = 5
6
7 If (valor1 < valor2) Then
8 valor2 = valor2 + 10
9 Console.WriteLine("Novo valor2 = {0}", valor2)
10 Else
11 Console.WriteLine("O valor1 é maior.")
12 EndIf
13
14 Console.ReadKey()
15 End Sub
16 End Module
Código 2.10 – Exemplo de estrutura de controle de decisão estendida.
If (condição) Then
Bloco de Código 1
Else
If (condição 2) Then
Bloco de Código 2
End If
End If
66 • capítulo 2
No entanto, essa forma de aninhamento pode parecer confusa e dificultar a
leitura e compreensão do código, caso haja muitos níveis de aninhamento com
blocos complexos. Como a necessidade dessa estrutura é comum, nas lingua-
gens de programação costumam existir instruções do tipo Senão Se (ElseIf), que
permitem o estabelecimento de várias condições de testes de uma forma mais
clara, mas que tem efeito semelhante à estrutura anteriormente apresentada.
If (condição 1) Then
Bloco de Código 1
ElseIf (condicão 2) Then
Bloco de Código 2
ElseIf (condicão 3) Then
Bloco de Código 3
...
End If
O exemplo a seguir, que mostra o uso dessa estrutura no Visual Basic, exibe
uma forma básica de colocar três valores inteiros em ordem crescente. Essa não
é a forma mais eficiente de se ordenar valores, mas apenas serve para mostrar a
sintaxe das instruções de decisão ElseIf.
exemplo.vb
1 Module Module1
2 Sub Main()
3 Dim valor1, valor2, valor3 As Integer
4 valor1 = 5
5 valor2 = 10
6 valor3 = 20
7
8 If (valor1 < valor2 And valor2 < valor3) Then
9 Console.WriteLine("Ordem crescente: {0} {1} {2}", valor1, valor2,
valor3)
10 ElseIf (valor1 < valor3 And valor3 < valor2) Then
11 Console.WriteLine("Ordem crescente: {0} {1} {2}", valor1, valor3,
valor2)
12 ElseIf (valor2 < valor1 And valor1 < valor3) Then
13 Console.WriteLine("Ordem crescente: {0} {1} {2}", valor2, valor1,
valor3)
14 ElseIf (valor2 < valor3 And valor3 < valor1) Then
15 Console.WriteLine("Ordem crescente: {0} {1} {2}", valor2, valor3,
valor1)
capítulo 2 • 67
16 ElseIf (valor3 < valor1 And valor1 < valor2) Then
17 Console.WriteLine("Ordem crescente: {0} {1} {2}", valor3, valor1,
valor2)
18 ElseIf (valor3 < valor2 And valor2 < valor1) Then
19 Console.WriteLine("Ordem crescente: {0} {1} {2}", valor3, valor2,
valor1)
20 End If
21
22 Console.ReadKey()
23 End Sub
24 End Module
Código 2.11 – Exemplo de estrutura de controle de decisão aninhada.
Com essa forma também é possível expressar mais de uma instrução para
cada caminho do bloco de decisão, separando cada instrução com dois pontos:
68 • capítulo 2
5 valor2 = 5
6
7 If (valor1 < valor2) Then valor2 = 15 : valor1 = 0 ElseConsole.WriteLine("O
valor1 é maior.")
8
9 Console.ReadKey()
10 End Sub
11 End Module
Código 2.12 – Exemplo de estrutura de controle de decisão em sequência na mesma linha.
É evidente que essa forma é bem menos legível e deve ser usada apenas
em casos específicos. A quebra de linhas e a indentação (afastamento das li-
nhas) são recursos que facilitam a leitura do código fonte e são boas práticas de
programação.
capítulo 2 • 69
exemplo.vb
1 Module Module1
2 Sub Main()
3 Dim dia As Integer
4 Console.WriteLine("Escolha um mês do ano (1 a 12):")
5 dia = Console.ReadLine()
6
7 SelectCase (dia)
8 Case 1
9 Console.WriteLine("Você escolheu janeiro.")
10 Case 2
11 Console.WriteLine("Você escolheu fevereiro.")
12 Case 3
13 Console.WriteLine("Você escolheu março.")
14 Case 4
15 Console.WriteLine("Você escolheu abril.")
16 Case 5
17 Console.WriteLine("Você escolheu maio.")
18 Case 6
19 Console.WriteLine("Você escolheu junho.")
20 Case 7
21 Console.WriteLine("Você escolheu julho.")
22 Case 8
23 Console.WriteLine("Você escolheu agosto.")
24 Case 9
25 Console.WriteLine("Você escolheu setembro.")
26 Case 10
27 Console.WriteLine("Você escolheu outubro.")
28 Case 11
29 Console.WriteLine("Você escolheu novembro.")
30 Case 12
31 Console.WriteLine("Você escolheu dezembro.")
32 Case Else
33 Console.WriteLine("Esse não é um número válido!")
34 End Select
35
36 Console.ReadKey()
37 End Sub
38 End Module
Código 2.13 – Exemplo de estrutura de controle de múltiplas decisões.
70 • capítulo 2
A instrução Case é seguida do valor que se quer comparar com a variável.
Esse valor poderia não ser um número, mas uma String. Além disso, em vez de
apenas comparar um valor, o Visual Basic permite que se compare um intervalo
de valores, sendo que nesse caso o valor é dado como em Case 1 To 6, para indi-
car que ele pode estar no intervalo entre esses dois número. Veja um exemplo
desse uso no próximo código.
exemplo.vb
1 Module Module1
2 Sub Main()
3 Dim dia As Integer
4 Console.WriteLine("Escolha um mês do ano (1 a 12):")
5 dia = Console.ReadLine()
6
7 SelectCase (dia)
8 Case 1 To 6
9 Console.WriteLine("Mês do primeiro semestre.")
10 Case 7 To 12
11 Console.WriteLine("Mês do segundo semestre.")
12 Case Else
13 Console.WriteLine("Esse não é um número válido!")
14 End Select
15
16 Console.ReadKey()
17 End Sub
18 End Module
Código 2.14 – Exemplo de estrutura de controle de múltiplas decisões com intervalos de
valores.
capítulo 2 • 71
2.2.2.1 Estrutura de controle de repetição controlada por contador (para)
72 • capítulo 2
Com esse código, o console imprimirá os valores de 1 a 5, um por linha. Uma
outra forma de escrever o código anterior é declarando a variável contadora no
próprio início da estrutura de repetição, como no trecho a seguir.
exemplo.vb
1 Module Module1
2 Sub Main()
3
4 For contador As Integer = 1 To 5
5 Console.WriteLine(contador)
6 Next
7
8 Console.ReadKey()
9 End Sub
10 End Module
Código 2.16 – Exemplo de estrutura de controle de repetição Para, com inicialização de
variável.
capítulo 2 • 73
Como a estrutura While necessita testar uma condição, a variável que é tes-
tada deve ser inicializada antes. Além disso, o teste da condição é feito no início
do laço, fazendo com que ele nunca seja executado se a condição resultar em
Falso na primeira tentativa. O código a seguir usa a estrutura While para calcu-
lar o fatorial de cinco, que é 5! = 5 × 4 × 3 × 2 × 1 = 120.
exemplo.vb
1 Module Module1
2 Sub Main()
3 Dim contador As Integer = 5
4 Dim fatorial As Integer = 1
5
6 While (contador > 0)
7 fatorial *= contador
8 contador = contador - 1
9 End While
10
11 Console.WriteLine("Fatorial de 5 é {0}", fatorial)
12 Console.ReadKey()
13 End Sub
14 End Module
Código 2.17 – Estrutura de controle de repetição Enquanto.
contador -= 1
74 • capítulo 2
Do
Bloco de código
Alteração da variável de condição
Loop Until (condição)
A instrução Do pode ser utilizado da mesma forma que While como exem-
plo a seguir. Nesse caso, eles se tornam redundante e não há diferença entre
usar uma instrução ou outra. Literalmente, Do While significa "faça enquanto".
exemplo.vb
1 Module Module1
2 Sub Main()
3 Dim Contador As Integer = 1
4
5 DoWhile (Contador <= 10)
6 Console.WriteLine(Contador)
7 Contador = Contador + 1
capítulo 2 • 75
8 Loop
9
10 Console.ReadKey()
11 End Sub
12 End Module
Código 2.19 – Exemplo de estrutura de controle de repetição Faça com teste no início.
Há ainda outra forma de se utilizar a instrução Do: nesse caso, o laço será
feito até o momento em que uma condição for atendida. Portanto, a forma de
controle é um pouco diferente das anteriores. Em vez de se executar o bloco en-
quanto uma condição é satisfeita, é estabelecida a condição em que o laço deve
parar. Isso é feito através do Do Until, que significa "faça até", cujo exemplo
pode ser visto no código a seguir.
exemplo.vb
1 Module Module1
2 Sub Main()
3 Dim Contador As Integer = 1
4
5 DoUntil (Contador = 10)
6 Console.WriteLine(Contador)
7 Contador = Contador + 1
8 Loop
9
10 Console.ReadKey()
11 End Sub
12 End Module
Código 2.20 – Exemplo de estrutura de controle de repetição Faça com condição de finali-
zação.
REFLEXÃO
A modularização do código fonte de programas é uma excelente prática de
programação, pois através dela é possível reparti-los em pedaços especializa-
dos. Quando bem realizada, fica muito mais fácil gerenciar o desenvolvimento
do código, principalmente em equipe. Através do uso de métodos, os módulos
76 • capítulo 2
apresentam um padrão de comunicação com o resto programa, e isso permite
que o código pertencente a um módulo seja modificado sem alterar o resto do
programa, desde que o método de comunicação com nomes de métodos e seus
argumentos sejam mantidos.
ATIVIDADES
01. No Visual Basic, o que é um módulo? Também explique o que é um método e qual a
diferença entre uma função e uma sub-rotina.
02. Faça um pequeno programa que continuamente peça um número inteiro para o usuário
até que ele digite o número zero, com o qual ele deve encerrar. A cada vez que pedir um
número, ele deve somar ao saldo anterior e exibir o resultado na tela. Use uma sub-rotina
"soma" e uma variável declarada no escopo do módulo para acumular o valor em seu pro-
grama.
03. Explique o que é uma estrutura de decisão e faça um pequeno código exemplificando,
o qual deve solicitar um número inteiro para o usuário e responder dizendo se esse número
é par ou impar.
04. Explique o que é uma estrutura de repetição, diferenciando uma que é baseada em
contador de outra que é baseada em condição.
LEITURA
O portal Microsoft Developer Network (MSDN) apresenta artigos e links explicando melhor a
estrutura de um programa no Visual Basic e aspectos técnicos de um módulo:
Instrução Module
<https://msdn.microsoft.com/pt-br/library/aaxss7da.aspx>
capítulo 2 • 77
O mesmo site também apresenta uma visão sobre a programação estruturada na lin-
guagem:
REFERÊNCIAS BIBLIOGRÁFICAS
MSDN, Microsoft Developer Network. Estrutura de um programa Visual Basic. Disponível em: <https://
msdn.microsoft.com/pt-br/library/022td33t.aspx>. Acesso em: 28 jan. 2015.
______. Módulos (Visual Basic). Disponível em: <https://msdn.microsoft.com/pt-br/library/y76404kz.
aspx>. Acesso em: 28 jan. 2015.
______.Fluxo de controle no Visual Basic. Disponível em: < https://msdn.microsoft.com/pt-br/library/
ca8tdhcs.aspx>. Acesso em: 10 fev. 2015.
78 • capítulo 2
3
Tratamento
de Exceções e
Programação
Orientada a Objetos
Neste capítulo veremos dois assuntos distintos, mas que complementam o
conjunto de recursos essenciais da linguagem Visual Basic .NET. Primeiro, será
abordado o Tratamento de Exceções, que é a forma de uma linguagem de pro-
gramação em lidar com comportamentos indesejados ou inesperados em um
programa. Em muitas situações, o programador apenas considera que o pro-
grama terá sucesso em executar uma ação que depende do usuário ou de outras
partes do programa. Mas e se essa operação não obtiver sucesso? O risco é que
o programa gere uma mensagem de erro incompreensível, trave ou feche ines-
peradamente. Para isso serve o tratamento de exceções.
Na segunda parte do capítulo, veremos conceitos e exemplos da Programação
Orientada a Objetos, paradigma que pode ser plenamente utilizado no Visual
Basic .NET. O objetivo dessa parte do capítulo será o reforço do conceito de ob-
jetos e a demonstração da sintaxe do VB.NET para utilização desse recurso.
OBJETIVOS
Com a leitura desse capítulo, você terá aprendido:
• O que é Tratamento de Exceções
• Quais os tipos e como utilizar o tratamento de erros no Visual Basic .NET
• O que é Programação Orientada a Objetos (POO)
• Como utilizar a Programação Orientada a Objetos no VB.NET
80 • capítulo 3
3.1 Tratamento de Exceções
O tratamento de exceções é uma forma de o programador garantir que erros
ou comportamentos indesejados de seu programa não causem problemas para
o usuário, além de ser uma forma de emitir uma mensagem útil que explique
para o usuário o que deu errado. Alguma vez, usando algum software, já se de-
parou com uma mensagem do tipo "Erro cod. 472648"? Isso não explica muita
coisa se você não tiver um catálogo de erros desse software em mãos, não acha?
O tratamento de erros procura lidar com essas situações.
3.1.1 Exceções
capítulo 3 • 81
isso, sempre há essa opção, que na verdade é uma boa prática de programação.
O tratamento estruturado de exceções (Structured Exception Handling - SEH)
se baseia nessa unificação de vários tipos de exceções, tanto de hardware como
de software, através da biblioteca padrão de uma linguagem de programação.
CLASSE DESCRIÇÃO
A exceção que é acionada quando um dos argumentos fornecidos
ArgumentException
para um método não é válido.
A exceção que é lançada quando uma referência nula (Nothing
ArgumentNullException no Visual Basic) é passada para um método que não aceita nulo
como um argumento válido.
A exceção é lançada quando o valor de um argumento estiver fora
ArgumentOutOfRangeException do intervalo de valores permitido conforme definido pelo método
chamado.
A exceção que é lançada quando é feita uma tentativa de acessar
IndexOutOfRangeException um elemento da matriz com um índice está fora dos limites da
matriz.
A exceção que é jogada quando um método ou operação solicita-
NotImplementedException
da não é implementada.
A exceção que é lançada quando não há memória suficiente para
OutOfMemoryException
continuar a execução de um programa.
A exceção é lançada quando uma operação aritmética, transmis-
OverflowException são ou conversão em um contexto marcada resultados em um
estouro.
A exceção que é lançada quando uma tentativa de acessar um ar-
FileNotFoundException quivo que não existe no disco falha. Faz parte do escopo System.
IO.
82 • capítulo 3
3.1.3 Estrutura de um Bloco de Tratamento de Exceções
O comando Try delimita o início do bloco de código, o qual é finalizado por End
Try. Dentro desse bloco, procura-se capturar os erros de execução e manipulá
-los, salvando-os em variáveis e exibindo uma mensagem de exceção. Um bloco
completo de tratamento de exceção tem a seguinte estrutura:
Try
'tenta executar um ou mais comandos
Catch variavel As Exception
'captura uma possível exceção originado da
'tentativa de execução do comando anterior
Finally
'executa um ou mais comandos independente de
'uma exceção ocorrer ou não
End Try
O elemento Catch pode ocorrer mais de uma vez, enquanto o uso de um
bloco Finally não é obrigatório.
A palavra "Try" significa "tentar" ou "tente". Se ela não for utilizada, isto é,
se não se utiliza um bloco de tratamento de erro, um comando que falha ao ser
executado irá causar um erro de execução da mesma maneira, mas ele não será
capturado pelo programa.
É interessante utilizar a estrutura Try… End Try sempre que se esteja lidan-
do com situações em que se pode prever uma exceção, como na abertura de
arquivos que podem não existir, ou quando forem feitas operações aritméticas
em que os possíveis operadores podem incorrer em erros. O exemplo de código
a seguir leva a um erro de divisão por zero.
capítulo 3 • 83
excecao1.vb
1 Module Module1
2
3 Sub Main()
4 Dim i As Decimal = 10
5 Dim j As Decimal = 0
6 Dim Resultado As Decimal
7
8 Resultado = i / j
9 Console.ReadKey()
10 End Sub
11
12 End Module
Código 3.1 – Código que causa erro de divisão por zero.
Figura 3.1 – Alerta do Visual Studio para erro de divisão por zero.
84 • capítulo 3
propensos a esse tipo de erro de divisão por zero, ou então equações que rece-
bem valores finais de outras equações.
Assim, se usa Try… End Try quando se deseja que o programa tente uma
operaçao e, caso não consiga, faça alguma coisa. Para utilizar essa estrutura, é
necessário compreender também a palavra-chave Catch.
Catch
capítulo 3 • 85
Com o uso da estrutura de exceção, o programa não termina com um erro
que termina seu funcionamento abruptamente. Ele emite uma mensagem de
erro que pode ser amigável ao usuário e continuará funcionando, caso seja pos-
sível. No exemplo anterior, o programa termina porque não há nada mais a fa-
zer, executando o comando que espera o pressionamento de tecla do usuário
para então fechar.
No exemplo anterior, há um tratamento genérico para qualquer exceção,
mas é possível utilizar cláusulas Catch para diversos erros específicos. Na ope-
ração de divisão realizada, é pouco provável que ocorra algum outro tipo de erro
que não seja a divisão por zero, mas há diversas situações em que mais proble-
mas podem ocorrer. O exemplo a seguir mostra um tratamento de erro específi-
co para divisão por zero, seguido de um tratamento de exceção genérico.
excecao3.vb
1 ModuleModule1
2
3 Sub Main()
4 Dim i As Decimal = 10
5 Dim j As Decimal = 0
6 Dim Resultado As Decimal
7
8 Try
9 Resultado = i / j
10 Catch exDivideByZero As DivideByZeroException
11 'Captura uma exceção específica de divisão por zero
12 Console.WriteLine("Houve um erro devido a uma divisão por zero!")
13 Catch ex As Exception
14 'Captura genérica, não específica
15 Console.WriteLine("Houve um erro qualquer!")
16 End Try
17 Console.ReadKey()
18
19 End Sub
20
21 End Module
Código 3.3 – Erro da instrução Catch para capturar erro específico de divisão por zero.
É importante notar que o tratamento genérico não pode vir antes, pois a
divisão por zero encontraria primeiro o Catch genérico e seria tratado sem es-
pecificidade. Na forma do código do exemplo, caso haja uma exceção, primeiro
86 • capítulo 3
é checado se é uma divisão por zero e, caso não haja esse problema, será tratado
de forma genérica.
Além de ser possível utilizar o Catch diversas vezes, também há possibilida-
de de aninhamento do bloco Try… End Try, da mesma forma que se faz com es-
truturas de decisão e de repetição. Com o aninhamento, pode-se capturar a ex-
ceção em caso de fracasso da primeira ação e, caso haja sucesso, tentar executar
outra ação que pode ter suas respectivas exceções, como no exemplo a seguir.
excecao4.vb
1 Imports System.IO
2
3 ModuleModule1
4
5 Sub Main()
6 DimFileNameAsString = "TestFile.data"
7
8 'Blocoexterno
9 Try
10 Dim fs As NewFileStream(FileName, FileMode.Open, FileAccess.Read)
11 'Blocointerno
12 Try
13 Dim reader As New BinaryReader(fs)
14 reader.ReadInt32()
15 Catch ex As Exception
16 Console.WriteLine("Erro na leitura do arquivo.")
17 End Try
18 Catch ex As Exception
19 Console.WriteLine("Erro na abertura de arquivo.")
20 End Try
21 Console.ReadKey()
22 End Sub
23 End Module
Código 3.4 – Uso de tratamento de exceção para capturar erro de abertura e leitura de arquivo.
capítulo 3 • 87
O caso desse exemplo pode ser construído sem aninhamento, com o uso
de exceções mais específicas. Uma forma de fazê-lo seria substituindo o bloco
pelo seguinte:
Try
Dim fs As New FileStream(FileName, FileMode.Open, FileAccess.Read)
Dim reader As New BinaryReader(fs)
reader.ReadInt32()
Catch ex As FileLoadException
Console.WriteLine("Erro na leitura do arquivo.")
Catch ex As FileNotFoundException
Console.WriteLine("Erro na abertura de arquivo.")
Finally
88 • capítulo 3
11 'Captura uma exceção específica de divisão por zero
12 Console.WriteLine("Houve um erro devido a uma divisão por zero!")
13 Catch ex As Exception
14 'Captura genérica, não específica
15 Console.WriteLine("Houve um erro qualquer!")
16 Finally
17 Beep()
18 Console.WriteLine("O programa finalizou.")
19 End Try
20 Console.ReadKey()
21
22 End Sub
23
24 End Module
Código 3.5 – Exemplo de uso da instrução Finally.
capítulo 3 • 89
10 Throw New System.Exception("Divisor j igual a zero.")
11 End If
12 Resultado = i / j
13 Catch ex As Exception
14 'Captura genérica, não específica
15 Console.WriteLine("Ocorreu uma exceção: {0}", ex.Message)
16 Finally
17 Beep()
18 Console.WriteLine("O programa finalizou.")
19 End Try
20 Console.ReadKey()
21 End Sub
22 End Module
Código 3.6 – Exemplo de uso da instrução Throw, para lançamento de erros.
Antes que uma exceção padrão de divisão por zero ocorresse, o algoritmo
verifica se o divisor da operação, a variável j, tem valor zero. Se tiver, utiliza uma
exceção personalizada que é capturada pelo tratamento genérico a seguir. No
caso desse exemplo, a exceção de divisão por zero podia ser usada sem proble-
mas, mas em outros casos o programador pode ter interesse em utilizar outros
tipos, como um aplicativo que não consegue se conectar ao seu servidor de
dados.
90 • capítulo 3
• Reuso do código;
• Redução de código;
• Separação software em componentes;
• Acesso a biblioteca de classes produzidas independentemente;
• Facilidade de manutenção e atualização.
capítulo 3 • 91
especiais para seu software. Podemos colocar a descrição da classe em um pe-
queno quadro que é semelhante ao utilizado em notações de desenho de siste-
ma, como o UML (Unified Modeling Language), mas aqui não será usado seu
rigor técnico por finalidade didática:
CLASSE COORDENADA
Atributos:
- Latitude
- Longitude
- Altitude
Método:
- Horário
CLASSE IMÓVEL
Atributos:
- Endereço
- Metros quadrados
- Número de quartos
- Tipo de imóvel
- Valor de oferta
Método:
- Preço do Metro Quadrado
92 • capítulo 3
Os atributos são variáveis internas à classe, representando características
dela. Quando se cria uma instância da classe, isso é, um objeto Imóvel, pode-
mos "preencher" essas características, ou melhor, atribuir valores à variáveis
no escopo da classe. Os métodos podem modificar os atributos ou obter valo-
res deles. Nessa representação que adotamos até agora em nosso exemplo, os
nomes de classe, atributos e método estão escritos em linguagem de comuni-
cação humana, mas, mais adiante daremos nomes legais de linguagem de pro-
gramação a todos os elementos.
Perceba que atributos são como variáveis (dados) na programação estrutu-
rada, e métodos são funções e sub-rotinas. Em várias linguagens de programa-
ção, seus usos são iguais. Algumas outras exigem formas de controle de acesso
diferentes, tornando-as de acesso aberto ou não. Tanto atributos quanto méto-
dos de uma classe são denominados seus Membros.
capítulo 3 • 93
Figura 3.2 – Menu de acesso ao assistente de criação de itens ao projeto do Visual Studio.
Após clicar nessa opção "Classe", uma janela de auxílio aparecerá com di-
versas opções, mas "Classe" estará pré-selecionada. Dê um nome para essa clas-
se, como "Imovel" (sem acento), e clique no botão "Adicionar". A próxima figura
ilustra essa janela de criação:
Figura 3.3 – Janela com a opção para a criação de uma nova Classe.
94 • capítulo 3
A adição da classe "Imovel" criará o arquivo Imovel.vb e, dentro dele, a clas-
se Imovel. Acentos ou caracteres especiais não podem ser usados para nomear
variáveis, funções ou classes em nenhuma linguagem de programação, por isso
a restrição aqui também. Após a criação da classe Imovel, teremos dois arqui-
vos abertos: Imovel.vb e Module1.vb, como na figura seguinte.
capítulo 3 • 95
10 Dim Valor As Decimal
11 Valor = Me.ValorOferta / Me.MetrosQuadrados
12 Return Valor
13 End Function
14
15 End Class
Código 3.7 – Código de atributos e método da classe Imovel.
Module1.vb
1 ModuleModule1
2
3 Sub Main()
4
5 Dim novoImovel As New Imovel()
6
7 novoImovel.Endereco = "Rua do Sabão, 10"
8 novoImovel.MetrosQuadrados = 100
9 novoImovel.NumeroQuartos = 2
10 novoImovel.TipoImovel = "Apartamento"
11 novoImovel.ValorOferta = 250000
12
13 Console.WriteLine("{0} localizado em {1}",
14 novoImovel.TipoImovel,
15 novoImovel.Endereco)
16
17 Console.WriteLine("{0} quartos, {1} metros quadrados",
18 novoImovel.NumeroQuartos,
19 novoImovel.MetrosQuadrados)
20
21 Console.WriteLine("Preço: {0:C}", novoImovel.ValorOferta)
22
23 Console.WriteLine("Preço do Metro Quadrado: {0:C}",
24 novoImovel.PrecoMetroQuadrado())
25
26 Console.Readline()
27
28 End Sub
29
30 End Module
Código 3.8 – Código do Module1, que cria uma instância da classe, um objeto, e o manipula.
96 • capítulo 3
Após a digitação desse código, salvamento do projeto e compilação/execu-
ção, o resultado na tela do Console será:
CONSOLE
Apartamento localizado em Rua do Sabão, 10
2 quartos, 100 metros quadrados
Preço: R$ 250.000,00
Preço do Metro Quadrado: R$ 2.500,00
Temos aqui um pequeno programa que nos permitirá analisar muitos aspec-
tos da programação orientada a objetos. Nas próximas páginas, os comentários
serão relacionados aos dois arquivos de código do programa CadastroImoveis,
portanto procure estudá-los e retornar a eles a cada comentário. Se possível,
mantenha uma cópia impressa com o código ao seu lado e a rasbique com lápis
para fortalecer seu aprendizado.
Esse arquivo possui apenas uma classe, que leva o mesmo nome "Imovel". Na
linha 1, a classe é declarada como sendo pública, o que significa que ela pode
ser manipulada diretamente:
O mesmo ocorre com seus atributos entre as linhas 3 e 7, são todos declara-
dos públicos, e por isso seus valores podem ser manipulados externamente. Se
fossem privados, somente métodos dentro da classe poderiam manipulá-los,
o que significa que eles estariam protegidos de acesso externo. Isso, de forma
simplista, é o que se chama "encapsulamento":
capítulo 3 • 97
Public Property Endereco As String
Public Property MetrosQuadrados As Decimal
Public Property NumeroQuartos As Integer
Public Property TipoImovel As String
Public Property ValorOferta As Decimal
Os atributos dentro de uma classe são como variáveis. Mas eles podem ser
divididos em dois tipos: Propriedade e Campos. Eles são Propriedades quan-
do usam a palavra-chave “Property”,por outro lado, um atributo é um Campo
quando a palavra-chave Property não é usada. As propriedades recebem mais
proteções de validação por parte do .NET, além de poderem realizar mais cone-
xões de dados com a plataforma; apesar de poderem ser alteradas externamen-
te de forma direta, é mais comum apenas acessá-las e alterá-las através de mé-
todos específicos. Em nosso exemplo, utilizamos propriedades e atribuímos
valores a elas sem o auxílio de métodos, mas pederíamos ter usado campos.
Atributos
98 • capítulo 3
Public Function PrecoMetroQuadrado() As Decimal
Return Me.ValorOferta / Me.MetrosQuadrados
End Function
capítulo 3 • 99
Enfim, o cálculo e retorno de Valor pela função será um tipo de dado
Decimal, que pode ser usado para representar valor monetário e, no nosso
caso, também pode ser utilizado para representar metros quadrados. O valor
atribuído à variável Valor será retornado toda vez que for chamado o método
PrecoMetroQuadrado() de um objeto Imovel. Perceba que, como nosso exem-
plo é simples, não há tratamento de erros e, caso não houvesse preço ou me-
tragem atribuídos ao novoImovel, a função retornaria um erro da operação de
divisão sem avisar que faltam valores de atributos.
100 • capítulo 3
Dim novoImovel As New Imovel()
ou por:
Essa forma não foi usada em nosso exemplo, mas faz parte da filosofia de
programação voltada ao encapsulamento. Usando um método como esse é
possível, por exemplo, estabelecer um algoritmo que se certifica que aquilo que
foi digitado é realmente um endereço, que esse endereço ainda não está cadas-
trado, ou algo ainda mais sofisticado.
capítulo 3 • 101
Essa quebra de linha foi feita unicamente para economizar espaço horizon-
tal. Ela é possível porque os argumentos estão entre parênteses e separados por
vírgulas, então o Visual Studio compreende que as três linhas fazem parte de
uma única instrução. Esse recurso é bastante utilizado por programadores para
que o código não ocupe muito espaço horizontal e fique mais legível.
3.2.2.3 Eventos
102 • capítulo 3
Por exemplo, no uso de uma interface gráfica, quando se clica em um botão,
esse objeto botão emite um sinal indicando que o evento de clique ocorreu. Isso
desencadeará ações em outros objetos que venham a reagir em função do evento.
É importante fazer uma pequena observação que pode ter chamado sua aten-
ção durante o capítulo: por que alguns objetos devem ser explicitamente decla-
rados e instanciados e outros não? Lembre-se que foi dito que Console é uma
classe pertencente ao Framework .NET, e que WriteLine() é um de seus méto-
dos. Então por que não é necessário declará-la para utilizá-la? Exemplo:
Ora, essa foi a forma que utilizamos para criar um novo objeto do tipo
Imovel, então há algo diferente. E, realmente, há: classes do framework são do
tipo "estáticas" ou "compartilhadas" (shared), e são declaradas de uma forma
especial para que não haja essa necessidade de instanciação. Quando rodamos
o programa, ele gera uma instância única que é utilizada em todo o código.Em
resumo: apesar do uso diferente, as classe do framework .NET ainda são classes
como as que criamos.
capítulo 3 • 103
Module1.vb
1 Module Module1
2
3 Sub Main()
4 Dim conta1 As Conta
5 conta1 = New Conta
6 Conta.TotalContas = Conta.TotalContas + 1
7 conta1.Saldo = 1000
8 conta1.Exibir()
9 Dim conta2 As Conta
10 conta2 = New Conta
11 Conta.TotalContas = Conta.TotalContas + 1
12 conta2.Saldo = 2000
13 conta2.Exibir()
14
15 Console.Write("O total de contas é: ")
16 Console.WriteLine(Conta.TotalContas)
17 Console.ReadKey()
18 End Sub
19
20 Public Class Conta
21 Public Property Saldo As Decimal
22 Public Shared Total Contas As Integer = 0
23
24 Public Sub Exibir()
25 Console.Write("O saldo da sua conta é: ")
26 Console.WriteLine(Saldo)
27 End Sub
28 End Class
29
30 End Module
Código 3.9 – Exemplo com membro compartilhado.
104 • capítulo 3
3.2.2.6 Herança
Visual Basic oferece suporte herança, que é a capacidade de definir classes que ser-
vem sistema autônomo base para classes derivadas. Classes derivadas herdam e
podem estender, propriedades, métodos e eventos da classe base. Classes derivadas
também podem substituir métodos herdados com novas implementações. Por padrão,
todas as classes criadas com Visual Basic são herdáveis.
Isso é, para qualquer classe que um programador criar, ele pode criar clas-
ses derivadas. Por exemplo, no desenovlvimento de um sistema de controle aca-
dêmico de uma faculdade, um programador pode criar a classe Pessoa. Dessa
classe ele pode derivar Professor, Aluno e Funcionario, adicionando a cada um
atributos e métodos necessários para controle no sistema, como notas e curso
dos alunos.
Um outro exemplo está no código a seguir, que cria uma classe Conta,
para uma conta bancária genérica. Dessa classe, outra herdada é criada:
ContaRemunerada, que possui uma atributo adicional (TaxaRemuneracao) e
um método adicional (ExibirRemuneracao).
Module1.vb
1 Module Module1
2 Sub Main()
3 Dim conta1 As Conta
4 conta1 = New Conta
5 conta1.Saldo = 1000
6 Dim conta2 As ContaRemunerada
7 conta2 = New ContaRemunerada()
8 conta2.Saldo = 2000
9 conta2.TaxaRemuneracao = 1.0
10 conta2.Exibir()
11 conta2.ExibirRemuneracao()
12 Console.ReadKey()
13 End Sub
capítulo 3 • 105
14
15 Public Class Conta
16 Public Property Saldo As Decimal
17 Public Sub Exibir()
18 Console.Write("O saldo da sua conta é: ")
19 Console.WriteLine(Saldo)
20 End Sub
21 End Class
22
23 Public Class ContaRemunerada
24 Inherits Conta
25 Public Property TaxaRemuneracao As Decimal
26 Public Sub ExibirRemuneracao()
27 Console.Write("A taxa de remuneração da sua conta é: ")
28 Console.WriteLine(TaxaRemuneracao)
29 End Sub
30 End Class
31 End Module
Código 3.10 – Exemplo de herança de classe.
106 • capítulo 3
• Private: nesse caso, o elemento declarado privado apenas pode ser aces-
sado pelo código em sua classe ou outro elemento a que pertença, como um
módulo ou estrutura.
• Shared: o membro de uma classe declarado dessa maneira pode ser aces-
sado por todos os objetos instanciados dessa classe.
REFLEXÃO
O uso de tratamento de exceções é mais uma boa prática no desenvolvimento de software.
Diz-se que, se é inevitável que eventualmente o software falhe para certas operações, que
isso aconteça graciosamente. Mas a previsibilidade de ocorrência de exceções muitas vezes
vem acompanhada com a experiência do programador associada ao conhecimento que tem
das ferramentas que usa.
Quanto à orientação a objetos, é importante notar que o uso desse paradigma de pro-
gramação não elimina o uso de outros. O uso de objetos em um programa não quer dizer
que não se usa a programação estruturada em trechos do código. Como se verá também
no Capítulo 5, a Programação Orientada a Eventos é baseada em recursos oferecidos pela
orientação a objetos.
ATIVIDADES
01. Explique com suas próprias palavras o que é tratamento de exceções e por que é impor-
tante em programação.
02. Faça um pequeno programa que solicita dois números inteiros para o usuário e faz a
divisão entre eles. Use tratamento de exceções para capturar o erro de divisão por zero es-
pecificamente e outra captura, genérica, para capturar outros erros. Forneça uma mensagem
amigável ao usuário.
capítulo 3 • 107
03. Explique o que são Classes, Objetos, Propriedades de Objetos e Métodos de Objetos.
04. Crie um pequeno programa que possui uma classe Retangulo, que possui as proprie-
dades "base", "altura" e "cor". Crie um método baseado em uma sub-rotina que altera a
propriedade "cor" e que se chama "definir_cor". A rotina Main deve instanciar esse objeto e
definir a cor do retângulo para "azul".
LEITURA
O site da Microsoft Develor Network (MSDN) possui mais informações, e aprofunda no as-
sunto de tratamento de exceções:
Tratamento de Exceção e Erro no Visual Basic
<https://msdn.microsoft.com/pt-br/library/vstudio/s6da8809%28v=vs.100%29.aspx>
O mesmo site também explica com bastante detalhes a Programação Orientada a Obje-
tos com o Visual Basic .NET:
Objetos e classes no Visual Basic
<https://msdn.microsoft.com/pt-br/library/527aztek.aspx>
REFERÊNCIAS BIBLIOGRÁFICAS
MACKENZIE, Duncan; SHARKEY, Kent. Aprenda Visual Basic.net em 21 Dias. Makron: São Paulo,
2003.
MSDN, Microsoft Developer Network. Namespace System. Disponível em: <https://msdn.microsoft.
com/pt-br/library/System%28v=vs.90%29.aspx>. Acesso em: 12 fev. 2015.
______. Namespace System.IO.Disponível em: <https://msdn.microsoft.com/pt-br/library/System.
IO%28v=vs.110%29.aspx>. Acesso em: 12 fev. 2015.
______. Herança no Visual Basic. Disponível em: <https://msdn.microsoft.com/pt-br/
library/5x4yd9d5%28v=vs.90%29.aspx>. Acesso em: 18 jan. 2015.
108 • capítulo 3
4
Banco de Dados
na Plataforma
Microsoft .NET
Neste capítulo, veremos vários aspectos do uso de bancos de dados: o que são,
os seus benefícios para o desenvolvimento de softwares, quais seus elementos
e como interagir com eles. Depois de uma apresentação geral, enfatizaremos
o uso do SQL Server, que é o Sistema Gerenciador de Bancos de Dados (SGBD)
da Microsoft. Será apresentado um pequeno guia de instalação do SQL Server,
como utilizar sua interface gráfica, o SQL Server Management Studio, e como
escrever pequenos scripts para criação de bancos de dados, tabelas e views.
Logicamente, disciplinas específicas de bancos de dados e de modelagem
de dados detalham melhor o que será visto aqui, mas o nosso propósito é colo-
car tudo isso no contexto do desenvolvimento de um software com vários ele-
mentos, além do acesso aos dados armazenados através do .NET Framework
.
OBJETIVOS
Após a leitura da leitura desse capítulo e prática de suas atividades, você saberá:
110 • capítulo 4
4.1 Sistemas de Banco de Dados
Um banco de dados é uma coleção de dados relacionados. Os dados são fatos que
podem ser gravados e que possuem um significado implícito (ELMASRI e NAVA-
TH, 2005). De forma genérica, qualquer coleção de dados pode ser considerado
um banco de dados, como o conjunto de pastas de prontuários de pacientes em
um hospital, ou até a coleção de livro em uma biblioteca. Esses conjuntos de da-
dos costumam ser organizados de acordo com um método, de forma que seja
possível acessá-los facilmente. Apesar de a organização física de dados ser ne-
cessária em muitas situações, ela se torna ineficiente em outras, principalmente
quando em grandes volumes, ou quando se necessita de acesso imediato, inte-
gração de dados, redução de redundâncias, segurança de acesso etc.
No contexto da informática, o armazenamento de dados em qualquer ar-
quivo do tipo texto também pode ser considerado um banco de dados em um
sentido amplo. Para manipular esses dados, programas específicos devem ser
desenvolvidos para extrair os dados armazenados em determinado formato e
processá-los. Esse tipo de armazenamento de dados ainda pode manter alguns
dos problemas do armazenamento em papel. Resumidamente, alguns dos pro-
blemas apresentados por Silberschatz et al. (2006) são:
• Redundância e inconsistência de dados: como os programas que ma-
nipulam os dados precisam ser alterados de acordo com certas necessidades,
com o tempo essas alterações podem causar repetições e conflitos de dados;
• Dificuldade de acesso a dados: não há métodos comuns de acesso a da-
dos de acordo com todas as necessidades, e um programa deve ser desenvolvi-
do para cada uma delas;
• Isolamento de dados: os dados podem estar dispersos em vários arquivos
e até em vários computadores, não sendo isolados em um local centralizado,
com um mesmo programa de acesso;
• Problemas de integridade: é muito mais difícil estabelecer regras de valo-
res que podem ser preenchidos em certos campos de dados;
• Problemas de atomicidade: é mais difícil garantir que um conjunto de al-
terações relacionadas sejam feitas em um só movimento de dados, certificando
que, caso haja uma falha, os dados voltem ao estado anterior a essa alteração
conjunta;
capítulo 4 • 111
• Anomalias de acesso concorrente: não garante que haja consistência de
dados caso mais de um usuário acesse e altere dados em um intervalo de tempo
muito curto;
• Problemas de segurança: é mais difícil controlar acessos aos dados.
112 • capítulo 4
A arquitetura de implementação de um banco de dados costuma seguir um
de três padrões:
capítulo 4 • 113
Aplicativo 1 Aplicativo 2 Aplicativo N
SGBD
BD
114 • capítulo 4
• Controle de redundância e restrições de integridade: a normalização dos
dados e as regras das tabelas impõem certos padrões;
• Restrições de acesso: podem ser estabelecidas regras de acesso a certos
conjuntos de dados para cada usuário ou aplicativo;
• Eliminação de código redundante nas aplicações para gerenciamento de
dados e flexibilidade: os aplicativos não precisam se preocupar com boa parte
do gerenciamento dos dados;
• Disponibilidade: com os dados em um servidor, ele pode ser gerenciado
de forma a funcionar o maior tempo possível sem problemas;
• Escalabilidade: o servidor de banco de dados pode ter sua capacidade au-
mentada à medida que a quantidade de dados e sua necessidade aumentam.
capítulo 4 • 115
As Entidades possuem um conjunto de Atributos, que são características
que descrevem ou compõem as Entidades. Cada entidade pode ter um ou
mais Atributos, e cada Atributo pode ter um conjunto de valores possíveis, o
qual é chamado domínio ou conjunto de atributos. Como é possível perceber,
os conceitos de Entidades em bancos de dados e de Objetos na programação
Orientada a Objetos são muito parecidos.
Um banco de dados relacional é formado por Tabelas, sendo que as instân-
cias das entidades preencherão as linhas em uma tabela, e os seus atributos são
representados em suas colunas. Cada instância de Entidade deve ser identifica-
da univocamente, isto é, deve possuir uma identificação única em sua tabela,
seja através de um ou mais atributos em conjunto. Essa identificação única é
chamada Super-chave.
Como exemplo de Super-chave, podemos considerar uma tabela de cida-
dãos cadastrados no banco de dados da Polícia Federal. Sabe-se que nem todo
cidadão possui CPF, que é um número exclusivo em todo país, mas não obriga-
tório para todos, sendo um identificador da Receita Federal. Por outro lado, a
maioria das pessoas deveria ter um RG, que não é um número de identificação
exclusivo no pais, mas por Estado. Assim, uma Super-chave poderia ser forma-
da pelo conjunto RG e Estado de registro.
Nesse exemplo, o conjunto RG-Estado também pode ser considerado uma
Chave Candidata, porque nenhum dos dois campos individualmente pode ser
considerado uma Super-chave. Se, realmente, a dupla RG-Estado não pode ser
repetido, então o trio CPF-RG-Estado não pode ser considerado uma Chave
Candidata, pois o subconjunto RG-Estado já identifica exclusivamente cada
Entidade. Assim, o projetista do banco de Dados, confirmando que o código
RG-Estado não pode ser repetido, pode utilizá-lo como uma Chave Primária.
Com isso, os conceitos de chaves utilizadas na modelagem de bancos de da-
dos são definidos por Silberschatz et al. (2006) e citados ou adaptados a seguir:
116 • capítulo 4
Com a definição de chaves primárias, é possível estabelecer relações entre
as entidades em banco de dados. Voltemos ao exemplo de um sistema de re-
gistro de ideias de funcionários em uma empresa: as pessoas, suas ideias e as
avaliações que colegas fazem dessas ideias são entidades que se relacionam. Os
funcionários geralmente possuem um código de identificação dado pelo sis-
tema de gestão de recursos humanos - sua chave primária pode ser seu CPF,
mas é mais comum o uso de um número de série do sistema de RH, para que
os números sejam mais curtos e os CPF não sejam divulgados amplamente. O
sistema de Gestão de Ideias também terá que criar números de identificação
para as próprias ideias assim como para suas avaliações. Note, portanto, que é
comum utilizar chaves primarias que não se baseiam em outros atributos das
entidades, mas em números gerados pelo próprio sistema.
Nesse mesmo exemplo, uma pessoa pode gerar várias ideias, e cada
ideia pode receber várias avaliações. As chaves primárias de cada entida-
de vão fazer a relação entre uma tabela e outra. Com isso podemos perceber
que um Relacionamento é uma associação entre uma ou várias entidades
(SILBERSCHATZ, 2006).
capítulo 4 • 117
A estrutura geral de tabelas e seus relacionamentos fica definida em seu
Esquema, o qual gera um projeto em linguagem formal que é suportada pelo
SGBD. O Esquema é como se fosse uma planta, um projeto do banco de dados,
que o SGBD guarda e utiliza para manter os relacionamentos e suas regras na
geração de operações relacionais durante seu funcionamento.
CONEXÃO
Para baixar o SQL Server, acesse o link: http://microsoft.com/sqlserver
Tenha certeza de baixar a versão Express.
Assim como o Visual Studio, a empresa nomeia versões com o ano de lan-
çamento. Nós usaremos nessa disciplina a versão Express. Para fazer o downlo-
ad, você deverá usar uma conta Microsoft, sendo que você já pode possuir uma
caso utilize o Outlook online, Skype, ou usava o comunicar MSN.
Preencha o pequeno cadastro com seus dados e a versão que deseja baixar
- nesse momento é necessário saber se seu computador tem o Windows de 32
ou 64 bits, pois a escolha da versão errada acarretará em erro na instalação.
Selecione a alternativa que possui a interface gráfica do gerenciador de ban-
co de dados, incluida entre outras ferramentas (tools), algo como "SQL Server
2014 Express with Tools 32 Bit" se seu Windows for de 32 bits. Escolha língua
118 • capítulo 4
e país e, caso não queira receber propaganda da empresa, certifique-se que não
há nada marcado autorizando isso. Um grande arquivo executável será baixado
e isso pode demorar um tempo, dependendo de sua conexão com a internet.
Depois de baixar o arquivo de instalação, execute-o e verá a tela a seguir.
capítulo 4 • 119
em disco, espaço em memória e operações específicas. Aqui são apresentados
brevemente os tipos de dados disponíveis no SQL Server.
Os dados numéricos exatos são aqueles que representam números com pre-
cisão fidedigna. Podem ser números inteiros ou decimais com número defini-
do de casas após a vírgula.
NUMÉRICOS EXATOS
-2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807)
bigint
Ocupa 8 bytes de armazenamento.
Os números aproximados são aqueles que utilizam ponto flutuante para re-
presentar valores aproximados de dízimas ou redução de valores muito longos.
NUMÉRICOS APROXIMADOS
Ocupada até 8 bytes, representando valores:
float
[-1,79E+308 a -2,23E-308]; [0]; [2,23E-308 a 1,79E+308]
0 a 255
real
Ocupa 1 byte de armazenamento.
120 • capítulo 4
DATA E HORA
Define uma data no SQL Server.
Ocupa 3 bytes.
Date
Formato da literal: AAAA-MM-DD
Intervalo: 000-01-01 a 9999-12-31
Define uma data combinada com uma hora do dia que se baseia em um período de
24 horas. datetime2 pode ser considerada uma extensão do tipo datetime existente,
que tem um intervalo maior de datas, uma precisão fracionária padrão mais ampla e
datetime2 precisão opcional especificada pelo usuário.
Ocupa 6 bytes
Formato da literal: YYYY-MM-DD hh:mm:ss[segundos fracionários]
Intervalo: 0001-01-01 a 9999-12-31
Define uma data combinada com uma hora do dia que inclui frações de segundos e se
baseia em um período de 24 horas.
datetime Ocupa 8 bytes
Intervalo de datas: Janeiro 1, 1753, a dezembro 31, 9999
Intervalo de horas: 00:00:00 a 23:59:59.997
Define a data combinada com uma hora de um dia que possui reconhecimento de fuso
horário e é baseada em um relógio de 24 horas.
datetimeo- Ocupa 10 bytes.
ffset Formato da literal: AAAA-MM-DD hh:mm:ss[. nnnnnnn] [{+|-}hh:mm]
Intervalo de datas: 0001-01-01 a 9999-12-31
Intervalo de horas: 00:00:00 a 23:59:59.9999999
Define uma data que é combinada com uma hora do dia. A hora se baseia em um dia
de 24 horas, com segundos sempre zero (:00) e sem frações de segundo.
smalldate-
Ocupa 4 bytes.
time
Intervalo de datas: 1900-01-01 a 2079-06-06
Intervalo de horas: 00:00:00 a 23:59:59
Define uma hora de um dia. A hora se encontra sem reconhecimento de fuso horário e
se baseia em um relógio de 24 horas.
time Formato da literal: hh:mm:ss[. nnnnnnn]
Intervalo: 00:00:00.0000000 a 23:59:59.9999999
Ocupa 5 bytes
CADEIAS DE CARACTERES
Dados de cadeia de caracteres não Unicode de comprimento fixo.
char Uso: char(n), onde n é o tamanho da cadeia e pode ser de 0 a 8.000.
Número de bytes ocupados é igual a n.
Os não Unicode de comprimento variável na página de código do servidor e com um
text
comprimento máximo de cadeia de caracteres de 2^31-1 (2.147.483.647).
capítulo 4 • 121
CADEIAS DE CARACTERES
Dados de cadeia de caracteres não Unicode de comprimento variável.
varchar Uso: char(n), onde n é o tamanho máximo da cadeia e pode ser de 0 a 8.000.
Número de bytes ocupados é igual a n.
Outros tipos de dados são aqueles que não caem em categorias anteriores e
são distintos entre si. Incluem arquivos XML, como os de Nota Fiscal Eletrônica,
ou coordenadas geográficas, que podem ser usadas para sistemas de mapas.
122 • capítulo 4
OUTROS TIPOS DE DADOS
É um tipo de dados que expõe números binários exclusivos, gerados automatica-
timestamp mente, em um banco de dados. Serve para controlar versões através de um tempo
relativo.
É um Identificador Único Global (GUID - Globally Unique IDentifier) de 16 bytes.
uniqueidentifier
Um número único sequencialmente gerado.
É um Identificador Único Global (GUID - Globally Unique IDentifier) de 16 bytes.
xml
Um número único sequencialmente gerado.
Tipos espaciais Serve para armazenar coordenadas geográficas e geometrias formas por elas.
CONEXÃO
Se precisar saber mais sobre os tipos de dados do SQL Server, consulte essa página da
Microsoft:
<https://msdn.microsoft.com/pt-br/library/ms187752.aspx>
SQL Server Management Studio e SQL Server são coisas diferentes. O SQL Ser-
ver Management Studio é uma ferramenta, um software aplicativo, que se co-
necta ao servidor de bancos de dados e oferece uma forma gráfica de adminis-
trá-lo - ele se conecta ao banco de dados e emite comandos em formato texto
ao servidor, os quais são gerados a partir de nossas ações na interface gráfica.
Por isso, quando abrimos o SQL Server Management Studio, ele solicita dados
de conexão ao gerenciador de banco de dados. Além disso, através do Mana-
gement Studio, vários programadores e administradores de bancos de dados
podem se conectar ao mesmo tempo ao servidor que pode estar instalado em
um computador separado.
Utilizar o SQL Server Management Studio é uma das formas de criar, modi-
ficar e gerenciar bancos de dados e tabelas no SQL Server. Também é possivel
modificar tabelas e dados a partir de nosso próprio programa, como veremos
capítulo 4 • 123
mais adiante. No entanto, aqui utilizaremos o SQL Server Management Studio
para criar o banco de dados e tabelas necessárias para nosso projeto que servirá
de exemplo, um sistema simples de controle de clientes para uma empresa.
O procedimento padrão do SQL Server deverá ter instalado também o SQL
Server Management Studio em seu computador, colocando um ícone no menu
de programas do botão Inciar do Windows. Procure esse programa e o execute.
A primeira tela a ser exibida é a de login.
124 • capítulo 4
Figura 4.4 – Pesquisador de Objetos exibindo bancos de dados do sistema.
Nós criaremos bancos de dados e tabelas para nosso próprio uso a seguir.
Quando se utiliza o SQL Server Management Studio, muitas das atividades para
gerenciamento dos bancos de dados pode ser feito de forma gráfica ou através
de comandos SQL. Faremos aqui das duas formas, primeiro criando um banco
de dados "vendas" pela interface gráfica. Clique com o botão direito do mouse
no item "Bancos de Dados" do Pesquisador de Objetos e escolha a opção "Novo
Banco de Dados...".
capítulo 4 • 125
Figura 4.5 – Menu com opção de criação de banco de dados.
Uma janela com um campo para o nome do banco de dados se abrirá. É pos-
sível configurar muitas opções do banco de dados nessa janela, mas não nos
preocuparemos com isso, criando um que possui configuração padrão. Veja,
no quadro abaixo do nome, que serão criados dois bancos de dados: "vendas"
e "vendas_log". O primeiro conterá nossos dados, enquanto o segundo serve
para registrar alterações nos dados, servindo para fazer controles de segurança
e recuperar dados caso necessário.
126 • capítulo 4
Após pressionar o botão OK, o banco de dados será criado. Para ele apare-
cer na árvore de itens do Pesquisador de Objetos é necessário clicar no item
"Bancos de Dados" com o botão direito do mouse e escolher "Atualizar". Com
isso, o banco de dados "vendas" aparecerá, mas perceba que ele ainda não pos-
sui nossas tabelas, mas apenas tabelas do sistema.
Figura 4.7.
Esses passos de criação de banco de dados pela interface gráfica podem ser
substituídos por apenas um comando SQL:
capítulo 4 • 127
Figura 4.8 – Campo para composição de comandos SQL.
128 • capítulo 4
Figura 4.9
Salve esse arquivo onde desejar, com um nome parecido com "create_ven-
das". Automaticamente, esse arquivo receberá uma extensão .sql. Esse é um ar-
quivo texto e é possível abri-lo com o programa Bloco de Notas do Windows. Ele
terá um conteúdo parecido com o seguinte.
USE [master]
GO
/****** Object: Database [VENDAS] Script Date: 07/18/2011 22:25:04
******/
CREATE DATABASE [VENDAS] ON PRIMARY
(NAME = N'VENDAS', FILENAME = N'c:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\VENDAS.mdf' , SIZE = 3072KB ,
MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
(NAME = N'VENDAS_log', FILENAME = N'c:\Program Files\Microsoft
SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\VENDAS_log.ldf' , SIZE =
1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [VENDAS] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [VENDAS].[dbo].[sp_fulltext_database] @action = 'enable'
end
capítulo 4 • 129
GO
ALTER DATABASE [VENDAS] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [VENDAS] SET ANSI_NULLS OFF
GO
ALTER DATABASE [VENDAS] SET ANSI_PADDING OFF
GO
ALTER DATABASE [VENDAS] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [VENDAS] SET ARITHABORT OFF
GO
ALTER DATABASE [VENDAS] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [VENDAS] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [VENDAS] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [VENDAS] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [VENDAS] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [VENDAS] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [VENDAS] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [VENDAS] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [VENDAS] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [VENDAS] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [VENDAS] SET DISABLE_BROKER
GO
130 • capítulo 4
ALTER DATABASE [VENDAS] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [VENDAS] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [VENDAS] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [VENDAS] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [VENDAS] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [VENDAS] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [VENDAS] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [VENDAS] SET READ_WRITE
GO
ALTER DATABASE [VENDAS] SET RECOVERY SIMPLE
GO
ALTER DATABASE [VENDAS] SET MULTI_USER
GO
ALTER DATABASE [VENDAS] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [VENDAS] SET DB_CHAINING OFF
GO
Código 4.1 – Script SQL de criação do banco de dados criado automaticamente.
capítulo 4 • 131
Figura 4.10 – Salvamento de um script em uma arquivo texto.
132 • capítulo 4
Complementovarchar(50) NULL,
Cidadenvarchar(50) NOT NULL,
UF varchar(2) NOT NULL,
)
Código 4.2 – Script SQL para a criação da tabela Cliente.
Figura 4.11 – Escolha do banco de dados de contexto para execução da consulta SQL.
Após executar o código SQL, atualize o banco de dados. A tabela Cliente es-
tará então disponível e seus campos estarão visíveis no Pesquisador de Objetos.
capítulo 4 • 133
Figura 4.12 – Exibição da tabela Cliente e seus campos.
134 • capítulo 4
Uma nova tela se abrirá, a qual permite nomear cada campo, escolher seus
tipos de dados e modificar outras configurações de campos, como a determina-
ção de chaves primárias.
Se preferir criar uma tabela dessa maneira, basta adicionar cada campo e
seus tipos. Depois de definir todos eles, salve a tabela ou clique para fechar a
aba. Um diálogo permitirá que escolha um nome para a tabela e a salve.
Para continuar com o exemplo do banco de dados de vendas, devemos criar
mais duas tabelas: uma de Pedidos e outra de Itens de Pedidos. Perceba que
essas são duas entidades que se relacionam, cada pedido para um cliente pode
ter vários itens de pedido de produtos. Os códigos SQL são os seguintes.
capítulo 4 • 135
CREATE TABLE ItemPedido
(
ID bigint NOT NULL Primary Key,
IDPedidobigint NOT NULL,
Numerosmallint NOT NULL,
Descricaonvarchar (200) NOT NULL,
Quantidadeint NOT NULL,
PrecoUnitario money NOT NULL,
PrecoItemPedido money NOT NULL,
)
Código 4.4 – Script SQL para a criação da tabela Pedido.
Cada um desses trechos deve ser executado por vez. Após sua execução,
teremos as tabelas necessárias, mas, logicamente, elas estão vazias de dados.
Adicionaremos conteúdo a elas no próximo capítulo.
4.2.3 Views
Em uma tradução sem contexto para o português, a palavra "view" pode signifi-
car exibição, visão, ponto de vista, visualização, panorama, paisagem, compre-
ensão ou ideia. Em bancos de dados, a palavra está ligada mais a uma forma de
"enxergar" os dados, através de cruzamentos e filtros. A versão em português do
SQL Server utiliza o termo "Exibição", mas como é comum o uso da palavra em
inglês, faremos o mesmo aqui.
Uma View nada mais é do que uma Query, em que se faz filtragem e cruza-
mento de dados em uma ou mais tabelas. Essa Query é salva no conjunto de ob-
jetos do banco de dados, mas não faz parte de seu esquema. A ideia é que ela se
torne uma espécie de tabela virtual que pode ser consultada a todo momento,
como se fosse uma tabela real de dados, mas, na verdade, ela não existe como
tabela e o gerenciador de banco de dados sempre atualiza seus resultados para
refletir as tualizações nas tabelas a que essa View se refere.
Seguindo nosso exemplo de um banco de dados de controle de vendas, uma
View "pedidos_view" poderia ser criada a partir de uma Query que exibe o nome
dos clientes e as datas de seus pedidos das tabelas Cliente e Pedido. Com isso,
se for necessário criar uma Query que filtre nome de clientes e datas, elas po-
dem ser realizadas sobre a View criada (pedidos_view) ao invés de se criar um
136 • capítulo 4
código SQL que faça as duas coisas: cruzamento de dados entre tabelas e fil-
tragem. Assim, é possível perceber que é criada uma camada de abstração que
facilita a programação de buscas no banco de dados.
A figura a seguir mostra, à esquerda, o aplicativo se comunicando direta-
mente com as tabelas. Nesse caso, ele terá que fazer consultas mais complexas
para obter os dados necessários. À direita está um esquema em que a view faz as
consultas mais complexas utilizando JOINS, e o aplicativo apenas precisa fazer
consultas simples para obter os dados.
Aplicativo: View:
Select com Joins Select com Joins
Aplicativo:
Select simples
Figura 4.15 – Uma view funcionando como camada de abstração para simplificar as
consultas do aplicativo.
capítulo 4 • 137
4.2.4 Criação de Views
Assim como na criação de bancos de dados e tabelas, é possivel criar views dire-
tamente com código SQL ou através da interface gráfica do SQL Server.
Essa view criará uma tabela virtual que possui todos os campos das tabe-
las Cliente, Pedido e ItemPedido. Veja que o script utiliza "INNER JOIN" para
unificar as linhas das tabelas que estão relacionadas pelas identificações do
138 • capítulo 4
clientes, dos pedidos e dos itens. A view resultante terá várias linhas para cada
cliente, se houver mais de um pedido por cliente e mais de um item por pedido.
Também e importante notar que são dados apelidos aos campos para ajudar
a identificá-los, além de que as linhas são ordenadas por ordem alfabética de
nomes de clientes.
capítulo 4 • 139
• Camada de apresentação: é aquela exibida para o usuário, que pode ser
formatada com paginação e através de organização gráfica;
• Camada de negócios: quais usuários podem ver ou alterar quais dados, ou
fazer filtros por região geográfica ou datas de pedidos de vendas, por exemplo;
• Camada de dados: na qual é feita a manipulação através de visões para
obtenção dos dados do banco.
Como foi dito anteriormente, o ADO.NET pode ser utilizado para se conectar
a diversos tipos de fontes de dados. O uso com outros tipos de servidores de
bancos de dados (PostgreSQL, MySQL, Oracle etc.) varia de caso a caso, usando
bibliotecas específicas. Para uso com o SQL Server ou outras fontes como MS
Access e arquivos texto ou XML, isso pode ser feito diretamente, mas as classes
são diferentes para cada um dos dois tipos de fontes de dados.
Para conexão a arquivos locais, como Ms Access, planilhas ou arquivos tex-
tos, é necessário se conectar à camada de abstração que o Windows oferece para
transformá-las e fontes de dados, a OLE DB (Object Linking and Embedding
Database), por isso as classes que correspondem a cada um dos componentes
descritos anteriormente são:
140 • capítulo 4
• OleDbConnection: para conexão a fonte de dados;
• OleDbCommand: para emissão de comandos à fonte de dados;
• OleDbDataReader ou OleDbDataSet: para armazenamento dos dados
para manipulação;
• OleDbDataAdapter: para passar dados ao DataSet.
Por outro lado, a conexão ao SQL Server é direta e não precisa usar essa ca-
mada intermediária. Nesse caso, as classes que representam os componentes
do ADO.NET para conexão com o SQL Server são:
• SqlConnection
• SqlCommand
• SqlDataReader ou SqlDataSet
• SqlDataAdapter
capítulo 4 • 141
15
16 Dim strComando As String = "SELECT * FROM Cliente"
17 Dim comando As SqlCommand 'Cria a varável para o SqlCommand
18 Dim da As SqlDataAdapter 'Cria a variável para o SqlDataAdapter
19 Dim dt As New DataTable 'Cria o SqlDataTable
20 Try
21 conexao.ConnectionString = strConexao 'Faz a conexão efetiva
22 comando = New SqlCommand(strComando, conexao) 'Instancia um objeto
de comando
23 comando.CommandTimeout = 3000 'Configura o envio do comando
24
25 da = New SqlDataAdapter(comando) 'Instancia um objeto de adaptador
de dados
26 da.Fill(dt) 'Recebe os dados e preenche o
adaptador de dados
27 Console.WriteLine(dt.Rows.Count.ToString()) Imprime número de li-
nhas da tabela Cliente
28
29 Catch ex As Exception
30 Console.WriteLine(ex.Message, "Erro de conexão")
31 Finally
32 Ifconexao.State = ConnectionState.OpenThen
33 conexao.Close()
34 En dIf
35 End Try
36 End Sub
37
38 End Module
Código 4.6 – Código VB.NET para conexão com o banco de dados “vendas” e contagem de
linhas da tabela “Cliente”.
Perceba que o código que opera no banco de dados está em um bloco Try,
pois, se ele não conseguir se conectar do BD, emitirá um aviso de erro. Como
isso é apenas um exemplo, todo o código de conexão e execução está em uma
mesma sub-rotina, mas em um software de uso real, ele poderia estar dividido
em funções, para que cada operação no banco de dados não precisasse repetir
todos os procedimentos novamente.
No próximo capítulo abordaremos como fazer uma conexão com o banco de
dados utilizando o assitente gráfico do Visual Studio.
142 • capítulo 4
REFLEXÃO
Cada linguagem de programação possui uma forma de interação com bancos de dados atra-
vés de suas bibliotecas. Geralmente, o uso dessas bibliotecas envolve uma camada de abs-
tração que utiliza conectores de dados, os quais são especializados para diferentes bancos
de dados. É importante para um programador que necessite utilizar armazenamento perma-
nente de dados se familiarizar com um ou mais SGBDs e seu dialeto SQL, com as bibliotecas
de conexão entre a linguagem e esses SGBDs e como otimizar consultas.
Os exemplos apresentados nesse capítulo são bastantes simples e não procuram deta-
lhar essa otimização de consultas a banco de dados, o que é oferecido por uma disciplina de
modelagem de dados, mas apenas apresentar os componentes envolvidos em no desenvol-
vimento de um sistema com ferramentas integradas.
ATIVIDADES
01. Qual é a linguagem que se usa para manipular bancos de dados relacionais e quais são
algumas de suas características?
02. Explique, com suas palavras, o que é um sistema gerenciador de banco de dados que
utiliza uma arquitetura do tipo cliente-servidor.
03. Programe dois pequenos scripts SQL: um para criar um banco de dados "concessiona-
ria" e outro para criar nesse banco de dados uma tabela "automovel", com os campos, “ID”,
"marca", "modelo", "ano", "cor" e "chassi".
LEITURA
A W3Schools é reconhecido por ter ótimos guias para aprender linguagens de programação,
mas eles são em inglês. Se você precisa aprender ou lembrar SQL e não tem problemas com
a língua inglesa, este é o guia da instituição: <http://www.w3schools.com/sql/>
capítulo 4 • 143
REFERÊNCIAS BIBLIOGRÁFICAS
MSDN, Microsoft Developer Network. Tipos de dados (Transact-SQL). Disponível em: <https://
msdn.microsoft.com/pt-br/library/ms187752.aspx>. Acesso: 5 fev. 2015.
ELMASRI, Ramez; NAVATH, Shamkant B.. Sistemas de banco de dados. São Paulo: Pearson
Addison Wesley, 2005.
SILBERSCHATZ, Abraham; KORTH, Henry F.; Sudarshan, S. Sistema de Banco de Dados. Elsevier:
Rio de Janeiro, 2006.
144 • capítulo 4
5
Interface Gráfica
para o Usuário e
os Elementos de
Desenvolvimento de
Software
Neste último capítulo, serão apresentados os fundamentos da programação de interfaces
gráficas para o usuário. O Visual Basic, em suas versões iniciais, tinha o propósito de facilitar
a construção de programas visuais através da união da linguagem BASIC com ferramentas
de desenvolvimento rápido de aplicativos. Hoje, essas ferramentes são utilizadas em muitas
linguagens de programação, mas o Visual Basic continuou a ser aperfeiçoado para se equi-
parar a linguagens modernas de programação. Como resultado, ele continua sendo um meio
muito interessante de se desenvolver programas com interfaces gráficas.
A primeira parte do capítulo abordará as características das interfaces gráficas e alguns
elementos principais para desenvolvê-las. A segunda parte fará um passo a passo, mostran-
do como iniciar o desenvolvimento de um programa usando interface gráfica e conexão a um
banco de dados. O exemplo descrito não é um programa completo, mas é um início para sua
exploração do Framework .NET, do Visual Basic, do Visual Studio e do SQL Server.
OBJETIVOS
Após a leitura desse capítulo e desenvolvimento de suas atividades, você saberá:
146 • capítulo 5
5.1 Interface Gráfica para Usuário
Interface Homem-Computador (IHC) é uma área de estudo e pesquisa que se de-
senvolveu com a popularização dos computadores. Ela se preocupa com a ideali-
zação, desenho e testes de formas de as pessoas passarem e receberem dados dos
computadores. Originalmente, a interação com computares incluiam a conexão
de fios e sinais emitidos por lâmpadas, evoluindo para teclados e monitores que
exibiam apenas textos. Experimentos e pesquisas trouxeram cada vez mais op-
ções, incluindo interação por mouse, monitores que exibem desenhos, voz, telas
sensíveis ao toque, joysticks, sensores de movimento e muitos outros.
Interfaces Gráficas para o Usuário (Graphical User Interface - GUI) são
aquelas que possuem formas de interação que vão além do texto puro ou de
sinais muito simples. Por gráficos devem ser entendidos desenhos e imagens
que muitas vezes representam elementos abstratos ou metáforas de objetos do
mundo físico, os quais facilitam o entendimento e uso por pessoas que intera-
gem com computadores. Uma interface adequada deve satisfazer a necessida-
de do público usuário do software, seja ele leigo ou tecnicamente preparado.
capítulo 5 • 147
apontamento na tela e menus mais fáceis de navegar. Alguns experimentos pro-
gridem e outros acabam sendo abandonados. No entanto, os mais comuns aca-
bam sendo incorporados pelas ferramentas de desenvolvimento de software.
148 • capítulo 5
Studio; a versão Community terá mais tipos de projetos do que a versão Ex-
press. Aqui será abordado o desenvolvimento de um projeto utilizando o con-
junto de ferramentas Windows Forms.
Figura 5.1 – Tela de opções para criação de novo projeto no Visual Studio.
capítulo 5 • 149
Após a criação do projeto, será criada também, automaticamente, a primei-
ra janela nomeada "Form1". Um programa visual tem pelo menos uma jane-
la, sendo que, nesse caso, ela será a sua janela principal. Em inglês, o termo
normal de uso é "form", que pode e uma abreviação de "formulário". Até o fim
desse texto, usaremos os termos "form" ou "janela".
Figura 5.2 – Tela após criação de novo projeto, com um form já criado.
Propriedade Valor
Text Aplicação Gráfica 1
Size 600;480
150 • capítulo 5
Figura 5.3 – Janela do Form1 redimensionada.
Figura 5.4 – A janela do Form1 sendo executada, sem nenhum controle adicional.
Isso já é seu programa funcionando, mas ele ainda não faz nada de especial,
por isso vamos continuar adicionando elementos.
5.1.1.3 Label
A classe Label é um rótulo que pode ser utilizado para exibir textos indicando
o significado de cada campo em um formulário ou colocar legendas na janela.
capítulo 5 • 151
Figura 5.5 – Um controle Label, arrastado da Caixa de Ferramentas para a janela.
5.1.1.4 TextBox
O TextBox é um campo em que o usuário pode digitar texto como entrada para o
formulário. Por padrão ele tem apenas uma linha, mas a sua propriedade pode
ser alterada para suportar múltiplas linhas de texto.
152 • capítulo 5
Figura 5.7 – Colocação de um campo de texto na janela.
Para inserir um TextBox, faça como no caso do Label e arraste esse item da Cai-
xa de Ferramentas até o local desejado. Esse é o procedimento padrão para to-
dos os controles. Seu tamanho e posição também podem ser alterados na caixa
de Propridades (Size e Location) ou arrastando com o mouse.
Também por padrão a caixa de texto tem a propriedade Text vazia, mas ela
pode ser alterada para conter um texto inicial que o usuário pode substituir. Em
nosso exemplo, ela deve ser deixada vazia.
5.1.1.5 Button
O texto a ser exibido pelo botão também e alterado pela propriedade Text, a
qual deve ser modificada, nesse exemplo, para "OK".
capítulo 5 • 153
Figura 5.9 – Alteração da propriedade Text do botão.
5.1.1.6 GroupBox
154 • capítulo 5
Figura 5.10 – Colocação de uma caixa de grupo na janela.
Seu tamanho pode ser alterado também com o mouse ou na caixa de Proprie-
dades. O primeiro caso pode ser melhor para organizar os itens visualmente,
mas o segundo método é interessante para se obter mais precisão: com ele e
possível saber exatamente quantos pixels tem o tamanho do controle e se ele
segue um padrão de desenho.
5.1.1.7 RadioButton
capítulo 5 • 155
Para alterar o texto de cada uma das opções, é necessário selecionar uma
por vez e alterar suas propriedades Text na caixa de Propriedades. Altere cada
uma para "Masculino" e "Feminino".
5.1.1.8 CheckBox
No nosso exemplo, cada caixa de seleção deve ter um nível de formação aca-
dêmica: "Graduação", "Mestrado" e "Doutorado". Logicamente, se uma pessoa
tem um doutorado, com certeza ela terá graduação e mestrado completos, mas
nosso exemplo serve apenas para a compreensão de uso da ferramenta.
156 • capítulo 5
Figura 5.14 – Caixas de seleção com as propridades Text alteradas.
5.1.1.9 ListBox
Um ListBox, uma caixa de lista, oferece uma lista de opções que o usuário pode
escolher. Ela pode ter o mesmo comportamento de um grupo de RadioButton
ou um grupo de CheckBox, isto é, pode oferecer vários opções mutuamente ex-
clusivas ou mutuamente inclusivas.
Para inserir uma lista de opções, clique na pequena seta sobre a caixa do
controle e então em "Editar itens...", como na próxima figura.
capítulo 5 • 157
Uma janela se abre e nela os itens podem ser livremente digitados, cada um
em uma linha.
O resultado final se parece com uma caixa de texto, mas cada item em uma
linha representa uma opção a ser selecionada.
158 • capítulo 5
5.1.1.10 ComboBox
Em nosso exemplo, esse controle será utilizado para que o usuário escolha
sua profissão entre três opções.
capítulo 5 • 159
Figura 5.21 – Edição do conteúdo do ComboBox.
160 • capítulo 5
5.1.1.11 MenuStrip
O menu MenuStrip é uma faixa de menu, a qual fica na parte superior da ja-
nela e geralmente é utilizada para que o usuário tenha acesso a outras janelas e
formulários. Para inclui-la, basta arrastar o item da Caixa de Ferramentas e ela
automaticamente será colocada em seu lugar.
capítulo 5 • 161
Cada um dos itens de menu criados terá o comportamento parecido com um
botão. Para experimentar seu resultado final, execute o programa do formulário.
CONEXÃO
Você pode encontrar uma lista dos controles Windows Forms dividos por função nesse link:
<https://msdn.microsoft.com/pt-br/library/xfak08ea.aspx>
162 • capítulo 5
5.1.2 Programação Orientada a Eventos
Até o capítulo anterior vimos apenas como criar programas que se comunicam
com o usuário utilizando o Console do sistema operacional. Quando utiliza-
mos esse meio de interação com o usuário, há apenas um evento de sistema
sendo utilizado, que é justamente essa interação de um canal: o computador
imprime um texto na tela, e o usuário responde quando há uma instrução Re-
adLine(). Não há outra forma de interagir com o programa elaborado para o
Console e, por isso, podemos dizer que o evento é a entrada de dados seguido
do pressionamento da tecla "Enter".
Por outro lado, quando um programa possui uma ou mais janelas, campos
de texto, botões etc., temos várias possibilidades de eventos: o clicar em um
botão, a passagem do mouse por uma área da janela, a entrada de texto em um
campo e até mesmo o fechamento de uma janela, entre várias outras possibili-
dades. Cada um dessas ações é um Evento e, à sua ocorrência, podemos atribuir
uma ação que deve ser executada por nosso programa. Por exemplo, em lingua-
gem humana, podemos programar algo como:
capítulo 5 • 163
Antes disso, é importante perceber uma coisa importante: o fato de estar-
mos utilizando o paradigma de programação orientada a eventos não exclui o
uso do paradigma orientado a objetos. Com as tecnologias atuais, a programa-
ção com eventos está sempre junta à programação com objetos, sendo os even-
tos associados a métodos dos objetos.
164 • capítulo 5
Figura 5.27 – Janela de opções para criação de um novo projeto.
capítulo 5 • 165
Figura 5.28 – Colocação de um MenuStrip do sistema de gestão de vendas.
166 • capítulo 5
Agora já temos um meio de acessar outras janelas que podemos criar para
acessar os dados do SQL Server. Antes de criar essas janelas, é interessante fazer
a ligação de nosso aplicativo ao banco de dados de vendas criado no Capítulo 4.
Figura 5.30 – Item de menu para iniciar o assistente de adição de fonte de dados.
Isso fará com que o assistente (wizard) se inicie. Ele permitirá que se crie uma
conexão direta com a fonte de dados, a qual pode ser um arquivo do MS Access
(que precisa estar instalado no computador), arquivos texto ou uma instância
SQL Server. Se a conexão for feita com o SQL Server, ele pode estar instalado
no próprio computador ou em outro na mesma rede. Na primeira tela, escolha
"Banco de Dados" e avance. Na segunda tela, escolha "Conjunto de Dados".
capítulo 5 • 167
É comum encontrarmos software que nos ajudam a instalar, realizar novas configura-
ções ou criar coisas utilizando um passo a passo, como o Visual Studio faz. Em inglês,
esses guias são chamados Wizards, ou “magos”, que tornam fácil para um novo usuário
ou mesmo um experiente realizarem tarefas que podem ser complicadas. Isso é um
estilo de desenho de interfaces que busca facilitar a experiência do usuário. Você pode
incorporar essas técnicas em suas próprias interfaces. Já pensou nisso?
168 • capítulo 5
Após escolher o SQL Server como fonte de dados, basta continuar para abrir
a janela de configuração da conexão. No campo do nome do servidor é neces-
sário colocar o mesmo caminho que se utiliza para fazer login no SQL Server
Manager. Se você fez a instalação do SQL Server com as configurações padrão,
o nome do servidor será algo como "NOME_COMPUTADOR/SQLEXPRESS". No
caso da máquina usada para criar esses exemplos, o nome é "WIN7-VIRTUAL/
SQLEXPRESS", mas você deve se adaptar ao seu caso. Além disso, é necessário
escolher a forma de autenticação - se fez a instalação padrão do SQL Server,
deve deixar marcada a autenticação do Windows. Por fim, mais abaixo na jane-
la é necessário escolher o banco de dados para conexão, que no nosso caso é o
"vendas".
Figura 5.33 – Telas de conexão com o banco de dados existente, criado no Capítulo 4.
Agora há uma opção de conexão de dados com o banco de vendas. Veja que
nesse passo há um aviso sobre a segurança de transmissão de senha entre o
aplicativo e o servidor de banco de dados. Em nosso contexto, não nos preocu-
paremos com isso, pois estamos utilizando aplicativo e servidor de banco de
dados no mesmo computador, mas evite fazer esse tipo de conexão a um servi-
dor através da internet.
Nos próximos passos, aceite a cadeia de conexão padrão e, na escolha de
objetos de bancos de dados, escolha "Tabelas" e "Modos de exibição" (que são
as views). Desse modo voce terá à disposição todas as tabelas do banco de dados
de vendas para poder continuar o desenvolvimento do aplicativo.
capítulo 5 • 169
Figura 5.34 – Telas de escolha do nome da cadeia de conexão e tabelas a acessar.
170 • capítulo 5
5.2.3 Formulários para as entidades de dados
Quando se trata de desenhar interfaces para o usuário lidar com dados organi-
zados em um banco de dados, existem algumas formas básicas de design, sen-
do que as duas principais são listas e detalhes. Mesmo que as pessoas em geral
não percebam, são arquétipos bastante utilizados em interfaces:
• Listas: como o nome diz, são listas que mostram o conjunto dos dados,
como os clientes, pedidos de vendas, álbuns de música, fotos armazenadas em
uma pasta etc. Pode ser uma lista apenas em formato texto, com códigos e no-
mes, mas também, por exemplo, pode ser um conjunto de miniaturas de fotos
de um álbum;
• Detalhes: é uma tela ou janela que mostra os dados relativos a um dos
itens. Em geral, quando se clica em um item da lista, é aberta uma dela onde
podem ser editados ou apenas vistos os dados detalhados desse item.
A caixa de opções de itens para adição se abrirá. Nele, deve ser escolhido
o item Windows Form e, abaixo, o nome para a janela deve ser "Clientes.vb".
Depois de mudar o nome, clique no botão Adicionar.
capítulo 5 • 171
Figura 5.37 – Tela de opções para novo formulário. Escolha “Windows Forms”.
172 • capítulo 5
Figura 5.38 – Menu para escolha e arrastamento do controle de acesso a dados.
capítulo 5 • 173
Observe que no rodapé da área de design aparecem os vários elementos
de conexão com o DataSet, as quais são invisíveis na janela, mas estão presen-
tes no código gerado automaticamente (eles foram comendados no final do
Capítulo 4). Se a sua janela era pequena demais para todos os campos, ela deve
ter se ajustado para contê-los. Se nao gostou da aparência, arrume o layout ex-
perimentando arrastar os campos e usando as ferramentas de alinhamento na
barra superior. O ideal é deixar os campos de preenchimento de acordo com o
número de caracteres definidos na criação da tabelas de bancos de dados.
174 • capítulo 5
Figura 5.41 – Clique duas vezes no item de menu “Clientes” para editar seu código.
Figura 5.42 – Método que gerencia os eventos de clique no item de menu “Clientes”.
capítulo 5 • 175
Perceba que essa subrotina ainda está vazia, isto é, se o programa for exe-
cutado agora e o item Clientes no menu for pressionado, nada ocorre. Todo o
código que for colocado dentro dessa subrotina será executado quando hou-
ver essa seleção no menu. Portanto, adicione as duas linhas como no trecho a
seguir:
Form1.vb
Public Class Form1
Private Sub ClientesToolStripMenuItem_Click(sender As Object, e As EventArgs)
Handles ClientesToolStripMenuItem.Click
Dim ClientesForm As New Clientes
ClientesForm.Show()
End Sub
End Class
Código 5.2 – Método do item de menu “Clientes” invovando a abertura da tela criada.
176 • capítulo 5
Evento
ClientesToolStripMenuItem.Click
(envia sinal)
Handles Ações da Procedure
Procedure Dim ClientesForm As New Cliente
ClientesToolStripMenuItem_Click
(recebe sinal) ClientesForm.Show( )
capítulo 5 • 177
preenchido, ou se forem colocadas letras em um campo numérico, o Visual
Studio vai parar de executar e apresentar mensagens de erro. Nesse caso será
necessário parar o programa (botão com quadrado vermelho na barra superior)
e iniciar de novo.
Com o objetivo de verificar como fica o código do Form1 caso adicionemos
mais elementos ao programa, vamos criar uma janela do tipo "Sobre", que for-
nece ao usuário informações sobre o nome do programa, sua descrição, seu
desenvolvedor e versão atual. A partir das versões mais novas do Visual Studio,
esse tipo de informação não é mais digitado diretamente em uma janela co-
mum, mas em uma caixa de diálogo especifica que traz os dados dos meta-da-
dos do código fonte do programa.
Da mesma forma que já fez anteriormente, crie um novo Windows Form,
mas dessa vez escolha uma opção específica, do tipo "Caixa Sobre", como na
figura a seguir. O nome do form pode ser Sobre.vb.
Figura 5.45 – Tela de opções para uma nova janela. Escolha “Caixa Sobre”.
Essa caixa tem uma aparência padrão. A sua figura pode ser alterada para o
logotipo de uma empresa, por exemplo. No entanto, o texto não deve ser altera-
do manualmente, como está explicado na própria janela.
178 • capítulo 5
Figura 5.46 – Tela de desenho para a “Caixa Sobre”. Não edite o texto diretamente nela.
capítulo 5 • 179
Figura 5.48 – Tela de edição de informações sobre o Assembly.
Depois que o item de menu for criado, clique duas vezes nele. A janela com
o código do Form1 será exibida novamente, com uma subrotina pronta para ser
preenchida. O código completo está no quadro a seguir.
Form1.vb
Public Class Form1
180 • capítulo 5
ClientesForm.Show()
End Sub
End Class
Código 5.3 – Método do item de menu “Sobre” com código que inova a abertura da janela.
Perceba, portanto, que cada evento para cada controle adicionado ao Form1
terá uma subrotina dentro da classe Form1. Cada conjunto de ações é executa-
do a medida que o seu evento é disparado por uma ação do usuário. Após digi-
tar esse código, salve o projeto e o execute. Clicando no item de menu "Sobre",
o resultado será o da figura seguinte.
Figura 5.50 – Programa executando, com janela sobre aberta e informações do projeto atu-
alizadas.
capítulo 5 • 181
Agora você tem um protótipo de um programa e passamos por diversas
etapas e conceitos de desenvolvimento de um software com interface gráfica
e conexão ao um servidor de banco de dados. Sinta-se à vontade para explorar
outras características do Visual Studio e tentar modificar o programa até que
tenha algo interessante em mãos. É importante destacar que a profissão de de-
senvolvedor de software é baseada em muita pesquisa e aprendizado sobre as
ferramentas disponíveis, e que cada uma delas possui muitas especificidades.
Busque consultar guias e documentação da Microsoft e experimente bastante!
REFLEXÃO
O desenvolvimento de um software completo, que desempenha tarefas reais do dia a dia,
possui muitas partes, tanto na interface, com diversas telas para interação com o usuário,
como bibliotecas que desempenham tarefas de fundo (background), isto é, módulos e clas-
ses que realizam computações auxiliares para o programa.
O desenho ideal de janelas e instrumentos de interação com o usuário é aprendido tanto
através de experiência, testes quanto com o estudo de disciplinas de engenharia de software,
usabilidade e experiência do usuário. Os objetivos principais são que se atenda às necessi-
dades do usuário (requisitos), ainda mantendo formas fáceis, agradáveis e eficientes de uso.
ATIVIDADES
01. Explique com suas palavras o que é Programação Orientada a Eventos e como ela se
relaciona com o desenvolvimento de interfaces gráficas.
02. O que são os controles RadioButton, CheckBox e ListBox? Quais as diferenças e se-
melhanças entre eles?
03. É possível criar janelas e adicionar controles a elas apenas de forma gráfica, ou é possí-
vel também através de código? Justifique sua resposta.
182 • capítulo 5
LEITURA
Uma das melhores formas de se habituar à montagens de programas com interfaces gráficas
é seguindo guias com casos práticos. Veja esse que está disponível no MSDN. O título é em
inglês, mas a maior parte dele está traduzido:
REFERÊNCIAS BIBLIOGRÁFICAS
MSDN, Microsoft Developer Network. Visão geral dos Windows Forms. Disponível em: <https://msdn.
microsoft.com/pt-br/library/8bxxy49h.aspx>. Acesso em: 14 dez. 2014.
______. Visão geral sobre eventos (Windows Forms). Disponível em: <https://msdn.microsoft.com/
pt-br/library/1h12f09z%28v=vs.110%29.aspx>. Acesso em: 22 fev. 2015.
GABARITO
Capítulo 1
capítulo 5 • 183
recidos pela Microsoft para apoiar a programação. O Visual Studio é apenas uma uma IDE
(Integrated Development Environment), que é um programa com um ambiente que facilita a
escrita de código, mas tem como uma de suas funcionalidade principais o acesso facilitado
ao .NET Framework. O Visual Basic é apenas uma lingugem de programação, mas ela se
apoia em toda a estrutura do .NET Framework, utilizando-a como biblioteca para desenvolvi-
mento e como ferramenta para compilação e execução.
04. Para o cálculo da medida em polegadas, basta multiplicar o valor em centímetros pelo
fator de conversão
Module Module1
Sub Main()
Dim medida_centimetro As Decimal = 150
Dim medida_polegada As Decimal
Const fator As Decimal = 0.393700787
Console.WriteLine(medida_polegada)
Console.ReadKey()
End Sub
End Module
Capítulo 2
01. Um módulo é uma forma de compartimentar o código de um programa em partes que
possuem funcionalidades afins. Esse módulo pode ser composto de métodos, propriedades
e constantes e ser invocadas a qualquer momento em outras partes do código. Os módulos
podem conter classes e métodos.
Os métodos podem ser funções ou sub-rotinas que podem ser invocadas de outros mó-
dulos ou objetos com objetivo de manipular dados. As funções são trechos de código que
executam uma ou mais tarefas que podem ser chamados com ou sem parâmetros; as fun-
ções, no Visual Basic, sempre retornam valores. Ainda no VB.NET, as sub-rotinas são como
funções, mas não retornam valores.
02. Para criar um programa que acumule valores somados de uma função “soma”, é neces-
sário criar uma variável que tenha escopo no módulo e seja alterada a cada laço que chama
essa função. É possível pensar em diferentes formas de fazer esse programa.
184 • capítulo 5
1 Module Module1
2 Dim total As Integer = 0
3
4 Sub Main()
5 soma()
6 End Sub
7
8 Sub soma()
9 Dim valor As Integer
10 Do
11 Console.WriteLine("Digite um valor:")
12 valor = Console.ReadLine()
13 total = total + valor
14 If (valor <> 0) Then
15 Console.WriteLine("O total agora é: {0}", total)
16 End If
17 Loop Until (valor = 0)
18 End Sub
19
20 End Module
03. Uma estrutura de decisão é uma forma de controle de um algoritmo que pode alterar sua
sequência de execução em função de um teste lógico. O exemplo a seguir pede um número
para o usuário. se o número for par, exibe essa informação na tela do console, caso contrário,
imprime “Ímpar”. Para fazer esse teste, é necessário usar o operador Mod, para saber se a
divisão do número por 2 é igual a 0 ou 1.
1 ModuleModule1
2
3 Sub Main()
4 Dim valor As Integer
5 Console.WriteLine("Digite um número:")
6 valor = Console.ReadLine()
7
8 If (valor Mod 2 = 0) Then
9 Console.WriteLine("Par")
10 Else
11 Console.WriteLine("Impar")
12 End If
13 Console.ReadKey()
14 End Sub
15
16 End Module
capítulo 5 • 185
04. Uma estrutura de repetição é uma forma de controle que faz com que uma sequência
de código seja repetida um certo número de vezes ou até que uma determinada condição
ocorra. Uma estrutura de repetição baseada em contador permite que se determine quantas
vezes esse laço vai se repetir, independentemente de qualquer condição. Uma estrutura ba-
seada em condição não limita as repetições a uma certa quantidade, mas a que determinada
condição ocorra alterando um teste lógico que o faz parar.
Capítulo 3
01. Tratamento de exceções é a utilização de recursos que permitem capturar erros ou com-
portamentos inesperados em um programa, criando um procedimento que manipula essa
informação de erro e dê uma resposta útil para o programador e para o usuário do software.
O tratamento de exceção é importante porque assume que certa rotina pode falhar, impedin-
do que o programa trave, feche ou não execute apropriadamente, fornecendo invormações
relevantes sobre a ocorrência.
02. As váriáveis precisam ser todas decimais, ou haverá um outro erro de tipo que terá que
ser tratado também.
1 Module Module1
2
3 Sub Main()
4 Dim valor1, valor2, resultado As Decimal
5 Console.WriteLine("Forneça o primeiro número:")
6 valor1 = Console.ReadLine()
7 Console.WriteLine("Forneça o segundo número:")
8 valor2 = Console.ReadLine()
9
10 Try
11 resultado = valor1 / valor2
12 Console.WriteLine("Divisão dos valores = {0}", resultado)
13 Catch ex As DivideByZeroException
14 Console.WriteLine("O segundo valor não pode ser zero!")
15 End Try
16 Console.ReadKey()
17 End Sub
18
19 End Module
20
186 • capítulo 5
03. Classes são trechos de código compartimentados que constituem construções ou mo-
delosdos quais podem ser gerados objetos; as classes apresentam atributos e comporta-
mentos para as entidades representadas pelos objetos. Por sua vez, os objetos são instâncias
criadas pelas classes, os quais podem efetivamente ser manipulados pelo programa.
As propriedades de objetos são variáveis em seu escopo, as quais armazenam dados
a seu respeito e que os caracterizam individualmente. Métodos são funções ou sub-rotinas
que manipulam dados no escopo de objetos e são uma forma de alterar suas propriedades.
04. Para esse exercício, é encessário criar a classe retângulo com suas propriedades e seu
método. Na sub-rotina Main, deve-se criar uma instância do retângulo e usar o texto digitado
pelo usuário como argumento para o método mudar_cor(). Com isso feito, o objeto retangu-
lo1 passa a ter o atributo digitado.
1 ModuleModule1
2
3 Sub Main()
4 Dim retangulo1 As New Retangulo
5
6 Console.WriteLine("Qual deve ser a cor do retângulo?")
7 retangulo1.mudar_cor(Console.ReadLine())
8 Console.WriteLine("A cor do retângulo agora é {0}", retangulo1.cor)
9 Console.ReadKey()
10 End Sub
11
12 Public Class Retangulo
13
14 Public Property base As Decimal
15 Public Property altura As Decimal
16 Public Property cor As String
17
18 Public Sub mudar_cor(ByVal nova_cor As String)
19 Me.cor = nova_cor
20 End Sub
21
22 End Class
23
24 End Module
capítulo 5 • 187
Capítulo 4
01. A linguagem padrão para manipulação de bancos de dados é o SQL (Strucured Query
Language). Ela é uma lingugem declarativa, com a qual o programador não necessita esta-
belecer o algoritmo de filtragem e cruzamento de dados para obter o que precisa. Os meca-
nismos de bancos de dados usam a declaração feita com o SQL para realizar matemática
relacional e tornam a busca e gravação de dados no BD bastante rápidas.
02. Um SGBD com a arquitetura cliente-servidor é aquele em não é embutido nos softwares
que o utilizam. Eles são centralizados, geralmente em uma rede, e os diversos dispositivos
com seus aplicativos se conectam a eles para obter dados. A pricipal característica é essa
divisão entre aplicativos clientes e o servidor de dados, que costuma ficar em um computador
separado. A recepção e transmissão de dados se dá por protocolos de rede.
03. Os comandos para criação de um banco de dados padrão é bastante simples:
CREATE DATABASE concessionaria
A criação de uma tabela necessita a definição dos tipos de dados de cada um de seus cam-
pos. O campo ID serve para identificação única, mas nesse caso a chave primária pode ser o
número de chassi. Quanto ao “ano”, não é necessário usar o tipo data. De forma geral, outros
tipos e tamanhos podem ser utlizados ao invés dos que estão a seguir.
04. Uma view é uma espécie de tabela virtual, a qual pode resultar da consulta de uma ou
mais tabelas conjuntas, com cruzamento de dados. A vantagem de uma view é que ela pode
ser registrada no banco de dados, de forma que possa ser consultada como qualquer outra
tabela, não utilizando espaço adicional. Ela é otimizada pelo SGBD, tornando-se mais rápida
para consultas com JOIN que são frequentemente realizadas. As views também constituem
uma camada de dados que simplifica as buscas realizadas pelo aplicativo final, facilitando
seu desenvolvimento.
Capítulo 5
188 • capítulo 5
01. A Programação Orientada a Eventos permite que multiplas formas de interação com
o software estejam à disposição do usuário. Na interação por interface de texto há apenas
um evento, que é através da entrada de dados pelo teclado. Na interface gráfica, há vários
elementos, como botões, janelas, caixas de textos e controles em geral. Cada interação com
um elemento gráfico gera um evento, para o qual o computador pode ser programado para
responder. O evento gera um sinal, o programa captura esse sinal e responde com uma ação
apropriada.
02. Os controles RadioButton são aqueles que permitem o usuário escolher uma alternativa
entre um grupo pré-determinado, isto é, são opções mutuamente exclusivas. Os controles
CheckBox podem pertencer a uma mesmo grupo também, mas permitem que o usuário
escolha e marque mais de uma opção de dado ao mesmo tempo. As ListBox são lista de
opções que podem ter seu comportamento alterado, podendo ser mutuamente exclusivas
ou não.
03. É possível também adicionar janelas e controles a uma interface gráficas apenas através
de código, sem necessitar arrastar ícones a uma área de desenho. Apesar de a construção
de interfaces ser facilitada pela forma gráfica, em algumas situação pode ser interessante
fazê-lo através de código, principalmente para um programador experiente no framework.
Na verdade, quando construímos interfaces de forma gráfica, o que a ferramenta de design
faz, como o Visual Studio, é transformar aquele layout em um código, o qual poderia ser feito
sem sua ajuda.
capítulo 5 • 189
ANOTAÇÕES
190 • capítulo 5
ANOTAÇÕES
capítulo 5 • 191
ANOTAÇÕES
192 • capítulo 5