Plugin (Entwurfsmuster)
# Plugin (Entwurfsmuster)

Das Plugin (deutsch: Steckmodul) ist ein Entwurfsmuster aus dem Bereich der (objektorientierten) Softwareentwicklung und gehört zur Kategorie der Verhaltensmuster (Behavioural Patterns). Es dient der Institutionalisierung (klaren Aufteilung) in

* öffentliche (engl. public) Teile der Software (i. d. R. Klassen / Methoden), die vom Nutzer der Software verwendet werden dürfen (veröffentlichte Teile; diese werden mit dem Plugin beschrieben), und
* solche Teile der Software, die nicht verwendet bzw. erweitert werden sollen (nicht-öffentliche Teile).

Die Verwendung ist oft eine Erweiterung im Sinne von "Funktionalität hinzufügen".

Ein Plugin besteht aus einem Erweiterungspunkt (engl. extension point) und einer oder mehreren nutzenden Erweiterungen (engl. extensions).

## Verwendung

Plugins werden vor allem in Basissoftware (Frameworks, Menge von Basisklassen) eingesetzt. Generell empfiehlt sich die Verwendung von Plugins, wenn man die Software anderen Softwareentwicklern zur Einbindung zur Verfügung stellen möchte. Ein Plugin definiert, welcher Teil der Software benutzt und wie dieser Teil erweitert werden darf.

Ein Vorteil ist, dass die Basissoftware in den nicht veröffentlichten Bereichen problemlos weiterentwickelt werden kann. Die Art der Nutzung oder Erweiterung der Basissoftware wird standardisiert und damit leichter austauschbar.

Ein Nachteil ist, dass das Plugin extra beschrieben werden muss. Plugins schränken die Erweiterungsmöglichkeiten ein und sind in der Programmierung performance-intensiver.

## Beispiele

Die Basissoftware ist eine Personenverwaltung, mit der Personen und ihre Adressen erfasst/geändert/gelöscht werden können. Sie stellt zwei Plugins mit den Erweiterungspunkten "Person_anlegen" und "Person_ändern" zur Verfügung. Die Basissoftware soll in einem Judoverein eingesetzt werden.

Der beauftragte Softwareentwickler

* nutzt den Erweiterungspunkt "Person_anlegen"
   * mit einer Erweiterung für die Erfassung des Eintrittjahres in den Verein
* nutzt den Erweiterungspunkt "Person_ändern"
   * mit einer Erweiterung für die Dokumentation der Änderung der Gewichtsklasse und
   * mit einer Erweiterung für die Dokumentation einer bestandenen Gürtelprüfung
* hat aber keine Möglichkeit den Vorgang <Person löschen> zu beeinflussen bzw. zu erweitern.

Ein bekanntes Beispiel für ein Plugin-basiertes Framework ist z. B. Eclipse, eine in Java geschriebene IDE.

