Course Details
Name:
Type:
Basic information
Code:
Sector:
Credits:
Term:
Module Laboratorio di Programmazione I: 1° semester
Degree(s):
Language:
Teacher(s):
Course Objectives
Module Fondamenti di Programmazione: This course introduces essentials of programming languages. Students, applying rules of Syntax and Semantics, develop the skills in program design, implementation and debugging to solve computational problems in programming languages. The course focuses in particular on the Operational Semantics of a subset of the Java Programming Language.
Module Laboratorio di Programmazione I: The goal of this course is to introduce the basic notions of imperative and objectoriented programming. On successful completion of this module, the student should be able to solve simple problems, implement the related algorithms in a structured programming language, and use a computer to run simple programs.
Course Content
Module Fondamenti di Programmazione
 Programming Languages Syntax: ContextFree Grammars, Derivation Trees, Ambiguity
 Programming Languages Semantics: Transition System
 Operational Semantics for +/ Java
 Expressions, Commands, Class Library
Module Laboratorio di Programmazione I
 Algorithms, programs and programming languages. Flow charts, structure of a program.
 Basic data types. Constants, variables, arithmetic expressions, boolean expressions. Assignment. input/Output primitives. Control structures: sequence, conditional, iteration and loop.
 Structured data types: array, string.
 Methods. Block structure and scoping rules. Parameter passing. Sideeffects of methods. Recursion and recursive methods.
 Classes and objects: basic notions, object creation and their manipulation. Static methods. Array of objects.
 Inheritance and hierarchies. Polymorphism and late binding. Exceptions and their handling.
Learning Outcomes (Dublin Descriptors)
On successful completion of this course, the student should
Module Fondamenti di Programmazione
 o know and understand the importance of structured programming concepts as well as good programming practice; o understand the role of primary data structures and algorithms and have the ability to perform operations involving various data structures and implement some simple examples of them; o be able to utilize the basic elements of programming characterbased I/O, assignment, loops, conditionals, vectors, functions and parameterpassing in programming practice such as reading, writing and debugging a program; o be able to apply techniques for expression evaluation, and role of operator precedence and associativity in expression evaluation in programming practice; o be able to apply syntax of the programming language to design, implement, test and debug a nontrivial program that solves a practical problem.
Module Laboratorio di Programmazione I
 have profound knowledge of the basic concepts of imperative and objectoriented programming, have knowledge and understanding of algorithms for solving simple problems, have knowledge and understanding of the core of the programming language used for coding the algorithms, have knowledge of a simple environment to run programs;
 understand and apply definitions as given by the syntax and the semantics of the programming language;

analyse and discuss different algorithms for solving a problem and different implementations of the same algorithm in the given language;
 explain and illustrate the fundamental notions of basic and structured data types, control structures, methods definition and invocation, parameter passing, recursive methods, classes and objects, inheritance and exceptions;
 demonstrate skill in problemsolving, demonstrate ability to use a (subset of a) programming language to code algorithms and test the solutions on computer, demonstrate capacity of abstraction and modularity.
Prerequisites and Learning Activities
Module Fondamenti di Programmazione: Knowledge of basic math functions and sets, and logical expressions. Basics of objectoriented programming can be acquired with the integrated module Programming Laboratory.
Module Laboratorio di Programmazione I: Basic notions of mathematics (in particular, sets and functions). No knowledge on programming and specific programming languages is required.
Teaching Methods
Language: Italian
Module Fondamenti di Programmazione: Lectures and exercises on blackboard.
Language: Italian
Reference textbooks:
 R. Barbuti, P. Mancarella e F. Turini, Elementi di Semantica Operazionale. 2004/2005. https://informatica.di.univaq.it/getres.php?resid=1171
 R. Barbuti, P. Mancarella, D. Pedreschi, F. Turini, Elementi di Sintassi dei Linguaggi di Programmazione. Corso di Laurea in Informatica Università di Pisa a.a. 2004/2005. https://informatica.di.univaq.it/getres.php?resid=746
 R. Barbuti, P. Mancarella e C. Montangero, Semantica Operazionale. https://informatica.di.univaq.it/getres.php?resid=747
 M. Autili, P. Inverardi, Semantica Operazionale di +/ Java  03 Dicembre 2010. 2010. http://informatica.di.univaq.it/getres.php?resid=1053
Module Laboratorio di Programmazione I: Lectures and exercises
Assessment Methods and Criteria
Module Fondamenti di Programmazione: The exam consists of a written test and an oral test required.
Who has acquired the frequency in the years prior to 2007/08 will have to take the exam of the course Fundamentals of Programming. Students enrolled in the A. A. 2007/08 will have to take the exam only Fundamentals of Programming with Lab.
Module Laboratorio di Programmazione I: PreAssessment:
There is no formal preassessment, but the prerequisites of the course are clearly stated on the module website. Fulfillment of such prerequisites is verified by formative assessment. Additional lectures 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 single students.
 Assignment of written exercises to be solved during a lecture 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 midterm written test will also be provided, which is meant to cover the first part of the course.
