dc.description.abstract | Software design patterns are high-level design solutions to common occurring problems within software development. The topic of this study is the relationship between design patterns and modern programming languages, and whether or not design patterns are replaceable by language features. The main contribution of this thesis is a classification scheme: Previous discussion of language support for design patterns, lack nuance. Our research show that the different classifications of support, that a language can exhibit for a pattern, exists on a spectrum. We propose a model that establish four different classifications of support, as opposed to a binary model, that only consists of the two classifications, supported and unsupported. This classification scheme is used for analysing concrete pattern-language relationships. The patterns Singleton, Strategy, Command, Decorator, Prototype, Iterator and Proxy are implemented in multiple languages, including Emerald, Java, JavaScript, Python and Scala. By applying our proposed classification scheme, the level of support the languages show for the different patterns is determined. Singleton is the only pattern shown to be completely redundant, i.e., fully supported, in some languages. The six other patterns are all shown to have partial support in one or more languages. Object model, lambda functions, prototypical inheritance, library features and dynamic typing are the language features that the pattern support is attributed to, in the examined patterns. Results confirm that design patterns and programming languages are two closely related concepts. The study indicates that some patterns are replacements for missing language features, whereas others are independent of language. | eng |