architecture for creating reusable software components
