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
- Cover Page
- About This eBook
- Half Title Page
- Title Page
- Copyright Page
- Dedication Page
- Contents
- Preface
- Acknowledgments
-
0. Motivation
- 0.1 The Goal: Faster, Better, Cheaper!
- 0.2 Application vs. Library Software
- 0.3 Collaborative vs. Reusable Software
- 0.4 Hierarchically Reusable Software
- 0.5 Malleable vs. Stable Software
- 0.6 The Key Role of Physical Design
- 0.7 Physically Uniform Software: The Component
- 0.8 Quantifying Hierarchical Reuse: An Analogy
- 0.9 Software Capital
- 0.10 Growing the Investment
- 0.11 The Need for Vigilance
- 0.12 Summary
-
1. Compilers, Linkers, and Components
- 1.1 Knowledge Is Power: The Devil Is in the Details
- 1.2 Compiling and Linking C++
- 1.3 Declarations, Definitions, and Linkage
- 1.4 Header Files
- 1.5 Include Directives and Include Guards
- 1.6 From .h /.cpp Pairs to Components
- 1.7 Notation and Terminology
- 1.8 The Depends-On Relation
- 1.9 Implied Dependency
- 1.10 Level Numbers
- 1.11 Extracting Actual Dependencies
- 1.12 Summary
-
2. Packaging and Design Rules
- 2.1 The Big Picture
- 2.2 Physical Aggregation
- 2.3 Logical/Physical Coherence
- 2.4 Logical and Physical Name Cohesion
- 2.5 Component Source-Code Organization
- 2.6 Component Design Rules
- 2.7 Component-Private Classes and Subordinate Components
- 2.8 The Package
- 2.9 The Package Group
- 2.10 Naming Packages and Package Groups
- 2.11 Subpackages
- 2.12 Legacy, Open-Source, and Third-Party Software
- 2.13 Applications
- 2.14 The Hierarchical Testability Requirement
- 2.15 From Development to Deployment
- 2.16 Metadata
- 2.17 Summary
-
3. Physical Design and Factoring
- 3.1 Thinking Physically
- 3.2 Avoiding Poor Physical Modularity
- 3.3 Grouping Things Physically That Belong Together Logically
- 3.4 Avoiding Cyclic Link-Time Dependencies
- 3.5 Levelization Techniques
- 3.6 Avoiding Excessive Link-Time Dependencies
- 3.7 Lateral vs. Layered Architectures
- 3.8 Avoiding Inappropriate Link-Time Dependencies
- 3.9 Ensuring Physical Interoperability
- 3.10 Avoiding Unnecessary Compile-Time Dependencies
- 3.11 Architectural Insulation Techniques
- 3.12 Designing with Components
- 3.13 Summary
- Conclusion
- Appendix. Quick Reference
- Bibliography
- Index
- Code Snippets
Product information
- Title: Large-Scale C++ Volume I: Process and Architecture
- Author(s):
- Release date: December 2019
- Publisher(s): Addison-Wesley Professional
- ISBN: 9780133927573
You might also like
book
Software Architecture with C++
Apply business requirements to IT infrastructure and deliver a high-quality product by understanding architectures such as …
video
Complete Modern C++ (C++11/14/17)
This course provides an extensive exploration of C++. The journey starts with mastering the syntax and …
book
Advanced C and C++ Compiling
Learning how to write C/C++ code is only the first step. To be a serious programmer, …
book
C++ High Performance
Write code that scales across CPU registers, multi-core, and machine clusters About This Book Explore concurrent …