Abstraction is one of the fundamental concepts of software design. Consequently, the determination of an appropriate abstraction level for the multitude of artefacts that form a software system is an integral part of software engineering. However, the very nature of abstraction in software design and particularly its interrelation with equally important concepts like complexity, specificity or genericity are not fully understood today. As a step towards a better understanding of the trade-offs involved, this paper proposes a distinction of abstraction into two types that have different effects on the specificity and the complexity of artefacts. We discuss the roles of the two types of abstraction in software design and explain the interrelations between abstractness, specificity, and complexity. Furthermore, we illustrate the benefit of the proposed distinction with multiple examples and describe consequences of our findings for software design activities.
@cite_18: From the Publisher: Provides an in-depth introduction to the principles of programming design and implementation. Gives up-to date coverage of most of the topics in the Programming Languages Subject Area as outlined in the 1991 ACM IEEE-CS Joint Curriculum Task Force Report. Coverage of Common Themes for programming languages in general, and Special Features of individual programming languages. Organized around design issues, this coverage allows the instructor great freedom in structuring and choosing examples. Emphasis on major principles and paradigms of programming languages rather than on individual languages themselves. Gives students a firm grasp of the fundamental concepts of programming language theory, illustrated by a wealth of specific examples drawn from the most widely used languages,including Pascal, Modula-2, Ada, C, FORTRAN, Lisp, Prolog, ML, Miranda, C++, Simula, and SmallTalk.
@cite_17: From the Publisher: Designed for the upper division Programming Languages course offered in computer science departments,this text focuses on the principles of the design and implementation of programming languages. The language SCHEME,a dialect of LISP,is used to demonstrate abstraction and representation.
@cite_20: From the Publisher: The revision of a popular, text reference guide analyzes and evaluates the important concepts found in current programming languages based on how the language supports software development. Revisions include a consideration of more languages, new chapters on declarative programming and formal semantics, expanded coverage of object oriented programming and operational semantics, a more thorough discussion of programming environments, as well as more examples, explanations, and exercises. Improves the reader's ability to appreciate and evaluate programming languages. Identifies the important concepts in programming languages and reviews their strengths and limitations.
@cite_2: From the Publisher: Programming Languages: Paradigm and Practice, second edition, offers an up-to-date presentation of the concepts, theories, and histories of the numerous high-level programming languages. The book gives equal weight to both imperative (Pascal, C, C++, Ada, etc.) and declarative paradigms (Prolog, LISP, SQL, SETL, etc.) while emphasizing theoretical foundations for different language types.
Because we consider also the elements of a (domain-spe -ci -fic) language as artefacts, the general literature on the design of programming language is also relevant @cite_2 @cite_17 @cite_20 @cite_18 . It defines several properties or characteristics of languages. The is a desired property of a language. This is related to abstractness and complexity. A language that is simple and uses abstract concepts is more readable than a language with many elements and technical details. The complexity of a language is also recognised as an important principle in language design by requiring . However, a definition of simplicity and its tradeoffs is not given in the literature. Related to our work is also the principle of or of programming languages. It describes the easiness to express complex processes and structures. We can describe this issue by the abstractness and the specificity. Very abstract language elements (using simplifying abstraction) allow to express those complex processes and structures concisely. The genericity of such an element then allows to alter certain parts only. Hence, this also contributes to programming efficiency.