Что такое pojo в java
Перейти к содержимому

Что такое pojo в java

  • автор:

POJO explained in details

POJO stands for Plain Old Java Object that follows a few simple rule(s) and it becomes useful in developing codes with dependency injection and inversion of control features. In Software Engineering, this term is used to designate very simple Java objects. These objects have no restrictions or dependencies on them. They do not contain someone else’s properties.

The term POJO was first coined by Martin Fowler, Rebecca Parsons and Josh MacKenzie in September 2000. Martin Fowler is a british software developer.

What rule(s) it should follow?

  1. The class is public.
  2. The properties of the class are all private.
  3. For each property, there are public getter and public setter methods.
  4. The class should not extend from any other Java class as in

How a typical POJO class would look like?

In J2EE environment, POJO based programming model helps a lot to achieve the functionalities of dependency injection and inversion of control. Also this type of practice helps writing modules that are high cohesive and low coupled thereby making the project robust. Spring, one of the most popular Java framework in the industry always promotes the POJO based development.

POJO Class

Andi Syafrianda

Plain Old Java Object” or POJO for short. A POJO has no naming convention for our properties and methods. POJO class can be used by any Java program as it’s not tied to any framework.

This lack of convention causes two problems:

1. it increases the learning curve for coders trying to understand how to use it.

2. it may limit a framework’s ability to favor convention over configuration, understand how to use the class, and augment its functionality.

JavaBeans

A JavaBean is still a POJO but introduces a strict set of rules around how we implement it:

· Access levels (props is private and Setter and Getter public)

· Method names (prop x and setX getX)

· Default Constructor (add empty constructor)

· Serializable (implement Serializable interface)

So, let’s try converting EmployeePojo into a JavaBean:

some potential disadvantages

· Mutability (are mutable due to their setter methods)

· Boilerplate (getters for all properties and setters for most, much of this might be unnecessary)

· Zero-argument Constructor (requires us to provide a zero-argument constructor)

Conclusion

1. POJO is a Java object that is bound to no specific framework and that a JavaBean is a special type of POJO with a strict set of conventions.

Что такое класс POJO?

Знание разницы между POJO и JavaBean может быть ключом к раскрытию потенциала наших классов в ядре Java.

  • Автор записи

1. Обзор

В этом коротком уроке мы рассмотрим определение “Простого старого объекта Java” или POJO для краткости.

Мы рассмотрим, как POJO сравнивается с JavaBean, и как превращение наших POJO в JavaBean может быть полезным.

2. Простые Старые объекты Java

2.1. Что такое POJO?

Когда мы говорим о POJO, то описываем простой тип без ссылок на какие-либо конкретные фреймворки. У POJO нет соглашения об именовании для наших свойств и методов.

Давайте создадим базовое POJO для сотрудников. У него будет три свойства: имя, фамилия и дата начала:

Этот класс может использоваться любой программой Java, так как он не привязан ни к какому фреймворку.

Но мы не следуем какому-либо реальному соглашению для построения, доступа или изменения состояния класса.

Это отсутствие соглашения вызывает две проблемы:

Во-первых, это увеличивает кривую обучения для программистов, пытающихся понять, как ее использовать.

Во-вторых, это может ограничить способность фреймворка отдавать предпочтение соглашению перед конфигурацией, понимать, как использовать класс, и расширять его функциональность.

Чтобы изучить этот второй момент, давайте поработаем с Employee Pojo , используя отражение. Таким образом, мы начнем находить некоторые из его ограничений.

2.2. Отражение с помощью POJO

А теперь давайте проверим свойства нашего POJO:

Если бы мы распечатали имена свойств на консоли, мы бы увидели только:

Здесь мы видим, что мы получаем start только как свойство класса. PropertyUtils не удалось найти два других.

Мы бы увидели такой же результат, если бы использовали другие библиотеки, такие как Jackson для обработки Employee Pojo.

В идеале мы бы увидели все наши свойства: Имя , Фамилия, и Дата начала. И хорошая новость заключается в том, что многие библиотеки Java по умолчанию поддерживают то, что называется соглашением об именах JavaBean.

3. JavaBeans

3.1. Что такое JavaBean?