The written test includes exercises on (i) evaluation of Java code and understanding of its syntax and semantics, (ii) defining static methods (iterative and recursive) using data structures and objects and possibly raising exceptions and (iii) defining classes, subclasses and instance methods using inheritance, information hiding, code reuse, late binding.
The written test aims at verifying (1) the level of knowledge of the constructs of the subset of the programming language introduced during the course and (2) the skills in problem solving and in implementing the proposed algorithms with correct code. This in order to verify the ability of analyzing simple problems, of applying the techniques learnt during the course, of implementing the proposed solutions correctly, and of evaluating alternative solutions.
Criteria of evaluation will be: (i) the level of knowledge of the course topics and the ability of reasoning on them; (ii) the proper use of technical terminology and of the mathematical concepts underlying the course topics, e.g. functions and logic; and (iii) the clarity and completeness of solutions.
The written test (3 hours) consists in:
(a) Three or four exercises to cover point (i) and (ii), 50% of total marks;
(b) Three or four exercises to cover point (iii), 50% of total marks.
All parts can result in negative marks if the answer is omitted or seriously flawed.
The oral examination is optional, but it becomes compulsory in certain cases, e.g. when the answers to exercises on defining methods are 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 at most 3 extra points that the student intends to add to the written test marks. Possibly, for a complete evaluation of the competence acquired, additional subjects are proposed by the teacher.
Textbooks
Module Fondamenti di Programmazione
 R. Barbuti, P. Mancarella, D. Pedreschi, F. Turini, Elementi di Sintassi dei Linguaggi di Programmazione. Corso di Laurea in Informatica Università di Pisa a.a. 2004/05. 2004/2005. https://informatica.di.univaq.it/getres.php?resid=746 These notes are available also from the official Web site of the University of Pisa. The notes have been published here only for the convenience of students. The parts of the notes that must be studied go from page 1 to page 5 and from Section 3 (i.e., from page 19) to Section 3.4 included (i.e., up to page 40).
 R. Barbuti, P. Mancarella e F. Turini, Elementi di Semantica Operazionale. 2004/2005. https://informatica.di.univaq.it/getres.php?resid=1171 These notes are available also from the official Web site of the University of Pisa. The notes have been published here only for the convenience of students. The parts of the notes that must be studied go from the beginning to Section 5.4 included (i.e., up to page 48). These notes revisit the previous version "Semantica Operazionale". Students can choose one of the two versions.
 R. Barbuti, P. Mancarella e C. Montangero, Semantica Operazionale. https://informatica.di.univaq.it/getres.php?resid=747 These notes are available also from the official Web site of the University of Pisa. The notes have been published here only for the convenience of students. The parts of the notes that must be studied go from the beginning to Section 5.3 included (i.e., up to page 39). These notes have been revisited by the next version "Elementi di Semantica Operazionale". Students can choose one of the two versions.
 M. Autili, P. Inverardi, Semantica Operazionale di +/ Java  03 Dicembre 2010 . 2010. http://informatica.di.univaq.it/getres.php?resid=1053 This version (dated December 3rd, 2010) revisits the version dated January 10th, 2010. This version must be considered as the official version to be adopted, and all its contents are part of the course programme.
Module Laboratorio di Programmazione I
 Cay Horstmann, Concetti di informatica e fondamenti di JAVA. Apogeo. 2007.
 Marco Bertacca e Andrea Guidi, Programmare in Java. McGrawHill. 2007.
Online Teaching Resources
Homepage:
Homepage:
Teaching material:
Recent teaching material
 Click here to access the complete resources list.
Latest course news
 (11/12/2018) Si avvisano gli studenti che per motivi organizzativi la II prova parziale del modulo di Fondamenti di Programmazione, fissata per Martedì 18 Dicembre 2018, è anticipata a Lunedì...
 (06/12/2018) III Appello I Sessione modulo "Fondamenti di Programmazione":  La PROVA SCRITTA è fissata per lunedì 11 febbraio 2019 dalle ore 10:00, Aule C1.9 e C1.10, Blocco 2  La...
 (06/12/2018) I Appello I Sessione modulo "Fondamenti di Programmazione":  La PROVA SCRITTA è fissata per lunedì 14 gennaio 2019 dalle ore 10:00, Aule C1.9 e C1.10, Blocco 2  La PROVA...
 (06/12/2018) II Appello I Sessione modulo "Fondamenti di Programmazione":  La PROVA SCRITTA è fissata per lunedì 28 gennaio 2019 dalle ore 10:00, Aule C1.9 e C1.10, Blocco 2  La PROVA...
 (05/12/2018) Si avvisano gli studenti la II prova parziale del modulo di Fondamenti di Programmazione è fissata per Martedì 18 Dicembre 2018, ore 14.30  16.30, aula C1.10 (Coppito 2).
 Show all the course news
Course page updates
This course page is available (with possible updates) also for the following academic years:Course information last updated on: 02 novembre 2016, 15:22