Object Oriented Design Course

Object Oriented Design

Info    Material    Exercises    Links    Books
Register    Submit    Get Grade

This course provides knowledge and tools that are widely used in the software industry, and required today from every software developer. Object-oriented design is the world's leading method for planning and implementing software systems in the "real world": Large, complex, constantly changing, having multiple versions, and developed in parallel by many people on many platforms.

The course uses C++ and Java to demonstrate the major design & reuse techniques in use today - design patterns, frameworks, and components. Advanced features of both languages are also covered, along with the proper designs to use them. Third, the course promotes Extreme Programming, and provides practical experience with its principles and tools.

Course Info

What:

Course number 67615, 4 credit points

When:

Wednesday 13:00-15:45

Where:

Feldman B Hall

Who:

David Talby

Mail:

ood@cs

News:

local.course.ood

 

 

 

 

 

Material and Timeline

Click the symbol to download.

Date: Subjects: PowerPoint: Acrobat:
19.2 * Introduction, UML overview and First Pattern J
26.2 Snow day - no class!
5.3 * Structural & Traversal Design Patterns
12.3 Creational Design Patterns
19.3 Purim vacation - no class!
26.3 * Design by Contract & Exceptions J
2.4 Behavioral Design Patterns
9.4 * Structural Design Patterns
16.4, 23.4 Passover vacation - no class!
30.4 * RTTI and Reflection
7.5, 14.5 Independece Day & Student's Day - no class!
21.5 * Aspect-Oriented Programming J
28.5 Frameworks & the Swing Case Study J
4.6 Components & the COM Case Study
11.6 Software Engineering, Course Summary J J

Exercises and Grades

There are three exercises in the course - one programming exercise and two theoretical ones. You must submit all exercises. Exercise submission is in pairs. The course uses the school's official register, submit and getgrade services. The submission deadline of exercises is on Tuesdays at midnight.

The course's final grade is composed of the exercises and a written exam. Each theoretical exercise is worth 10% of the final grade, the practical exercise is worth 20% of the final grade, and the exam is worth the remaining 60%.

The course has a newsgroup which you should use for any questions about the material or exercises that are of general interest. Only send personal requests to the course's email. You must read the news group on a regular basis - any message that is posted in the newsgroup will be considered known by all, and will not be repeated elsewhere.

Exercise

Deadline

  1. Self-Study about Inheritance, Static Typing, the Liskov Substitutability Principle and Multiple Dispatch

March 6th
  1. Design, Code and Unit-Test Using Structural and Traversal Design Patterns
March 30th
  1. Self-Study Design by Contract and Exception-Safe Generic Containers in C++
April 10th

Links

Legend:    = Class material: document given in class as handout
                 = Required material: covers a subject at about the same level the course does
                = Reference material: covers more than the course requires

OOD Principles
Principles of Object-Oriented Design (Summarized)
Liskov Substitution Principle
  General Guidelines for Object-Oriented design
  Cetus Links on Object Orientation

UML
Tutorial
UML Models of Design Patterns
  UML Homepage
  Cetus Links on UML
  Free Tools List: ArgoUML, ProxyDesigner, ...

Design Patterns
David's Design Patterns Slides
The Acyclic Visitor Pattern
  Patterns Home Page
  Huston Design Patterns

XP: Unit Testing & Refactoring
Unit Testing Overview Slides
Unit Testing
JUnit Starter Guide and
C++Unit CookBook
JUnit Unit Testing Framework
Refactoring Catalogue
  RefactorIT Home Page
  Extreme Programming
  Rational Unified Process

Design by Contract
Full Design by Contract Lecture from last year
Design by Contract Extensive Overview, and Lessons of Ariane 5
Introduction to Design by Contract
  iContract: Design by Contract for Java

Aspect-Oriented Programming
Aspect-Oriented Programming JavaWorld article
AspectJ Programming Guide
  AspectJ
  Aspect-Oriented Software Development

Frameworks & Components
Full Swing Case Study Lecture, also in PDF
  Swing Tutorial
  IBM San Francisco Homepage and Technical Summary
  Borland Delphi and Free Component Sites: Torry, Download Center, ...
  Component Frameworks: JavaBeans, COM and .NET

C++
Stack Class Template Code and Binary Search Attempts
RTTI Syntax, Uses & Implementation in C++
  Survey of Design by Contract Tools
  Full C++ Documentation
  Bruce Eckel's Book: Thinking in C++

Java
Reflection Overview and Tutorial
Dynamic Proxy Classes and its uses: Event Handlers, Mapping Views, Design by Contract
  J2SE 1.4 SDK and Tutorials
  Bitter Java: Anti-Patterns in Java
  Bruce Eckel's Book: Thinking in Java
  SwTech.com - Java Concurrency and Threads

Past Tests
Final Test of 2003 and its solution
Final Test of 2002 and its solution
Sample Final Test

More Lectures From Last Year
Design by Contract
Extreme Programming and Refactoring
Frameworks: The Swing Case Study
 

Books

This course covers a wide number of areas, some of which are very new. Hence, there is no single textbook but a number of books, each excellent in its own area. With the exception of design patterns, in class we will only cover a small portion of each book, so you are encouraged to read further on the subjects that catch your interest.

Object Oriented Software Construction, 2nd Edition, by Bertrand Meyer, 1997.

Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Eric Helm, Ralph Johnson and John Vlissides, 1995. There's a CD version of this book in the library.

The C++ Programming Language, 3rd Edition, by Bjarne Stroustroup, 2000.

Effective C++ and More Effective C++, by Scott Meyers, 1996.

The Java Programming Language, 3rd Edition, by Ken Arnold and James Gosling, 1999.

Concurrent Programming in Java: Design Principles and Patterns, 2nd Edition, by Douglas Lea, 2000.

Extreme Programming Explained, by Kent Beck, 2000.

Refactoring: Improving the Design of Existing Code, by Martin Fowler, 1999.

The Unified Modeling Language Reference Manual, Ivan Jacobson, Grady Booch and James Rumbaugh, 1999.

Objects, Components and Frameworks with UML: The Catalysis Approach, by Desmond Francis D'Souza and Alan Cameron Wills, 1999.

Building Application Frameworks : Object-Oriented Foundations of Framework Design,
Implementing Application Frameworks : Object-Oriented Frameworks at Work, and
Domain-Specific Application Frameworks : Frameworks Experience by Industry
by Mohamed E. Fayad, Douglas C. Schmidt and Ralph Johnson (eds.), 1999.

Component Software: Beyond Object-Oriented Programming, by Clemens Szyperski, 1998.