JavaBean по-прежнему является POJO, но вводит строгий набор правил относительно того, как мы его реализуем:

  • Уровни доступа – наши свойства являются частными, и мы предоставляем геттеры и сеттеры
  • Имена методов – наши геттеры и сеттеры следуют соглашению getX и setX (в случае логического значения isX может использоваться для геттера)
  • Конструктор по умолчанию – конструктор без аргументов должен присутствовать, чтобы экземпляр можно было создать без предоставления аргументов, например, во время десериализации
  • Сериализуемый – реализация интерфейса Serializable позволяет нам хранить состояние

3.2. EmployeePojo как JavaBean

Итак, давайте попробуем преобразовать Employee Pojo в JavaBean:

3.3. Отражение с помощью JavaBean

Когда мы проверяем наш боб с отражением, теперь мы получаем полный список свойств:

4. Компромиссы При Использовании JavaBeans

Итак, мы показали способ, с помощью которого JavaBeans полезны. Имейте в виду, что каждый выбор дизайна сопровождается компромиссами.

Когда мы используем JavaBeans, мы также должны помнить о некоторых потенциальных недостатках:

  • Изменчивость – наши JavaBeans изменчивы из – за их методов настройки-это может привести к проблемам параллелизма или согласованности
  • Шаблон – мы должны ввести геттеры для всех свойств и сеттеры для большинства, многое из этого может быть ненужным
  • Конструктор с нулевым аргументом – нам часто нужны аргументы в наших конструкторах, чтобы гарантировать, что объект будет создан в допустимом состоянии, но стандарт JavaBean требует, чтобы мы предоставили конструктор с нулевым аргументом

Учитывая эти компромиссы, фреймворки также адаптировались к другим конвенциям bean на протяжении многих лет.

5. Заключение

В этом уроке мы сравнили POJOs с JavaBeans.

Во-первых, мы узнали, что POJO-это объект Java, который не привязан к какой-либо конкретной структуре, и что JavaBean-это особый тип POJO со строгим набором соглашений.

Затем мы увидели, как некоторые фреймворки и библиотеки используют соглашение об именовании JavaBean для обнаружения свойств класса.

Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 3

Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 3 - 1

Привет! Как невозможно научиться управлять самолетом без специального обучения, так и невозможно стать Java-разработчиком, не потратив долгие часы на изучение необходимой теоретической базы. Сегодня мы поработаем именно над этим: продолжим разбор 250+ вопросов на собеседованиях для Java-разработчиков и, соответственно, ответов на них. Здесь — первая и вторая часть разбора. Да несомненно, можно стать хорошим Java-разработчиком и без всех этих вопросов. Тем не менее, если вы хорошо разберётесь во всех тонкостях языка Java, это даст вам преимущество, сделав более желанным кандидатом в глазах вашего будущего работодателя.

20. Какие элементы языка отвечают за инкапсуляцию?
21. Какие элементы языка отвечают за наследование?

Для вызова конструктора суперкласса: например, у класса Cat есть внутренняя переменная name , которую нужно проинициализировать в конструкторе. В конструкторе класса Lion это будет выглядеть так:

Для обращения к полям и методам родителя: например, в классе Cat у нас есть проинициализированное поле age :

22. Какие элементы языка отвечают за полиморфизм?

Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 3 - 2

Полиморфизм — это способность объекта одной сигнатуры принимать множество форм (множество реализаций).Можно смело сказать, что в Java за полиморфизм отвечают ключевые слова implements и extends . implements — когда мы создаем наш интерфейс, мы реализуем в каком-то классе одну из его возможных форм, но ведь она не единственная форма, не так ли? Вспомним, как выглядит применение implements : И в Cat классе мы должны реализовать все абстрактные методы, представленные в интерфейсе Animal . Так же и наследование: в классе-наследнике мы можем переопределить уже существующую реализацию метода. Например: несколько наследников -> несколько различных переопределений одного и того же метода. Ну либо суперкласс был абстрактным и у него есть некий метод, который нужно реализовывать по-особому для каждого его наследника. То есть, можно сказать, что метод будет принимать множество форм. Также в этом нам может помочь аннотация @Override , которая ставится над реализуемыми методами и обозначает, что мы хотим реализовать или переопределить (если реализация уже существует в суперклассе) тот или иной метод суперкласса или интерфейса. Она не обязательна и используется для более легкого обнаружения ошибок. Этой аннотацией вы показываете компилятору, что хотите переопределить/имплементировать метод суперкласса/интерфейса, и он будет следить, чтобы вы не сделали ошибок в сигнатуре метода.

