Elemental design patterns: A formal semantics for composition of oo software architecture (2002)
| Venue: | In Proc. of 27th Annual IEEE/NASA Software Engineering Workshop |
| Citations: | 15 - 6 self |
BibTeX
@INPROCEEDINGS{Smith02elementaldesign,
author = {Jason Mcc Smith and David Stotts},
title = {Elemental design patterns: A formal semantics for composition of oo software architecture},
booktitle = {In Proc. of 27th Annual IEEE/NASA Software Engineering Workshop},
year = {2002},
pages = {183--190}
}
OpenURL
Abstract
Design patterns are an important concept in the field of software engineering, providing a language and application independent method for expressing and conveying lessons learned by experienced designers. There is a large gap, however, between the aesthetic and elegance of the patterns as intended and the reality of working with an ultimately mathematically expressible system such as code. In this paper we describe a step towards meaningful formal analysis of code within the language of patterns, and discuss potential uses. The major contributions include: a compendium of Elemental Design Patterns (EDPs), a layer of seemingly simplistic relationships between objects that, on closer inspection, provide a critical link between the world of formal analysis and the realm of pattern design and implementation without reducing the patterns to merely syntactic constructs; an extension to the ς-calculus, termed ρ-calculus, a formal notation for expressing relationships between the elements of object oriented languages, and its use in expressing the EDPs directly. We discuss their use in composition and decomposition of existing patterns, identification of pattern use in existing code to aid comprehension, and future research directions, such as support for refactoring of designs, interaction with traditional code analysis systems, and the education of students of software architecture. 1. Problem Description Programming has historically been an exercise in the creation of hierarchical abstractions to manage complexity. As programming techniques have progressed in the field, language designers have continued to push the envelope of producing explicit constructs for those conceptual lessons learned in the previous generation of languages, and software architects have continued to build ever more complex and powerful abstractions. At the same time that these ab-







