Class functionality and its related concepts: research and practice

Alexander Prutzkow

Abstract


A class functionality in object-oriented programming is a part of the application programming interface (API). We reveal concepts related to the class functionality. The functionality includes an abstract functionality – a set of abstract methods. The main characteristic of the functionality is its stability. The functionality of a new version must ensure backward compatibility. Version numbers are used to indicate backward compatibility or incompatibility. Backward compatibility can be source, binary, or functional. The evolution of the functionality consists of its modification or extension. In case of breaking changes, a good practice is to mark old methods as deprecated without removing. The evolution of the abstract functionality differs from the evolution of the class functionality. Adding or removing a method in the abstract functionality is backward-incompatible. Depending on the change of the functionality in subclasses, inheritance can be functionally extendible or functionally overridable. We introduce a pattern style “Abstraction Raising” to improve stability. The style consists of using more abstract items. We identified such items for a type, variable, field, class, and constructor. We demonstrate an example of using the pattern style when changing the return type. We investigate relationships between the class functionality and the considered concepts in practice. We survey scientific articles with statistical data characterizing the relationships.


Full Text:

PDF

References


Santana de Almeida E. Software Reuse and Product Line Engineering. In Handbook of Software Engineering, 2019:321–348. DOI: 10.1007/978-3-030-00262-6_8.

Mostafa S. et al. Experience Paper: A Study on Behavioral Backward Incompatibilities of Java Software Libraries. In 26th ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA), 2017:215–225. DOI: 10.1145/3092703.3092721.

Finlayson M.A. Java Libraries for Accessing the Princeton Wordnet: Comparison and Evaluation. In the 7th International Global WordNet Conference (GWC), 2014:78–85.

Lelek T., Skeet J. Software Mistakes and Tradeoffs. How to Make Good Programming Decisions. Manning, 2022.

Prutzkow A.V. Tonkosti Programmirovanija v Primerakh [Programming Subtleties in Examples]. Kurs, 2022. [in Rus].

Hersh R. What is Mathematics, Really? Oxford University Press, 1997.

Hora A., Valente M.T. et al. When Should Internal Interfaces Be Promoted to Public? In 24th ACM SIGSOFT International Symposium on the Foundations of Software Engineering (FSE), 2016:280–291.

Prutzkow A.V. Printsipy Razrabotki Programmnyh Interfejsov v Industrialnyh Informatsionno-Izmeritelnyh i Upravljajuschih Sistemah [Principles for Development of Program Interfaces in Industrial Information, Measuring, and Controlling Systems]. In Kontrol'. Diagnostika, 2021, 24(10):44–47. [in Rus]. DOI: 10.14489/td.2021.10.pp.044-047.

Ochoa L. et al. Breaking Bad? Semantic Versioning and Impact of Breaking Changes in Maven Central: An External and Differentiated Replication Study. In Empirical Software Engineering, 2022, 27(3):61.

De B. API Management: An Architect’s Guide to Developing and Managing APIs for Your Organization, 2nd ed. Apress, 2023. DOI: 10.1007/979-8-8688-0054-2.

Geewax J.J. API Design Patterns. Manning, 2021.

Medjaoui M. et al. Continuous API Management, 2nd ed. O’Reilly, 2021.

Weir L. et al. Enterprise API Management. Packt, 2019.

Zimmermann O. et al. Patterns for API Design. Addison-Wesley, 2023.

Kim M. et al. Software Evolution. In Handbook of Software Engineering, 2019:223–284. DOI: 10.1007/978-3-030-00262-6_6.

Grubb P., Takang A.A. Software Maintenance: Concepts and Practice. World Scientific, 2003.

Chapin N. et al. Types of Software Evolution and Software Maintenance. In Journal of Software Maintenance and Evolution: Research and Practice, 2001, 13(1):3–30.

Tulach J. Practical API Design: Confessions of a Java Framework Architect. Apress, 2008.

Dietrich J. et al. Broken Promises: An Empirical Study into Evolution Problems in Java Programs Caused by Library Upgrades. In Software Evolution Week – IEEE Conference on Software Maintenance, Reengineering, and Reverse Engineering (CSMR–WCRE), 2014, 1:64–73.

