A Java-based approach for teaching principles of adaptive and evolvable software - Gray, Jeff (Science of Computer Programming, 2004)