Übungsaufgaben zu „Vom Entwurf zum Code“

Zwei Übungsaufgaben zum Weg vom Entwurf zum Code: Du schneidest die CSB-Rad-Kata nach einem Paketdiagramm in Pakete, findest und löst einen Abhängigkeitszyklus, zeichnest das Klassendiagramm vorher und nachher und sicherst die Paketgrenzen mit einem Architekturtest. Danach vergleichst Du in der App Let’s Meet einen Entwurf mit dem Code, bewertest die Abweichungen und nimmst Stellung, wie viel vor der nächsten Funktion entworfen werden soll.

Vom Entwurf zum Code: Design before Implementation, Implementation reflects Design, Modularisierung und YAGNI

Wann wird entworfen, wie viel, und wie bleibt der Code dem Entwurf treu? Der Artikel stellt die Entwurfsprinzipien der Clean-Code-Developer-Initiative vor und wägt sie gegen YAGNI ab („just enough design“). Er unterscheidet iteratives und inkrementelles Entwickeln und zeigt Modularisierung mit Paketen: Du schneidest die CSB-Rad-Kata nach einem Paketdiagramm, löst einen Abhängigkeitszyklus auf, sicherst die Paketgrenzen mit einem Architekturtest und schaust auf den Übergang zu Schichten und MVC.

SOLID im Überblick: fünf Prinzipien und die Dependency Inversion

SOLID fasst fünf Entwurfsprinzipien für objektorientierten Code zusammen: Single Responsibility, Open Closed, Liskov Substitution, Interface Segregation und Dependency Inversion. Ausführlich behandelt der Artikel das letzte: Du baust in der CSB-Rad-Kata den Bestellabschluss so um, dass er nur noch von Abstraktionen abhängt, unterscheidest Dependency Inversion, Inversion of Control und Dependency Injection und testest mit Stub und Mock. Zum Schluss findest Du mehrere Verstöße zugleich und legst fest, was Du zuerst umbaust.

Klassen schneiden: Single Responsibility, Separation of Concerns, Information Hiding, Tell, don’t ask und Law of Demeter

Eine Klasse, die rechnet, prüft, Mails verschickt und speichert, muss sich bei jeder Regeländerung mitändern. Du lernst, Klassen nach Verantwortungen zu schneiden (Single Responsibility Principle), Belange zu trennen (Separation of Concerns), Entwurfsentscheidungen zu verbergen (Information Hiding), Entscheidungen zu den Daten zu verlagern (Tell, don’t ask) und Getter-Ketten aufzulösen (Law of Demeter). Am Bestellabschluss der CSB-Rad-Kata beurteilst Du Kohäsion und Kopplung im UML-Klassendiagramm.

Methoden gliedern: Single Level of Abstraction, IOSP, eine Aufgabe je Methode und Fail fast

Eine gut gegliederte Methode liest sich wie ein Inhaltsverzeichnis: oben steht, was passiert, weiter unten, wie es passiert. Du lernst, Abstraktionsebenen in einer Methode zu erkennen und zu trennen (Single Level of Abstraction), Methoden in Integrationen und Operationen aufzuteilen (IOSP), jeder Methode genau eine Aufgabe zu geben, Parameterlisten kurz zu halten und Eingaben früh zu prüfen (Fail fast, Guard Clauses, Ausnahmen statt Fehlercodes). Am Bestellabschluss der CSB-Rad-Kata siehst Du, wie sich dadurch Methodenlänge, Verschachtelung und zyklomatische Komplexität verändern.

Übungsaufgaben zu Exponentialfunktionen und Logarithmen

Sechs Übungsaufgaben zu Exponentialfunktionen und Logarithmen – Zweierpotenzen und binäre Vorsätze im Datenlogger, Entladen und Laden eines Kondensators, die NTC-Gleichung, Bitzahl und Verstärkungsmaß, Formeln nach Exponent, Basis und Logarithmus umstellen und zum Schluss die Temperaturerfassung am Akku einer Pegelmessstelle mit Spannungsteiler, Tiefpass und A/D-Umsetzer. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Exponentialfunktionen und Logarithmen in der Elektrotechnik: Zweierpotenzen, e-Funktion, lb, ln und lg

