Designing for Change - Achieving the Open/Closed Principle Through Abstraction | OneNoughtOne