АРИФМЕТИЧНІ ОБЧИСЛЕННЯ ТА НЕБЕЗПЕЧНІСТЬ УНІВЕРСАЛЬНОГО ПОЛІМОРФІЗМУ
DOI:
https://doi.org/10.32689/maup.it.2025.3.18Ключові слова:
універсальний поліморфізм, RAISE Specification Language, аксіоматика, функція дійсного аргументуАнотація
У статті розглянуто алгебраїчний підхід до проєктування та тестування програмного забезпечення.Метою статті є розробка мовою C# двох класів: цілих та дійсних чисел, які знаходяться у відношенні наслідування. При цьому перевизначена операція ділення в кільці цілих чисел та полі дійсних чисел повинна призводити до помилок у розрахунках поліморфних функцій. І це незалежно від того, який із класів є базовим, а який – похідним. Зазначені класи будуть використовуватися для демонстрації виникнення неочевидних помилок під час обчислень у поліморфній реалізації симплекс-методу. У цій роботі розроблені класи були протестовані та застосовані для отримання очевидної помилки в результаті виконання дуже простої поліморфної функції. Усе це демонструє небезпеку універсального поліморфізму при арифметичних обчисленнях.Методи дослідження. Під час дослідження використовуються базові положення методу формальної розробки RAISE та методу проєктування за контрактом Бертрана Мейєра, які дозволяють застосовувати формальну логіку до класів, що розробляються.Наукова новизна дослідження полягає в тому, що на функціях дійсного аргументу були перевірені формальні ознаки, за допомогою яких можна передбачати появу збоїв у працюючому програмному забезпеченні. По-перше, це підтверджує корисність застосування розглянутих формальних методів проєктування програмного забезпечення. По-друге, навіть на найпростіших типах даних продемонстровано небезпечність універсального поліморфізму для арифметичних обчислень, який використовується у мові C#. Аналогічні приклади небезпеки поліморфізму гарантовано можна отримати при наслідуванні між дійсними та комплексними числами. Висновки. Алгебраїчне проєктування та тестування базується на математичних принципах, що дозволяє: уникати двозначності й неоднозначності в описі функціональності; забезпечувати точність та однозначність у формулюванні вимог до програми; виявляти й усувати помилки ще на стадії розробки.
Посилання
Наслідування – C# | Microsoft Corporation. Microsoft Learn [Текст] (рос.). URL: https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/tutorials/inheritance (дата звернення: 07.07.2025).
Поліморфізм – C# | Microsoft Corporation. Microsoft Learn [Текст]. URL: https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/object-oriented/polymorphism (дата звернення: 07.07.2025).
Піскунов О. Г. Модульне тестування програмного забезпечення: робоча програма. 2024. URL: https://drive.google.com/file/d/1RBR3ORllP-XjA5idzDBxm-kHyjPr_X5d/view.
Піскунов О. Г. Про відмінності між поняттями типу і класу. Вісник Київського університету. Комп’ютерні науки. 2015. № 3. С. 106–114. URL: https://www.researchgate.net/publication/344177979.
Піскунов О. Г., Мічуда А. М. Перевизначення додавання: небезпечне наслідування у групі цілих чисел. 2023. URL: https://www.researchgate.net/publication/366867037.
Піскунов О. Г., Рудик В. І., Петренко І. А. Арифметика Пеано: від специфікації до класу. 2022. URL: https://www.researchgate.net/publication/365979331.
Піскунов О. Г., Тупко Н. П., Петренко І. А. Алгебраїчне проєктування програмного забезпечення. Інформаційні технології та суспільство. 2024. № 5 (11). С. 50–59.
Cardelli L., Abadi M. A theory of objects. Springer, 1996. 396 p. URL: ttps://drive.google.com/open?id=1mShdblP3LnooSSfk8Osh_SAtIc54Jczu.
Cardelli L., Wegner P. On understanding types, data abstraction, and polymorphism. ACM Computing Surveys (CSUR). 1985. Vol. 17, No. 4. P. 471–523.
ECMA International. ECMA-334: C# Language Specification, 7th Edition. Technical Report ECMA-334. December 2023.
Haxthausen A. Lecture Notes on The RAISE Development Method. 1999. URL: http://www2.imm.dtu.dk/courses/02263/E20/Files/methodnotes99.pdf.
IEEE Standard for Floating-Point Arithmetic. – NY : IEEE Computer Society, 2019. 83 p. URL: https://en.wikipedia.org/wiki/IEEE_754.
Liskov B., Wing J. A behavioral notion of subtyping. ACM Transactions on Programming Languages and Systems (TOPLAS). 1994. Vol. 16, No. 6. P. 1811–1841.
Martin R.C. The Liskov Substitution Principle [Електронний ресурс] // C++ Report. March 1996. URL: https://objectmentor.com/resources/articles/lsp.pdf.
Meyer B. Object-oriented Software Construction. – 2-nd edition. Santa Barbara : ISE Inc, USA, 2000. 1284 p.
Stepanov A. A., Rose D. E. From Mathematics to Generic Programming. Upper Saddle River, NJ : Addison-Wesley/ Pearson, 2014.
The RAISE Language Group. The RAISE Specification Language. UNU/IIST, Prentice Hall Europe, Denmark, 1992. URL: https://raisetools.github.io/material/documentation/raise-language.pdf.
##submission.downloads##
Опубліковано
Як цитувати
Номер
Розділ
Ліцензія

Ця робота ліцензується відповідно до Creative Commons Attribution 4.0 International License.





