CCIS HOME | NU HOME | SEARCH  
Northeastern College of Computer and Information Science
About the College
Undergraduate
Graduate
Research
Cooperative Education
People
Organizations
Resources
Colloquium & Seminars
Contact Information

Course Number & Title:
 
CS U370 Object-Oriented Design

 
Course Description:
 
The course presents the theory and practice of object-oriented programming.  
The course enhances students understanding of the concepts of object, class, 
message, method, inheritance, and genericity.  The course covers a basic 
model for objects; the principles of types and polymorphism in object-oriented 
programming languages; different forms of abstraction; and theory and practice 
of reuse. The course also introduces students to some object-oriented design 
patterns that practitioners have found useful.

 
Prerequisites:
 
CS U213.

 
Textbooks:
 
The choice of textbook is left to the individual instructor.

4.1 Possible primary textbooks

4.1.1 Bertrand Meyer, Object-Oriented Software Construction,
2nd edition, Prentice Hall PTR, 2000, ISBN 0-13-629155-4.

4.1.2 Timothy A. Budd, An Introduction to Object-Oriented
Programming, 3rd edition, Addison-Wesley, ISBN 0-201-76031-2.

4.1.3 Cay Horstmann, Object-Oriented Design & Patterns,
Wiley, 2004, ISBN 0-471-31966X.

4.2 Possible references for faculty

4.2.1 Erich Gamma, Richard Helm, Ralph Johnson, & John
Vlissides, Design Patterns: Elements of Reusable Object-Oriented
Software, Addison-Wesley, 1995, ISBN 0-201-63361-2.

4.2.2 Martin Fowler, Refactoring: Improving the Design of
Existing Code, Addison-Wesley, 1999, ISBN 0-201-48567-2.

4.2.3 Martin Fowler, UML Distilled, 3rd Edition,
Addison-Wesley, 2004, ISBN 0-321-19368-7.

4.2.4 Kent Beck, eXtreme Programming eXplained: Embrace Change,
Addison-Wesley, 2000, ISBN 0-201-61641-6.

4.2.5 Kent Beck, Test-Driven Development by Example,
Addison-Wesley, 2003, 0-321-14653-0.

4.2.6 Gene Korienek, Tom Wrensch, and Doug Dechow, SQUEAK
 A Quick Trip to ObjectLand, Addison-Wesley, 2002, ISBN
0-201-73114-2.



 
Topics Covered
 
This outline is topical, not chronological.

5.1 The Basics of Objects and OOP

5.2 Object-Oriented Programming
    5.2.1 Ad hoc polymorphism
    5.2.2 Inclusion polymorphism (subtype polymorphism)
    5.2.3 Parametric polymorphism
    5.2.4 Dynamic dispatch (single-, double-, and multi-dispatch)

5.3 Object-Oriented Design
    5.3.1 What are the objects?
    5.3.2 How do objects behave?
    5.3.3 How do objects interact?
    5.3.4 Organized approaches to designing objects and classes    
    5.3.5 Immutable versus mutable
    5.3.6 Overloading versus overriding
    5.3.7 Refactoring
    5.3.8 Class diagrams (UML) for inheritance and composition

5.4 Abstraction
    5.4.1 The abstraction barrier
    5.4.2 The client perspective versus the implementor perspective
    5.4.3 Specifications as contracts
    5.4.4 Interfaces 
    5.4.5 Interchangeability/substitutability of implementations
    5.4.6 Representation independence
    5.4.7 Information hiding
    5.4.8 Minimizing information exposure
    5.4.9 Encapsulation
    5.4.10 Tradeoffs between information hiding, encapsulation, and reuse
    5.4.11 Abstract classes

5.5 Reuse
    5.5.1 Inheritance 
    5.5.2 Composition 
    5.5.3 Standard data types
    5.5.4 Standard data structures
    5.5.5 Standard components
    5.5.6 Designing software for reuse
    
5.6 Common Design Patterns
    5.6.1 Factory
    5.6.2 Visitor    
    5.6.3 Iterator
    5.6.4 Wrapper/Adaptor
    5.6.5 Composite

5.7 Testing
    5.7.1 Black-box testing
    5.7.2 Glass-box testing
    5.7.3 Unit testing
    5.7.4 Integration testing


 
Course Outcomes
 
Upon completion of this course, a student should

6.1 Understand the fundamental concepts of object-oriented
programming

    6.1.1 The concept of "object", "class", "message", "method",
    "inheritance"

    6.1.2 The use of the idiom of dynamic dispatch as supported
    by at least one object-oriented language in contrast to the
    use of explicit control structures.

6.2 Be able to design an object-oriented system through
programming in at least one OO language

    6.2.1 Be aware of whether the student is a client or the
    implementor of each abstraction the student uses

    6.2.2 Understand how the abstraction barrier facilitates
    program transformations such as refactoring that can
    transform a prototype into a better program

    6.2.3 Recognize simple examples of subtyping in an OO
    language.

    6.2.4 Be able to reuse software through inheritance,
    composition, inclusion polymorphism, parametric polymorphism,
    and libraries of standard data structures and components

    6.2.5 Be able to use several of the most common design
    patterns, including at least the factory, visitor, and
    iterator patterns

    6.2.6 Know at least one organized approach to the design
    of objects and classes in an OO program

    6.2.7 Be able to build basic test suites

6.3 Be equipped with a foundation for learning other OO
languages and other programming paradigms

 
Measurement of Course Outcomes
 
The course outcomes will be measured and verified by:

7.1 Programming homeworks (five to ten recommended)

It is recommended that several of the assignments be graded by
executing the code, not just by reading it; and that several
of the assignments be graded by reading the code, not just
by executing it.  It is recommended that several of the
assignments involve black-box testing of code written by other
students in the class. It is recommended that the practical
parts of the course include teaching students how to build
and to manage automated tests.

7.2 Written homeworks (optional at the discretion of instructor)

It is recommended that inline documentation be always required
as part of the coding standards. It is recommended that several
of the assignments require external documentation as well as
inline documentation.

7.3 Other optional means at the discretion of instructor:
    - Quizzes
    - Major exams during the term
    - Final exam
    - Electronic portfolio


 
Relation to Integrated Learning Models (ILM)
 
CS U370 presents the fundamental design principles and
thought processes of the object-oriented programming paradigm.
These concepts are reinforced through practical programming
exercises.  Since the object-oriented methodology is widely
used in industry, this course is a central course for preparing
students for their first coop assignment.


 
Relation to Curriculum 2001 (Optional Section)
 
Omitted.


 














360 Huntington Ave. • Boston, MA 02115 • Phone: (617) 373-2462