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.
The system can be designed visually with the 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 refined the concept of a software component in the 1980s.[4] He attempted to create an infrastructure and market for reusable third-party components by inventing the Objective-C programming language.[5]
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
- ^ Brad Cox (1991). Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.