Industrial-Sized Deals TextBTS15 Shop Women's Handbags Learn more nav_sap_SWP_6M_fly_beacon Deradoorian $5 Off Fire TV Stick Off to College Essentials Shop Popular Services tmnt tmnt tmnt  Amazon Echo Starting at $99 Kindle Voyage Disney Infinity 3.0 Shop Back to School with Amazon Back to School with Amazon Outdoor Recreation Deal of the Day

Multi-Paradigm Design for C++ 1st Edition

14 customer reviews
ISBN-13: 978-0201824674
ISBN-10: 0201824671
Why is ISBN important?
This bar-code number lets you verify that you're getting exactly the right version or edition of a book. The 13-digit and 10-digit formats both work.
Scan an ISBN with your phone
Use the Amazon App to scan ISBNs and compare prices.
Have one to sell? Sell on Amazon
Buy used
Buy new
More Buying Choices
17 New from $21.97 21 Used from $4.66
Free Two-Day Shipping for College Students with Amazon Student Free%20Two-Day%20Shipping%20for%20College%20Students%20with%20Amazon%20Student

InterDesign Brand Store Awareness Rent Textbooks
$39.99 FREE Shipping. Only 3 left in stock (more on the way). Ships from and sold by Gift-wrap available.

Frequently Bought Together

Multi-Paradigm Design for C++ + Advanced C++ Programming Styles and Idioms
Price for both: $78.28

Buy the selected items together

Editorial Reviews


"Highly Recommended: This book provides readers with an informal, pragmatic approach to software development. It was well worth studying and has proved enlightening...This is a good book that should be read by intermediate to advanced C++ developers. If you don't have time to read it, then at least have a quick look through. You're bound to find a chapter that attracts your attention and enlightens you." -- Ian Bruntlett, Overload

"If you want to broaden your perspective and willing to risk facing a world in which OOP is not always the best, then you should take the time to read this book. I suspect that having done so you will want to hang on to your copy so as to read it again in a leisurely fashion... Finally, if you ever get a chance to listen to James Coplien speak grab it with both hands, he is one of those exceptional speakers that set standards that most of us can only aspire to." -- Francis Glassborow, of the Association of C and C++ Users (ACCU), in C Vu January, 1999

"Jim Coplien is a recognized authority in several areas of software development: C++ programming, the object paradigm, patterns, and the organizational aspects of software development projects. His latest book combines his knowledge of all these topics... The book excels because of the author's broad knowledge... Multi-Paradigm Design in C++ is a great book crammed with elaborate and compelling ideas. Reading it will change your perception of software development. " -- Angelika Langer and Klaus Kreft, The Development Exchange

"May well be one of the most important books ever written in the software field... treats an extremely complex topic in an extremely complex manner" -- The Software Practitioner

"This may be one of the most important books ever written in the software field." ... "Who would believe that behind the covers of a book that announces it is about 'multi-paradigm' something-or-other, is perhaps the definitive book on domain analysis and engineering. - how to choose among competing methodologies - distinguishing between the problem and its solution" ... "The software engineering field in the future must focus heavily not just on applications but on their families." -- Robert L. Glass, in Software Practitioner, May 1999

From the Inside Flap

I have rarely invested as much energy in any endeavor as in naming this book. As the manuscript evolved, its title evolved to emphasize one or two concepts at any given time from the set of basic elements Domain, Engineering, Multi-Paradigm, Analysis, Design, Programming, and C++. The publisher was afraid that the unfamiliar term "domain engineering" would fail to engage the target market. One of the reviewers, Tim Budd, was concerned about confusion between his use of "multi-paradigm" and the way the term is used in this book. I was concerned about using terms such as "analysis" because of my desire to put the book into the hands of everyday programmers, whose problems it strives to address. Tim Budd graciously offered that our discipline is diverse enough to accommodate a broad spectrum of definitions for "multi-paradigm," and I insisted on a title that emphasized the role of the programmer and not that of the methodologist. That led to a happy convergence on the current title, Multi-Paradigm Design for C++.

I never considered titles containing the words pattern, object, CORBA, component, or Java. Multi-paradigm design tries to dig deeper than any single technology or technique to address fundamental questions of software abstraction and design. What is a paradigm? What is the relationship between analysis, design, and implementation? These questions go to the foundations of abstraction that underlie the basic paradigms of programming.

One of the most basic questions is, what is abstraction? Abstraction is one of the key tools of software design; it is necessary for managing the immense and ever-growing complexity of computer systems. The common answer to this question usually has something to do with objects, thereby reflecting the large body of literature and tools that have emerged over the past decade or two to support object-oriented techniques. But this response ignores common design structures that programmers use every day and that are not object-oriented: templates, families of overloaded functions, modules, generic functions, and others. Such use is particularly common in the C++ community, though it is by no means unique to that community.

