Пассивная структура данных
В информатике и объектно-ориентированном программировании пассивная структура данных ( PDS ), также называемая простой старой структурой данных или простыми старыми данными ( POD ), представляет собой запись , в отличие от объектов. Это структура данных , которая представлена только в виде пассивных коллекций значений полей ( переменных экземпляра ), без использования объектно-ориентированных функций. [1]
Обоснование
[ редактировать ]Пассивные структуры данных подходят, когда есть часть системы, в которой должно быть четко указано, что подробная логика манипулирования данными и целостности находится в другом месте. PDS часто встречаются на границах системы, где информация перемещается в другие системы или постоянное хранилище и обратно, а логика проблемной области, обнаруженная в других частях системы, не имеет значения. Например, PDS было бы удобно для представления значений полей объектов, которые создаются из внешних данных, в той части системы, где еще не применяются семантические проверки и интерпретации, необходимые для действительных объектов.
На С++
[ редактировать ]Тип PDS в C++ или Plain Old C++ Object определяется либо как скалярный тип, либо как класс PDS. [2] Класс PDS не имеет определяемого пользователем оператора присваивания копии, определяемого пользователем деструктора и нестатических элементов данных, которые сами по себе не являются PDS. Более того, класс PDS должен быть агрегатом, то есть у него нет объявленных пользователем конструкторов, нет частных или защищенных нестатических данных, нет виртуальных базовых классов. [а] и никаких виртуальных функций. [4] Стандарт включает положения о том, как PDS должен вести себя в C++. type_traits
библиотека в стандартной библиотеке C++ предоставляет шаблон с именем is_pod
который можно использовать для определения того, является ли данный тип POD. [5] В C++20 появилось понятие «простых старых данных» (POD) и тем самым is_pod
устарел и заменен концепцией типов «тривиального» и «стандартного макета». [6]
В некоторых контекстах C++ позволяет использовать только типы PDS. Например, 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 предоставляет классы данных — часто используемые в качестве бесповеденческих контейнеров для хранения данных с опциями проверки данных. Классы данных в Python, представленные в версии 3.7, предоставляют удобный способ создания классов и хранения значений данных. Классы данных используются для сохранения повторяющегося кода и обеспечения лучшей читаемости. [9]
В C структуры используются таким же образом.
См. также
[ редактировать ]Примечания
[ редактировать ]Ссылки
[ редактировать ]- ^ Блэк, Пол Э.; Вреда Питерс (2007). «пассивная структура данных» . Словарь алгоритмов и структур данных . Проверено 11 сентября 2014 г.
- ^ Совет индустрии информационных технологий (15 октября 2003 г.). Языки программирования — C++ (Второе изд.). Женева: ИСО/МЭК. 14882:2003(Е).
- ^ Бьярн Страуструп (июнь 2013 г.). Язык программирования C++ (Четвертое изд.). Соединенные Штаты Америки: ISBN Pearson Education, Inc. 978-0-321-56384-2 .
- ^ Уолтер Э. Браун (29 сентября 1999 г.). «Примечание по языку C++: типы POD» . Национальная ускорительная лаборатория имени Ферми . Архивировано из оригинала 3 декабря 2016 года . Проверено 6 декабря 2016 г.
- ^ «Справочник по C++ is_pod» . cplusplus.com . Проверено 6 декабря 2016 г.
- ^ «P0767R1: Устаревший POD» . www.open-std.org . Проверено 20 января 2020 г.
- ^ «Соглашения о коде Java 10.1» . Оракул . Проверено 6 декабря 2016 г.
- ^ «Структуры данных языка Java» . Соглашения о коде Sun/Oracle. 20 апреля 1999 года . Проверено 6 декабря 2016 г.
- ^ https://djtechnews.in/what-are-dataclasses-in-python/