Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
No prximo passo, o instalador nos informa quais so os componentes do Visual C# que sero
instalados no computador.
O primeiro programa em C#
Agora que j instalamos o Visual C#, vamos criar nossa primeira aplicao.
Abra o Visual C# 2010 e aperte Ctrl+Shift+N.
Na janela de novo projeto, escolha a opo Windows Forms Application e d um nome para
o seu projeto inicial. O Visual Studio criar automaticamente um projeto com uma janela vazia.
Queremos inicialmente colocar um boto no formulrio que, quando clicado, abrir uma caixa de
mensagem do Windows.
Para criar o boto, precisamos apenas usar o atalho Ctrl+W, X e arrastar um button para o
formulrio.
Agora d um clique duplo no boto que acabamos de adicionar para programarmos o que deve
acontecer quando o boto for clicado. O Visual Studio abrir o cdigo do formulrio. No se
preocupe com todo o cdigo complicado que est escrito nesse arquivo, entenderemos o
significado de cada uma dessas linhas mais a frente no curso.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;
namespace form
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
15
16
17
18
19
20
21
22
23
Todo cdigo que for colocado dentro das chaves ser executado quando o boto for clicado.
No clique do boto, queremos executar o comando que mostra uma caixa de mensagens para o
usurio.
1
MessageBox.Show(mensagem)
No C#, todo comando deve ser terminado pelo caractere ';'. Portanto, o cdigo para mostrar a
caixa de mensagem fica da seguinte forma:
1
MessageBox.Show(mensagem);
Queremos que, ao clicar no boto, a mensagem Hello World seja exibida em uma caixa de
mensagens. Ento, utilizaremos o seguinte cdigo:
1
2
3
4
Como a mensagem somente um texto, o compilador do C# nos fora a coloc-la entre aspas
duplas. Portanto, o cdigo do clique do boto ficar assim:
1
2
3
4
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using
using
using
using
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;
namespace form
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello World");
}
}
}
No se preocupe com as linhas de cdigo que no foram explicadas. Entenderemos o que elas
fazem durante o curso.
Aperte F5 para executar o cdigo do formulrio. O resultado deve ser algo parecido com a
imagem abaixo:
Na maioria dos programas que escrevemos, no estamos interessados em apenas mostrar uma
caixa de mensagens para o usurio. Queremos tambm armazenar e processar informaes.
Em um sistema bancrio, por exemplo, estaramos interessados em armazenar o saldo de uma
conta e o nome do correntista. Para armazenar esses dados, precisamos pedir para o C#
reservar regies de memria que sero utilizadas para armazenar informaes. Essas regies de
memria so conhecidas como variveis.
int numeroDaConta;
Repare no ';' no final da linha. Como a declarao de uma varivel um comando da linguagem
C#, precisamos do ';' para termin-lo.
Alm do tipo int (para representar inteiros), temos tambm os tipos double e float (para nmeros
reais), string (para textos), entre outros.
Depois de declarada, uma varivel pode ser utilizada para armazenar valores. Por exemplo, se
estivssemos interessados em guardar o valor 1 na varivel "numeroDaConta" que declaramos
anteriormente, utilizaramos o seguinte cdigo:
1
numeroDaConta = 1;
Depois de realizar o saque, queremos mostrar para o usurio qual o saldo atual da conta. Para
mostrarmos essa informao, utilizaremos novamente o MessageBox.Show:
MessageBox.Show("O saldo da conta aps o saque : " + valorAposSaque);
1
if (condicao)
{
// Esse cdigo ser ser executado somente se a condio for verdadeira
}
No nosso exemplo, queremos executar a lgica de saque apenas se o saldo for maior ou igual ao
valor do saque:
1
2
3
4
5
6
O cdigo do saque deve diminuir o saldo da conta e mostrar uma mensagem para o usurio
indicando que o saque ocorreu com sucesso:
1
2
3
4
5
6
7
Repare que, se a conta no tiver saldo suficiente para o saque, o usurio no avisado. Ento
estamos na seguinte situao: "Se a conta tiver saldo suficiente, quero fazer o saque, seno,
quero mostrar a mensagem Saldo Insuficiente para o usurio". Para fazer isso, podemos usar
o else do C#:
1
2
3
4
5
6
7
Tambm podemos realizar algumas operaes com valores do tipo bool. Podemos, por
exemplo, verificar se duas condies so verdadeiras ao mesmo tempo usando o
operador && (AND):
1
Assim, podemos construir condies mais complexas para um if. Por exemplo, podemos usar a
varivelrealmentePodeSacar declarada acima no if que verifica se o cliente pode sacar ou
no:
1
2
3
4
5
6
7
8
if (realmentePodeSacar)
{
// cdigo do saque
}
else
{
MessageBox.Show("Saldo Insuficiente");
}
um determinado bloco de cdigo at que uma condio seja satisfeita. Essa estrutura recebe o
nome de loop.
Para fazer um loop no c#, utilizaremos, inicialmente, a instruo for. O for uma instruo que
possui trs partes:
- A primeira parte a inicializao, onde podemos declarar e inicializar uma varivel que ser
utilizada no for;
- A segunda parte a condio do loop. Enquanto a condio do loop for verdadeira, o loop
continuar executando;
- A terceira parte a atualizao, onde podemos atualizar as variveis que so utilizadas pelo for
Cada uma das partes do for separada por um ;
1
2
3
4
Veja o cdigo abaixo, por exemplo, onde usamos um for que repetir o clculo 12 vezes:
1
2
3
4
5
6
Veja que nosso for comea inicializando a varivel i com 1 e repete o cdigo de dentro dele
enquanto o valor de i for menor ou igual a 12, ou seja, ele s para no momento em que i for
maior do que 12. E veja que, a cada iterao desse loop, o valor de i cresce (i += 1). No fim, o
cdigo de dentro do for ser repetido 12 vezes, como precisvamos.
O mesmo programa poderia ser escrito utilizando-se um while, em vez de um for:
1
2
3
4
5
6
7
8
Neste momento, queremos representar diversas contas em nosso banco. Uma conta bancria
geralmente composta por um nmero, nome do titular e saldo. Podemos guardar essas
informaes em variveis:
1
2
3
int numeroDaConta1 = 1;
string titularDaConta1 = "Joaquim Jos";
double saldoDaConta1 = 1500.0;
int numeroDaConta2 = 2;
string titularDaConta2 = "Silva Xavier";
double saldoDaConta2 = 2500.0;
Sempre que formos criar um novo correntista, precisamos lembrar de criar essas 3 variveis.
Ento, por que no criamos um "modelo" para isso? Ou seja, dizemos apenas ao nosso programa
que queremos criar uma "Conta" e ele se encarrega de criar essas 3 variveis automaticamente?
Para fazer isso, criaremos o que conhecido por classe. Uma classe representa uma entidade,
um conceito de domnio da nossa aplicao. Vamos representar uma Conta (em um arquivo
Conta.cs). Ela tem nmero, nome do titular e saldo:
1
2
3
4
5
6
class Conta
{
public int numero;
public string titular;
public double saldo;
}
Repare na sintaxe. Para cada atributo, definimos seu tipo e seu nome. Tambm precisamos
colocar a palavra public na frente de cada atributo para que possamos acess-lo de fora dessa
classe.
Podemos agora criar infinitas Contas, e todas elas tero nmero, titular e saldo. Vamos
experimentar.
Para criar uma nova Conta, basta usarmos a palavra new e guardarmos o resultado em uma
varivel:
1
Com essa instncia de Conta em mos (umaConta), podemos modificar os valores dos
atributos:
1
2
3
4
Muito mais prtico! Resumindo, uma classe nos ajuda a centralizar todas as informaes de
nossas entidades, facilitando a reutilizao dela!
Veja como ficou a memria: temos dois objetos (ou instncias) e duas referncias
(umaConta e outraConta) que apontam para esses objetos. Repare que umaConta no um
objeto, mas sim uma referncia (uma seta) para o objeto! O objeto o que est na memria.
Agora vamos analisar um outro exemplo: a transferncia de dinheiro entre duas contas, isto ,
pegar o dinheiro de uma instncia e passar para a outra.
1
2
3
4
5
6
7
8
9
10
Veja que a implementao de uma transferncia bem simples! Agora, sempre que precisarmos
transferir dinheiro em nosso sistema, basta colocarmos essas 3 linhas de cdigo. Mas ser que
isso pode virar um problema? Sempre que precisarmos fazer uma transferncia, so apenas 3
linhas de cdigo!
O problema aparece quando precisamos dar manuteno nesse cdigo. Imagine que a regra de
negcio mude e toda transferncia passe a custar R$0,10. Ou seja, em uma transferncia de R$
10,00, a conta origem perder R$ 10,10.
Imagine em quantos pontos diferentes precisaremos mudar isso. Ser que saberemos todos
esses pontos? Ser que os encontraremos de maneira fcil? Um bom design orientado a objetos
aquele que facilita as alteraes, a sua manuteno.
Uma soluo para isso colocar esse comportamento em algum lugar que seja fcil de ser
encontrado e de ser reutilizado. Um bom lugar para ele dentro da prpria classe Conta. Uma
classe pode conter, alm de atributos, mtodos que manipulam esses atributos.
Vamos comear por um comportamento mais simples: um saque. Em uma operao de saque,
devemos receber o valor a ser sacado. Veja o mtodo Saca, dentro da classe Conta. Ele recebe
um parmetro do tipo double:
1
2
3
4
5
6
7
8
9
10
class Conta
{
public int numero;
public string titular;
public double saldo;
public void Saca(double valorASerSacado) {
}
}
1
2
3
Repare o uso do this. Estamos dizendo que saldo um atributo da classe. Observe tambm o
uso do public para que possamos chamar esse mtodo em outros trechos de cdigo. Vamos
fazer uso desse nosso novo comportamento:
1
2
3
4
Veja que repetimos a varivel "mauricio" duas vezes. Como nossos mtodos so sempre
disparados a partir de instncias de objetos (mauricio.Transfere(..), por exemplo), no
precisamos da origem: a origem o prprio objeto!
1
2
3
4
Veja o cdigo acima: tiramos do saldo desse (this) objeto e repassamos para o outro. Para
experiment-lo, podemos fazer:
1
2
3
4
Podemos melhorar ainda mais esse cdigo. Veja que acabamos de escrever um trecho de cdigo
repetido, pois a linhathis.saldo -= valor; exatamente o mtodo Saca(). Vamos
reutilizar esses mtodos:
1
2
3
4
Veja que agora estamos produzindo cdigo orientado a objetos. Dados e comportamentos devem
viver perto. Se um dia a regra de negcio de transferncia mudar, mudaremos apenas dentro do
mtodo Transfere(), e essa mudana ser automaticamente propagada para todas as
transferncias.
Quando abrimos uma conta no banco, temos que fornecer uma srie de informaes: nome, cpf, rg e
endereo.
Vimos que quando queremos armazenar informaes em uma classe, devemos criar atributos. Mas em qual
classe colocar esses novos atributos? Claramente essas informaes no pertencem a uma conta. Esses dados
pertencem ao titular da conta, ou seja, essas informaes pertencem ao cliente do banco.
Ento devemos armazen-las em uma classe Cliente.
1
class Cliente
2
{
3
public string nome;
public string cpf;
4
public string rg;
5
public string endereco;
6
}
7
Sabemos tambm que toda conta est associada a um cliente, ou seja, a conta guarda uma referncia ao
cliente associado.
class Conta
1
{
2
// outros atributos da Conta
3
4
public Cliente cliente;
5
6
7
8
// comportamentos da conta
}
Agora, quando vamos criar uma conta, podemos tambm colocar um cliente.
1
2
3
4
5
Vimos tambm que a varivel cliente guarda uma referncia(seta) para uma instncia de Cliente(objeto na
memria). Logo, a atribuio umaConta.cliente = victor est copiando a referncia da varivel victor
para o atributo cliente.
Podemos modificar os atributos do cliente atravs da referncia guardada no atributo cliente da Conta.
1
2
3
4
5
6
7
8
9
At o momento, ns temos duas classes que representam o nosso sistema: Conta e Cliente.
1
2
3
4
5
6
class Conta
{
public int numero;
public double saldo;
public Cliente cliente;
}
1
2
3
4
5
6
7
class Cliente
{
public string
public string
public string
public string
}
nome;
cpf;
rg;
endereco;
Com base nessas duas classes, vamos por a mo na massa novamente. Lembre-se de escrever
o cdigo mais bonito que conseguir e de testar o seu programa antes de enviar!