Generative Programming - Krzysztof Czarnecki , Ulrich Eisenecker - Librairie Eyrolles

Déjà client ? Identifiez-vous

Mot de passe oublié ?

Nouveau client ?

CRÉER VOTRE COMPTE
Generative Programming
Ajouter à une liste

Librairie Eyrolles - Paris 5e
Indisponible

Generative Programming

Generative Programming

Methods, Tools, and Applications

Krzysztof Czarnecki, Ulrich Eisenecker

832 pages, parution le 22/06/2000

Résumé

Generative Programming (GP) offers great promise to application developers. It makes the idea of moving from one-of-a-kind software systems to the semi-automated manufacture of wide varieties of software quite real. In short, GP is about recognizing the benefits of automation in software development. Generative Programming covers methods and tools that will help you design and implement the right components for a system family and automate component assembly. The methods presented here are applicable for all commercial development--from "programming in the small," at the level of classes and procedures--to "programming in the large," or developing families of large systems.

Generative Programming is your complete guide and reference to this emerging discipline. It provides in-depth treatment of critical technologies and topics including:

  • Domain Engineering
  • Feature Modeling
  • Generic Programming
  • Aspect-Oriented Programming
  • Template Metaprogramming in C++
  • Generators
  • Microsoft's Intentional Programming

Using this book you will learn how these techniques fit together and, more importantly, how to apply them in practice. The text contains three comprehensive case studies in three different domains: programming domain (container data structures), business domain (banking), and scientific computing (matrix computations).

Table of contents


Chapter 1 What Is This Book About?
1.1 From Handcrafting to Automated Assembly Lines
1.2 Generative Programming
1.3 Benefits and Applicability

Part I Analysis and Design Methods and Techniques

Chapter 2 Domain Engineering
2.1 Why Is This Chapter Worth Reading?
2.2 What Is Domain Engineering?
2.3 Domain Analysis
2.4 Domain Design and Domain Implementation
2.5 Application Engineering
2.6 Product-Line Practices
2.7 Key Domain Engineering Concepts
2.7.1 Domain
2.7.2 Domain Scope and Scoping
2.7.3 Relationships between Domains
2.7.4 Features and Feature Models
2.7.5 Method Tailoring and Specialization
2.8 Survey of Domain Analysis and Domain Engineering Methods
2.8.1 Feature-Oriented Domain Analysis (FODA)
2.8.1.1 FODA Process
2.8.2 Organization Domain Modeling (ODM)
2.8.2.1 The ODM Process
2.8.3 Draco
2.8.4 Capture
2.8.5 Domain Analysis and Reuse Environment (DARE)
2.8.6 Domain-Specific Software Architecture (DSSA) Approach
2.8.7 Algebraic Approach
2.8.8 Other Approaches
2.9 Domain Engineering and Related Approaches
2.10 Historical Notes
2.11 Summary

Chapter 3 Domain Engineering and Object-Oriented Analysis and Design
3.1 Why Is This Chapter Worth Reading?
3.2 OO Technology and Reuse
3.2.1 Solution Space
3.2.2 Problem Space
3.3 Relationship between Domain Engineering and Object-Oriented Analysis and Design (OOA/D) Methods
3.4 Aspects of Integrating Domain Engineering and OOA/D Methods
3.5 Horizontal versus Vertical Methods
3.6 Selected Methods
3.6.1 Rational Unified Process 5.0
3.6.2 00ram
3.6.3 Reuse-driven Software Engineering Business (RSEB)
3.6.4 FeatuRSEB
3.6.5 Domain Engineering Method for Reusable Algorithmic Libraries (DEMRAL)

