Object-oriented programming is the predominate approach to modern software design and development due in part to its focus on modelling, code re-usability, ease of maintenance and revision, as well of the vast selection of languages and tools available that support OOP. This course builds on the fundamental object-oriented programming concepts presented in OOP I, and provides students with hands-on experience with C++ and Java. Students will use ISO (Standard) C++ to examine encapsulation through classes and objects, as well to explore class inheritance, polymorphism including virtual functions and abstract classes, collection classes and generics, and the C++ standard template library. The later part of the course is an introduction to Java, which is a platform-independent object-oriented programming language. Students will create Java applications implementing commonly used Java classes/packages while reinforcing their understanding of key object-oriented concepts and principles.