Eine "Plain Old Data structure" (POD) ist eine Datenstruktur, die nur aus einfachen Attributswerten besteht und bei der keine objektorientierten Prinzipien angewendet wurden.
PODs werden insbesondere dort eingesetzt, wo die Sicherstellung der Datenintegrität und die Verarbeitung der Daten von anderen Systemkomponenten übernommen wird. Sie werden oft an Systemgrenzen verwendet, an denen Daten zwischen unterschiedlichen Systemen oder mit persistenten Datenträgern ausgetauscht werden und wo daher die Business-Logik der beteiligten System nicht unmittelbar relevant ist.
Beispielsweise können Objekte, die aus externen Daten erzeugt werden, in Form von PODs umgesetzt werden. Die Überprüfung der semantischen Korrektheit sowie der Datenintegrität wird dann in einem weitere Schritt von anderen Systemkomponenten übernommen.
In C++ ist ein POD-Datentyp entweder ein skalarer Datentyp oder eine POD-Klasse. Eine POD-Klasse hat keinen benutzerdefinierten Kopier-Zuweisungs-Operator, keinen benutzerdefinierten Konstruktor und keine nicht-statischen Attribute, die nicht selbst PODs sind. Darüberhinaus muss eine POD-Klasse ein Aggregat-Typ sein, das heisst sie darf keine benutzerdefinierten Konstruktoren haben, keine nicht-statischen Attribute die als "private" oder "protected" definiert sind, keine Basisklassen und keine virtuellen Funktionen. Der C++-Standard enthält weitere Details über das Verhalten von PODs in C++.
Abhängig von der konkreten Verwendung sind in C++ unter Umständen nur POD-Typen möglich. Zum Beispiel kann eine union in C++98 keine Klassen enthalten, die virtuelle Funktionen oder nicht-triviale Konstruktoren oder Destruktoren besitzt. Diese Einschränkung kommt daher, dass der Compiler nicht entscheiden kann welche Konstruktoren oder Destruktoren für die Elemente der union aufgerufen werden sollen. POD-Typen können auch zum Aufruf von C-Funktionen verwendet werden, da C nur PODs unterstützt.
In Java wird das POD-Konzept manchmal mit einer Klasse gleichgesetzt, die nur öffentliche Attribute und keine Methoden enthält (Siehe "Java Code Conventions 10.1"), das entspricht dem Konzept eines Datentransfer-Objekts. Manchmal werden auch POJOs (Klassen, die nur Getter und Setter, aber keine Business-Logik enthalten) und JavaBeans, sofern sie kein Event-Handling verwenden und keine anderen Methoden ausser Gettern und Settern enthalten, als PODs bezeichnet. Auf der anderen Seite verwenden POJOs und Java Beans das Konzept der Kapselung und verstoßen damit gegen eine der fundamentalen Eigenschaften eines POD-Datentyps.
Andere strukturierte Daten wie XML oder JSON können ebenfalls als PODs verwendet werden, wenn keine umfangreichen semantischen Einschränkungen definiert wurden.