| Introduction – Software construction and programming paradigms
| Design view: UML diagrams
| Object oriented programming paradigms
| Programming techniques with threads
| Programming techniques with abstract classes and interfaces
| Composition techniques and reflection
| Class design techniques
| Programming techniques using contracts and invariants
| SOLID principles, Inversion of Control, and frameworks
| Flexibility and reuse through design patterns
| Generic programming techniques
| Lambda Expressions and Stream processing