Plain Old Data structure
# Plain Old Data structure

In der Informatik und Softwaretechnik bezeichnet eine Plain Old Data structure (POD) eine Datenstruktur, die nur aus einfachen Attributswerten besteht und bei der keine objektorientierten Prinzipien angewendet wurden.

## Einführung

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 weiteren Schritt von anderen Systemkomponenten übernommen.

## PODs in C++

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 Destruktor und keine nicht-statischen Attribute, die nicht selbst PODs sind. Darüber hinaus muss eine POD-Klasse ein Aggregat-Typ oder eine union sein, das heißt, sie darf keine benutzerdefinierten Konstruktoren haben, keine nicht-statischen Attribute die als private oder protected definiert sind, keine Basisklassen und keine virtuelle 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.

## PODs in Java

In Java wird das POD-Konzept manchmal mit einer Klasse gleichgesetzt, die nur öffentliche Attribute und keine Methoden enthält, das entspricht dem Konzept eines Transferobjekts. 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 außer Gettern und Settern enthalten, als PODs bezeichnet. Auf der anderen Seite verwenden POJOs und JavaBeans das Konzept der Kapselung und verstoßen damit gegen eine der fundamentalen Eigenschaften eines POD-Datentyps.

## Weiteres

Andere strukturierte Daten wie XML oder JSON können ebenfalls als PODs verwendet werden, falls keine umfangreichen semantischen Einschränkungen für die Daten definiert wurden.

