Antes que você faça seus comentários sarcásticos, eu sei - essa é uma pergunta nooby. Esta é a minha primeira vez usando uma linguagem baseada em C.
Sou um estudante de graduação que está aprendendo o Objetivo C de um curso de ciência da computação sobre desenvolvimento móvel. Eu sei que, em um ambiente acadêmico, muitas considerações do mundo real não são necessárias, pois você está construindo projetos menores, trabalhando em equipes menores etc.
Mas nosso professor exige - e o XCode suporta - arquivos de cabeçalho .h para cada arquivo de implementação .m. Para mim, isso meio que parece um trabalho ocupado. Eu tenho que ter certeza de copiar cada assinatura de método e variável de instância para o outro arquivo. Se eu alterar um arquivo, tenho que garantir que seja consistente com o outro arquivo. Parece apenas um monte de pequenos aborrecimentos como esse.
Mas eu sei que deve haver algum uso no mundo real para arquivos de cabeçalho. Uma ótima resposta abordaria ambos:
- Para que um arquivo de cabeçalho é útil para o qual um arquivo de implementação não é adequado? Qual é seu propósito?
- Por que nós, como programadores, temos que escrever manualmente nossos arquivos de cabeçalho? Parece que eles poderiam ser facilmente gerados automaticamente.
Desde já, obrigado!
fonte
Respostas:
Em resumo;
O arquivo de cabeçalho define a API para um módulo. É uma lista de contratos cujos métodos podem ser chamados por terceiros. O módulo pode ser considerado uma caixa preta para terceiros.
A implementação implementa o módulo. É o interior da caixa preta. Como desenvolvedor de um módulo, você precisa escrever isso, mas como usuário de um módulo de terceiros, não precisa saber nada sobre a implementação. O cabeçalho deve conter todas as informações necessárias.
Algumas partes de um arquivo de cabeçalho podem ser geradas automaticamente - as declarações do método. Isso exigiria que você anote a implementação, pois é provável que existam métodos privados na implementação que não façam parte da API e não pertençam ao cabeçalho.
Os arquivos de cabeçalho às vezes contêm outras informações; definições de tipo, definições constantes etc. Elas pertencem ao arquivo de cabeçalho e não à implementação.
fonte
O principal motivo para um cabeçalho é poder
#include
usá - lo em outro arquivo, para que você possa usar as funções em um arquivo desse outro arquivo. O cabeçalho inclui (apenas) o suficiente para poder usar as funções, não as próprias funções, portanto (esperamos) compilá-lo é consideravelmente mais rápido.Manter os dois resultados separadamente, com mais ninguém nunca ter escrito um editor que automatize o processo muito bem. Não há realmente muitas razões para que eles não pudessem fazer isso, e alguns tentaram - mas os editores que o fizeram nunca se saíram muito bem no mercado, e os editores mais tradicionais não o adotaram.
fonte
A inclusão de um cabeçalho permite que seu código chame funções ou métodos escritos em outro local e que possam ou não fazer parte do seu projeto / construção de software, mas que podem ser encontrados pelo 'vinculador' ao criar o software.
Por exemplo, quando você chama uma função na biblioteca C padrão, não precisa colocar todas as entranhas dessa função dentro do seu projeto - você simplesmente espera que seu programa possa chamá-lo.
Mas seu compilador precisa ser informado de que a função existe em algum lugar, mesmo que não consiga ver o código e o cabeçalho faça isso. Quando o compilador é concluído, o vinculador é chamado e procura 'vincular' os bits do seu código que ficam pendurados, como as chamadas de biblioteca.
fonte
Os arquivos de cabeçalho são usados principalmente para declarar e incluir as assinaturas (ou seja, nome da função, valor de retorno e argumentos) de suas funções em outros arquivos. O compilador precisa conhecer essas assinaturas ao compilar e vincular seus arquivos.
Leia este artigo para obter mais informações.
fonte