Статья опубликована в рамках: Научного журнала «Студенческий» № 1(129)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5
ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННОМ ЯЗЫКЕ JAVA
FUNCTIONAL PROGRAMMING IN THE OBJECT-ORIENTED JAVA LANGUAGE
Oleg Finogenov
student, Institute of Applied Informatics, Mathematics and Physics, Armavir Pedagogical University,
Russia, Armavir
Алексей Давиденко
scientific advisor, candidate of technical sciences, associate professor of the Department of Informatics and IKO, Armavir State Pedagogical University,
Russia, Armavir
АННОТАЦИЯ
В данной статье рассматривается применение функционального программирования в объектно-ориентированном языке Java. Мы затронем такие аспекты программирования, как:
- Путь развития Java.
- Применение функционального стиля программирования в Java.
- Базовые паттерны для работы с коллекциями данных, исходя из принципов функционального программирования.
ABSTRACT
This article discusses the application of functional programming in the object-oriented Java language. We will touch upon such aspects of programming as:
- Java development path.
- Application of functional style of programming in Java.
- Basic patterns for working with collections of data, based on the principles of functional programming.
Ключевые слова: Джава, развитие языка Джава, функциональное программирование, функциональное программирование в объектно-ориентированном языке.
Keywords: Java, Java language development, functional programming, functional programming in an object-oriented language.
Введение
Java – объектно-ориентированный язык программирования, т.е. язык, который построен на принципах ООП. В основе вышеупомянутой концепции лежит понятие объекта, т.е. некой абстрактной сущности, которая содержит поля данных и методы (действия объекта). При этом Java – достаточно старый язык. Он был выпущен в 1995 году, но он все еще остается самым популярным в мире, что обусловлено как востребованность концепции ООП в мире, так и возможностями, предоставляемыми Джавой. Если с первым все и так понятно, то второе связано с тем, что разработчики регулярно совершенствуют язык, оптимизируя библиотеки и добавляя новый функционал. Так в Java и добавили элементы функционального программирования, которые и будут рассмотрены в данной работе.
Основная часть
19 марта 2014 года состоялся релиз Java SE 8 под кодовым именем Octopus. Начиная с этой версии, разработчики ввели возможность использовать элементы функционального программирования. Из основных нововведений стоит отметить:
- Поддержка лямбда-выражений.
- В интерфейсах для поддержки функциональности добавлено ключевое слово default.
- Статические методы в интерфейсах.
- Ссылки на конструкторы и методы.
- Функциональные интерфейсы, представленные предикатами, поставщиками и т.д.
- Для работы с коллекциями были добавлены stream.
- Для работы с датами был добавлен новый API.
Перед тем как более подробно описать нововведения, стоит лишний раз упомянуть, что такое функциональное программирование.
Функциональное программирование — это парадигма декларативного программирования, в которой программы создаются путем последовательного применения функций, а не инструкций.
Каждая функция принимает входное значение и возвращает соответствующее выходное значение, вне зависимости от состояния самой программы.
Для них предусмотрено выполнение только одной операции, в случае если нужно реализовать более сложный процесс, то следует использовать уже композицию функций, которые будут последовательно связанны. Для этого в ФП пишется код, состоящий из множества модулей, так как функции можно многократно использовать в различных частях программы, передачи в качестве параметров или возвращения.
Чистые же функции не выдают исключений и ошибок, а также не зависят от глобальных переменных и состояний.
ФП следует использовать в том случае, когда решение/я легко выражается/ются с помощью функций и не имеет/ют связи с физическим миром, т.е. являет/ются некоей абстракцией. В то время как объектно-ориентированный подход моделирует объект по образцу реальных, ФП же использует математические функции, в которых итоговые и промежуточные значения не совпадают с физическими объектами.
Наибольшее распространение функциональное программирование получило в следующих областях:
- Различные финансовые программы
- Модели математических функций
- Алгоритмы классификации
- Проектирование искусственного интеллекта
Иначе говоря, ФП используется для выполнения множества чистых однозадачных функций, совмещенных в некую последовательность для решения различных математических задач, а также задач, не связанных с физическим миром. В Java 8 был добавлен новый функционал как раз для решения подобных задач.
Лямбда-выражение – это функция, которая может быть создана без класса. Она также может быть передана как параметр, а также может быть выполнена, т.е. лямбда-выражение являет собой краткое представление анонимных функций, которые можно передавать.
Dedault-методы были добавлены для упрощения рефакторинга интерфейсов (добавление новых методов). До Octopus’а все интерфейсы были абстрактными, из-за чего приходилось перерабатывать все классы, реализующие интерфейс, при добавлении нового метода в интерфейс. Эта проблема была решена при помощи введения default-methods.
Также для решения проблемы проектирования и поддержки интерфейсов были добавлены static methods. Они похожи на вышеупомянутые методы по умолчанию, за исключением того, что их нельзя переопределить в реализующих классах. Данный функционал дает нам возможность не получить нежелательный результат при использовании дочерних классов.
Ссылки на методы по сути своей являются теме же лямбда-выражениями, но если лямбды вызывают только один существующий метод, то лучше ссылаться на него по имени, для чего и существуют ссылки.
Функциональный интерфейс представляет собой интерфейс, который допускает только один абстрактный метод в области действия интерфейса. В Java 8 было добавлено несколько предопределенных функциональных интерфейсов: предикат, потребитель, поставщик и т.д.
Stream API – способ, представленный в Java 8, для работы со структурами данных в функциональном стиле. Streams – потоки, а API – описание способов, при помощи которых одна программа может взаимодействовать с остальными. Из особенностей стоит отметить: обработка не начинается, пока не будет вызван соответствующий оператор – list.stream().filter(x -> s); экземпляр не получится использовать больше одного раза.
С появлением Stream API программисты получили возможность писать код существенно короче, т.е. упростить работу с базами данных.
Заключение
Функциональное программирование приводит к короткому и удобному коду. К сожалению, Java не имеет надлежащей поддержки ФП в стандартной библиотеке, тем не менее введенные функции и JavaSlang позволяют писать оптимальный код, что позволит увеличить функционал и тем самым продлить жизнь языка.
Список литературы:
- https://javadevblog.com/interfejsy-v-java-8-staticheskie-metody-metody-po-umolchaniyu-funktsional-ny-e-interfejsy.html
- https://vertex-academy.com/tutorials/ru/java-8-ssylki-na-metody/
- https://ru.wikipedia.org/wiki/%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9_Java_SE
Оставить комментарий