Further, those data types should closely match the semantics of the data source, so that new data providers can be added easily and independently. We also envision adding helper and wrapper classes to the data provider ADTs. The helper classes will factor common code, and the wrapper classes will allow us to create interfaces for data consumers independent of the data provider interfaces. We expect that matching data source and data provider semantics independently will be important. Much iteration will be needed before these interfaces will be correct.
Components require at least one more level of abstraction in their design.
These data types must closely match the data types and concepts that application programmers are already familiar with. The best way to do this is iterative development alternating between data interface specification and implementation. A component application framework is needed, consisting of well-defined data types and helper classes that factor common code and provide commonly needed services. Developers need to be convinced of the overall usefulness of component software by prototypes and demonstration projects. Clemens Szyperski, Component Software, Addison-Wesley Longman, 1998.