In uno dei tanti rant anti-OOP su cat-v.org ho trovato un passaggio di Joe Armstrong che sollevava diverse obiezioni contro il modello OOP, uno dei quali era il seguente:
Obiezione 4 - Gli oggetti hanno uno stato privato
Lo stato è la radice di tutti i mali. In particolare, le funzioni con effetti collaterali dovrebbero essere evitate.
Mentre lo stato nei linguaggi di programmazione è indesiderabile, nel mondo reale abbonda. Sono molto interessato allo stato del mio conto bancario e quando deposito o prelevo denaro dalla mia banca mi aspetto che lo stato del mio conto bancario venga aggiornato correttamente.
Dato che lo stato esiste nel mondo reale quali servizi dovrebbe fornire il linguaggio di programmazione per gestire lo stato?
Gli OOPL dicono "nascondi lo stato al programmatore". Gli stati sono nascosti e visibili solo attraverso le funzioni di accesso. I linguaggi di programmazione convenzionali (C, Pascal) affermano che la visibilità delle variabili di stato è controllata dalle regole di ambito del linguaggio. Le lingue dichiarative pure dicono che non c'è stato. Lo stato globale del sistema viene portato in tutte le funzioni ed esce da tutte le funzioni. Meccanismi come monadi (per FPL) e DCG (linguaggi logici) vengono utilizzati per nascondere lo stato al programmatore in modo che possano programmare "come se lo stato non avesse importanza" ma avere pieno accesso allo stato del sistema qualora ciò fosse necessario.
L'opzione "nascondi lo stato al programmatore" scelta da OOPL è la scelta peggiore possibile. Invece di rivelare lo stato e cercare di trovare il modo di minimizzare il fastidio dello stato, lo nascondono.
Cosa si intende esattamente con questo? Ho poca esperienza procedurale o di basso livello, principalmente OOP, quindi ciò spiega probabilmente quanto non mi sia familiare. E da un punto di vista più moderno, ora che la maggior parte dell'isteria orientata agli oggetti è passata (almeno per quanto ne so), quanto pensate sia accurato / pertinente quel passaggio?
Grazie per l'aiuto.