We have seen the use of signals and slots in GUI's and in abstract data models. Using signals and slots is appropriate if you are creating objects that should be kept as separate from one another as possible, while still being able to communicate with each other. Signals and slots are an efficient and maintainable way of creating highly reusable software components.