Martin DeMello wrote: > On Thu, Jan 29, 2009 at 6:03 AM, Tom Cloyd <tomcloyd / comcast.net> wrote: > >> Greetings... >> >> I'm continuing my learn-to-write-OO-Ruby journey. Had a recent bad >> experience trying to convert a complex method to a class. The method gets a >> lot of use in my program, and each time it needs to know a lot about the >> environment outside itself. I found myself having to write a ton of instance >> variable data into the class instance to get it to do its job, before I >> called it each time, then read a few more back out to get the results. It >> was awful. What had been a one line call was now about 14 lines of code. >> Ack! I gave up and converted it back to a method, which simply makes more >> sense. I could not find any "class-magic" in this experience - just a lot of >> locked doors. >> > > One thing that might help is an object to encapsulate the environment > that is passed to your method. For instance, a method that worked out > whether two particles, given by their initial positions and > velocities, would collide, would look something like > > projectCollision(x1, y1, z1, vx1, vy1, vz1, x2, y2, z2, vx2, vy2, vz2) > > As a first pass, we'd define a particle class > > class Particle > attr_accessor :x, :y, :z, :vx, :vy, :vz > ... > end > > and call our method with > > projectCollision(particle1, particle2) > > now particle1 and particle2 are objects of the class Particle, who get > their positions and velocities updated at the appropriate places in > the code. Your methods that deal with updating the particles' > positions and velocities need only pass particle objects around, and > the objects themselves act as slates to track changes to their > internal data. To a first approximation, I've found that using classes > to group and encapsulate function parameters is at least as useful a > refactoring as using classes to hold the functions themselves. > > martin > > > Wow. Martin that's a fascinating idea. Terrific notion. Gonna try to make use of this. But just the idea is great for me to know aout. Thanks! Tom -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist Bellingham, Washington, U.S.A: (360) 920-1226 << tc / tomcloyd.com >> (email) << TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental health weblog) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~