Введение
Тип объекта в языке программирования Java
В разработке программного обеспечения, простой Java-объект (POJO) — это обычный Java-объект, не связанный какими-либо специальными ограничениями. Термин был придуман Мартином Фаулером, Ребеккой Парсонс и Джошем Маккензи в сентябре 2000 года:
In software engineering, a plain old Java object (POJO) is an ordinary Java object, not bound by any special restriction. The term was coined by Martin Fowler, Rebecca Parsons and Josh MacKenzie in September 2000:
</blockquote>
Изначально термин "POJO" обозначал Java-объект, который не соответствует ни одной из основных объектных моделей, соглашений или фреймворков Java. Позже он получил распространение как термин, не зависящий от языка программирования, из-за необходимости в общем и легко понятном термине, который противопоставляется сложным объектным фреймворкам. Термин продолжает акронимный шаблон для создания ретронимов для конструкций, которые не используют новых, сложных функций:
"Простой старый JavaScript-объект" в JavaScript
"Простой старый Ruby-объект" (PORO) в Ruby
"Простая старая документация" (pod) в Perl
Простой старый CLR-объект (POCO) в .NET Framework
"Простой старый PHP-объект" (POPO) в PHP
Простая старая телефонная связь (POTS) в телефонии
"Plain old Ruby object" (PORO) in Ruby
"Plain old Documentation" (pod) in Perl
Plain old CLR object (POCO) in the NET Framework
"Plain old PHP object" (POPO) in PHP
Plain old telephone service (POTS) in telephony
Определение
В идеале, POJO – это Java-объект, не связанный никакими ограничениями, кроме тех, которые накладывает спецификация языка Java; то есть, POJO не должен:
Extend prespecified classes, as inpublic class Foo extends javax. servlet. http. HttpServlet {
Implement prespecified interfaces, as inpublic class Bar implements javax. ejb. EntityBean {
Contain prespecified annotations, as in@javax. persistence. Entity public class Baz {
However, due to technical difficulties and other reasons, many software products or frameworks described as POJO compliant actually still require the use of prespecified annotations for features such as persistence to work properly. The idea is that if the object (actually class) were a POJO before any annotations were added, and would return to POJO status if the annotations are removed then it can still be considered a POJO. Then the basic object remains a POJO in that it has no special characteristics (such as an implemented interface) that makes it a "Specialized Java Object" (SJO or (sic) SoJO).
* Наследовать предопределенные классы, например: `public class Foo extends javax.servlet.http.HttpServlet {`
* Реализовывать предопределенные интерфейсы, например: `public class Bar implements javax.ejb.EntityBean {`
* Содержать предопределенные аннотации, например: `@javax.persistence.Entity public class Baz {`
Extend prespecified classes, as inpublic class Foo extends javax. servlet. http. HttpServlet {
Implement prespecified interfaces, as inpublic class Bar implements javax. ejb. EntityBean {
Contain prespecified annotations, as in@javax. persistence. Entity public class Baz {
However, due to technical difficulties and other reasons, many software products or frameworks described as POJO compliant actually still require the use of prespecified annotations for features such as persistence to work properly. The idea is that if the object (actually class) were a POJO before any annotations were added, and would return to POJO status if the annotations are removed then it can still be considered a POJO. Then the basic object remains a POJO in that it has no special characteristics (such as an implemented interface) that makes it a "Specialized Java Object" (SJO or (sic) SoJO).
Однако, из-за технических трудностей и других причин, многие программные продукты или фреймворки, описываемые как совместимые с POJO, на самом деле все еще требуют использования предопределенных аннотаций для корректной работы таких функций, как сохранение данных. Идея заключается в том, что если объект (фактически класс) был POJO до добавления каких-либо аннотаций и вернется в состояние POJO после их удаления, то его все еще можно считать POJO. В этом случае базовый объект остается POJO, поскольку не имеет специальных характеристик (например, реализованного интерфейса), которые превращают его в "специализированный Java-объект" (SJO или (sic) SoJO).
Extend prespecified classes, as inpublic class Foo extends javax. servlet. http. HttpServlet {
Implement prespecified interfaces, as inpublic class Bar implements javax. ejb. EntityBean {
Contain prespecified annotations, as in@javax. persistence. Entity public class Baz {
However, due to technical difficulties and other reasons, many software products or frameworks described as POJO compliant actually still require the use of prespecified annotations for features such as persistence to work properly. The idea is that if the object (actually class) were a POJO before any annotations were added, and would return to POJO status if the annotations are removed then it can still be considered a POJO. Then the basic object remains a POJO in that it has no special characteristics (such as an implemented interface) that makes it a "Specialized Java Object" (SJO or (sic) SoJO).