Potresti voler dare un'occhiata a questo blog video . Il risultato è che la differenza tra la programmazione strutturata e la programmazione OO è una questione di ciò che tolgono alla programmazione, non a ciò che aggiungono. Le discipline software come la programmazione strutturata e la programmazione orientata agli oggetti sono limitanti, non abilitanti. Ecco alcune definizioni. Attenzione: non ti piaceranno.
-
La programmazione strutturata è disciplina
imposto su goto (trasferimento diretto di
controllo)
-
La programmazione OO è una disciplina imposta
su puntatori alle funzioni (indiretto
trasferimento di controllo)
-
La programmazione funzionale è disciplina
imposto su incarico.
Il primo non è troppo difficile da capire. Dijkstra scoprì che era impossibile creare prove generali di correttezza quando era consentito il goto negli algoritmi. Tuttavia, se le strutture di controllo erano limitate a sequenza, selezione e iterazione, allora erano possibili prove di correttezza . Naturalmente non proviamo nemmeno a dimostrare 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, ereditarietà e polimorfismo. Quello che è meno noto è che tutti e tre questi attributi sono realizzabili, e frequentemente sono stati raggiunti in C. Infatti, C ++ è iniziato come un semplice preprocessore compilato fino a C. In realtà non è difficile incapsulare in C Né è difficile costruire strutture dati che sono sottoinsiemi l'una dell'altra, simulando l'ereditarietà. Il polimorfismo, tuttavia, è un po 'più difficile. Richiede indicazioni su funzioni che, in C, sono difficili da gestire bene. Ciò che le lingue come il C ++ ci ha dato è stata la disciplina imposta a quegli indicatori di funzioni. Il compilatore C ++ ha costruito per noi i vtables e inizializzato i puntatori all'interno di essi secondo un rigoroso formalismo. Quindi in un senso molto reale OO è semplicemente una disciplina imposta al trasferimento indiretto del controllo, cioè i puntatori alle funzioni.
La programmazione strutturata riguarda come non usare goto. OO riguarda come non usare i puntatori alle funzioni. Anche la programmazione funzionale riguarda tutto ciò che non fare. Nella programmazione funzionale non assegniamo le variabili tranne nei casi controllati più rigorosamente.
Quindi alla fine tutte queste "tecnologie" di programmazione sono in realtà discipline vincolanti piuttosto che tecnologie abilitanti. Ci dicono cosa non fare di più di quello che ci dicono cosa fare a . 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 nuove cose abbiamo imparato a fare?