Medizinische Datenverarbeitung mit funktionaler Programmierung - Ein Beispiel aus der Praxis

Funktionale Programmierung ist längst den Kinderschuhen entwachsen. Inzwischen setzen auch Firmen wie z.B. Twitter oder Microsoft auf funktionale Programmierung, um damit sichere, korrekte und performante Software in kurzer Zeit zu entwickeln.

Heute zeigen wir anhand eines Beispiels aus der Praxis, welche Produkte wir als Firma mit funktionaler Programmierung realisieren. Konkret geht es um das Produkt Checkpad MED, eine digitale und mobile Krankenakte für Krankenhausärzte (Film, Homepage). Checkpad MED wird in Kooperation mit Lohmann & Birkner unter technischer Federführung der factis research GmbH zu einem großen Teil in funktionalen Programmiersprachen entwickelt, im restlichen Teil setzen wir zumindest auf funktionale Paradigmen und Techniken.

In diesem Artikel soll es erstmal weniger um technische Details gehen sondern vielmehr um einen Überblick über das System und seine Architektur. Denn auch auf der Architekurebene kann man Prinzipien der funktionalen Programmierung anwenden und damit Vorteile bzgl. guter Testbarkeit und Nachvollziehbarkeit genießen.

Weiterlesen...

Randomisierte Tests mit QuickCheck

Die Programmiersprache Racket (früher bekannt als MzScheme) kommt mit einer QuickCheck-Bibliothek zum randomisierten Testen, mit der sich die Testabdeckung in Programmen erhöhen lässt: statt dass sich der Programmierer zahlreiche Tests überlegt und ausprogrammiert, generiert die Bibliothek anhand einer Spezifikation zufällige Testfälle, testet sie gegen definierte Eigenschaften und berichtet Gegenbeispiele, falls welche gefunden werden.

Weiterlesen...

Mehr Monaden in Aktion

Dieser Artikel ist der dritte einer Serie von Artikeln über Monaden in Haskell.

  • Im ersten Artikel der Serie haben wir die Grundlagen diskutiert.
  • Im zweiten Teil der Serie haben wir begonnen, eigene Monaden zur Lösung Software-technischer Aufgaben zu entwickeln und haben dabei die Fehler-Monade und die Listen-Monade kennen gelernt.

Im heutigen Teil möchten wir diesen Aspekt vertiefen und erneut demonstrieren, wie durch Monaden ein Stück Software modular und durch lokale Erweiterungen um neue Funktionalität ergänzt werden kann, ohne bestehende Teile zu verändern oder zu refaktorisieren.

Weiterlesen...

Systematisch eingebettete DSLs entwickeln in Clojure

In letzter Zeit sind in der Software-Entwicklung domänenspezifische Sprachen

  • kurz als DSL für „domain-specific language“ bezeichnet - populär geworden: Das Versprechen einer DSL ist es, für ein bestimmtes Anwendungsgebiet besonders kompakte und verständliche Programme zu ermöglichen. Diese Programme können außerdem auf technische Details verzichten, die nichts direkt mit dem Anwendungsgebiet zu tun haben.

Das Entwickeln einer konventionellen DSL ist aufwendig, da zur Implementierung DSL alles dazugehört, was bei einer „normalen“ Programmiersprachenimplementierung ebenfalls fällig ist: Lexer, Parser, Compiler oder Interpreter sowie IDE-Support. Aus diesem Grund sind substantielle Frameworks für die schnelle Entwicklung von DSLs entstanden, z.B. Spoofax, das Eclipse Modeling Project oder Xtext.

In funktionalen Sprachen gibt es allerdings häufig einen einfacheren Weg: die Entwicklung einer sogenannten eingebetteten DSL (kurz EDSL für „embedded DSL“). Dabei wird die Host-Sprache so eingesetzt, dass es so aussieht, als ob innerhalb der Host-Sprache eine DSL entsteht. Dies hat eine Reihe von Vorteilen:

Weiterlesen...

Zeitreisen mit persistenten Datenstrukturen

Zeitreisen mit persistenten Datenstrukturen

Wir schreiben das Jahr 2025. Längst haben soziale Plattformen im Internet uns vollständig von der Notwendigkeit eines guten Gedächtnisses befreit. Ein Großteil der Kommunikation ist für die Ewigkeit auf Servern gespeichert und kann jederzeit abgerufen werden.

In einem Anflug von Nostalgie erinnern wir uns an die guten alten Zeiten um das Jahr 2013 und fragen uns, warum unsere Lieblingsplattform es uns nicht erlaubt abzufragen, wer denn damals unsere „Freunde“ und Freundesfreunde waren.

Sicherlich nicht, weil das nicht möglich ist. Virtuelle „Zeitreisen“ wie diese sind durchaus möglich und in vielen Fällen sogar effizient realisierbar. Am Beispiel eines Freundschaftsgraphen, wie er in sozialen Plattformen zu finden ist, werden wir mit diesem Artikel versuchen, uns einer bestimmten Klasse von Datenstrukturen zu nähern und eine vergleichsweise einfache Lösung des Problems zu entwickeln.

Weiterlesen...