Frage

sah nur diesen Kommentar in einem „was JS tun lib Sie“ Umfrage

"@ Xanti -.?. Ja, ja, Modularisierung und Abstraktion in der Programmierung ist eine schreckliche Praxis Funktionen, die andere Funktionen aufrufen Wasteful"

Und das hat mich verlassen, weil ich neugierig Kohana Rahmen verwenden für PHP und JQuery-Bibliothek für JavaScript.

Warum haben manche Menschen betrachten Abstraktion und Praktiken Modularisierung schlecht? Sind nicht Frameworks und Bibliotheken gemacht zu erleichtern und beschleunigen die Entwicklung?

hier ist ein Link die Umfrage

War es hilfreich?

Lösung

Ich habe festgestellt, dass zu viel Abstraktion können Sie Ihre Produktivität gefährlich sein:

  • Eine schlecht gewählte Abstraktion kann schlimmer sein, dann keine Abstraktion überhaupt.

  • Wenn Sie vier oder fünf verschiedene Module, um lesen, müssen zu verstehen, wie ein einfacher Algorithmus funktioniert, dann die Abstraktion Barrieren sind wahrscheinlich nicht an den richtigen Stellen. Vielleicht gibt es eine gute Möglichkeit, den Code zu Refactoring, oder vielleicht wäre es einfacher, nur die Hindernisse zu entfernen.

  • Wenn die Abstraktion auf eine relativ geläufige Vorstellung nicht entspricht, kann es schwierig sein für neue Teammitglieder zu lernen.

Abstraktion ist keine „sinnlosen gut“; es existiert bestimmte Zwecke zu dienen. Zu den häufigsten Zwecke sind

  • schützen die Invarianten eine Datenstruktur

  • encapsulate Design-Entscheidungen, die wahrscheinlich ändern

Meine größte Erfahrung mit der Abstraktion in der Quere war mit unserer Forschung Compiler für C-- . Es gab sehr viel mehr Abstraktion als Studenten zu sehen, in Compiler-Klasse verwendet wurden:

  • Die Zielmaschine war abstrakt
  • Die Assemblersprache war abstrakt
  • Die Aufrufkonventionen waren abstrakt
  • Das Stack-Frame-Layout verwendete einen ungewöhnlichen "Block" Abstraktion

Jeder dieser Abstraktionen serviert einen wichtigen Zweck für unsere Forschung, aber die Gesamtwirkung war, dass es sehr schwierig für neue Studenten den Compiler zu lernen. Also, auch wenn der ursprüngliche Kommentar war im Scherz, es ist Orte, an denen Abstraktion Probleme verursachen können.

Andere Tipps

Wenn auf begrenzten Ressourcen arbeiten, kann es leicht Aufwand hinzufügen.

Sicher gibt es Dinge Compiler weg optimieren, aber wenn man vier ordentliche Objekte in vier ordentlichen .c-Dateien zu erstellen, kompiliert sie zu vier ordentlichen .so-Dateien und verknüpfen sie dann mit einem stummen Linker, modulübergreifende Anrufe Funktion, die könnte werden leicht noch gemacht werden mit vollem Zustand dump, Stücke inlined, die vollständig sind weg noch ausgeführt optimiert werden könnte, und so weiter.

ich Ihnen versichern, wenn Sie die Programmierung starten einen 8-Bit-PIC-Mikrocontroller mit 4K-RAM und 16 KByte Flash-mit Best Practices der objektorientierten Sprachen, mit Hilfe modernster Designmustern und die Schaffung von mehr als eine Abstraktionsschicht, wird Ihr Programm nie ausgeführt. „Vorzeitige Optimierung ist die Wurzel aller Übel“ von einem Mann gesagt wurde, die nie für eine Plattform programmiert, die 128 Byte RAM hat.

Wir können wohl davon ausgehen, Kommentator wurde nicht ernst zu sein.

Ich kann nicht jemand behauptet, Modularisierung und Abstraktion sind schlechte Praxis vorstellen und es eigentlich bedeutet.

Abstraktion und Modularisierung im Allgemeinen ist gut und notwendig. Es könnte schlechte Abstraktionen da draußen sein, z: Gerüste, die nicht mehr oder teuer oder einfach nicht verwendbar, oder groß, oder veralteten, oder 2. Wahl unterstützt werden, und so weiter. Die Bibliothek „Markt“ im Allgemeinen ist riesig. Welche Art von Bibliotheken Sie sich finden, hängt mit von den Umständen und persönlicher Präferenz.

  

