The course aims at introducing the students to the computational thinking, and to the methodological foundations and the corresponding basic notions of the procedural and object-oriented programming paradigms, and of the algorithmic techniques for problem solving and experimental program verification.
P. Crescenzi, Gocce di Java, Franco Angeli, 2014.
Java per Impazienti, Cay Horstmann, Pearson 2018.
At the end of the course, the students will be able to analyse and to model a problem, to develop a solution by using algorithmic and programming techniques, to test its correctness, and to verify its efficiency. The students will be able to implement algorithms for several kinds of problems by using a programming language (in particular, Java).
class lessons and some laboratories
Lesson and laboratory attendance: recommended.
Tools for supporting teaching: http://e-l.unifi.it.
Type of Assessment
The exam consists of:
- Written: one or more exercises to be carried out in the laboratory, using the laboratory computers, without notes, books, cell phones, portable devices. During the exam, the laboratory computers will not be connected to the network;
- Oral: questions about the whole program (referring to the course textbooks and supplementary handouts, as reported on the Moodle website of the course).
The oral exam can only be taken after passing the written exam (i.e. if at least the written exam is taken).
The exam (both written and oral) can be taken in a certain session only after having booked on the appropriate website of the university. At the time of booking, the student must leave a comment specifying whether he wants to take only the written text or the oral one. In the absence of a comment in the booking, it is assumed that the student intends to take both the written and the oral in that session (if the written is passed).
Necessary (but not sufficient) conditions for passing the written exam are all the following:
- The code compiles without errors
- The code respects all the specifications of the exercizes
- All automatic tests provided by teachers are successful
The writing is valid for the entire academic year, therefore the student who has passed the writing can take the oral exam both in the same session and in a subsequent session. The oral date will be communicated after the written exam and will be indicatively the next day or a few days after the written date.
If the student decides to reject the written grade, because he/she intends to take the written exam again in the next sessions, he/she must communicate it on the day the results of the written are published. In the absence of the refusal of the written grade, the student will not be able to take the written part again in the next session (but only in those that follow).
The writing is canceled, and therefore must be taken again, if:
- The student does not pass the oral exam (i.e. the grade is not sufficient)
- The student books for the oral exam but does not show up without giving notice
- The student refuses the final grade
If the student also passes the oral exam, the final grade is calculated by averaging the grade of the written and the grade of the oral exam.
They can take the tests in itinere only:
- First year students
- Students from previous years who never enrolled in the Programming exam of previous academic years
A student can only enroll in one of the two intermediate tests.
The intermediate test consists of a text on the topics covered in the first semester of the course (Java--), and includes one or more exercises to be carried out in the laboratory, using the laboratory computers, without notes, books, cell phones, portable devices. During the exam, the laboratory computers will not be connected to the network;
Passing the intermediate test will allow students to take the written task in a "reduced" form, i.e. with fewer exercises to carry out during the task in the laboratory. However, the main rules on the written and oral examination apply.
Algorithms and programs. Design, analysis, implementation and debugging.
The programming language Java.
Control flow. Methods. Recursion. Object-Oriented Programming. Classes and Objects. Interfaces and Inheritance. Functional Programming. Generic Programming. Data structures and Collections. Techniques for the design and implementation of programs. Manual and automatic verification of programs with unit tests.