1. A method of engineering a software component, comprising: providing the software component with an input interface, an output interface, and a control interface, the control interface being configurable to receive external conditions or parameters that are specific to an environment or to a domain, and to allow said software component to automatically and dynamically adapt to said received external conditions or parameters during runtime, wherein said automatic and dynamic adaptation is not dictated by the activation of preprogrammed code within said software component; providing one or more externally modifiable adapters, the one or more externally modifiable adapters having environment-specific or domain-specific data, and being configurable to be dynamically bound to the software component in dependence upon external conditions or parameters that are specific to an environment or to a domain in which the software component is to be executed; selecting an externally modifiable adapter in dependence upon external conditions or parameters that are specific to an environment or to a domain in which the software component is to be executed; and dynamically binding the selected externally modifiable adapter to the software component in dependence upon external conditions or parameters that are specific to an environment or to a domain in which the software component is to be executed; wherein the selected externally modifiable adapter is dynamically bound to the software component using dynamic binding capability of a programming language in dependence upon external conditions or parameters that are specific to an environment or to a domain in which the software component is to be executed.