Nothing Special   »   [go: up one dir, main page]

skip to main content
Skip header Section
Multi-paradigm design for C++November 1998
Publisher:
  • Addison-Wesley Longman Publishing Co., Inc.
  • 75 Arlington Street, Suite 300 Boston, MA
  • United States
ISBN:978-0-201-82467-4
Published:01 November 1998
Pages:
280
Skip Bibliometrics Section
Reflects downloads up to 18 Nov 2024Bibliometrics
Abstract

No abstract available.

Cited By

  1. ACM
    Tërnava X, Mortara J and Collet P Identifying and Visualizing Variability in Object-Oriented Variability-Rich Systems Proceedings of the 23rd International Systems and Software Product Line Conference - Volume A, (231-243)
  2. ACM
    Berger T, Völter M, Jensen H, Dangprasert T and Siegmund J Efficiency of projectional editing: a controlled experiment Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering, (763-774)
  3. Schaefer I, Seidl C, Cleophas L and Watson B Tax-PLEASE--Towards Taxonomy-Based Software Product Line Engineering Proceedings of the 15th International Conference on Software Reuse: Bridging with Social-Awareness - Volume 9679, (63-70)
  4. ACM
    Hu C Can Students Design Software? Proceedings of the 47th ACM Technical Symposium on Computing Science Education, (199-204)
  5. Porkoláb Z Immutables in C++: Language Foundation for Functional Programming Central European Functional Programming School, (75-110)
  6. ACM
    Hu C (2013). The nature of software design and its teaching, ACM Inroads, 4:2, (62-72), Online publication date: 1-Jun-2013.
  7. Heradio R, Fernandez-Amoros D, De La Torre L and Abad I (2019). Exemplar driven development of software product lines, Expert Systems with Applications: An International Journal, 39:17, (12885-12896), Online publication date: 1-Dec-2012.
  8. ACM
    Coplien J Objects of the people, by the people, and for the people Proceedings of the 11th annual international conference on Aspect-oriented Software Development Companion, (3-4)
  9. ACM
    Mencer O, Vynckier E, Spooner J, Girdlestone S and Charlesworth O Finding the right level of abstraction for minimizing operational expenditure Proceedings of the fourth workshop on High performance computational finance, (13-18)
  10. ACM
    Günther S Development of internal domain-specific languages Proceedings of the 18th Conference on Pattern Languages of Programs, (1-25)
  11. ACM
    Günther S and Cleenewerck T Design principles for internal domain-specific languages Proceedings of the 17th Conference on Pattern Languages of Programs, (1-35)
  12. ACM
    Mullen T Writing code for other people Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications, (481-492)
  13. ACM
    Mullen T (2009). Writing code for other people, ACM SIGPLAN Notices, 44:10, (481-492), Online publication date: 25-Oct-2009.
  14. Harrison N and Cockburn A (2007). Learning the lessons of architecture patterns, Journal of Computing Sciences in Colleges, 23:1, (198-203), Online publication date: 1-Oct-2007.
  15. ACM
    Stroustrup B Evolving a language in and for the real world Proceedings of the third ACM SIGPLAN conference on History of programming languages, (4-1-4-59)
  16. Davis J and Bonnell R (2007). Propositional Logic Constraint Patterns and Their Use in UML-Based Conceptual Modeling and Analysis, IEEE Transactions on Knowledge and Data Engineering, 19:3, (427-440), Online publication date: 1-Mar-2007.
  17. Börstler J Tenth workshop on pedagogies and tools for the teaching and learning of object oriented concepts Proceedings of the 2006 conference on Object-oriented technology: ECOOP 2006 workshop reader, (146-156)
  18. Vranić V and Šípka M Binding time based concept instantiation in feature modeling Proceedings of the 9th international conference on Reuse of Off-the-Shelf Components, (407-410)
  19. Yao Z, Zheng Q and Chen G AOP++ Proceedings of the 4th international conference on Generative Programming and Component Engineering, (94-108)
  20. Cleophas L, Watson B, Kourie D and Boake A TABASCO Proceedings of the 2005 annual research conference of the South African institute of computer scientists and information technologists on IT research in developing countries, (38-47)
  21. ACM
    Rimassa G and Viroli M Understanding access restriction of variant parametric types and Java wildcards Proceedings of the 2005 ACM symposium on Applied computing, (1390-1397)
  22. Charest L, El Aboulhamid M and Bois G Applying multi-paradigm and design pattern approaches to hardware/software design and reuse Patterns and skeletons for parallel and distributed computing, (297-325)
  23. Zhao L and Coplien J Symmetry in class and type hierarchy Proceedings of the Fortieth International Conference on Tools Pacific: Objects for internet, mobile and embedded applications, (181-189)
  24. Mei H (2019). A Component Model for Perspective Management of Enterprise Software Reuse, Annals of Software Engineering, 11:1, (219-236), Online publication date: 7-Nov-2001.
  25. ACM
    Savolainen J and Kuusela J Violatility analysis framework for product lines Proceedings of the 2001 symposium on Software reusability: putting software reuse in context, (133-141)
  26. ACM
    Gacek C and Anastasopoules M Implementing product line variabilities Proceedings of the 2001 symposium on Software reusability: putting software reuse in context, (109-117)
  27. ACM
    Savolainen J and Kuusela J (2001). Violatility analysis framework for product lines, ACM SIGSOFT Software Engineering Notes, 26:3, (133-141), Online publication date: 1-May-2001.
  28. ACM
    Gacek C and Anastasopoules M (2001). Implementing product line variabilities, ACM SIGSOFT Software Engineering Notes, 26:3, (109-117), Online publication date: 1-May-2001.
  29. ACM
    Beuche D, Fröhlich A, Meyer R, Papajewski H, Schön F, Schröder-Preikschat W, Spinczyk O and Spinczyk U On architecture transparency in operating systems Proceedings of the 9th workshop on ACM SIGOPS European workshop: beyond the PC: new challenges for the operating system, (147-152)
  30. ACM
    Verkest D, Kunkel J and Schirrmeister F System level design using C++ Proceedings of the conference on Design, automation and test in Europe, (74-83)
  31. Coplien J, Hoffman D and Weiss D (2018). Commonality and Variability in Software Engineering, IEEE Software, 15:6, (37-45), Online publication date: 1-Nov-1998.
