"Granularidade de um objeto". O que é?

Afinal o que é “Granularidade de um objeto”??

Sempre escuto e vejo esse termo em post’s, artigos e etc, mas, nunca entendi!

Alguém pode me ajudar ou indicar um bom artigo?

Vlw!!

Granularidade pode ser visto como o nível de detalhamento de algo. Vou te dar primeiro um exemplo em lógica de programação depois um em OO:

Suponha uma lógica para trocar o pneu de um carro. Você pode simplesmente dizer o seguinte:

  1. Afrouxe os parafusos da roda;
  2. Suspenda o carro;
  3. Termine de desparafusar;
  4. Retire a roda;
  5. Ponha a roda nova;
  6. Parafuse de volta;
  7. Desça o carro.

Mas você pode descrever esse caso assim:

  1. Pegue a chave;
  2. Introduza na fechadura do porta-malas;
  3. Pegue o macaco;
  4. Encaixe o macaco embaixo do carro;
  5. Gire a manivela do macaco até o carro estiver suspenso;
  6. Volte ao porta-malas;
  7. Pegue a chave de roda;
  8. Encaixe a chave no primeiro parafuso;
  9. Desrosqueie o parafuso até ele ficar solto.
  10. etc…

Qual a diferença entre os dois casos? O segundo é muito mais granular do que o primeiro, ou seja, é mais detalhado. Falando em software, é como se eu tivesse, num nível menos granular, um objeto carro que tivesse um método trocarRoda(); e num nível mais granular em que eu tivesse um objeto carro e um objeto trocarRoda, entende? Tudo depende do nível de detalhamento :wink:

[]´s

Quanto mais granular um software, mais quebrado em “partes menores” ele é. Um banco de dados altamente granular, estaria completamente normalizado, sem haver duplicação de dados em absolutamente nenhum campo. Um objeto muito granular irá fazer uma função muitíssimo pequena.

Um sistema mais granular, portanto, tem um número maior de objetos, mas que fazem uma tarefa muito específica. Um sistema pouco granular tem poucas classes, mas enormes. O ideal é sempre tentar achar um bom balanço. Granularidade demais costuma a ter impacto no processamento, ou pode dificultar a programação em si. Granularidade de menos gera código difícil de manter e pouco coeso.

Humm…estão a granularidade de um objeto tem haver tb c/ seu nível de coesão?

Sim, normalmente a granularidade tem impacto direto na coesão.

Os dois conceitos, entretanto, são diferentes.

Um sistema pode ter objetos pequenos e de baixa coesão, se eles resolverem realizar tarefas que não são deles. É o caso típico de quando classes não estão bem modeladas, ou não representam exatamente o domínio do negócio.

É claro que isso é difícil de acontecer, assim como é difícil que objetos muito grandes sejam coesos.

E…a granularidade se refere somente a quantidade de objetos ou a quantidade de métodos existentes em um objeto?

Quero enteder bem este conceito.

Vlw!

Se você estiver falando no contexto do sistema, a granularidade irá se referir ao quão pequenos são os objetos que você está trabalhando.
Se você estiver falando de um objeto ou módulo, do quão pequenas são as funções que esse objeto tem.

Um objeto muito granular terá dezenas de pequenos métodos.
Um banco de dados muito granular terá dezenas de pequenas tabelas e muitos relacionamentos.
Um sistema muito granular terá várias classes pequenas.

Um saco de pão granular terá migalhas de pão. Um saco de pão pouco granular terá uns poucos baguetes.

No exemplo dado pelo “asaudate” Eu poderia ter uma classe ConsertarCarro e nessa classe conter os métodos: pegueAChave(), desparafuzar(), tirarPneu() e etc…Isso não seria granular?? ou a granularidade se refere somente a quantidade dos objetos…tipo ao invés de eu ter:esses métodos na classe “ConsertarCarro” eu poderia ter um objeto: PegarAChave, Desparafuzar, TirarPneu e etc…

Sacaram a minha dúvida?

Vlw pelas respostas!

Depende da perspectiva.

Granularidade é um atributo de um subsistema, não de um indivíduo do sistema.

Se seu subsistema for o objeto, então você provavelmente falará dos métodos dele. Portanto, a classe carro seria granular se tivesse vários métodos pequenos e específicos.

Se seu substitema for o pacote onde a classe carro está, então o sistema seria granular se ele tivesse a classe carro com muitas divisões de subclasses específicas (motor, pistao, vela, pneu, suspensao, freio, pastilhas, …).

Vini…vlw pelas respostas, pretendo estudar a fundo esses conceitos, me amarro nisso!

Se quiser fazer + observações…fike à vontad!!

Flw!