Se quisermos abstrair de linguagens, estruturas e suas próprias interpretações particulares, a hierarquia de granularidade de software abstrato é a seguinte:
Product - application, library, service
Module - GUI, core logic, data, etc...
Component - purpose specific collection of objects
Object - collection of primitives
Primitive - numbers, functions, etc...
Puro e simples, o Produto é uma coleção de módulos funcionais conectados.
Como o próprio nome indica, a motivação de um módulo é modularidade. Ao contrário do que muitos afirmam, não implica realmente a reutilização de código. Existem muitos módulos que não são realmente reutilizáveis e não se encaixam em nada para o qual não foram projetados.
É importante separar diferentes camadas de software, o que facilita muito a implementação e a manutenção do software e, caso seja necessário reimplementar algo como um front end para uma estrutura de GUI diferente, a modularidade permite que isso aconteça de maneira fácil e segura, sem quebrar código em todo o lugar.
Um módulo encapsula uma coleção de componentes que servem a um propósito comum, conforme definido pelos requisitos do módulo. Um módulo deve ser independente e completo e, embora não seja realmente utilizável por si só, deve poder trabalhar em conjunto com qualquer implementação em conformidade.
Em termos de granularidade, o Componente fica entre o Módulo e o Objeto. O objetivo de um componente é reunir uma coleção de objetos de uso geral para formar uma unidade específica de objetivo.
Como o nome indica, ao contrário do Módulo, o Componente não é "autônomo", é parte de um todo funcional maior.
Os objetos são os blocos menores de componentes. Os objetos são coleções de primitivos e os unem para servir a um nível mais baixo, mais universal e, ainda assim, a um propósito específico.
As primitivas são o nível mais pequeno, mais simples e mais baixo de granularidade no desenvolvimento de software. É basicamente apenas números inteiros e reais e funções / operadores, embora a maioria dos idiomas tenha seus próprios "cidadãos de primeira classe".
Há muito pouco que você pode fazer com os primitivos e, ao mesmo tempo, é em um nível tão baixo que você pode realizar praticamente tudo com ele. É apenas muito, muito detalhado, insanamente complicado e impossivelmente tedioso de se realizar enquanto trabalha diretamente com os primitivos.
- Qual o sentido disso tudo?
Como já mencionado acima, trabalhar com primitivas diretamente é uma péssima idéia. Não apenas porque é impossivelmente complexo, lento e tedioso para o desenvolvimento de software moderno, mas também é extremamente invasivo e obstrutivo para testes e manutenção.
A incorporação de todas essas partes conceituais no desenvolvimento de software torna mais fácil, rápido, simples e seguro. Você não cria uma casa com átomos, independentemente de quão versáteis e universais sejam os átomos. Isso seria um exercício de futilidade. Seus átomos são suas primitivas, a argila é seu objeto, os tijolos são seus componentes, paredes, piso e teto são seus módulos, reunidos para manifestar o produto final.
Os seres humanos realmente não inventam nada, apenas descobrimos coisas que já existem no universo e as copiamos e aplicamos em nossas vidas. A mesma hierarquia de granularidade é intrínseca ao próprio universo, de átomos e até abaixo, a moléculas orgânicas, proteínas, tecidos, órgãos, organismos e acima, a própria realidade obedece ao mesmo princípio - combinando coisas abstratas pequenas, simples, com funções limitadas e com propósitos. coisas maiores, mais complexas, mais funcionais e coisas mais específicas.
- Advertências de terminologia
Tecnicamente, todos são "objetos", todos são "componentes" do desenvolvimento de software, são todos "modulares" o suficiente para serem capazes de se encaixarem, são todos "produtos" no sentido de que foram produzidos e assim por diante. ..
Não se trata de terminologia ou nomenclatura, mas de como a ampliação e ampliação das coisas afeta vários aspectos da criatividade e da produtividade. E sobre a importância de não apenas usar todos esses níveis diferentes, mas também a importância de não tentar atingir uma meta no nível errado, o que só pode ser contraproducente.