23. Что такое SOLID? Приведите примеры
24. Что такое класс, объект, интерфейс?

Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 3 - 3

Как мы помним, Java — это ООП язык. То есть, программы на Java построены на взаимодействии между объектами. Получается, программа — это такой себе муравейник, где каждый муравей это — объект. Объекты — это некоторые сгруппированные данные, в которых содержатся различные методы (функции) для взаимодействия с этими внутренними данными. А классы — это инструкции, шаблоны для создания объектов. То есть, может быть множество объектов, построенных по одной и той же инструкции, наполненных разными или одинаковыми значениями данных. Если приводить пример из жизни, можно сказать, что класс — это чертеж здания, а объект — конкретно созданное здание по этому чертежу. Интерфейсы — это аналоги классов с той разницей, что по ним нельзя создать объекты. Их цель — добавить элемент абстракции в Java. Точнее, добавить гибкость во взаимоотношениях классов и объектов. Под гибкостью имеем в виду описанные ранее полиморфизм и абстракцию, которые в свою очередь открывают множество возможностей для построения внутренней архитектуры приложения.

25. Что такое класс POJO? Приведите пример такого класса

Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 3 - 4

POJO — Plain Old Java Object — старый добрый Java-объект: простой объект, класса, который не унаследован от какого-то специфического класса и не реализует никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели. Другими словами POJO класс — это просто класс без особых требований. Единственное требование — отсутствие различных наворотов, завязанных на определенном фреймворке. Как правило такие классы не наследуют от других классов (кроме классов POJO из того же пакета), не реализуют интерфейсов — иногда делается исключение для маркерных интерфейсов из стандартной библиотеки типа Serializable или Cloneable — не используют аннотаций и не зависят от сторонних библиотек. Но отмечу, что у POJO могут быть и методы с бизнес-логикой, и произвольного вида конструкторы. Если разрешить аннотации, не вносящие изменения в семантику класса (без которых назначение объекта и логика его работы не изменятся), к POJO также можно отнести Entity сущности JPA и объекты DTO , десериализуемые из XML или JSON , правила для которых заданы в аннотациях. Также для POJO классов желательно переопределить equals и hashCode , ведь это может помочь им лучше выполнять свою роль. Пример POJO класса:

26. Какие элементы может содержать класс?
  • поля класса;
  • статические поля класса;
  • блок инициализации;
  • статический блок инициализации;
  • конструкторы (пустой всегда определен по умолчанию);
  • методы;
  • статические методы;
  • различные аннотации (которые могут висеть над самим классом или его составляющими); ;
  • наследования от других классов ( extends ) или имплементации от интерфейсов ( implements ).
27. Расскажите о наследовании в Java. Каковы особенности использования ключевого слова super?
  1. Возможно наследование лишь одного класса: множественное наследование в Java отсутствует (но с появлением дефолтных методов в Java 8 это утверждение станет весьма спорным).
  2. Приватные методы и поля наследуются тоже, просто к ним не будет доступа с наследника (но если у нас, к примеру, приватное поле и к нему есть public или protected — геттеры и сеттеры, с полем можно работать через них).
  3. final классы не наследуются.
  4. final методы не переопределяются (но их можно наследовать и перегружать).
  5. static методы и переменные не наследуются (т. к. они привязаны не к объектам, а к классам).
  6. При наследовании от абстрактных классов, обязательна реализация их абстрактных методов, либо текущий класс тоже нужно объявить абстрактным.
  7. При наличии не дефолтных конструкторов в родителе, в классе потомке их обязательно нужно переопределять (но @Override над ними не пишется).
  8. Переопределенным методам в наследнике можно расширять модификатор доступа: private -> default -> protected -> public .
  9. Переопределенным методам в наследнике можно сужать прописываемые исключения, например: Exception -> IOException -> FileNotFoundException.
28. Что такое сигнатура метода? Приведите примеры правильных и неправильных сигнатур

Сигнатура метода — это имя метода плюс типы входящих параметров (причем порядок параметров имеет значение). В сигнатуру метода не входит возвращаемое значение, а также бросаемые им исключения. Пример правильной сигнатуры: Пример неправильной сигнатуры: Сигнатура метода в сочетании с типом возвращаемого значения и перечнем бросаемых исключений называется контрактом метода . На сегодня это все. See you later!Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 3 - 6Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 3 - 7

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *