This is an introductory course on Object-Oriented Programming (OOP). It assumes that students already know the basics of a procedural programming language such as C and can write computer programs independently either through previous courses or working experience. It is also desirable that students have some basic understanding of simple data structures such as arrays, linked lists, and hash tables. The course focuses on the fundamental concepts and techniques of object-oriented programming along with suitable applications. Students will have ample opportunities to improve their development skills with the Java programming language through assignments and lab exercises.

An introduction to the issues and techniques encountered in the design and construction of software systems. The theory and models of software evolution. Topics include requirements and specifications, prototyping, design principles, object-oriented analysis and design, standards, integration, risk analysis, testing, and debugging.