Monday, 13 July 2015

CREATING CLASSES IN VB SCRIPT


Creating Classes in VBScript

Creating classes in VBScript is really no different than creating classes in any other programming language.  The concept of an object is usually described as just about anything.  When you think about it every thing around you is some sort of object.  For example a house is an object.  It has properties and methods.  The properties could be that the house has 3 bedrooms, a garage, a pool, air conditioning etc.  You can even break down the house into smaller objects, such as doors windows etc.  A garage door may have methods that are controlled by a remote.  The methods may be something like garageDoor.open or garageDoor.close.  The garage door would be an object, and the method would be to open or close.  Getting back to the VBScript, lets see how we would write a simple class called Math that adds or subtracts two numbers.  First let’s look at our parameters for the class.

Class Name: Math
Methods: add and subtract

Now before we actually create the class, lets just see how we would write the two methods:

Public Function add(afirst, asecond)
  Dim output
  output = afirst + asecond
  add = output
End Function

Public Function subtract(sfirst, ssecond)
  Dim output
  output = sfirst - ssecond
  subtract = output
End Function

Now we can define the class:

Class Math

End Class

Then just put them together:

<%
  Class Math

  Public Function add(afirst, asecond)
  Dim output
  output = afirst + asecond
  add = output
End Function

Public Function subtract(sfirst, ssecond)
  Dim output
  output = sfirst - ssecond
  subtract = output
End Function

End Class
%>

Now you can use your class in an include file to reduce code and increase reusability.  Go ahead and make a file called Math.inc that has the above code in it.  When you have finished that, create a new .asp file called test.asp that has this code.

PLEASE NOTE: You might need to change your parenthesis when you paste the code into the asp file.  By change I mean just re-write them inside of the asp file.

<!-- #INCLUDE FILE="Math.inc" -->
<%

  Dim mathObject
  Dim additionResult
  Dim subtractResult

  Set mathObject = New Math

  additionResult = mathObject.add(1,2)

  subtractResult = mathObject.subtract(2,1)

  Response.Write "result of addition: " & additionResult & "<br>"
 
  Response.Write "result of subtraction: " & subtractResult & "<br>"
 
%>

The first thing that we do in our code is to create 3 variables: mathObject, additionResult, and subtractResult.  There is really nothing special about these variables.  Next, we instantiate (or create an instance) of the Math object with the line:

Set mathObject = New Math

Next we perform the method add, passing the parameters 1 and 2:

mathObject.add(1,2)

Since add is a function that returns a value (as we defined in the class specification) we store the returned value in the variable additionResult.  Likewise, we use the same object, and perform the subtraction method:

mathObject.subtract(2,1)

And our result is stored in subtractionResult.  Then we simply print the variables out to the screen.

Visual Basic defines what a property is differently than almost any other language.  If you read the document on classes in VBA that is on the course web page, you will find that VB has what look like property definitions.  The Get/Let property skeletons looks like this:

Public Propetry Get <PropertyName>
End Property

Public Property Let <PropertyName>
End Property

So for our next example, we will use these properties to make a class called Student.  Here is what our code will look like for the Student.inc file:

%
Class Student

Private name
Private major
Private classification

Public Property Let studentName(inputName)
  name = inputName
End Property

Public Property Let studentMajor(inputMajor)
  major = inputMajor
End Property

Public Property Let studentClassification(inputClassification)
  classification = inputClassification
End Property

Public Property Get studentName()
  studentName = name
End Property

Public Property Get studentMajor()
  studentMajor = major
End Property

Public Property Get studentClassification()
  studentClassification = classification
End Property

End Class
%>

The code is pretty simple.  You can set the student’s name, major, and classification and you can get the students name, major, and classification as well.  When we make the variables private, this allows us only to call the Get methods to get the values.  So you basically cannot directly access the variables when creating an instance of the Student object.  Now let’s put the code to use, create a file named MakeStudent with the following code:

<!-- #INCLUDE FILE="Student.inc" -->
<%
  Dim objStudent
 
  Set objStudent = New Student

  objStudent.studentName = "John Doe"
  objStudent.studentMajor = "MIS"
  objStudent.studentClassification = "Undergraduate"

  Response.Write objStudent.studentName
  Response.Write "<br>"
  Response.Write objStudent.studentMajor
  Response.Write "<br>"
  Response.Write objStudent.studentClassification
 
%>

The code itself is pretty self explanatory, but this example brings up a good point.  When you think about storing information from your database, objects become very reasonable.  Using objects is a good way to store specific information about a given student.  This way you reduce your code, and the information is more abstract, thus making it easier to manage.  The last example shows how we can create a form using objects.  This would be useful if you want to make a few forms on your html page.  For our example we will make one form with a two text boxes and a button.  So first lets define some methods:

·         addTextBox(textboxName)
·         addButton(buttonValue)
·         createForm(formAction)
·         finishForm

Now lets just go ahead and make the class:

<%

