Programming Paradigms and Languages

Course Description

The course gives an overview of programming paradigms. It deals with the concepts common in various imperative programming languages. Furthermore, object-oriented programming is thaught. The fundamentals of declarative programming paradigm and its use in modern programming languages are illustrated as well. The final course topic covers the use of parallelism.

General Competencies

Students will get to know programming concepts commom to different programming languages, which will facilitate further learning of new languages. They will consolidate their knowledge of object-oriented programming paradigm and be introduced to functional programming. They will also gain practical knowledge of programming in a variety of programming languages.

Learning Outcomes

  1. distinguish between different programming paradigms
  2. choose an adequate programming paradigm in solving specific software engineering problems
  3. apply at least one language from imperative, object-oriented and declarative paradigm
  4. classify programming languages according to the paradigms they belong to
  5. recognize the concepts of same kind from different programming languages and paradigms
  6. employ adequate naming and code organization conventions

Forms of Teaching

Lectures

Course lectures through 13 weeks.

Exams

The knowledge will be tested with a mid-term exam and a final exam. During the semester, homeworks will be assigned.

Laboratory Work

In the laboratory excercises students will work on their own programming solutions and demonstrate their correctness.

Experiments

During the lectures, the work in various programming languages will be demonstrated to students in an interactive manner.

Experimental Exercises

Demonstration exercises will demonstrate the use of technology to complete the laboratory exercises and to illustrate real practical use.

Consultations

During the consultation hours the students will be able to supplement their knowledge on all course topics.

Grading Method

Continuous Assessment Exam
Type Threshold Percent of Grade Comment: Percent of Grade
Laboratory Exercises 0 % 50 % 0 % 50 %
Homeworks 0 % 5 % 0 % 5 %
Mid Term Exam: Written 0 % 15 % 0 %
Final Exam: Written 0 % 15 %
Final Exam: Oral 15 %
Exam: Written 0 % 30 %
Exam: Oral 15 %
Comment:

In order to get the pass grade, students have to get at least 7.5 points on the oral exam.

Week by Week Schedule

  1. Abstract machines. Interpreters. Compilers. Expressiveness of programming languages.
  2. Names and environments. Blocks. Static and dynamic scope. Static and dynamic memory management. Scope rules implementation.
  3. Control structures. Structured programming. Tail recursion.
  4. Procedures. Higher-order functions. Exceptions.
  5. Data types. Static and dynamic type checking. Complex types. Type equivalence. Polymorphism. Type inference. Dangling references. Garbage collectors. Abstract data types. Information hiding. Modules.
  6. Demonstration lecture: writing program code.
  7. Exam preparation hours.
  8. Exams.
  9. Exams.
  10. The object-oriented programming paradigm. Dynamic method lookup. Single and multiple inheritance. Dynamic method dispatch. Polymorphism in object-oriented programming paradigm. Generics. Covariant and contravariant overloading.
  11. Demonstration lecture: application development in an object-oriented programming language.
  12. The functional paradigm. Computations without state. Evaluation strategies. Pattern matching. The basics of lambda calculus.
  13. Demonstration lecture: programming in a functional programming language.
  14. Logic paradigm. Deduction as computation. Theory of unification. Logic programming with constraints.
  15. Paralellism. Historical overview of programming languages and paradigms.

Study Programmes

Software Engineering and Information Systems -> Computing (Module)

Computer Science -> Computing (Module)

Telecommunication and Informatics -> Computing (Module)

Prerequisites

Literature

M. Gabrielli, S. Martini (2010.), Programming Languages: Principles and Paradigms, Springer
S. McConnell (2004.), Code Complete: A Practical Handbook of Software Construction, 2/e, MS Press
D. P. Friedman, M. Wand, C. T. Haynes (2001.), Essentials of Programming Languages, 2/e, MIT Press
Tomas Petricek, Jon Skeet (2010.), Real World Functional Programming: With Examples in F# and C#, Manning Publications
B. Tucker, R. E. Noonan (2001.), Programming Languages: Principles and Paradigms, McGraw-Hill

Grading System

4 ECTS
L1 English Level
L2 e-Learning
45 Lecturers
0 Exercises
15 Laboratory exercises

Grading

90 Excellent
80 Very Good
65 Good
50 Acceptable