Marco Papacchini

Design Patterns

«Within this process, every individual act of building is a process in which space gets differentiated. It is not a process in which pre-formed parts are combined to create a whole: but a process of unfolding, like the evolution of an embryo, in which the whole precedes its parts, and actually gives birth to them, by splitting»
(Christopher Alexander)

A pattern is commonly meant to be a recurrent solution to a problem in a context. One of the main problems in software design is change. Change belongs to the very nature of software development and flexibility is the right answer when we need to embrace change. The research of an appropriate degree of flexibility is then one of the driving forces to consider in software design.

Programming languages offer various abstraction tools in order to obtain flexibility. An abstraction is a coin with two sides: commonality and variability. Flexibility is achieved realizing a software structure around stable parts (commonalities) each allowing a certain kind of variability. Principles govern the correct use of such tools.

Nevertheless a particular kind of variability is sometimes needed and the language can't offer any abstraction tool to directly support it. So we have to arrange with tools at our disposal and design patterns describe when and how doing that. In this case design patterns describe ways to move around limitations of the language in use. It is interesting to see how certain patterns are no more needed moving, for example, from Object-Oriented languages to Aspect-Oriented languages.

But patterns are really more than simply a solution to a problem in a context! A deep understanding of the pattern concept drive us in the context of wholeness, beauty, symmetry.

© Copyright Marco Papacchini