Komponentenbasierte Software-Engineering

Komponentenbasierte Software-Engineering (CBSE), auch genannt Komponentenbasierte Entwicklung (CBD), ist ein Zweig der Software -Engineering, der die betont Trennung von Bedenken in Bezug auf die weitreichende Funktionalität, die während eines bestimmten Zeitpunkts verfügbar ist Software System. Es ist ein wiederverwendungsbasierter Ansatz zur Definition, Implementierung und Komposition locker gekoppelter unabhängiger Komponenten in Systeme. Diese Praxis zielt darauf ab, kurzfristig und langfristig für die Software selbst und für Organisationen, die diese Software sponsern, ein ebenso weitreichendes Maß an Vorteilen zu erzielen.
Software -Engineering -Praktiker betrachten Komponenten als Teil der Startplattform für Serviceorientierung. Komponenten spielen diese Rolle beispielsweise in Internetdiensteund in jüngerer Zeit in Service-orientierte Architekturen (SOA), wobei eine Komponente vom Webdienst in a konvertiert wird Service und erbt anschließend weitere Eigenschaften über die einer gewöhnlichen Komponente hinaus.
Komponenten können Ereignisse produzieren oder konsumieren und können verwendet werden ereignisgesteuerte Architekturen (EDA).
Definition und Eigenschaften von Komponenten
Ein Individuum Softwarekomponente ist ein Softwarepaket, a Internetservice, a Webressource, oder ein Modul das fasst einen Satz verwandter Zusammenhänge zusammen Funktionen (oder Daten).
Alle Systemprozesse werden in separate Komponenten eingesetzt, sodass alle Daten und Funktionen in jeder Komponente semantisch miteinander verbunden sind (genau wie mit dem Inhalt der Klassen). Aufgrund dieses Prinzips wird oft gesagt, dass Komponenten sind modular und zusammenhängend.
In Bezug auf die systemweite Koordination kommunizieren Komponenten übereinander über einander über Schnittstellen. Wenn eine Komponente den Rest des Systems Dienste anbietet, wird a übernommen bereitgestellt Schnittstelle, die die Dienste angibt, die andere Komponenten nutzen können und wie sie dies können. Diese Schnittstelle kann als Signatur der Komponente angesehen werden - der Client muss nicht über die inneren Arbeitswerke der Komponente (Implementierung) informiert werden, um dies zu verwenden. Dieses Prinzip führt zu Komponenten, die als bezeichnet werden eingekapselt. Die UML-Abbildungen innerhalb dieses Artikels stellen die bereitgestellten Schnittstellen durch einen an der Außenkante der Komponente gebundenen Lollipop-Symbol dar.
Wenn jedoch eine Komponente eine andere Komponente verwenden muss, um zu funktionieren, wird a übernommen a Gebraucht Schnittstelle, die die Dienste angibt, die sie benötigt. In den UML -Abbildungen in diesem Artikel, verwendete Schnittstellen werden durch ein offenes Sockelsymbol dargestellt, das an der Außenkante der Komponente befestigt ist.