Contributors
  • Vrije Universiteit Brussel

Reviews

Jeffrey B. Putnam

“Multi-paradigm” has usually been used to mean incorporating rather different models of programming—for example, functional, logic, and object-oriented programming—in a single project. In contrast, this book uses the term rather differently. Here it seems to mean “using all the features of C++ in a project.” Coplien specifically mentions things like “inheritance,” “procedural programming,” and “templates” as the “multi-paradigms” of interest. Those seeking information on what has been referred to elsewhere as multi-paradigm programming will therefore not find this book to be of much interest. The book is very specific to implementation techniques in C++<__?__Pub Fmt kern Amount="0.5pt">—predominantly templates and the inheritance structure. This intense focus on C++ and its features seems particularly odd in light of the author's statement in the preface that “multi-paradigm design tries to dig deeper than any single technology or technique.” So, who would be interested in this book__?__ It will probably not appeal to anyone doing high-level domain analysis and design, since the focus is very much on the programming level. It will probably not interest programmers and designers who have a lot of experience. They will have already found their own idioms and methods for solving the kinds of problems considered. It will probably not interest people who are programming in other languages, because the techniques discussed are almost exclusively specific to C++. Indeed, the constructs used in many of the code examples have no close analogs in other languages. The book will certainly not interest novices or students. It assumes readers have a considerable amount of programming experience; specifically, ex<__?__Pub Caret>tensive programming experience in C++ using templates is assumed. I have been programming in C++ (at least off and on) for quite a few years, and I found many of the examples confusing. Would students find them any less so__?__ The people most likely to get something out of this book are dedicated C++ programmers who are no longer novices but not yet experts. These readers have reached the point at which the basic language does not provide quite the expressiveness needed, but are not yet experienced enough to find solutions on their own. The book does provide some interesting and informative reading. The discussion of variability analysis is good. An interesting extended example presented in the chapter “Codependent Domains” shows a cute trick that might be of use to C++ hackers. The book's flaws seem to outweigh its virtues, however. Contravariance is discussed briefly and confusingly. One section contrasts a method with a “functor,” but the term “functor” is not indexed or otherwise described except implicitly, with a brief snippet of code; it certainly does not seem to mean what it does in ML or Prolog. It is entirely possible that I have missed the point somewhere, despite a close reading, some intense browsing through the book, and some more focused checking into specific sections. But even after all that, I am not entirely sure what the book is about. It is certainly about C++ templates and C++ inheritance. It includes a bit about variability analysis. It is less surely about design, except as design is reflected in a C++ implementation. The book would have been much stronger had the techniques and discussions been more general. The same kinds of problems occur in other languages, but the different semantics of other languages change the problems slightly and the solutions greatly. If there is any generality to “multi-paradigm” design, surely it can be discussed and illustrated in a more general context.

