Open Source im professionellen Einsatz

© iophoto, 1213RF

Dekoratoren in Python

Deko mit Nutzen

Mit Python-Dekoratoren lässt sich die Kernfunktionalität einer Anwendung von der erweiterten Funktionalität trennen. Ein Codebeispiel, das die Berechnung von Fibonacci-Zahlen mit einem Wertecache beschleunigt, demonstriert die Eleganz dieses aspektorientierten Ansatzes.

Ein Programmierer schreibt eine Funktion, die Thread-sicher sein muss und außerdem die programmweite Logdatei nutzen soll. Alles, was er dazu tun muss, ist, der Funktion die Auszeichnungen »@synchronized« und »@logging« voranzustellen. Mit Python-Dekoratoren ist eine solch elegante Annotation von Funktionen tatsächlich möglich.

Selbstverständlich muss der Entwickler den für die hinzugefügte Funktionalität erforderlichen Programmcode trotzdem schreiben. Sein nachträgliches Anbinden an bestehende Funktionen eröffnet dennoch interessante Möglichkeiten. Viele Forderungen des aspektorientierten Programmierparadigmas lassen sich mit ihnen umsetzen (Abbildung 1).

Abbildung 1: Der aspektorientierten Programmierung geht es darum, zur Kernfunktionalität orthogonal stehende Seitenaspekte wie Datenvalidierungen getrennt zu entwickeln und erst spät in die Anwendung einzuflechten.

Abbildung 1: Der aspektorientierten Programmierung geht es darum, zur Kernfunktionalität orthogonal stehende Seitenaspekte wie Datenvalidierungen getrennt zu entwickeln und erst spät in die Anwendung einzuflechten.

Anwendungsfälle

Dekoratoren sind zum Beispiel nützlich, wenn es darum geht, das implizite Verhalten eines Programms sichtbar zu machen, zum Beispiel Laufzeitverhalten, Programmfluss oder Aufrufhäufigkeit von Funktionen. Funktionen lassen sich außerdem mit Vor- und Nachbedingungen oder beispielsweise mit Cache-Mechanismen ausstatten.

Dieser Artikel zeigt am Beispiel der Fibonacci-Zahlen, wie Dekoratoren den Entwickler zunächst bei der Analyse von Performanceproblemen helfen. Aus den dabei gewonnenen Erkenntnissen ergibt sich, dass ein Caching die Zahl der benötigten Durchläufe stark verringert. Die Performance steigt dabei um weit mehr als den Faktor 1000.

Entflochten

Bei der Software-Entwicklung ist es sinnvoll, Kernfunktionalität und erweiterte Funktionalität wie Sicherheits-Check, Datenvalidierungen oder Protokollierung möglichst sauber zu trennen (Abbildung 1). Die Grundidee der aspektorientierten Programmierung ist es, diese Core-Level-Concerns getrennt von den orthogonal zu ihnen stehenden System-Level-Concerns zu entwickeln und erst im letzten Schritt zu verflechten.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook