Ich würde vorschlagen, dass das wichtigste Merkmal der objektorientierten Programmierung das Komplexitätsmanagement ist .
Das menschliche Gehirn kann nur so viele Konzepte gleichzeitig speichern - die oft zitierte Grenze, sich an 7 +/- 2 unabhängige Elemente zu erinnern, fällt ein.
Wenn ich bei der Arbeit an einem 600-Kloc-System arbeite, kann ich nicht alles auf einmal im Kopf behalten. Wenn ich das tun müsste, würde ich nur auf viel kleineren Systemen arbeiten.
Zum Glück muss ich nicht. Die verschiedenen Entwurfsmuster und anderen Strukturen, die wir in diesem Projekt verwendet haben, bedeuten, dass ich mich nicht sofort mit dem gesamten System befassen muss - ich kann einzelne Teile aufnehmen und daran arbeiten, da ich weiß, dass sie in die breitere Anwendung passen auf genau definierte Weise.
Alle wichtigen OO-Konzepte bieten Möglichkeiten zum Verwalten der Komplexität.
Kapselung - Lassen Sie mich mit einer externen API umgehen, die mir verschiedene Dienste zur Verfügung stellt, ohne sich Gedanken darüber zu machen, wie diese Dienste implementiert werden.
Abstraktion - lassen Sie mich auf die wesentlichen Merkmale konzentrieren und ignorieren, was nicht relevant ist.
Komposition - Lassen Sie mich Komponenten wiederverwenden, die bereits in neuen Kombinationen erstellt wurden
Polymorphismus - lassen Sie mich nach einem Dienst fragen, ohne sich Gedanken darüber zu machen, wie verschiedene Objekte ihn auf unterschiedliche Weise bereitstellen könnten.
Vererbung - Lassen Sie mich eine Schnittstelle oder Implementierung wiederverwenden und nur die Teile bereitstellen, die sich von den vorherigen unterscheiden.
Prinzip der Einzelverantwortung - Lässt den Zweck für jedes Objekt klar und prägnant sein, sodass es einfach ist, darüber nachzudenken
Liskov Substitution Prinicple - lasst uns nicht Fallen füreinander legen, indem wir ungerade Abhängigkeiten einführen
Open / Closed-Prinzip - Lassen Sie uns die Erweiterung und Änderung auf eine Weise zulassen, bei der wir nicht riskieren müssen, vorhandenen Code zu beschädigen
Abhängigkeitsinjektion - Lassen Sie uns die Komposition auf die nächste Ebene heben und die Komponenten erst viel später zusammenbauen.
Schnittstellenorientierte Entwicklung - Lasst uns die Abstraktion auf die nächste Ebene heben und nur von der Abstraktion abhängen, niemals von einer konkreten Implementierung.