An Introduction To Object Orientated Programming with VB4/5/6

Introduction

This is the first in a series of Object Orientated Programming (OOP) tutorials using Visual Basic. This first part introduces you to the concepts behind OOP and explains objects as they are used in Visual Basic.


Definition of an Object

It seems that there is no one definition of an object that developers and designers can agree on. Possibly the one that is nearest to the mark is :

"An object is an entity able to save a state (information) and which offers a number of operations (behaviour) to either examine or affect this state"

(From Jacobson: Object Orientated Software Engineering)

That's all very well, but what does that mean to a VB Programmer ? If you've ever written a Visual Basic program with a form or controls, then you've already had a quick taste of objects. Consider a Visual Basic Form - a form is an object that VB knows about. Once a form is running in your program, it is able to :

  • Save a State (eg. Height, Width, Caption etc)
  • Offer a number of operations (eg. Show, Hide, etc)

An object is supposed to offer a programmer or another program, an Application Programming Interface (API). For an object, this consists of :

  • Properties - the ability to set and get 'state' values referenced by the object (eg. Form1.Height etc)
  • Methods - the routines available from the object that allow some kind of processing to take place within the object (eg. Form1.Show, Form1.Hide etc)

Definition of a Class Module

A class module is simply a description or a 'blueprint' of an Object. For example :

  • My telephone call to my mechanic on 20th February 2000
  • My telephone call to a scrapyard on 21st February 2000

- These could both be called Instances of the class Telephone Call

Remember

An object is an instance of a class - whereas a class is a type of which there maybe many instances of objects


Thinking about objects

Let's consider how we can perceive a real-world object.

When I get into my car in the morning to drive to work, I place my key in the ignition to start the engine and (hopefully) drive to work carefree. I don't need to know about the internal combustion engine to drive my car, nor do I need to understand how the wiring works in order to operate my lights and indicators. The car can be said to provide an Interface that I need to know about (and a separate interface for those brave enough to look under the bonnet). My car can be though of as an object that offers properties (current speed, fuel level, oil level etc) and methods (start-engine, stop engine etc).


Signs of a 'good' Object

A class representing an object should :

  • Provide a well-defined API - this should provide external software / programmers with the ability to perform valid operations with the object.
  • Be as complete as possible - the programmer shouldn't have to call external routines in order to 'do something' with the object
  • Be Robust - a class should reject illegal or incorrect input. For instance, my 'car' object shouldn't allow me to try and change into sixth gear, nor should it allow me to us the 'driving' method before the 'start-engine' method has been called


Real World VB Object Programming

Now that you have a better understanding of the concepts behind Object Orientated Programming, let's move onto a Visual Basic example. Since VB4, developers have been able to add class modules to their projects. While a lot of people assume that just adding a class to your program makes it Object Orientated, the program is doomed to failure unless there is a good design for the system.

A good design comes from a good understanding of the problem / project domain - you need to fully understand :

  • What are the objects in the system
  • What are the relationships between the objects
  • What are the interactions between the objects

For our VB example, we'll take a 'Bank Account' real world object and create a Visual Basic class that models it's real-world behaviour.

When we think about a Bank Account, we think of it as having :

  • A Balance
  • An Interest Rate
  • A monthly Fee
  • A customer
  • The ability to accept a deposit of funds
  • The ability to allow a withdrawl of funds
  • The ability to calculate interest

Hopefully, you'll have read through the above list and already identified what are the properties and methods of the class module we are about to create. Let's jump straight into the Visual Basic IDE and start creating our project.

Create a standard VB EXE project, call it prjBankAccount1 . Next, add a class module to the project and call it cBankAccount .

The cBankAccount class is listed below - notice how when the 'cBankAccount' object is instantiated (ie. Set o = New cBankAccount), the class uses it's own internal properties to set the internal varables. This ensures that errors are caught right from the start.


option Explicit
'
' Bank Account Class
'
private mdblBalance as Double
private mdblInterestRate as Double
private mdblMonthlyFee as Double
'
private Sub Class_Initialize()
'
' Class Initialize is the first routine
' called when you create a 'cBankAccount'
' object.
'
' Eg. set oBA = new cBankAccount
'
    mdblBalance = 0
    me.InterestRate = 1.75
    me.MonthlyFee = 5
'
End Sub
'
private Sub Class_Terminate()
'
' Class_Terminate is called when you
' set the object to nothing (or it falls out of scope)
'
End Sub
'
public property get Balance() as Double
'
' Return the Balance of this account
'
    Balance = mdblBalance
'
End property
'
public property get InterestRate() as Double
'
' Return the interest rate
'
    InterestRate = mdblInterestRate