Speicherplätze verdoppeln sich mit jedem Bit, ein Kondensator lädt sich nach einer e-Funktion auf, und der Widerstand eines Heißleiters folgt ebenfalls einer Exponentialfunktion. Wer die Zeit, die Bitzahl oder die Temperatur aus solchen Formeln berechnen will, braucht den Logarithmus. Dieser Artikel zeigt Dir die drei Basen 2, e und 10, die Rechenregeln für Potenzen und Logarithmen und wie Du Formeln nach dem Exponenten, nach der Basis oder nach einer Größe im Logarithmus umstellst.

Übungsaufgaben zum Umstellen von Formeln

Sechs Übungsaufgaben zum Umstellen von Formeln – vom Leiterwiderstand und der erwärmten Motorwicklung über Parallelschaltungen, Quadrate und Wurzeln bis zu gemischten Formeln mit Ausklammern an einer Messstelle und in einem Pumpwerk, Satz des Pythagoras und Winkelfunktionen im Leistungs- und Spannungsdreieck. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Formeln umstellen: Äquivalenzumformungen, Brüche, Wurzeln und Winkelfunktionen

Fast jede Rechnung in der Elektrotechnik beginnt damit, eine Formel nach der gesuchten Größe umzustellen. Dieser Artikel zeigt Dir Schritt für Schritt, wie das mit Äquivalenzumformungen gelingt: bei einfachen Produkten und Quotienten, bei gemischten Formeln mit Summen im Nenner und mehrfach vorkommender Größe, bei Brüchen und Kehrwerten, bei Quadraten und Wurzeln, im rechtwinkligen Dreieck mit Pythagoras und Winkelfunktionen und bei Ungleichungen.

Physikalische Größen, Einheiten und Zehnerpotenzen: sicher rechnen mit Vorsätzen und signifikanten Stellen

Die meisten Rechenfehler in der Elektrotechnik entstehen nicht an der Physik, sondern am Handwerkszeug: an einem vergessenen „k“, an einer Einheit, die nicht zur Formel passt, oder an einem zu früh gerundeten Zwischenwert. Dieser Artikel zeigt Dir, wie eine Größenangabe aufgebaut ist, wie Du mit SI-Einheiten eine Formel kontrollierst, wie Du mit Zehnerpotenzen und dekadischen Vorsätzen sicher rechnest und wie viele Stellen ein Ergebnis wirklich braucht.

Übungsaufgaben zu digitalen Eingängen am Mikrocontroller: Taster, Pull-up/Pull-down und Entprellen

Drei Übungsaufgaben zu digitalen Eingängen: Pegel an Tastereingängen mit Pull-up- und Pull-down-Widerständen bestimmen und einen offenen Eingang beurteilen, ein Prüfprogramm mit Flankenerkennung und Entprellung schreiben, Pull-up-Ströme berechnen und Öffner und Schließer beim Drahtbruch beurteilen, eine Entprellung mit RC-Glied und Schmitt-Trigger berechnen und Entprellschaltungen sowie einen Reset-Taster auf Fehler prüfen. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Digitale Eingänge am Mikrocontroller: Taster, Logikpegel, Pull-up/Pull-down und Entprellen

Ein Taster am Eingang braucht mehr als zwei Drähte: Hier erfährst Du, ab welcher Spannung ein Eingang HIGH liest, warum ein offener Eingang einen Pull-up- oder Pull-down-Widerstand braucht, wie Du Pegel und Ströme an Taster-Widerstands-Netzwerken berechnest, wann ein Öffner sicherer ist als ein Schließer, wie Du viele Taster an wenige Pins bringst und wie Du prellende Kontakte in Hardware und Software entprellst. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Übungsaufgaben zu digitalen Ausgängen am Mikrocontroller: Vorwiderstand, Ausgangsstrom und Lasten mit Transistor oder Relais

Drei Übungsaufgaben zu digitalen Ausgängen: Ports und Portleitungen einer Platine bestimmen und eine Strombilanz aufstellen, Vorwiderstände für eine Statusanzeige an 3,3 V berechnen und eine weiße LED beurteilen, die Statusanzeige programmieren, eine Transistorstufe für ein Relais auslegen, Freilaufdiode und Logic-Level-MOSFET begründen, Low-Side und High-Side unterscheiden und einen Lüfter zeitgesteuert schalten. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Digitale Ausgänge am Mikrocontroller: LED mit Vorwiderstand, Ausgangsstrom und Lasten mit Transistor oder Relais

