До питання створення статичного патерну проєктування для подвійної диспетчеризації модельних сигнатур
DOI:
https://doi.org/10.18523/2617-3808.2021.4.64-71Ключові слова:
С , об’єктно-орієнтоване програмування, патерн (зразок) проєктування, подвійна диспетчеризація (мультиметод), віртуальна функція, поліморфізм, узагальнене програмуванняАнотація
У роботі досліджено можливість уникнення застосування поліморфізму при створенні мовою програмування С++ класів-моделей певної сигнатури, придатних для подвійної диспетчеризації функцій–членів цих класів стосовно варіантів їх інтерпретації. Із цією метою розглянуто створення невіртуальних ієрархій шляхом застосування методів узагальненого програмування із використанням так званої зворотної конкретизації шаблону. Це дало змогу запропонувати загальну схему патерну проєктування, що визначив архітектуру класів, придатну для статичної реалізації мультиметодів. Розглянуто приклад застосування патерну для спільної реалізації мультиметодів у різнорідних класах на прикладі комплексних чисел і рядків символів. Одержані в роботі результати знайшли застосування в курсах об’єктно-орієнтованого програмування на факультеті інформатики Києво-Могилянської академії.
Посилання
- Alexandrescu, A. (2001). Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley.
- Bublyk, V. V. (2013). Do pytannia elektronnoho navchannia prohramuvanniu. Naukovi zapysky NaUKMA, 151. Kompiuterni nauky, 112–115 [in Ukrainian].
- Gamma, E., Helm, R., Johnson, R., & Vlisside, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.
- Martin, R. (1996). The Dependency Inversion Principle. Retrieved from https://web.archive.org/web/20110714224327/http:// www.objectmentor.com/resources/articles/dip.pdf.
- Meyer, B. (1988). Object-Oriented Software Construction. Prentice Hall.
- Meyers, S. (2008). More Effective C++ 35 New Ways to Improve Your Programs and Designs. Addison-Wesley.
- Meyers, S. (2000). How Non-Member Functions Improve Encapsulation. Retrieved from https://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197.
- Ormrod, N. (2020). The strange details of std::string at Facebook. Retrieved from https://www.youtube.com/watch?v=kPR8h4-qZdk.
- Pirkelbauer, P., Solodkyy, Yu., & Stroustrup, B. (2007). Open Multi-Methods for C++. In Proceedings of the 6th international conference on Generative programming and component engineering (pp. 123–134). https://doi.org/10.1016/j.scico.2009.06.002
- Smith, J. (2003). Draft proposal for adding Multimethods to C++. Retrieved from http://www.open-std.org/jtc1/sc22/wg21/docs/ papers/2003/n1529.html.
- Stroustrup, B. (1994). The Design and Evolution of C++. Addison-Wesley.
- Sutter, H., & Alexandrescu, A. (2005). C++ Coding Standards: 101 Rules, Guidelines, and Best Practices. Addison-Wesley.
- Tauber, R. (2014). C++ Runtime Polymorphism without Virtual Functions. Retrieved from https://www.codeproject.com/Articles/603818/Cplusplus-Runtime-Polymorphism-without-Virtu- al-Fun.
##submission.downloads##
Опубліковано
Як цитувати
Номер
Розділ
Ліцензія
Авторське право (c) 2021 Volodymyr Boublik
Ця робота ліцензується відповідно до Creative Commons Attribution 4.0 International License.
Автори, які публікуються у цьому журналі, погоджуються з такими умовами:
а) Автори зберігають за собою авторські права на твір на умовах ліцензії CC BY 4.0 Creative Commons Attribution International License, котра дозволяє іншим особам вільно поширювати (копіювати і розповсюджувати матеріал у будь-якому вигляді чи форматі) та змінювати (міксувати, трансформувати, і брати матеріал за основу для будь-яких цілей, навіть комерційних) опублікований твір на умовах зазначення авторства.
б) Журнал дозволяє автору (авторам) зберігати авторські права без обмежень.
в) Автори мають право укладати самостійні додаткові угоди щодо поширення твору (наприклад, розміщувати роботу в електронному репозитарії), за умови збереження посилання на його першу публікацію. (Див. Політика Самоархівування)
г) Політика журналу дозволяє розміщення авторами в мережі Інтернет (наприклад, у репозитаріях) тексту статті, як до подання його до редакції, так і під час його редакційного опрацювання, оскільки це сприяє виникненню продуктивної наукової дискусії та позитивно позначається на оперативності та динаміці цитування опублікованої роботи (див. The Effect of Open Access).