Linguaggi di Programmazione
Programming Languages Alessandro Cucchiarelli
basic knowledge of computer programming and programming languages.
KNOWLEDGE AND UNDERSTANDING:
The course aims to provide students with advanced knowledge on different programming paradigms, along with the characteristics of the languages and the programming techniques associated with them. The acquisition of such knowledge will allow the students to expand the skills acquired in the other courses related to programming languages and programming methodologies. CAPACITY TO APPLY KNOWLEDGE AND UNDERSTANDING:
At the end of the course the student will be able to design software applications using the most appropriate programming paradigm and choosing the best programming language with respect to the application context. In particular, she/he will have the skills to use the declarative, functional, concurrent, stateful, multi-agent, relational and constraints based programming paradigms, along with the related programming techniques.TRANSVERSAL SKILLS:
The process of knowledge acquisition required by the course will enhance the students learning skills, the ability to deal with programming problems and make judgments to choose the solutions to be adopted, with respect to their efficiency and effectiveness. The illustration and the following deep analysis of a problem solving exercise, during the examination, will stimulate the improvement of the student's communication skills.
1. Introduction to programming concepts - Computation model, programming model and reasoning model. Declarative model: main characteristics.
2. The Programming Languages - Syntax, semantics and pragmatics. Context Free Grammars. EBNF. Syntactic ambiguity. Parsing Techniques. Compilers and interpreters. Data representation: simple types (Integer, Real, Char) and structured types (record, tuple and lists).
3. A model of programming language: the kernel language - Motivation for its use. Definition: linguistic abstractions, data types, variables and partial values, statements and expressions. Language semantics.
4. Procedural abstraction in programming languages - Procedures: lexical scoping, closure, procedures and values, procedures activation. High order programming: procedural abstraction, genericity, instantiation and embedding. Application examples: loop abstraction and folding.
5. Declarative programming techniques - Last call optimization, recursion and iteration, recursion on tuples, exception handling. Data type definition. Abstract data type. Abstract data type programming.
6. Declarative concurrency - Definition. Threads Streams and stream objects. Demand-driven execution. Triggers. Lazy functions. Principles of real-time programming and message-passing.
7. Stateful programming - State definition. The stateful programming model. State representation: cells and arrays. Stateful programming vs. declarative programming.
8. Object Oriented programming - General characteristics. Modelling tools; Class and Objects. Abstraction: inheritance, forwarding and Delegation. Visibility of properties and methods. OOP techniques. Examples.
9. Relational programming - General characteristics. Modelling tools. Choice and Fail. Solutions Space and Search strategies. Logic Programming. Examples.
10. Constraint programming. Contraint definition. Solution techinques and Search strategies. The constraint-cased computation model. Examples.
Development of the examination
LEARNING EVALUATION METHODS
the examination consists of an oral test, aimed at verifying the level of knowledge of the programming languages characteristics, the main programming paradigms and the programming techniques acquired by the student during the course. In order to assess the ability to define algorithms by using the concepts learned, the test begins with the request to code a simple function, according to given specifications, in the programming language adopted in the course and by applying the programming techniques learned. A correct coding is a prerequisite to continue the examination.
LEARNING EVALUATION CRITERIA
the candidate must show an adequate knowledge of the theoretical aspects related to the programming languages and the tools used for the validation of the lexical and syntactic correctness of programs coded in these languages. He/she must also show an adequate knowledge of the main programming paradigms, their correlation and the associated programming techniques, by solving simple application problems. A proper use of the technical language will be also evaluated. The maximum mark will be achieved by demonstrating in-depth knowledge of the course topics and the ability to efficiently and effectively use the knowledge learned to solve the proposed problems.
LEARNING MEASUREMENT CRITERIA
the student's learning will be measured with a maximum of 30 points.
FINAL MARK ALLOCATION CRITERIA
during the examination at least three questions are asked to the student, one of which implies the coding of a simple function by using the programming language adopted in the course. The mark is given as the sum of the evaluations of the answers. The laude is given to the students who have demonstrated a thorough understanding of the course topics.
P.Van Roy, S.Haridi, Concepts, Tecniques, and Models of Computer Programming, MIT Press.
- Ingegneria Informatica e dell'Automazione (Corso di Laurea Magistrale (DM 270/04))