DoComponentsExist? I couldn't resist based on this identity crisis we're having on whether a component is an object or a class or a library or graphical or non-graphical, etc. Descartes must be rolling over in his grave right now ;-)
They have to exist. Sales and marketing people are talking about them. Components are not a technology. Technology people seem to find this hard to understand. Components are about how customers want to relate to software. They want to be able to buy their software a piece at a time, and to be able to upgrade it just like they can upgrade their stereo. They want new pieces to work seamlessly with their old pieces, and to be able to upgrade on their own schedule, not the manufacturer's schedule. They want to be able to mix and match pieces from various manufacturers. This is a very reasonable requirement. It is just hard to satisfy. -RalphJohnson
It's also something that happens quite regularly, Photoshop for example, is a perfect example of allowing plug in components to extend the functionality of the base program, and anyone can build plug-ins, same with audio software. Components most certainly exist.
Are components best understood by technology people as ObjectsSharedWithUsers? in the context of either (or both) visual builder tools (like JavaStudio?) or scripting languages (the best example currently being VBA within Excel but we can live in hope...)? This still calls into question their existence, but at least it preserves an interesting definition. --RichardDrake
If one of your goals is to make a system that users can extend with components, it helps to view your architecture as a big circle. In the center you have your domain code. The boundary of the circle is where you interface with the world (databases, devices, UI, etc).
Every time you add a new capability to your system, you have to change your domain classes and work your way outward to express the new capability at the edge of the circle. This is one of the reasons why most components are graphical rather than NonGraphicalComponents. Decreasing the amount of code that has to change from the center to the edge of the circle makes extensibility easier. One of the ways to avoid code change is use data and metadata extensively. For instance, if you use XML, you can add components closer to the center of the system and give them a data channel to the UI.
I am not saying that components are about users. I'm saying they are about customers. It is the people who pay for software who are driving components. That is why sales and marketing people are talking about them. They know that people want this. So, they tell us to make it, or they tell us they have it already and our management buys it and tells us to use it.
In fact, making good components requires more than a particular technology like COM or EJB. It requires understanding the problem domain and figuring out how to carve it into the right kind of pieces. Component software requires some sort of underlying structure like COM or EJB, but that is just the start. You also have to develop standard interfaces on top of it, and they have to be the right kind of interfaces.
People do buy software in pieces and plug it into the rest of their software and have it work. In that sense, components exist. They aren't perfect, and the components you want often don't exist, but the fact that you can buy a new program and have it fit in with the others you already have shows that, by my definition, components exist.