# Wiederverwendbarkeit

Wiederverwendbarkeit (engl. „Reusability“) ist ein Qualitätsmerkmal von Software-Bausteinen. Unter diesem Begriff werden Eigenschaften eines solchen Bausteines zusammengefasst, die es ermöglichen, dass dieser nicht nur im Rahmen eines einzigen Projektes eingesetzt werden kann, für welches derselbe ursprünglich mal entwickelt wurde.
Wiederverwendbare Bausteine wurden mit dem Aufkommen der modularen Programmierung und der Objektorientierten Programmierung populär, da diese Paradigmen Mittel schufen, sie auf einfache Weise mehrfach einzusetzen. Durch die Wiederverwendung von Programmcode und Programmpaketen können Codewiederholungen oder Spaghetticode vermieden werden.

## Abstraktion

Die hervorstechende Eigenschaft eines wiederverwendbaren Bausteins ist dessen abstrakter Charakter. Das bedeutet, dass der Baustein in der Regel keine weiteren Bausteine oder gar die Bedingungen eines bestimmten Softwareprojektes voraussetzt. In der objektorientierten Programmierung kann dies beispielsweise dadurch unterstützt werden, dass bei Interaktion zwischen verschiedenen Bausteinen das Event-Listener-Modell eingesetzt wird.

## Flexibilität

Die flexible Planung eines Bausteins geht Hand in Hand mit seinem abstrakten Charakter. Bei der Entwicklung eines Softwareprojektes passiert es leicht, dass bei der Planung der einzelnen Komponenten nur auf die Anforderungen bezüglich dieses Projektes geachtet wird. Soll ein Baustein wiederverwendbar sein, müssen jedoch eventuell weitere auftretende Anforderungen in Betracht gezogen werden. Am oben genannten Beispiel mit dem Event-Listener-Modell könnte dies bedeuten, dass für alle Ereignisse, die in einer Komponente auftreten können, ein solcher event erzeugt wird, unabhängig davon, ob diese offensichtlich relevant sind.

## Implementierungen
### Perl, Python und weitere Skriptsprachen

Skriptsprachen sind in Bezug auf wiederverwendbare Komponenten von jeher Vorreiter gewesen. Für die weiter verbreiteten Exemplare existieren große Sammlungen von frei verfügbaren Modulen. Legendär, jedoch nicht einzigartig, ist in dieser Hinsicht das Perl-Archiv CPAN. Auch für andere Skriptsprachen, exemplarisch sei hier Python genannt, gibt es scheinbar unerschöpfliche Quellen für solche Module. Die bekannteste Quelle ist PyPI.

### Java

Die Programmiersprache und Laufzeitumgebung Java wird unter der Bezeichnung Jakarta EE als komponentenorientierte Entwicklungsumgebung für Webservices angeboten. Aufgrund der Modularität von Java EE existieren unter dem Schlagwort Enterprise Java Beans zahllose, kommerziell angebotene, wiederverwendbare Komponenten. Außerhalb von Java EE gibt es ein ähnlich benanntes, aber sehr unterschiedlich implementiertes Konzept unter dem Namen Java Beans, ein Framework, das beschreibt, wie wiederverwendbare# Komponenten ihre Eigenschaften und Methoden zur Verfügung stellen können.

### .NET

Das Java nachempfundene .Net-Framework stellt ähnliche Möglichkeiten zur Verfügung wie Java selbst. Während das Java EE-Pendant „.NET Enterprise Services“ noch keine weite Verbreitung besitzt, hat sich im Bereich der Anwendungsentwicklung ein zu Java vergleichbarer Markt für wiederverwendbare Komponenten entwickelt.