November 11-12, 2008 — Punta Arenas, Patagonia, Chile.
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 |
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.