Principles of Object Oriented Modeling and Design

Rajiv Gupta, Ph.D. 
Adjunct Associate Professor 
Graduate Division
Dept. of Computer Science 
Bill Hoffman
Adjunct Instructor
Graduate Division
Dept. of Computer Science

Enrollment: If you have any question regarding the wait-list, or enrollment into the course, please send e-mail to Ms. Anina Karmen at anina@cs.nyu.edu

Course Mailing List: Please subscribe to g22_3033_001_su99@cs.nyu.edu on majordom@cs.nyu.edu

Week 1  Week 2  Week 3 Week 4  Week 5  Week 6 
Week 7  Week 8 Week 9  Week 10  Week 11  Week 12 

Mondays in weeks 3 and 8 are holidays. We will make-up one day by giving a take-home mid-term in Week 7, and another day by giving only a 30 minute final exam.

Programming Assignments

HW 1  HW 2  HW 3  HW 4  Mid-term  HW 5  Mid-term Ans 

General Information

Office: Room 401 CIWW
Office Hours: 5 to 6 pm and 8.30 to 9.30 pm, every Monday
E-mail: rgupta@cs.nyu.edu
E-mail: whoffman@nycap.rr.com (for all programming issues)
Phone: 212-998-3081 (office) and 518-387-6190 to leave a voice mail.

Text Book

  1. "The Unified Modeling Language Users Guide," by Grady Boock, James Rumbaugh, and Ivar Jacobson, Addison-Wesley, 1999.
  2. Programming assignments in C++. Any reference book C++ programming language will do.
  3. Reference book. "Design Patterns : Elements of Reusable Object-Oriented Software by Erich Gamma," by Richard Helm, Ralph Johnson, John Vlissides, Grady Booch Addison-Wesley Pub Co (ISBN: 0201633612).
  4. Software environment for implementing your OO design will be provided.

Course Description

The course will develop the basic principles of OO modeling and design, and illustrate them using C++. The course will cover a formal modeling methodology using the Unified Modeling Language (UML) notation. Using UML one can model and visualize a large software system by specifying its components, their interrelationships, and dependencies. Thus UML provides a graphical blue-print of a large software system. Anyone who anticipates being involved in large software systems, in any capacity, will benefit from this course.

While the designs will be done in UML, they will be implemented using C++. It is not a course about the C++ programming language. With some help from the instructor and the TA, the students are expected to learn this language on their own as the course progresses. The course is organized in such a manner that initially, little or no knowledge of any object-oriented language is required. You will become more and more proficient in the language constructs as the course progresses. Depending on the proficiency of the class in C++, I may give a quick-start introduction to this language.


Students are expected to have done at least one basic programming course. They should be familiar with basic data-structures and programming constructs. In addition, they should be familiar with programming in the Unix environment, using a debugger, etc. Any knowledge of C++ or Java is not a requirement for this course. Students would be expected to learn this language in the first two to three weeks of the course. Students with advanced programming experience in C++ or Java may not want to take this course as they would already be familiar with the design principles covered in the first half of the course.

Design/Programming Assignments

In traditional programming courses, you write a program completely on your own. This proram usually implements a well circumiscribed algorithm, and is generally rather small (less than 5 to 10 thousand lines of code). But this is not how things are in the real-world. You rarely write the first line of a program, and you may write the last line only if your company goes under. In order to give you a more real-wold feel for the way large object-oriented programs are designed and implemented, you will start your programming assignments with a "base program" called TargetJr. TargetJr has about 500,000 lines of code and provides you with a lot of nifty classes that are there for you to use. In addtion, TargetJr takes care of many of the user-interface issues which can take a long time to implement, something which is not a part of this course. TargetJr is an image-processing environment developed at GE Corporate R&D. The fact that it is an image-processing environment is not of consequence as far as this course is concerned. You don't have to know image processing to do the programming assignments.

Each programming assignment will add a very well defined functionality to TargetJr. These will be well constrained, so that you learn about the topic that was covered that week without getting lost in the lines and lines of code that already exist. Each assignment will start with a general description of the problem, and then through a set of specific questions, challenge the students to come up with a design and implement the basic design. Each week, additional details about the problem will be disclosed, and the students will be asked to augment and modify their program to implement additional capabilities. Of course, if your basic design is extensible, you should have no problem in implementing or changing the program.

At the end of the every 4 week block, each student is expected to turn in their formal UML design, and demonstrate a functioning program on a set of examples. In some weeks, you may be asked to implement a slightly different aspect of the over all problem, and share your code with the rest of the class. Because the design is object-oriented, the parts should fit. You will not be held responsible for errors in the code provided by others.


The final grade will be based on the following components.
  1. Midterm Exam: A one hour exam covering the first half of the course. (15%)
  2. Final Exam: A one hour exam covering the second half of the course. (15%)
  3. 7 or 8 Weekly Programming Assignments. (65%)
  4. Class attendance and participation. (5%)

Topics and Readings

Please see course overview in Lecture 1, Part I.

About the Instructors

Rajiv Gupta, Ph.D.
GE Corporate R&D (Image Understanding Group)
Currently on part-time leave to do an MD
at Cornell University. William A. Hoffman
GE Corporate R&D (Image Understanding Group since 1990)
CIO Kitware  www.kitware.com
Experience: C++ for 9 years, C for 15,
RPI Large Systems Course Fall 1998