Component-based software engineering (CBSE), also called component-based development (CBD), is a style of software engineering that aims to build software out of loosely-coupled,
modular components. It emphasizes the
separation of concerns among different parts of a
software system.
Components communicate with each other via interfaces. Each component provides an interface (called a provided interface) through which other components can use it. When a component uses another component's interface, that interface is called a used interface.
In the UML illustrations in this article, provided interfaces are represented by lollipop-symbols, while used interfaces are represented by open socket symbols.
Components must be substitutable, meaning that a component must be replaceable by another one having the same interfaces without breaking the rest of the system.
robust - with comprehensive input-validity checking
able to pass back appropriate
error messages or return codes
History
The idea that
software should be componentized - built from prefabricated components - first became prominent with
Douglas McIlroy's address at the
NATO conference on
software engineering in
Garmisch,
Germany, 1968, titled Mass Produced Software Components.[1] The conference set out to counter the so-called
software crisis. McIlroy's subsequent inclusion of
pipes and filters into the
Unixoperating system was the first implementation of an infrastructure for this idea.
Brad Cox of
Stepstone largely defined the modern concept of a software component.[2] He called them Software ICs and set out to create an infrastructure and market for these components by inventing the
Objective-C programming language. (He summarizes this view in his book Object-Oriented Programming - An Evolutionary Approach 1986.)
The software components are used in two different contexts and two kinds: i) using components as parts to build a single executable, or ii) each executable is treated as a component in a distributed environment, where components collaborate with each other using internet or intranet communication protocols for IPC (Inter Process Communications). The above belongs to the former kind, while the below belongs to the latter kind.
A computer running several software components is often called an
application server. This combination of application servers and software components is usually called
distributed computing. Typical real-world application of this is in, e.g., financial applications or business software.
Component models
A component model is a specification of components' properties.[4]
AXCIOMA (the component framework for distributed, real-time, and embedded systems) by
Remedy IT
COHORTE the cross-platform runtime for executing and managing robust and reliable distributed Service-oriented Component-based applications, by
isandlaTech
Part of the
Babel Scientific Programming Language Interoperability System (SIDL and Babel are core technologies of the
CCA and the
SciDAC TASCS Center - see above.)
^McIlroy, Malcolm Douglas (January 1969).
"Mass produced software components"(PDF). Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7-11 Oct. 1968. Scientific Affairs Division, NATO. p. 79.
^Rainer Niekamp.
"Software Component Architecture"(PDF). Gestión de Congresos - CIMNE/Institute for Scientific Computing, TU Braunschweig. p. 4. Archived from
the original(PDF) on 2012-03-28. Retrieved 2011-07-29. The modern concept of a software component largely defined by Brad Cox of Stepstone, => Objective-C programming language
^Raphael Gfeller (December 9, 2008).
"Upgrading of component-based application". HSR - Hochschule für Technik Rapperswill. p. 4. Retrieved 2011-07-29. 1990, IBM invents their System Object Model. 1990, as a reaction, Microsoft released OLE 1.0 OLE custom controls (OCX)[permanent dead link]
^
abCrnkovic, I.; Sentilles, S.; Vulgarakis, A.; Chaudron, M. R. V. (2011). "A Classification Framework for Software Component Models". IEEE Transactions on Software Engineering. 37 (5): 593–615.
doi:
10.1109/TSE.2010.83.
S2CID15449138.
^Lau, Kung-Kiu; Velasco Elizondo, Perla; Wang, Zheng (2005). "Exogenous Connectors for Software Components". In Heineman, George T.; Crnkovic, Ivica; Schmidt, Heinz W.; Stafford, Judith A.; Szyperski, Clemens; Wallnau, Kurt (eds.). Component-Based Software Engineering. Lecture Notes in Computer Science. Vol. 3489. Springer Berlin Heidelberg. pp. 90–106.
doi:
10.1007/11424529_7.
ISBN9783540320494.
S2CID17971442.
^MASH defines assets as people, property and information and management as monitoring, control and configuration. Presented at the 2013 IEEE IoT conference in Mountain View MASH includes a full IDE, Android client and runtime.
"MASH YouTube channel"
^A component-oriented approach is an ideal way to handle the diversity of software in consumer electronics. The Koala model, used for embedded software in TV sets, allows late binding of reusable components with no
additional overhead.
[1]
^Component model for embedded devices like TV developed by Philips based on paper by van Ommering, R.: Koala, a Component Model for Consumer
Electronics Product Software
[2]Archived 2014-08-09 at the
Wayback Machine
^Larsen, John (2021). React Hooks in Action With Suspense and Concurrent Mode. Manning.
ISBN978-1720043997.
George T. Heineman, William T. Councill (2001). Component-Based Software Engineering: Putting the Pieces Together. Addison-Wesley Professional, Reading 2001
ISBN0-201-70485-4