Object-Oriented Design and Programming