Class Form
 
  Public Sub createForm(formAction)
    Response.Write "<form method=’post’ action=’" & formAction & "’>"
  End Sub

  Public Sub addTextBox(textboxName)
    Response.Write "<br>"
    Response.Write "<input type=’text’ name=’" & textboxName & "’ size=’20’>"
  End Sub

  Public Sub addButton(buttonValue)
    Response.Write "<input type=’submit’ value=’" & buttonValue & "’>"
  End Sub

Public Sub finishForm
  Response.Write "</form>"
End Sub

End Class

%>

Copy the code into a file called Form.inc, then make a file that will create a form according to your specifications:

<!-- #INCLUDE FILE="Form.inc" -->
<%
Dim formObject

Set formObject = new Form

FormObject.createForm(“logon.asp”)
FormObject.addTextBox(“username”)
FormObject.addTextBox(“password”)
FormObject.addButton(“logon!”)
FormObject.finishForm
%>

Obviously there are different ways you could construct your form.  Using global variables and ‘set’ methods would probably be better, so try constructing one using your own code that incorporates the code above, and the ‘set’ methods and private global variables from the previous example.  An example of this would be getting the form name via a Let Procedure.  Here is a snippet of what I am talking about:

Private formName

Public Property Let FormName(strInputName)
  formName = strInputName
End Property

Public Sub createForm(formAction)
    Response.Write "<form name=’” & formName & “’method=’post’ action=’" & formAction & "’>"
End Sub

What I did was just added a private global variable that holds the name of the form.  The private global variable can be accessed by all of the Properties and Subroutines.  In order to set the name of the form you could write something like this:

Dim objForm
Set objForm = New Form

objForm.FormName = “Login Form”
objForm.createForm(“logon.asp”)


Class TVProgram
                        Public StartTime
                        Public ProgramDate
                        Public ProgramTitle
            End Class

            Dim objTVShow
            Set objTVShow = New TVProgram

            objTVShow.StartTime = CDate("17:30")
            objTVShow.ProgramDate = DateSerial(1999,9,17)
            objTVShow.ProgramTitle = "The Jerry Springer Show"

            Response.Write objTVShow.ProgramTitle & " is on at " & _

             objTVShow.StartTime & " on " & objTVShow.ProgramDate


Class TVProgram
                        Public StartTime

                        Public internal_ProgramDate

                        Public Property Get ProgramDate
                                    ProgramDate = Day(internal_ProgramDate) & _
                                                " " & MonthName(Month(internal_ProgramDate)) & _
                                                " " & Year(internal_ProgramDate)
                        End Property

                        Public ProgramTitle
            End Class

            Dim objTVShow
            Set objTVShow = New TVProgram

            objTVShow.StartTime = CDate("17:30")
            objTVShow.internal_ProgramDate = DateSerial(1999,9,17)
            objTVShow.ProgramTitle = "The Jerry Springer Show"


            Response.Write objTVShow.ProgramTitle & " is on at " & _
                        objTVShow.StartTime & " on " & objTVShow.ProgramDate & "."


<html><body>
<!-- Empty_Class.html
   Copyright (c) 2006 by Dr. Herong Yang. http://www.herongyang.com/
-->
<pre><script language="vbscript">
   ' Initiating an object from a class
   Dim oEmpty
   Set oEmpty = New EmptyClass

   ' Checking the object
   document.writeln("VarType(oEmpty)=vbObject: " _
      & (VarType(oEmpty)=vbObject))
   document.writeln("TypeName(oEmpty): " & TypeName(oEmpty))

' Defining an empty class
Class EmptyClass
End Class
</script></pre>
</body></html>
Run this VBScript example in IE, you will get:
VarType(oEmpty)=vbObject: True
TypeName(oEmpty): EmptyClass
Note that "TypeNmae()" function returns the class name of the specified object.



To show you how to define public properties with property procedures, I wrote this VBScript example:
<html><body>
<!-- Class_Methods.html
   Copyright (c) 2006 by Dr. Herong Yang. http://www.herongyang.com/
-->
<pre><script language="vbscript">
   Dim oNode
   Set oNode = New Node
   oNode.Email = "info@yahoo.com"

   document.writeln()
   document.writeln("Information of the object:")
   document.writeln("   oNode.Email: " & oNode.Email)
   document.writeln("   oNode.ToString(): " & oNode.ToString())
   document.writeln("   oNode(): " & oNode())
   document.writeln("   oNode: " & oNode)

Class Node
   Private User, Domain

   Public Default Function ToString()
      ToString = Email()
   End Function

   Public Property Let Email(sEmail)
      at = InStr(sEmail, "@")
      If at>0 Then
         User = Mid(sEmail, 1, at-1)
         Domain = Mid(sEmail, at+1, Len(sEmail)-at)
      End If
   End Property

   Public Property Get Email()
      Email = User & "@" & Domain
   End Property
  
   Sub Class_Initialize()
      User = "user"
      Domain = "some.com"
   End Sub
End Class
</script></pre>
</body></html>
When you load this VBScript example into IE, you will get this output:
Information of the object:
   oNode.Email: info@yahoo.com
   oNode.ToString(): info@yahoo.com
   oNode(): info@yahoo.com
   oNode: info@yahoo.com
Notice that how the default method can be invoked without method name, oNode() or oNode.

No comments:

Post a Comment