Hi,
I'm no great OO expert (or Ruby expert) so maybe the answer to this is
obvious or maybe it's impossible.
I currently have a bunch of classes which I use to parse a data file.
Essentially there are fve layers of containers:
PDB -> Model -> Chain -> Residue -> Atom
A PDB object contains one or more Model objects each of which contain
one or more Chain objects each of which contain... etc down to Atoms.
Note that Model doesn't inherit from PDB or Chain from Model - each
class is just a container for the next one down.
The problem I have is that sometimes I have extra data associated with
the Atom and/or Residue objects. This extra data always comes later
(from a different data file) and usually won't be present. when I need
to, I'd like to add this data to the (already created data structure)
with the minimum amount of work/fuss.
As far as I can see I have the following options:
1. Modify the Atom and Residue classes to include the extra data, set
to nil originally and then filled in when needed. I'd rather not do
this because the code is part of a bigger project which I don't have
direct control over, and it seems rather inelegant to have these extra
fields which hardly ever get used.
2. Create a new AtomExtra class which inherits from Atom but adds
instance variables and accessors for the new data. Then when I read
the extra data I transform each Atom object into an AtomExtra object
and add the new data. I guess the crux of my question is what's the
neatest, Rubyist way of doing this: Is there a smart way of 'morphing'
an object into another type of object (Atom to AtomExtra in this case)
or do I have to create a new object, copy all the data across and then
reattach the new object into the container structure.
Thanks in advance for any advice or help you can give!