How does one execute parent class code when calling a child method?

N

Noozer

I have two Classes in use in an ASP application...

The first Class is named "ORDER". It represents one job order. It has a
Delete method, among others, which deletes it from my database.

The second Class is named "ORDERS". It represents a collection of ORDER
objects. Basically an array of ORDER objects. It has a Remove method that
JUST removes the ORDER object from the collection - no data is erased.


If I execute ORDERS.Item(3).Delete, I'd expect that the ORDER with an index
of 3 would be deleted from my databse - BUT the ORDER object would still be
in my ORDERS collection class.

How can I have the ORDERS Class execute code to remove the ORDER, when I
execute the ORDER.Delete method?

I could write a Delete method in my collection class, but that's not very OO
friendly.
 
A

Anthony Jones

Noozer,

Are you sure you want to be doing 'OO friendly' things in such a OO hostile
environment??

VB Script is far from the best language to build OO designs in.

The objects that you have been talking about in various posts seem fairly
stateful. However they only live as long as single request (unless you are
storing them in the Session which is seriously not recommended), which means
that the bulk of server activity is likely to be the creation, loading and
destruction of objects rather than any actual work.

To answer you question: For the Order object to remove itself from it's
parent Orders object it would need to have a reference to this object.
Since Orders will have a reference to this child Order object you end up
with a circular reference. Circular references are likely to lead to memory
leaks so are not recommended.

I would suggest that you have a Delete method on the Orders object which
Removes the Order then calls it's Delete method. Why do you think that this
isn't OO Friendly?

Here are some other things you might consider:

build your object hierarchy in VB6 rather than VB Script you will be able to
do the sort of things you want (like delete method removing from a
collection) and it'll be faster.


if you must use a script language to deliver a OO design then Javascript
would be a better choice.


Anthony.
 
N

Noozer

Are you sure you want to be doing 'OO friendly' things in such a OO
hostile
environment??

Because, hopefully, it will make my life easier in the long run.

I've dabbled in many languages (6809 assembler, dBaseIII, Clipper, QBasic,
VB, HTML, ASP...etc.) It's becoming VERY fuzzy as to what technology you use
when designing a solution. I'm trying to build a web based tracking system
using an MS SQL database.
To answer you question: For the Order object to remove itself from it's
parent Orders object it would need to have a reference to this object.
Since Orders will have a reference to this child Order object you end up
with a circular reference. Circular references are likely to lead to
memory
leaks so are not recommended.

If I create an ORDER object and use it, it shouldn't need or have any
reference to any Orders object. (Man, I should have used better names for my
example)

But, if I create an Orders object, it may contain many ORDER objects. Can't
I overload (???) the Delete function in the ORDER object with a method in my
Orders object?
I would suggest that you have a Delete method on the Orders object which
Removes the Order then calls it's Delete method. Why do you think that
this
isn't OO Friendly?

If I wan't to delete an ORDER, why would I ask the Orders to do it?

Hmm... I guess that it's not reasonable to expect an Orders object to notice
when I delete an ORDER object that isn't a child of the Orders object. I'm
still green enough to expect OO objects to behave like real world objects.
(ie. Delete a record in the database to affect any object that is related to
that data)
Here are some other things you might consider:

build your object hierarchy in VB6 rather than VB Script you will be able
to
do the sort of things you want (like delete method removing from a
collection) and it'll be faster.

But how will this function when served to a web browser from an IIS server?
if you must use a script language to deliver a OO design then Javascript
would be a better choice.

Possibly, but I know much less about javascipt than vbscript.

....I'm just having problems getting Concept into Code.
 
N

Noozer

The objects that you have been talking about in various posts seem fairly
stateful. However they only live as long as single request (unless you
are
storing them in the Session which is seriously not recommended), which
means
that the bulk of server activity is likely to be the creation, loading and
destruction of objects rather than any actual work.

Out of curiousity... What would you use to create a web browser based
application that would have a small (20?) number of clients using it at any
time controlling a database that could eventually contain hundreds of
thousands of records (containing text, numeric and date/time information -
no binaries)


