Schnittstellenbasierte Programmierung - Interface-based programming
Die schnittstellenbasierte Programmierung , auch als schnittstellenbasierte Architektur bezeichnet , ist ein Architekturmuster zur Implementierung der modularen Programmierung auf Komponentenebene in einer objektorientierten Programmiersprache ohne Modulsystem. Ein Beispiel für eine solche Sprache ist Java , das (Stand 2015) kein Modulsystem auf Komponentenebene hat. Java hat ein Paketsystem , aber Java-Softwarekomponenten bestehen normalerweise aus mehreren Java-Paketen - und in jedem Fall kann die Schnittstellenprogrammierung Vorteile gegenüber der bloßen Verwendung von Java-Paketen bieten, selbst wenn eine Komponente nur aus einem einzigen Java-Paket besteht.
Schnittstellenbasierte Programmierung definiert die Anwendung als eine Sammlung von Komponenten, bei denen API-Aufrufe ( Application Programming Interface ) zwischen Komponenten nur über abstrakte Schnittstellen und nicht über konkrete Klassen erfolgen dürfen. Instanzen von Klassen werden im Allgemeinen über andere Schnittstellen unter Verwendung von Techniken wie dem Factory-Muster erhalten .
Dies soll die Modularität der Anwendung und damit ihre Wartbarkeit erhöhen . Jedoch ist eine gewisse Vorsicht geboten - lediglich eine Anwendung in beliebige Komponenten Aufspalten über Schnittstellen kommunizieren nicht an sich niedrigen garantieren Kopplung oder hoher Kohäsion , zwei weitere Attribute , die als Schlüssel für die Wartbarkeit allgemein angesehen werden.
Eine schnittstellenbasierte Architektur kann verwendet werden, wenn Dritte - oder sogar separate Teams innerhalb derselben Organisation - zusätzliche Komponenten oder Plugins für ein etabliertes System entwickeln. Die Codebasis der Eclipse-IDE ist ein Beispiel für eine schnittstellenbasierte Programmierung. Anbieter von Eclipse-Plugins müssen lediglich Komponenten entwickeln, die der vom übergeordneten Anwendungsanbieter, der Eclipse Foundation, angegebenen Schnittstelle entsprechen. In Eclipse sind sogar die ursprünglichen Komponenten wie die Java Development Tools selbst Plugins. Das ist ein wenig wie ein Handy- Hersteller eine mobile Ladeschnittstelle (Stiftanordnung, erwartete Angabe Gleichstromspannung, etc.) und sowohl für den Hersteller und Dritter , die ihr eigenes Handy-Ladegeräte , die mit dieser Standard - Interface - Spezifikation entsprechen.
Softwareentwicklung in der schnittstellenbasierten Programmierung
Die Verwendung von Schnittstellen , um die Zusammenarbeit unterschiedlicher Teams zu ermöglichen, wirft die Frage auf, wie Schnittstellenänderungen bei der schnittstellenbasierten Programmierung auftreten. Das Problem ist, dass, wenn eine Schnittstelle geändert wird, z. B. durch Hinzufügen einer neuen Methode, alter Code, der zur Implementierung der Schnittstelle geschrieben wurde, nicht mehr kompiliert wird - und im Fall von dynamisch geladenen oder verknüpften Plugins entweder nicht geladen oder verknüpft werden kann oder oder Absturz zur Laufzeit. Es gibt zwei grundlegende Ansätze, um dieses Problem zu lösen:
- Möglicherweise wird eine neue Schnittstelle mit zusätzlichen Funktionen entwickelt, die möglicherweise von der alten Schnittstelle erben
- Eine Softwareversionierungsrichtlinie wie die semantische Versionierung 2.0 kann an Schnittstellenimplementierer übermittelt werden, um vorwärtsinkompatible oder sogar rückwärtsinkompatible Änderungen in zukünftigen "Haupt" -Versionen der Plattform zu ermöglichen
Beide Ansätze wurden in der Java-Plattform verwendet.
Design nach Vertrag
Der Herausgeber der Schnittstellen verspricht im Allgemeinen, dass er die Schnittstelle in neuen "kleineren" Versionen der Software nicht ändern wird, und der Implementierer impliziert durch die Implementierung der Schnittstelle, dass er mindestens die erforderlichen Teile der Schnittstelle ohne Abweichung implementiert hat. Eine Schnittstelle kann daher als "vertragliche Vereinbarung" angesehen werden - zwischen einem Anbieter und einem Verbraucher der Schnittstelle. Wenn dieser Vertrag formeller als Softwarespezifikation dokumentiert ist, ist dies ein Beispiel für eine vertragliche Gestaltung . Das Design per Vertrag an sich schreibt jedoch nicht die Verwendung von Schnittstellen für alle Komponenten vor.
Siehe auch
- Microservices
- Schauspieler Modell
- CORBA , ein älteres komponentenbasiertes System für objektorientierte Software, das aus verschiedenen Gründen nur noch selten verwendet wird
Verweise
- C # Interface Based Development , c-sharpcorner.com
- Schnittstellenbasierte Entwicklung - Die Unified Modeling Language (UML) , devmentor.org
- Architektur einer großen Anwendung mit schnittstellenbasierter Architektur , rhyous.com, 18. Oktober 2011
- Grundlegendes zur schnittstellenbasierten Programmierung , Microsoft Developers Network , abgerufen am 16. September 2016