CS207 – Advanced Programming

Credits 20
Level 2
Prerequisites CS105 Programming Foundations
Availability Possible elective
Contact Lectures: 44 | Labs: 44
Assignments: 84 | Self study: 28
Assessment Assessment is by 100% coursework. In semester 1, assessment will take the form of 4 out of 8 weekly practical exercises, 2 class tests and the consolidation week will be utilised with a more significant practical exercise set for this period. Semester two assessment uses also uses continuous assessment through exercises ensuring the achievement of the Learning Objectives related to the software development process. A key part of the course is reflecting on the consequence of design choices made and quality of implementation, and the consideration and appreciation of alternative approaches.
Resit The resit for the class will take the form of a three-hour practical examination.
Lecturer Isla Ross | Dr Martin Goodfellow


To further the students’ skills in object-oriented programming, provide knowledge of key abstract data types along with their implementation and usage, and to provide experience in the development of  software and an introduction to design. The main goal is for students to be able to develop programs with specialized data structures and utilizing APIs from a specification, and being able to ensure and show how the system they developed matches the specification.

Learning Outcomes

On completion of this class, a student should be able:

  • to understand and have implemented a range of fundamental abstract data types.
  • to understand a number of essential algorithms that are closely associated with these data types.
  • to use these algorithms and abstract data types in practical applications.
  • to gather and document requirements using a modelling approach such as use cases.
  • to design a small system using a modelling approach such as class diagrams.
  • to implement a software design to produce a small system as part of a team.
  • to write unit tests for code to verify an implementation


  • Introduction to Abstract Data Types*: lists, stacks, queues, hash tables, trees, sets, graphs etc.; examples of their definition, different implementations, ADT class libraries and their usage.
  • Key algorithms associated with ADTs such as searching and sorting*: introduction to a range of techniques, including the divide and conquer approach. Implementation of algorithms and abstract data types (the aim here is to present a small number of basic, popular algorithms to enable pragmatic implementation, rather than comprehensive coverage).
  • Trees: n-ary and binary* trees; typical instances and uses of trees; ADT implementation; algorithms covered include insertion* and traversal; the significance of different modes of traversal.#
  • The second semester will introduce the overall software development process. This will include requirements, analysis, design, implementation and testing. These stages will be documented using models such as class diagrams, activity diagrams, and sequence diagrams as defined in the Unified Modelling Language (UML).An essential feature of this class is the practical element – the opportunity for students to experience the design and implementation of a small system in small teams.* topics to be covered in semester 1, to facilitate semester 2 content of CS208

Indicative Reading*

* Recommended texts will be provided in class where appropriate.