Principles of Programming

Objectives and outcomes

Students acquire knowledge about advanced techniques and skills in analysis, synthesis, design and
implementation of advanced algorithms and data structures using different programming paradigms.
Students are able to devise and use complex algorithms and data structures. They understand the
difference between common programming paradigms and are able to choose and utilise the appropriate
one in solving specific programming problems.


Programming paradigms: imperative – procedural and object-oriented, declarative – functional and
logical. Reflection. Overview of programming languages for every programming paradigm. Complex data
structures and algorithms in imperative programming. Complex data structures and algorithms in
declarative programming. Mathematical models of computation and their connection to programming
paradigms – Turing machine and Lambda calculus. Modularisation of program source code.

Practical classes

Overview of functional programming concepts in imperative programming languages. Reflection in
different programming languages. Implementation of complex data structures in object-oriented
programming – balanced binary trees, octrees, quadtrees, hash tables, hash trees, tries.
Implementation of the advanced data structures and algorithms in functional programming – different
types of trees, structures based on hash, graphs. Implementation of algorithms in imperative and
functional programming and comparison of the solutions. Modules in different programming languages.