- Programming models and languages: imperative programming, object-oriented programming, functional programming, concurrent programming. Introduction to key properties, benefits, and application areas.
- Programming in C++: differential approach to Java. Key differences. Relation to C. Basics: data types, control structures, objects, classes, inheritance, object-based polymorphism. Advanced: parameter passing, references, pointers and explicit memory management, parametric polymorphism with templates.
- Concurrent programming: paradigms (shared data structures versus message passing), techniques and concepts (safety, liveness, concurrency control, services).
- Functional and concurrent programming in Erlang: recursion, list processing, pattern matching, message sending, safety (mutual exclusion), liveness (concurrency adaptors, message ordering).
- Pragmatics: development tools and environments, testing, debugging, profiling.
The overall aim of the course is to provide the necessary knowledge in programming models, concepts, languages, and environments used in today's software construction such as in web-based systems, embedded systems, communication systems, distributed systems, just to name a few.
More specifically, after reading the course, students should be able to:
- know basic characteristics and key concepts of common programming models (object-oriented, imperative, functional, and concurrent programming models) and know about common programming languages that implement these models.
- analyze programming tasks and identify aspects of these tasks that make them suited for the above mentioned programming models.
- apply object-oriented programming concepts from Java in C++: classes, inheritance, object-based polymorphism, and exceptions.
- understand and apply the concepts of C++ as a language following the object-oriented and imperative programming model: parameter passing, pointers and references, explicit memory management, overloading, parametric polymorphism through templates.
- configure, compile, and interface to software libraries in C++.
- design, structure, debug, test, and profile medium-sized programs in C++.
- apply basic functional programming techniques in Erlang: recursion, pattern matching, list processing.
- understand and identify safety and liveness properties of concurrent programs.
- apply mutual exclusion, message ordering, and concurrency adaptors as common synchronization patterns in concurrent programs.
- structure concurrent applications into communicating and cooperating concurrent abstractions.