There are principles of abstraction common to all of these techniques. Each technique is a different way of grouping abstractions according to properties they share, including regularities in the way individual entities vary from each other. To some, commonality captures the recurring external properties of a system that are germane to its domain. To others, commonality helps regularize implicit structure that analysis uncovers in the recurring solutions for a domain. Multi-paradigm design honors both perspectives. For example, the technique called object-oriented design groups objects into classes that characterize the common structure and behaviors of those objects. It groups classes into hierarchies or graphs that reflect commonality in structure and behavior, while at the same time allowing for regular variations in structure and in the algorithms that implement a given behavior. One can describe templates using a different characterization of commonality and variation. Commonality and variation provide a broad, simple model of abstraction, broader than objects and classes and broad enough to handle most design and programming techniques.

Commonality and variation aren't new to software design models. Parnas's concept of software families Parnas1976 goes back at least two decades. Families are collections of software elements related by their commonalities, with individual family members differentiated by their variations. The design ideas that have emerged from software families have often found expression in widely accepted programming languages; good examples are modules, classes and objects, and generic constructs. The work of Lai and Weiss on environments for application-specific languages takes this idea to its limits Weiss1999. The so-called analysis activities that focus on the discovery of software families and the so-called coding activities that focus on how to express these abstractions have always been closely intertwined. Multi-paradigm design explicitly recognizes the close tie between language, design, and domain structure and the way they express commonality and variation.

We discover software families in an activity called domain analysis, which is another field with a long history Neighbors1980. Software reuse was the original goal of domain analysis, and this goal fits nicely with software families. Multi-paradigm design explicitly focuses on issues that are important for reuse. To help the designer think about adapting software to a spectrum of anticipated markets, multi-paradigm design explicitly separates commonalities--assumptions that don't change--from variabilities--assumptions that do change. We strive for domain analysis, not just analysis. We design families of abstractions, not just abstractions. Done well, this approach to design leads in the long term to easier maintenance (if we predict the variabilities well) and to a more resilient architecture (we don't have to dig up the foundations every time we make a change). Of course, multi-paradigm development is just one tool that helps support the technical end of reuse. Effective reuse can happen only in the larger context of organizational issues, marketing issues, and software economics.

We use these foundations of commonality and variation to formalize the concept of paradigm. A paradigm, as the term is popularly used in contemporary software design, is a way of organizing system abstractions around properties of commonality and variation. The object paradigm organizes systems around abstractions based on commonality in structure and behavior and variation in structure and algorithm. The template paradigm is based on structural commonality across family members, with variations explicitly factored out into template parameters. Overloaded functions form families whose members share the same name and semantics, and in which each family member is differentiated by its formal parameter types.

C++ is a programming language that supports multiple paradigms: classes, overloaded functions, templates, modules, ordinary procedural programming, and others. Bjarne Stroustrup, the creator of C++, intended it that way. Most programmers use the C++ features that go beyond objects (though some abuse them to excess and others force designs into an object-oriented mold when they should be using more natural expressions of design provided by other language features). The powerful template code of John Barton and Lee Nackman Barton1994 is perhaps the height of tasteful multi-paradigm design.

Even though Stroustrup designated C++ as a multi-paradigm language, there have been no serious attempts to create a design method suited to the richness of C++ features. And though C++ provides a particularly rich and crisp example of multi-paradigm programming, the opportunity for multi-paradigm development generalizes to other programming languages. There is a gap between the current design literature and the intended use of C++ features that is reflected in current practice. This book bridges that gap, using simple notations and vocabulary to help developers combine multiple paradigms instructively.

During a lecture I gave at DePaul University in September 1995, the department chair, Dr. Helmut Epp, suggested the term meta-design for this work because its first concern is to identify design techniques suitable to the domain for which software is being developed. That is a useful perspective on the approach taken in this book and in fact describes how most developers approach design. One must first decide what paradigms to use; then one can apply the rules and tools of each paradigm for the system partitions well-suited to their use. This concern is the domain not only of the system architect and designer, but also of the everyday programmer.

Deciding what paradigm to use is one matter; having tools to express the abstractions of a given paradigm is another. We can analyze the application domain using principles of commonality and variation to divide it into subdomains, each of which may be suitable for design under a specific paradigm. This partitioning occurs during a development phase commonly called analysis. However, it is better thought of as an early phase of design because it tries to create abstractions that the implementation technology can express. Not all implementation tools (programming languages and other tools such as application generators) can express all paradigms. For this reason, it's important to do a domain analysis not only of the application domain, but also of the solution domain. Multi-paradigm design makes this an explicit activity. Solution domain analysis is another facet of the "meta-design" nature of multi-paradigm design.

There are many things this book is not. It is not a comprehensive design method, software development life cycle model, or turn-the-crank approach to design. Most good new designs are variants of old designs that have worked

See all Editorial Reviews

