Il dato di fatto e' che il
programmatore quadratico medio si e no sa programmare con il paradigma procedurale, fa finta di saper programmare con il paradigma ad oggetti (spesso lo usa in modo procedurale) immaginarsi programmare con paradigmi piu' evoluti
Comunque, una GUI ha una relazione praticamente 1:1 con il modello ad oggetti.
Questo non vuol dire che nella programmazione funzionale non si possa implementare la programmazione ad oggetti.
Anzi, se il compilatore non e' particolarmente bischero, puo' fare anche meglio della OOP.
Considera questo:
r = object.method(p1, p2)
non e' molto diverso da
r = function(object, p1, p2)
Dove 'method' viene scelto in base alle regole di ereditarieta', overloading, ecc.
Ora, se il compilatore funzionale e' in grado di supportare una sintassi del tipo:
def function(object: O1, p1: T11, p2: T12): R1 { ... }
def function(object: O2, p1: T21, p2: T22): R2 { ... }
r = function(o, a1, a2)
ed e' in grado di discriminare le varie definizioni di funzioni in base al tipo dei parametri con cui la funzione viene chiamata, ecco che hai appena implementato il modello ad oggetti usando un linguaggio funzionale. Ma non solo, riesci a supportare anche il concetto di
multimetodo che attualmente il modello ad oggetti non supporta (estensione proposta, tra l'altro, anche da Stroustrup).
Tieni presente che i lunguaggi funzionali hanno il concetto di gerarchia dei tipi.