Essa abordagem está fadada ao fracasso e geralmente requer reescrita do zero.
Então, para resolver esse cenário, podemos tentar dividir o problema em vários subproblemas e tentar resolvê-lo um por 1.
Isso não apenas facilita nossa tarefa, mas também nos permite alcançar a Agora a grande questão é como "quebrar" não teoricamente, mas SOFTWARE . Veremos vários tipos diferentes dessas unidades em linguagens populares ‚Äã‚Äãcomo C/C++, Python e Java. Para fins ilustrativos, Vamos supor que temos todas as inserções de listas encadeadas básicas em um programa. Como existem muitos métodos (funções), não podemos sobrecarregar o programa escrevendo todas as definições de métodos acima da função principal necessária. Mas mesmo que o fizéssemos, poderia haver um problema de ordenação de métodos, quando um método deveria estar antes de outro e assim por diante. Então, para resolver esse problema, podemos declarar todos os protótipos no início de o programa, e depois o método main e abaixo podemos defini-los em qualquer ordem específica: Program: Mover para C/C++
< a href = # Python> Ir para Python
Ir para Java
C / C++
|
Compilando o código: podemos compilar o programa acima:
gcc linkedlist.c -o linkedlist
E funciona!
Os principais problemas no código acima:
Já podemos ver os principais problemas com o programa, não é tão fácil trabalhar com o código individualmente ou em grupo .
Se alguém quiser trabalhar com o acima programa, então alguns dos muitos problemas que a pessoa está enfrentando:
- É preciso passar pelo arquivo fonte completo. para melhorar ou melhorar alguma funcionalidade.
- Não pode ser facilmente reutilizado o programa como base para outros projetos.
- O código é muito confuso e não é nada atraente, o que torna muito difícil navegar pelo código.
No caso de um projeto em grupo ou de grandes programas, a abordagem acima garante o aumento dos custos gerais, energia e taxas de falhas.
Abordagem correta:
Vemos que essas linhas começam em todo programa C/C++ que começa com "#include".
Isso significa inclua todas as funções declaradas no cabeçalho "library" (arquivos .h) e definidas possivelmente em arquivos library.c/cpp .
Essas linhas são pré-processadas em tempo de compilação.
Podemos tentar criar manualmente essa biblioteca para nossos próprios propósitos.
Coisas importantes a serem lembradas :
- Os arquivos ".h" contêm apenas declarações de protótipo (como funções, estruturas) e variáveis globais.
- Os arquivos ".c / .cpp" contêm a implementação real (definições de declaração em arquivos de cabeçalho)
- Ao compilar todos os arquivos de origem, certifique-se de que várias definições da mesma função, variável, etc. não existem para o mesmo projeto. (MUITO IMPORTANTE)
- Use funções estáticas, para restringir-se ao arquivo no qual elas são declaradas.
- Use a palavra-chave extern para usar variáveis referenciadas por e arquivos externos.
- Ao usar C++, tenha cuidado com namespaces, sempre use namespace_name:: function(), para evitar colisões. ol >
Ao dividir o programa em códigos menores:
Depois de examinar o programa acima, podemos ver como esse grande programa pode ser dividido em pequenas partes adequadas e então facilmente processado.
O programa acima tem essencialmente 2 funções principais:
1) Criar, inserir e salvar dados em nós.
2) Exibir nós
Dessa forma eu posso dividir o programa de acordo para que:
1) O arquivo principal seja > Driver do programa, Nice Wrapper dos Módulos de Inserção e onde usamos arquivos adicionais.
2) Colar - > A implementação real está aqui.
Com os pontos importantes mencionados, o programa é dividido em:
linkedlist.c - > Contém Programa de Driver
inserir.c - > Contém código para inserçãolinkedlist.h - > Contém as declarações de Node necessárias
insert.h - > Contém as Declarações de Inserção de Nó necessárias
Em cada arquivo de cabeçalho começamos com:
#ifndef FILENAME_H #define FILENAME_H Declarações ... #endif
A razão pela qual escrevemos nossas declarações entre #ifndef, #define e #endif, é para evitar múltiplas declarações de identificadores, como tipos de dados, variáveis, etc., quando um e o mesmo arquivo de cabeçalho é chamado em um novo arquivo pertencente ao mesmo projeto.
Para este programa de amostra:
inserir.h - > Contém a declaração do nó de inserção, bem como a declaração do próprio nó.
É muito importante lembrar que o compilador pode ver as declarações no arquivo de cabeçalho, mas se você tentar escrever um código que incluir a declaração em outro lugar, isso resultará em um erro, pois o compilador compila cada arquivo .c individualmente antes de passar para a etapa de link. ,
connectedlist.h - > Um arquivo auxiliar que contém o Node e suas declarações de exibição que devem ser incluídas para os arquivos que os utilizam.
insert.c - > Inclua uma declaração Node via #include "connectedlist.h", que contém a declaração, bem como todas as outras definições de método declaradas em insert.h.
connectedlist.c - > Simple Wrapper, contendo um loop infinito solicitando ao usuário que insira dados inteiros nas posições necessárias e também contendo um método que exibe a lista.
E a última coisa a ter em mente é que não tem sentido a inclusão de arquivos entre si pode levar a várias substituições (s) e resultará em um erro.
Tendo em conta o que foi dito acima, você deve dividir cuidadosamente em rotinas adequadas.
|
insert.h
|
insert.c
< ShopLatest questions Wiki |