What are software components?
"Component" is a word used in various contexts and with this I imagine it is difficult to define generically.
By definition it is a part that composes a whole. For example, a subsystem.
It is also said that components are reusable. It is also referred to as "componentable" or "componentized" architectures.
Do https://www.quora.com/What-is-a-software-component I removed the following definition, which helped to some extent.
A component is a self-contained system that has one or more input channels and one or more output channels. Without the entrances he has nothing to do. Without the exits he cannot serve a purpose.
Note that a function gets input through its arguments and returns a result, so it also has inputs and outputs. Once you receive an entrance it returns an exit. The entrance and exit always walk married.
A true component can behave this way too, but the input and output channels can also operate independently of each other - that is, the exits do not need to walk married with the entrances.
The essential point is that a component can receive inputs from one or more channels and send outputs to one or more channels, but what happens between these operations is hidden from the views. The concerns of the component are all of it itself - a black box for the world. All that the world requires is a contract (of what it needs and what it provides) through which some use can be made of it in a larger system of connected components.
A typical DVD player is a component. It receives input through a DVD inserted into its drawer and its remote control and returns audio and video outputs. A software component is not different; however, it should be noted that its input/output channels are typically asynchronous.
Anyway, what are components?
What examples of the scope of the software can we use to illustrate them?
When do I know I'm developing a component?
The "official" definition given at a Conference on Components in 1996 is: " A component is a composition unit with contractually specified interfaces and with explicit context dependencies only A software component can be deployed independently and is subject to third-party composition."
Basically software components is a piece of independent software, but can be used by other software. It is very similar to a library, that is, a person creates a component to access a database. Instead of creating a class or code to access the database, I include this component with the code already created to access my database. It is a subset of a software because it can be reused, it can be contained in a software, but independent because it also works alone/separated from other systems. Software components are focused on reuse.
This UFCG link gives the concept by several authors (including the definition I put): http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/comp/definicoes.htm
Already in this link gives the same example I quoted:
There it is written so in the subtitle CBD (Component-Based Development): "For example, if a programmer creates a component to access a client in a corporate database, no other programmer will have to write such functionality again. "
Finally, this link also talks about how it suppresses the deficiencies of development with POO paradigm, which is the best currently accepted: https://www.maxwell.vrac.puc-rio.br/5244/5244_3.PDF