Advanced Programming Techniques
A.Y. 2025/2026
Learning objectives
The teaching 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.
Lesson period: First four month period
Assessment methods: Esame
Assessment result: voto verbalizzato in trentesimi
Single course
This course can be attended as a single course.
Course syllabus and organization
Single session
Responsible
Lesson period
First four month period
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
- 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
Be able to write and debug programs that use basic programming constructs. Have problem-solving skills. Know and be able to effectively use at least one programming language (preferably Java).
It is recommended to have completed at least one programming course and one course on algorithms and data structures during the bachelor's degree.
It is recommended to have completed at least one programming course and one course on algorithms and data structures during the bachelor's degree.
Teaching methods
Lectures and some practical sessions in preparation for the exam.
Teaching Resources
Web Site:
- https://cazzola.di.unimi.it/tsp.html
Suggested Books
- 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.
- https://cazzola.di.unimi.it/tsp.html
Suggested Books
- 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 computer-based and lasts four hours. Each session includes two exercises (one for each part of the course). The exam is designed to assess the acquisition of the programming techniques taught during the lectures. It can be replaced by two midterm tests.
Professor(s)