Ronald Thomas House

This is an intriguing book about design principles as applied to projects programmed in C++. As such, it contains elements that are more specific than is usual for texts on analysis or design. The author explains his own theories on design methodology, which are based on employing multiple paradigms (as opposed to some popular methods that are explicitly single-paradigm, commonly using the object-oriented paradigm). The book's topics include the need for many paradigms; commonality analysis; variability analysis; application domain analysis; object-oriented analysis; solution domain analysis; methods for mixing paradigms; and the use of patterns. “C++” is in the title because of the author's attraction to the capabilities of C++ as a language that is not limited to object-oriented programming styles, and, indeed, the text includes code sketches (but not complete programs) in C++. While the book is not limited to C++, it may be overlooked by some people who would find material of interest here, in particular, managers who might feel disposed to delegate language issues to subordinates. The author's theories may well be of wider interest than the title of the book would indicate; he covers a wide range of topics that are relevant to (for example) programmers, analysts, designers, theoreticians, and language designers. The text does not lend itself easily to a short summary; it resembles an apprenticeship in the author's methods, and I suspect a fair evaluation of their worth could only come from trying them out in a real situation. However, I immediately noticed the author's charming practice of putting nuggets of sound advice in aphorisms that are then blended into the text without any highlighting whatso<__?__Pub Caret>ever. For example, on page 46, he writes, “I will be quick to point out that data design often does line up with good object partitioning. The point I am trying to make here is that we shouldn't presume such alignment. Rather, we should come by it honestly.” This is easy to miss, and easy to dismiss as a general motherhood statement, but its merit is revealed by the general horribleness of so many systems that pass themselves off as “object-oriented.” On page 76, buried as an entry in a table, is the statement “Debugging traps should be present for in-house development and should remain permanently in the source.” How often have we seen exactly the opposite (terrible) advice lead to the public release of products that crash with segmentation faults rather than assertion failure messages__?__ Inheritance leads to problems when “negative variability” is involved, such as when a square, which is a particular type of rectangle, loses an independent parameter (length and breadth being conflated). The author gives one of the best analyses I have seen of this kind of problem, illustrating with the case of numbers subtyping to complex, subtyping to integer. He has motivated me to study his ideas on this issue in greater depth. The wide range of issues covered makes it hard to confidently promise that the entire book is sound; in some sense, it leaves the impression of asserting rather than proving the case. All I can say is that, in the topics covered that I have investigated, I agree with the author's philosophy, and where I have not, his assertions nevertheless look plausible. I recommend that you find out for yourself. The book is, at the very least, well written and makes an enjoyable and challenging read.

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.

Please enable JavaScript to view thecomments powered by Disqus.

Recommendations