Chapter 4 Feature Modeling
4.1 Why Is This Chapter Worth Reading?
4.2 Features Revisited
4.3 Feature Modeling
4.4 Feature Models
4.4.1 Feature Diagrams
4.4.1.1 Mandatory Features
4.4.1.2 Optional Features
4.4.1.3 Alternative Features
4.4.1.4 Or-Features
4.4.1.5 Normalized Feature Diagrams
4.4.1.6 Expressing Commonality in Feature Diagrams
4.4.1.7 Expressing Variability in Feature Diagrams
4.4.2 Other Infon-nation Associated with Feature Diagrams in a Feature Model
4.4.3 Assigning Priorities to Variable Features
4.4.4 Availability Sites, Binding Sites, and Binding Modes
4.4.4.1 Sites
4.4.4.2 Availability Sites
4.4.4.3 Binding Sites and Binding Modes
4.4.4.4 Relationship between Optimizations and Availability Sites, Binding Sites, and Binding Modes
4.5 Relationship between Feature Diagrams and Other Modeling Notations and Implementation Techniques
4.5.1 Single Inheritance
4.5.2 Multiple Inheritance
4.5.3 Parameterized Inheritance
4.5.4 Static Parameterization
4.5.5 Dynamic Parameterization
4.6 Implementing Constraints
4.7 Tool Support for Feature Models
4.8 Frequently Asked Questions about Feature Diagrams
4.9 Feature Modeling Process
4.9.1 How to Find Features?
4.9.2 Role of Variability in Modeling
4.9.2.1 Separation of Concerns and Perspectives
4.9.2.2 Decomposition Techniques
4.9.2.3 Variability in Modeling

Chapter 5 The Process of Generative Programming
5.1 Why Is This Chapter Worth Reading?
5.2 Generative Domain Models
5.3 Main Development Steps in Generative Programming
5.4 Adapting Domain Engineering for Generative Programming
5.5 Domain-Specific Languages
5.6 DEMRAL: Example of a Domain Engineering Method for Generative Programming
5.7 Outline of DEMRAL
5.8 Domain Analysis
5.8.1 Domain Definition
5.8.2 Domain Modeling
5.8.2.1 Identification of Key Concepts
5.8.2.2 Feature Modeling
5.8.2.2.1 Feature Starter Set for ADTs
5.8.2.2.2 Feature Starter Set for Algorithms
5.9 Domain Design
5.9.1 Scope Domain Model for Implementation
5.9.2 Identify Packages
5.9.3 Develop Target Architectures and Identify the Implementation Components
5.9.4 Identify User DSLs
5.9.5 Identify Interactions between DSLs
5.9.6 Specify DSLs and Their Translation
5.9.7 Configuration DSLs
5.9.8 Expression DSLs
5.10 Domain Implementation

Part II Implementation Technologies

Chapter 6 Generic Programming
6.1 Why Is This Chapter Worth Reading?
6.2 What Is Generic Programming?
6.3 Generic versus Generative Programming
6.4 Generic Parameters
6.5 Parametric versus Subtype Polymorphism
6.5.1 Genericity in Java
6.6 Bounded versus Unbounded Polymorphism
6.7 A Fresh Look at Polymorphism
6.8 Parameterized Components
6.9 Parameterized Programming
6.9.1 Types, Interfaces, and Specifications
6.9.2 Adapters
6.9.3 Vertical and Horizontal Parameters
6.9.4 Module Expressions
6.10 C++ Standard Template Library
6.10.1 Iterators
6.10.2 Freestanding Functions versus Member Functions
6.11 Generic Methodology
6.12 Historical Notes

Chapter 7 Component-Oriented Template-Based C++ Programming Techniques
7.1 Why Is This Chapter Worth Reading?
7.2 Types of System Configuration
7.3 C++ Support for Dynamic Configuration
.4 C++ Support for Static Configuration
7.4.1 Static Typing
7.4.2 Static Binding
7.4.3 Inlining
7.4.4 Templates
7.4.5 Parameterized Inheritance
7.4.6 typedefs
7.4.7 Member Types
7.4.8 Nested Classes
7.5 Prohibiting Certain Template Instantiations
7.6 Static versus Dynamic Parameterization
7.7 Wrappers Based on Parameterized Inheritance
7.8 Template Method Based on Parameterized Inheritance
7.9 Parameterizing Binding Mode
7.10 Consistent Parameterization of Multiple Components
7.11 Static Interactions between Components
7.11.1 Components with Influence
7.11.2 Components under Influence
7.11.3 Structured Configurations
7.11.4 Recursive Components
7.11.5 Intelligent Configuration

