Введение

Тип объекта в языке программирования Java
В разработке программного обеспечения, простой Java-объект (POJO) — это обычный Java-объект, не связанный какими-либо специальными ограничениями. Термин был придуман Мартином Фаулером, Ребеккой Парсонс и Джошем Маккензи в сентябре 2000 года:

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

"Простой старый JavaScript-объект" в JavaScript
"Простой старый Ruby-объект" (PORO) в Ruby
"Простая старая документация" (pod) в Perl
Простой старый CLR-объект (POCO) в .NET Framework
"Простой старый PHP-объект" (POPO) в PHP
Простая старая телефонная связь (POTS) в телефонии

Определение

В идеале, POJO – это Java-объект, не связанный никакими ограничениями, кроме тех, которые накладывает спецификация языка Java; то есть, POJO не должен:

* Наследовать предопределенные классы, например: `public class Foo extends javax.servlet.http.HttpServlet {`
* Реализовывать предопределенные интерфейсы, например: `public class Bar implements javax.ejb.EntityBean {`
* Содержать предопределенные аннотации, например: `@javax.persistence.Entity public class Baz {`

Однако, из-за технических трудностей и других причин, многие программные продукты или фреймворки, описываемые как совместимые с POJO, на самом деле все еще требуют использования предопределенных аннотаций для корректной работы таких функций, как сохранение данных. Идея заключается в том, что если объект (фактически класс) был POJO до добавления каких-либо аннотаций и вернется в состояние POJO после их удаления, то его все еще можно считать POJO. В этом случае базовый объект остается POJO, поскольку не имеет специальных характеристик (например, реализованного интерфейса), которые превращают его в "специализированный Java-объект" (SJO или (sic) SoJO).