Question

Inheritance, Polymorphism, Interfaces in VB.Net Classes / Nested Classes for ASP.NET

Asked by: klm555

Hi,

I am looking for is mainly some guidance in this subject rather than solving a specific problem presented here. If the examples I have given can be solved, this should help me on my development futher.

I am trying to develop is a self contained object which contains all the properties and classes using inheritance, polymorphism and interfaces.  However, I am running into difficulty setting the object up without causing errors and not being able to have the expected visibilty that I require.

The example I have been working on is based on a Car object, and has various objects including a couple of Doors and a Engine with various properties, methods and attributes.

What I'd like to be able to do with this Car object is a number of things:
      1. Self Contained
                The Door and Engine cannot exist on their own without the Car object. Additionality,  the Door Handle cannot exist without a Door. These objects should be visible when using the IntelliSense when coding the Class.

      2. Reusability
                I have created a Dimension Class and would like to reuse and apply the class to any current/future object created at a later stage which may require these properties. However, if the property is not required. For example, a Windscreen Wiper class requires only a length field, so I can hide the Height and Width properties when creating this object.

      3.  Interfaces
                I have limited the interface of the Class to only what I have provided through the various properties and methods using Interfaces to ensure objects are being using in the right way and call at the level in the object.   For Example, preventing typing source code with a reclusive call like Car.Door.Door.Door.... or being able to call something that doesn't make sense Car.Engine.DoorHandle.

       4. Visiblity
                If I am in a nested class, I should be able to read, but not update any properties of the parent class which I am currently accessing. For example, If I am in the Engine class, I'd like to still be able to see the Year at the Car Class level.

        5. Methods
              I would also like to how to call a method from a class to another class object either or a nested class inside. For example, If I have a Door Handle with a method called Pull(), this function calls a function in the Door object which Opens the door. Similarility, If I have a Fuel Cap Door, the only method aviable would be Push() which opens the fuel cap "Door".

<%
	Namespace Cars
	
	Public Class Car
		Implements ICar
		
		Protected oDoorFrontRight, oDoorFrontLeft As IDoor
		Protected oDoorRearRight, oDoorRearLeft As IDoor
		Protected oDoorHood, oDoorBoot, oDoorFuel As IDoor
		Protected oEngine As IEngine
 
		Protected Friend Function Make() As String
			Return strMake
		End Function
 
		Protected Friend Function Model() As String
			Return strModel
		End Function	
 
		Protected Friend Function Year() As Integer
			Return intYear
		End Function		
		Public Sub New()
			oEngine = New CEngine()
			oDoorFrontRight = New Door()
			oDoorFrontLeft = New Door()
			oDoorRearRight = New Door()
			oDoorRearLeft = New Door()
			oDoorHood = New Door()
			oDoorBoot = New Door()
			oDoorFuel = New Door()
		End Sub
		
		Function Running() As String Implements ICar.Running
			Return oEngine.Status
		End Function
		
		Protected Friend Function NumberPlate() As String
		Return "AAA000"
		End Function
		
		Public Interface ICar
			Function Running() As String
		End Interface
		
		Public Interface IDoor
			Property IsOpen() As Boolean
			Sub Close()
			Sub Open()
		End Interface
		
		Public Interface IEngine
			Inherits ICar
			Property HorsePower() As Integer
			Sub StartEngine()
			Sub StopEngine()
			ReadOnly Property Status() As String
			ReadOnly Property StartCount() As String
			ReadOnly Property StopCount() As String
		End Interface
		
		Public Property Boot() As IDoor
			Get
				Return oDoorBoot
			End Get
			Set(ByVal Value As IDoor)
				oDoorBoot = Value
			End Set
		End Property
		
		Public Property Engine() As IEngine
			Get
				Return oEngine
			End Get
			Set(ByVal Value As IEngine)
				oEngine = Value
			End Set
		End Property
		
		Protected Class CEngine
			Inherits Car
			Implements IEngine
			
			Private dblHorsePower As Integer
			Private blnOn As Boolean
			Private intStartCount As Integer = 0
			Private intStopCount As Integer = 0
			
			Property HorsePower() As Integer Implements IEngine.HorsePower
				Get
					Return dblHorsePower
				End Get
				Set(ByVal value As Integer)
					dblHorsePower = value
				End Set
			End Property
			
			Public Sub StopEngine() Implements IEngine.StopEngine
				blnOn = False
				intStopCount += 1
			End Sub
			
			Public Sub StartEngine() Implements IEngine.StartEngine
				blnOn = True
				intStartCount += 1
			End Sub
			
			Public ReadOnly Property Status() As String Implements IEngine.Status
				Get
					Return "The engine is running: " & blnOn & "<br/>"
				End Get
			End Property
			
			Public ReadOnly Property StartCount() As String Implements IEngine.StartCount
				Get
				Return "The engine has been started " & intStartCount & " time(s).<br/>"
				End Get
			End Property
			
			Public ReadOnly Property StopCount() As String Implements IEngine.StopCount
			Get
				Return "The engine has been stopped " & intStopCount & " time(s).<br/>"
			End Get
			End Property
			
		End Class
		
		Protected Class Door
			Implements IDoor
			Protected oDoorhandle As DoorHandle
			
			Private blnOpen As Boolean = False
			
			Property IsOpen() As Boolean Implements IDoor.IsOpen
				Get
					Return blnOpen
				End Get
				Set(ByVal value As Boolean)
					blnOpen = value
				End Set
			End Property
			
		Public Sub Close() Implements IDoor.Close
			blnOpen = False
		End Sub
		
		Public Sub Open() Implements IDoor.Open
			blnOpen = True
		End Sub
		End Class
		
		Protected Class DoorHandle : Inherits Door
			Public Sub Lift()
			Me.Open()
		End Sub
		
		Public Interface IDimensions
		
			Property Height As Double
			Property Width As Double
			Property Length As Double
		
		End Interface
		
		
		Protected Class Dimensions
			Implements IDimensions
			
			dblHeight As Double
			dblWidth As Double
			dblLength As Double
			
			Property Height() As Double String Implements IDimensions.Height
				Get 
					Return dblHeight
				End Get
				Set(ByVal value As Double)
					dblHeight = value
				End Set
			End Property
 
		End Class
		
		End Class
	End Class
	
	End Namespace
 
