Rating:  Summary: Table of Contents Review: Multi-Paradigm Design for C++ James O. Coplien Table of Contents Preface xi CHAPTER 1 Introduction: The Need for Multiple Paradigms 1 Domain Engineering and Multiple Paradigms 1 Design, Analysis, Domains, and Families: Term Definitions 4 Beyond Objects 10 Commonality and Variability Analysis 12 Software Families 13 Multi-Paradigm Design 15 Multi-Paradigm Development and Programming Language 18 Commonality Analysis: Other Perspectives 23 Summary 27 CHAPTER 2 Commonality Analysis 29 Commonality: The Essence of Abstraction 29 Priming Analysis: The Domain Vocabulary 35 Dimensions of Commonality and Commonality Categories 39 Examples of Commonality 53 Reviewing the Commonality Analysis 59 Commonality and Evolution 59 Summary 61 CHAPTER 3 Variability Analysis 63 Variability: The Spice of Life 63 The Commonality Base 65 Positive and Negative Variability 66 The Domain and Range of Variability 69 Binding Time 71 Defaults 75 Variability Tables 76 Some Variability Traps 77 Reviewing the Variability Analysis 78 Variability Dependency Graphs 79 Summary 80 CHAPTER 4 Application Domain Analysis 81 Analysis, Domain Analysis, and Beyond 81 Subdomains within a Domain Analysis 90 The Structure of a Subdomain 97 Analysis: The Big Picture 102 Summary 104 CHAPTER 5 Object-Oriented Analysis 107 About Paradigms and Objects 107 Object-Oriented Commonality Analysis 114 Summary 118 CHAPTER 6 Solution Domain Analysis 119 The "Other" Domain 119 The C++ Solution Domain: An Overview 121 Data 122 Overloading 122 Class Templates 123 Function Templates 124 Inheritance 125 Virtual Functions 132 Commonality Analysis and Polymorphism 133 Preprocessor Directives 134 Negative Variability 135 A Summary of the C++ Solution Domain: A Family Table 151 CHAPTER 7 Simple Mixing of Paradigms 153 Putting It All Together: An Overview of Multi- Paradigm Design 153 Activities of Multi-Paradigm Design 162 Example: A Simple Language Translator 168 Design, Not Analysis 181 Another Example: Automatic Differentiation 182 Outboard Paradigms 192 Management Issues 193 Summary 199 CHAPTER 8 Weaving Paradigms Together 201 Method and Design 201 Commonality Analysis: What Dimension of Commonality? 202 Multiple Paradigms: Multiple Dimensions of Variability in One Set of Commonalities 204 Codependent Domains 210 Design and Structure 227 Another Example: A Finite-State Machine 232 Pattern-Based Solution Strategies 239 Summary 239 CHAPTER 9 Augmenting the Solution Domain with Patterns 241 The Value of Idioms and Patterns 241 Commonality and Variability in Common Patterns 248 Patterns of Negative Variability 256 Multi-Paradigm Tools as a Patterns Adjunct 259 Summary 260 References 261 Index 265
Rating:  Summary: Table of Contents Review: Design for C++ James O. Coplien Table of Contents Preface xi CHAPTER1 Introduction: The Need for Multiple Paradigms 1 Domain Engineeringand Multiple Paradigms 1 Design, Analysis, Domains, and Families: Term Definitions 4 Beyond Objects 10 Commonality and Variability Analysis 12 Software Families 13 Multi-Paradigm Design 15 Multi-Paradigm Development and Programming Language 18 Commonality Analysis: Other Perspectives 23 Summary 27 CHAPTER 2 Commonality Analysis 29 Commonality: The Essence of Abstraction 29 Priming Analysis: The Domain Vocabulary 35 Dimensions of Commonality and Commonality Categories 39 Examples of Commonality 53 Reviewing the Commonality Analysis 59 Commonality and Evolution 59 Summary 61 CHAPTER 3 Variability Analysis 63 Variability: The Spice of Life 63 The Commonality Base 65 Positive and Negative Variability 66 The Domain and Range of Variability 69 Binding Time 71 Defaults 75 Variability Tables 76 Some Variability Traps 77 Reviewing the Variability Analysis 78 Variability Dependency Graphs 79 Summary 80 CHAPTER 4 Application Domain Analysis 81 Analysis, Domain Analysis, and Beyond 81 Subdomains within a Domain Analysis 90 The Structure of a Subdomain 97 Analysis: The Big Picture 102 Summary 104 CHAPTER 5 Object-Oriented Analysis 107 About Paradigms and Objects 107 Object-Oriented Commonality Analysis 114 Summary 118 CHAPTER 6 Solution Domain Analysis 119 The "Other" Domain 119 The C++ Solution Domain: An Overview 121 Data 122 Overloading 122 Class Templates 123 Function Templates 124 Inheritance 125 Virtual Functions 132 Commonality Analysis and Polymorphism 133 Preprocessor Directives 134 Negative Variability 135 A Summary of the C++ Solution Domain: A Family Table 151 CHAPTER 7 Simple Mixing of Paradigms 153 Putting It All Together: An Overview of Multi- Paradigm Design 153 Activities of Multi-Paradigm Design 162 Example: A Simple Language Translator 168 Design, Not Analysis 181 Another Example: Automatic Differentiation 182 Outboard Paradigms 192 Management Issues 193 Summary 199 CHAPTER 8 Weaving Paradigms Together 201 Method and Design 201 Commonality Analysis: What Dimension of Commonality? 202 Multiple Paradigms: Multiple Dimensions of Variability in One Set of Commonalities 204 Codependent Domains 210 Design and Structure 227 Another Example: A Finite-State Machine 232 Pattern-Based Solution Strategies 239 Summary 239 CHAPTER 9 Augmenting the Solution Domain with Patterns 241 The Value of Idioms and Patterns 241 Commonality and Variability in Common Patterns 248 Patterns of Negative Variability 256 Multi-Paradigm Tools as a Patterns Adjunct 259 Summary 260 References 261 Index 265 END
Rating:  Summary: Very hard, unrewarding read Review: I am experienced with C++, however I found this book extremely difficult to read. The author seems to enjoy digressing and building elaborate sentences, but unfortunately this (at least to me) seriously hindered the understanding of the material. Here and there I would see a great insight, but such insights are very hard to find among all the precious language used. There are no code samples and very little concrete stuff at all. I don't even know to this day what the book has to do with C++. I usually had to read many paragraphs a second time before I figured out their meaning. And, unfortunately, it was more often a trivial fact dressed in oh so nice words, rather than an illuminatory insight. I just didn't gain anything from reading this book. Sorry.
Rating:  Summary: Quite Useless Review: I bought this book after reading the reviews. Well, in my view, it is full of fluff and no substance. It does not have preciseness of computer science.
Rating:  Summary: a sure cure for insomnia... Review: I was so excited when I found this book. Large scale application design is HARD! Although I hadn't read any of Mr. Coplien's previous books, his name is prominent in the C++ community. This book has some interesting ideas but most engineers won't get to them because of the author's fascination with the language. Time and again I found myself re-reading a passage only to discover that he was making a simple point. Please Mr. Coplien, consult a writer before you write any more. Your text is obtuse, dense, when stating the obvious. S/he would certainly warn you of the dangers of passive voice, a trap in which you're completely mired! I hope this doesn't violate any copyrights but here are the last two sentences in section 1.8. [after a discussion of late binding] "Multi-paradigm design doesn't aspire to such reflective solutions; this is largely an issue of practicality and scope. The pattern tie-ins in Chapter 9 are limited to structural commonalities and variabilites that are simple extensions to C++ constructs." I'm sorry but I, and most of the engineers I've worked with, just don't talk that way. I'd be tempted write something like that if I wanted to be sure that no one would read my paper. IMHO, Mr. Coplien, if you want a model of how to write something which is readable to those outside of the C++ design community, pattern your prose after any of the following books (which I've found very readable): - The C++ Programming Language - Stroustrup (Part IV) - Design Patterns - Gamma, et.al. - Advanced CORBA programming - Henning, Vinoski
Rating:  Summary: Transition legacy systems with multi-paradigm design Review: In the programming world, the word paradigm is simultaneously over and under used. It is under used in the sense that in this field, the conventional wisdom changes with the announcement of each new next big thing. Fortunes are made and lost in a matter of hours, based on a cycle of "revolutionary" new ideas. However, it is sometimes over used when referring to a specific programming language. I must confess that while it is clear that C++ is a very flexible language that allows for many different approaches, I was skeptical when I read the title of this book. I tend to define the term paradigm to mean more significant differences than others do. However, only a short while into the book, I realized the sense of the approach the author has taken. The majority of software projects are not constructed anew, but are legacy systems that need to be updated. In almost all of those cases, this would involve multi-paradigm development, as it is a rare occasion indeed when legacy technology would be used to manage the updates. In fact, the tools and expertise may no longer exist. Even in those cases where there is a complete rewrite it is necessary to understand the old paradigm, so there is no fundamental difference from the update. In reading this book, I was struck with many thoughts about how practical the authors approach is. He argues for C++ by emphasizing that it is a language capable of supporting many different approaches, sometimes even simultaneously. I regularly teach experienced programmers the basic concepts of object-oriented programming , and this gives me firsthand experience in seeing the difficulties in making the paradigm shift. I gleaned a few new approaches from this book that I believe will help make the transition easier. The problem with learning new tricks is often because we know so many old ones. If we can intersperse the old and the new, transitions are easier, and this book will help you successfully perform the mixing.
Rating:  Summary: Transition legacy systems with multi-paradigm design Review: In the programming world, the word paradigm is simultaneously over and under used. It is under used in the sense that in this field, the conventional wisdom changes with the announcement of each new next big thing. Fortunes are made and lost in a matter of hours, based on a cycle of "revolutionary" new ideas. However, it is sometimes over used when referring to a specific programming language. I must confess that while it is clear that C++ is a very flexible language that allows for many different approaches, I was skeptical when I read the title of this book. I tend to define the term paradigm to mean more significant differences than others do. However, only a short while into the book, I realized the sense of the approach the author has taken. The majority of software projects are not constructed anew, but are legacy systems that need to be updated. In almost all of those cases, this would involve multi-paradigm development, as it is a rare occasion indeed when legacy technology would be used to manage the updates. In fact, the tools and expertise may no longer exist. Even in those cases where there is a complete rewrite it is necessary to understand the old paradigm, so there is no fundamental difference from the update. In reading this book, I was struck with many thoughts about how practical the authors approach is. He argues for C++ by emphasizing that it is a language capable of supporting many different approaches, sometimes even simultaneously. I regularly teach experienced programmers the basic concepts of object-oriented programming , and this gives me firsthand experience in seeing the difficulties in making the paradigm shift. I gleaned a few new approaches from this book that I believe will help make the transition easier. The problem with learning new tricks is often because we know so many old ones. If we can intersperse the old and the new, transitions are easier, and this book will help you successfully perform the mixing.
Rating:  Summary: An outstanding contribution to software design philosophy! Review: The author tries to bring back together different ways of thinking (aka paradigms) and succeeds. You will never see analysis and design the same way after reading this book. He showed me what generic programming (C++ templates) and OO have in common. Even if you don't use C++ in your day to day tasks, you can benefit from reading this book. Thanks Mr Coplien.
Rating:  Summary: An outstanding contribution to software design philosophy! Review: The author tries to bring back together different ways of thinking (aka paradigms) and succeeds. You will never see analysis and design the same way after reading this book. He showed me what generic programming (C++ templates) and OO have in common. Even if you don't use C++ in your day to day tasks, you can benefit from reading this book. Thanks Mr Coplien.
Rating:  Summary: Somewhat Useful if You're Already Well-Read Review: The main complaint I have with this book is that it's basically unintelligible unless you've already read several thousand pages of other books about design patterns and advanced C++. The other complaint I have is that if you've already read that much about C++, then you have to wade through a lot of stuff that you've already figured out just to dig up the dozen or so nuggets of new insight. (Admittedly, I'm prejudiced against dissecting methodology, so you might take this view with a grain of salt.) This book isn't bad, but for the average C++ programmer there's probably a lot of fruit out there that hangs lower than this one. "Design Patterns" (Gamma), "The C++ Programming Language" (Stroustrup), "Exceptional C++" (Sutter) and "The C++ Standard Library" (Josuttis) come to mind.
|