VB5/VB6 - Pondo em prática a Programação orientada a objetos
Com a chegada da plataforma .NET , e , mais especificamente do VB .NET , ventos novos estão soprando. Agora o VB .NET tem todo o suporte de uma linguagem orientada a objetos. Você então deve ficar esperto e correr atrás do prejuízo se ainda não manja nada de conceitos sobre orientação a objetos. Se você quiser ser um bom programador na plataforma .NET vai ter que ter um base sólida em orientação a objeto.
Este artigo é para quem esta usando ainda o VB5 ou VB6 e precisa aprender a aplicar os conceitos da orientação a objetos na prática. Nada melhor do que começar com a linguagem que você domina. Embora o VB5 e VB6 não sejam realmente linguagens orientadas a objeto (falta a herança) podemos usá-las para assimilar os conceitos da orientação a objetos sem problemas. Com estes conceitos vai ficar mais fácil para você entender melhor a plataforma .NET.
Eu já abordei o assunto em alguns artigos , abaixo o artigo que fala sobre isto no VB6. Dê uma olhada para rever os conceitos básicos que eu não vou repetir aqui a fundo.
Neste artigo , após uma pincelada em alguns conceitos básicos vou mostrar como aplicar estes conceitos em uma aplicação prática que pode ser feita no VB5 ou VB6. Vamos lá...
Definição de um objeto
Mas afinal o que é um objeto ?
De forma genérica "um objeto é uma descrição de qualquer coisa que exista dentro do nosso ambiente de estudo". Quando nos restringimos ao mundo da programação um objeto pode ser definido como "uma entidade que possui a capacidade de reter o seu estado (informação) e o que oferece um certo número de operações (comportamento) para examinar ou afetar este estado"
Para a coisa ficar mais real para você que é um programador VB vamos levar estes conceitos ao mundo VB. Se você já desenvolveu qualquer aplicação VB provavelmente já trabalhou com formulários e controles . Pois bem , se já fez isto , já trabalhou com objetos. Se você considerar um formulário VB vai perceber que ele é um objeto. Quanto o formulário esta em execução no seu projeto VB ele esta apto a:
Salvar o seu estado ( Altura , Largura , titulo , etc...)
Oferecer operações ( Show , Hide , Unload , etc... )
Podemos dizer então que um objeto tem a capacidade de oferecer uma interface de programação ( API ). Para um objeto isto consiste em:
Propriedades - a capacidade de definir e/ou obter um valor do estado referenciado por um objeto.( Ex: form1.width )
Métodos - rotinas disponíveis que permitem o processamento no interior do objeto.(Ex: form1.show , form1.hide)
Definição de Classe
Uma classe é a descrição ou um modelo para um objeto. Para que um objeto exista deve existir uma classe com as definições pertinentes ao objeto. A classe 'gera' o objeto. (Pense na classe como um carimbo , e, em cada figura gerada pelo carimbo como um objeto da classe)
"Um objeto é então uma instância de uma classe , e , uma classe é um tipo a partir do qual podemos gerar muitas instâncias de objetos."
Vamos fazer uma analogia com o mundo real:
Quando você entra no seu carro e coloca o chave no contato para dar a partida e sair você não precisa saber nada sobre como o motor do carro vai funcionar . O automóvel fornece uma interface através da qual você interage com o motor e os demais itens. Você só precisa conhecer a interface : ligar a chave , pisar no freio, ligar as luzes , os faróis , etc.. Neste sentido o carro é um objeto que oferece propriedades (velocidade , nível de combustível, etc) e métodos (dar partida , frear, ligar , etc).
Podemos dizer então que uma classe para representar um objeto deve ter as seguintes características :
Fornecer uma interface bem definida com o usuário que permitam a realização de operações válidas com o objeto
Ser tão completa quanto possível sem precisar invocar rotinas externas para operar com o objeto
Ser robusta de forma rejeitar operações ilegais ou incorretas.
Colocando em prática
Vamos agora criar um projeto em VB com os conceitos acima descritos . Como você deve saber o VB permite que criemos módulos de classe em nosso projetos , mas apenas incluir um módulo de classe no projeto não tornará nossa aplicação orientada a objetos. Temos que modelar e ter um bom desenho do projeto. Com isto estou querendo dizer que você deve ter uma compreensão correta do problema e do projeto e para isto você deve entender o seguinte :
Quais são os objetos no sistema
Quais são os relacionamentos entre os objetos
Quais são as interações entre os objetos
Vamos então criar um projeto no VB que permita o cálculo de uma aplicação financeira onde iremos fornecer a taxa de juros , o período , a aplicação etc.. e iremos obter o resultado do investimento.
Estamos falando de uma aplicação financeira e para isto devemos ter uma conta bancária , quando pensamos em aplicações e conta bancária no vem a mente o seguinte :
Saldo
Taxa de investimento
Deposito
Saque
cálculo investimento
Agora temos que identificar as propriedades e métodos que devermos criar.
1- Inicie um novo projeto Standard EXE Visual Basic e chame-o de : AplicaçãoFinanceira.
2- Agora inclua um módulo de classe a partir do menu : Project | Add Class Module e chame-o de : cContaBancaria
3- Inclua a instrução Option Explicit no início do módulo de classe e defina as variáveis mdblSaldo e mdblTaxaInvestimento como abaixo:
Option Explicit |
4- Agora vamos definir a rotina - Class_Initialize - que será executada toda vez que o objeto da classe cContaBancaria for instanciado . Podemos dizer que esta rotina é o construtor da classe pois nela iremos atribuir valores iniciais para as variáveis e métodos da classe :
Private Sub
Class_Initialize() ' ' O evento Initialize é a primeira rotina que será chamada ' quando você criar um objeto cContaBancaria ' equivale ao construtor no VB .NET , Java ' ' Ex. Set octaBco = New cContaBancaria mdblSaldo = 0 Me.TaxaInvestimento = 0 End Sub |
5- A rotina - Class_Terminate - esta definida abaixo
Private Sub
Class_Terminate() ' a rotina Class_Terminate é chamada quando o objeto é destruído ou desalocado da memória End Sub |
6- Agora vamos criar a propriedade - Saldo - que permite obter o saldo da conta. Esta propriedade é somente leitura pois não temos uma propriedade Let que permita atribuir valores ao saldo.
Public
Property Get Saldo() As Double ' retorna o saldo da conta Saldo = mdblSaldo End Property |
7- Abaixo a propriedade Get TaxaInvestimento que retorna à taxa
Public
Property Get TaxaInvestimento() As Double ' Retorna a taxa de investimento TaxaInvestimento = mdblTaxaInvestimento End Property |
8 - A propriedade Let TaxaInvestimento permite atribuir um valor à taxa.
Public
Property Let TaxaInvestimento(ByVal dblNovoTaxaInvestimento As Double) ' verifica se a taxa de investimento é válida If dblNovoTaxaInvestimento < 0 Then Err.Raise vbObjectError + 2001, "Conta Bancaria::TaxaInvestimento", "Definição de taxa inválida : " & dblNovoTaxaInvestimento End If ' Define a taxa mdblTaxaInvestimento = dblNovoTaxaInvestimento End Property |
Passemos agora aos métodos da classe. Iremos ter os seguintes métodos : Saque , Deposito , CalculoInvestimento e ProcessamentoMensal.
9- O método Saque permite realizar um saque na conta. O método faz um verificação para não permitir valores menores que zero e também verifica se a conta tem fundos.
Public Sub
Saque(ByVal dblValor As Double) ' efetua o saque da conta ' faz primeiro a verificação If dblValor < 0 Then Err.Raise vbObjectError + 2002, "Conta Bancaria::Saque", "Valor de saque inválido : " & dblValor End If If (mdblSaldo - dblValor) < 0 Then Err.Raise vbObjectError + 2003, "Conta Bancaria::Saque", "Insuficiência de fundos" End If 'Calcula o saldo mdblSaldo = mdblSaldo - dblValor End Sub |
10- O método - Deposito - permite efetuar depósitos na conta não permitindo depósitos de valores negativos
Public Sub
Deposito(ByVal dblValor As Double) ' efetua deposito na conta ' faz primeiro uma verificacao If dblValor <= 0 Then Err.Raise vbObjectError + 2002, "Conta Bancária::Depósito", "Valor de depósito inválido : " & dblValor End If mdblSaldo = mdblSaldo + dblValor End Sub |
11- O método - CalculoInvestimento - apenas calcula o valor do investimento usando a taxa de investimento mensal.
Private Sub
CalculoInvestimento() ' esta rotina é privada para não permitir que programas externos ' atualizem o saldo . A atualização somente é possivel pela interface do programa ' Atualiza o saldo com a taxa mensal mdblSaldo = mdblSaldo + (mdblSaldo * (mdblTaxaInvestimento / 100)) End Sub |
12 - O método - ProcessamentoMensal - apenas invoca o método cálculo de investimento.
Public Sub
ProcessamentoMensal() ' Remove o recebimento mensal do saldo ' da conta e então atualiza o saldo com a taxa de lucro CalculoInvestimento End Sub |
Com isto acabamos de concluir o código da classe cContaBancaria. Nele definimos as propriedades : Saldo , TaxaInvestimento e os métodos : Saque , Deposito , CalculoInvestimento e ProcessamentoMensal.
Testando a classe cContaBancaria
Vamos agora testar a classe criada. Para isto vamos incluir um formulário - frmContaBancaria - no projeto com o seguinte layout:
- Controles
usados no formulário :
|
No evento Load do formulário temos o código que carrega a combobox - cboMesInicio - com os números de 1 a 12 referentes a cada mês do ano.
Private Sub
Form_Load() Dim i As Integer For i = 1 To 12 cboMesInicio.ListIndex = 0 |
A seguir o código do evento Click do botão de comando - command1 - é que vai fazer todo o serviço.
Private Sub
Command1_Click() Dim oContaBancaria As cContaBancaria Dim lmes As Long On Error GoTo vbErrorHandler Set oContaBancaria = New cContaBancaria txtSaldo.Text = "" oContaBancaria.TaxaInvestimento = CDbl(txtTaxa.Text) oContaBancaria.Deposito CDbl(txtAplicacao.Text) For lmes = (cboMesInicio.Text) To CInt(txtPeriodo.Text) oContaBancaria.Saque CDbl(txtSaque.Text) oContaBancaria.ProcessamentoMensal txtSaldo.Text = txtSaldo.Text & MonthName(lmes) & vbTab & " Saldo = " & Format(oContaBancaria.Saldo, "$#,##0.00;($#,##0.00)") & vbCrLf Next Exit Sub vbErrorHandler: MsgBox Err.Number & " - " & Err.Description, vbOKOnly, Err.Source End Sub |
Declaramos a variável - oContaBancaria - que irá fazer referência a classe cContaBancaria e a variável lmes que irá ser usada no laço for/next
A declaração - Set oContaBancaria = New cContaBancaria - cria uma instância do objeto oContaBancaria a partir da classe cContaBancaria
oContaBancaria.TaxaInvestimento = CDbl(txtTaxa.Text)
- atribui a taxa de investimento a propriedade -
TaxaInvestimento - informada no formulário
oContaBancaria.Deposito CDbl(txtAplicacao.Text) - atribui o valor da
aplicação via método - Deposito - informada no
formulário.
O laço for/next abaixo atribui o valor do saque via método Saque do objeto oContaBancaria e invoca o método ProcessamentoMensal que realiza o calculo do investimento.
For lmes =
(cboMesInicio.Text) To CInt(txtPeriodo.Text) oContaBancaria.Saque CDbl(txtSaque.Text) oContaBancaria.ProcessamentoMensal txtSaldo.Text = txtSaldo.Text & MonthName(lmes) & vbTab & " Saldo = " & Format(oContaBancaria.Saldo, "$#,##0.00;($#,##0.00)") & vbCrLf Next |
A linha de código:
txtSaldo.Text = txtSaldo.Text & MonthName(lmes) & vbTab & " Saldo = " & Format(oContaBancaria.Saldo, "$#,##0.00;($#,##0.00)") & vbCrLf
exibe o valor do investimento calculado para cada mês.
Gostou !! acabamos de criar uma classe para calcular o valor de investimento mensal a uma taxa de juros num dado período. Instanciando o objeto oContaBancaria e através dele usamos as propriedades e métodos da classe em um formulário VB para obter o resultado.
Até o próximo artigo VB .NET
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#