it-swarm-eu.dev

Was ist der Unterschied zwischen "Abstraktionsebene" und "Indirektionsebene"?

Ich bin nicht sicher, ob beide Begriffe austauschbar sind. Vielleicht gibt es in der Informatik eine akademische Unterscheidung, die für die tägliche Programmierung nicht relevant ist? Oder kann ich beide Begriffe austauschbar verwenden, ohne mich zu irren? Vielleicht hängt es vom Kontext ab, in dem ich beide Begriffe verwende?

Bearbeiten: Aus dem Grund, warum ich beide Begriffe möglicherweise austauschbar finde, ist ein Wikipedia-Eintrag über Abstraktionsschicht . Dort finden Sie David Wheelers quote 'Alle Probleme in der Informatik können durch eine andere Indirektionsebene gelöst werden.'

39
Theo Lenndorff

Abstraktion befasst sich mit Vereinfachung, Indirektion befasst sich mit dem Standort.

  • Abstraktion ist ein Mechanismus, der komplizierte Details eines Objekts in Bezug auf einfachere, leichter zu manipulierende Begriffe "verbirgt". Ein gutes Beispiel für die Programmierung ist der Detailunterschied zwischen Maschinencode und den verschiedenen Werkzeugen zum Erstellen von Anwendungen, die letztendlich auf Maschinencode basieren. Erstellen Sie eine Windows Form-Anwendung mit der Visual Studio-IDE. Mit IDE) können Sie sich die Anwendung in Form von einfach zu manipulierenden Elementen vorstellen. Die Position eines Bildschirm-Widgets lautet: Was-Sie-sehen-ist-was-Sie-bekommen an einen visuellen Ort in einem Frame abstrahiert, den Sie durch Ziehen des Widgets ändern können. Intern manipuliert die IDE das Widget mithilfe einer anderen Abstraktionsebene wie einer Hochsprache (wie C #)) ). C # selbst wird nicht mit Maschinencode manipuliert, sondern mit einer "Common Runtime Environment", die selbst eine Abstraktion eines Computers und eines Betriebssystems ist.

  • Indirektion bezieht sich darauf, die Position eines Elements transparent zu machen. Wenn Sie den URI einer Webressource kennen, können Sie auf die Ressource zugreifen, ohne deren genauen Speicherort zu kennen. Sie greifen nicht direkt auf die Ressource zu, sondern über einen Kanal, der Ihre Anfrage über eine Reihe von Servern, Anwendungen und Routern weiterleitet. Die Indirektion kann als eine spezielle Art der Abstraktion angesehen werden, bei der der Ort abstrahiert wird.

33
Jay Elston

Abstraktionen werden indirekt implementiert.

Zum Beispiel virtueller Speicher: Die Abstraktion ist ein zusammenhängender Adressraum, der Ihnen vollständig zur Verfügung steht. Diese Abstraktion wird durch Indirektion über eine Seitentabelle implementiert. Anstatt direkt auf physische Speicheradressen zuzugreifen, werden sie von einer virtuellen Adresse in eine physische Adresse übersetzt.

Um eine Abstraktionsebene hinzuzufügen, müssen Sie eine Indirektionsebene hinzufügen. Das Hinzufügen von Indirektion führt jedoch nicht unbedingt zu einer Abstraktion. Zum Beispiel ist es eine Indirektionsebene, Getter und Setter für jede einzelne Variable zu haben. Wenn sie jedoch nur einfache Werte abrufen und festlegen, gibt es keine Abstraktion.

28
Austin

Versuchen wir zunächst, die Begriffe richtig zu definieren:

  1. Abstraktionsschicht bedeutet:

     a) there is large number of positions which use abstraction
          (layer = all the positions together)
     b) each position is hiding some complex stuff, but allows invoking it 
          using only simple code. 
         (abstraction == one-to-one mapping between simple code and complex code)
    
  2. Indirektionsebene bedeutet andererseits:

      a) you're counting levels
      b) indirection==there are several steps before you can reach or access the data
      c) level of indirection is just how many steps it takes to access the data
    

Beide Dinge können dasselbe bedeuten, solange Sie Folgendes verwenden:

  a) step = going from simple code to complex code. 
9
tp1

Abstraktionsebene und Indirektionsebene sind unterschiedliche Konzepte. Abstraktion ist die Aggregation und sinnvolle Benennung einer Reihe von Elementen wie Daten oder Programmanweisungen, beispielsweise das Konzept eines Datei- oder Methodenaufrufs, während Indirektion die Entkopplung von Entitäten ist, um die Verschiebung der Realisierung ihrer Beziehung zu erleichtern. Zum Beispiel die Verwendung von JNDI, um die Identifizierung einer Ressource innerhalb eines Programms von der tatsächlichen Ressource zu trennen, die möglicherweise von einem Anwendungscontainer bereitgestellt wird.

