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

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

Обоснование

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

В C ++

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

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

В Java

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

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

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

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

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

Заметки

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