VB Classes 2 - PowerPoint PPT Presentation

1 / 43
About This Presentation
Title:

VB Classes 2

Description:

Implementing a 1:M Relationship With Object Array. Public did As String. Public dname As String ... Imports System.Runtime.Serialization.Formatters.Binary ... – PowerPoint PPT presentation

Number of Views:60
Avg rating:3.0/5.0
Slides: 44
Provided by: cob
Learn more at: https://faculty.sfsu.edu
Category:

less

Transcript and Presenter's Notes

Title: VB Classes 2


1
VB Classes - 2
  • ISYS 573

2
Creating an Array of Objects
Dim emps(2) As emp Dim i As Integer For i 0 To
emps.GetUpperBound(0) emps(i) New
emp() Next emps(0).Eid "e1" emps(0).Ename
"peter" emps(0).salary 5000
3
Implementing a 1M Relationship With Object Array
Class Department
Public did As String Public dname As
String Public emps(2) As Employee
Class Employee
Public eid As String Public ename As
String Public salary As Double
4
Code Example
Dim tempDep As New department()
tempDep.did "D1" tempDep.dname
"Accounting" tempDep.emps(0) New emp()
tempDep.emps(0).Eid "E1"
tempDep.emps(0).Ename "Peter"
MessageBox.Show(tempDep.emps(0).Ename)
5
Implementing a 1M Relationship With ArrayList
Class Department
Public did As String Public dname As
String Public emps As New ArrayList
Class Employee
Public eid As String Public ename As
String Public salary As Currency
6
Example
Public Class Dept Public did As String
Public dname As String Public emps As New
ArrayList Public Sub addemp(ByVal id As
String, ByVal name As String) Dim e As
New Emp e.eid id e.ename
name emps.Add(e) End Sub End
Class Public Class Emp Public eid As String
Public ename As String End Class
7
Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load Dim test As New Dept
test.did "d1" test.dname
"MIS" test.addemp("e1", "peter")
test.addemp("e2", "paul")
MessageBox.Show(test.emps.Item(0).eid)
MessageBox.Show(test.emps.Item(1).eid)
8
Problem with Using ArrayList to Model the Entity
on the Many Side of the Relationship
  • ArrayList can store different types of objects.
  • Because the property is a collection, user may
    use collections Add method to add a object of
    different type.
  • Test.Emps.Add(Other Type)

9
Collection Class
  • A collection class holds references for a series
    of objects created from the same class.
  • Create a hidden Private collection to hold data.
  • Create methods to simulate collections Add,
    Count, Items,RemoveAt, etc.
  • Example