Warum haben manche Menschen betrachten Abstraktion und Praktiken Modularisierung schlecht? Sind nicht Frameworks und   Bibliotheken gemacht zu erleichtern und beschleunigen die Entwicklung?

Ändern und Lernen ist manchmal schwer - so dass die Leute es kämpfen. http://thedailywtf.com/ : Wenn Sie diese Art studieren möchten, können Sie Ihre Forschung beginnen - ) würde ignoriere ich sie einfach und Nutzung Bibliotheken und Frameworks, wie sie Sie dienen und Ihre Programmierer Leben besser zu machen.

Ein Entwickler wird behaupten, dass eine Abstraktion oder Modularisierung eine schlechte Praxis ist, wenn sie in der Lage sind oder zu interact erforderlich mit der Abstraktion oder Modularisierung und sind nicht in der Lage seinen Zweck oder Design zu verstehen.

Wenn jede Funktion (und Hilfsfunktionen) ist in seinem eigenen Modul?

Es war vor einiger Zeit ruhig, aber ein Handbuch für einen Fortran-Compiler empfohlen Kennungen als Strings von gleicher Länge und zufällig ausgewählte Buchstaben zu wählen.

Erklärung? gut es ermöglicht eine gleichmäßige Verteilung der Namen im internen Compiler hashtable und aus diesem Grunde für eine schnellere Zusammenstellung bietet.

Ich denke, dass der Text, den Sie zitieren sind, gehört direkt neben dieser Empfehlung

sind gute Abstraktionen häufig verwendet,

Gute Abstraktionen sind an zwei oder mehreren Stellen in der Software verwiesen wird.

Beispiele:

  • Funktionen mit 2+ Aufrufstellen.
  • Abstrakte Klasse mit 2+ konkreten Klassen.
  • Schnittstellen mit 2+ Implementierungen.
  • Generics mit 2+ instantiations
  • Bibliotheken mit 2+ Benutzer.
  • etc.

Eine Abstraktion, die an zwei oder mehreren Stellen referenziert ist hilft, die Codegröße zu reduzieren, durch Ausklammern der gemeinsamen Dinge, und das ist eine gute Sache.

Aber wenn Sie haben eine Menge von Abstraktionen, die nur ein einziges Mal Bezug genommen wird, dann gibt eine gute Chance, dass die Abstraktion nicht notwendig ist.

Einige Beispiele, wenn unnötige Abstraktionen kommen:

  • Schreiben Objekt glücklich Code (Schnittstellen und abstrakte Klassen, die überall nur 1-Implementierung oder Konkretion). Diese Schnittstellen und abstrakte Klassen sind nicht erforderlich (an diesem Punkt der Entwicklung). YAGNI Prinzip.
  • Jemand baut eine „glänzende neue“ Schnittstelle auf dem alten, in dem die neuen Funktionen nach einiger Umwandlung nur die alte Schnittstelle aufrufen. Sie können sich vorstellen, was für ein großes Durcheinander ist das Ergebnis, wenn Sie dies mehrmals wiederholen. In diesem Fall müssen die alten Funktionen einen einzigen Anruf Website, sie sind also nicht erforderlich. Sie müssen den Code aus den alten Funktionen in die neuen verschieben oder nicht einen neuen und modifizieren die alten schreiben.

Einige Beispiele für wirklich gute Abstraktionen:

  • Hardware-Abstraktionsschicht. Bietet eine einzige Schnittstelle für Anwendungen, so dass sie nicht braucht, Code zu entwickeln, für jede Art von Hardware
  • Dateisystem: Es spielt keine Rolle, die Sie verwenden FAT, NTFS, EXT3 was auch immer. Es ermöglicht Ihnen, die Verwendung von Dateien und Verzeichnissen, die Dateisystemtreiber erledigt den Rest.
  • C Sprache: Sie müssen nicht auf Port Ihr Programm für jede CPU-Architektur benötigen. kompilieren Sie es einfach.

So Ihre Frage pragmatisch zu beantworten: Abstraktionen sind schlecht, wenn sie von weniger als 2 Plätze verwiesen werden

.

Im Hinblick auf die Modularisierung, seine subjektive: Sie Ihren Code organisieren können, was Sie wollen. Wenn Ihre Bibliothek Quellcode in einer einzigen Quelldatei ist es nicht noch schlimmer machen, als wenn man es ausdrückte explodieren mehrere hundert Dateien.

Wenn Sie Ihre Abstraktionen als gut oder schlechte Bewertung, immer das Gesamtbild betrachten. Das gesamte Projekt, die gesamte Produktlinie, etc

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top