A series of articles written for ACCU Overload discussing extensible software. Inspired by the late John Vlissides quote:
"A hallmark - if not the hallmark - of good object oriented design is that you can modify and extend a system by adding code rather than hacking it.... In short, change is additive, not invasive. Additive change is potentially easier, more localized, less error-prone, and ultimately more maintainable than invasive change." John Vlissides, The C++ Report, February 1998
I argue that software extensiblity, and maybe software engineering, is a way of thinking. The third article on the subject takes a look at software development and business strategy - Extendable software and the bigger picture - and the role extensibility can play in keeping software soft.
This series was continued in the building series.
- Extendable software and the Bigger Picture (Overload 51 - October 2002)
- Software Logistics (side box) (Overload 51 - October 2002)
- Example System and example source code.
Writing Extendable Software (Overload 49 - June 2002)
The Scoping Problem (side box) (Overload 49 - June 2002)
The Philosophy of extensible software (Overload 50 - August 2002)
Just what the heck is software engineering? (never published)
Notes on the example system
- Thanks to Phil Bass and Thaddaeus Frogley for there help with comments on the writing and code.
- Of the code I have it compiling under VC++ 6.0 (using .dsp's) and gcc 2.95.3 (akefiles) using Cygwin - sorry, no Linux build.
- The gcc makefiles are ripped out of another project and I should do some work on them before exposing them to the world - mainly the dependencies (Cygwin doesn't ship makedepend which they where using) and check there are no misleading remnants of their previous life.
- The example used the Boost Random Number Library so you will need the Boost library to compile this code. In VC++ you will need to go into the project settings and change the path to this. Under Cygwin you can just set BOOST_ROOT in your environment.
Improvements never done
- Add makedepend type functionality back to the makefiles
- Review the makefiles, see if I can reduce them some more
- Create a utils library for the RamdomPrice function - this can wait until there is more code to put in there
- Try to reintroduce the link-time extension mechanism. What I had didn't work very well so I removed it, thanks to Thad I know have some ideas on making it work properly
- Add some writing on run time extension with scripting - may be able to link this up with thoughts on configuration (see Accent writings on this subject.)
- Get a Linux version working : this will need some abstraction of the dynamic libraries loading
- Make a build on VC++.net, see if we can remove some of the _MSC_VER macros
- Reintroduce discount contract - probably with link time extension