The Effective Programmer: can ‘Canned Design Patterns’ improve software development?


The history of programming shows a continuous search for new abstraction and composition mechanisms; e.g. procedural, functional, object-oriented, and aspect-oriented paradigms illustrate this. This search has brought us a large amount of composition techniques (such as delegation, mix-ins, traits, multiple inheritance), all with particular qualities and deficiencies. However, today's programming languages all fix the choice of composition techniques to just a handful of techniques: this requires programmers to force-fit designs into 'unwilling' programs, typically resulting in bad modularization.

Co-op ('Composition-operators') provides a platform that allows for defining custom compositions as reusable abstractions [1]. It has been shown to be able to express widely different object-oriented composition techniques, including several inheritance variants, aspects, and design patterns [2].

Possible research questions: what are the advantages of using a technique like Co-op for providing a library of ‘Canned Design Patterns’; in other words; a library that implements all the mechanisms in design patterns, such that the patterns can be easily instantiated in applications. Will this make the lives of programmers easier? what types of patterns can, and cannot be expressed by the Co-op approach? will they need to write less code? how could they identify the patterns that they need? will the use of multiple patterns in the same application lead to a hopeless mess that does not work as desired?

List of Tasks


Investigate the design patterns in [2], and identify which could be suitable for inclusion in a library.


Prototype one or more of these patterns.


Through example cases, illustrate when and where such patterns could (not) be used, and what the benefits and drawbacks are.


Optionally consider the possible interference when using multiple patterns


Make a decision tree, when and why (not) to use (these) Canned Design Patterns


[1] Havinga, W.K. and Bergmans, L.M.J. and Akşit, M. (2010) A Model for Composable Composition Operators: Expressing object and aspect compositions with first-class operators. In: Proceedings of the 9th international conference on Aspect-Oriented Software Development, 15-19 Mar 2010, Rennes and Saint-Malo, France. pp. 145-156. ACM. ISBN 978-1-60558-958-9 (explains Co-op)

[2] E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software. Reading, Massachusetts: Addison Wesley, 1994.


Lodewijk Bergmans