То, что два понятия являются ортогональными, означает, что они могут быть независимо реализованы в любой степени в любом данном проявлении.Например, рассматривая музыку, вы можете классифицировать музыкальное произведение по его гармоничности и ритмичности.Два понятия «гармонический» и «ритмичный» являются ортогональными в том смысле, что есть гармонические и ритмические пьесы, дисгармонические и аритмические пьесы, но также дисгармоничные и ритмические пьесы, а также гармонические и аритмические пьесы.
Применяется кИсходный вопрос означает, что существуют чисто функциональные, не объектно-ориентированные языки программирования, такие как Haskell, чисто объектно-ориентированные, «нефункциональные» языки, такие как Eiffel, но также есть языки, которые не являются такими, как C, и языки, которые оба являются такимикак Scala.
Проще говоря, Scala, будучи объектно-ориентированным, означает, что вы можете определять структуры данных («классы» и «черты»), которые инкапсулируют данные с методами, которые манипулируют этими данными, гарантируя, что экземпляры этих структур(«объекты») всегда находятся в определенном состоянии (контракт объекта изложен в его классе).
С другой стороны, Scala как функциональный язык означает, что он предпочитает неизменяемость, а не изменяемое состояние, и что функцииОбъекты первого класса, которые могут использоваться так же, как и любой другой объект, в качестве локальных переменных, полей или параметров для других функций.Кроме того, почти каждое утверждение в Scala имеет значение, которое поощряет использование функционального стиля программирования.
Ортогональность объектно-ориентированного программирования и функционального программирования в Scala дополнительно означает, что вы как программист свободнывыбрать любую смесь этих двух понятий, которые вы считаете подходящими для ваших целей.Вы можете писать свои программы в чисто императивном стиле, используя только изменяемые объекты и вообще не используя функции в качестве объектов, с другой стороны, вы также можете писать чисто функциональные программы в Scala, не используя какие-либо его объектно-ориентированные функции.
Scala действительно не требует, чтобы вы использовали один или другой стиль.Это позволяет вам выбрать лучшее из двух миров, чтобы решить вашу проблему.