Course Details for A.Y. 2016/2017
Name:
Principi e Paradigmi di Programmazione / Programming Principles and Paradigms
Basic information
Credits:
: Bachelor Degree in Computer Science 6 CFU (b)
Degree(s):
Bachelor Degree in Computer Science 3rd anno curriculum General Elective
Language:
Italian
Course Objectives
The aim of the course is to present three main programming paradigms: imperative, functional and object-oriented; one main objective is to highlight different characteristics and common aspects of such paradigms. These aspects will be analyzed by accounting for both the abstractions provided by a specific language and its design principles. Giving an overview of some real languages conforming different paradigms will carry on the analysis.
Course Content
- Introduction and background notions
- Functional languages: Lisp, Scheme
- Functions, recursion, and lists
- Hybrid languages: the family of Algol languages and ML
- Type system
- Type inference in ML
- Polymorphism
- Scope and Memory management
- Control structures in sequential languages
- Base concepts about object-oriented languages: C++ and Java
Learning Outcomes (Dublin Descriptors)
On successful completion of this course, the student should
- know the fundamental principles of the different programming paradigms and the main programming techniques to be adopted by using a specific programming paradigm.
- be aware of the constructs that distinguish a specific programming paradigm.
- know and understand the main common and distinctive characteristics of the several existing programming paradigms
- be able to describe the normal steps in developing a program using a common high level programming language and have capacity of studying in detail specific languages conforming to specific programming paradigms.
- be able to declare and process appropriate data structures and to apply selection constructs in conditional statements.
- be able to employ repetition constructs in programs, including nested loops.
- be able to declare and apply one-dimensional arrays.
- be able to implement input and output statements.
- be able to construct programs which employ procedures and functions.
- be able to explain how to identify program errors and how to test programs in a systematic manner.
- be able to complete the detailed documentation of one or more programs.
- be able to complete a programming project and demonstrate the skills required in the management of a software development project.
Prerequisites and Learning Activities
Background notions about the imperative programming paradigm (as gained within the course of "Fondamenti di Programmazione con Laboratorio").
Assessment Methods and Criteria
Pre-Assessment:
There is no formal pre-assessment, but Course pre-requisites are clearly stated on the Module website. Fulfillment of such pre-requisites is verified by formative assessment. Additional lectures or short seminars or individual homework might be provided by the teacher in case significant problems are detected.
Formative Assessment:
The formative assessment is performed via interactive interaction between teacher and students during lectures. Students are aware since the beginning of the Course that they will be involved (in turns) in:
- Questioning and discussion, by means of open oral questions to the class or to single students.
- Exit Slips: students are assigned written questions or exercises to be answered in 10 minutes, and a student is then selected for oral presentation of her/his solution to the class.
Summative Assessment:
Written test followed by an optional oral exam.
In order to help the students to split the workload, an optional mid-term written test will also be provided, which is meant to cover the first part of the course.
The written test includes (i) a theoretical part and (ii) a practical part. The former aims at verifying the level of knowledge of the concepts underpinning the course topics. It is organized in terms of open questions to which the student has to answer in detail. The latter is meant to verify the student’s ability to reason on and solve practical problems hence providing a detailed explanation of the applied solution.
Criteria of evaluation will be: (i) the level of knowledge of the course topics and the ability to reason on them in order to devise possible solutions to related problems, hence following a creative approach; (ii) the proper use of technical terminology and of the mathematical concepts underlying the course topics, e.g., functions, algebra, and logic; and (iii) the clarity and completeness of explanations.
The oral exam will typically cover the areas of the written answers that need clarification plus, possibly, additional subjects proposed by the teacher. The oral test can be required either by the student, to improve grades or by the teacher, in presence of significant mistakes/misunderstandings in the written test.
Assessment breakdown: 100% mid-term plus end-of-semester summative assessment.
The written test (2 hours) consists in:
(a) Two or three short essays, to cover point (i), 50% of total marks;
(b) Two or three exercises, to cover point (ii), 50% of total marks.
All parts can result in negative marks if the answer is omitted or seriously flawed.
The oral test (max 1 hour) consists of one question for each serious mistake in the written test (the answer compensates the negative marks obtained therein) and one question for each 3 extra points that the student intends to add to the written test marks.
The final marks of the “Programming Principles and Paradigms” 6 CFU Module are obtained as the average among the marks of the written and oral tests.
Textbooks
- J. Mitchell, Concepts in Programming Languages , Cambridge University Press . 2003. Il testo è in Inglese e alcune copie sono disponibili in biblioteca
Course page updates
This course page is available (with possible updates) also for the following academic years:
To read the current information on this course, if it is still available, go to the university course catalogue .
Course information last updated on: 08 giugno 2017, 10:39