МЕТОД РОЗШИРЕННЯ МОЖЛИВОСТЕЙ ПОВТОРНОГО ВИКОРИСТАННЯ ПРОГРАМНИХ КОМПОНЕНТІВ ШЛЯХОМ РЕАЛІЗАЦІЇ TRAITS В .NET

Автор(и)

DOI:

https://doi.org/10.35546/kntu2078-4481.2025.3.2.13

Ключові слова:

метапрограмування, .NET, генерація коду, розробка програмного забезпечення, traits

Анотація

У статті розглядається метод розширення можливостей повторного використання програмних компонентів шляхом реалізації traits в .NET. Проаналізовано основні методи покращення можливостей повторного використання програмних компонентів в об’єктно-орієнтованій парадигмі програмування. Проаналізовано переваги та недоліки множинного та одиничного наслідування. Встановлено, що множинне наслідування має позитивний ефект на модульність та на можливості повторного використання компонентів, проте його використання може призвести до складнішої ієрархії класів та не завжди підтримується мовою програмування. В якості альтернативи наслідуванню розглянуто використання композиції для забезпечення повторного використання програмних компонентів. Проаналізовано концепт traits, який реалізовано у низці сучасних мов програмування в якості альтернативи множинному наслідуванню. В результаті аналізу встановлено, що traits дозволяє отримати схожий до множинного наслідування функціонал. Також проаналізовано пропозиції щодо розширення концепту за рахунок додавання можливості визначати стани, а не тільки поведінку. На основі цього розроблено модель traits для реалізації в .NET, що дозволяє визначати стани та забезпечити кращий контроль над перевантаженням членів при композиції. Оскільки композицію можна реалізувати за рахунок використання інструментів метапрограмування, то було проаналізовано відповідний інструментарій платформи .NET. У результаті аналізу визначено, що інструмент Incremental Source Generators у комбінації з Roslyn API дозволить досягти бажаного результату. Для цього запропоновано використовувати генератор коду, що буде генерувати часткові об’явлення класів, які міститимуть члени відповідного trait’а. В якості альтернативи ключовим словам запропоновано використовувати атрибути метаданих для контролю поведінки такого генератора коду. Генератор коду має спрацьовувати не лише під час компіляції, а й при змінах у вихідному коді. Такий метод дозволить повною мірою реалізувати концепт traits в .NET, що сприятиме покращенню можливостей повторного використання програмних компонентів при розробці на цій платформі.

Посилання

Albalooshi F., Mahmood A. A Comparative Study on the Effect of Multiple Inheritance Mechanism in Java, C++, and Python on Complexity and Reusability of Code. International Journal of Advanced Computer Science and Applications. 2017. Т. 8, № 6. URL: https://doi.org/10.14569/ijacsa.2017.080614 (дата звернення: 20.08.2025).

Traits: Composable Units of Behaviour / N. Schärli та ін. ECOOP 2003 – Object-Oriented Programming. Berlin, Heidelberg, 2003. С. 248–274. URL: https://doi.org/10.1007/978-3-540-45070-2_12 (дата звернення: 20.08.2025).

Cassou D., Ducasse S., Wuyts R. Traits at work: The design of a new trait-based stream library. Computer Languages, Systems & Structures. 2009. Т. 35, № 1. С. 2–20. URL: https://doi.org/10.1016/j.cl.2008.05.004 (дата звер- нення: 20.08.2025).

A new modular implementation for stateful traits / P. Tesone та ін. Science of Computer Programming. 2020. Т. 195. С. 102470. URL: https://doi.org/10.1016/j.scico.2020.102470 (дата звернення: 20.08.2025).

Incremental Roslyn Source Generators In.NET6. URL: https://www.thinktecture.com/net/roslyn-source-generators-introduction/ (дата звернення: 20.08.2025).

Saadatmand M. Towards Automating Integration Testing of.NET Applications Using Roslyn. 2017 IEEE International Conference on Software Quality, Reliability and Security Companion (QRS-C), м. Prague, Czech Republic, 25–29 лип. 2017 р. 2017. URL: https://doi.org/10.1109/qrs-c.2017.99 (дата звернення: 20.08.2025).

Weber D., Christi A. Redusharptor: A Tool to Simplify Developer-Written C# Unit Tests. International Journal of Software Engineering & Applications. 2023. Т. 14, № 5. С. 29–40. URL: https://doi.org/10.5121/ijsea.2023.14503 (дата звернення: 20.08.2025).

Immutype. URL: https://github.com/DevTeam/Immutype (дата звернення: 20.08.2025).

AutoInterface. URL: https://github.com/beakona/AutoInterface (дата звернення: 20.08.2025).

Traits: A mechanism for fine-grained reuse / S. Ducasse та ін. ACM Transactions on Programming Languages and Systems. 2006. Т. 28, № 2. С. 331–388. URL: https://doi.org/10.1145/1119479.1119483 (дата звернення: 20.08.2025).

##submission.downloads##

Опубліковано

2025-11-28