6 ECTS credits
150 h study time
Offer 2 with catalog number 4013501FNR for all students in the 2nd semester at a (F) Master - specialised level.
The course aims to expose students to meta-programming techniques and reflection.The course provides a historical perspective of meta-programming and reflection, and studies a number of compile-time and run time techniques for meta-programming, making an emphasis on the principles and techniques of reflection in object-oriented languages. To this end, the course discusses two seminal languages in the context of meta-programming and reflection: Smalltalk and CLOS. The course first discusses the object models of those languages to then introduce their meta-programming and reflection capabilities. After this, the goal will expose students to more mainstream forms of reflection. An overview of the course contents follows:
Fundamental concepts of meta-programming and reflection
-Forms of meta-programming: compile-time, load-time, run-time techniques
-Program representations: from machine code to s-expressions
-Introspection, Intercession, reification
Meta-programming and reflection techniques in Lisp
-Early ad-hoc approaches, PILOT system
Meta-programming and reflection techniques in Object-Oriented Languages
Mainstream forms of meta-programming and reflection
-Advanced Java meta-programming: annotation processing
-Java dynamic proxies
The course organization consists of:
The course content is new from academic year 2017/2018. Although the topics and agenda is well established, the exact constitution of mainstreams forms of meta-programming and reflection may be subject to modifications depending on the number of students registered and time constraints.
All the information concerning this course can be found on the course space at the learning platform together with:
- Papers, tutorial or book chapters providing the material for the regular lectures
- Sample code used in the regular lectures where relevant
Knowledge and Understanding: After completion of a Bachelor degree students have already acquired the basics of meta-programing (mostly studied in the context of interpreters) and object-oriented languages (mostly studied in the context of class-based, statically typed languages). The goal of this course is twofold. First, it introduces them to other advanced techniques for meta-programming and reflection beyond interpreters. The course provides a frame of reference with which students can better understand the different principles and techniques of meta-programming. Within this frame of reference, various models and techniques are explained. Second it exposes students to advanced modularization techniques in object-oriented programming beyond inheritance and traits, namely, aspect-oriented programming, and it exposes students to an OOP model which departures from traditional messages passing model, namely CLOS.
Application of Knowledge and Understanding: Students should have acquired concrete meta-programming skills which are put in practice in the implementation of small programs (eg. prototyping object-oriented features like multiple inheritance, before/after/around advice, etc.) and that will remain useful beyond the topics studied in this course.
Making Judgements: Students have to be able to able to describe and analyze the facilities for meta-programming and reflection of a language and be able to compare them within the frame of reference. Students should be also able to identify the problem of separation of concerns and how aspect-oriented programming as a technique allows for a clean modularisation of crosscutting concerns.
Communication: Students should communicate clearly about the topics students. This is done by asking students to submit an original essay comparing the meta-programming and reflective capabilities of two programming languages, and engaging them in a discussion during their oral exam.
Learning Skills: After having completed the course, students will acquire a thorough understanding of the principles, techniques, and limitations of meta-programming and reflection. This provides them with a background which is sufficiently general to be able to independently continue the study of modularization techniques for object-oriented languages and advanced meta-programming and reflection techniques.
The final grade is composed based on the following categories:
PRAC Practical Assignment determines 50% of the final mark.
SELF Paper determines 50% of the final mark.
Within the PRAC Practical Assignment category, the following assignments need to be completed:
Within the SELF Paper category, the following assignments need to be completed:
The evaluation method is as follows:
- Programming projects (50%)
- Written essay (50%)
Through the semester, programming projects are presented with a list of requirements about an end product. Students are expected to complete them individually, and will need to submit their code and a report on their projects. The projects will be orally defended in which the student is expected to explain their project and answer questions about it. Programming projects are graded based on the quality of the submitted documents (both source code and report) and the oral project defense.
At the end of the semester students are expected to hand in a written essay analysing the meta-programming facilities of two programming languages and comparing them, and participate in an oral exam. The exam consists of a presentation on the highlights of the written essay followed by a discussion on its contents. Students need also to be able to answer questions related to topics that were discussed during the course but that may have been omitted from the essay.
Students must hand in their work for each category in order to pass for the course as a whole. Absence in one of the parts implies absence for the entire course.
This offer is part of the following study plans:
Master of Applied Computer Science: Default track (only offered in Dutch)
Master in Applied Sciences and Engineering: Computer Science: Profile Artificial Intelligence (only offered in Dutch)
Master in Applied Sciences and Engineering: Computer Science: Profile Multimedia (only offered in Dutch)
Master in Applied Sciences and Engineering: Computer Science: Profile Software Languages and Software Engineering (only offered in Dutch)
Master in Applied Sciences and Engineering: Computer Science: Profile Web & Information Systems (only offered in Dutch)
Master of Applied Sciences and Engineering: Computer Science: Profile Artificial Intelligence
Master of Applied Sciences and Engineering: Computer Science: Profile Multimedia
Master of Applied Sciences and Engineering: Computer Science: Profile Software Languages and Software Engineering
Master of Applied Sciences and Engineering: Computer Science: Profile Web & Information Systems