OOP in Python – Klassen mit Methoden und Attributen

In der realen Welt trifft man häufig auf Dinge, die ein identisches Verhalten aber unterschiedliche Eigenschaften haben. Objektorientierte Programmierung hilft dabei, Einheiten zu modellieren, die über ein gemeinsames Verhalten bei unterschiedlichen Zuständen verfügen.

UML-Aktivitätsdiagramm

UML-Aktivitätsdiagramme sind die Flussdiagramme der UML zur Planung und Dokumentation von Algorithmen und Abläufen. In diesem Artikel geht es um die Grundlagen dieses Diagramms (Abläufe, Parallelisierung, Swimlanes), um typische Modellierungsfehler und darum, wie Du aus einer Ablaufbeschreibung Schritt für Schritt ein Diagramm entwickelst. In einem zweiten Teil wird es um Feinheiten wie den Objektfluss und Umgang mit Exceptions gehen.

Objektorientierter Einstieg in PyGame: Planetensimulation

Eine Variable auf der einen Seite. Eine Funktion auf der anderen Seite. Viele Probleme lassen sich so darstellen. Manchmal ist es aber gerade die Verknüpfung von beidem (die Objektorientierung), die die Programmierung erstaunlich einfach macht. Am Beispiel einer Planetensimulation mit Hilfe von Pygame soll das Konzept der Objektorientierten Programmierung greifbar gemacht werden.

Firmwareupdates für ESPs per WLAN

Es ist lästig, einen ESP-Microprozessor, der in einem Projekt verbaut ist, für ein Softwareupdate auszubauen und an den USB-Port anzuschließen. Mit der Library für „Over the Air“-Updates gibt es jedoch eine elegante Möglichkeit, passwortgeschützt neue eigene Firmware aufzuspielen.

ESP in mehrere WLAN integrieren und Zugangsdaten sichern

Ein ESP (32/8266) ist mit wenigen Zeilen Code ins heimische WLAN integriert. Der hier verwendete Weg stellt sicher, dass aus vielen unterschiedlichen WLANs das geeignetste ausgesucht wird. Außerdem wird wiederkehrend überprüft, ob die WLAN-Verbindung noch besteht, diese ggf. neu aufgebaut und – wenn der Aufbau zu häufig scheitert – der ESP neu gestartet. Ausserdem wird ein Weg vorgestellt, die WLAN-Zugangsdaten vor der unbeabsichtigten Veröffentlichung in Versionsverwaltungen und Codesharing zu schützen.

Einen Netzplan erstellen

Das Gantt-Diagramm ermöglicht die zeitliche Planung von Arbeitspaketen und Ressourcen. Wenn es im Projekt zu Verzögerungen kommt, gibt uns ein anderes Diagramm Auskunft darüber, ob wir noch im Zeitplan bleiben können: das Netzplan-Diagramm. Der Artikel zeigt Schritt für Schritt, wie Du aus einer Vorgangsliste einen Netzplan erstellst, früheste und späteste Zeitpunkte berechnest, Gesamtpuffer und freien Puffer bestimmst und unterscheidest, den kritischen Pfad findest und die Folgen von Verzögerungen beurteilst.

Anforderungen validieren und verwalten

Nicht alle Anforderungen sind gleich wichtig, nicht alle Anforderungen sind auf Anhieb gut formuliert/dokumentiert. Woran erkenne ich gute Anforderungen, woran erkenne ich wichtige Anforderungen? Und: Gibt es auch zu viel Spezifikation?

Dokumentieren von Anforderungen

Es stehen die Wünsche der Stakeholder im Raum – und auch die Normen und Gesetze wollen als Anforderung dokumentiert werden. Welche unterschiedlichen Artefakte gibt es, in denen Anforderungen erfasst werden können, und wo eignen sie sich besonders?

Anforderungsermittlung (requirement elicitation)

Woher kommen Anforderungen, und mit welchen Techniken ermittelst Du sie systematisch? Der Artikel zeigt, wie Du Umfeld, Systemkontext und Stakeholder analysierst und welche Ermittlungstechnik – Interview, Fragebogen, Beobachtung, Workshop, Dokumentenanalyse oder Prototyp – zu welcher Situation passt.

Mein erster Grafiktreiber: ein Dot-Matrixdisplay direkt ansteuern

Gedankenspiel: wenn es die ganze wunderbare Arduino-Community nicht gäbe. Nur uns, den Microcontroller, ein 8×8-Matrix-Display (MAX7219), die eine IDE und ein Datenblatt. Würden wir es dann schaffen, das Display an’s laufen zu bekommen? An diesem Beispiel soll gezeigt werden, dass hardwarenahe Programmierung ohne Bibliotheken – nur mit den Angaben eines Datenblatts – kein Zauberwerk ist…

Tests gegen die Spezifikation erstellen: Blackbox-Testfälle

Die Spezifikation sagt uns vor der ersten Zeile Code eines neuen Programmblocks, wie dieser sich verhalten soll. Wir können im Vorhinein für mögliche Eingabewerte das Resultat unseres Codeblocks bestimmen. Die systematische Ermittlung und Dokumentation dieser Kombinationen aus Eingabewerten und Resultaten durch Äquivalenzklassenbildung und Grenzwertanalyse mündet in „Blackbox“-Testfällen.

Systematisch im Kreis drehen: Testgetriebene Entwicklung mit pytest

Wir wollen uns jetzt im Kreis drehen: Ziel definieren – umsetzen – aufräumen. In kleinen Schritten. So lange, bis das Programm fertig ist. Diese Technik nennt sich Testgetriebene Entwicklung, dazu benötigen wir das Testframework `pytest` und wenige Minuten Zeit. Nebenbei lernen wir auch noch Coding-Conventions kennen.

Mit Dictionaries Key-Value-Paare speichern

Häufig wollen wir Werte nicht in einzelnen Variablen speichern, sondern als zusammenhängende Struktur. Immer dann, wenn wir Key-Value-Beziehungen haben (wir also über einen bestimmten Namen auf einen Wert zugreifen wollen) sind Dictionaries die Objektsammlung der Wahl.

Funktionen in Python

Komplexe Probleme lassen sich am besten lösen, in dem sie in kleine Einheiten aufgeteilt werden, die jeweils ein Teilproblem lösen. Neben den Suites stellen in Python Funktionen die wesentliche Struktur dar, um die Wiederverwertbarkeit, Wartbarkeit und Änderbarkeit von Code sicherzustellen. Hier geht es um Positions- und Keyword-Argumente, Parameter, Defaultwerte, Dokumentation und all‘ die anderen Grundlagen von Funktionen.

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?