API Design for C

The design of application programming interfaces can affect the behavior, capabilities, stability, and ease of use of end-user applications. With this book, you will learn how to design a good API for large-scale long-term projects. With extensive C++ code to illustrate each concept, API Design for C++ covers all of the strategies of world-class API development. Martin Reddy draws on over fifteen years of experience in the software industry to offer in-depth discussions of interface design, documentation, testing, and the advanced topics of scripting and plug-in extensibility. Throughout, he focuses on various API styles and patterns that will allow you to produce elegant and durable libraries. The only book that teaches the strategies of C++ API development, including design, versioning, documentation, testing, scripting, and extensibility. Extensive code examples 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.

[1]  Owen Astrachan,et al.  A Computer Science Tapestry , 1996 .

[2]  G. A. Miller THE PSYCHOLOGICAL REVIEW THE MAGICAL NUMBER SEVEN, PLUS OR MINUS TWO: SOME LIMITS ON OUR CAPACITY FOR PROCESSING INFORMATION 1 , 1956 .

[3]  Alain Abran,et al.  The Guide to the Software Engineering Body of Knowledge , 1999, IEEE Softw..

[4]  Stephen J. Mellor,et al.  Executable UML - A Foundation for Model-Driven Architecture , 2002, Addison Wesley object technology series.

[5]  Joseph W. Yoder,et al.  Big Ball of Mud , 1997 .

[6]  Scott Meyers,et al.  More Effective C++: 35 New Ways to Improve Your Programs and Designs , 1995 .

[7]  Andrei Alexandrescu,et al.  Modern C++ design: generic programming and design patterns applied , 2001 .

[8]  Barbara Liskov,et al.  Keynote address - data abstraction and hierarchy , 1988, OOPSLA '87.

[9]  Ken Arnold Programmers Are People, too , 2005, ACM Queue.

[10]  Gerard Meszaros,et al.  Agile regression testing using record & playback , 2003, OOPSLA '03.

[11]  Evans,et al.  Domain-driven design , 2003 .

[12]  Sae Young Jeong,et al.  Improving Documentation for eSOA APIs through User Studies , 2009, IS-EUD.

[13]  Thor Alexander Massively Multiplayer Game Development , 2004 .

[14]  Ward Cunningham,et al.  The WyCash portfolio management system , 1992, OOPSLA '92.

[15]  Herb Sutter,et al.  C++ coding standards , 2004 .

[16]  Kent L. Beck,et al.  Test-driven Development - by example , 2002, The Addison-Wesley signature series.

[17]  簡聰富,et al.  物件導向軟體之架構(Object-Oriented Software Construction)探討 , 1989 .

[18]  Robert C. Martin Agile Software Development, Principles, Patterns, and Practices , 2002 .

[19]  Brad A. Myers,et al.  The implications of method placement on API learnability , 2008, SIGSOFT '08/FSE-16.

[20]  Mike Cohn,et al.  User Stories Applied: For Agile Software Development , 2004 .

[21]  Alistair Cockburn,et al.  Writing Effective Use Cases , 2000 .

[22]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[23]  D. L. Parnas,et al.  On the criteria to be used in decomposing systems into modules , 1972, Software Pioneers.

[24]  Dave Shreiner OpenGL Reference Manual: The Official Reference Document to OpenGL, Version 1.2 , 1999 .

[25]  Barbara Liskov,et al.  Data Abstraction and Hierarchy , 1987 .

[26]  Dave Astels,et al.  Test Driven Development: A Practical Guide , 2003 .

[27]  Yangli Hector Yee,et al.  A perceptual metric for production testing , 2004, SIGGRAPH '04.

[28]  Eric S. Raymond,et al.  The Art of Unix Programming , 2003 .

[29]  C. A. R. Hoare,et al.  An axiomatic basis for computer programming , 1969, CACM.

[30]  Scott Meyers,et al.  C++ and the Perils of Double-Checked Locking ∗ , 2004 .

[31]  Martin P. Robillard,et al.  What Makes APIs Hard to Learn? Answers from Developers , 2009, IEEE Software.

[32]  Martin Fowler,et al.  Refactoring - Improving the Design of Existing Code , 1999, Addison Wesley object technology series.

[33]  Brad A. Myers,et al.  Improving API documentation using API usage information , 2009, 2009 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC).

[34]  David Lorge Parnas,et al.  Review of David L. Parnas' "Designing Software for Ease of Extension and Contraction" , 2004 .

[35]  Ivar Jacobson,et al.  Unified Modeling Language User Guide, The (2nd Edition) (Addison-Wesley Object Technology Series) , 2005 .

[36]  Benjamin C. Pierce,et al.  Types and programming languages: the next generation , 2003, 18th Annual IEEE Symposium of Logic in Computer Science, 2003. Proceedings..

[37]  Nicolai M. Josuttis The C++ Standard Library: A Tutorial and Reference , 2012 .

[38]  Steve McConnell,et al.  Code complete - a practical handbook of software construction, 2nd Edition , 1993 .

[39]  Mark R. Headington Removing implementation details from C++ class declarations , 1995, SIGCSE.

[40]  Michael C. Feathers Working Effectively with Legacy Code , 2004, XP/Agile Universe.

[41]  Karl J. Lieberherr,et al.  Assuring good style for object-oriented programs , 1989, IEEE Software.

[42]  Vijay K. Vaishnavi,et al.  An empirical study of the effects of modularity on program modifiability , 1986 .

[43]  David Lorge Parnas,et al.  Software aging , 1994, Proceedings of 16th International Conference on Software Engineering.

[44]  Glenford J. Myers,et al.  Structured Design , 1974, IBM Syst. J..

[45]  Scott Meyers,et al.  Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition) , 1991 .

[46]  Kent Beck Implementation Patterns , 2007 .

[47]  Jaroslav Tulach Practical API Design: Confessions of a Java Framework Architect , 2008 .

[48]  Steve Freeman,et al.  Endo-testing: unit testing with mock objects , 2001 .

[49]  James Milne Neighbors,et al.  Software construction using components , 1980 .

[50]  P. Kidwell,et al.  The mythical man-month: Essays on software engineering , 1996, IEEE Annals of the History of Computing.

[51]  Mark. Deloura,et al.  Game Programming Gems , 2000 .

[52]  Alan Snyder Encapsulation and inheritance in object-oriented programming languages , 1986, OOPSLA 1986.

[53]  Richard N. Taylor,et al.  A Classification and Comparison Framework for Software Architecture Description Languages , 2000, IEEE Trans. Software Eng..

[54]  Roland Faber,et al.  Architects as Service Providers , 2010, IEEE Software.

[55]  Donald E. Knuth,et al.  Structured Programming with go to Statements , 1974, CSUR.

[56]  James O. Coplien,et al.  Curiously recurring template patterns , 1995 .

[57]  Herb Sutter Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions , 1999 .

[58]  Stephen J. Mellor,et al.  Object Oriented Systems Analysis: Modeling the World in Data , 1988 .

[59]  Tao Xie,et al.  Inferring Resource Specifications from Natural Language API Documentation , 2009, 2009 IEEE/ACM International Conference on Automated Software Engineering.

[60]  John Stuart Lakos,et al.  Large-Scale C++ Software Design , 1996 .

[61]  Scott Meyers The Most Important Design Guideline? , 2004, IEEE Softw..

[62]  Ivar Jacobson,et al.  Object-oriented software engineering - a use case driven approach , 1993, TOOLS.

[63]  Michi Henning API: Design Matters , 2007, ACM Queue.

[64]  Diomidis Spinellis Code Documentation , 2010, IEEE Software.