Algorithms and Data Structures (Undergraduate)
The module is an introduction to Algorithms and Data Structures. It covers topics such as running time of algorithms, asymptotic complexity, simple and advanced sorting algorithms, divide and conquer algorithms, recursion, dynamic programming, greedy algorithms, basic data structures (strings, arrays, lists), linked lists, trees, hash tables.
Further Object Oriented Programming (Undergraduate)
This module is about writing code in a way that breaks large programs into small well-defined parts. It takes further what was taught about object-oriented programming in the first year, and its use in software engineering in the second year, emphasising practical coding aspects. The "SOLID" principles of good program design will be covered, and also implementation of important design patterns. Further aspects of the language Java will be considered, and comparison of Java with other programming languages. Some time will be given to programming in Scala, a functional style language implemented with the Java Virtual Machine/
Object-Oriented Programming (Undergraduate)
Major topics include the concepts of class, object, method, subclass, inheritance and their use in programming. The relevance of the object oriented style with respect to concrete software problems will be stressed both in lectures and labs. There will be two hours of lectures per week, and each student will have a weekly timetabled lab session. In addition, you will be expected to spend further time outside scheduled lab periods in the lab (or at home machines if they are available), and to read textbooks and review notes.
Software Engineering (Undergraduate)
Software Engineering is concerned with applying engineering principles to the production of software. This module provides the management principles, theoretical foundations, tools, notation and background necessary to develop and test large-scale software systems. The practical part of the module consists of lab assignments in which students use a range of relevant tools (a Java programming IDE, unit testing tool, configuration management tool, UML design tool, and project planning tool). Aims To ensure students have the necessary understanding of the principles and tools needed to build and test large-scale software systems. In particular, it provides the necessary background for students to undertake a significant group project assignment in subsequent modules or employment.