Chapter 8 Aspect-Oriented Decomposition and Composition
8.1 Why Is This Chapter Worth Reading?
8.2 What Is Aspect-Oriented Programming?
8.3 Aspect-Oriented Decomposition Approaches
8.3.1 Subject-Oriented Programming
8.3.2 Composition Filters
8.3.3 Demeter / Adaptive Programming
.3.4 Aspect-Oriented Decomposition and Domain Engineering
8.4 How Aspects Arise
8.5 Composition Mechanisms
8.5.1 Requirements on Composition Mechanisms
8.5.1.1 Minimal Coupling
8.5.1.2 Different Binding Times and Modes
8.5.1.3 Noninvasive Adaptability
8.5.2 Example: Synchronizing a Bounded Buffer
8.5.3 ?TangledO Synchronized Stack
8.5.4 Separating Synchronization Using Design Patterns
8.5.5 Separating Synchronization Using SOP
8.5.6 Some Problems with Design Patterns and Some Solutions
8.5.6.1 Object Schizophrenia
8.5.6.2 Preplarming Problem
8.5.6.3 Traceability Problem
8.5.7 Implementing Noninvasive, Dynamic Composition in Smalltalk
8.5.7.1 Model of the Composition
8.5.7.2 Composition API
8.5.7.3 Instance-Specific Extension Protocol
8.5.7.3.1 Defining Methods in Instances
8.5.7.3.2 Adding Instance Variables to Instances
8.5.8 Kinds of Crosscutting
8.6 How to Express Aspects in Programming Languages
8.6.1 Separating Synchronization Using AspectJ Cool
8.6.2 Implementing Dynamic Cool in Smalltalk
8.6.2.1 Example: Synchronizing an Assembly System
8.6.2.2 Architecture of the Smalltalk Implementation of Dynamic Cool
8.7 Implementation Technologies for Aspect-Oriented Programming
8.7.1 Technologies for Implementing Aspect-Specific Abstractions
8.7.2 Technologies for Implementing Weaving
8.7.3 AOP and Specialized Language Extensions
8.7.4 AOP and Active Libraries
8.8 Final Remarks

Chapter 9 Generators
9.1 Why Is This Chapter Worth Reading?
9.2 What Are Generators?
9.3 Transformational Model of Software Development
9.4 Technologies for Building Generators
9.5 Compositional versus Transformational Generators
9.6 Kinds of Transformations
9.6.1 Compiler Transformations
9.6.1.1 Refinements
9.6.1.2 Optimizations
9.6.2 Source-to-Source Transformations
9.7 Transformation Systems
9.7.1 Scheduling Transformations
9.7.2 Existing Transformation Systems and Their Applications
9.8 Selected Approaches to Generation
9.8.1 Draco
9.8.2 GenVoca
9.8.2.1 Example: Applying GenVoca to the Domain of Data Containers
9.8.2.2 GenVoca Model
9.8.2.3 Defining Realms and Layers in P++
9.8.2.4 Implementing GenVoca Layers in C++
9.8.2.5 Composition Validation
9.8.2.6 Transformations and GenVoca
9.8.2.7 Frameworks and GenVoca
9.8.3 Approaches Based on Algebraic Specifications

