Advanced Design and Programming

Students learn concepts of advanced object oriented design and programming using a single semester-long project.

Slides are on GitHub, videos on YouTube, current course on Uni1. Slides and videos are CC BY 4.0 licensed.

1. Method types and properties

Learn the fundamental vocabulary of professionals when talking about the methods of a class.

2. Class and interface design

Understand the difference between abstract and implementation state and learn how to design and work with classes and interfaces.

3. Subtyping and inheritance

Understand subtyping and inheritance and learn how to build extensible class hierarchies.

4. Design by contract

Learn design by contract to better define the relationship between class (interfaces) and their clients.

5. Error and exception handling

Learn how to deal with faults, errors, and failures in class and component design.

6. Value objects

Understand the fundamental difference between objects and values and learn how to implement value types efficiently.

7. Design patterns

Understand design patterns and learn how to use them in system design.

8. Type objects

Understand the type object pattern and learn how to handle model-level vs. instance-level information.

9. Object creation

Learn how to wisely choose between design alternatives using the important example of object creation.

10. Collaboration-based design

Learn how to break down class relationships into collaboration models to better handle design complexity.

11. Object-oriented frameworks

Learn about object oriented frameworks by putting together the different pieces of this course.