Outline
Course Outline
- Introduction
- Goals of this course
- Object-Oriented Design
- Refactoring
- Software Quality
- Design by Contract
- Contracts, exceptions, failures, defects and assertions
- Data abstraction — Stack example
- Class invariants
- Programming by Contract
- Assertions
- A Testing Framework
- JUnit — a testing framework
- Testing practices
- Money and MoneyBag — a testing case study
- Double Dispatch — how to add different types of objects
- Debugging and Tools
- Testing — definitions and strategies
- Understanding the run-time stack and heap
- Debuggers
- Timing benchmarks
- Profilers
- Version control systems
- Iterative Development
- The iterative software lifecycle
- Responsibility-driven design
- TicTacToe example
- Inheritance and Refactoring
- Uses of inheritance — conceptual hierarchy, polymorphism and code reuse
- TicTacToe and Gomoku — interfaces and abstract classes
- Refactoring — iterative strategies for improving design
- Top-down decomposition — decomposing algorithms to reduce complexity
- GUI Construction
- Model-View-Controller
- AWT and Swing Components, Containers and Layout Managers
- Events and Listeners
- Observers and Observables
- Jar files, Ant and Javadoc
- Applets
- Java: Generics and Annotations
- Generics
- Annotations
- Model-Driven Engineering
- Guidelines, Idioms and Patterns
- Idioms, Patterns and Frameworks — Programming style: Code Talks; Code Smells
- Basic Idioms — Delegation, Super, Interface
- Some Design Patterns — Adapter, Proxy, Template Method, Composite, Observer, Visitor, State
- A bit of C++
- C++ vs C
- C++ vs Java
- References vs pointers
- C++ classes: Orthodox Canonical Form
- Templates and STL
- Industrial Practices
- Invited talk
- A bit of Smalltalk
- Some history
- Smalltalk syntax & object model
- The Smalltalk environment
- Final Exam