Jump to content

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

В информатике и объектно-ориентированном программировании пассивная структура данных ( 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 структуры используются таким же образом.

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Класс PDS может иметь базовый класс, первые нестатические элементы данных которого отличаются. [3]
  1. ^ Блэк, Пол Э.; Вреда Питерс (2007). «пассивная структура данных» . Словарь алгоритмов и структур данных . Проверено 11 сентября 2014 г.
  2. ^ Совет индустрии информационных технологий (15 октября 2003 г.). Языки программирования — C++ (Второе изд.). Женева: ИСО/МЭК. 14882:2003(Е).
  3. ^ Бьярн Страуструп (июнь 2013 г.). Язык программирования C++ (Четвертое изд.). Соединенные Штаты Америки: ISBN Pearson Education, Inc.  978-0-321-56384-2 .
  4. ^ Уолтер Э. Браун (29 сентября 1999 г.). «Примечание по языку C++: типы POD» . Национальная ускорительная лаборатория имени Ферми . Архивировано из оригинала 3 декабря 2016 года . Проверено 6 декабря 2016 г.
  5. ^ «Справочник по C++ is_pod» . cplusplus.com . Проверено 6 декабря 2016 г.
  6. ^ «P0767R1: Устаревший POD» . www.open-std.org . Проверено 20 января 2020 г.
  7. ^ «Соглашения о коде Java 10.1» . Оракул . Проверено 6 декабря 2016 г.
  8. ^ «Структуры данных языка Java» . Соглашения о коде Sun/Oracle. 20 апреля 1999 года . Проверено 6 декабря 2016 г.
  9. ^ https://djtechnews.in/what-are-dataclasses-in-python/
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 9a2c8bf5af27cf28f53848334f02ecb9__1697013900
URL1:https://arc.ask3.ru/arc/aa/9a/b9/9a2c8bf5af27cf28f53848334f02ecb9.html
Заголовок, (Title) документа по адресу, URL1:
Passive data structure - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)