Artikel-Schlagworte: „Abstraktion“

Schaltungen

Donnerstag, 5. November 2009

Eine Schaltung besteht mindestens aus Eingängen, Ausgängen, einer Spezifikation der Funktion sowie des Zeitverhaltens – also was die Schaltung macht, und wie lang sie dafür benötigt. Dabei kann man sich eine Schaltung wie eine Black-Box vorstellen. Es interessiert nicht, wie sie das tut was sie tun soll, solange sie es in der spezifizierten Art und Weise tut. Das ist ein wichtiger Grundsatz der Abstraktion (Beherrschung von Komplexität). Eine Schaltung kann intern aus weiteren Schaltungen bestehen, für die natürlich genau das gleiche gilt.

Dabei gibt es zwei grundlegende Arten von Schaltungen:

  • Kombinatorische Logik
    Der Zustand der Ausgänge hängt nur vom Zustand der Eingänge ab. Es ist also jeder Ausgangswert reproduzierbar, wenn man den gleichen Eingangswert erneut anlegt.
  • Sequentielle Logik
    Hier hängt der Zustand der Ausgänge nicht nur von den Eingängen ab, sondern auch von den vorherigen Zuständen. Die sequentielle Logik kann also Zustände speichern und bei späteren Berechnungen einbeziehen.

Dabei gibt es eine Reihe von Regeln, wie Schaltungen verknüpft werden dürfen:

  • Jedes Element der Schaltung muss kombinatorisch sein.
  • Jeder Verbindungsknoten ist ein Eingang in eine Schaltung oder an genau einem Ausgangsterminal angeschlossen. (Folie 6)
  • Die Schaltung enthält keine Zyklen, d.h. ein Ausgang einer Schaltung darf nicht gleichzeitig auch ein Eingang der gleichen Schaltung sein.

Die Folien von Prof. Andreas Koch (TU Darmstadt, http://www.esa.informatik.tu-darmstadt.de/twiki/bin/view/Lectures/TGdI09De.html) wurden als Vorlagen benutzt.

Scheme Kurs – Teil 3: Strukturen (struct)

Dienstag, 20. Oktober 2009

Strukturen gibt es in vielen Programmiersprachen. Sie sind auch sehr sinnvoll, denn oft gilt es, Daten zu irgendetwas zusammen zu fassen. Dabei kann es sich z.B. um eine Person handeln. Jeder Mensch hat einen Vorname, Nachname, Wohnort, etc. Da bietet sich das erstellen einer Struktur an, in der man alle Daten die zu einem Menschen gehören zusammen fasst.

In Scheme definiert man eine Struktur (engl. struct) mit:

(define-struct human (forname surename residence))

Zuerst gibt man an, dass man eine Struktur definieren möchte. Danach folgt der Name der neuen Struktur und in einer neuen Klammer alle Eigenschaften die die Struktur haben soll (Eigenschaften des Konstruktors).
Danach hat man die Struktur definiert, jetzt muss man noch eine Struktur erstellen, also einen Teil des Speichers reservieren und die bei der Strukturdefinition angegebenen Eigenschaften mit Werten füllen. Man kann auch sagen, man erstellt eine Instanz der Struktur:

(define peter-mustermann
    (make-human
        ('Peter 'Mustermann 'Berlin)))

Die Instanz erstellt man mit make-human, wobei human natürlich der Name der Struktur ist, gefolgt von einer neuen Klammer mit den Werten die die Struktur speichern soll. Man übergibt die Werte an einen sogenannten Konstruktor.

Wer bist du?

Wenn man nicht weiß, welche Struktur in einer Variable gespeichert ist, kann man dafür die sogenannte Prädikat-Prozedur nutzen.

(human? peter-mustermann) -> boolean

Die Prädikat-Prozedur ist der Name der Struktur, gefolgt von einem Fragezeichen. Als einzigen Parameter übergibt man die fragwürdige Variable. Die Prozedur gibt einen boolean-Wert zurück. In diesem Fall natürlich true.

Wie heißt du, und wo kommst du her?

Möchte man auf eine bestimmte Eigenschaft der Struktur zugreifen und deren Wert auslesen so benutzt man einen sogenannten Selektor:

(human-forename peter-mustermann)

Der Selektor ist der Name der Struktur gefolgt von dem Name der Eigenschaft die man auslesen will. Dazu muss man noch die Variable mit der entsprechenden Struktur angeben. Die Funktion gibt daraufhin den Wert zurück.

Abstraktion

Strukturen können sehr gut zur Datenabstraktion genutzt werden, denn sie vereinen zusammen gehörige Daten und helfen diese strukturierter und modularer zu verarbeiten. Des weiteren lässt sich eine Source, die mit structs arbeitet wesentlich besser lesen, somit erhöhen sie auch die Wartbarkeit von Programmen.
Die Schnittstellen zu den Strukturen stellen die Konstruktoren und Selektoren dar.

Beherrschung von Komplexität

Montag, 12. Oktober 2009

Moderne Mikrochips bzw. auch allgemeine Aufgabenstellungen sind zu komplex um sie komplett und auf jeder Ebene zu verstehen.
Als Beispiel könnte mal die Entwicklung eines Programms heranziehen. Dabei wird der Entwickler in den seltensten Fällen wissen wie das Betriebssystem den Speicher verwaltet oder wie die Transistoren in der CPU verschaltet sind. Es ist aber auch nicht nötig das zu wissen weil es folgende Prinzipien gibt:

  • Abstraktion
  • Disziplin
  • drei Ys
    • Hierarchie (hierarchy)
    • Modularität (modularity)
    • Regularität (regularity)

Abstraktion

Bei der Abstraktion werden unnötige Details versteckt oder ausgeblendet. (Ein Anwendungsprogrammierer muss nicht wissen, wie das OS den Speicher verwaltet. Ein weiteres gutes Beispiel ist das OSI-Referenzmodell.)
Dabei ist es hilfreich wenn man die anliegenden Abstraktionsebenen versteht (Eine Darstellung der Abstraktionsebenen ist um Buch¹ S. 4).

hiding details when they are not important¹

Disziplin

Die wissentliche und beabsichtigte Beschränkung der Realisierungsmöglichkeiten (Man nutzt nur wenige Spannung in einem Mikrochip (z.B. 0 und 1,33V) statt das gesamte Spektrum zu nutzen.) Erst dadurch sind komplexe Schaltungen möglich, denn es ist wesentlich einfacher einen Chip mit 3 Mrd. Transistoren zu entwerfen die nur 2 definierte Zustände haben können als eine analoge Schaltung mit 100 Transistoren!
Des weiteren schafft man durch Disziplin eine größere Kompatibilität der einzelnen Teile untereinander (Beispiel im Buch¹ auf S. 5 and 7).

Digital circuits use discrete voltages, whereas analog circuits use continuous voltages. [...] However, digital circuits are much simpler to design. By limiting ourselves to digital circuits , we can easily combine components into sophisticated systems that ultimately outperform those built from analog components in many applications.¹

drei Ys

  • Hierarchie
    Man Zerlegt das System in Module und Untermodule. Ein einzelnes Modul ist leichter zu verstehen als das Gesamtsystem.
  • Modularität
    Einheitliche Schnittstellung und Funktionen zwischen für die Module, sodass die Module zusammen das System ergeben.
  • Regularität
    Wiederverwendbare Module für gleiche/ähnliche Systeme. Dadurch sinkt die der Module die erstellt werden müssen, und es gibt weniger verschiedene Module.

(Beispiel Buch¹ S. 6 und 7)

¹ “Digital Design and Computer Architecture”, von David M. Harris & Sarah L. Harris