Chapter 10 Static Metaprogramming in C++
10.1 Why Is This Chapter Worth Reading?
10.2 What Is Metaprogramming?
10.3 A Quick Tour of Metaprogramming
10.4 Static Metaprogramming
10.5 C++ As a Two-Level Language
10.6 Functional Flavor of the Static Level
10.6.1 Class Templates As Functions
10.6.2 Integers and Types As Data
10.6.3 Symbolic Names Instead of Variables
10.6.4 Constant Initialization and typedef-Statements Instead of Assiginnent
10.6.5 Template Recursion Instead of Loops
10.6.6 Conditional Operator and Template Specialization As Conditional Constructs
10.7 Template Metaprogramming
10.8 Template Metafunctions
10.9 Metaftinctions As Arguments and Return Values of Other Metaftinctions
10.10 Representing Metainformation
10.10.1 Member Traits
10.10.2 Traits Classes
10.10.3 Traits Templates
10.10.4 Example: Using Template Metafunctions and Traits Templates to Implement Type Promotions
10.10.5 Compile-Time Lists and Trees As Nested Templates
10.11 Compile-Time Control Structures
10.11.1 Explicit Selection Constructs (? :, IF<>, and SWITCH<>)
10.11.1.1 Implementing IF<> without Partial Template Specialization
10.11.1.2 Switch Construct (SWITCH<>)
10.11.1.3 Taking Advantage of Lazy Behavior
10.11.1.4 SWITCH<> without Partial Template Specialization
10.11.2 Template Recursion As a Looping Construct
10.11.3 Explicit Looping Constructs (WHILE<>, DO<>, and FOR<>)
10.11.3.1 While-Loop (WHILE<>)
10.11.3.2 Do-Loop (DO<>)
10.11.3.3 For-Loop (FOR<>)
10.12 Code Generation
10.12.1 Simple Code Selection
10.12.2 Composing Templates
10.12.3 Generators Based on Expression Templates
10.12.4 Recursive Code Expansion
10.12.5 Explicit Loops for Generating Code (EWHILE<>, EDO<>, and EFOR<>)
10.12.5.1 EWHILE<>
10.12.5.2 EDO<>
10.12.5.3 EFOR<>
10.12.5.4 Nesting Static E-Loops
10.13 Example: Using Static Execute Loops to Test Metafunctions
10.14 Partial Evaluation in C++
10.15 Workarounds for Partial Template Specialization
10.16 Problems of Template Metaprogramming
10.17 Historical Notes

Chapter 11 Intentional Programming
11.1 Why Is This Chapter Worth Reading?
11.2 What Is Intentional Programming?
11.3 Technology behind IP
11.3.1 System Architecture
11.3.2 Representing Programs in IP: The Source Graph
11.3.2.1 Treelike Structures
11.3.2.2 Graphlike Structures
11.3.2.3 Source Graphs: The Big Picture
11.3.2.4 The Essence of Source Graphs: Abstraction Sharing and Parameterization
11.3.3 Source Graph + Methods = Active Source
11.3.3.1 Kinds of Methods
11.4 Working with the IP Programming Environment
11.4.1 Editing
11.4.2 Further Capabilities of the IP Editor
11.4.3 Extending the IP System with New Intentions
11.5 Advanced Topics
11.5.1 Questions, Methods, and a Frameworklike Organization
11.5.2 Source-Pattem-Based Polymorphism
11.5.3 Methods As Visitors
11.5.4 Asking Questions Synchronously and Asynchronously
11.5.5 Reduction
11.6 The Philosophy behind IP
11.6.1 Why Do We Need Extendible Programming Environments? or What Is the Problem with Fixed Programming Languages?
11.6.1.1 Problems with General-Purpose Languages and Conventional Libraries
11.6.1.2 Problems with Comprehensive Application-Specific Languages
11.6.1.3 The IP Solution: An Extendible Programming Environment
11.6.2 Moving Focus from Fixed Languages to Language Features and the Emergence of an Intention Market
11.6.3 Intentional Programming and Component-Based Development
11.6.4 Frequently Asked Questions
11.7 Summary

Part III Application Examples

Chapter 12 List Container
12.1 Why Is This Chapter Worth Reading?
12.2 Overview
12.3 Domain Analysis
12.4 Domain Design
12.5 Implementation Components
12.6 Manual Assembly
12.7 Specifying Lists
12.8 The Generator
12.9 Extensions

Chapter 13 Bank Account
13.1 Why Is This Chapter Worth Reading?
13.2 The Successful Programming Shop
13.3 Design Pattems, Frameworks, and Components
13.4 Domain Engineering and Generative Programming
13.5 Feature Modeling
13.6 Architecture Design
13.7 Implementation Components
13.8 Configurable Class Hierarchies
13.9 Designing a Domain-Specific Language
13.10 Bank Account Generator
13.11 Testing Generators and Their Products

