Large-Scale C++ Volume I: Process and Architecture

Book description

Writing reliable and maintainable C++ software is hard. Designing such software at scale adds a new set of challenges. Creating large-scale systems requires a practical understanding of logical design — beyond the theoretical concepts addressed in most popular texts. To be successful on an enterprise scale, developers must also address physical design, a dimension of software engineering that may be unfamiliar even to expert developers. Drawing on over 30 years of hands-on experience building massive, mission-critical enterprise systems, John Lakos shows how to create and grow Software Capital. This groundbreaking volume lays the foundation for projects of all sizes and demonstrates the processes, methods, techniques, and tools needed for successful real-world, large-scale development.

Up to date and with a solid engineering focus, Large-Scale C++, Volume I: Process and Architecture, demonstrates fundamental design concepts with concrete examples. Professional developers of all experience levels will gain insights that transform their approach to design and development by understanding how to

  • Raise productivity by leveraging differences between infrastructure and application development

  • Achieve exponential productivity gains through feedback and hierarchical reuse

  • Embrace the component’s role as the fundamental unit of both logical and physical design

  • Analyze how fundamental properties of compiling and linking affect component design

  • Discover effective partitioning of logical content in appropriately sized physical aggregates

  • Internalize the important differences among sufficient, complete, minimal, and primitive software

  • Deliver solutions that simultaneously optimize encapsulation, stability, and performance

  • Exploit the nine established levelization techniques to avoid cyclic physical dependencies

  • Use lateral designs judiciously to avoid the “heaviness” of conventional layered architectures

  • Employ appropriate architectural insulation techniques for eliminating compile-time coupling

  • Master the multidimensional process of designing large systems using component-based methods

This is the first of John Lakos’s three authoritative volumes on developing large-scale systems using C++. This book, written for fellow software practitioners, uses familiar C++ constructs to solve real-world problems while identifying (and motivating) modern C++ alternatives. Together with the forthcoming Volume II: Design and Implementation and Volume III: Verification and Testing, Large-Scale C++ offers comprehensive guidance for all aspects of large-scale C++ software development. If you are an architect or project leader, this book will empower you to solve critically important problems right now — and serve as your go-to reference for years to come.

Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.

Table of contents

  1. Cover Page
  2. About This eBook
  3. Half Title Page
  4. Title Page
  5. Copyright Page
  6. Dedication Page
  7. Contents
  8. Preface
    1. Audience
    2. Roadmap
    3. Volume I: Process and Architecture
  9. Acknowledgments
  10. 0. Motivation
    1. 0.1 The Goal: Faster, Better, Cheaper!
    2. 0.2 Application vs. Library Software
    3. 0.3 Collaborative vs. Reusable Software
    4. 0.4 Hierarchically Reusable Software
    5. 0.5 Malleable vs. Stable Software
    6. 0.6 The Key Role of Physical Design
    7. 0.7 Physically Uniform Software: The Component
    8. 0.8 Quantifying Hierarchical Reuse: An Analogy
    9. 0.9 Software Capital
    10. 0.10 Growing the Investment
    11. 0.11 The Need for Vigilance
    12. 0.12 Summary
  11. 1. Compilers, Linkers, and Components
    1. 1.1 Knowledge Is Power: The Devil Is in the Details
    2. 1.2 Compiling and Linking C++
    3. 1.3 Declarations, Definitions, and Linkage
    4. 1.4 Header Files
    5. 1.5 Include Directives and Include Guards
    6. 1.6 From .h /.cpp Pairs to Components
    7. 1.7 Notation and Terminology
    8. 1.8 The Depends-On Relation
    9. 1.9 Implied Dependency
    10. 1.10 Level Numbers
    11. 1.11 Extracting Actual Dependencies
    12. 1.12 Summary
  12. 2. Packaging and Design Rules
    1. 2.1 The Big Picture
    2. 2.2 Physical Aggregation
    3. 2.3 Logical/Physical Coherence
    4. 2.4 Logical and Physical Name Cohesion
    5. 2.5 Component Source-Code Organization
    6. 2.6 Component Design Rules
    7. 2.7 Component-Private Classes and Subordinate Components
    8. 2.8 The Package
    9. 2.9 The Package Group
    10. 2.10 Naming Packages and Package Groups
    11. 2.11 Subpackages
    12. 2.12 Legacy, Open-Source, and Third-Party Software
    13. 2.13 Applications
    14. 2.14 The Hierarchical Testability Requirement
    15. 2.15 From Development to Deployment
    16. 2.16 Metadata
    17. 2.17 Summary
  13. 3. Physical Design and Factoring
    1. 3.1 Thinking Physically
    2. 3.2 Avoiding Poor Physical Modularity
    3. 3.3 Grouping Things Physically That Belong Together Logically
    4. 3.4 Avoiding Cyclic Link-Time Dependencies
    5. 3.5 Levelization Techniques
    6. 3.6 Avoiding Excessive Link-Time Dependencies
    7. 3.7 Lateral vs. Layered Architectures
    8. 3.8 Avoiding Inappropriate Link-Time Dependencies
    9. 3.9 Ensuring Physical Interoperability
    10. 3.10 Avoiding Unnecessary Compile-Time Dependencies
    11. 3.11 Architectural Insulation Techniques
    12. 3.12 Designing with Components
    13. 3.13 Summary
    14. Conclusion
  14. Appendix. Quick Reference
    1. 1 Definitions
    2. 2 Corollaries
    3. 3 Design Imperatives
    4. 4 Design Rules
    5. 5 Guidelines
    6. 6 Observations
  15. Bibliography
  16. Index
  17. Code Snippets

Product information

  • Title: Large-Scale C++ Volume I: Process and Architecture
  • Author(s): John Lakos
  • Release date: December 2019
  • Publisher(s): Addison-Wesley Professional
  • ISBN: 9780133927573