Advanced programming techniques

A.Y. 2020/2021
Overall hours
Learning objectives
The course aims to expose the student to techniques and technologies to increase reusability, maintenance and testing of software concerns. In particular, the teaching will focus on definining the concept of software concerns, including crosscutting concerns, and on their extrusion into independent computational units, simpler and easily composable. In this regard, the most recent and innovative software development techniques will be presented, such as, but not limited to, aspect-oriented programming, computational reflection, context-oriented programming, software product-line, bytecode and intermediate language engineering, etc.
Expected learning outcomes
The student will have to demonstrate the ability to develop and implement applications whose concerns are separate and subsequently composed using the techniques presented in class. The student will also have to be able to recognize a software concern within an existing application and to separate it from the rest of the code using one of the techniques/technologies seen in class. The student must also demonstrate that he has developed the ability to write better code (simpler, more reusable and more maintainable) by applying the techniques and concepts provided by the teaching.
Course syllabus and organization

Single session

Lesson period
First semester
Teaching Methods
All the lectures will be provided in streaming on YouTube in the scheduled time frame. The interaction with the professor will be enabled through a dedicated telegram channel. All details will be published on the course webpage.

Syllabus and Books
Nothing will change on both the syllabus and the used material.

An individual project will replace the written exam.
Course syllabus
- Computational Reflection
- Meta-Object Protocol and Separation of Concerns
- Java Reflection
- Dynamic Proxy and Class Loading
- Annotations
- OpenJava, Javassist and BCEL
- AOP and AspectJ
- AOP and Refactoring
Prerequisites for admission
Knowing how to write and debug programs that use the basic constructs of programming. Knowing how to solve an algorithmic problem. Knowing at least one programming language.

It is strongly suggested to have passed at least one exam about programming in the bachelor degree.
Teaching methods
Frontal lectures and some exercises in the exam preparation.
Teaching Resources
Web Site:
- Ira R. Forman and Nate B. Forman. Java Reflection in Action. Manning Publications. 2004.
- Ramnivas Laddad. AspectJ in Action: Practical Aspect-Oriented Programming. Manning Publications Company. 2003.
Assessment methods and Criteria
The exam is written (at the computer) and it will last 4 hours. Each session proposes two exercises one for each of the two parts of the course. The exam will test the acquired programming skills taught in the course.
INF/01 - INFORMATICS - University credits: 6
Lessons: 48 hours
Professor: Cazzola Walter
Educational website(s)