Currently,the major goal of the component model is to support the development of a visual gui building tool where simple and compound components, both built in and third party, can be layed out in a panel and wired together using events, attributes and methods to create a non-trivial application.
Here's a quote I found in an article discussing the UML and how it defines components:
"component: A physical, replaceable part of a system that packages implementation and provides the realization of a set of interfaces. A component represents a physical piece of implementation of a system, including software code (source, binary or executable) or equivalents such as scripts or command files ."
- -UML 1.3 Specification
I'm just learning about components and have a friend thats an expert in this area and is advising me and trying to steer me in the right direction. I've been thinking of PythonCard Widgets ( simple and compound ) as components, and that's really not the case. It's possible for a Widget to be a component, but only if it fulfills the responsibilities of some component model. I'm still reading up on what a component model really is.
The following is the state of my own personal take on components.
General statements about component models:
- A component may implement one or more interfaces.
- A component may have attributes.
- Components may communicate with other components.
- A component is an deployable entity.
- Two or more components that implement the same interface(s) are interchangeable.
This sounds just like a class, so I know I'm missing something here...
Specific statements about a possible PythonCard component model:
- A component communicates with other components via interface methods and events.
- A component's interface is defined in XML.
- A component may be serialized according to the resource model defined in XML.
Maybe leveraging Python as we have in the current resource format is a better option. Unless we're leveraging some component model that's already out there that requires XML then we're just creating a lot of extra work by going with XML.