Chapter 14 Generative Matrix Computation Library (GMCL)
14.1 Why Is This Chapter Worth Reading?
14.2 Why Matrix Computations?
14.3 Domain Analysis
14.3.1 Domain Definition
14.3.2 Domain Modeling
14.4 Domain Design and Implementation
14.4.1 Matrix Type Generation
14.4.1.1 Target Architecture and Matrix Implementation Components
14.4.1.2 Matrix Configuration DSL
14.4.1.3 Matrix Configuration Generator
14.4.1.3.1 Configuration DSL Parser
14.4.1.3.2 Assigning Defaults to DSL Features
14.4.1.3.3 Matrix Component Assembler
14.4.2 Generating Code for Matrix Expressions
14.4.2.1 Evaluating Matrix Expressions
14.4.2.2 Modeling the Elementwise Expression Evaluation Using Objects
14.4.2.3 Overview of the Implementation
14.4.2.4 Matrix Operator Templates
14.4.2.5 Matrix Expression Templates
14.4.2.6 Matrix Cache
14.4.2.7 Generating getElement
14.4.2.8 Metafunctions for Computing Result Types of Expressions
14.4.2.9 Generating Matrix Assignment
14.4.2.10 Lessons Learned
14.4.2.11 Problems with Template Metaprograrnming
14.4.3 Implementing the Matrix Component in IP

Appendices
Appendix A Conceptual Modeling
A.1 What Are Concepts?
A.2 Theories of Concepts
A.2.1 Basic Terminology
A.2.2 The Classical View
A.2.3 The Probabilistic View
A.2.4 The Exemplar View
A.2.5 Summary of the Three Views
A.3 Important Issues Concerning Concepts
A.3.1 Stability of Concepts
A.3.2 Concept Core
A.3.3 Informational Contents of Features
A.3.4 Feature Composition and Relationships between Features
A.3.5 Quality of Features
A.3.6 Abstraction and Generalization
A.4 Conceptual Modeling, Object-Orientation, and Software Reuse
Appendix B Instance-Specific Extension Protocol for Smalltalk
Appendix C Protocol for Attaching Listener Objects in Smalltalk
Appendix D Glossary of Matrix Computation Terms
Appendix E Metafunction for Evaluating Dependency Tables
Glossary of Generative Programming Terms
References
Index

L'auteur - Krzysztof Czarnecki

Krzysztof Czarnecki

is a researcher and consultant with the Software Engineering Lab at DaimlerChrysler Research and Technology in Ulm, Germany. He gained firsthand experience with Aspect-Oriented Programming and Intentional Programming during research visits at the Xerox Palo Alto Research Center and the Microsoft Research in Redmond, Washington. He received an M.S. degree in computer science from California State University at Sacramento, and M.S. and Ph.D. degrees in computer science from the University of Ilmenau in Germany.

L'auteur - Ulrich Eisenecker

Ulrich Eisenecker

is a professor of computer science at the University of Applied Sciences Kaiserslautern at Zweibrocken, where he chairs the department for componentware and windows interfaces. Prior to his university career he spent nearly a decade in industry. He is an editor of a special supplement on component software of the German IT magazine OBJEKTspektrum, for which he also writes a C++ column. He has published more than a hundred articles, and frequently speaks at national and international IT conferences.

Caractéristiques techniques

  PAPIER
Éditeur(s) Addison Wesley
Auteur(s) Krzysztof Czarnecki, Ulrich Eisenecker
Parution 22/06/2000
Nb. de pages 832
Format 18,6 x 23,3
Couverture Broché
Poids 1269g
Intérieur Noir et Blanc
EAN13 9780201309775
ISBN13 978-0-201-30977-5

Avantages Eyrolles.com

Livraison à partir de 0,01 en France métropolitaine
Paiement en ligne SÉCURISÉ
Livraison dans le monde
Retour sous 15 jours
+ d'un million et demi de livres disponibles
satisfait ou remboursé
Satisfait ou remboursé
Paiement sécurisé
modes de paiement
Paiement à l'expédition
partout dans le monde
Livraison partout dans le monde
Service clients sav@commande.eyrolles.com
librairie française
Librairie française depuis 1925
Recevez nos newsletters
Vous serez régulièrement informé(e) de toutes nos actualités.
Inscription