Benutzer-Werkzeuge

Webseiten-Werkzeuge


schule:logikgatter

Emulator für logische Schaltungen

Auftrag

Sie haben den Auftrag erhalten, für die Elektro-Fachabteilung eines mittelständischen Unternehmens ein Programm zur Emulation logischer Schaltungen zu entwickeln.

Die verschiedenen Grundbausteine können nach Eingabe von Wertbelegungen für die Eingänge getestet werden.

Stelle Sie durch ein Objekt-Orientiertes Design des Programms sicher, dass auch komplexe Schaltungen simuliert werden können.

Wertetabelle

  1. Erstelle eine Wertetabelle für alle Logikgatter.
  2. Das XOR hat in der Kryptographie eine besondere Bedeutung. Es kommt bei sogenannten One-Time-Pads zum Einsatz. Diese werden in dem PDF von Crypto 101 gut beschrieben.
    Wie funktionieren One-Time Pads? Welche Angriffsmöglichkeiten bzw. Schwachstellen gibt es und wie funktionieren diese?

Das Wissen können wir gemeinsam in einem Kahoot überprüfen.

Und-Gatter

  1. Wie könnte eine Klasse für ein UND-Gatter aufgebaut sein?
  2. Welche Attribute und Methoden gibt es?
  3. Implementiere die Klasse UndGatter und die anderen Gatter.

Vererbung

  1. Bei der Implementierung gibt es Wiederholungen im Quelltext. An welchen Stellen?
  2. Wie können solche Wiederholungen vermieden werden?
  3. Nutze Vererbung, um die Wiederholungen zu vermeiden.
  4. Bearbeite das Arbeitsblatt Vererbung

Das Wissen können wir gemeinsam in einem Kahoot überprüfen.

Tests

Die Gatter sollen getestet werden.

  1. Welches Ziel verfolgt ein Komponententest?
  2. Was ist der Unterschied zwischen einem Blackbox- und einem Whitebox-Test?
  3. Erstelle ein neues Projekt „LogikgatterTest“ in der selben Projektmappe.
  4. Füge als Verweis das bisherige Projekt hinzu.
  5. Erstelle für jedes Gatter einen Testklasse: Für das UndGatter also z.B. UndGatterTest und teste darin das Und-Gatter mit allen möglichen Eingabe.

Ein lustiges kurzes Video, das den Unterschied zwischen einem Unit-Test und einem Integrationstest visualisiert.

Komposition und Aggregation

Einige Gatter können die Funktionalität anderer Gatter wiederverwenden. So kann das Nicht-Und-Gatter z.B. aus einem Nicht- und einem Und-Gatter aufgebaut werden.

  1. Skizziere ein Klassendiagramm, das die Wiederverwendung nutzt.
  2. Stelle deine Implementierung auf die Verwendung von Aggregation um und veröffentliche den Quelltext unten.
  3. Was ist der Unterschied zwischen Aggregation und Komposition? Wie wird dies im Klassendiagramm verdeutlicht?
  4. Was sind Multiplizitäten?

Halb-Addierer und Addierer

Oben ist ein Halbaddierer dargestellt. Er kann einstellige 1-Bit-Zahlen addieren. In dem Video Domino Addition (Kanal Numberphile) wird der Halbaddierer mit Dominosteinen nachgebaut und damit begreifbar gemacht. In einem weiteren Video werden sogar noch größere Zahlen mit 10000 Dominosteinen addiert.

  1. Informiere dich über die Funktionsweise eines Halbaddierers und implementiere ihn als neue Klasse Halbaddierer mit Hilfe der vorhandenen Klassen.
  2. Teste ihn in dem Testprojekt.
  3. Veröffentliche deinen Quelltext.
  4. Du kannst aus zwei Halbaddierern und einem weiteren Gatter einen Volladdierer konstruieren. Damit kann ein Addierwerk für z.B. zwei 2-Bit-Zahlen erstellt werden. Gelingt es dir?

Unterschiedliche Ausgaben der Gatter mit Hilfe des Strategy-Patterns

Das Gatter soll bei der Ausgabe des Ergebnisses (z.B. über eine Methode public string showResult()) unterschiedliche Ausgaben unterstützen. Bitausgabe:1,0 und Boolsche Ausgabe:true, false

Vorgehen

  1. Informiere dich über das Strategy Pattern.
  2. Entwickle ein Klassendiagramm für das Logikgatterprojekt.
  3. (Wir vergleichen)
  4. Setze das Klassendiagramm in Quelltext um.
  5. In welchen Situationen kommt das Strategy Pattern zum Einsatz?
  6. Welche anderen Entwurfsmuster (Pattern) findest du noch? vgl. z.B. Refcard Designpatterns oder Episode 1 - Über den Einsatz von Patterns vom heise developer podcast.

GUI für die Logikgatter

Das Projekt soll um eine GUI ergänzt werden, so dass der Benutzer Gatter mit der Maus auswählen und die Eingänge selbst setzen kann.

Entwirf eine einfache GUI und veröffentliche sie.

Eine mögliche GUI und die zugehörige Klasse:

Hardware-Ansteuerung

Die Logikgatter können auch über ein Hardwaremodul über den Raspberry Pi angesteuert werden. Das zugehörige Python-Modul heißt eapi.

  1. Installiere das Modul eapi.
  2. Steuere das Modul so an, dass die beiden Taster mit den Eingängen und die LEDs mit den Ausgängen verschiedener Gatter wie folgt verbunden werden: rot=Und-Gatter, gelb=Oder-Gater, grün=XOder-Gatter.
  3. Verbinde die Module über das Netzwerk (pydoc3 eapi.net gibt hierzu Hilfestellungen), so dass weitere Gatter mit LEDs auf den anderen PIs verbunden werden.

Webinterface

Webseiten können auf zwei Arten ausgeliefert werden: statisch und dynamisch. Statisch bedeutet dabei, dass lediglich Dateien auf dem Webserver an den Client (z.B. Browser) gesendet werden. Bei dynamischen Seiten werden die Ergebnisse „berechnet“ und an den Client gesendet – die Seite wird dynamisch erzeugt und liegt nicht bereits irgendwo auf dem Server.

Die Logikgatter sollen nun dynamisch über ein Webinterface zugänglich gemacht werden. Hierfür bieten sich drei unterschiedliche Ansätze an.

  1. Einen bestehenden Webserver wie Apache verwenden und das Programm über ein Common Gateway Interface (CGI) ansteuern.
  2. Einen eigenen Webserver programmieren.
  3. Ein Webframework für Python benutzen wie z.B. Django oder Bottle. Findest du in bottle.py die Stellen, die Aufgaben realisieren, die wir schon selbst programmiert haben: Socket erstellen, an Adresse binden, auf request reagieren?

MVC Muster

Das MVC-Muster (Model View Controller) wird für viele Anwendungen verwendet.

  1. Informiere dich darüber, was die Begriffe und Pfeile jeweils bedeuten und erstelle eine kurze Präsentation, die MVC am Beispiel der Logikgatter vorstellt.
  2. Finden sich die Bereiche Model, View und Controller in eurer Anwendung wieder? Falls ja, stelle dies dar.

Literatur: Kapitel zu MVC aus Patterns kompakt-Entwurfsmuster für effektive Software Entwicklung-MVC.

schule/logikgatter.txt · Zuletzt geändert: 19.12.2017 15:13 von Marco Bakera