2 つの概念が直交するということは、それらが任意の特定の表現において任意の程度まで独立して実現できることを意味します。たとえば、音楽を例にとると、曲のハーモニーとリズミカルを分類できます。「ハーモニック」と「リズミカル」という 2 つの概念は、ハーモニックとリズミカルな曲、不調和とリズミックな曲があるという意味で直交していますが、ハーモニーと不整脈の曲だけでなく、不調和でリズミカルな曲もあります。
元の質問に適用すると、これは、Haskell などの純粋に関数型の非オブジェクト指向プログラミング言語、Eiffel などの純粋にオブジェクト指向の「非関数型」言語だけでなく、C などのどちらでもない言語や、どちらも Scala などです。
簡単に言えば、Scala がオブジェクト指向であることは、データを操作するメソッドでデータをカプセル化するデータ構造 (「クラス」と「特性」) を定義できることを意味し、これらの構造 (「オブジェクト」) のインスタンスが常に定義された状態 (そのクラスに配置されたオブジェクトのコントラクト)。
一方、Scala が関数型言語であるということは、変更可能な状態よりも不変の状態を優先し、関数はファースト クラス オブジェクトであり、他のオブジェクトと同様にローカル変数、フィールド、または他の関数へのパラメーターとして使用できることを意味します。これに加えて、Scala のほぼすべてのステートメントには値があり、関数型プログラミング スタイルを使用することをお勧めします。
さらに、オブジェクト指向プログラミングと Scala の関数型プログラミングの直交性は、プログラマーとして、目的に合うと思われるこれら 2 つの概念の組み合わせを自由に選択できることを意味します。変更可能なオブジェクトのみを使用し、関数をオブジェクトとしてまったく使用せずに、純粋に命令型のスタイルでプログラムを作成できます。一方、オブジェクト指向の機能を使用せずに、Scala で純粋に関数型のプログラムを作成することもできます。
Scala では、どちらか一方のスタイルを使用する必要はありません。問題を解決するために、両方の長所を選択できます。