%>

                                  
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-09-11 at 04:13:34ID24724125
Tags

Inheritance

,

Polymorphism

,

Interfaces

,

VB

,

Classes

,

Nested Classes

,

ASP.NET

Topics

.NET Framework 2.x

,

Programming for ASP.NET

,

Microsoft Visual Basic.Net

Participating Experts
1
Points
500
Comments
4

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Working out fuel consumption
    I am trying to work out a way of calculating fuel consumption over a given time period. All fuel issues are entered into a form. The date,vehicle fleet no,fuel issue amount(litres) & mileage(some vehicles are in miles,some in kilometres) I was hoping to be able to create ...
  2. Need some guidance on tutorials info for ASP.Net
    Dear Experts, I have a bit of web development experience with ASP, but now i would like to get profecient in ASP.Net. Hence I need your advise and guidance on websites offering good tutorials for free, like w3schools good sample application websites good sample co...
  3. Web Language Guidance
    I am a Novice programmer with no formal programming training except Cobal, Fortran and RPG xx years ago, looking for some guidance on web language selection. I do have a strong grip on programming with the .net platform but only in client/server and DCOM apps. I am going to...
  4. Just need some guidance
    OK...I am definitely a newbie to ASP.NET. I am creating a web page that is a database that will keep personality profiles. So you can imagine many tables that have a username, possbile a unique identifier, and a ton of fileds that are textboxes. Here is my main concern. I...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: carl_tawnPosted on 2009-09-11 at 09:26:39ID: 25311088

Ok, taking a very broad view of what you are doing, there are a couple of immediate things that, from an OO perspective, don't make a lot of sense.

1) You have CEngine inheriting from Car, which is a little odd. Think of inheritance as an "is a" relationship. You are currently saying that an Engine "is a" Car, which doesn't make sense. More logically a Car "has a" (containment/aggregation) Engine rather than being one.

2) Having the IEngine interface seems a little unnecessary. Engines (generally speaking, as far as cars go at least) work in pretty much the same way. So in this scenario it would make more sense from a design perspective to create a base Engine class that you can inherit from if, at some point, you need a more specialised engine type.

 

by: klm555Posted on 2009-09-13 at 19:24:43ID: 25322706

Hi carl_tawn,

Attached is a conceptual class design in PNG format with a few examples on how I intend to use and interace this object.

If you require more information, please let me know.

 

by: klm555Posted on 2009-09-14 at 17:22:07ID: 25330410

I have done some more testing and found that my adding a member which references the parent class appears to work.

I am unsure on the performance side of this, but if this is not the correct method, please let me know or this comment will be accepted as the accepted solution.

Class Car
	Private objWheels As CarObject
	Private objDoors As CarObject
	...
	
	Sub New()
		objWheels = New LayLossWires(CarObjects.Wheels, Me)
		objDoors = New LayLossWires(CarObjects.Door, Me)
	End Sub
	...
	
	Class CarObject
		Private objCarObject As CarObjects
		Private objParent As Car
		...
		
		Sub New(ByVal o As CarObjects, ByRef p As Car)
			objCarObject = p
			objParent = p
		 End Sub
		 ...	
	End Class	
End Class

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:

Select allOpen in new window

 

by: carl_tawnPosted on 2009-09-15 at 01:16:31ID: 25332804

Storing a reference to the parent should be ok performance wise, after all you are simply storing a pointer to the memory block rather than holding a copy of the parent.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...