10
Public Class Dept Public did As String
Public dname As String Public emps As New
depEmps End Class Public Class Emp Public eid
As String Public ename As String End
Class Public Class depEmps Private hiddenList
As New ArrayList Public Sub add(ByVal id As
String, ByVal name As String) Dim e As
New Emp e.eid id e.ename
name hiddenList.Add(e) End Sub
Public ReadOnly Property items() As ArrayList
Get items hiddenList
End Get End Property Public ReadOnly
Property count() Get count
hiddenList.Count End Get End
Property End Class
11
Code Using the Collection Class
Dim test As New Dept test.did "d1"
test.dname "MIS" test.emps.add("e1",
"peter") test.emps.add("e2", "paul")
MessageBox.Show(test.emps.items(0).eid)
MessageBox.Show(test.emps.items(1).eid)
12
What If We Only Allow Two Employees in Each Dept?
Public Sub add(ByVal id As String, ByVal name As
String) Dim e As New Emp
e.eid id e.ename name
Static eCount As Integer If eCOunt gt
1 Then MessageBox.Show("too
many") Else eCount
1 hiddenList.Add(e)
End If End Sub
13
  • How to implement the Remove method?
  • How to implement the RemoveAt method?

14
Nested Classes
  • VB .Net lets you nest class definitions
  • Class Outer
  • Class Inner
  • End Class
  • End Class
  • The inner class can be declared as
  • Dim obj As New Outer.Inner

15
Public Class Emp Public Eid As String
Public Ename As String Public salary As
Double Public dependents As New deps()
Public Class deps Private dcol As New
arraylist Public Sub add(ByVal did As
Integer, ByVal dname As String) Dim d
As New dep() d.depID did
d.depName dname dcol.Add(d)
End Sub Public ReadOnly Property items()
As ArrayList Get
items dcol End Get End
Property Public ReadOnly Property
count() Get count
dcol.Count End Get End
Property End Class End Class
16
Public Class dep Public depID As Integer
Public depName As String End Class
Code using collection class
Dim test1 As New Emp() Dim test2 As dep
test1.dependents.add(1, "peter")
test1.dependents.add(2, "paul") Dim i As
Integer For i 1 To test1.dependents.coun
t MessageBox.Show(test1.dependents.ite
ms(i).depname) Next For Each
test2 In test1.dependents.items
MessageBox.Show(test2.depID.ToString
test2.depName) Next
17
Store Objects in Storage
  • Comma delimited file
  • Database
  • Serialization

18
Classes and Files
  • Two files with 1M relationship
  • Dept.dat, and Emp.dat
  • Create a Dept class to model the relationship.
  • Create a form that
  • Display department Ids in a listbox.
  • Display selected department info and its
    employees in textboxes.

19
Serializing Classes
  • Add a Serializable attribute
  • ltSerializable()gt Public Class Dept

20
ltSerializable()gt Public Class Dept Public did
As String Public dname As String Public
emps As New depEmps End Class ltSerializable()gt
Public Class Emp Public eid As String
Public ename As String End Class
21
Imports System.IO Imports System.Runtime.Serializa
tion.Formatters.Binary Private Sub
Form9_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
Dim test As New Dept test.did "d1"
test.dname "MIS" test.emps.add("e1",
"peter") test.emps.add("e2", "paul")
Dim fs As New FileStream("c\testSerializing.tx
t", FileMode.Create) Dim bf As New
BinaryFormatter bf.Serialize(fs, test)
fs.Close() End Sub Private Sub
Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles
Button1.Click Dim fs As New
FileStream("c\testSerializing.txt",
FileMode.Open) Dim testS As New Dept
Dim bf As New BinaryFormatter testS
CType(bf.Deserialize(fs), Dept)
TextBox1.Text testS.did TextBox2.Text
testS.dname End Sub
22
Inheritance
  • The process in which a new class can be based on
    an existing class, and will inherit that classs
    interface and behaviors. The original class is
    known as the base class, super class, or parent
    class. The inherited class is called a subclass,
    a derived class, or a child class.

23
Inheritance Example
Public Class Emp Public Eid As String
Public Ename As String Public salary As
Double Public Function tax() As Double
tax salary 0.1 End Function End
Class Public Class secretary Inherits Emp
Public WordsPerMinute As Integer End Class
24
Overriding
  • When a property or method in the base class is
    not adequate for a derived class, we can override
    the base class property or method by writing one
    with the same name in the derived class.
  • The property or method in the base class must be
    declared with the Overridable keyword.
  • The overridden property or method must be
    declared with the Overrides keyword.
  • Note Keywords Overridable and Overrides apply
    only to property procedure (not properties
    declared by public variables) or method.

25
Overriding a Method
Public Class Emp Public Eid As String
Public Ename As String Public salary As
Double Public Overridable Function tax() As
Double tax salary 0.1 End
Function End Class Public Class secretary
Inherits Emp Public WordsPerMinute As
Integer Public Overrides Function tax() As
Double If salary gt 3000 Then
tax salary 0.1 Else tax
salary 0.05 End If End Function End
Class
26
Overriding a Property
Public Class Emp Public Eid As String
Public Ename As String Private hiddenSal As
Double Public Overridable Property salary()
As Double Get salary
hiddenSal End Get Set(ByVal Value
As Double) hiddenSal Value
End Set End Property End Class
27
Public Class secretary Inherits Emp
Private sal As Double Public WordsPerMinute
As Integer Public Overrides Property salary()
As Double Get salary sal
End Get Set(ByVal Value As Double)
If Value gt 5000 Then
sal 5000 Else sal
Value End If End Set End
Property End Class
28
MyBase
  • The MyBase keyword refers to the base class. It
    is useful when you want to reference a field,
    property, or method of the base class.

29
Public Overridable Function tax() As Double
tax salary 0.1 End Function
Public Class secretary Inherits Emp
Public WordsPerMinute As Integer Public
Overrides Function tax() As Double If
salary gt 3000 Then tax salary
0.1 Else tax salary 0.05
End If End Function End Class
Public Overrides Function tax() As Double
If salary gt 3000 Then tax
MyBase.tax Else tax salary
0.05 End If End Function
Note With MyBase, we can reuse the code in the
base class.
30
The Scope of Class Properties and Methods
  • Public Available within its own class and to
    client code and subclasses. No restriction on
    access in the current or other projects.
  • Private Available only within its own class, not
    accessible from a derived class.
  • Protected Available only within its own class
    and derived subclasses, not available to client
    code.
  • Friend Available within its own class and to
    client code and subclasses, but only within the
    current project.

31
Abstract Classes (Virtual Classes)
  • To prevent users from using your class as is and
    instead force them to inherit from it, you can
    create an abstract class.
  • An abstract class cannot be instantiated, but is
    designed to be used only as a base class. An
    abstract class is declared with the MustInherit
    keyword
  • Public MustInherit Class Person
  • Abstract classes may have methods that are
    declared with the MustOverride keyword. Such
    methods are not implemented in the abstract class
    but must be implemented in any derived classes.

32
Abstract Class Example
Public MustInherit Class clsEmp Public Eid As
String Public Ename As String Public
salary As Double MustOverride Function tax()
As Double End Class Public Class clsEmpSecretary
Inherits clsEmp Public Overrides Function
tax() As Double If salary gt 5000 Then
tax salary 0.1 Else
tax salary 0.1 End If End
Function End Class
33
NonInheritable Classes (Sealed Classes)
  • A class declared with the NotInheritable keyword
    can be instantiated but cannot be subclassed
  • Public NotInheritable Class Emp
  • Use NotInheritable when you want others to be
    able to use your class but not base their own
    classes on it.

34
Base Class and Derived Class Constructors
  • It is possible for both a base class and a
    derived class to have constructors. When an
    instance of the derived class is created, the
    base class constructor is called first, and then
    the derived class constructor is called.

35
Comparing Object Variables with the Is Operator
  • Multiple object variables can reference the same
    object. To determine whether two object
    variables reference the same object, use the Is
    operator, not .
  • Dim emp1 as new emp()
  • Dim emp2 as emp
  • Emp2 emp1
  • If emp2 Is emp1 Then
  • Msgbox(Same object)
  • End if

36
Exception
  • Exceptions signal errors or unexpected events
    that occur while an application is running.
  • An error handler is a section of code that
    intercepts and responds to exceptions.

37
Structured Error Handling
Try result Val(TextBox1.Text) /
Val(TextBox2.Text) TextBox3.Text
result.ToString Catch except As
InvalidCastException
MessageBox.Show(except.Message) Catch
except As DivideByZeroException
MessageBox.Show(except.Message) Catch
except As Exception 'Handle
everything else MessageBox.Show(except
.Message) Finally
MessageBox.Show("I get exdecuted, no matter
what") End Try
38
User-Defined Application Exceptions
  • System.ApplicationException
  • Throw
  • Throw New ApplicationException("Test exception")
  • Use Try block to catch the excaption
  • Try
  • Statements
  • Catch err ApplicationException
  • MessageBox.Show(err.Message)
  • End Try

39
Application Exception Example
Public Class emp Public SSN As String
Public Ename As String Public DateHired As
Date Private hiddenJobCode As Long Public
Property JobCode() Set(ByVal Value)
If Value lt 1 Or Value gt 4 Then
Throw New ApplicationException("Invalide
JobCode") Else
hiddenJobCode Value End If
End Set Get JobCode
hiddenJobCode End Get End
Property End Class
40
Catch Application Exception
Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles Button1.Click Dim myEmp As New
emp() Try myEmp.JobCode
TextBox1.Text MessageBox.Show(myEmp.Jo
bCode) Catch err As ApplicationException
MessageBox.Show(err.Message)
TextBox1.Focus() End Try End Sub
41
User-Defined Exception Class
Public Class JobCodeException Inherits
System.ApplicationException Sub New(ByVal
strMessage As String) MyBase.New(strMessag
e) End Sub End Class
42
Using User-Defined Exception in Class
Private hiddenJobCode As Long Public Property
JobCode() Set(ByVal Value) If
Value lt 1 Or Value gt 4 Then Throw
New JobCodeException("Invalide JobCode")
Else hiddenJobCode Value
End If End Set Get
JobCode hiddenJobCode End Get
43
Using User-Defined Exception in Program
Dim myEmp As New Emp() Try
myEmp.Eid TextBox1.Text myEmp.Ename
TextBox2.Text myEmp.salary
CDbl(TextBox3.Text) myEmp.JobCode
TextBox4.Text Catch err As
JobCodeException MessageBox.Show(err.M
essage) TextBox4.Focus()
TextBox4.SelectAll() End Try
Write a Comment
User Comments (0)
About PowerShow.com