two principal benefits: they help in code reuse and interfaces and actual functional specifications need to be they create a common terminology. This common ter- written, but also a wide variety of housekeeping func- minology is of importance when working on teams tions, including, for example, notification of failure. If because it simplifies communications between team any one piece of the component fails, it needs to inform members. As will be shown in the next section, some the other pieces that it failed, and the other pieces need architectures, such as the SCA, use patterns. For exam- to take appropriate action to prevent further malfunc- ple, the SCA uses the factory pattern for the creation of tions. Such a notification is an inherent part of the whole applications. In the context of this discussion, patterns component, and implementing changes in the messaging for the development of waveforms and the deployment structure for this notification on any one piece requires of cognitive engines will be shown. The reader is en- the update of all other pieces that are informed of couraged to explore formal patterns using available changes in state. These types of somewhat hidden re- sources (e.g., Gamma et al. [4], Shalloway and Trott [5], lationships create a significant problem for code reuse or Kerievsky [6]). and portability because relationships that are sometimes complex need to be verified every time that code is 2.4a.4 SDR development and changed. AOP was designed to attempt to resolve this problem. design Aspect-oriented programming From the discussion above, it is clear that a software AOP allows for the creation of relationships between structure following a collection of patterns is needed for different classes. These relationships are arbitrary, but efficient large-scale development. In the case of SDR, the can be used to encapsulate the housekeeping code that underlying philosophy coupled with a collection of pat- is needed to create compatibility between two classes. terns is called an architectur