[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: do I really need to use loops on objects?




bjackel@phys.ucalgary.ca writes:

> Brad Gom wrote:
> > 
> > It seems odd to me that I can't treat object arrays with the same
> > elegance that is possible with all other array types. If I have a large
> > list of objects of the same type, and I want to call the same method on
> > each of them, do I really have to use a for loop? Wouldn't it be more
> > consistent with the IDL philosophy to write: object_array->method()
> > instead of: for i=0,10 do object_array[i]->method()
> 
> I agree completely, but most people on this group don't appear to.
> 
> The counter argument seems to be that an object array can contain 
> different kinds of objects, so you can't be sure that any particular
> method will work for every element of the array.  While true, this
> seems (to me) to be a reason why object arrays should contain only
> similar elements *JUST LIKE EVERY OTHER IDL ARRAY TYPE*.  If you
> want different kinds of objects wrapped up together then use an
> array of pointers, or a structure with different object members.

One of the points of object oriented programming is *polymorphism*.
Which means, in short, that the same function can be applied to
different object types (possibly with differing implementations for
each).  That's the great idea of keeping a array of heterogeneous
objects around.

So, object_array->method() *should* call "method" for each object in
object_array, irregardless of the type of the object.  If one of the
objects doesn't define "method" then an exception should be raised.
[Following Smalltalk or Objective C there should be some way to query
an object to see if it responds to a particular method].

Not that I use objects much, but this is my sense of rightness.

Craig

-- 
--------------------------------------------------------------------------
Craig B. Markwardt, Ph.D.         EMAIL:    craigmnet@cow.physics.wisc.edu
Astrophysics, IDL, Finance, Derivatives | Remove "net" for better response
--------------------------------------------------------------------------