Antes de emitir sus comentarios sarcásticos, lo sé, esta es una pregunta novata. Esta es la primera vez que uso un lenguaje basado en C.
Soy un estudiante de pregrado que está aprendiendo el Objetivo C para un curso de informática sobre desarrollo móvil. Sé que, en un entorno académico, muchas consideraciones del mundo real no son necesarias ya que estás construyendo proyectos más pequeños, trabajando en equipos más pequeños, etc.
Pero nuestro profesor exige, y XCode admite, archivos de encabezado .h para cada archivo de implementación .m. Para mí, parece un trabajo ocupado. Tengo que asegurarme de copiar cada firma de método y variable de instancia al otro archivo. Si cambio un archivo, tengo que asegurarme de que sea consistente con el otro archivo. Parece solo un montón de pequeñas molestias como esa.
Pero sé que tiene que haber algún uso en el mundo real para los archivos de encabezado. Una gran respuesta abordaría ambos:
- ¿Para qué sirve un archivo de encabezado para el que no es adecuado un archivo de implementación? ¿Cual es su propósito?
- ¿Por qué nosotros como programadores tenemos que escribir manualmente nuestros archivos de encabezado? Parece que podrían generarse fácilmente de forma automática.
¡Gracias por adelantado!
fuente
Respuestas:
En breve;
El archivo de encabezado define la API para un módulo. Es una lista de contratos que métodos puede llamar un tercero. El módulo puede considerarse una caja negra para terceros.
La implementación implementa el módulo. Es el interior de la caja negra. Como desarrollador de un módulo, debe escribir esto, pero como usuario de un módulo de terceros, no debería necesitar saber nada sobre la implementación. El encabezado debe contener toda la información que necesita.
Algunas partes de un archivo de encabezado podrían generarse automáticamente: las declaraciones de método. Esto requeriría que anote la implementación, ya que es probable que haya métodos privados en la implementación que no formen parte de la API y no pertenezcan al encabezado.
Los archivos de encabezado a veces tienen otra información en ellos; definiciones de tipo, definiciones constantes, etc. Estas pertenecen al archivo de encabezado y no a la implementación.
fuente
La razón principal de un encabezado es poder
#include
usarlo en algún otro archivo, para que pueda usar las funciones en un archivo de ese otro archivo. El encabezado incluye (solo) suficiente para poder usar las funciones, no las funciones en sí mismas, por lo que (esperamos) compilarlo es considerablemente más rápido.Mantener los dos por separado la mayoría de los resultados de que nadie haya escrito un editor que automatice muy bien el proceso. Realmente no hay muchas razones por las que no pudieron hacerlo, y algunos incluso lo han intentado, pero los editores que lo han hecho nunca lo han hecho muy bien en el mercado, y los editores más convencionales no lo han adoptado.
fuente
La inclusión de un encabezado permite que su código llame a funciones o métodos que están escritos en otro lugar y que pueden o no ser parte de su proyecto / compilación de software, pero que puede encontrar el 'enlazador' cuando está compilando el software.
Por ejemplo, cuando llama a una función en la biblioteca C estándar, entonces no desea tener que poner todas las entrañas de esa función dentro de su proyecto; simplemente espera que su programa pueda llamarla.
Pero su compilador necesita que le digan que la función existe en algún lugar, incluso si no puede ver el código y el encabezado lo hace. Cuando finaliza el compilador, se llama al vinculador y busca 'vincular' esos bits de su código que quedan pendientes, como las llamadas a la biblioteca.
fuente
Los archivos de encabezado se utilizan principalmente para declarar e incluir las firmas (es decir, el nombre de la función, el valor de retorno y los argumentos) de sus funciones en otros archivos. El compilador necesita conocer estas firmas al compilar y vincular sus archivos.
Lea este artículo para más información.
fuente