Durante a implementação do software nos deparamos com várias abstrações do domímio do problema, que dificultam a codificação. A representação adequada destas abstrações podem ser influenciadas pela composição.
A composição está presente nos principais paradigmas de programação, tais como: Paradigma Funcional, Declarativo e Orientado a Objectos.
Composição de Classes
A composição possibilita reutilização de objetos, sem a necessidade de duplicar as classes instanciadas (objectos) na estrutura do sistema. Uma classe pode ter membros de outra classe ou pode ser composta por outras.
permite aproximar o projeto do software da vida real e viabiliza um projeto bem organizado.
A composição é reprentada por um losango, partindo da classe Composta para as suas partes (Classe A <>------- classe B).
Na orientação a objectos, a composição é muito usada para construir objectos complexos, repartindo em objectos simples.
Composição de Funções
Composição: é a criação de uma nova função por meio de uma junção de outras, realizando mais de uma atribuição em uma única chamada.
Uma função recebe como parámetro a outra e a saída é uma função.
No paradigma funcional, a composição pode ser feita usando:
- Operador ponto(.): Usando funções de ordem superior(map, filter, reduce) e outras para a tranformação de valores;
- Operador pipe (|>): Em linguagens como F# e Elixir, indicando que uma função recebe como parámetro a função anterior.
Composição de Consultas
A composição de consultas ajuda a tornar o código mais declarativo, legível e menos verboso. Usando outras abordagens, teríamos um código revestido de iterações e comparações e difícil de ler.
A composição de consultas pode ser feita usando:
- Linguagem dos Sistemas Gerenciadores de Bases Dados (SQL e NoSQL). Em SQL é usado para construir consultas das mais simples as mais complexas.
- Expressões LINQ e Streams nas linguagens: C#, F#, Java, Scala, Elixir e Haskell;
- ORMs e _Micro ORM_s: através de Query Builders, escrevendo a consulta de forma encadeada, semelhante a da base de dados.
Observação: A composição pode ser utilizada como alternativa a Herança de classes, visto que a herança cria um forte acoplamento entre as classes.
Exemplos
- Dados de um cidadão. Um cidadão possui dados pessoais, dados de saúde e endereço.
- Obter dados de de um candidato numa base de dados de recrutamento.
- Função para transformar um texto.
- Função para transformar uma lista. A função deve obter o dobro da lista, filtrar os números menores que 30, ordenar e inverter a lista.
- Função para transformar um texto. A função deve remover os espaços laterais, substituir as vírgulas por ponto e mostrar em letras maiúsculas. Linguagens: PHP, SQL e Elixir.
Código fonte: https://www.github.com/ortizdavid/exemplo-composicao
Para mais artigos:
https://www.dev.to/ortizdavid
https://www.medium.com/@ortizaad1994