Puzzling OO design problem

Michael Spencer mahs at telcopartners.com
Sat Apr 9 16:55:48 EDT 2005


George Sakkis wrote:
>>Have you considered a 'macro' solution composing source?
> 
> 
> Can you elaborate on this a little ? You mean something like a
> template-based code generating script that creates all the boilerplate
> code for each version before you start customising it ? 

I was thinking more along the lines of repeatable code generation.
I started from this idea: 
http://groups-beta.google.com/group/comp.lang.python/msg/77ef889e9f99696c
which is a straightforward wrapping case, but illustrates source code 
composition/generation.

Now given that you have:
#World1.py

class Field:
     ...
class Movable
     ...
etc...


#Then in World2Delta.py

class FieldDelta:
    """just the classes that have changed"""
    def somemethod(self):
     """just the methods that are added or changed
        you could even have nomenclature for method deletion, (a lack which
        sometimes bugs me in OO schemes)"""
	etc...


then you have a 'makefile' that generates a new module for each of your worlds

#makefile.py

def generateWorld(baseworld, delta, newworld):
     """reads two modules:
        baseworld defines the 'superclasses'
        delta defines any changes to these
        writes module newworld, that contains complete
        source for all the classes in the model, with no
        external dependencies
     """

I haven't tried it, but I'm sure it is fairly straightforward to implement (and 
very easy to test).


This could be
> an option, though you'd better be pretty sure that the template is
> frozen; you don't want to go back and fill in the template more than
> once !

I envisage something that could be regenerated at will, simply by re-running the 
makefile.

The thing that would need to be frozen is the inheritance graph within each 
world.  If you want to change that between versions, that would make 
generateWorld much more complex.

The general advantage that I see with this approach is that whatever the hoops 
you have to jump through to get the makefile process working right - the result 
is extremely simple to verify.  You would also probably get better performance, 
by avoiding so much subclassing (not that you mentioned that as factor, but...)

Michael















More information about the Python-list mailing list