Kies de Nederlandse taal
Course module: 202300188
Programming Theory & Project
Course info
Course module202300188
Credits (ECTS)8
Course typeCourse code module component
Language of instructionEnglish
Contact persondr. T. van Dijk
PreviousNext 3
A. Ahmed
dr. G. Caltais
Contactperson for the course
dr. T. van Dijk
dr. T. van Dijk
dr. T. van Dijk
Academic year2023
Starting block
RemarksRegistration only for AM - TCS double degree students
Application procedureYou apply via OSIRIS Student
Registration using OSIRISYes
Concerning Programming, after successfully finishing this module a student is capable of:
  • Applying the core concepts of imperative programming, such as variables, data types, structured programming statements, recursion, lists, arrays, methods, parameters and exceptions.
  • Applying the core concepts of object-oriented programming, such as encapsulation, abstraction, inheritance and polymorphism.
  • Applying software design patterns to avoid tight coupling between different components of software, such as use of interfaces, the listener pattern and the Model-View-Controller pattern.
  • Explaining problems with concurrent threads (race conditions) and applying basic synchronisation mechanisms to eliminate data races.
  • Implementing client-server programs using Java sockets.
  • Applying the basic concepts and techniques of security engineering to address the challenges of producing secure software.
  • Implementing software of average size (10-20 classes) in Java by using the core concepts of imperative programming and object-orientation.
  • Documenting software of average size (10-20 classes) by defining preconditions, postconditions and (class) invariants.
  • Defining and performing a test plan for software of average size (10-20 classes) with appropriate test coverage.
  • Collaborating with other students according to the pair programming method.
Concerning Academic Skills, after successfully finishing this module a student is capable of:
  • Applying the most important principles and techniques for effective time management, like personal planning elaboration and reflection, identification of personal strengths and weaknesses, giving and receiving feedback, and procrastination avoidance, in a project of limited complexity.
For the programming of software systems, they learn the core concepts of program structuring, object-orientation and multi-threading with the help of the Java programming language, with attention to correctness by means of (informal) preconditions and postconditions. In addition, the module addresses security engineering aspects in the context of Java. In this module the students build upon the knowledge on algorithms and recursion acquired in Module 1. For testing software systems, the students learn to distinguish among the different levels at which testing can be performed (especially unit testing and system testing), the principles underlying a test plan and a couple of relatively simple testing techniques.

For academic and project skills, attention is given to project management, planning, time- and self-management, and reflection on one’s own behavior w.r.t. planning.

Mandatory literature David J. Eck Introduction to Programming Using Java is available online at

For questions concerning the module, please email:

Participating study
Bachelor Applied Mathematics
Participating study
Bachelor Technical Computer Science
Required materials
David J. Eck Introduction to Programming Using Java, Version 9.0, May 2022. Available online at
Course guide
Reader 'Software Systems' 2023-2024.
Recommended materials
Chapter 14, until BlockingQueues (p. 819 - 877) from C.S. Horstmann and G. Cornell, Core Java, volume I: Fundamentals. Prentice Hall, 9th edition, 2012.
Chapter 3, until Making URL Connections (p. 185 - 210) from C.S. Horstmann and G. Cornell, Core Java, volume II: Advanced Features. Prentice Hall, 9th edition, 2012.
Instructional modes


Project supervised

Self study without assistance

Programming Theory and Skills

Programming Project

Kies de Nederlandse taal