Elemar DEV

Tecnologia e desenvolvimento

Um indicador prático de coesão

Olá pessoal. Tudo certo?

Quando começamos a falar sobre programação orientada a objetos somos apresentados a dois termos: coesão e acoplamento. No post de hoje, quero falar sobre coesão!

O que é coesão?

Usando a definição da Wikipedia:

In computer programmingcohesion refers to the degree to which the elements of a module belong together. Thus, it is a measure of how strongly-related each piece of functionality expressed by the source code of a software module is.

Quanto mais relacionados estiverem os atributos e métodos de uma classe, menores são as chances de que ela esteja assumindo mais do que uma responsabilidade. Quanto mais alta a coesão, melhor.

Como medir a coesão?

Não há uma forma globalmente aceita para medir coesão. Entretanto, me agrada muito a definição proposta pelo Uncle bob no clássico Clean Code:

Classes should have a small number of instance variables. Each of the methods of a class should manipulate one or more of those variables. In general, the more variables a method manipulates the more cohesive that method is to its class. A class in wich each variable is used by each method is maximally cohesive.

Vejamos um exemplo do próprio Uncle Bob, adaptado para C# (original é em Java)

sealed class StackOfIntegers
{
    int _topOfStack = 0;
    readonly List<int> _elements = new List<int>();

    public int Size
    { get { return _topOfStack; } }

    public void Push(int element)
    {
        _topOfStack++;
        _elements.Add(element);
    }

    public int Pop()
    {
        if (_topOfStack == 0)
            throw new PoppedWhenEmptyException();

        int element = _elements[--_topOfStack];
        _elements.RemoveAt(_topOfStack);
        return element;
    }
}

No exemplo a classe StackOfIntegers seria altamente coesa. Afinal, apenas a propriedade Size não utiliza todos os atributos.

Era isso.

Um comentário em “Um indicador prático de coesão

  1. Alexsandro
    02/05/2013

    Este final de semana mesmo estava conversando com um amigo a respeito disto.

    Estávamos discutindo sobre o nível de coesão em aplicativos desenvolvidos com Web Forms( uso de code behind e etc…. ) teria ou não uma coesão boa.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Informação

Publicado às 02/05/2013 por em Post e marcado .

Estatísticas

  • 674,518 hits
%d blogueiros gostam disto: