Wiederholungsstrukturen in Python

Wer die Wahl hat, hat die Qual: mit den alternativen Kontrollstrukturen (If-Statements) halten die Suites (Einrückungen) erstmals Einzug in Python. Und die Enttäuschung, weil Mehrfachauswahlen in Python recht umständlich realisiert werden müssen.

Bedingte Anweisungen in Python

Wer die Wahl hat, hat die Qual: mit den alternativen Kontrollstrukturen (If-Statements) halten die Suites (Einrückungen) erstmals Einzug in Python. Und die Enttäuschung, weil Mehrfachauswahlen in Python recht umständlich realisiert werden müssen.

Operatoren in Python

s gibt eine ganze Reihe Operatoren für Zahlen in Python: die aritmetischen Operatoren, Vergleichsoperatoren, Zuweisungsoperatoren, bitweise Operatoren… Und dann gibt es noch die Ausführungsreihenfolge. Was in aller Welt ergibt denn `zahl = 2**4-4%3>0b100<<2`?!?

Python numerische Datentypen

Zahlen, Zeichenketten, Wahrheitswerte: welche Datentypen bietet Python an? Der Schwerpunkt hier liegt auf den numerischen Typen für Gleitkomma- und Ganzzahlen: ist `0b1` eine gültige Zahl und `1e1`? Und: warum in aller Welt ist das hier `False`: `0.1 + 0.2 == 0.3`?!?

UML-Sequenzdiagramme mit PlantUML erstellen

Mithilfe des Tools PlantUML lassen sich UML-Sequenzdiagramme codebasiert erstellen. Dieser Artikel zeigt für die Notationselemente des Sequenzdiagramms die passende PlantUML-Syntax und gibt Tipps, wie die Diagramme möglichst UML-konform und ansehnlich werden.

UML-Sequenzdiagramme

Mit UML-Sequenzdiagrammen wird die zeitliche Abfolge von Nachrichten zwischen Akteuren dargestellt. Die einzelnen Bestandteile und wesentlichen Notationsmittel werden hier an Beispielen vorgestellt. Außerdem geht es darum, wie Du aus einer Ablaufbeschreibung oder aus Pseudocode Schritt für Schritt ein Diagramm entwickelst, wie Entwurfsmuster und Web-Anfragen im Diagramm aussehen und welche Fehler typisch sind. Es werden Literaturtipps und Tooltipps gegeben sowie auf Übungsaufgaben verwiesen.

Model-View-ViewModel (MVVM)

Model-View-ViewModel ist als weiterer Nachkomme des GUI-Musters MVC vor allem durch C# mit XAML und Java mit FXML bekannt geworden. Was sind die zentralen Eigenschaften dieses Musters, und worin unterscheidet es sich vom ursprünglichen MVC und von MVP?

Model-View-Presenter (MVP) – Passive View

Ist Model-View-Presenter nur ein anderer Name für MVC? Was unterscheidet einen Presenter von einer View? Es gibt zahllose Interpretationen dieser GUI-Muster. Hier steht der Versuch einer Einordnung: Im Muster MVP läuft die gesamte Kommunikation zwischen View und Model über den Presenter, und in der Variante Passive View enthält die View keinerlei Logik.

Softwarearchitektur: Schichten, MVC und Data Binding

Anwendungen werden meist in Schichten gegliedert: Präsentation, Fachlogik und Datenhaltung. Innerhalb der Präsentation teilt das Muster Model-View-Controller die Oberfläche in Daten (Model), Darstellung (View) und Steuerung (Controller). Ausgehend von diesen beiden Dreiteilungen wagen wir einen Blick auf das GUI-Pattern MVC, dessen Herkunft, die zentralen Eigenschaften, die alle Interpretationen des Patterns gemein haben, und auf Data Binding, mit dem Oberfläche und Daten automatisch abgeglichen werden. Ist überall MVC drin, wo MVC draufsteht?

Maria aus dem Container

Mit MariaDB lassen sich besonders leicht Container aufsetzen und mit Daten befüllen. In diesem Tutorial werden Voraussetzungen für den Container zusammengetragen, die nötigen Befehle zusammengestellt. Und das Ergebnis kann sich sehen lassen: MariaDB-Container sind nur halb so groß wie MySQL-Container und nur ein Viertel der MS-Boliden.

Befüllter MS-SQL-Datenbankcontainer auf Knopfdruck

Datenbankserver lassen sich auf so ziemlich jedem Betriebssystem aufsetzen. Es ist jedoch häufig wichtig, unterschiedliche Server, definierte Datenbestände oder reproduzierbare Systemumgebungen auf Knopfdruck zu erstellen: für diese Anwendungsfälle spielen Container eine herausragende Rolle. Im folgenden Infotext wird kurz beschrieben, wie ein Container mit einem MS-SQL-Server aufgesetzt und benutzt werden kann. Es werden Voraussetzungen für den Container zusammengetragen, die nötigen Dateien erstellt und Befehle genannt. Am Ende können wir individuelle versionierbare Datenbanken auf Knopfdurck zur Verfügung stellen. Oder, um es zu buzzworden: “Infrastructure as Code”.

