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.
The assessment will take the form of weekly (primarily formative) exercises along with several more significant (summative) project activities. Additionally, the inter-semester break will be utilised and one or more significant exercises set and assessed within this period. 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 Dr Rosanne English | Isla Ross


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 larger scale software and an introduction to design. The main goal is for students to be able to develop larger 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 the wider problems and challenges in computer science
  • 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 carry out a design by identifying, from a requirements specification, necessary classes, their relationships, and their interactions.
  • to implement a given design and verify and validate the implementation.
  • to prepare a report on a software development exercise.


  • 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.
  • Design and implementation or larger systems: identifying classes and their relationships, iteration through role-playing; UML – class, object and state diagrams, class collaborations through dynamic models (activity, sequence and collaboration diagramming). Augmenting the design with OCL (or similar) to specify pre-conditions, post-conditions and invariants. Implementing a design. Tracing OCL constraints through to code. Basic design patterns.
  • Practical approaches to testing systems: class testing, cluster (integration) testing, system testing (conformance to requirements). Debugging: tools and strategies.
  • Report writing: describing and documenting the systems design, implementation and testing process.

An essential feature of this class is the practical element – the opportunity for students to experience the design and implementation of a small system as individuals.

Indicative Reading*

* This list is indicative only – the class lecturer may recommend alternative reading material. Please do not purchase any of the reading material listed below until you have confirmed with the class lecturer that it will be used for this class.

Head First Object-Oriented Analysis and Design. Brett McLaughlin, Gary Pollice and David West, O’Reilly Media, 2006, ISBN 9780596008673.2002.

Data Structures and Problem Solving Using Java, 4th edition, Mark Allen Weiss, Addison-Wesley, 2009, ISBN 9780321541406.

Data Structures and Algorithms in Java, 2nd edition, Robert Lafore, ISBN 9780672324536.