Ein Ausgangspin kann eine LED direkt treiben, ein Relais oder einen Lüfter aber nicht. Hier schaltest Du mit pinMode() und digitalWrite() mehrere LEDs (Ampel), berechnest den Vorwiderstand für 3,3 V und 5 V, liest zulässige Pin- und Summenströme aus dem Datenblatt, stellst eine Strombilanz auf und treibst größere Lasten über Transistor, MOSFET oder Relais mit Freilaufdiode – Low-Side und High-Side. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.

Schaltungen zeichnen mit Fritzing: Steckbrettbilder, Bauteile und die Bibliothek der Reihe

Zum Entwerfen und Dokumentieren von Steckbrettaufbauten, Verdrahtungsplänen und Schaltplänen für Mikrocontroller-Projekte eignet sich das Open-Source-Programm Fritzing. Hier steht, wie man fehlende Bauteile findet und importiert, welche Bauteile die Steckbrettbilder dieser Reihe nutzen (Boards, Displays, Sensoren, eigene Bauteile) und wie man die Fritzing-Dateien der Artikel öffnet und weiterbearbeitet.

Pinbelegung der Mikrocontroller-Boards: ESP32-C6, ESP32, NodeMCU und Arduino Uno

Nicht alle Pins eines Mikrocontroller-Boards kann man frei nutzen: Einige steuern den Startvorgang (Strapping-Pins), andere sind mit Speicher, USB, LED oder Tastern verbunden. Hier stehen die Pinouts der Boards ESP32-C6 DevKit N8-M, ESP32 Dev Kit V1, V2 und C V4, WeMos-Board mit OLED, NodeMCU (ESP8266) und Arduino Uno mit den empfohlenen Pins, dazu für jedes Board die Liste der Ein- und Ausgabeelemente, mit der alle Beispiele der Reihe arbeiten, und ein Testprogramm für die Standardbelegung.

Übungsaufgaben zu den ersten Schritten mit dem Mikrocontroller: Programmablauf, Blinkmuster und Taster

Zwei Übungsaufgaben zu den ersten Schritten mit dem Mikrocontroller: Programmablauf und Blinkmuster vorhersagen, eine LOW-aktive LED erkennen, die Liste der Ein- und Ausgabeelemente ergänzen, ein Blinkmuster ändern, mit einem Taster umschalten und Fehler beim Hochladen beheben. Zu jeder Teilaufgabe lässt sich eine Beispiellösung einblenden.

Erste Schritte mit dem Mikrocontroller: Entwicklungsumgebung, Board, Blink und Taster

Kein Mikrocontroller-Projekt ohne blinkende LED. Hier richtest Du die Arduino-IDE mit Board-Paket, Treiber und Port ein, lernst den Aufbau eines Programms mit setup() und loop() kennen, lässt eine LED blinken und liest einen Taster ein – für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno. Zum Schluss geht es um die typischen Fehler beim Hochladen.

Mikrocontroller-Grundlagen: Lernpfad durch die Artikelreihe mit ESP32-C6, ESP32, NodeMCU und Arduino Uno

Dieser Überblick zeigt den Weg durch die Artikelreihe über Mikrocontroller-Grundlagen: zuerst die Grundlagenartikel mit der Arduino-API und Board-Tabs für ESP32-C6, ESP32, NodeMCU und Arduino Uno, danach die Vertiefung mit Registern und Datenblatt und zuletzt die Peripherie- und Vernetzungsartikel. Tabellen nennen zu jedem Artikel Lesezeit und Übungsaufgaben.

Szenario „CSB-Rad: E-Bike-Elektronik“: Lastenräder, Werkstatt und Rahmenfertigung

Die erfundene CSB-Rad GmbH aus Bielefeld kennst Du vielleicht schon aus den IT-Szenarien. Für die Elektroberufe geht es hier um die Elektronik ihrer E-Bikes und Lastenräder, um die Werkstatt in Sennestadt und um die Rahmenfertigung beim Partner Rahmenwerk OWL in Gütersloh. Hier findest Du das 48-V-Lastenradsystem, die Fertigungslinie, feste Werte und die Personalakten.

Übungsaufgaben zu SOLID und Dependency Inversion

Drei Übungsaufgaben zu SOLID: Du entkoppelst in der CSB-Rad-Kata den Bestellabschluss nach dem Dependency Inversion Principle und testest ihn mit Stub und Mock, findest im Erinnerungsdienst des Mitfahrlabors Verstöße gegen mehrere SOLID-Prinzipien, legst eine Reihenfolge für den Umbau fest und baust ihn mit fester Uhr im Test um, und nimmst Stellung zu der Frage, wann Dependency Injection zu viel ist.

