Структура и генерация классов системы хранения электрогастроэнтерограмм
Результаты генерации исходного кода классов системы хранения электрогастроэнтерограмм. Описание методик и программных инструментов. Использование "умных" указателей std::shared_ptr в публичных классах за счёт стандартных конструкторов и операторов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 02.03.2020 |
Размер файла | 16,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru//
Структура и генерация классов системы хранения электрогастроэнтерограмм
А.В. Рудалёв
Аннотация
В работе представлены результаты генерации исходного кода классов системы хранения электрогастроэнтерограмм, описаны применяемые методики и программные инструменты, поставлены задачи по дальнейшему развитию разрабатываемой программной системы.
Ключевые слова: автоматическое программирование, автоматизация научных исследований, система хранения, электрогастроэнтерография
STRUCTURE AND GENERATION OF CLASSES STORAGE SYSTEM ELECTROGASTROGRAM
Rudalev A.V.
Northern (Arctic) Federal University named by M.V. Lomonosov, Russia, Arkhangelsk, Severnaya Dvina Emb. 17, 163002
Abstract. In this paper we describe the results of the generation of source code for elektrogastroenterogramm's storage system. Describes applied methods and software tools. Tasked with the further development of the software system.
Key words: Automatic programming, research automation, storage system, electrogastroenterography, electrogastrography.
Вступление
В лаборатории измерительных систем и цифровой обработки сигналов института математики, информационных и космических технологий САФУ имени М.В. Ломоносова, одной из основных решаемых задач являются исследования сигналов электрогастроэнтерографии (ЭГЭГ) [2,4]. На данный момент благодаря сотрудничеству с Дальневосточным медицинским университетом накоплена база более чем из 1000 записей. Большая часть входных данных представлена в виде базы данных «Гастраскан ГЭМ». Имеются данные, полученные и с другого оборудования. Стоит задача хранения обработанных вручную и программно сигналов (фильтрация, удаление артефактов).
Основными языками программирования в лаборатории являются C++, Python, R, что в комбинации с такими пакетами как IPython, ROOT и Qt, позволяет проводить математические исследования и создавать специализированное прикладное программное обеспечение [1,3]. В некоторых ситуациях вычисления переносятся на высокопроизводительный кластер САФУ.
Большой объём данных и различные программные инструменты накладывают определённые требования к организации системы хранения данных. Структура классов должна быть либо универсальной, либо легко изменяемой. Такие стандарты как DICOM и HL7 предлагают универсальные методы передачи информации. Но, с точки зрения конкретной области применения, становятся громоздкими и требуют организации дополнительных уровней абстракции.
На первых этапах работы в лаборатории была принята упрощённая модель представления данных SMEP [1], без детализации хранимой информации по полям, что позволило сконцентрироваться на методах обработки сигналов, и иметь способ хранения объектов транслируемых во внешние представления.
В данной работе описываются результаты по дальнейшей разработке системы хранения и представления данных ЭГЭГ в рамках лаборатории.
Модель представления классов
Для работы с одним и тем же набором данных из разных языков программирования можно либо унифицировать и закрепить способ хранения данных (например, чётко зафиксировать структуру реляционной базы данных), либо создать библиотеку классов на одном из языков программирования и решить вопрос использования её из других языков программирования.
Был выбран вариант реализации классов на языке программирования C++ с последующей трансляцией на другие языки программирования инструментом SWIG. Для скрытия способа внутреннего хранения и обработки данных был применён шаблон проектирования PIMPL (приватная реализация класса). Большая часть классов генерируется по простым Json-описаниям. Это позволяет не только более гибко экспериментировать со способами хранения информации, но и значительно упростить механизмы связывания объектов C++ с объектами на других языках программирования. В рамках шаблона PIMPL предлагается, что реализация класса разбивается на два класса: публичный и приватный. В публичном классе хранится ссылка на приватный и определены функции-обёртки над функциями приватного класса.
Использование «умных» указателей std::shared_ptr в публичных классах позволило за счёт стандартных конструкторов и операторов присваивания организовать модель хранения данных класса по ссылке, что положительно сказалось на потреблении памяти и упростило процесс работы с классами. Негативным моментом использования шаблона PIMPL является необходимость дублирования методов в приватных и публичных классах и, как следствие, потеря производительности на двойных вызовах этих методов.
В рамках упрощённой модели данных SMEP [1] предполагается наличие четырёх основных классов: сигнал, сеанс измерения, обследование и пациент. При дальнейшей детализации модели вводятся: каналы данных, оборудование, тип обследования, группы пациентов, исследования, фильтры данных, обработанные сигналы и т.д. Что является предметом исследования в дальнейшей работе.
Наличие связи между основными объектами модели данных обуславливает появление дополнительного класса «Хранилище». В его рамках будет происходить манипуляция объектами и организация связей между ними. С другой стороны, для пользователя библиотекой важна простота интерфейса. Так, например, логично выглядит, что если надо обработать сигналы текущего сеанса измерения, то надо вызвать метод getSignals(). Для решения этой задачи предлагается получать объекты в явном и неявном виде только из «Хранилища», а каждый объект должен хранить ссылку на него. В качестве глобального идентификатора объекта был выбран UUID.
генерация класс электрогастроэнтерограмма
Генерация классов системы хранения
Все рассматриваемые классы содержат поля из небольшого набора типов, которые можно разделить на три класса: базовые (целые и действительные числа, строки, дата и время), массивы (например, массив действительных чисел, определяющий данные сигнала) и дополнительные (например, пол пациента). А также, содержать связи между объектами разных классов. Это позволяет свести описание классов хранимых объектов в формате JSON к виду: {'name': "Patient", 'fields': [ {'name': "FullName", 'type': "TEXT"}, {'name': "Sex", 'type': "PATIENT_SEX"} ], 'link_included' : [], 'link_contains' : [ "Examination" ]}. А по этому описанию, используя шаблоны, генерировать публичные и приватные классы, а также методы обработки в «Хранилище».
В качестве инструмента генерации по шаблонам был выбран модуль Mako для языка программирования Python. При реализации были зафиксированы следующие моменты:
строковые типы во внешнем ABI представлены как std::string в кодировке UTF-8;
множества объектов представлены как std::vector;
идентификатор объекта: UUID;
массивы чисел загружаются в память объектов из «Хранилища» только в момент первого использования;
внутри ссылки используют std::shared_ptr и std::weak_ptr;
внешнее ABI не использует ссылок (публичные объекты сами являются «активными» ссылками);
из публичной реализации «Хранилища» можно получить любой объект по его UUID;
объекты предоставляют методы для получения связанных с ним объектов;
текстовая сериализация объектов реализована в отдельном классе Json;
для каждого хранимого класса создаётся специальный кэш-класс, позволяющий кэшировать объекты на стороне «Хранилища»;
приватный класс «Хранилища» является виртуальным и реализуется в специализированных потомках;
конструктор базового класса «Хранилище» скрыт, а создание его объекта возможно в классах-потомках (например, StrogeSql или StorageMemory).
Для хранения объектов реализовано два вида классов:
StorageMemory -- для создания «Хранилища» в оперативной памяти,
StorageSql -- для хранения объектов в реляционных СУБД через библиотеку SOCI.
В планах реализовать дополнительные классы для шифрованной передачи данных по компьютерной сети и http-хранилище.
Генерация всех классов по упрощённой модели в формате Json позволяет легко организовать процесс разработки детальной модели системы хранения. А код обработки полей разных типов легко унифицируется к словарной подстановке. Исключением являются только массивы, для которых была выбрана более сложная модель хранения (с загрузкой по требованию).
Qt интерфейсы
В лаборатории в качестве основной библиотеки создания графических приложений была выбрана Qt. В состав этой библиотеки входят классы для работы с различными базами данных и графические элементы отображения и обработки таблиц. Большинство этих классов построено на наследовании и использовании базового класса QAbstractItemModel и его специализации QAbstractTableModel, что позволяет получить большой набор классов для отображения и обработки данных путём наследования от этих классов. В качестве базового класса для табличного представления объектов в «Хранилище» был выбран QAbstractTableModel. Для каждого класса хранимых объектов генерируется Qt-модель данных, в которой определены методы отображения, изменения, добавления и удаления данных.
Использование кэширования данных в «Хранилище» позволяет существенно сократить количество SQL-запросов к базе данных, с учётом частых вызовов функций получения данных в приложениях, построенных на основе моделей-данных Qt.
Для упрощения работы с массивами чисел была введена дополнительная роль EGEGWBQT_BLOB_ROLE для методов data() и setData(), в рамках которых происходит работа с самими массивами. Тогда как в стандартных ролях эти поля доступны только на чтение и сигнализируют, что содержат BLOB-данные. Такой подход позволяет на первых этапах использовать QSortFilterProxyModel для сортировки и фильтрации данных таблиц без излишнего использования оперативной памяти на хранение массивов чисел.
В рамкам последующей работы запланирована реализация генерации делегатов и форм для типовых случаев форматированного представления данных хранимых объектов.
Результаты. В рамках разработки системы хранения электрогастроэнтерограмм на базе лаборатории измерительных систем и цифровой обработки сигналов института математики, информационных и космических технологий САФУ имени М.В. Ломоносова выработаны основные подходы и инструменты реализации. На базе выбранных подходов реализована система генерации исходного кода и показана работа с хранимыми объектами в разных языках программирования. Разработанная методика кодогенерации имеет потенциал к использованию не только в рамках создания системы хранения электрогастроэнтерограмм, но может использоваться и в аналогичных прикладных системах хранения связанных данных.
Литература
Попов А.И., Рудалёв А.В., Тюльпин А.А. Сервис-ориентированная информационная система для сотрудничества исследователей в области электрогастроэнтерографии: представление данных // Научные труды SWorld. -2012. - Т. 14. № 4. - С. 38-43.
Свиньин С.Ф., Попов А.И., Рудалев А.В. Вейвлет-анализ и информационные технологии в задачах обработки электрогастроэнтерограмм // ТРУДЫ СПИИРАН . - 2013. - №4 (27). - С. 129-143.
Попов А.И., Тюльпин А.А., Рудалёв А.В. Программная библиотека для цифровой обработки сигналов электрогастроэнтерографии // Информационно-измерительные и управляющие системы. - 2014. - Т. 12. № 6. - С. 40-45.
Попов А.И. О состоянии исследований в области электрогастроэнтерографии в северном (арктическом) федеральном университете на 2014 год // Региональная информатика (РИ-2014). XIV Санкт-Петербургская международная конференция «Региональная информатика (РИ-2014)». Санкт-Петербург, 29-31 октября 2014 г.: Материалы конференции. \ СПОИСУ. - СПб, 2014. - С. 391-392
Размещено на Allbest.ru
...Подобные документы
Краткая характеристика предметной области. Создание диаграммы прецедентов, последовательности, сотрудничества, классов, размещения, компонентов. Добавление деталей к описаниям операций и определение атрибутов КЛАССОВ. Генерация программного кода C++.
курсовая работа [185,0 K], добавлен 29.06.2011Описание классов данных. Основное меню программы. Добавление и удаление объектов. Вывод устройств хранения в указанном ПК. Устройство хранения, класс ноутбук, класс жёсткий диск, класс персональный компьютер, класс планшет и класс Flash-память.
курсовая работа [1,8 M], добавлен 30.03.2014Описания порядка генерации программного кода на языке С++ для информационной подсистемы. Исследование добавления деталей к описаниям операций и определения атрибутов классов. Характеристика сбора, хранения, обработки информации о ходе лечебного процесса.
курсовая работа [626,9 K], добавлен 29.06.2011Разработка программы генератора звука в среде Borland Delphi с использованием стандартных классов TMemoryStream (для хранения звука в виде бинарных данных) и TStrings (для хранения характеристик конкретной частоты). Запись звука в файл (форматы).
курсовая работа [160,5 K], добавлен 22.11.2014Понятие перегрузки (доопределения) операций и её разновидности. Пример соответствующей программы перегрузки, понятие полиморфизма и правила isA. Использование классов операторов в программах языка С++, конструкций операторов и производных классов.
реферат [19,9 K], добавлен 30.10.2011Цели объектно-ориентированного программирования, абстрактные классы и адреса базовых классов, множественное и виртуальное наследование. Инициализация элементов производного класса, программный вызов конструкторов базового и производного классов.
реферат [21,8 K], добавлен 31.10.2011Создание диаграмм вариантов использования, логического представления, классов, состояний и деятельности, компонентов, развертывания для автоматизированной информационной системы в CASE-средстве Rational Rose. Генерация кода программы на языке ANSI C++.
курсовая работа [1,5 M], добавлен 23.10.2014Описание используемых понятий и механизмов объектно-ориентированного программирования. Разработка и описание необходимых классов. Демонстрационный модуль с кратким описанием использованных стандартных компонентов. Внешний вид и листинг программы.
курсовая работа [1,3 M], добавлен 24.07.2013Создание программы для хранения и обработки данных о съеме/сдаче жилья. Написание программы на языке C++ с использованием библиотеки Qt; использование исходного кода для создания приложения под Windows, Linux, Mac OS X без дополнительных изменений кода.
курсовая работа [60,4 K], добавлен 07.03.2013Разработка структуры класса "Экран курсового проектирования", которая будет основой для хранения информации о студентах, выполняющих курсовые работы. Реализация визуального приложения для тестирования иерархии классов на языке программирования С++.
курсовая работа [3,3 M], добавлен 18.03.2011Исследование системы функционирования зоомагазина "Дракоша" и схематическое описание бизнес-процессов предприятия. Генерация кода и разработка автоматизированной информационной системы магазина на языке программирования С+. Расчет диаграмм автоматизации.
курсовая работа [841,8 K], добавлен 07.08.2013Назначение и цели создания системы. Разработка логической модели данных, выбор хранилища. Диаграмма классов для диспетчера и контент-менеджера, схема взаимодействия объектов системы. Описание программных модулей. Тестирование веб-базированной системы.
курсовая работа [5,4 M], добавлен 17.09.2013Создание набора классов, реализующих функции генерации метаданых для заданного файла данных спутника MTSAT-1R. Существующие методы решения. Реализация алгоритма получения необходимых полей с нужными данными. Разработка структуры базы данных инвентаря.
курсовая работа [38,6 K], добавлен 17.07.2009Исследование основных преимуществ и недостатков применения серверных технологий динамической генерации HTML-страниц JSP и ASP.Net. Разработка и автоматизация информационной системы учета внешнеэкономической деятельности ЗАО "Крафт Фудз Украина".
статья [23,3 K], добавлен 27.11.2010Оценка функциональных возможностей стандартных классов представления данных на примерах использования избранных методов ("detect: ifNone:" класса Set, "to:by:do:" класса Number и "copy: ReplaceFrom: to: with:" класса OrderedCollection), их тестирование.
лабораторная работа [1,1 M], добавлен 14.10.2012Разработка структуры базы данных. Этапы разработки информационной системы. Моделирование сигналов в MatLab. Обмен данными в SQL-сервером. Генерация схемы базы данных для целевой СУБД. Редактирование параметров таблицы. Установка параметров генерации.
курсовая работа [5,3 M], добавлен 01.02.2013Создание игровой системы "Тетрис": количество игр, режимы сложности, интерфейс пользователя, игровая статистика, обработка исключений. Структура входных и выходных данных. Диаграммы и описание классов. Блок-схема алгоритма программы, результаты ее работы.
курсовая работа [1,9 M], добавлен 13.06.2012Разработка информационной системы для хранения информации о результатах экзаменов студентов. Описание сервисов, разработка логической и физической модели системы. Выбор системы хранения данных. Схема работы сервиса, принципы безопасности доступа.
курсовая работа [560,6 K], добавлен 09.09.2012Системное и функциональное проектирование. Описание взаимодействия с сервером, классов системных компонентов. Обзор функциональных классов из пакетов helpers, dialogs и networking. Разработка программных модулей. Технико-экономическое обоснование проекта.
дипломная работа [1,7 M], добавлен 15.06.2014Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.
курсовая работа [1,4 M], добавлен 07.08.2013