Home > Store > Programming
Generative Programming: Methods, Tools, and Applications
- By Krysztof Czarnecki, Ulrich Eisenecker
- Published Jun 6, 2000 by Addison-Wesley Professional.
- Copyright 2000
- Dimensions: 7-3/8x9-1/4
- Pages: 864
- Edition: 1st
- Book
- ISBN-10: 0-201-30977-7
- ISBN-13: 978-0-201-30977-5
Register your product to gain access to bonus material or receive a coupon.
Praise for Generative Programming
“The book develops strong themes around unifying principles that tie the pieces together, most notably domain engineering and metaprogramming. It’s crucial to understand that this book is not just some refreshing diversionn or just an exposition of some noteworthy niche techniques. It is a harbinger of a broader enlightenment that opens the door to a new age.”
—from the foreword by JAMES COPLIEN, a Distinguished Member of Technical Staff at Lucent Technologies' Bell Laboratories, Naperville, IL“Generative Programming offers a well-written and comprehensive discussion that integrates object technology and domain engineering. The authors’ approach to software systems generation provides very clear insights into practices essential for systematic reuse and software product lines.”
—SHOLOM COHEN, a Senior Member of the Technical Staff of the Software Engineering Institute (SEI), Pittsburgh, PA, and a co-developer of the Feature Oriented Domain Analysis (FODA) method“If you believe that the systems you develop today will share concepts with the systems you will develop tomorrow, then the practical techniques presented in this book will reduce your time to market, decrease your engineering costs, and improve your software quality. These techniques are essential for both practitioners and researchers concerned with modern system development.”
—JAMES NEIGHBORS, President of Bayfront Technologies, Inc., Newport Beach, CA, and the author of the Draco approach“The authors present a grand tour of Generative Programming which is bound to become a classic. They properly focus on the generally unappreciated connection between Domain Specific Languages and Generative Programming as a motivation for future development. The wide-ranging and practical methods for Domain Analysis and Domain Engineering describe the first steps that developers can take right now. They are valuable both when existing systems are used or in preparation for emerging new generative technologies.”
—CHARLES SIMONYI, Chief Architect at Microsoft Research, Redmond, WA, and the inventor of Intentional Programming
Generative Programming (GP) offers great promise to application developers. It makes the idea of moving from Ione of a kindO 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 IrightO 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).
|
99 of 101 people found the following review helpful
By
This review is from: Generative Programming: Methods, Tools, and Applications (Paperback)
Its hard to tell from the title of this book who will benefit from reading it but from a practical standpoint, C++ library designers and those with an interest in the "bleeding edge" of software engineering should find it very enlightening. The primary focus of this book is speeding up the lifecycle of program design by utilizing "Generative Programming". GP is a fancy name for programming using domain specific notations and generating highly optimized code without burdening the application programmer with low level details of domain libraries. Chapter 1 "What is this book about?" - The authors describe GP. Short and sweet..... Chapter 2 "Domain Engineering" - A rather dry, pedantic review of current Domain Engineering methods. This chapter reads like a PHD lit review. Boring.... Chapter 3 "Domain Engineering and OO Analysis and Design" - Why OO Analysis isn't appropriate for designing reusable libraries and analysis methods... Read more
36 of 41 people found the following review helpful
By
This review is from: Generative Programming: Methods, Tools, and Applications (Paperback)
Czarnecki & Eisenecker are the authors of the the famed IF<> template used in many template libraries (Blitz++, GGCL, FAST, VTL and Lambda) They also discuss creation of a linked list, binary tree, SWITCH, FOR, WHILE templates. These are compile time constructs for generating code, not the resulting executable code. All cool stuff. There have been some advances in this realm of coding since this book has been published, but for the most part this is a good reference text. (Its an area of programming that is moving fast.)The complaint about this book for JAVA programmers is legit, JAVA without templates or some other meta language is an inappropriate tool to do Generative Programming. That's not a slam on JAVA its just the way it is. Screws and nails, the right tool for the job at hand. The discussions on design methodologies is pretty dry. If I'm having trouble sleeping, reading a chapter on it will do the trick. However there is a great chapter on... Read more
15 of 17 people found the following review helpful
By Peter D. Barnhart (Brooklyn, MI) - See all my reviews
This review is from: Generative Programming: Methods, Tools, and Applications (Paperback)
If we think of OOP as a level of abstraction beyond procedural programming, we can ask the question "what's the next level of abstraction beyond OOP?" Application of OOP allows us to design and create programs of far greater complexity than traditional procedural approaches. Similarly, another level of abstraction should lead to a quantum leap in our abilities, both conceptually and practically.The question addressed by this book is how can we go about designing programs that generate programs? How might we specify families of programs to cover whole domains of problems, in the same sense that a modern auto design specifies a near infinity of specific autos with varying sets of options? How might we implement such designs - and what tools are currently available, or under construction, for doing so? How do we go about thinking about such questions? This book doesn't have all the answers, but certainly the ideas of feature modelling and domain-specific... Read more |
› See all 22 customer reviews...
Praise For Generative Programming: Methods, Tools, and Applications
Advance Praise for Generative Programming
"The book develops strong themes around unifying principles that tie the pieces together, most notably domain engineering and metaprogramming. It's crucial to understand that this book is not just some refreshing diversionn or just an exposition of some noteworthy niche techniques. It is a harbinger of a broader enlightenment that opens the door to a new age."
-from the foreword by JAMES COPLIEN, a Distinguished Member of Technical Staff at Lucent Technologies' Bell Laboratories, Naperville, IL
"Generative Programming offers a well-written and comprehensive discussion that integrates object technology and domain engineering. The authors' approach to software systems generation provides very clear insights into practices essential for systematic reuse and software product lines."
-SHOLOM COHEN, a Senior Member of the Technical Staff of the Software Engineering Institute (SEI), Pittsburgh, PA, and a co-developer of the Feature Oriented Domain Analysis (FODA) method
"If you believe that the systems you develop today will share concepts with the systems you will develop tomorrow, then the practical techniques presented in this book will reduce your time to market, decrease your engineering costs, and improve your software quality. These techniques are essential for both practitioners and researchers concerned with modern system development."
-JAMES NEIGHBORS, President of Bayfront Technologies, Inc., Newport Beach, CA, and the author of the Draco approach
"The authors present a grand tour of Generative Programming which is bound to become a classic. They properly focus on the generally unappreciated connection between Domain Specific Languages and Generative Programming as a motivation for future development. The wide-ranging and practical methods for Domain Analysis and Domain Engineering describe the first steps that developers can take right now. They are valuable both when existing systems are used or in preparation for emerging new generative technologies."
-CHARLES SIMONYI, Chief Architect at Microsoft Research, Redmond, WA, and the inventor of Intentional Programming
Preface
The advent of most any new programming book evokes the question: What is, or will be, the place of this book in history? That a book even evokes that question itself says something exciting, something about paradigm shifts or about new ideas or about breaking with old ways. And it is a curiously pertinent question for this book in these times.
Over the past ten years the object-oriented literature has seen a peppering of apparently unrelated ideas ranging from subject-oriented programming to components. What they all had in common is that there was something decidedly unobject-oriented about each of them, though each of them spent time in the object-oriented limelight. But in the past one or two years many of these fragments have found common ground and have rallied together around common themes: metaobject protocols, reflection, intentionality, an insightful interpretation of components, the cutting of features across structure and, in general, the breakdown of classic models of simple modularity. For me, one of the highlights of 1999 was the First International Symposium on Generative and Component-Based Software Engineering (GCSE '99) in Erfurt, Germany, where many researchers had already linked many of these ideas together and shared a consciousness about their significance. But it is just one forum where these ideas came together; one sees the same things at many conference workshops and in some of the emerging literature.
It's always difficult to assess history from within the events that contribute to it, but it is perhaps no less responsible nor dangerous to do so than to try to interpret it after the fact, distanced from the firsthand events. In that spirit, look around and consider that we might, right now, be at a crucial turning point in computer science, particularly in the area of programming and design technique. The industry has been struggling with how to move beyond the limiting confines of the object paradigm. Patterns were one noble attempt and, though they have done much good to draw attention to the value of experience and of the human element in programming, it is unlikely that computer science will ever achieve anything remotely approaching Alexander's vision or level of systems thinking. It is rare that software achieves a true paradigm shift in the Kuhnian sense. Perhaps we're a conservative bunch. And our fascination with novelty sometimes keeps us even from the simplest learnings; many of the tenets of the vernacular components movement hark back to early principles of object-oriented design that experience suggests should have been dropped after only a few years of experience.
But there are new signs of seeds of change. Perhaps the industry can't easily suffer a revolution, but it can tolerate a move to new techniques that build on the status quo. There is a strong and recurring move to find programming and design expression that go beyond objects and things to concepts and features. That is the essence of intentional programming, for example and, to a large degree, of techniques such as domain engineering. This vein of thought is blossoming in a wide range of forums across the industry. We see it in the vulgar (non-Alexanderian) pattern movement; we see it in aspect-oriented programming; we see it in the resurgence of generic programming and in techniques such as multi-paradigm design. And as conferences like OOPSLA focus less and less on the foundations of those things called objects and more and more on conceptual extensions, we start thinking less about parts and more about systems and features. And as OOPSLA shrinks, conferences like GCSE are becoming more numerous and popular. There is a broad-based move in this direction today. And this book finds itself squarely in the middle of this shift. I believe that the reader should neither underestimate the significance of this shift nor of this book's role in both communicating and shaping that shift. We are at the threshold of an evolution, and this book is one of the early normative works of this new genre.
This book perhaps reflects a degree of maturation in computer science that, for the first time, attempts to legitimize an integrative view in its own right rather than extol a technique by differentiating it from its predecessors. As such, the book covers much ground and embraces many disciplines: components, objects, aspects, reflection, intentional programming and generic programming for the technology-focussed, and domain engineering for the systems thinkers. It is a great introduction to both emerging and established techniques for those who are encountering them for the first time. An uninformed glance at this book might take it to be a compendium of existing practice, certainly in the area of domain engineering, but in the broader arena of things beyond objects as well.
Yet this book is more than a collection of techniques. The book develops strong themes around unifying principles that tie the pieces together, most notably domain engineering and metaprogramming. The authors treat the reader to a broad survey of domain engineering and guide the reader to appreciate its essence. Perhaps more than any single idea, domain engineering provides a common thread or theme that one could use to "explain" generative programming. But more than that, the authors draw on other schools of programming as building blocks that can be used to delineate gestalten that amplify each other in a broad, cogent vision called generative programming. The result is certainly more than the sum of the parts; most of the parts have been around for years, but an understanding of how to bring them together is just now emerging and receiving broad exposure.
It's crucial to understand that this book is not just some refreshing diversion nor just an exposition of some noteworthy niche techniques. It is a harbinger of a broader enlightenment that opens the door to a new age. It is the coming of age of techniques, such as reflection, metaprogramming, and aspects that could augment and even displace objects as the foundations of mainstream programming practice in the years to come.
And even if the historical analysis is wrong, it doesn't diminish the book's value. The ideas are sound and timeless. Though the book builds most heavily on the C++ legacy, the ideas should provoke thought in any partisan linguistic community and indeed in the communities for most programming ideologies.
This book is just a beginning. This book invites others to follow: those who will bring methods and processes to help the designer and programmer better master and apply generative programming, and those who will bring formalisms and unifying models that will carry this work into the next generation of research. To those researchers and practitioners who are willing to go behind the confines of objects, this book raises the bar and challenges them to carry its own ideas further. I am sure nothing would please the authors more than if you took up the challenge. The first joy of publishing a book comes for an author when holding the first copy between one's hands, almost in wonder. But the greater joy comes much later, and only vicariously, as the book visibly leaves its mark on emerging practice. Few books offer this return on the authors' investment. I am both hopeful and confident that this will be one of these books, and that is because I believe the power of these ideas will draw you in as a reader and excite you to adopt these new expressive programming and design constructs. I wish you great pleasure in learning from this book, as I did, and exhort you to seek your own place in history as a pioneer who helps take these ideas forward into our discipline through the artisanship of your own programs.
James Coplien
Naperville, Illinois
February 2000
0201309777P02212002
Table of Contents
1. What Is This Book About?
I. ANALYSIS AND DESIGN METHODS AND TECHNIQUES.
II. IMPLEMENTATION TECHNOLOGIES.
III. APPLICATION EXAMPLES.
APPENDICES.
This book includes free shipping!
- Request an Instructor or Media review copy.
- Corporate, Academic, and Employee Purchases
- International Buying Options
Get access to thousands of books and training videos about technology, professional development and digital media from more than 40 leading publishers, including Addison-Wesley, Prentice Hall, Cisco Press, IBM Press, O'Reilly Media, Wrox, Apress, and many more. If you continue your subscription after your 30-day trial, you can receive 30% off a monthly subscription to the Safari Library for up to 12 months. That's a total savings of $199.





