<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.3 20210610//EN" "JATS-journalpublishing1-3.dtd">
<article article-type="research-article" dtd-version="1.3" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="ru"><front><journal-meta><journal-id journal-id-type="publisher-id">uprinmatus</journal-id><journal-title-group><journal-title xml:lang="ru">Известия Юго-Западного государственного университета. Серия: Управление, вычислительная техника, информатика. Медицинское приборостроение</journal-title><trans-title-group xml:lang="en"><trans-title>Proceedings of the Southwest State University. Series: IT Management, Computer Science, Computer Engineering. Medical Equipment Engineering</trans-title></trans-title-group></journal-title-group><issn pub-type="ppub">2223-1536</issn><publisher><publisher-name>Юго-Западный государственный университет</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.21869/2223-1536-2024-14-3-223-237</article-id><article-id custom-type="elpub" pub-id-type="custom">uprinmatus-215</article-id><article-categories><subj-group subj-group-type="heading"><subject>Research Article</subject></subj-group><subj-group subj-group-type="section-heading" xml:lang="ru"><subject>МОДЕЛИРОВАНИЕ В МЕДИЦИНСКИХ И ТЕХНИЧЕСКИХ СИСТЕМАХ</subject></subj-group><subj-group subj-group-type="section-heading" xml:lang="en"><subject>MODELING IN MEDICAL AND TECHNICAL SYSTEMS</subject></subj-group></article-categories><title-group><article-title>Концептуальная модель и реализация  объектно-ориентированной системы с помощью метапрограммирования</article-title><trans-title-group xml:lang="en"><trans-title>Concept model and realization of object orientied system  with metaprogramming</trans-title></trans-title-group></title-group><contrib-group><contrib contrib-type="author" corresp="yes"><contrib-id contrib-id-type="orcid">https://orcid.org/0009-0009-8739-2695</contrib-id><name-alternatives><name name-style="eastern" xml:lang="ru"><surname>Чаплыгин</surname><given-names>А. А.</given-names></name><name name-style="western" xml:lang="en"><surname>Chaplygin</surname><given-names>A. A.</given-names></name></name-alternatives><bio xml:lang="ru"><p>Чаплыгин Александр Александрович,  кандидат технических наук, доцент кафедры программной инженерии</p><p>ул. 50 лет Октября, д. 94, г. Курск 305040</p></bio><bio xml:lang="en"><p>Aleksandr A. Chaplygin, Candidate of Sciences (Engeneering), Associate Professor  of the Department of Software Engeneering</p><p>50 Let Oktyabrya Str. 94, Kursk 305040</p></bio><email xlink:type="simple">alex_chaplygin@mail.ru</email><xref ref-type="aff" rid="aff-1"/></contrib></contrib-group><aff-alternatives id="aff-1"><aff xml:lang="ru"><institution>Юго-Западный государственный университет</institution><country>Россия</country></aff><aff xml:lang="en"><institution>Southwest State University</institution><country>Russian Federation</country></aff></aff-alternatives><pub-date pub-type="collection"><year>2024</year></pub-date><pub-date pub-type="epub"><day>15</day><month>11</month><year>2024</year></pub-date><volume>14</volume><issue>3</issue><fpage>223</fpage><lpage>237</lpage><permissions><copyright-statement>Copyright &amp;#x00A9; Чаплыгин А.А., 2024</copyright-statement><copyright-year>2024</copyright-year><copyright-holder xml:lang="ru">Чаплыгин А.А.</copyright-holder><copyright-holder xml:lang="en">Chaplygin A.A.</copyright-holder><license xml:lang="ru" license-type="creative-commons-attribution" xlink:href="https://creativecommons.org/licenses/by/4.0/" xlink:type="simple"><license-p>Данная работа распространяется под лицензией Creative Commons Attribution 4.0.</license-p></license><license xml:lang="en" license-type="creative-commons-attribution" xlink:href="https://creativecommons.org/licenses/by/4.0/" xlink:type="simple"><license-p>This work is licensed under a Creative Commons Attribution 4.0 License.</license-p></license></permissions><self-uri xlink:href="https://uprinmatus.elpub.ru/jour/article/view/215">https://uprinmatus.elpub.ru/jour/article/view/215</self-uri><abstract><p>Цель исследований заключается в разработке концептуальной модели объектно-ориентированной системы и ее реализации с помощью функционального языка с поддержкой метапрограммирования. </p><sec><title>Методы</title><p>Методы. Была разработана концептуальная модель объектно-ориентированной системы на основе динамической объектной системы с передачей сообщений и динамической диспетчеризацией. Разработанная объектно ориентированная система включает в себя функции создания и удаления классов, создания и удаления объектов-экземпляров класса, функции для работы со свойствами объектов, функции добавления методов в класс и передачи сообщений. Также возможно наследование, когда дочерний класс будет иметь свойства родительского класса и свои собственные свойства. </p></sec><sec><title>Результаты</title><p>Результаты. Объектно-ориентированная система была реализована с помощью набора макросов и вспомогательных функций. В качестве базовой структуры данных выступила хеш-таблица с возможностями доступа по ключу, которая также была реализована с помощью макросов. При создании класса автоматически генерируется конструктор экземпляра с установкой начальных значений полей объекта. Наследование реализовано как включение полей родительского класса в дочерний объект. Полиморфизм реализован как динамическая диспетчеризация: при обработке сообщения происходит поиск метода-обработчика. Полученная объектно-ориентированная система вместе с модулем хеш-таблиц занимает 97 строк. </p></sec><sec><title>Заключение</title><p>Заключение. В результате работы была создана и реализована концептуальная модель объектно-ориентированной системы, включающей в себя основные функции объектно-ориентированной парадигмы программирования. Было показано, что с помощью макросов можно создать компактную объектно-ориентированную систему, при этом в интерпретатор функционального языка не нужно добавлять никаких новых функций или возможностей. </p></sec></abstract><trans-abstract xml:lang="en"><p>The purpose of the research is to develop a conceptual model of an object oriented system and implement it using a functional language with metaprogramming support. </p><sec><title>Methods</title><p>Methods. A conceptual model of an object oriented system was developed based on a dynamic object system with message passing and dynamic dispatch. The developed object oriented system includes functions for creating and deleting classes, creating and deleting object instances of a class, functions for working with object properties, functions for adding methods to a class and passing messages. Inheritance is also possible, when a child class will have the properties of the parent class and its own properties. </p></sec><sec><title>Results</title><p>Results. The object oriented system was implemented using a set of macros and helper functions. The basic data structure was a hash table with key access capabilities, which was also implemented using macros. When a class is created, an instance constructor is automatically generated, setting the initial values of the object’s fields. Inheritance is implemented as the inclusion of fields of a parent class in a child object. Polymorphism is implemented as dynamic dispatch: when processing a message, a handler method is searched. The resulting object oriented system, together with the hash table module, occupies 97 lines. </p></sec><sec><title>Conclusion</title><p>Conclusion. As a result of the work, a conceptual model of an object oriented system was created and implemented, which includes the main functions of the object oriented programming paradigm. It has been shown that macros can be used to create a compact object oriented system without the need to add any new functions or capabilities to the functional language interpreter.  </p></sec></trans-abstract><kwd-group xml:lang="ru"><kwd>объектно ориентированное программирование</kwd><kwd>концептуальная модель</kwd><kwd>интерпретатор</kwd><kwd>Common Lisp</kwd><kwd>макрос</kwd></kwd-group><kwd-group xml:lang="en"><kwd>object oriented programming</kwd><kwd>conceptual model</kwd><kwd>interpreter</kwd><kwd>Common Lisp</kwd><kwd>macro</kwd></kwd-group></article-meta></front><back><ref-list><title>References</title><ref id="cit1"><label>1</label><citation-alternatives><mixed-citation xml:lang="ru">Bloch J. Effective Java: Programming Language Guide. URL: https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/Java/Addison%20Wesley%20-%20Effective%20Java%20Programming%20Language%20Guide.pdf (дата обращения: 11.06.2024).</mixed-citation><mixed-citation xml:lang="en">Bloch J. Effective Java: Programming Language Guide. Available at: https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/Java/Addison%20Wesley%20-%20Effective%20Java%20Programming%20Language%20Guide.pdf (accessed 11.06.2024).</mixed-citation></citation-alternatives></ref><ref id="cit2"><label>2</label><citation-alternatives><mixed-citation xml:lang="ru">Цыбулько Д. М. Сравнение подходов проблемно ориентированного и объектно ориентированного программирования // Математические методы в технике и технологиях – ММТТ. 2015. № 7(77). С. 278–280. EDN WFEKVH</mixed-citation><mixed-citation xml:lang="en">Tsybulko D.M. Comparison of problem-oriented and object-oriented programming approaches. Matematicheskie metody v tekhnike i tekhnologiyakh – MMTT = Mathematical Methods in Engineering and Technology – MMTT. 2015;(7):278–280. (In Russ.) EDN WFEKVH</mixed-citation></citation-alternatives></ref><ref id="cit3"><label>3</label><citation-alternatives><mixed-citation xml:lang="ru">Шарыкин Р. Е. Методология разработки программного обеспечения с использованием модели распределенных объектно ориентированных стохастических гибридных систем // Информатика. 2022. Т. 19, № 1. С. 88–95. https://doi.org/10.37661/1816-03012022-19-1-88-95. EDN DIHJAV</mixed-citation><mixed-citation xml:lang="en">Sharykin R.E. Methodology of software development using a model of distributed object-oriented stochastic hybrid systems. Informatika = Informatics. 2022;19(1):88–95. https://doi.org/10.37661/1816-0301-2022-19-1-88-95. (In Russ.) EDN DIHJAV</mixed-citation></citation-alternatives></ref><ref id="cit4"><label>4</label><citation-alternatives><mixed-citation xml:lang="ru">Abelson H., Sussman G. J., Sussman J. Structure and Interpretation of Computer Programs. Cambridge, Massatchusetts: The MIT Press, 2004. 268 р.</mixed-citation><mixed-citation xml:lang="en">Abelson H., Sussman G.J., Sussman J. Structure and Interpretation of Computer Programs. Cambridge, Massatchusetts: The MIT Press; 2004. 268 p.</mixed-citation></citation-alternatives></ref><ref id="cit5"><label>5</label><citation-alternatives><mixed-citation xml:lang="ru">Domkin V. Programming Algorithms in Lisp. Berkeley: Apress, Ins., 2021. 377 p.</mixed-citation><mixed-citation xml:lang="en">Domkin V. Programming Algorithms in Lisp. Berkeley: Apress, Ins.; 2021. 377 p.</mixed-citation></citation-alternatives></ref><ref id="cit6"><label>6</label><citation-alternatives><mixed-citation xml:lang="ru">Вторников А. Lisp: маленький гигант // Системный администратор. 2016. № 6(163). С. 64–69. EDN VZGXVD</mixed-citation><mixed-citation xml:lang="en">Tuesdays A. Lisp: The Little Giant. Sistemnyi administrator = System Administrator. 2016;(6):64–69. (In Russ.) EDN VZGXVD</mixed-citation></citation-alternatives></ref><ref id="cit7"><label>7</label><citation-alternatives><mixed-citation xml:lang="ru">Ершов А. П., Покровский С. Б. Эволюция языков программирования // Проблемы информатики. 2017. № 2(35). С. 70–79. EDN ZOLFPJ</mixed-citation><mixed-citation xml:lang="en">Ershov A.P., Pokrovsky S.B. Evolution of programming languages. Problemy informatiki = Problems of Computer Science. 2017;2(35):70–79. (In Russ.) EDN ZOLFPJ</mixed-citation></citation-alternatives></ref><ref id="cit8"><label>8</label><citation-alternatives><mixed-citation xml:lang="ru">Романов С. С. Ключевые понятия и особенности объектно ориентированного программирования // Таврический научный обозреватель. 2016. № 12-2(17). С. 141–146. EDN YFXCCN</mixed-citation><mixed-citation xml:lang="en">Romanov S.S. Key concepts and features of object-oriented programming. Tavricheskii nauchnyi obozrevatel’ = The Tauride Scientific Observer. 2016;(12):141–146. (In Russ.) EDN YFXCCN</mixed-citation></citation-alternatives></ref><ref id="cit9"><label>9</label><citation-alternatives><mixed-citation xml:lang="ru">Паттерны объектно ориентированного проектирования / Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. СПб.: Питер, 2024. 448 с.</mixed-citation><mixed-citation xml:lang="en">Gamma E., Helm R., Johnson R., Vlissides J. Patterns of object oriented design. St. Petersburg: Piter; 2024. 448 p. (In Russ.)</mixed-citation></citation-alternatives></ref><ref id="cit10"><label>10</label><citation-alternatives><mixed-citation xml:lang="ru">Nystrom R. Crafting interpreters. Moscow: Nobel Press, 2024. 640 p.</mixed-citation><mixed-citation xml:lang="en">Nystrom R. Crafting interpreters. Moscow: Nobel Press; 2024. 640 p.</mixed-citation></citation-alternatives></ref><ref id="cit11"><label>11</label><citation-alternatives><mixed-citation xml:lang="ru">How (and why) developers use the dynamic features of programming languages: the case of smalltalk / O. Callaú, R. Robbes, É. Tanter, D. Röthlisberger // Empirical Software Engineering. 2013. Vol. 18, N 6. P. 1156–1194. https://doi.org/10.1007/s10664-012-9203-2. EDN YOGDYK</mixed-citation><mixed-citation xml:lang="en">Callaú O., Robbes R., Tanter É., Röthlisberger D. Chow (and why) developers use the dynamic features of programming languages: the case of smalltalk. Empirical Software Engineering. 2013;18(6):1156–1194. https://doi.org/10.1007/s10664-012-9203-2. EDN YOGDYK</mixed-citation></citation-alternatives></ref><ref id="cit12"><label>12</label><citation-alternatives><mixed-citation xml:lang="ru">Пол Г. ANSI Common LISP. СПб.: Символ-Плюс, 2020. 448 с.</mixed-citation><mixed-citation xml:lang="en">Paul G. ANSI Common LISP. St. Petersburg: Simvol-Plyus; 2020. 448 p. (In Russ.)</mixed-citation></citation-alternatives></ref><ref id="cit13"><label>13</label><citation-alternatives><mixed-citation xml:lang="ru">Малов А. В., Родионов С. В. Реализация упрощенного алгоритма Байеса в среде функционального программирования COMMON LISP // Известия СПбГЭТУ «ЛЭТИ». 2015. № 2. С. 32–37.</mixed-citation><mixed-citation xml:lang="en">Malov A.V., Rodionov S.V. Implementation of the simplified Bayes algorithm in the COMMON LISP functional programming environment. Izvestiya SPbSETU "LETI" = Proceedings of Saint Petersburg Electrotechnical University. 2015;(2):32–37. (In Russ.)</mixed-citation></citation-alternatives></ref><ref id="cit14"><label>14</label><citation-alternatives><mixed-citation xml:lang="ru">Сайбель П. Практическое использование Common Lisp. М.: ДМК Пресс, 2017. 488 с.</mixed-citation><mixed-citation xml:lang="en">Saibel P. Practical use of Common Lisp. Moscow: DMK Press; 2017. 488 p. (In Russ.)</mixed-citation></citation-alternatives></ref><ref id="cit15"><label>15</label><citation-alternatives><mixed-citation xml:lang="ru">Кочан С. Программирование на Objective-C. М.: ЭКОМ Паблишерз, 2014. 550 с.</mixed-citation><mixed-citation xml:lang="en">Kochan S. Programming in Objective-C. Moscow: ECOM Publishers; 2014. 550 p. (In Russ.)</mixed-citation></citation-alternatives></ref><ref id="cit16"><label>16</label><citation-alternatives><mixed-citation xml:lang="ru">Страуструп Б. Язык программирования C++. Краткий курс. М.: Вильямс, 2019. 320 с.</mixed-citation><mixed-citation xml:lang="en">Stroustrup B. C++ programming language. Short course. Moscow: Vil’yams; 2019. 320 p.</mixed-citation></citation-alternatives></ref><ref id="cit17"><label>17</label><citation-alternatives><mixed-citation xml:lang="ru">Кувардин М. В. Сравнение структур данных связной список и массив структур с использованием примеров на языке программирования C++ // Научные исследования XXI века. 2021. № 2(10). С. 69–72. EDN TVPPBJ</mixed-citation><mixed-citation xml:lang="en">Kuvardin M.V. Comparison of data structures a linked list and an array of structures using examples in the C++ programming language. Nauchnye issledovaniya XXI veka = Scientific Research of the XXI Century. 2021;(2):69–72. (In Russ.) EDN TVPPBJ</mixed-citation></citation-alternatives></ref><ref id="cit18"><label>18</label><citation-alternatives><mixed-citation xml:lang="ru">Стивен Ф. Лотт, Дасти Ф. Объектно ориентированный Python. 4-е изд. СПб.: Питер, 2024. 704 с.</mixed-citation><mixed-citation xml:lang="en">Stephen F. Lott, Dusty F. Object Oriented Python. 4th ed. Moscow: Piter; 2024. 704 p. (In Russ.)</mixed-citation></citation-alternatives></ref><ref id="cit19"><label>19</label><citation-alternatives><mixed-citation xml:lang="ru">Шилд Г. Java. Полное руководство. 12-е изд. М.: Диалектика-Вильямс, 2023. 1344 с.</mixed-citation><mixed-citation xml:lang="en">Shield G. Java. A complete guide. 12th ed. Moscow: Dialectics-Williams; 2023. 1344 p. (In Russ.)</mixed-citation></citation-alternatives></ref><ref id="cit20"><label>20</label><citation-alternatives><mixed-citation xml:lang="ru">Чаплыгин А. А. Моделирование интерпретатора функционального языка программирования с возможностями метапрограммирования // Известия Юго-Западного государственного университета. Серия: Управление, вычислительная техника, информатика. Медицинское приборостроение. 2024. № 14(2). С. 181–193. https://doi.org/10.21869/2223-1536-2024-14-2-181-193</mixed-citation><mixed-citation xml:lang="en">Chaplygin A.A. Modeling of a functional programming language interpreter with metaprogramming capabilities. Izvestiya Yugo-Zapadnogo gosudarstvennogo universiteta. Seriya: Upravlenie, vychislitel’naya tekhnika, informatika. Meditsinskoe priborostroenie = Proceedings of the Southwest State University. Series: Control, Computer Engineering, Information Science. Medical Instruments Engineering. 2024;14(2):181–193. (In Russ.) https://doi.org/ 10.21869/2223-1536-2024-14-2-181-193</mixed-citation></citation-alternatives></ref></ref-list><fn-group><fn fn-type="conflict"><p>The authors declare that there are no conflicts of interest present.</p></fn></fn-group></back></article>
