The course aims to expand the procedural programming skills acquired during the "Programming" course, by presenting some abstractions and concepts useful for the design, development and maintenance of large size programs. The focus is on the object-oriented paradigm, with particular emphasis on the process of specification, modeling of data types, and design. Fundamental concepts of functional programming may also be introduced
Expected learning outcomes
By the end of the course the student will be able to: - explain fundamental concepts and main properties of the object oriented programming and, possibly, functional programming - comprehend and define the specification of a program, design and implement it with object oriented programming methodologies and, possibly, functional programming methodologies
The course will address the design, implementation, and analysis of programs according to the object-oriented paradigm. Furthermore, the basics of functional programming and software engineering will be presented.
The topics addressed during the course are:
- Fundamentals of the object-oriented programming -- Abstraction -- Encapsulation and Information hiding -- Inheritance and Composition -- Polymorphism - Principles of Java programming -- Basic data types -- Flow control constructs -- Functions and Methods -- Classes -- Interfaces -- Exceptions - Notions of software engineering and Design Patterns - Notions of functional programming and Lambda calculus
Prerequisites for admission
Having passed the Programming exam is mandatory for the Programming II course. Specifically, the students are required to know at least one procedural imperative programming language and to be able to write programs that use the fundamental constructs of the procedural imperative programming.
The course is divided into a theory part and a laboratory part. The theory part consists of lectures. The laboratory part alternates lectures and exercise activities.
The textbook for the course is: "Program development in Java" by Barbara Liskov and John Guttag. Additional teaching material (slides, exercise repository) will be made available on the official Ariel website of the course.
Assessment methods and Criteria
The exam aims to evaluate * the knowledge of the topics covered during the course. * the ability to apply this knowledge to the resolution of concrete problems through the design and the implementation of code.
The exam consists of a written test, which lasts indicatively 3 hours, with theory and laboratory parts. * The theory part consists of open and closed-ended questions regarding the topics covered during the course. * The laboratory part consists of exercises that require to project and implement (or comprehend and modify) programs, based on assigned specifications. The weigh of the theory and laboratory parts will be indicatively 0.5/1 for each, with possible variations based on the difficulty of the actual exercises. To pass the exam, a minimum score in each of the parts, and a globally sufficient score will have to be reached.
During the exam, the students will be able to consult the official java API specifications.