I would suggest that you have a Delete method on the Orders object which
Removes the Order then calls it's Delete method. Why do you think that
this
isn't OO Friendly?

I just thought of something... If I remove the Order object from the
collection, won't it be gone and unavailable for the ORDER Delete method?

This is the code from my Orders collection object

'-- Delete an item in our collection from the DB ------------------------
Public Function Delete(idx)

Dim i 'General counter

'Default is FAIL
Delete=False

'Remove from our collection, and delete from database if we were
successful.
if Me.Remove(idx) then
'Delete Order from database
Me.Item(idx).Delete
'Success
Delete=True
End If

End Function

'-- Remove an item from our collection ----------------------------------
Public Function Remove(idx)

Dim i 'General counter

'Default is FALSE = Fail
Remove = False

'Raise an error if there are no elements at all
If Me.Count=0 Then
Err.Raise 1, "No objects in collection"
Else
'Test for a valid index...
If idx<lBound(vCollection) Or idx>=uBound(vCollection) Then
'..and error if not
Err.Raise 1,"Out of bounds"
Else

'If we aren't removing the last item so we need to move the
' elements down to fill the gap
If idx<uBound(vCollection) Then
For i=idx TO uBound(vCollection)-1
Set vCollection(i) = vCollection(i+1)
Next
End If

'If we are removing the last element, completely clear array
If ElementCount(vCollection) = 1 Then
Dim vCollection()
Else
'Shrink the array holding our collection
ReDim Preserve vCollection(uBound(vCollection)-1)
End If

'Success
Remove = True

End If
End If

End Function
 
A

Anthony Jones

If I create an ORDER object and use it, it shouldn't need or have any
reference to any Orders object. (Man, I should have used better names
for my example)

Agreed. An Order object could be a standalone object and it's best that it
doesn't need to own a backreference to a parent.
But, if I create an Orders object, it may contain many ORDER objects.
Can't I overload (???) the Delete function in the ORDER object with a
method in my Orders object?
No.

Hmm... I guess that it's not reasonable to expect an Orders object to notice
when I delete an ORDER object that isn't a child of the Orders object.

Ok. An Orders object could be an aribitary collection of Order objects.
In this case you wouldn't want the Orders collection to have a delete
method. The Observer pattern could be used in such a case which would allow
the Order object to notify any Orders objects (the could be more than one)
that it has been delete. I don't think it can be done in VBScript.
I'm
still green enough to expect OO objects to behave like real world objects.
(ie. Delete a record in the database to affect any object that is related to
that data)

OO object will behave just as you have programmed it to. Just as deleting a
record in database only performs the checks, cascades and triggers you've
programmed it to. It's not magic pixie dust.
But how will this function when served to a web browser from an IIS server?

Umm... This is the ASP group. We are talking VB Script on the server side
aren't we. Come to think of it this whole discussion would make more
sense if we were discussing client side script.
Possibly, but I know much less about javascipt than vbscript.
...I'm just having problems getting Concept into Code.

If in fact we have got our wires crossed and we are discussing Client side
script then Javascript would be the language of choice because it provides a
better platform to deliver an OO design.

Anthony.
 
A

Anthony Jones

Out of curiousity... What would you use to create a web browser based
application that would have a small (20?) number of clients using it at any
time controlling a database that could eventually contain hundreds of
thousands of records (containing text, numeric and date/time information -
no binaries)

There is a lot information missing to be definitive. For example why is it
web based in the first place? Is there intensive number crunching involved
or is it a data entry and report style of application? How complex are the
business rules?

My approach (in admittedly larger requirements) is to use a lot of
javascript and OO techniques clientside in the browser in a vain attempt to
shore up the browsers woeful UI experience. I treat ASP as two different
things: 1) Mechanism to deliver the UI to the client; 2) an API through
which to communicate with the 'business logic'.

I use XML to store object state (client side javascript objects wrap round
XML elements) and the transport for client-server comms. Ultimately XML
ends up being processed by SQL Server. I use VB6 Components serverside to
ease DB operations and XML munging (but not for business objects).
I just thought of something... If I remove the Order object from the
collection, won't it be gone and unavailable for the ORDER Delete method?

See the other post.

Anthony
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top