Eine Grundregel beim Builden modularer Softwaresysteme ist die Vermeidung starrer Verbindungen zwischen den Komponenten. Die starre Integration von Komponenten erschwert die Assemblierung der einzelnen Teile in unterschiedlichen Konfigurationen oder die Ersetzung einer Komponente durch eine andere Implementierung, ohne dass unzählige Änderungen im gesamten System anfallen.
Die lose Kopplung in Eclipse wird zum Teil durch den Mechanismus von Erweiterungen und Erweiterungspunkten erzielt. Als einfachste Metapher zur Beschreibung von Erweiterungen und Erweiterungspunkten können Netzsteckdosen angeführt werden. Die Buchse ist vergleichbar mit dem Erweiterungspunkt, während der Stecker (oder die daran angeschlossene Glühlampe) die Erweiterung darstellt. Wie bei elektrischen Anschlüssen gibt es auch bei Erweiterungspunkten eine breite Palette von Formen und Größen, und nur diejenigen Erweiterungen, die für den jeweiligen Erweiterungspunkt konzipiert wurden, passen auch.
Wenn ein Plug-in anderen Plug-ins die Erweiterung oder Anpassung seiner eigenen Funktionalität ermöglichen will, so legt es einen Erweiterungspunkt fest. Der Erweiterungspunkt legt einen Vertrag fest, normalerweise eine Kombination aus XML-Markup und Java-Schnittstellen, dessen Bedingungen die Erweiterungen entsprechen müssen. Plug-ins, die sich mit diesem Erweiterungspunkt verbinden wollen, müssen diesen Vertrag in ihre Erweiterung aufnehmen (implementieren). Das Wichtigste hierbei ist, dass das Plug-in, das erweitert wird, jenseits des Umfangs der vertraglichen Vereinbarung mit dem Erweiterungspunkt keine weiteren Kenntnisse über das Plug-in besitzt, mit dem es verbunden ist. Dies ermöglicht, dass Plug-ins, die von verschiedenen Einzelpersonen oder Unternehmen gebuildet wurden, nahtlos interagieren können, selbst wenn sie nicht viel übereinander wissen.
Die Eclipse-Plattform verfügt über zahlreiche Anwendungen, die dem Konzept von Erweiterungen und Erweiterungspunkten folgen. Manche Erweiterungen sind vollständig deklarativ, was bedeutet, dass sie überhaupt keinen Code ergänzend beisteuern. Ein Erweiterungspunkt stellt zum Beispiel angepasste Tastenbelegungen zur Verfügung, während einer anderer angepasste Dateianmerkungen definiert (so genannte Markierungen). Keiner dieser Erweiterungspunkte benötigt jedoch Code seitens der Erweiterung.
Eine andere Kategorie von Erweiterungspunkten dient der Außerkraftsetzung des Standardverhaltens einer Komponente. Die Java-Entwicklungstools enthalten zum Beispiel ein Codeformatierungsprogramm, stellen aber außerdem auch einen Erweiterungspunkt für Codeformatierungsprogramme von Drittherstellern bereit, die dort angebunden werden können. Das Plug-in für Ressourcen verfügt über einen Erweiterungspunkt, der bestimmten Plug-ins ermöglicht, die Implementierung grundlegender Dateioperationen wie Versetzen und Löschen zu ersetzen.
Wiederum eine andere Kategorie von Erweiterungspunkten wird zum Gruppieren zusammengehöriger Elemente in der Benutzerschnittstelle verwendet. Erweiterungspunkte für die Bereitstellung von Ansichten, Editoren und Assistenten in der Benutzerschnittstelle ermöglichen dem Plug-in der Basisbenutzerschnittstelle, allgemeine Funktionen zu gruppieren, zum Beispiel alle Importassistenten in einem einzelnen Dialogfenster zusammenzufassen, und eine konsistente Art der Darstellung von Benutzerschnittstellenergänzungen aus einer breit gefächerten Palette anderer Plug-ins zu definieren.
Erweiterungen (Plug-in-Editor)
Erweiterungspunkte (Plug-in-Editor)