Этот популярный ответ на Qaru говорит об отличии между функциональным программированием и объектно-ориентированным программированием:
Объектно-ориентированные языки хороши, если у вас есть фиксированный набор операции над вещами, а так как ваш код развивается, вы в первую очередь добавляете новые вещи. Это может быть достигнуто путем добавления новых классов, которые реализуют существующие методы и существующие классы остаются в силе.
Функциональные языки хороши, когда у вас есть фиксированный набор вещей, и по мере развития вашего кода, вы в первую очередь добавляете новые операции над существующими вещи. Это может быть достигнуто путем добавления новых функций, которые вычисляют с существующими типами данных, а существующие функции остаются в силе.
Скажем, у меня есть интерфейс Animal
:
public interface Animal {
public void speak();
}
И у меня есть Dog
, Cat
, Fish
и Bird
, которые реализуют интерфейс. Если я хочу добавить новый метод в Animal
с именем jump()
, мне придется пройти через все мои подклассы и реализовать jump()
.
Шаблон посетителя может облегчить эту проблему, но, похоже, что с новыми функциональными функциями, представленными на Java 8, мы должны решить эту проблему по-другому. В scala
я мог бы просто просто использовать сопоставление с образцом, но Java пока этого не делает.
Действительно ли Java 8 упрощает добавление новых операций в существующие вещи?