Software component
A software component is an identifiable part of a software system that provides a clear interface with other parts. In practice, this notion is broad, spanning a range of abstraction levels from individual functions to a large subsystem, such as a software engine or a web service.
Development

Component-based software engineering aims to build software out of loosely-coupled modules. Third-party components are often utilized in large systems.
Component design is often modeled visually with Unified Modeling Language (UML). Each component is shown as a rectangle, and an interface is shown as a lollipop to indicate a provided interface and as a socket to indicate consumption of an interface.
A component framework can be used to build components.[1][2] Notable examples are Enterprise JavaBeans, the Component Object Model, the .NET Framework, and CORBA.
Component-based usability testing is for components that interact with the end user.
History
The idea that software should be componentized, built from reusable 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.[3] The conference set out to counter the so-called software crisis. McIlroy's subsequent inclusion of pipes and filters into the Unix operating system was the first implementation of an infrastructure for this idea.
Brad Cox of Stepstone largely defined the modern concept of a software component.[4] 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 1986 book, Object-Oriented Programming - An Evolutionary Approach.)
Software components are used in two different contexts: 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.
IBM led the path with their System Object Model (SOM) in the early 1990s. As a reaction, Microsoft paved the way for actual deployment of component software with Object linking and embedding (OLE) and Component Object Model (COM).[5] As of 2010[update] many successful software component models exist.
References
- ^ Crnkovic, 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. S2CID 15449138.
- ^ Lau, Kung-Kiu; Wang, Zheng (2007). "Software Component Models". IEEE Transactions on Software Engineering. 33 (10): 709–724. doi:10.1109/TSE.2007.70726. ISSN 0098-5589.
- ^ 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]