Ein weiteres wichtiges Attribut von Komponenten ist, dass sie es sind substituierbar, damit eine Komponente eine andere (zur Entwurfszeit oder zur Laufzeit) ersetzen kann, wenn die Nachfolgekomponente die Anforderungen der Anfangskomponente (ausgedrückt über die Schnittstellen) erfüllt. Infolgedessen können Komponenten entweder durch eine aktualisierte Version oder eine Alternative ersetzt werden, ohne das System zu brechen, in dem die Komponente arbeitet.
Als ein Faustregel Für Ingenieure, die Komponenten ersetzen, kann die Komponente B die Komponente A sofort ersetzen, wenn die Komponente B mindestens die Komponente A bereitstellt und nicht mehr als die verwendete Komponente verwendet wird.
Softwarekomponenten haben häufig die Form von Objekte (nicht Klassen) oder Sammlungen von Objekten (von Objekt orientierte Programmierung) in einer binären oder textuellen Form, die an einige haften Schnittstellenbeschreibung Sprache (IDL) damit die Komponente autonom aus anderen Komponenten in a existieren kann Computer. Mit anderen Worten, eine Komponente wirkt, ohne ihren Quellcode zu ändern. Obwohl sich das Verhalten des Quellcodes der Komponente basierend auf der Erweiterbarkeit der Anwendung ändern kann, die vom Schriftsteller bereitgestellt wird.
Wenn auf eine Komponente über Ausführungskontexte oder Netzwerkverbindungen hinweg zugegriffen oder gemeinsam genutzt werden soll Serialisierung oder Marshalle werden häufig verwendet, um die Komponente an sein Ziel zu liefern.
Wiederverwendbarkeit ist ein wichtiges Merkmal einer hochwertigen Softwarekomponente. Programmierer sollten Softwarekomponenten so entwerfen und implementieren, dass viele verschiedene Programme sie wiederverwenden können. Außerdem, Komponentenbasierte Usability-Tests sollte berücksichtigt werden, wenn Softwarekomponenten direkt mit Benutzern interagieren.
Es erfordert erhebliche Anstrengung und Sensibilisierung, um eine Softwarekomponente zu schreiben, die effektiv wiederverwendbar ist. Die Komponente muss sein:
- vollständig dokumentiert
- gründlich getestet
- robust - mit umfassender Eingangsvaliditätsprüfung
- in der Lage, angemessen zurückzugeben Fehlermeldungen oder Rückgabecodes
- entworfen mit einem Bewusstsein, dass es es Wille zu unvorhergesehenen Verwendungen eingesetzt werden
In den 1960er Jahren bauten Programmierer wissenschaftlich Subroutine Bibliotheken, die in einer breiten Palette von technischen und wissenschaftlichen Anwendungen wiederverwendbar waren. Obwohl diese Unterroutine-Bibliotheken gut definiert wiederverwendet wurden Algorithmen In wirksamer Weise hatten sie eine begrenzte Anwendungsdomäne. Kommerzielle Websites erstellten routinemäßig Anwendungsprogramme aus wiederverwendbaren Modulen in geschriebenen Modulen Montagesprache, Cobol, PL/1 und andere zweite- und Sprachen der dritten Generation Verwenden von beiden System und Benutzeranwendungsbibliotheken.
Ab 2010[aktualisieren], moderne wiederverwendbare Komponenten verkapulieren beide Datenstrukturen und die Algorithmen, die auf die Datenstrukturen angewendet werden. Komponentenbasierte Software-Engineering baut auf früheren Theorien von auf Softwareobjekte, Softwarearchitekturen, Software -Frameworks und Software -Designmusterund die umfangreiche Theorie von Objekt orientierte Programmierung und die objektorientiertes Design von all diesen. Es behauptet, dass Softwarekomponenten, wie die Idee von Hardware Komponenten, zum Beispiel in Telekommunikation, verwendet,[1] kann letztendlich austauschbar und zuverlässig gemacht werden. Andererseits wird argumentiert, dass es ein Fehler ist, sich eher auf unabhängige Komponenten als auf den Rahmen zu konzentrieren (ohne den sie nicht existieren würden).[2]
Geschichte
Die Idee das Software sollte komponentiert sein - gebaut aus vorgefertigten Komponenten - wurde zuerst mit Douglas McIlroyAdresse an der NATO Konferenz über Softwareentwicklung in Garmisch, Deutschland, 1968 mit dem Titel " Massenproduzierte Softwarekomponenten.[3] Die Konferenz machte sich auf den Weg, um dem sogenannten Konferenz entgegenzuwirken Software -Krise. McIlroys anschließende Aufnahme von Rohre und Filter in die Unix Betriebssystem war die erste Implementierung einer Infrastruktur für diese Idee.
Brad Cox von Schrittstein Das moderne Konzept einer Softwarekomponente weitgehend definiert.[4] Er rief sie an Software -ICS und wollte eine Infrastruktur und einen Markt für diese Komponenten erstellen, indem die Erfindung des Ziel c Programmiersprache. (Er fasst diese Ansicht in seinem Buch zusammen Objektorientierte Programmierung - ein evolutionärer Ansatz 1986.)
Die Softwarekomponenten werden in zwei verschiedenen Kontexten und zwei Arten verwendet: i) Verwenden von Komponenten als Teile zum Erstellen einer einzelnen ausführbaren Datei oder ii) jede ausführbare Datei wird als Komponente in einer verteilten Umgebung behandelt, in der Komponenten miteinander zusammenarbeiten, indem sie Internet oder Intranet miteinander zusammenarbeiten Kommunikationsprotokolle für IPC (Inter Process Communications). Das Obige gehört zur früheren Art, während das unten zu spätere Art gehört.
IBM führte den Weg mit ihrem Systemobjektmodell (SOM) Anfang der neunziger Jahre. Als Reaktion, Microsoft ebnet den Weg für die tatsächliche Bereitstellung von Komponentensoftware mit Objektverbindung und Einbettung (OLE) und Komponentenobjektmodell (Com).[5] Ab 2010[aktualisieren] Es gibt viele erfolgreiche Softwarekomponentenmodelle.
Die Architektur
Ein Computer, der mehrere Softwarekomponenten ausführt Anwendungsserver. Diese Kombination von Anwendungsservern und Softwarekomponenten wird normalerweise aufgerufen verteiltes Computer. Typische reale Anwendung davon ist in z. B. Finanzanwendungen oder Geschäftssoftware.
Komponentenmodelle
A Komponentenmodell ist eine Definition von Eigenschaften, dass Komponenten Methoden und Mechanismen für die Zusammensetzung von Komponenten erfüllen müssen.[6]
In den letzten Jahrzehnten haben Forscher und Praktiker mehrere Komponentenmodelle mit unterschiedlichen Merkmalen vorgeschlagen. Eine Klassifizierung der vorhandenen Komponentenmodelle ist in angegeben.[6][7] Beispiele für Komponentenmodelle sind: Enterprise Javabeans (EJB) Modell, Komponentenobjektmodell (Com) Modell, .NETZ Modell, X-Man-Komponentenmodell,[8] und Maklerarchitektur der gemeinsamen Objektanfragen (CORBA) Komponentenmodell.
Technologien
- Geschäftsgegenstand Technologien
- Komponentenbasiert Software -Frameworks Für bestimmte Bereiche
- Erweiterte Komponenten -Framework
- Modellierungsrahmen des Erdsystems (ESMF)
- Mash IoT -Plattform für Asset Management[9]
- Koala -Komponentenmodell, das für Software in der Unterhaltungselektronik entwickelt wurde[10][11]
- React (JavaScript Library)
- Software -Kommunikationsarchitektur (JTRS SCA)
- Komponentenorientierte Programmierung
- Bündel gemäß den definierten durch die Osgi Serviceplattform
- Komponentenobjektmodell (Ocx/activex/com) und DCOM aus Microsoft
- Tascs - Scidac Zentrum für Technologie für fortschrittliche wissenschaftliche Komponentensoftware
- Eiffel -Programmiersprache
- Enterprise Javabeans aus Sun Microsystems (jetzt Orakel)
- Flow-basierte Programmierung
- Fraktaler Komponentenmodell aus Objektweb
- Mittelkomponenten -Framework für Midgard und Php
- Oberon, Komponente Pascal, und Blackbox Component Builder
- rcos Methode des komponentenbasierten modellgetriebenen Designs von Unu-iist
- Sofa -Komponentensystem aus Objektweb
- Das
System.comPonentModel
Namespace in Microsoft .net - Einheit entwickelt von Einheitstechnologien
- Unwirklicher Motor entwickelt von Epische Spiele
- Uno von dem OpenOffice.org Office Suite
- Vcl und CLX aus Borland und ähnlich frei Lcl Bibliothek.
- XPCOM aus Mozilla Foundation
- Zusammengesetzte Dokument Technologien
- Aktive Dokumente in Oberon -System und Blackbox Component Builder
- KPARTS, das Kde zusammengesetzte Dokumenttechnologie
- Objektverbindung und Einbettung (OLE)
- Opendoc
- Verteiltes Computer Softwarekomponenten
- .NET Remoting aus Microsoft
- 9p verteiltes Protokoll entwickelt für Plan 9und verwendet von Inferno und andere Systeme.
- Corba und die CORBA -Komponentenmodell von dem Objektverwaltungsgruppe
- D-Bus von dem freedesktop.org Organisation
- DCOM und spätere Versionen von Com (und com+) von Microsoft
- Dsom und SO M aus IBM (jetzt verschrottet)
- Eis aus Zeroc
- Java ee aus Sonne
- Kompik[12] aus Sic
- Universelle Netzwerkobjekte (Uno) von OpenOffice.org
- Internetdienste
- Zope von der Zope Corporation
- Axciom (Das Komponenten-Framework für verteilte, in Echtzeit und eingebettete Systeme) nach Beheben es
- Kohorte Die plattformübergreifende Laufzeit für die Ausführung und Verwaltung von robusten und zuverlässigen, dienstgerätigten, komponentenbasierten Anwendungen nach isandlatech
- DX-MAN-Servicemodell[13]
- Generische Programmierung Betont die Trennung von Algorithmen von der Datenrepräsentation
- Schnittstellenbeschreibung Sprachen (IDLs)
- Offene Service -Schnittstellen -Definitionen öffnen (Osids)
- Teil von beiden Com und Corba
- Plattformunabhängige Komponentenmodellsprache
- SIDL - Wissenschaftliche Schnittstelle Definitionssprache
- SEIFE Idl aus World Wide Web Konsortium (W3C)
- WDDX
- XML-RPCder Vorgänger von SEIFE
- Kontrollinversion (IOC) und einfaches altes C ++/Java -Objekt (POCO/POJO) -Komponenten -Frameworks
- Rohre und Filter
- UNIX -Betriebssystem
Siehe auch
- Geschäftslogik
- Modulare Programmierung
- Service Component Architecture (SCA)
- Software -Kommunikationsarchitektur (JTRS SCA)
- Softwarekomponente von Drittanbietern
- Internetservice
- Webkomponenten
Verweise
- ^ Foukalas et al "Protokollrekonfiguration unter Verwendung von Komponentenbasis" Design "
- ^ Wallace, Bruce (19. Mai 2010). "Ein Loch für jede Komponente und jede Komponente in seinem Loch". Existenzielle Programmierung.
Es gibt keine Komponente
- ^ McIlroy, Malcolm Douglas (Januar 1969). "Massenproduzierte Softwarekomponenten" (PDF). Software Engineering: Bericht einer Konferenz, die vom NATO Science Committee, Garmisch, Deutschland, vom 7. bis 11. Oktober 1968 gesponsert wird. Abteilung für wissenschaftliche Angelegenheiten, NATO. p. 79.
- ^ Rainer Niekamp. "Softwarekomponentenarchitektur" (PDF). Gestión de Congresos - Cimne/Institut für wissenschaftliches Computer, Tu Braunschweig. p. 4. Abgerufen 2011-07-29.
Das moderne Konzept einer Softwarekomponente, die größtenteils durch Brad Cox von Stepstone, => Objektive-C-Programmiersprache definiert ist
- ^ Raphael Gfeller (9. Dezember 2008). "Aktualisierung der komponentenbasierten Anwendung". HSR - Hochschule für Technik Rappers. p. 4. Abgerufen 2011-07-29.
1990 erfindet IBM ihr Systemobjektmodell. 1990, als Reaktion veröffentlichte Microsoft Ole 1.0 Ole Custom Controls (OCX)
[Permanent Dead Link] - ^ a b Crnkovic, i.; Sentilles, S.; Vulgarakis, a.; Chaudron, M. R. V. (2011). "Ein Klassifizierungsrahmen für Softwarekomponentenmodelle". IEEE -Transaktionen auf Software -Engineering. 37 (5): 593–615. doi:10.1109/tse.2010.83. S2CID 15449138.
- ^ Lau, Kung-Kiu; Wang, Zheng (2007). "Softwarekomponentenmodelle". IEEE -Transaktionen auf Software -Engineering. 33 (10): 709–724. doi:10.1109/tse.2007.70726. ISSN 0098-5589.
- ^ Lau, Kung-Kiu; Velasco Elizondo, Perla; Wang, Zheng (2005). Heineman, George T.; Crnkovic, Ivica; Schmidt, Heinz W.; Stafford, Judith A.; Szyperski, Clemens; Wallnau, Kurt (Hrsg.). "Exogene Anschlüsse für Softwarekomponenten". Komponentenbasierte Software-Engineering. Vorlesungsnotizen in Informatik. Springer Berlin Heidelberg. 3489: 90–106. doi:10.1007/11424529_7. ISBN 9783540320494. S2CID 17971442.
- ^ MASH definiert Vermögenswerte als Personen, Eigenschaften und Informationen und Verwaltung als Überwachung, Steuerung und Konfiguration. Präsentiert auf der IEEE IOT -Konferenz 2013 in Mountain View MASH enthält eine vollständige IDE, Android -Kunde und Laufzeit. "Mash YouTube Channel"
- ^ Ein komponentenorientierter Ansatz ist eine ideale Möglichkeit, um die Vielfalt der Software in der Unterhaltungselektronik zu bewältigen. Das Koala -Modell, das für eingebettete Software in TV -Sets verwendet wird, ermöglicht eine verspätete Bindung wiederverwendbarer Komponenten ohne zusätzlichen Overhead. [1]
- ^ Komponentenmodell für eingebettete Geräte wie TV, das von Philips basierend auf Papier von Van Omermering, R.: Koala, einem Komponentenmodell für Produktsoftware für Unterhaltungselektronik, entwickelt wurde [2] Archiviert 2014-08-09 bei der Wayback -Maschine
- ^ Arad, Cosmin (April 2013). Programmiermodell und Protokolle für rekonfigurierbare verteilte Systeme (PDF). Doktorarbeit. Stockholm, Schweden: KTH Royal Institute of Technology. ISBN 978-91-7501-694-8.
- ^ Arellanes, Damian; Lau, Kung-Kiu (2017). "Exogene Anschlüsse für die hierarchische Dienstzusammensetzung" (PDF). 2017 IEEE 10. Konferenz über Service-orientierte Computing und Anwendungen (SOCA). Kanazawa: IEEE: 125–132. doi:10.1109/soca.2017.25. ISBN 9781538613269. S2CID 31211787.
Weitere Lektüre
- Brad J. Cox, Andrew J. Novobilski (1991). Objektorientierte Programmierung: ein evolutionärer Ansatz. 2. Aufl. Addison-Wesley, Reading ISBN0-201-54834-8
- Bertrand Meyer (1997). Objektorientierte Softwarekonstruktion. 2. Aufl. Prentice Hall.
- George T. Heineman, William T. Councill (2001). Komponentenbasierte Software-Engineering: Zusammenstellen der Teile zusammen. Addison-Wesley Professional, Reading 2001 ISBN0-201-70485-4
- Richard sehr (2001). Komponentenbasiertes Geschäft: Plug & Play. London: Springer. ISBN1-85233-361-8
- Clemens Szyperski, Dominik Gruntz, Stephan Murer (2002). Komponentensoftware: Jenseits der objektorientierten Programmierung. 2. Aufl. ACM Press - Pearson Educational, London 2002 ISBN0-201-74572-0
Externe Links
- Warum die Wiederverwendung von Software fehlgeschlagen ist und wie es für Sie funktioniert durch Douglas C. Schmidt
- Was ist die wahre Essenz und Realität von CBD? (Der Beweis, der vorhanden ist, ist ein fehlerhaftes CBD -Paradigma)
- umfassende Liste von Komponentensysteme an SourceForge
- Kurze Einführung in Real COP (Komponentenorientierte Programmierung) Durch die Verwendung einer kleinen GUI -Anwendung als Beispiel