Übungsaufgaben zum Erweitern statt Ändern: Open Closed Principle und Interface Segregation Principle

Drei Übungsaufgaben zum Erweitern statt Ändern: Du ersetzt im Mitfahrlabor eine Fallunterscheidung nach dem Fahrzeugtyp durch Polymorphie, baust in der CSB-Rad-Kata die Versandarten als Strategie um und ergänzt das Expresspaket, ohne den Bestellabschluss zu ändern, und teilst ein zu breites Interface des Mitfahrlabors nach den Rollen seiner Nutzenden auf, mit Klassendiagramm vor und nach dem Umbau.

Erweitern statt ändern: Open Closed Principle und Interface Segregation Principle

Jede neue Versandart verlangt im Bestellabschluss der CSB-Rad-Kata Änderungen an mehreren switch-Anweisungen. Mit dem Open Closed Principle kommen neue Varianten als neue Klassen dazu, ohne fertigen Code zu ändern: Fallunterscheidungen nach dem Typ werden zu Polymorphie mit einer Strategie hinter einem Interface. Das Interface Segregation Principle hält diese Interfaces schlank, was vor allem Tests mit Test-Doubles erleichtert. Du lernst auch, wann sich die Abstraktion nicht lohnt (YAGNI).

Übungsaufgaben zum Einsatz von Vererbung: Liskov Substitution Principle und Favour Composition over Inheritance

Drei Übungsaufgaben zum Einsatz von Vererbung: Du findest im Mitfahrlabor LSP-Verstöße bei den Benachrichtigungskanälen und behebst sie, baust in der CSB-Rad-Kata die Kurierzustellung ohne LSP-Verstoß ein und ersetzt eine Vererbungshierarchie aus Fahrtangebot, Mitfahrerliste und ArrayList durch Komposition, mit Klassendiagramm vor und nach dem Umbau.

Vererbung richtig einsetzen: Liskov Substitution Principle und Favour Composition over Inheritance

Vererbung spart Tipparbeit, kann aber Programme brechen, die mit der Oberklasse rechnen. Das Liskov Substitution Principle sagt, wann eine Unterklasse ihre Oberklasse ersetzen kann: Sie verlangt nicht mehr, verspricht nicht weniger und hält die Invarianten ein. Du erkennst typische Verstöße und die fragile Basisklasse und ersetzt Vererbung durch Komposition und Delegation, am Beispiel der Kurierzustellung der CSB-Rad-Kata und mit Blick auf Duck Typing in Python.

Übungsaufgaben zum Schneiden von Klassen: Single Responsibility, Separation of Concerns, Information Hiding, Tell, don’t ask und Law of Demeter

Vier Übungsaufgaben zum Schneiden von Klassen: Du zerlegst die Klasse Shop der CSB-Rad-Kata in Klassen mit je einer Verantwortung, löst im Mitfahrlabor Getter-Ketten mit Tell, don’t ask auf, zeichnest für die Fahrtenverwaltung ein Klassendiagramm vor und nach dem Umbau und trennst die Anzeige der Flurmonitore in Speicherung, Fachlogik, Darstellung und Protokollierung.

Übungsaufgaben zum Gliedern von Methoden: Single Level of Abstraction, IOSP, eine Aufgabe je Methode und Fail fast

Drei Übungsaufgaben zum Gliedern von Methoden: Du trennst im Bestellabschluss der CSB-Rad-Kata Integration und Operation und ziehst alle Prüfungen nach vorn, baust die Anfragebestätigung des Mitfahrlabors mit Guard Clauses, Ausnahmen und einem Parameterobjekt um und gliederst den Erinnerungsdienst so, dass er sich wie sein Aktivitätsdiagramm liest.

Übungsaufgaben zum Refactoring: Code Smells erkennen und in sicheren Schritten umbauen

Vier Übungsaufgaben zum Refactoring: Du ergänzt die Charakterisierungstests der CSB-Rad-Kata und zerlegst ihren Bestellabschluss mit „Methode extrahieren“ und einem Parameterobjekt, bringst Refactoring-Schritte für die Flurmonitor-Anzeige des Mitfahrlabors in eine sichere Reihenfolge, ordnest Code Smells passenden Refactorings zu und verfolgst einen Fehler bei den freien Plätzen mit dem 5-mal-Warum bis zur Ursache.