API Design for C++
Autor Martin Reddyen Limba Engleză Paperback – 23 mai 2024
Suntem de părere că un punct de plecare excelent pentru a înțelege filosofia acestei lucrări este capitolul dedicat idiomului Pimpl (Pointer to Implementation). Prin acest exercițiu de design, Martin Reddy demonstrează cum izolarea codului sursă de interfața publică nu este doar o tehnică de optimizare a timpului de compilare, ci o strategie esențială pentru menținerea compatibilității binare în proiecte pe termen lung. API Design for C++ se distinge printr-o abordare extrem de pragmatică, fiind singura resursă care tratează unitar strategii precum versionarea, scripting-ul și extensibilitatea prin plug-in-uri, dincolo de simpla scriere a codului.
Structura volumului reflectă o progresie logică, de la definirea calităților unui API — cum ar fi cuplarea slabă și caracterul minim complet — până la detalii tehnice avansate de utilizare a limbajului C++. Analizând cuprinsul, observăm o acoperire exhaustivă a stilurilor de programare: de la API-uri procedurale tip C, până la cele moderne, bazate pe template-uri sau structuri de date. Cititorul care a aplicat deja principiile de arhitectură din C++ Software Design sau a explorat bunele practici din Hands-On Design Patterns with C++ va găsi aici piesele lipsă ale puzzle-ului: modul concret în care aceste tipare sunt expuse către utilizatorii externi într-un mod robust și intuitiv.
Recomandăm această lucrare pentru rigoarea cu care tratează aspectele adesea ignorate, precum gestionarea const-correctness-ului în interfețe și strategiile de depreciere (deprecation) a funcțiilor vechi. Cartea nu se rezumă la teorie, ci oferă peste 50 de ilustrații și numeroase exemple de cod care pot fi experimentate direct, facilitând tranziția de la un programator care scrie cod funcțional la un arhitect capabil să livreze biblioteci software profesionale.
Preț: 466.58 lei
Preț vechi: 507.15 lei
-8%
Carte tipărită la comandă
Livrare economică 06-20 iunie
Livrare express 09-15 mai pentru 171.17 lei
Specificații
ISBN-10: 0443222193
Pagini: 648
Dimensiuni: 191 x 235 x 33 mm
Greutate: 1.3 kg
Ediția:2. Auflage
Editura: ELSEVIER SCIENCE
Colecția Morgan Kaufmann
De ce să citești această carte
Recomandăm această carte inginerilor software și arhitecților care doresc să stăpânească arta de a scrie cod reutilizabil. Cititorul câștigă o înțelegere profundă a modului în care se construiesc interfețe care rezistă în timp, reducând costurile de mentenanță. Este un ghid esențial pentru oricine dezvoltă biblioteci, drivere sau componente software partajate în ecosistemul C++, oferind soluții concrete pentru provocări tehnice complexe.
Despre autor
Martin Reddy este un inginer software specializat în grafică la Pixar Animation Studios, unde se ocupă de tehnici de optimizare a performanței. Anterior, a lucrat la SRI International în domeniul vizualizării terenurilor la scară mare prin rețele de arie largă. Deține un doctorat în informatică, cercetarea sa vizând aplicarea modelelor de percepție vizuală în sistemele grafice în timp real. Experiența sa vastă în proiecte colaborative de mare complexitate este fundamentul tehnic pe care a fost construit manualul de față.
Descriere scurtă
The Second Edition includes all new material fully updated for the latest versions of C++, including a new chapter on concurrency and multithreading, as well as a new chapter discussing how Objective C++ and C++ code can co-exist and how a C++ API can be accessed from Swift programs. In addition, it explores often overlooked issues, both technical and non-technical, contributing to successful design decisions that produce high quality, robust, and long-lived APIs. It focuses on various API styles and patterns that will allow you to produce elegant and durable libraries. A discussion on testing strategies concentrates on automated API testing techniques rather than attempting to include end-user application testing techniques such as GUI testing, system testing, or manual testing.
- Teaches the strategies of C++ API development, including design, versioning, documentation, testing, scripting, and extensibility
- Includes extensive code examples that illustrate each concept, with fully functional examples and working source code for experimentation available online
- Covers various API styles and patterns, with a focus on practical and efficient designs for large-scale, long-term projects
- Includes updated URLs and ensures all code examples continue to work with modern compilers and supporting tools
Cuprins
2. Qualities Model the Problem Domain Hide Implementation Details Minimally Complete Easy to Use Loosely coupled Stable, Documented, and Tested
3. Patterns Pimpl Idiom Singleton Factory Methods API Wrapping Patterns Observer Pattern
4. Design A Case for Good Design Gathering Functional Requirements Creating Use Cases Elements of API Design Architecture Design Class Design Function Design
5. Styles Flat C APIs Object-Oriented C++ APIs Template-Based APIs Data-Driven APIs
6. C++ Usage Namespaces Constructors and Assignment Const Correctness Templates Operator Overloading Function Parameters Avoid #define for Constants Avoid Using Friends Exporting Symbols Coding Conventions
7. C++ Revisions Which C++ Revision to Use C++11 API Features Smart Pointers Explicit Member Functions Explicit Overrides and Final Enum Classes Function Objects Tuples Hash Tables Constant Expressions Null pointer constant Type aliases with using Unicode String Literals C++14 API Features The deprecated Attribute More Relaxed Const Expressions Binary Literals and Digit Separators C++17 API Features Nested Namespace Definitions Inline Variables Check for Header Availability Function Exception Specifications String Views Optionals Any Type Variant Container Byte Type C++20 API Features Modules Template Constraints and Concepts The Spaceship Operator The consteval Specifier Coroutines Version Header C++23 API Features Conditional Preprocessor Directives Multidimensional Subscript Operator Expected Values
8. Performance Pass Input Arguments by Const Reference Minimize #include Dependencies Declaring Constants Initialization Lists Memory Optimization Don't Inline Until You Need To Copy on Write Iterating over Elements Performance Analysis
9. Concurrency Thread Safety Avoiding Global Data Returning Data by Value The Use of static Initialization of Data Mutex Locking for Data Access Using Async Functions Promises and Futures Producer Consumer API
10. Versioning Version Numbers Software Branching Strategies Life Cycle of an API Levels of Compatibility How to Maintain Backward Compatibility API Reviews
11. Documentation Reasons to Write Documentation Types of Documentation Documentation Usability Inclusive Language Using Doxygen
12. Testing Reasons to Write Tests Types of API Testing Writing Good Tests Writing Testable Code Automated Testing Tools
13. Objective C++ and Swift Using Objective C++ within a C++ API Objective C++ wrapper for C++ API Using os_log and signposts Accessing an Objective C++ API in Swift
14. Scripting Adding Script Bindings Script Wrapping Technologies Adding Python Bindings with Boost Python Adding Ruby Bindings with SWIG
15. Extensibility Extending via Plugins Extending via Inheritance Extending via Templates