Software Design

Software development is a collaborative and professional process, requiring far more than a single individual undertaking programming activities. This module investigates the processes, tools, techniques, and notations required to successfully undertake the development of commercial grade software.

Focussing on the key non-functional parameters of software reuse, scalability, maintainability, and extensibility, students will explore the benefits brought by the rigour associated with object-oriented, strongly typed languages (such as Java). Students will practice the concepts of composition, inheritance, polymorphism, interfaces, and traits and the commonly employed design patterns that they enable. They will also study the processes and notations associated with defining the relationship and behaviour of complex computer software systems.