Programação Modular em C

Pré-processador C: x macros; Alocação Dinâmica

Olá, caro leitor! Este artigo reúne informações importantes sobre programação modular que já foram apresentadas em outros artigos. O principal objetivo é fundamentar os conceitos necessários para organizar uma aplicação em linguagem C em um conjunto de módulos funcionais.

 

 

A Linguagem C

 

A característica especial de uma linguagem estruturada é a compartimentalização do código e dos dados, isto é, a capacidade de seccionar e encapsular partes do programa. Diante disso, o principal componente em C que possui essa característica é a função. Com a função é possível modularizar um programa, permitindo codificar, separadamente, uma determinada tarefa [1]. Além disso, tal procedimento traz algumas vantagens como a reutilização de código, compilação individual de código, e a estrutura do código fica mais clara, por exemplo.

 

 

O Design Estruturado

 

O projeto de um programa em C segue uma abordagem Top-Down. Essa abordagem é caracterizada por estruturar o projeto a partir da rotina de nível mais alto até as rotinas de nível mais baixo. Um esboço de uma determinada parte do programa começa com uma descrição geral e caminha em direção da particularização [1]. Vale a pena conferir o artigo do Felipe Lavratti sobre abordagem Top-Down.

 

Programação Modular
Figura 1: Decomposição funcional de uma aplicação.

 

Diante disso, o design estruturado corresponde a uma decomposição funcional de uma aplicação num conjunto de módulos bem definidos. Esses módulos cooperam para desempenhar a funcionalidade definida pela aplicação, conforme ilustrado na Figura 1.

 

Programação Estruturada: Um método de escrever um programa que utiliza (1) análise Top-Down para solução de problemas, (2) modularização para estruturar e organizar o programa, e (3) estruturação do código em módulos individuais [2].

 

 

Módulos

 

Um módulo na linguagem C pode ser criado utilizando arquivos de cabeçalho e de implementação. Abaixo segue a definição de cada tipo de arquivo:

 

Arquivo de cabeçalho: Os arquivos ‘.h’ são utilizados para especificar assinatura de funções, definições de constantes, tipos de dados criados pelo usuário etc. De modo geral, os arquivos de cabeçalho têm como função definir a interface de um módulo.

 

Arquivo de implementação: Os arquivos ‘.c’ implementam as funções definidas na interface. De modo geral, esses arquivos são compostos por diversas funções e estruturas de dados utilizadas internamente.

 

Para criar aplicações seguras que não entrem em conflito com outros módulos, os conceitos apresentados sobre modificadores de armazenamento e o pré-processador podem ser aplicados. Exemplo disso é a utilização de header guards, outro é a utilização de modificadores static e extern.

 

O conceito de header guards pode ser visto aqui. Basicamente, a aplicação de header guards é realizada para evitar que o código presente no arquivo de cabeçalho seja copiado para o fonte que fez sua inclusão. Já os modificadores podem ser empregados para limitar o escopo de funções e variáveis que são utilizadas somente dentro do módulo, tornando "público" somente o que é necessário.

 

 

Aplicação Modular na Prática

 

Esses conceitos podem ser vistos no módulo slist criado pelo Felipe Neves e apresentado neste artigo. Todas as funções e definições de dados pertencentes ao módulo estão dentro de uma estrutura de compilação condicional.

 

 

Já o arquivo fonte contém a implementação das funções definidas e também funções internas do próprio módulo. Observe que para essas funções internas o modificador static foi utilizado para limitar seu escopo. Isso também pode ser aplicado em variáveis internas do módulo.

 

 

Dessa maneira, tudo que é relativo ao módulo fica encapsulado, isto é, restrito ao escopo do arquivo fonte.

 

 

Referências

 

[1] Livro: C, completo e total – 3ª edição revista e atualizada. Herbert Schildt.

[2] John Dalbey – Structured Programming.

Figura 1 – http://www.tenouk.com/Module4.html

Imagem destacada.

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons
Programação Modular em C por Fernando Deluno Garcia. Esta obra está licenciado com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Fernando Deluno Garcia
Fascinado por computação, especialmente na interface entre hardware e software, me engajei na área de sistemas embarcados. Atuo com desenvolvimento de sistemas embarcados e sou docente da Faculdade de Engenharia de Sorocaba. Informações adicionais você encontra em: https://wwws.cnpq.br/cvlattesweb/PKG_MENU.menu?f_cod=C953457BC8D19B99DCF946632A3BDBDA#

Deixe um comentário

2 Comentários em "Programação Modular em C"

avatar
 
  Notificações  
recentes antigos mais votados
Notificar
Guilherme Abraham
Membro
Guilherme Abraham

Excelente artigo. Uma coisa que sinto falta nas disciplinas de engenharia de software são técnicas para projetos que não sejam orientados a objeto. Vou ler os links disponibilizados nesse artigo mas já deixo uma sugestão de uma série focada em técnicas pra projetos de software no paradigma estruturado/funcional.

Vou tomar a liberdade de apontar 2 erros no texto:

[...] Um método de escrever um programa que utiliza
(1) (anÁlise) Top-Down para solução de problemas [...]

[...] Basicamente, a aplicação de header guards é realizada para evitar (quer) o
código presente no arquivo [...]