[ contenidos | #winprog ]

Porqu� deber�as aprender la API antes que la MFC

La Controversia

Muchas personas entran al IRC y preguntan "�Que es mejor, MFC o API?" y muchas otras personas est�n dipuestas a responder "MFC es un m..." o "API es una m...", ya sea porque quiz�s una o lo otra estubo involucrada en alg�n evento traum�tico en su infancia, o simplemente porque todos dicen que una es mejor que la otra.

Los argumentos est�ndar son:

Y as�...

Mi Respuesta

Primero de todo vamos a aclarar que son la API y la MFC. API es un t�rmino gen�rico que significa Aplication Programming Interface (Interface para la Programaci�n de Aplicaciones). Sin embargo, en el contexto de la programaci�n en Windows, esto se refiere espec�ficamente a la API de Windows, la cual es el nivel mas bajo de interacci�n entre las aplicaciones y el sistema operativo. Los drivers, por su puesto, tienen a�n niveles inferiores y trabajan con diferentes conjuntos de llamadas a funciones, pero para la gran major�a de desarrollo en Windows esto no es relevante. MFC es una Librer�a de Clases, un conjunto de clases C++ que han sido escritas para reducir la cantidad de trabajo que tomar�a realizar ciertas cosas utilizando la API. La MFC adem�s introduce dentro de la aplicaci�n un esqueleto (o framework) Orientado a Objetos, de cual puedes tomar ventaja o ignorarlo si deseas, como lo hacen la mayor�a de los principiantes debido a que este framework no est� apuntado a escribir reproductores de mp3, clientes IRC o juegos.

Entonces, �Cu�l es el framework correcto?... Para principiantes, aquellas personas que simplemente est�n aprendiendo a programar, creo que deber�an trabajar con la API hasta que est�n a gusto con la manera en que funcionan las aplicaciones y comprendan todos los mecanismos b�sicos que hay detr�s de cosas como el Loop de Mensajes, GDI, Controles y quiz�s a�n mutlithreading y sockets. De esta forma comprender�n los cimientos de todas las aplicaciones en Windows y podr�n aplicar este conocimiento com�n a MFC, Visual Basic o cualquier otro framework que no sporte todo lo que la API hace, simplemente porque dicho framework ya hace una gran cantidad de cosas y no puede soportar todas esas peque�as cosas que nadie usa. Entonces, cuando necesites usar esas cosas, es ah� dinde puedes agregarlas tu mismo utilizando tus conocimiento sobre la API.

�Pero la MFC no es mas f�cil? En cierta forma, es mas f�cil cuando muchas tareas comunes son realizadas por uno mismo, reduciendo la cantidad de c�digo que realmente necesitamos tipear. Sin embargo, menos c�digo no significa "mas f�cil" cuando no entendemos el c�digo que necesitamos escribir, o cuando no entendemos c�mo funciona dicho c�digo. Generalmente los principiantes que utilizan los wizards para comenzar sus aplicaciones, no tienen idea que hace la mayor�a del c�digo que se ha generado y pierden una gran parte del tiempo intentando darse cuenta donde agregar cosas o que cambios deben hacer para para alcanzar un cierto resultado. Si comienzas a escribir tus programas desde cero, ya sea utilizando la API o MFC, entonces comprender�s todo lo que est� puesto all� ya que fu� puesto por vos mismo y solo usar�s las cosas que entiendes como funcionan.

Otro factor importante es que la mayor�a de las personas que est�n aprendiendo por primera vez la API Win32, no tienen una fuerte base en C++. Intentar comprender la programaci�n en Windows utilizando la MFC y aprender C++ al mismo tiempo puede ser una tarea monumental. Si bien no es imposible, estar� lejos de ser mas productivo que hacerlo teniendo conocimientos sobre C++ y la API.

Entonces, b�sicamente...

Lo que pienso es que deber�as aprender la API hasta que te sientas c�modo con ella y luego intentar con la MFC. Si luego, pareciera ser que tiene sentido y puedes ahorrar tiempo con la MFC, entonces �sala.

Sin embargo, y esto es importante... si quieres trabajar con la MFC sin entender la API y luego buscas ayuda por algo y la respuesta que obtienes hace referencia a la API (como por ejemplo "Usa el HDC provisto en el mensaje WM_CTLCOLORSTATIC"), seguramente quedes colgado ya que no entiendes como traducir un objeto de la API a uno de la MFC. En ese momento estar�s en problemas y las personas se frustrar�n contigo por no aprender todo aquello que necesitas de la API antes de intentar usar la MFC.

Personalmente prefiero trabajar con la API, solo me parece mejor. Pero si tengo que escribir una terminal para una base de datos o un host para un conjunto de controles ActiveX, considerar�a seriamente usar la MFC ya que podr�a eliminarme una gran cantidad de c�digo que, en otro caso, deber�a reinventar.


Copyright © 1998-2003, Brook Miles (theForger). All rights reserved.

Versi�n en Espa�ol: Federico Pizarro - 2003