Кіріспе
Компьютерлік ғылымда және объектіге бағытталған бағдарламалауда пассивті деректер құрылымы (PDS), сондай-ақ қарапайым ескі деректер құрылымы немесе қарапайым ескі деректер (POD) деп те аталады, деректер тізімі, нысандардан өзгеше. Бұл объектіге бағытталған мүмкіндіктерді пайдаланбастан, тек өріс мәндерінің пассивті жиынтығы (экземпляр айнымалылары) ретінде ұсынылған деректер құрылымы.
In computer science and object oriented programming, a passive data structure (PDS), also termed a plain old data structure or plain old data (POD), is a record, in contrast with objects. It is a data structure that is represented only as passive collections of field values (instance variables), without using object oriented features.
Негізгі себептері
Пассивті деректер құрылымдары жүйеде деректерді өңдеу және толықтығына қатысты егжей-тегжейлі логика басқа жерде екенін нақты көрсету қажет болғанда тиімді. Мұндай құрылымдар көбінесе жүйенің шекарасында кездеседі, онда ақпарат басқа жүйелерге немесе тұрақты сақтау орындарына жіберіледі, ал жүйенің басқа бөліктеріндегі проблемалық домен логикасы маңызсыз болады. Мысалы, PDS сыртқы деректерден құрастырылған объектілердің өрістік мәндерін бейнелеуге ыңғайлы, әсіресе жүйенің жарамды объектілер үшін қажетті семантикалық тексерулер мен интерпретациялар әлі қолданылмаған бөлігінде.
C++ тілінде
C++-дағы PDS түрі немесе Plain Old C++ Object скалярлық тип немесе PDS класы ретінде анықталады. PDS класының пайдаланушы анықтаған көшірмелеу операторы, пайдаланушы анықтаған деструкторы және өзі PDS емес статикалық емес дерек мүшелері болмайды. Сонымен қатар, PDS класы агрегат болуы керек, яғни пайдаланушы жариялаған конструкторлары, жеке немесе қорғалған статикалық емес деректері, виртуалды базалық кластары және виртуалды функциялары болмауы керек. Стандартта PDS-тің C++-да қалай жұмыс істеуі керектігі туралы ережелер келтірілген. C++ стандартты кітапханасындағы типтік қасиеттер кітапханасы is_pod деп аталатын шаблонды ұсынады, оны берілген типтің POD екенін анықтау үшін пайдалануға болады. C++20-да "қарапайым ескі деректер" (POD) және оның ішінде pod түсінігі ескірген және "тривиальды" және "стандартты орналасқан" типтерімен ауыстырылған. Кейбір жағдайларда C++ тек PDS типтерін пайдалануға рұқсат береді. Мысалы, C++98-дегі union виртуалды функциялары немесе тривиальды емес конструкторлары немесе деструкторлары бар класс құрамын қамтуы мүмкін емес. Бұл шектеу компилятордың union үшін қай конструкторды немесе деструкторды шақыру керектігін анықтай алмайтынына байланысты қойылады. PDS типтерін C тілімен интерфейс үшін де пайдалануға болады, себебі C тек PDS типтерін қолдайды.
Явада
Java-да кейбір әзірлеушілер PDS тұжырымдамасын ашық дерек мүшелері бар, бірақ әдістері жоқ (Java Code Conventions 10.1), яғни деректерді беруге арналған объектіге (data transfer object) сәйкес келетін сынып деп санайды. Басқалары қарапайым Java объектілерін (POJO), яғни әдістері бар, бірақ тек getter және setter ғана бар, ешқандай логикасы жоқ, сондай-ақ, егер олар оқиғаларды өңдемесе және getter және setter-ден басқа қосымша әдістерді пайдаланбаса, JavaBeans-ты да PDS тұжырымдамасына жатқызады. Дегенмен, POJO және Java Beans инкапсуляцияланған, сондықтан PDS-тің негізгі анықтамасын бұзады. Жазбалар (Records) (Java 16-да 2021 жылы енгізілген) – инкапсуляцияланбаған, өзгеріссіз деректерді тасымалдайтын құралдар, сондықтан оларды да PDS деп санауға болады.
Басқа тілдерде
PHP-де ассоциативтік массивтер мен stdClass объектілерін PDS деп санауға болады. Маңызды семантикалық шектеулер қолданылмаса, XML немесе JSON сияқты басқа да құрылымдалған деректерді көрсетуді де PDS ретінде пайдалануға болады. Python-да dataclass модулі деректерді сақтауға арналған, мінез-құлқы жоқ контейнерлер ретінде жиі қолданылатын dataclass-тарды ұсынады, сондай-ақ деректерді тексеруге мүмкіндік беретін параметрлер де бар. Python-ның 3.7 нұсқасында енгізілген dataclass-тар сынып құрудың және деректерді сақтаудың ыңғайлы тәсілін ұсынады. Деректер кластары қайталанатын кодты азайтуға және кодты оқуды жеңілдетуге көмектеседі. C тілінде де құрылымдар осы мақсатта қолданылады.