Potresti voler dare un'occhiata a questo veloce video blog . Il risultato è che la differenza tra programmazione strutturata e programmazione OO è una questione di ciò che tolgono dalla programmazione, non di ciò che aggiungono. Discipline software come Programmazione strutturata e Programmazione orientata agli oggetti sono vincolanti, non abilitanti. Ecco alcune definizioni. Attenzione: non ti piaceranno.
La programmazione strutturata è la disciplina imposta al goto (trasferimento diretto del controllo)
La programmazione OO è la disciplina imposta ai puntatori alle funzioni (trasferimento indiretto del controllo)
La programmazione funzionale è la disciplina imposta all'incarico.
Il primo non è troppo difficile da capire. Dijkstra scoprì che era impossibile creare prove generali di correttezza quando negli algoritmi era consentito il goto. Tuttavia, se le strutture di controllo fossero limitate a sequenza, selezione e iterazione, allora erano possibili prove di correttezza . Ovviamente non proviamo nemmeno a provare le cose al giorno d'oggi, ma ci piace la semplicità e l'eleganza della programmazione strutturata.
È un po 'più difficile capire OO. Spesso definiamo OO come incapsulamento, eredità e polimorfismo. Ciò che è meno noto è che tutti e tre questi attributi sono raggiungibili, e spesso sono stati raggiunti in C. In effetti, C ++ è iniziato come solo un preprocessore compilato in C. In realtà non è difficile incapsulare in C. Né è difficile da costruire strutture di dati che sono sottoinsiemi l'uno dell'altro, simulando l'ereditarietà. Il polimorfismo, tuttavia, è un po 'più difficile. Richiede puntatori a funzioni che, in C, sono difficili da gestire bene. Ciò che i linguaggi come il C ++ ci ha dato è stata la disciplina imposta su tali indicatori alle funzioni. Il compilatore C ++ ha creato i vtables per noi e ha inizializzato i puntatori al loro interno secondo un rigoroso formalismo. Quindi, in un senso molto reale, OO è semplicemente una disciplina impostatrasferimento indiretto di controllo, ovvero puntatori a funzioni.
La programmazione strutturata riguarda come non usare goto. OO riguarda come non utilizzare i puntatori alle funzioni. E anche la programmazione funzionale riguarda tutto ciò che non si deve fare. Nella programmazione funzionale non assegniamo variabili se non nei casi più severamente controllati.
Quindi, alla fine, tutte queste "tecnologie" di programmazione in realtà limitano le discipline piuttosto che abilitare le tecnologie. Ci dicono che cosa non fare più di quello che ci dicono cosa a fare. Ciò significa che lo sviluppo del software non è cresciuto negli ultimi 40 anni. Piuttosto, si è ridotto. È diventato sempre più limitato poiché abbiamo imparato tutte le cose che non dovremmo fare.
Imparare cosa non fare è buono; ma ecco la domanda inquietante: quali cose nuove abbiamo imparato a fare?