download flyer
Picture by MarcoIE

Menu:

Program

schedule
Tue 11
Basic topics
Wed 12
Advanced topics
08:30
09:20
Chris Dutchyn
Andy Kellens
09:20
10:10
Alexandre Bergel
Barrett Bryant
Coffee break
10:30
11:20
Barrett Bryant
Johan Fabry
11:30
12:30
JCC invited talk JCC invited talk
Lunch
14:30
15:20
Andy Kellens
Chris Dutchyn
15:20
16:10
Jacques Noyé
Aspects, Components and Processes
Jacques Noyé
Coffee break
16:30
17:20
Johan Fabry
Alexandre Bergel
17:30
18:30
JCC invited talk JCC invited talk

Fundamentals of Functional Programming

Chris Dutchyn

Functional programming, after languishing in academia, is returning to mainstream applications, for several reasons: – simpler concurrency models to support multiple threads and multiple cores – expressive syntax for comprehensions – a more direct programming style This course will give an overview of functional programming, differentiating it from imperative programming, with examples from several functional languages.

Back to program

Object-Oriented Programming

Alexandre Bergel

This basic lecture gives an introduction of class-based object-oriented programming. The notion of objects and classes will be on the spot. As an appetizer, the lecture will smoothly begin with a bit of history (where do objects come from?). The main dish will be composed of an introduction to objects, classes, the instantiation and super link. The desert will give an overview of how objects may be efficiently used to develop dynamic web applications.

Back to program

Compiling Programming Languages

Barrett Bryant

High level programming languages may be implemented by compiling into machine code (e.g., C), interpreting the program directly (e.g., Ruby), or compiling into virtual machine code which may then be further compiled into machine code or interpreted (e.g., Java). This talk will provide an overview of the techniques involved in compiling, the language issues that influence which of these three approaches to implementation is used, and current trends in language design and implementation.

Back to program

Logic Programming

Andy Kellens

Logic programming is a declarative programming paradigm that is rooted in formal logic. Programs in a logic programming language can be written by expressing basic relations using facts, and then writing queries that reason about these facts. One of the strengths of such a declarative approach is that it enables to think in terms of what the program should do, rather than how this should be achieved. In this talk, we will provide a brief overview of logic programming by taking a look at the PROLOG language.

Back to program

Process Calculi

Jacques Noyé

As a complement to the lambda calculus, which provides a wonderful foundation for purely computational systems, process calculi are calculi that make it possible to model and reason about interacting systems. This talk will quickly review the basic building blocks of a simple process calculus, FSP (Finite State Processes), with its relationship to finite state automata. We will show how such a calculus can be used, in a first step, to describe, in a compositional and abstract way, both the structure and the behavior of an architecture of interacting components, and, in a second step, to check some important properties of the architecture.

Back to program

Aspect-Oriented Software Development

Johan Fabry

Aspect-Oriented Software Development (AOSD) is a relatively new software development paradigm that complements and improves on many contemporary development paradigms. AOSD provides unique and advanced program structuring and modularization techniques. This allows for a better modularity of the software, i.e. a better implementation structure. This improves software qualities such as higher reusability and easier maintainability. In this talk we give a general introduction to the concepts of AOSD and a brief overview of the most popular aspect programming language: AspectJ.

Back to program

Declarative Meta Programming

Andy Kellens

Declarative Meta Programming is defined as the use of a declarative programming language for writing meta programs. Meta programs are programs that process programs; as opposed to more plain programs that process bank accounts, e-mails, text documents and so on. Any programmer and software engineer uses meta programs: compilers, program editors, integrated development environments, UML editors, program verifiers and other software engineering tools are all meta programs. In this talk we are going to demonstrate the logic meta programming language SOUL, and illustrate it’s adeptness for writing programs that reason about other programs.

Back to program

Engineering of Domain-Specific Languages

Barrett Bryant

In contrast to general purpose programming languages, domain-specific languages are designed for a specific task. Often such languages are more oriented toward the application domain expert instead of software engineers. As such, domain-specific languages are the primary new computer languages that will be developed and also their development will be more influenced by application domain demands than software engineering concerns. This talk discusses the principles of domain-specific languages and illustrates how they may be used and designed by application domain experts.

Back to program

Domain-Specific Aspect Languages

Johan Fabry

While AspectJ is currently the most popular aspect language, initial research on AOSD used radically different languages. Instead of being general-purpose, each aspect language was dedicated to one specific domain: each language was a domain-specific aspect language (DSAL). Research in this area has been dormant for some time due to a shift in focus within the community, but has recently started gaining popularity again. In this talk we show the difference between general-purpose aspect languages and DSALs, the interesting advantages that DSALs bring, as well as some of their drawbacks.

Back to program

Programming with Intent

Chris Dutchyn

Writing correct programs is hard; type-checking and testing help. But, they prove only weak properties of our programs. Using Sheard’s Omega programming language, we will extend our ability to express programmer intentions, and see how these intentions can be automatically checked.

Back to program

Aspects, Components and Processes

Jacques Noyé

Based on the previous course on process calculi, this course will consider the relationship between stateful/temporal aspects, components equipped with behavioral protocols, and processes, shedding some light on three fundamental concepts of software organization.

Back to program

Modularity: Beyond Classes

Alexandre Bergel

Class inheritance is well-known and accepted as a mechanism for reuse in object-oriented languages. Unfortunately, due to the coarse granularity of inheritance, it may be difficult to decompose an application into an optimal class hierarchy that maximizes software reuse. This lecture will point out limitations of single inheritance, multiple inheritance, and mixins. It will present state-to-the-art alternatives to class inheritance that overcome these limitations. It will be demonstrated how Traits, Classboxes, and Virtual classes are more expressive mechanisms to achieve software reuse.

Back to program