Hiding Implementation Details - Designing for Abstraction | OneNoughtOne