Häufig gehen die Konzepte Hand in Hand, und welche für ein bestimmtes Konstrukt gilt, hängt davon ab, welche Übung oder Diskussion im Gange ist. Beispielsweise ist die abstrakte Natur einer Schnittstelle wichtig, wenn Sie eine API lernen oder dokumentieren. Die Eigenschaft der Indirektion ist wichtig, wenn Sie einer Anwendung Erweiterbarkeit hinzufügen oder Tests für eine Anwendung erstellen.

Eine Abstraktionsebene ist die Aggregation von Abstraktionen und deren konzeptionelle Integrität und Nutzungskonsistenz. CreateProcess ist der Win32-API-Name für eine Reihe von Code, der einen Prozess erstellt und ausführt. Der "Name" ist für diesen Kontext von Bedeutung, denn wenn wir die Funktion so etwas wie DoAllocMemThenMakeEnvThenFindEntryPoint aufrufen würden, wäre sie wirklich nicht sehr abstrakt. Eine Schicht wie die Win32-API bietet eine Barriere, über die ein Programmierer möglicherweise geraten wird, sich nicht zu wagen. Es beseitigt die Komplexität aus Sicht des Anrufers auf Kosten einer reduzierten Leistung (Flexibilität, Leistung usw.). Dieser Kompromiss wird durch häufige Diskussionen über undichte Abstraktionen hervorgehoben: Möglicherweise müssen wir bei Verwendung von Hibernate noch direkte SQL-Aufrufe oder bei Verwendung von .NET Win32-Aufrufe durchführen.

In Bezug auf die Indirektion arbeiten die meisten nicht trivialen Programme mit einer Form der benutzercodierten Indirektion, wie der Abschnitt INPUT-OUTPUT von COBOL vor der Arche zeigt. Beim Zugriff auf eine Ressource wie eine Datenbank wird möglicherweise die Einbettung einer JDBC-Verbindungszeichenfolge in den Code als Indirektion der Ebene 0, eine JNDI-Verbindung (die die Auswahl der Ressource an einen Anwendungscontainer delegiert) als Ebene 1 und ein zugeordnetes Spring-Konstrukt angezeigt Die JNDI-Kennung der Anwendung für eine von vielen Containerressourcen als Ebene 2. Auf mehreren Ebenen können mehrere Parteien außerhalb der Beziehung (in diesem Fall eine Beziehung zwischen der Ausführung von Code und einer Datenbank) diese Beziehung bearbeiten. Dies gilt gleichermaßen für interne Programmkomponenten wie Schnittstellen und Ereignisse.

Wir sehen, dass die Abstraktion unabhängig von ihren anderen Eigenschaften die Komplexität verringert, während die Indirektion sie erhöht. Abstraktion reduziert die Kraft, während Indirektion sie erhöht. Indirektion kann verwendet werden, um die Abstraktionskraft wiederherzustellen, indem das Standardverhalten durch benutzerdefinierte Rückrufe überschrieben wird.

8
mikemay

Mein Verständnis ist, dass sich Abstraktion hauptsächlich auf Funktionen und Indirektion hauptsächlich auf Daten bezieht. Mit anderen Worten, die Abstraktionsebene gibt an, wie tief Ihre Stapelverfolgung wird, und die Indirektionsebene gibt an, wie viele Zeiger Sie dereferenzieren müssen. Zumindest benutze ich die Begriffe so.

7
Karl Bielefeldt

Ein Zeiger auf einen Zeiger auf einen Zeiger auf einen Zeiger auf einen Zeiger auf int hat sechs Indirektionsebenen, aber keinerlei Abstraktionsebenen.

1
gnasher729

Ein gutes Beispiel für eine Abstraktion ist der Aufruf einer einzelnen Methode zum Speichern eines Elements in einer Datenbank. Die Methode abstrahiert die Details zum Verbinden und Aufrufen der Datenbank. Wenn ein Beispiel für die Indirektion die Verwendung einer Struktur für den Zugriff auf Interrupts verwendet. Sie greifen weiterhin auf den Interrupt zu, wenn Sie Werte in der Struktur festlegen. Dies geschieht nur indirekt über die Struktur, indem bestimmten Punkten im Speicher Namen von Strukturmitgliedern zugewiesen werden.

Die Abstraktion verbirgt also Details der Implementierung, bei denen die Indirektion einfach eine "indirekte" Schnittstelle bietet, über die auf etwas zugegriffen werden kann.

Abstraktion ist, wenn Sie nicht verstehen müssen, was verborgen ist, wo Sie mit Indirektion tun.

0
Charles Lambert