A collection of Java-based lab exercises and examples demonstrating core object-oriented programming principles and common design patterns .