Stocker M., Zimmermann O. From Code Refactoring to API Refactoring: Agile Service Design and Evolution. In SummerSOC 2021, CCIS 1429, 2021:174–193. DOI: 10.1007/978-3-030-87568-8_11.

Granli W. et al. The Driving Forces of API Evolution. In IWPSE, 2015. DOI: 10.1145/2804360.2804364.

Brito A. et al. APIDiff: Detecting API Breaking Changes. In IEEE 25th International Conference on Software Analysis, Evolution, and Reengineering (SANER), 2018:507–511.

Dig D., Johnson R.E. How Do APIs Evolve? A Story of Refactoring. In Journal of Software Maintenance and Evolution, 2006, 18(2):83–107.

Sawant A.A. et al. Why are Features Deprecated? An Investigation into the Motivation behind Deprecation. In IEEE International Conference on Software Maintenance and Evolution (ICSME), 2018:13–24. DOI: 10.1109/ICSME.2018.00011.

Bloch J. Effective Java, 3rd ed. Addison-Wesley, 2018.

Hou D., Yao X. Exploring the Intent behind API Evolution: A Case Study. In 18th Working Conference on Reverse Engineering, 2011:131–140.

Schildt H. Java. The Complete Reference, 9th ed. McGraw-Hill, 2014.

Blinov I., Romanchik V.S. Java from. Chetyre Chetverti, 2020. [in Rus].

Sharan K. Beginning Java 9 Fundamentals: Arrays, Objects, Modules, JShell, and Regular Expressions. Apress, 2017. DOI: 10.1007/978-1-4842-2902-6.

Spoon A. Anti-Deprecation: Towards Complete Static Checking for API Evolution. In 2nd International Workshop on Library-Centric Software Design (LCSD), 2006:65–74.

Martin R. Agile Software Development. Principles, Patterns, and Practices. Prentice Hall, 2003.

Endres A., Rombach D. A Handbook of Software and Systems Engineering Empirical Observations, Laws, and Theories. Pearson, 2003.

Parnas D.L. On Criteria to Be Used in Decomposing Systems into Modules. In Communications of the ACM, 1972, 15(12):1053–1058.

Gamma E. et al. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.

Prutzkow A.V. Internet-Resurs dlja Razmeschenija Rezultatov Nauchnoj i Obrazovatelnoj Dejatelnosti [Internet-Resource for Scientific and Educational Work Result Publishing]. In Vestnik of the RSREU, 2018, 63:84–89. [in Rus]. DOI: 10.21667/1995-4565-2018-63-1-84-89.

McDonnell T. et al. An Empirical Study of API Stability and Adoption in the Android Ecosystem. In IEEE International Conference on Software Maintenance, 2013:70–79.

Zhou J., Walker R.J. API Deprecation: A Retrospective Analysis and Detection Method for Code Examples on the Web. In 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE), 2016:266–277.

Xavier L. et al. Historical and Impact Analysis of API Breaking Changes: A Large-Scale Study. In IEEE 24th International Conference on Software Analysis, Evolution, and Reengineering (SANER), 2017:138–147.

Raemaekers S. et al. Semantic Versioning and Impact of Breaking Changes in the Maven Repository. In Journal of Systems and Software, 2017, 129:140–158. DOI: 10.1016/j.jss.2016.04.008.

Hora A., Robbes R. et al. How do Developers React to API Evolution? A Large-Scale Empirical Study. In Software Quality Journal, 2016. DOI: 10.1007/s11219-016-9344-4.

Mastrangelo L. et al. Use at Your Own Risk: the Java Unsafe API in the Wild. In International Conference on Object-Oriented Programming, Systems, Languages, and Applications, 2015.

Reimann L., Kniesel-Wünsche G. Adaptoring: Adapter Generation to Provide an Alternative API for a Library. In International Conference on Software Analysis, Evolution, and Reengineering (SANER), 2024.

Lamothe M. et al. A Systematic Review of API Evolution Literature. 2020. DOI: 10.1145/1122445.1122456.


Refbacks

  • There are currently no refbacks.


Abava  Кибербезопасность IT Congress 2024

ISSN: 2307-8162