Frage

Was ist das Schlimmste (entweder aufgrund Prävalenz und Schwere) Beispiel der Abstraktion Inversion, die Sie bei der Programmierung heute sehen?

Für diejenigen, die mit dem Konzept nicht vertraut sind, ist die Umsetzung Abstraktion Inversion Low-Level-Konstrukte auf den High-Level-Konstrukte. Genauer gesagt, übernehmen Sie Konstrukte A und B. B implementiert oben auf A, aber A ist nicht überall ausgesetzt. Deshalb, wenn Sie wirklich das untere Ebene Konstrukt A benötigen, beenden Sie eine Implementierung auf der B, wenn B in Bezug auf A in erster Linie durchgeführt wird. Siehe http://en.wikipedia.org/wiki/Abstraction_inversion .

War es hilfreich?

Lösung

Wahrscheinlich das schlechteste Beispiel der Abstraktion Missbrauch habe ich jemals gesehen wurde diese fließend C # , welche gewickelt Grundstromsteuerelemente (wenn whiles, sequenziert Ausdrücke) in einer flüssigen Schnittstelle.

So Ihre perfekt idiomatisch, sauberen Code:

var selectedTextBox = (TextBox)sender,
if (IsAdmin)
{
    selectedTextBox.Enabled = true;
    selectedTextBox.Text = superSecretPassword;
}
else
{ 
    selectedTextBox.Clear();
}

Wird dieses Chaos:

Cast<TextBox>(sender).
    WithIf(IsAdmin,
        With(selectedTextBox => selectedTextBox.Enabled = true).
        With(selectedTextBox => selectedTextBox.Text = superSecretPassword),
        With(selectedTextBox => selectedTextBox.Clear());

Weil alles besser mit Lambda-Ausdrücke!

Andere Tipps

Dies scheint ein ziemlich tot Thema. Ich werde meine eigene Frage beantworten nur einige Diskussion zu starten. Ich würde die schlechteste Abstraktion Inversion sagen, dass ich gesehen habe, ist mit OOP-Stil abstrakte Klassen / Schnittstellen Funktionszeiger zu replizieren. Zum Beispiel:

interface foo {
    int bar();
}

class myClass1 implements foo {
    // No member variables.

    int bar() {
        // Implementation
    }

    // No other methods.
}

class myClass2 implements foo {
    // No member variables.

    int bar() {
        // Implementation
    }

    // No other methods.
}

Eine Klasse soll für eine leistungsfähige Abstraktion sein, wenn Sie beide Zustand und das Verhalten kapseln müssen. Ein Funktionszeiger ist etwas relativ einfach, die nur verwendet wird, das Verhalten zu enthalten. Virtuelle Funktionen werden unter Verwendung von Arrays von Funktionszeigern implementiert, aber viele OO-Sprachen Bestrahlung Funktionszeiger oder irgendetwas direkt äquivalent. Am Ende haben Sie deshalb Schnittstellen und Klassen mit Funktionalität äquivalent zu implementieren Zeiger zu funktionieren, und diese Klassen und Schnittstellen sind sich in Bezug auf die Funktionszeiger implementiert. Dies führt sowohl zu unnötiger Komplexität und verminderte Leistung.

Ich bin mir nicht sicher, ob dies Ihre Frage beantwortet, aber ich habe gesehen (und ich habe schuldig es gewesen), wo eine schöne High-Level-Sprache wie Lisp verwendet wird, als ob es Fortran waren oder sogar Versammlung Sprache, denn das ist das Niveau der Programmierer an.

waren

IMHO, ist es eine der Ironien der Berechnung, die unabhängig davon, wie High-Level ist eine Sprache, wenn es universell ist, kann es auf der untersten Ebene verwendet werden. Sophistication ist keine Garantie für Raffinesse.

Die Verwendung von clientseitigen Verfahren Sammlungen Bibliotheken SQL Ergebnismengen zu verarbeiten.

Wie sei es ginge in struktureller Programmierung durch die Verwendung von Flag boolean Variablen zu simulieren? Allerdings hat strukturelle Programmierung allgemein akzeptiert. Ist das nicht ein Hinweis, dass Abstraktion Inversion nicht immer eine schlechte Sache ist ??

Eine andere Antwort, oder die Frage, ob es Ihnen nichts ausmacht. Hat das Wort „Abstraktion“ tatsächlich eine Definition? Sind wirklich gute Abstraktionen oder schlecht oder neutral? Ich meine, ich verstehe die Nummer 2 abstrakt ist, weil es für steht, was etwa 2 Schuhe üblich ist, zwei Augen, zwei Zyklen, usw. Eine Schnittstelle USTACKs abstrakt sein kann, weil es um Dinge gilt, die wie Stapel handeln. Aber wenn Unterprogramm A ruft Unterprogramm B bedeutet, dass es mehr abstrakt ist? Warum sind wir dieses Wort so verliebt?

EDT. Ich bin nur gefragt, weil ich Menschen ihre Nasen an „konkreten“ Fragen auftauchen zu sehen, den Wald zu denken ist wichtiger als die Bäume

Ich bin mir nicht sicher, ob dies wirklich qualifiziert, aber es scheint verwandt. Wenn SQL Server 2005 mit den CLR-Funktionen herauskam, hörte ich ein paar Entwickler sagen Dinge wie: „Nun, jetzt können sie Web-Service abfeuern direkt von unseren gespeicherten Prozeduren ruft!“ Ich sah auch einige Tutorials auf dies zu tun. Das sind einige widersprüchliche Abstraktionsebenen.

  

Was ist das Schlimmste (entweder aufgrund   Prävalenz und Schwere) Beispiel   Abstraktion Inversion, die Sie sehen in   Programmierung heute?

Ich weiß nicht, ob dies zählt, aber ich in der Regel geärgert werden, wenn ich Klassen nach ihrem genannt siehe Implementierung statt , was sie für . Es ist wirklich eine Art ungarische Schreibweise beachten:

  • CustomerFactory
  • DecisionTreeVisitor
  • AbstractWindowDecorator
  • JsonDataAdapter
  • TabbedDocumentImpl
  • ConcreteListHandler

"Factory", "Besucher", "Decorator", "Adapter", "Einf", "Beton" - wer kümmert sich, wie seine implementiert, was es verwendet für

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