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.
Das Wissen können wir gemeinsam in einem Kahoot überprüfen.
UndGatter
und die anderen Gatter.Das Wissen können wir gemeinsam in einem Kahoot überprüfen.
Die Gatter sollen getestet werden.
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.
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.
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.
Halbaddierer
mit Hilfe der vorhandenen Klassen.
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
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:
Die Logikgatter können auch über ein Hardwaremodul über den Raspberry Pi angesteuert werden. Das zugehörige Python-Modul heißt eapi.
eapi
.pydoc3 eapi.net
gibt hierzu Hilfestellungen), so dass weitere Gatter mit LEDs auf den anderen PIs verbunden werden.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.
bottle.py
die Stellen, die Aufgaben realisieren, die wir schon selbst programmiert haben: Socket erstellen, an Adresse binden, auf request reagieren?Das MVC-Muster (Model View Controller) wird für viele Anwendungen verwendet.
Literatur: Kapitel zu MVC aus Patterns kompakt-Entwurfsmuster für effektive Software Entwicklung-MVC.