We use the term component to denote a unit of reuse or replacement in a software system. A component could be a module or class with certain properties that make it reusable or replaceable in a given software architecture and it may depend on other components. Components are well understood, each with its own interface and context dependencies (see Figure 3 for representations of a component). It may be that a popular set of components is adopted as a standard. What is important is to have one, or possibly more than one, standard in mind when you are deciding whether or not a particular module or class is a component. Enterprise Java Beans (EJB), .Net and CORBA are examples of standards for components. The user of a component needs to adopt the same technology as that with which the component was developed.