Container-Grundlagen: „Hello World“ aus der Dose

Container sind so etwas wie ein kleiner Bruder der virtuellen Maschinen: schlanker, agiler, wendiger. Das bekannteste Tool, um Container zu administrieren ist Docker. Dieses Tutorial beschäftigt sich mit den Grundlagen der Containernutzung mit Docker.

git im Team und Remote nutzen

Zugegeben: Die meisten Leute meinen, wenn sie von git reden, eher Plattformen wie GitHub, GitLab oder Bitbucket. Wir sollten diese zentralen Repositories also schleunigst einbinden: klonen, holen, hochladen, anmelden per Token oder SSH-Schlüssel und festlegen, was gar nicht erst ins Repository gehört.

Versionieren mit unterschiedlichen Zweigen (Branches)

Ein großer Vorteil von git ist, dass wir zeitgleich an unterschiedlichen Komponenten eines Projekts arbeiten können, und diese Entwicklungen zu definierten Zeitpunkten wieder zusammenführen können. Diese Entwicklung in Branches minimiert Seiteneffekte, fordert aber etwas Grips: Merge, Rebase und Konflikte, dazu Werkzeuge zum Rückgängigmachen, Zwischenparken und Markieren von Versionen.

Git 1: Lokal im Repository arbeiten

Bevor wir uns in die weite Welt von Github, Gitlab, Bitbucket usw. aufmachen wollen wir erst einmal verstehen, was lokal passiert und ein paar Begriffe klären: Was ist ein Commit? Was ist ein Repository? Was ist der Workspace? Was ist die Stage? In welchen Schritten versioniere ich? Wie gestalte ich meine Commit-Nachrichten?

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.

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.

UML-Klassendiagramme mit PlantUML zeichnen

Das Tool PlantUML ist hervorragend geeignet, um Klassendiagramme direkt in Dokumentationen wie Readme.md-Dateien des Repositorys oder in Kommentaren zu integrieren, sie aus Programmcode direkt zu generieren und sie in einem Versionskontrollsystem zu versionieren. In diesem Infotext stelle ich vor, wie mit PlantUML die unterschiedlichen Notationsmittel von Klassendiagrammen genutzt werden können, mit welchen Einstellungen sie nahe am UML-Standard bleiben und wie sie sich aufhübschen lassen.

Abstrakte Klassen und Interfaces

Ein großes Problem bei Objekt- und Klassenbeziehung ist die starke Kopplung unterschiedlicher Klassen aneinander. Der Austausch von Verhalten ist so nur mit großem Aufwand möglich. Das Konzept der Abstraktion bietet hier in Form von abstrakten Klassen und Interfaces die Möglichkeit, Komponenten lose zu koppeln. Der Artikel zeigt, wie beide im UML-Klassendiagramm notiert werden, worin sie sich von konkreten Klassen unterscheiden und welche Fehler häufig passieren.

Klassenbeziehungen: Vererbung von Klassen in der UML

Zentrales Element der Code-Wiederverwendung in der objektorientierten Programmierung (OOP) ist die Vererbung. Am Beispiel von Bankkonten werden hier das OOP-Prinzip Vererbung und die darauf aufbauenden Konzepte (z. B. Überschreiben, Konstruktoraufruf der Oberklasse, protected) erklärt – und wie Du aus vorhandenen Klassen eine Oberklasse entwickelst und Vererbung im UML-Klassendiagramm richtig notierst.

UML-Klassendiagramm Objektbeziehungen – Assoziationen

Mit einzelnen Objekten erreicht man in der objektorientierten Programmierung (OOP) noch nicht viel. Erst im Zusammenspiel als Objektsammlungen und über Objektinteraktionen entwickelt die OOP ihre Stärken. Der folgende Text behandelt die Fragen: Welche Objektbeziehungen gibt es? Was unterscheidet Abhängigkeit, Assoziation, Aggregation und Komposition? Wie liest und begründet man Multiplizitäten, und woran erkennt man die passende Beziehung in Anforderungstexten, Quelltexten und Entwurfsmustern? Versuch der Klärung.

UML-Klassendiagramm: Sichtbarkeitsmodifikatoren

Kapselung ist ein Konzept der objektorientierten Programmierung (OOP), das verhindern soll, dass Anpassungen des Codes zu Inkonsistenzen führen. Der Zustand der Objekte soll nicht direkt änderbar sein, sondern nur über Methoden, die ggf. weitere Anpassungen vornehmen können: Getter und Setter. Der Artikel stellt die vier Sichtbarkeiten +, -, # und ~ vor und zeigt, wie Du Anforderungen wie „nur lesbar“ im Klassendiagramm umsetzt.