This course includes object-oriented programming using classes, objects, inheritance leading to data abstraction with emphasis on software engineering principles. Topics covered are Interfaces, Lambda expressions, Exception handling, Graphical User Interface programming, Files, Input/output streams, UML classes and diagramming, generic collections, recursion, threads, and the use of related APIs.