CS 5004:
Object-Oriented Design
Summer Full 2020
The course provides an intensive tour of class-based program design and the design of abstractions that support the design of reusable software and libraries. It reviews typical object-oriented concepts such as information hiding, encapsulation and various forms of polymorphism. It contrasts the use of inheritance and composition as dual techniques for software reuse. It provides a deeper understanding of object-oriented design using the use of graphical design notations such as UML and object-oriented design patterns. It also examines the relationship between algorithms and data structures, as well as basic techniques for analyzing algorithm complexity. Finally it emphasizes on testing, specifically unit testing of components.
The course is suitable for students in the ALIGN MS in CS program. It assumes that students have been introduced to the basic principles of program design and computation.
Prerequisites
CS 5001 Intensive Fundamentals of Computer Science
“Think first, experiment later.”
The curiosity to ask questions, try out new things and the motivation to go above and beyond is essential to extract maximum benefit from this course. This is a programming-intensive course, but also emphasizes careful design and thorough testing.
Course Objectives
The main objective of the course is to familiarize students with the concepts and practice of object-oriented design. Although we will use Java as the programming language for this course, most of the concepts would transcend a particular programming langauge. The overall aim is to empower students to go from problem explanation to design, implementation and testing of a solution using an object-oriented language such as Java.
Course Outcomes
At the end of this course, students will be able to:
Design an object-oriented solution to small and moderately-sized problems
Implement a given object-oriented design in the Java programming language
Generate appropriate documentation for developed solutions
Design unit tests for a given component and implement them using the JUnit testing framework for Java programs
Create, refine and express a design in graphical notation such as UML diagrams
Explore existing documentation to describe and use existing libraries and frameworks