Wenn zwei Konzepte orthogonal sind, bedeutet dies, dass sie in jeder Manifestation in jedem Grad unabhängig voneinander verwirklicht werden können. Wenn Sie beispielsweise Musik betrachten, können Sie ein Musikstück danach klassifizieren, wie harmonisch es ist und wie rhythmisch es ist. Die beiden Begriffe "harmonisch" und "rhythmisch" sind orthogonal in dem Sinne, dass es harmonische und rhythmische Stücke gibt, disharmonische und arrythmische Stücke, aber auch disharmonische und rhythmische Stücke sowie harmonische und arrhythmische Stücke.
Auf die ursprüngliche Frage angewendet bedeutet dies, dass es rein funktionale, nicht objektorientierte Programmiersprachen wie Haskell, rein objektorientierte, "nicht funktionale" Sprachen wie Eiffel gibt, aber auch Sprachen, die weder C sind, noch Sprachen, die es sind beide wie Scala.
Einfach ausgedrückt bedeutet Scala objektorientiert, dass Sie Datenstrukturen ("Klassen" und "Merkmale") definieren können, die Daten mit den Methoden kapseln, mit denen diese Daten bearbeitet werden, um sicherzustellen, dass sich Instanzen dieser Strukturen ("Objekte") immer in a befinden definierter Zustand (der Vertrag des Objekts in seiner Klasse).
Andererseits bedeutet Scala als funktionale Sprache, dass sie unveränderliche gegenüber veränderlichen Zuständen bevorzugt und dass Funktionen erstklassige Objekte sind, die wie jedes andere Objekt als lokale Variablen, Felder oder Parameter für andere Funktionen verwendet werden können. Darüber hinaus hat fast jede Anweisung in Scala einen Wert, der Sie dazu ermutigt, einen funktionalen Programmierstil zu verwenden.
Die Orthogonalität der objektorientierten Programmierung und der funktionalen Programmierung in Scala bedeutet außerdem, dass Sie als Programmierer frei sind, eine beliebige Mischung dieser beiden Konzepte zu wählen, die Sie für Ihren Zweck für geeignet halten. Sie können Ihre Programme in einem rein imperativen Stil schreiben, indem Sie nur veränderbare Objekte verwenden und Funktionen überhaupt nicht als Objekte verwenden. Andererseits können Sie in Scala auch rein funktionale Programme schreiben, die keine der objektorientierten Funktionen verwenden.
Scala verlangt wirklich nicht, dass Sie den einen oder anderen Stil verwenden. Damit können Sie das Beste aus beiden Welten auswählen, um Ihr Problem zu lösen.