The objective of this course is to enable students use object-oriented programming concepts and constructs to represent software systems; understand the internal, architectural and usage aspects of the state-of-the-art methods and techniques to develop efficient, secure, robust, multi-threaded, networked, object-oriented applications; and comprehend how to apply them practically.