Пассивная структура данных - Passive data structure

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

Обоснование

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

В C ++

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

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

В Java

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

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

В PHP, ассоциативные массивы и объекты stdClass можно рассматривать как PDS.[нужна цитата ]

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

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

Примечания

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

Рекомендации

  1. ^ Блэк, Пол Э .; Вреда Питерс (2007). «пассивная структура данных». Словарь алгоритмов и структур данных. Получено 11 сентября 2014.
  2. ^ Совет индустрии информационных технологий (2003-10-15). Языки программирования - 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 ++". cplusplus.com. Получено 6 декабря 2016.
  6. ^ «P0767R1: Устарело POD». www.open-std.org. Получено 2020-01-20.
  7. ^ "Соглашения о коде Java 10.1". Oracle. Получено 6 декабря 2016.
  8. ^ "Структуры данных языка Java". Соглашения о кодах Sun / Oracle. 20 апреля 1999 г.. Получено 6 декабря 2016.