Vielleicht möchten Sie sich diesen kurzen Videoblog ansehen . Das Ergebnis ist, dass der Unterschied zwischen strukturierter Programmierung und OO-Programmierung davon abhängt, was sie der Programmierung wegnehmen, und nicht davon, was sie hinzufügen. Softwaredisziplinen wie Strukturierte Programmierung und Objektorientierte Programmierung sind einschränkend und nicht aktivierbar. Hier sind einige Definitionen. Warnung: Sie werden sie nicht mögen.
Strukturierte Programmierung ist Disziplin, die goto auferlegt wird (direkte Übertragung der Kontrolle).
OO-Programmierung ist Disziplin, die Zeigern auf Funktionen auferlegt wird (indirekte Übertragung der Kontrolle)
Funktionale Programmierung ist Disziplin, die der Zuweisung auferlegt wird.
Das erste ist nicht zu schwer zu verstehen. Dijkstra stellte fest, dass es unmöglich war, allgemeine Korrektheitsnachweise zu erstellen, wenn in Algorithmen goto erlaubt war. Wenn die Kontrollstrukturen jedoch auf Sequenz, Auswahl und Iteration beschränkt waren, waren Korrektheitsnachweise möglich. Natürlich versuchen wir heutzutage nicht einmal, die Richtigkeit zu beweisen, aber wir mögen die Einfachheit und Eleganz der strukturierten Programmierung.
Es ist etwas schwieriger, OO zu verstehen. Wir definieren OO oft als Einkapselung, Vererbung und Polymorphismus. Was weniger ist weiß , ist , dass alle drei dieser Eigenschaften erreichbar sind, und häufig wurden in C erreicht Tatsächlich C ++ begann als nur ein Präprozessor , dass C. zusammengestellt nach unten Es ist nicht wirklich schwer zu kapseln in C. Auch ist es schwer zu bauen Datenstrukturen, die Teilmengen voneinander sind und die Vererbung simulieren. Polymorphismus ist jedoch etwas schwieriger. Es erfordert Zeiger auf Funktionen, die in C schwer gut zu verwalten sind. Was uns Sprachen wie C ++ gaben, war Disziplin, die diesen Zeigern auf Funktionen auferlegt wurde. Der C ++ - Compiler hat die vtables für uns erstellt und die darin enthaltenen Zeiger nach einem strengen Formalismus initialisiert. In einem sehr realen Sinne ist OO einfach Disziplin, die auferlegt wirdindirekte Übertragung der Kontrolle dh Zeiger auf Funktionen.
Bei der strukturierten Programmierung geht es darum, wie man goto nicht verwendet. Bei OO geht es darum, keine Zeiger auf Funktionen zu verwenden. Auch bei der funktionalen Programmierung geht es darum, was nicht zu tun ist. In der funktionalen Programmierung weisen wir nur in den am strengsten kontrollierten Fällen Variablen zu.
Letztendlich beschränken all diese "Programmiertechnologien" die Disziplinen, anstatt Technologien zu ermöglichen. Sie sagen uns , was nicht mehr zu tun , als sie uns sagen , was zu tun. Und das bedeutet, dass die Softwareentwicklung in den letzten 40 Jahren nicht gewachsen ist. Vielmehr ist es geschrumpft. Es wird immer enger, da wir alle Dinge gelernt haben, die wir nicht tun sollten.
Zu lernen, was nicht zu tun ist, ist gut; Aber hier ist die beunruhigende Frage: Welche neuen Dinge haben wir gelernt zu tun?