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.
What: |
Course number 67615, 4 credit points |
When: |
Wednesday 13:00-15:45 |
Where: |
Feldman B Hall |
Who: |
|
Mail: |
|
News: |
Click the symbol to download.
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 |
March 6th | |
March 30th | |
April 10th |
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
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.