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 developmentAchieve exponential productivity gains through feedback and hierarchical reuseEmbrace the component’s role as the fundamental unit of both logical and physical designAnalyze how fundamental properties of compiling and linking affect component designDiscover effective partitioning of logical content in appropriately sized physical aggregatesInternalize the important differences among sufficient, complete, minimal, and primitive softwareDeliver solutions that simultaneously optimize encapsulation, stability, and performanceExploit the nine established levelization techniques to avoid cyclic physical dependenciesUse lateral designs judiciously to avoid the “heaviness” of conventional layered architecturesEmploy appropriate architectural insulation techniques for eliminating compile-time couplingMaster 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.
Les mer
Preface xviiAcknowledgments xxvChapter 0: Motivation 10.1 The Goal: Faster, Better, Cheaper! 30.2 Application vs. Library Software 50.3 Collaborative vs. Reusable Software 140.4 Hierarchically Reusable Software 200.5 Malleable vs. Stable Software 290.6 The Key Role of Physical Design 440.7 Physically Uniform Software: The Component 460.8 Quantifying Hierarchical Reuse: An Analogy 570.9 Software Capital 860.10 Growing the Investment 980.11 The Need for Vigilance 1100.12 Summary 114Chapter 1: Compilers, Linkers, and Components 1231.1 Knowledge Is Power: The Devil Is in the Details 1251.2 Compiling and Linking C++ 1291.3 Declarations, Definitions, and Linkage 1531.4 Header Files 1901.5 Include Directives and Include Guards 2011.6 From .h /.cpp Pairs to Components 2091.7 Notation and Terminology 2161.8 The Depends-On Relation 2371.9 Implied Dependency 2431.10 Level Numbers 2511.11 Extracting Actual Dependencies 2561.12 Summary 259Chapter 2: Packaging and Design Rules 2692.1 The Big Picture 2702.2 Physical Aggregation 2752.3 Logical/Physical Coherence 2942.4 Logical and Physical Name Cohesion 2972.5 Component Source-Code Organization 3332.6 Component Design Rules 3422.7 Component-Private Classes and Subordinate Components 3702.8 The Package 3842.9 The Package Group 4022.10 Naming Packages and Package Groups 4222.11 Subpackages 4272.12 Legacy, Open-Source, and Third-Party Software 4312.13 Applications 4332.14 The Hierarchical Testability Requirement 4372.15 From Development to Deployment 4592.16 Metadata 4692.17 Summary 481Chapter 3: Physical Design and Factoring 4953.1 Thinking Physically 4973.2 Avoiding Poor Physical Modularity 5173.3 Grouping Things Physically That Belong Together Logically 5553.4 Avoiding Cyclic Link-Time Dependencies 5923.5 Levelization Techniques 6023.6 Avoiding Excessive Link-Time Dependencies 7043.7 Lateral vs. Layered Architectures 7223.8 Avoiding Inappropriate Link-Time Dependencies 7393.9 Ensuring Physical Interoperability 7533.10 Avoiding Unnecessary Compile-Time Dependencies 7733.11 Architectural Insulation Techniques 7903.12 Designing with Components 8353.13 Summary 908Conclusion 923Appendix: Quick Reference 925Bibliography 933Index 941
Les mer
Presents dozens of small examples and small, relatively self-contained items designed for easy use, easy learning, and easy referenceIncludes essential new coverage of runtime dependencies and other architectural issuesFor every senior developer, architect, or project manager who works with C++ in the enterprise or other large-scale software development environments
Les mer

Produktdetaljer

ISBN
9780201717068
Publisert
2020-02-05
Utgiver
Vendor
Addison-Wesley Educational Publishers Inc
Aldersnivå
U, 05
Språk
Product language
Engelsk
Format
Product format
Heftet
Antall sider
1024

Series edited by

Biographical note

John Lakos, manager at Bloomberg, runs their BDE group, which develops fine-grained reusable C++ software using his component-based methodology and process. He also mentors engineers and team leads throughout Bloomberg’s software infrastructure department. As a voting member of the C++ Standards Committee, he has helped shape new generations of C++. He is the author of Large-Scale C++ Software Design (Addison-Wesley, 1996).