Best Books of the Month
Best Books of the Month
Want to know our Editors' picks for the best books of the month? Browse Best Books of the Month, featuring our favorite new books in more than a dozen categories.

Product Details

  • Paperback: 304 pages
  • Publisher: Addison-Wesley Professional; 1 edition (October 23, 1998)
  • Language: English
  • ISBN-10: 0201824671
  • ISBN-13: 978-0201824674
  • Product Dimensions: 7.3 x 0.8 x 8.9 inches
  • Shipping Weight: 15.2 ounces (View shipping rates and policies)
  • Average Customer Review: 3.6 out of 5 stars  See all reviews (14 customer reviews)
  • Amazon Best Sellers Rank: #2,152,586 in Books (See Top 100 in Books)

More About the Author

Jim ("Cope") Coplien is a speaker and author whose works range from programming and architecture to ethnography and organizational design. He is a founder of the Software Pattern discipline and of organizational patterns, which in turn were one of the foundations of Scrum. Though he writes for a technical audience, his works focus on the human element of product development. His latest work, "Lean Architecture" is as much about how architecture helps make software usable, as it is about software maintainability on the technical side.

Cope lives near Helsingør, Denmark, with his wife and son.

Customer Reviews

Most Helpful Customer Reviews

Format: Paperback
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.
Read more ›
Comment Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again
8 of 11 people found the following review helpful By R. Williams VINE VOICE on November 11, 2006
Format: Paperback Verified Purchase
Jesus, Amazon reviews are one of the best things about the internet. They have to start changing rating formulations here to discount the rise of corn pone crankery. Giving this one star and saying it is soporific (hint: that's a joke see, as the guy is complaining about use of language and the old mozartean syllable count), is LUDICROUS.

First off, where has this book been hiding? When I first read Coplien's Advanced C++ in 1992, it blew me away. I read and reread it like it was epic poetry (oh wait, that's because, well, it IS). Coplien is everything you want in an author: first, he is literate. Unlike junior who can only hold the book w/one hand (since they took away his pacifier, he has to use his thumb), he has clearly read and digested a LOT of stuff. Science people, too often have zero literary sensibility at all. Funny that the great scientists seemed to. Oppenheimer read in several languages and quoted the Baghavad Gita, Greek scholars, and was into poetry. Anyway, Coplien can also claim to have been, to borrow the Dean Acheson phrase 'Present at the Creation' (though, lucky for Cope, he was there and took part in the birthing of the most important software dev movement in the last 25 years, while Acheson helped cement the modern police state). Finally (on this front), this book is not only readable, it reads like the wind. And believe me, friends, I was almost suckered into believing the whiney tail of my hero's demise.

Now, here are a few more things I'd like to say about this book:

1. I have been reading a lot about PLE lately, and this book plugs into this so well, it's bizarre.
Read more ›
2 Comments Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again
11 of 15 people found the following review helpful By Christophe Pierret ( on September 15, 1999
Format: Paperback
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.
Comment Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again
1 of 1 people found the following review helpful By G. Hoffman on October 16, 2010
Format: Paperback Verified Purchase
I've been in the software development industry for over a decade, and one of the things that continues to shock and depress me is the number of developers out there that are stunningly weak on theory.

I got turned on to this book by a presentation at TechEd. According to the speaker, C# is capable of at least five different coding paradigms, only one of which is Object Oriented. In the enterprise development world, OO is viewed as the "right" way to do things, with no understanding of the tradeoffs being made by following the OO approach. Worse, object models are getting created by people that have no idea how to validate the design. What is "right" and "wrong" is decided mostly by gut feel. If you ever hear the phrase, "well, I had to do some refactoring in the classes that were inheriting from mine because the change I made broke some stuff," you know the design was bad.

When I review code, I see developers drifting in and out of the OO style, mixing in bits and pieces of Functional programming, a bit of event-driven/message-based programming, and absolutely no idea of why or how to decide which paradigm to follow in a given situation. Worse, if they know any theory at all, it's only for the OO approach. Not good when trying to use the Functional programming features in C#.

If you just thought to yourself that C# is only an OO language, then you REALLY need to read this book.

I found this book to be an excellent starting point for anyone trying to educate themselves on the appropriate use and selection of a programming paradigm. It has enough theory to get you started, and will build enough of a vocabulary to let you find more focused books.

The computer book market is flooded with how-to guides. This isn't one of them.
Read more ›
Comment Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again

Most Recent Customer Reviews

Set up an Amazon Giveaway

Amazon Giveaway allows you to run promotional giveaways in order to create buzz, reward your audience, and attract new followers and customers. Learn more
Multi-Paradigm Design for C++
This item: Multi-Paradigm Design for C++
Price: $39.99
Ships from and sold by

What Other Items Do Customers Buy After Viewing This Item?

Want to discover more products? Check out these pages to see more: c programming, c++