Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Software component
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Modular unit of software}} A '''software component''' is a [[Modular design|modular]] unit of [[software]] that [[Separation of concerns|encapsulates]] specific functionality.<ref name="pandey"/> The desired characteristics of a component are [[reusability]] and [[maintainability]].<ref name="pandey">{{cite web |last1=Pandey |first1=Pankaj |date=11 July 2023 |title=Tutorial notes: Software Components and Connectors |url=https://medium.com/@publicapplicationcenter/tutorial-notes-software-components-and-connectors-a425bfd984df |website=medium.com |access-date=14 May 2024}}</ref> ==Value== Components allow [[software development]] to assemble software with reliable parts rather than writing [[source code|code]] for every aspect; allowing for [[Systems development life cycle|implementation]] to be more like factory assembly than custom building. ==Attributes== Desirable attributes of a component include but are not limited to: * [[Cohesion (computer science)|Cohesive]] {{endash}} [[encapsulation (computer programming)|encapsulates]] related [[function (computer science)|functionality]] * [[Reusability|Reusable]] * [[robustness (computer science)|Robust]] * ''Substitutable'' {{endash}} can be replaced by another component with the same interface * [[software documentation|Documented]] * [[software testing|Tested]] ==Third-party== Some components are built in-house by the same organization or team building the [[software system]]. Some are [[Third-party software component|third-party]], developed elsewhere and assembled into the software system.<ref>{{cite web |last1=Yadav |first1=Sunny |date=16 April 2024 |title=Types of Software Components — With Examples |url=https://www.linkedin.com/pulse/types-software-components-examples-sunny-yadav-ducaf |website=[[LinkedIn]] |access-date=14 May 2024}}</ref> ==Component-based software engineering== For large-scale systems, [[component-based software engineering|component-based development]] encourages a disciplined process to manage [[Programming complexity|complexity]].<ref>{{cite web |author=[[Douglas C. Schmidt]] |title=Why Software Reuse has Failed and How to Make It Work for You |url=http://www.dre.vanderbilt.edu/~schmidt/reuse-lessons.html |access-date=14 May 2024}}</ref> ==Framework== Some components conform to a framework technology that allows them to be consumed in a well-known way. Examples include: [[Common Object Request Broker Architecture|CORBA]], [[Component Object Model|COM]], [[Enterprise JavaBeans]], and the [[.NET Framework]].<ref>{{cite journal | last1 = Crnkovic | first1 = I. | last2 = Sentilles | first2 = S. | last3 = Vulgarakis | first3 = A. | last4 = Chaudron | first4 = M. R. V. | year = 2011| title = A Classification Framework for Software Component Models | journal = IEEE Transactions on Software Engineering | volume = 37 | issue = 5| pages = 593–615 | doi = 10.1109/TSE.2010.83 | s2cid = 15449138 }}</ref><ref>{{Cite journal|last1=Lau|first1=Kung-Kiu|last2=Wang|first2=Zheng|date=2007|title=Software Component Models|journal=IEEE Transactions on Software Engineering|volume=33|issue=10|pages=709–724|doi=10.1109/TSE.2007.70726|issn=0098-5589}}</ref> ==Modeling== [[File:Component-based-Software-Engineering-example2.png|thumb|550px|An example of interdependent components modeling a reservation system in [[Unified Modeling Language|UML]]]] Component design is often modeled visually. In [[Unified Modeling Language]] (UML) 2.0 a 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. ==History== The idea of [[reusability|reusable]] software components was promoted by [[Douglas McIlroy]] in his presentation at the [[NATO Software Engineering Conferences|NATO Software Engineering Conference]] of 1968.<ref>{{cite web |url=http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF |title=Mass produced software components |first=Malcolm Douglas |last=McIlroy |work=Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7-11 Oct. 1968 |publisher=Scientific Affairs Division, NATO |date=January 1969 |page=79}}</ref> (One goal of that conference was to resolve the so-called [[software crisis]] of the time.) In the 1970s, McIlroy put this idea into practice with the addition of the [[Pipeline (Unix)|pipeline]] feature to the [[Unix]] [[operating system]]. [[Brad Cox]] refined the concept of a software component in the 1980s.<ref>{{cite web | access-date = 2011-07-29 | author = Rainer Niekamp | page = 4 | publisher = Gestión de Congresos - CIMNE/Institute for Scientific Computing, TU Braunschweig | title = Software Component Architecture | quote = The modern concept of a software component largely defined by Brad Cox of Stepstone, => Objective-C programming language | url = http://congress.cimne.upc.es/cfsi/frontal/doc/ppt/11.pdf | archive-date = 2012-03-28 | archive-url = https://web.archive.org/web/20120328081234/http://congress.cimne.upc.es/cfsi/frontal/doc/ppt/11.pdf | url-status = dead }}</ref> He attempted to create an infrastructure and market for reusable third-party components by inventing the [[Objective-C]] programming language.<ref>{{cite book |author=[[Brad Cox]] |title=Object Oriented Programming: An Evolutionary Approach | publisher=Addison Wesley | year=1991 | isbn=0-201-54834-8}}</ref> [[IBM]] introduced [[IBM System Object Model|System Object Model]] (SOM) in the early 1990s.<ref name=claims>{{cite web | access-date = 2011-07-29 | author = Raphael Gfeller | date = December 9, 2008 | page = 4 | publisher = HSR - Hochschule für Technik Rapperswill | title = Upgrading of component-based application | quote = 1990, IBM invents their System Object Model. 1990, as a reaction, Microsoft released OLE 1.0 OLE custom controls (OCX) | url = http://wiki.ita.hsr.ch/SemProgAnTr/files/Automated_upgrading_of_component.Präsentation.pptx }}{{Dead link|date=July 2019 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> [[Microsoft]] introduced [[Component Object Model]] (COM) in the early 1990s. Microsoft built many domain-specific component technologies on COM, including [[Distributed Component Object Model]] (DCOM), [[Object Linking and Embedding]] (OLE), and ActiveX. ==References== {{Reflist}} [[Category:Software architecture]] [[Category:Software development]] [[Category:Software engineering]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite book
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:Dead link
(
edit
)
Template:Endash
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)