This course offers students an opportunity to deepen their understanding of the concepts and practice of program design: learn how to design and codify software components using object-oriented design principles and, more generally, best programming practices. The course equips students with practical program design skills via case studies in modern software libraries and hands-on coding sessions in Java and/or Python.
In this course, students will learn how to represent data and methods that manipulate that data using classes (or objects); and how to use object-oriented design patterns to design and implement more complex compositions.
This course is suitable for graduate students of disciplines other than computing who are keen to acquire new (or deepen existing) knowledge of programming.
- Representing (complex) data with objects
- Representing data collections with objects
- Equality and comparison between objects
- How to test programs
- Composing programs with the model-view-controller architecture
- Code reuse via inheritance and composition
- Program design patterns (e.g. the adapter, strategy, decorator, visitor, factory and builder design pattern)