In this course, students will learn: (i) Object oriented design and software development by performing and discussing OO design for re-use of general purpose applications and small Java applets; (ii) Demonstrate correct use of the basic Java features in a working program: objects, classes, methods, handling, decisions and iterations; (iii) Demonstrate correct use of the following advanced Java features in a working program: in heritance, encapsulation, over loading, polymorphism, abstract classes and interfaces; and (iv) Demonstrate knowledge of GUI-based event-driven programming in a working program assignment utilizing Java GUI components, event- listeners and event-handlers.