The course covers the following concepts:
- class-based languages (statically typed and dynamically typed)
- typing, covariance, contravariance
- functional programming within an object-oriented procedural language
- meta-programming in dynamic languages
- domain specific languages
- compile-time code transformations, static meta-programming
- concurrent programming
- object-oriented languages without classes (i.e. prototype-based languages)
The concepts will be demonstated using the following languages:
- Groovy
- Scala
- TypeScript/JavaScript, Io
The goal of the course is to show interesting and advanced concepts of modern object-oriented programming languages and demonstrate their application together with practical exercises. The course is intended for students that already have experience with software development in Java/C++/C#. The concepts will be illustrated in
Scala, Groovy, IO, JavaScript and TypeScript programming languages. Prior knowledge of these languages is not necessary. The course will provide adequate introduction to each of them.