Polymorphism
Objectives
In this lab assignment, students will learn:
- How to design and define interface
- How to implement methods declared in interface
- How to implement polymorphism
Goals
In this lab assignment, students will demonstrate the abilities to:
- Design and define interface
- Implement methods declared in interface
- Implement polymorphism
Grading
- Define interface (30 pts)
- Define base / derived classes (40 pts)
- Define tester program to implement polymorphism (30 pts)
In this lab you will create an interface inheritance hierarchy and perform polymorphism in a tester program. The following is the simplified UML for the hierarchy:
<>
IShape
+ Function ToString() As String
+ Function CalculateArea(): Double
TwoDShape
- xValue: Integer
- yValue: Integer
+ Sub New(Integer, Integer)
+ Property X():Integer
+ Property Y():Integer
+ Function CalculateArea():Double
+ Function ToString():Strinbg
Square
- sideValue: Double
+ Sub New(Integer, Integer,Double)
+ Property Side():Double
+ Function CalculateArea():Double
+ Function ToString():Strinbg
Circle
- radiusValue: Double
+ Sub New(Integer, Integer,Double)
+ Property Radius():Double
+ Function CalculateArea():Double
+ Function ToString():Strinbg
1. Create a Console Application Project called "InterfaceApp".
2. Rename the "Module1.vb" as "IShapeTester.vb"
3. Add a class definition, modify it to an Interface named "IShape" which has two members:
a. Function ToString() : String
b. Function CalculateArea() :Double
4. Add a class definition named "TwoDShape", which is an abstract base class, the following members should be included:
a. xValue: Integer ---- instance variable
b. yValue: Integer ---- instance variable
c. Sub New(Integer, Integer) ---- constructor
d. Property X():Integer ---- get and set xValue
e. Property Y():Integer ---- get and set yValue
f. Function CalculateArea():Double ---- "MustOverride" function and implements IShape's CalculateArea() function
g. Function ToString() ---- Overrides ToString() function in Object and implements IShape's method, display x and y coordinate on the console window (use the following definition)
Public Overrides Function ToString() As String Implements IShape.ToString
Return ("X-coordinate: " & vbTab & xValue & vbCrLf & "Y-coordinate: " & vbTab & yValue)
End Function
5. Add a class definition named "Circle", which inherits from "TwoDShape" class and includes the following members:
a. radiusValue: Double --- instance variable, radius of a circle
b. Sub New(Integer, Integer, Double) --- constructor
c. Property Radius():Double --- get and set radiusValue
d. Function CalculateArea():Double ---- override and implement the abstract method in base class Shape, calculate area of a circle using:
radiusValue * radiusValue * 3.14
e. Function ToString() ----- use Convert.ToString(Me.GetType()) to display the type of shape, then display X and Y coordinates by calling base class's ToString() function, finally, display radius value on console window (use the following definition)
Public Overrides Function ToString() As String
Return (Convert.ToString(Me.GetType()) & vbCrLf & MyBase.ToString() & vbCrLf & "Radius: " & vbTab & String.Format("{0:N2}", radiusValue))
End Function
6. Add a class definition named "Square", which inherit from "TwoDShape" class and include the following members:
a. sideValue: Double --- instance variable, side of a square
b. Sub New(Integer, Integer, Double) --- constructor
c. Property Side():Double --- get and set sideValue
d. Function CalculateArea():Double ---- override and implement the abstract method in base class Shape, calculate area of a square using: sideValue * sideValue
e. Function ToString() ----- use Convert.ToString(Me.GetType()) to display the type of shape, then display X and Y coordinates by calling base class's ToString() function, finally, display side value on console window (use the following definition)
Public Overrides Function ToString() As String
Return (Convert.ToString(Me.GetType()) & vbCrLf & MyBase.ToString() & vbCrLf & "Side: " & vbTab & String.Format("{0:N2}", sideValue))
End Function
7. Perform polymorphism in the Module "IShapeTester.vb":
a. Declare 4 objects:
s1: a circle object ( center at (2, 4) and radius = 3.0)
s2: a square object (center at (1, 5) and side = 4.0)
s3: a circle object (center at(3, 6) and radius = 3.5)
s4: a square object (center at(6, 3) and side = 6.0)
b. Put these 4 objects into an IShape array
c. Use a "For" loop to traverse the array and let each object do the following:
i. Call ToString() and let it display shape type, x and y coordinates, radius or side value
ii. Call CalculateArea() and let it calculate area of a shape, display the area on console window.
8. Here is the sample output window, your program should be performed similarly like this: