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.

  1. Criando Classes no Visual Basic 6.0

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:

  1. Salvar o seu estado ( Altura , Largura , titulo , etc...)

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

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 :

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 :

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 :

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
'
' A classe Conta Bancaria
'

Private mdblSaldo As Double
Private mdblTaxaInvestimento As Double

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 :
  • txtPeriodo - indica o período da aplicação em meses
  • cboMesInicio - indica o número do mês de inicio da aplicação
  • txtTaxa - O valor da taxa de investimento
  • txtAplicacao - O valor da aplicação
  • txtSaque - informa o valor do saque mensal
  • txtSaldo - informa o valor da aplicação mensal calculada com a taxa de investimento
  • command1 - exibe o saldo mensal
  • command2 - Sair

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.AddItem i
Next

cboMesInicio.ListIndex = 0
End Sub

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:


José Carlos Macoratti