В информатике и объектно-ориентированного программирования , пассивная структура данных ( PDS , также называемый простой старой структуры данных , или простые старые данные , POD ) является термином для записи , в отличие от объектов. Это структура данных, которая представлена только в виде пассивных наборов значений полей ( переменных экземпляра ) без использования объектно-ориентированных функций. [1]
Обоснование
Пассивные структуры данных подходят, когда есть часть системы, где должно быть четко указано, что подробная логика для манипулирования данными и целостности находится где-то в другом месте. PDS часто находятся на границах системы, где информация перемещается в и из других систем или постоянного хранилища, и логика проблемной области, которая находится в других частях системы, не имеет значения. Например, PDS будет удобен для представления значений полей объектов, которые создаются из внешних данных, в той части системы, где еще не применяются семантические проверки и интерпретации, необходимые для действительных объектов.
В C ++
Тип PDS в C ++ или простой старый объект C ++ определяется либо как скалярный тип, либо как класс 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
В Java некоторые разработчики считают, что концепция PDS соответствует классу с общедоступными элементами данных и без методов (Java Code Conventions 10.1) [7], то есть объекту передачи данных . [8] Другие также будут включать простые старые объекты Java (POJO), класс, который имеет методы, но только методы получения и установки, без логики, и компоненты JavaBeans, которые подпадают под концепцию PDS, если они не используют обработку событий и не реализуют добавленные методы помимо геттеров и сеттеров. [ необходима цитата ] Однако POJO и Java Beans имеют инкапсуляцию и поэтому нарушают фундаментальное определение PDS.
На других языках
В PHP ассоциативные массивы и объекты stdClass можно рассматривать как PDS. [ необходима цитата ]
Другие представления структурированных данных, такие как XML или JSON, также могут использоваться в качестве PDS, если не используются значительные семантические ограничения.
Смотрите также
Заметки
Рекомендации
- ↑ Black, Paul E .; Вреда Питерс (2007). «пассивная структура данных» . Словарь алгоритмов и структур данных . Проверено 11 сентября 2014 года .
- ^ Совет индустрии информационных технологий (2003-10-15). Языки программирования - C ++ (Второе изд.). Женева: ISO / IEC. 14882: 2003 (E).
- ^ Бьярне Страуструп (июнь 2013 г.). Язык программирования C ++ (Четвертое изд.). Соединенные Штаты Америки: ISBN Pearson Education, Inc. 978-0-321-56384-2.
- ^ Уолтер Э. Браун (29 сентября 1999 г.). «Примечание по языку C ++: типы POD» . Национальная ускорительная лаборатория Ферми . Архивировано из оригинала на 3 декабря 2016 года . Проверено 6 декабря +2016 .
- ^ "Справочник по is_pod C ++" . cplusplus.com . Проверено 6 декабря +2016 .
- ^ «P0767R1: Устарело POD» . www.open-std.org . Проверено 20 января 2020 .
- ^ «Соглашения о коде Java 10.1» . Oracle . Проверено 6 декабря +2016 .
- ^ «Структуры данных языка Java» . Соглашения о кодах Sun / Oracle. 20 апреля 1999 . Проверено 6 декабря +2016 .