Official course description, subject to change:
AbstractThe goal of this course is to give you a mindset of working with software in an abstract and semi-automated fashion, as in a production process (as opposed to a hand crafting process).
This is the first course of the Software Analysis specialization and it focuses on constructive skills: you learn to design, evaluate, and implement new languages that meet the needs of your projects. You use them to describe systems concisely and with less errors.
The goals of this course are achieved by introducing modeling languages and models as first class artifacts that are designed, manipulated, transformed and translated to code in an automatic fashion.
Subjects will include
- Domain-modeling, feature modeling, meta-modeling and design of domain specific languages
- Concrete Syntax, and concrete syntax editors
- Parsing with parser combinators
- Architecture modeling, product line architectures, variability modeling
- Structural constraints
- Model Transformation and code generation
- Implementation of domain-specific languages
All programming is performed in Java or Xtend to enable common discussion, joint supervision and a shared learning process.
However, the ideas can be realized in many programming languages.
Formal prerequisitesYou are a confident software developer, knowledgeable in programming language paradigms and concepts, able to work with (moderately) complex development projects yourself. These abilities can normally be obtained by following a Bachelor programme in software development.
- Classes and Interfaces
- Generic Types
- Basic data structures
- Lists, Trees and Graphs
- Basic complexity
- Development Processes
- Quality Assurance
- Modeling (e.g., UML Class Diagrams)
Intended learning outcomes
After the course, the student should be able to:
- Perform domain analysis of a problem domain to obtain a meta-model
- Design and implement a domain specific language
- Define semantics of simple operational and structural languages
- Describe and discuss the main techniques used for domain modeling and implementation (domain specific languages, modelling frameworks, transformation languages, code generators, concrete syntax and models, type checkers)
- Manipulate abstract syntax representations programatically
- Design and improve concrete textual syntax for a modeling language.
- Implement declarative constraints and type rules for domain specific languages.
- Implement declarative and imperative transformations, code generators and interpreters
- Characterize, classify and compare programming and modeling languages.
Ordinary examExam type:
D: Submission of written work with following oral, External (7-point scale)
D2G: Submission for groups with following oral exam supplemented by the submission. Shared responsibility for the report.