Home > Articles

  • Print
  • + Share This
This chapter is from the book

Classes as Objects

The primary difference between ordinary procedural programming and object-oriented (OO) programming is the presence of classes. A class is just a module as we have just shown, that has both public and private methods and that can contain data. However, classes are also unique in that there can be any number of instances of a class, each containing different data. We frequently refer to these instances as objects. We'll see some examples of single and multiple instances following.

Suppose we have a file of results from a swimming event stored in a text data file. Such a file might look, in part, like this.

1 Emily Fenn                  17  WRAT       4:59.54
2 Kathryn Miller              16  WYW        5:01.35
3 Melissa Sckolnik            17  WYW        5:01.58
4 Sarah Bowman                16  CDEV       5:02.44
5 Caitlin Klick               17  MBM        5:02.59
6 Caitlin Healey              16  MBM        5:03.62

The columns represent place, names, age, club, and time. If we wrote a program to display these swimmers and their times, we'd need to read in and parse this file. For each swimmer, we'd have a first and last name, an age, a club, and a time. An efficient way to keep the data for each swimmer grouped together is to design a Swimmer class and create an instance for each swimmer.

Here is how we read the file and create these instances. As each instance is created, we add it into a Collection object.

Private swimmers As New Collection

Private Sub Form_Load()
Dim f As Integer, S As String
Dim sw As Swimmer
Dim i As Integer

f = FreeFile
'read in data file and create swimmer instances
Open App.Path & "\500free.txt" For Input As #f
While Not EOF(f)
  Line Input #f, S
  Set sw = New Swimmer  'create instances
  sw.init S             'load in data
  swimmers.Add sw       'add to collection
Close #f
'put names of swimmers in list box
For i = 1 To swimmers.Count
  Set sw = swimmers(i)
  lsSwimmers.AddItem sw.getName
Next i
End Sub

The Swimmer class itself parses each line of data from the file and stores it for retrieval using getXXX accessor functions.

Private frname As String, lname As String
Private club As String
Private age As Integer
Private tms As New Times
Private place As Integer
Public Sub init(dataline As String)
 Dim tok As New Tokenizer

 tok.init dataline           'initilaize string tokenizer
 place = Val(tok.nextToken)  'get lane number
 frname = tok.nextToken      'get first name
 lname = tok.nextToken       'get last name
 age = Val(tok.nextToken)    'get age
 club = tok.nextToken        'get club
 tms.setText tok.nextToken   'get and parse time
End Sub
Public Function getTime() As String
 getTime = tms.getFormatted
End Function
Public Function getName() As String
 'combine first and last names and return together
 getName = frname & " " & lname
End Function
Public Function getAge() As Integer
 getAge = age
End Function
Public Function getClub() As String
 getClub = club
End Function

Class Containment

Each instance of the Swimmer class contains an instance of the Tokenizer that it uses to parse the input string and an instance of the Times class we wrote previously to parse the time and return it in formatted form to the calling program. Having a class contain other classes is a very common ploy in OO programming and is one of the main ways we can build up more complicated programs from rather simple components.

The program that displays these swimmers is shown in Figure 3-6.

03fig06.gifFigure 3-6. A list of swimmers and their times, using containment

When you click on any swimmer, her time is shown in the box on the right. The code for showing that time is extremely easy to write, since all the data are in the swimmer class.

Private Sub lsSwimmers_Click()
 Dim i As Integer
 Dim sw As Swimmer
 i = lsSwimmers.ListIndex        'get index of list
 If i >= 0 Then
   Set sw = swimmers(i)          'get that swimmer
   lbTime.Caption = sw.getTime   'display that time
 End If
End Sub
  • + Share This
  • 🔖 Save To Your Account