Entendendo a Separação de Conceitos

Quando eu cursava a pós-graduação, estudei uma disciplina que citava uma breve referência a um termo chamado Separation of Concerns (SoC), ou Separação de Conceitos. Como não era o foco do estudo, anotei o termo para que eu pudesse pesquisá-lo mais tarde com mais detalhes e adicionei-o na pauta de artigos do blog. Agora é hora de esclarecer esse termo!

Introdução

No desenvolvimento de software, podemos afirmar que Separação de Conceitos se refere a um princípio de projeto que permite a separação de um sistema em diferentes áreas, seções ou módulos. Estes conceitos, quando combinados, atingem um objetivo principal que, na maioria das vezes, é um software, uma página da Web ou um hardware. A Separação de Conceitos normalmente ocorre em softwares de grande porte ou em projetos que são desenvolvidos em mais de uma linguagem de programação.

Exemplo em uma página Web

Programadores Web praticam a Separação de Conceitos indiretamente. Para construir uma página, diferentes linguagens são utilizadas, cada uma com um propósito em particular. Geralmente, para esses projetos, são utilizadas linguagens como HTML, CSS, PHP e JavaScript, nas quais poderemos intitulá-las como agentes de “conceitos”.

A primeira delas, HTML, é utilizada para estruturar e formatar o conteúdo de uma página, como a inserção de tabelas e marcação de seções (título, cabeçalho e corpo).

A linguagem CSS, por sua vez, edita a apresentação do conteúdo gerado pela linguagem HTML, fornecendo estilos visuais customizados para os componentes da página.

O back-end (“retaguarda”) de uma página, responsável por manipular informações do banco de dados e executar operações de tratamento e envio de informações são feitas pela linguagem PHP.

E, por fim, o JavaScript é empregado para executar scripts do lado do cliente, comportando-se de forma assíncrona para alterar a exibição do conteúdo sem comunicação com o servidor. O jQuery, por exemplo, fornece funções Ajax, que permitem a alteração de um componente da página sem a necessidade de recarregá-la.

Exemplo em um software desktop

Softwares também podem ser separados em conceitos ou módulos. Na verdade, essa separação é fortemente recomendável quando a aplicação envolve uma complexidade muito alta e atende diferentes departamentos em uma única solução. Por exemplo, se um determinado ERP possui os módulos contábil, financeiro, RH, custos, vendas e estoque de modo desacoplado, definimos o software como modularizado, já que é constituído de diferentes partes.

Cada módulo pode ser alocado para uma equipe diferente de desenvolvimento, capacitada nas respectivas regras de negócio. Dessa forma, além de facilitar a manutenção, cada módulo poderá ser atualizado independentemente dos outros módulos. O Delphi, por exemplo, propicia a modularização do software através de arquivos BPL para simplificar a atualização.

Quando trabalhei no Data Center de um supermercado, acompanhei a atualização de um módulo do software administrativo da empresa devido à uma exceção na tela de Contas a Pagar. Ao invés de atualizar todo o executável, apenas o arquivo BPL referente ao módulo financeiro foi substituído, dispensando até mesmo a reinicialização do sistema. Interessante, não é?

Caso queira saber mais sobre modularização no Delphi, acesse este link da Embarcadero ou acesse este link da EDN. Quem sabe eu até adicione esse tema na pauta de artigos! 🙂

Separação de conceitos na POO

Na Programação Orientada a Objetos, a Separação de Conceitos é relacionada com a implementação de classes, herança e abstração. Em poucas palavras, podemos considerar que uma classe com todas as suas heranças (subclasses) representa um único conceito. Por exemplo, TCliente, TVendedor e TFuncionario herdam as mesmas características de TPessoa, já que compartilham da mesma abstração, ou, teoricamente, do mesmo conceito.

A Separação de Conceitos também é encontrada em padrões de arquitetura. O padrão MVC, por exemplo, separa a arquitetura do código em três camadas, cada uma com uma responsabilidade específica. Enquanto a View apresenta os dados para o usuário, a camada Model trata o processamento de dados (regras de negócio) e a camada Controller faz o intermédio entre ambas. Isso é uma Separação de Conceitos.

Observe que todos esses exemplos de separação acima visam a simplicidade, manutenção, e organização de diferentes seções para descomplicar as atividades de programação. Esse é principal objetivo desse princípio. Faça bom proveito dessa separação sempre que possível, amigos!

 

Volto na semana que vem. Grande abraço!


André Celestino