Home About News Contact
 

Large-Scale C++ Software Design

Overview

Title Large-Scale C++ Software Design
Author John Lakos
Published July 1996 by Addison-Wesley (www.aw.com)
ISBN 0-201-63362-0
Pages 896
Category software engineering
User Level intermediate to advanced
Reviewer Anthon Pang
Rating 4 / 5

Synopsis

In "Large-Scale C++ Software Design", the author, John Lakos, presents a wealth of design rules, guidelines, and principles accumulated in his many years of experience, programming in C++ and teaching object-oriented programming (OOP). The book focuses on the physical design concepts encountered in developing large systems (e.g., databases, frameworks, etc.) before delving into the corresponding logical design issues.

Table of Contents

Chapter 0: Introduction
Part I: Basics

Chapter 1: Preliminaries
Chapter 2: Ground Rules

Part II: Physical Design Concepts

Chapter 3: Components
Chapter 4: Physical Hierarchy
Chapter 5: Levelization
Chapter 6: Insulation
Chapter 7: Packages

Part III: Logical Design Issues

Chapter 8: Architecting a Component
Chapter 9: Designing a Function
Chapter 10: Implementing an Object

Appendix A: The Protocol Hierarchy
Appendix B: Implementing an ANSI C-Compatible C++ Interface
Appendix C: A Dependency Extractor/Analyzer Package
Appendix D: Quick Reference

Praises

Covers many issues that affect initial software development and maintenance efforts, such as, compile-time, cyclic dependencies, run-time performance, and readability. Excellent discussion on the physical design concept of insulation and its logical design complement, encapsulation. Also discusses the tradeoffs between competing logical and physical design goals.

Criticisms

The diagrammatic notation used is not UML -- instead, it is the author's own creation, with some similarity to Booch notation.

The author's argument to dismiss namespaces in favor of package prefixes has been challenged, since the primary reason given (at the time the book was written) no longer applies (i.e., the generally unavailability of C++ compilers which support this language feature).

Final Analysis

Useful information for even the most experienced C++ programmer. In practice, pragmatic C++ programmers should note that these guidelines and principles are not strict rules, and may not reflect current convention (e.g., naming data members) or common practice (e.g., iterator idiom).

Copyright

Copyright © 2003 Anthon Pang.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".