On this page:
CS 5010:
Program Design Paradigms

CS 5010:
Program Design Paradigms

Fall 2018

The course provides an intensive tour of programming and design. The main objective of the course is expose students to different ways of thinking of a problem and designing robust solutions using a mix of program design paradigms. We will discuss and compare object-oriented and functional design paradigms. We will concentrate on object-oriented program design and the design of abstractions that support the design of reusable software and libraries.

The course 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. Finally it emphasizes on testing, specifically unit testing of components.

An important aspect of this course is to write clean, well-structured, well-documented code. Students will be expected to design and program to facilitate reuse, minimize code duplication and make it “future-proof”. Students will also be expected to explain and defend their design and programming decisions to code panels. In this sense this course trains students to see programming as a “people’s discipline”.

The course is suitable for all graduate students in the MSCS program. It assumes that students have prior experience in programming and design.



“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 Outcomes

At the end of this course, students will be able to: