stringtranslate.com

Пассивная структура данных

В информатике и объектно-ориентированном программировании пассивная структура данных ( PDS ), также называемая простой старой структурой данных или простыми старыми данными ( POD ), является записью , в отличие от объектов. Это структура данных , которая представлена ​​только как пассивные коллекции значений полей ( переменных экземпляра ), без использования объектно-ориентированных функций. [1]

Обоснование

Пассивные структуры данных подходят, когда есть часть системы, где должно быть четко указано, что подробная логика для обработки данных и целостности находится в другом месте. PDS часто находятся на границах системы, где информация перемещается в другие системы или постоянное хранилище и из них, а логика проблемной области, которая находится в других частях системы, не имеет значения. Например, PDS был бы удобен для представления значений полей объектов, которые конструируются из внешних данных, в части системы, где семантические проверки и интерпретации, необходимые для допустимых объектов, еще не применяются.

В С++

Тип PDS в C++ или Plain Old C++ Object определяется как скалярный тип или класс PDS. [2] Класс PDS не имеет определяемого пользователем оператора присваивания копии, определяемого пользователем деструктора и нестатических членов данных, которые сами по себе не являются PDS. Более того, класс PDS должен быть агрегатом, то есть у него нет определяемых пользователем конструкторов, закрытых или защищенных нестатических данных, виртуальных базовых классов [a] и виртуальных функций. [4] Стандарт включает утверждения о том, как PDS должен вести себя в C++. type_traitsБиблиотека в стандартной библиотеке C++ предоставляет шаблон с именем is_pod, который можно использовать для определения того, является ли данный тип POD. [5] В C++20 понятие «простые старые данные» (POD) и тем самым is_podустарело и заменено концепцией «тривиальных» и «стандартно-разметочных» типов. [6]

В некоторых контекстах C++ позволяет использовать только типы PDS. Например, a unionв C++98 не может содержать класс, который имеет виртуальные функции или нетривиальные конструкторы или деструкторы. Это ограничение накладывается, поскольку компилятор не может определить, какой конструктор или деструктор следует вызывать для объединения. Типы PDS также могут использоваться для взаимодействия с C , который поддерживает только PDS.

На Яве

В Java некоторые разработчики считают, что концепция PDS соответствует классу с открытыми членами данных и без методов (Java Code Conventions 10.1), [7] т. е. объекту передачи данных . [8] Другие также включают в себя обычные старые объекты Java (POJO), класс, который имеет методы, но только геттеры и сеттеры, без логики, и JavaBeans, подпадающие под концепцию PDS, если они не используют обработку событий и не реализуют дополнительные методы помимо геттеров и сеттеров. [ необходима цитата ] Однако POJO и Java Beans имеют инкапсуляцию и, таким образом, нарушают фундаментальное определение PDS.

Записи (представленные в Java 16 в 2021 году) являются поверхностно неизменяемыми носителями данных без инкапсуляции, и поэтому их также можно считать PDS.

На других языках

В PHP ассоциативные массивы и объекты stdClass можно считать PDS. [ необходима ссылка ]

Другие структурированные представления данных, такие как XML или JSON, также могут использоваться в качестве PDS, если не используются существенные семантические ограничения.

В Python модуль dataclass предоставляет dataclasses — часто используемые как контейнеры без поведения для хранения данных с опциями проверки данных. Dataclasses в python, представленные в версии 3.7, которые предоставляют удобный способ создания класса и хранения значений данных. Dataclasses используются для сохранения нашего повторяющегося кода и обеспечения лучшей читаемости. [9]

В языке C структуры используются таким же образом.

Смотрите также

Примечания

  1. ^ Класс PDS может иметь базовый класс, первые нестатические члены данных которого отличаются. [3]

Ссылки

  1. ^ Блэк, Пол Э.; Вреда Питерс (2007). "пассивная структура данных". Словарь алгоритмов и структур данных . Получено 11 сентября 2014 г.
  2. ^ Совет по информационным технологиям (15.10.2003). Языки программирования — C++ (Второе изд.). Женева: ISO/IEC. 14882:2003(E).
  3. ^ Бьярне Страуструп (июнь 2013 г.). Язык программирования C++ (четвертое издание). Соединенные Штаты Америки: Pearson Education, Inc. ISBN 978-0-321-56384-2.
  4. ^ Уолтер Э. Браун (29 сентября 1999 г.). «Заметка по языку C++: типы POD». Национальная ускорительная лаборатория имени Ферми . Архивировано из оригинала 3 декабря 2016 г. Получено 6 декабря 2016 г.
  5. ^ "is_pod C++ Reference". cplusplus.com . Получено 6 декабря 2016 г. .
  6. ^ "P0767R1: Устаревание POD". www.open-std.org . Получено 20.01.2020 .
  7. ^ "Java Code Conventions 10.1". Oracle . Получено 6 декабря 2016 .
  8. ^ "Java Language Data Structures". Sun/Oracle Code Conventions. 20 апреля 1999 г. Получено 6 декабря 2016 г.
  9. ^ «Что такое Dataclasses в Python? - DJTECHNEWS». 30 августа 2023 г.