The course aim is studying of the mathematical foundations of algorithms, programming languages and the role of programming paradigms in the computational methodologies for problem solving both in a didactic and applicative perspective.
At the end of the course the student shall have achieved
- familiarity with the fundamental principles of the different languages;
- confidence with the different programming styles;
- practical knowledge of at least two programming languages;
- ability to deal with any programming language or environment for the development of solutions;
- mastery in using the knowledge and skills acquired both in a educational and in an applicative context.
General information and bibliographical references are being updated.
The course covers the themes and activities described below.
Effective computational systems and algorithms: abstract machines, recursive and computable functions, rewriting systems; functional and object oriented models.
- Types and Logic.
- Constructive logics: propositional, first and second order systems; natural deduction.
- Type systems and functional languages: simple, first and second order systems; type inference.
- Curry-Howard Isomorphism.
- Programming paradigms: imperative, functional, logical and object oriented styles.
- Foundations of Object Oriented Programming Languages.
- Classes and Objects.
- Class and Object based languages.
- Classes and Types; sub-classes and sub-types; inheritance, polymorphism, static and dynamic binding.
- Parametric classes.
- Introduction to paradigmatic languages and
- in depth study of at least an object oriented language.
- Development of projects of mathematical, educational and applicative interest.
The teaching is divided according to two distinct modes.
- Presentation and study of the topics listed above.
- Development of activities and projects in relation to the topics covered.
In-depth and project activities (even practical) can emphasize educational, theoretical and/or applicative aspects according to the individual students' curriculum.
|Timothy Budd||An Introduction to Object-Oriented Programming (Edizione 3)||Addison-Wesley||2002||0201760312|
|Martín Abadi, Luca Cardelli||A Theory of Objects||Springer Verlag||1996||0387947752|
|O. Hazzan, T. Lapidot, N. Ragonis||Guide to Teaching Computer Science (Edizione 2)||Springer||2015||978-1-4471-6629-0|
|Jean-Yves Girard, Yves Lafont, Paul Taylor||Proof and Types||Cambridge University Press||1989||9780521371810|
|Guy Cousineau, Michel Mauny||The functional approach to programming (Edizione 1)||Cambridge University Press||1998||0-521-5768|
|H. Rogers||Theory of recursive functions and effective computability||MIT Press||1988|
The final exam consists of two parts: a written test and an oral exam.
The written test can include general questions, exercises.
The final oral exam is a discussion on the examination papers, the activity and the subject matter of the course.
The admission to the oral exam is subject to the approval of the written test.
The final written exam can be partially replaced by tasks completed during the term or the development of a project.
The candidate must demonstrate that he has achieved the following knowledge and skills.
- Understand the fundamental principles of programming languages and paradigms, and the mathematical foundations of programming languages;
- Being able to effectively use an object-oriented programming language, and discussing principles and specific problems, in particular, with reference to course content;
- Know how to use knowledge acquired in applications and / or in an educational context.