Em se tratando de modelos de desenvolvimento de software, a parte de um sistema que seja não trivial, quase independente, substituível, que desempenhe uma função clara e que provenha a execução de tarefas por meio de um conjunto de interfaces com alguma abstração lógica é definida como