'
End property
'
public property let InterestRate(byval dblNewInterestRate as Double)
'
' Check for invalid interest rates
'
    If dblNewInterestRate < 0 then
        Err.Raise vbObjectError + 2001, _
            "cBankAccount::InterestRate", _
            "Invalid Interest Rate set : " & dblNewInterestRate
    End If
'
' Now set the rate
'
    mdblInterestRate = dblNewInterestRate
End property
'
public property let MonthlyFee(byval dblNewFee as Double)
'
' Check for invalid Fee
'
    If dblNewFee < 0 then
        Err.Raise vbObjectError + 2003, _
            "cBankAccount::MonthlyFee", _
            "Invalid Fee Amount : " & dblNewFee
    End If
'
    mdblMonthlyFee = dblNewFee
'
End property
'
public Sub MonthlyProcessing()
'
' This routine takes the monthly fee
' from the account, then updates the
' balance with interest earned.
'
    CalcFee
    CalcInterest
'
End Sub
'
public Sub Withdraw(byval dblAmount as Double)
'
' Withdraw some money from the account
'
' Sanity check first !
'
    If dblAmount <= 0 then
        Err.Raise vbObjectError + 2002, _
            "cBankAccount::Withdraw", _
            "Invalid Withdraw amount : " & dblAmount
    End If
    
    If (mdblBalance - dblAmount) < 0 then
        Err.Raise vbObjectError + 2003, _
            "cBankAccount::Withdraw", "Insufficient Funds"
    End If
    
    mdblBalance = mdblBalance - dblAmount
End Sub
'
public Sub Deposit(byval dblAmount as Double)
'
' Deposit some money to the account
'
' Sanity check first
'
    If dblAmount <= 0 then
        Err.Raise vbObjectError + 2002, _
            "cBankAccount::Deposit", _
            "Invalid deposit amount : " & dblAmount
    End If
'
    mdblBalance = mdblBalance + dblAmount
'
End Sub
'
private Sub CalcFee()
'
' This routine removes the monthly fee
' from the balance
'
    mdblBalance = mdblBalance - mdblMonthlyFee
'
End Sub
'
private Sub CalcInterest()
'
' This is private, as we don't want
' other programs / programmers updating
' the balance except through the
' proper interfaces
'
' The calculation updates the balance with the monthly interest
' due
'
    
    mdblBalance = mdblBalance + _
        (mdblBalance * (mdblInterestRate / 120))
'
End Sub
'
'

The class module will be expanded upon in the next part of this
tutorial when we'll cover another object orientated concept -
polymorphism.

Download Zipped Project Files (8k)



Comments

  • coplete learning of vb

    Posted by Legacy on 09/12/2003 12:00am

    Originally posted by: nithya

    i can't search advanced vb code
    

    Reply
  • Object oriented modeling

    Posted by Legacy on 08/12/2003 12:00am

    Originally posted by: navneet

    pl. send us some material on object oriented modeling...
    

    Reply
  • Database connectivity

    Posted by Legacy on 11/12/2002 12:00am

    Originally posted by: Bijukutty

    Please send me an article on how to connect databse to VB.

    Reply
  • Please send me the article about polymorphism.

    Posted by Legacy on 11/11/2002 12:00am

    Originally posted by: Vivek

    Hello
    Your article contains below mentioned line,so it would be great if u can send me the below mentioned article."The article on Polymorphism."

    Thanks
    regards
    Vivek

    P.S.-This is the article what i would like to have.
    "The class module will be expanded upon in the next part of this
    tutorial when we'll cover another object orientated concept -
    polymorphism. "

    Reply
  • About Exitfunction

    Posted by Legacy on 03/18/2001 12:00am

    Originally posted by: Hanmant Renushe

    Sir
    i always refer the code with this site , i used the function j=exitwindows(i,0) but it show error for exitwindows funtion so what should i do
    please send your reply imediately
    Thank you

    Reply
  • I Can't Download

    Posted by Legacy on 01/27/2001 12:00am

    Originally posted by: SANTI

    Dear sir

    I can't download Zip code.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • The explosion in mobile devices and applications has generated a great deal of interest in APIs. Today's businesses are under increased pressure to make it easy to build apps, supply tools to help developers work more quickly, and deploy operational analytics so they can track users, developers, application performance, and more. Apigee Edge provides comprehensive API delivery tools and both operational and business-level analytics in an integrated platform. It is available as on-premise software or through …

  • Not long ago, security was viewed as one of the biggest obstacles to widespread adoption of cloud-based deployments for enterprise software solutions. However, the combination of advancing technology and an increasing variety of threats that companies must guard against is rapidly turning the tide. Cloud vendors typically offer a much higher level of data center and virtual system security than most organizations can or will build out on their own. Read this white paper to learn the five ways that cloud …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds