|
Curso de Programación Orientada a Objetos en C++
|
|
Artículo realizado por
Fernando Rodríguez.
Capítulo 10.
Y para concluir, una mención a las MFC.
Con este capítulo se da por finalizado el curso concerniente a la programación orientada a objetos mediante el uso del C++. Naturalmente, no se ha hablado de todos los temas de la POO pero sí de los más importantes (los que la mayoría de programadores suelen utilizar). Realmente es muy difícil que un desarrollador de C++ utilice todos los mecanismos que la programación orientada a objetos le brinda ya que, o bien no es necesario para su proyecto o bien... lo desconoce. Es muy complicado tener un conocimiento total de todo lo que nos ofrece el C++.
En este último capítulo, me gustaría hablar un poco de la librería de clases MFC (Microsoft Fundation Classes) que, como sabréis, son las utilizadas en la programación en Visual C++ (siempre y cuando no acudas al API mediante la programación directa, en C tradicional, o mediante la construcción de tus propias clases).
Las MFC son una gran desconocida para muchos de los programadores de Windows ya que han tardado en "digerirse" más de lo esperado. Principalmente porque lo que siempre ha estado "ahí" ha sido el API y la totalidad de programadores de Windows que venían de trabajar en la versión de 16 bits lo hacían con el API. Si a esto unimos la elevada complejidad (para qué nos vamos a engañar) que entraña enfrentarte por vez primera a esta librería de clases de Microsoft, pues veremos que la criba de programadores preparados para su utilización es mucho más escasa que la referente a usuarios del API. De todas formas, los hábitos de programación en Windows (bajo C), están cambiando y ya hay un movimiento destinado al uso de las MFC. Desde los programadores aficionados a la creación de videojuegos (que siempre han criticado, no sin razón, de la lentitud de estas clases para la programación de juegos rápidos), hasta, cómo no, desarrolladores de aplicaciones. Este último hecho, también ha producido disparidad de opiniones. No hay más que leer los artículos de mi colega José Antonio en el que se ponen de manifiesto "lo poco visual que es el Visual C++". Ciertamente, programar en Visual C++ utilizando las MFC, no es tan directo como hacerlo en Delphi o Visual Basic. En MFC hay que escribir más código y bajar a la "sala de máquinas" de forma reiterada. Este importante sacrificio que entraña el utilizar el Visual C++ como herramienta para desarrollar aplicaciones bajo Windows usando las MFC, tiene un premio que es la infinita potencia que ofrece al programador (al que está dispuesto, claro, a utilizar una completa bibliografía).
Entrando en materia...
Todo programador de Windows que utilice el API siempre se sorprende de no encontrar por ningún lado la función WinMain tradicional en los listados que utilizan MFC. La programación en MFC se caracteriza por encapsular casi todas (no están todas) las llamadas que existen en el API, en una serie de clases que están englobadas según el tipo de cometido. Lógicamente, hay muchísimas clases ya que el API de Windows es, desgraciadamente, muy enrevesado. Pero, precisamente por eso, el uso de clases que encapsula toda esa cantidad ingente de llamadas que existen (es como si te las catalogaran), se hace muy de agradecer. Como se ha dejado entrever, no todas las llamadas al API están encapsuladas en la biblioteca de clases que son las MFC. Hay algunas que no se encuentran. Sin embargo, no hay por qué preocuparse ya que podemos acceder fácilmente a las mismas mediante llamadas directas al API. Así, todos los programadores tradicionales del API de Windows pueden utilizar llamadas a la misma mezcladas con código en MFC.
Programar en MFC no es nada sencillo. Si se ha trabajado en C++ se puede leer código en C sin ningún tipo de problema sin embargo, esto ya no sucede a la inversa. Conocerse "al dedillo" el C no significa que uno pueda sentirse cómodo examinando un listado escrito en C++ y bueno... las MFC son C++ bastante puro y duro (y muy, MUY, enrevesado). La curva de aprendizaje es bastante elevada. yo me atrevería a decir que más, mucho más, que la que conlleva aprender a moverse en Windows con el API. De todas formas, a la larga merece la pena. Mientras aprendes MFC puedes ir aprendiendo el API pero mientras aprendes el API no puedes ir aprendiendo MFC.
Una de las principales ventajas y, a la vez, inconvenientes del uso de las MFC, es que debemos estar preparados para leer y entender una buena cantidad de código que no ha sido escrito por nosotros. ¿Eso es malo?. Hombre, al principio sí porque te encuentras muy perdido entre la ingente cantidad de código que se te muestra delante de tus narices. Recuerdo que la primera sesión en mi aprendizaje de MFC fue de auténtico terror. Tenía unos cuantos archivos .CPP recién creados. Montones de comentarios, clases, métodos... ¿Cómo hacer "algo" sin volverme loco?. El hecho de conocer el API ayuda bastante porque, al menos, te da una cierta seguridad de cara a la investigación sobre el funcionamiento de todo el código que se te presenta pero, sinceramente, si nunca se ha programado en C++, el uso de las MFC es un infierno. Es preferible haber visitado otros lenguajes como el Visual Basic o el Delphi porque, de lo contrario, tendréis toda la maravillosa complicación de la programación en Windows en vuestras manos.
De todas formas, y después de llevar un tiempo trabajando con las MFC, uno agradece todas las dificultades que te presenta. Aprendes a utilizar de verdad la orientación a objetos ya que, obligatoriamente, has de utilizar código que no es tuyo. Aprendes también unas normas de programación mucho más refinadas en cuanto a la declaración de variables, funciones y demás y, cómo no, aprendes una cantidad ingente de inglés técnico ;-D, pues la ayuda es algo que has de estar utilizando continuamente.
¿Cómo funciona un programa hecho en MFC?
Lo primero que tenemos que aceptar es que vamos a tener que utilizar un asistente para la creación de código. Dentro del excelente paquete de programación que es Visual C++ (el compilador de Microsoft de C++ es el mejor que hay pese a quien pese), existen multitud de herramientas que nos ayudan a trabajar en la programación de Windows. La más valiosa de todas es, quizás, el AppWizard. El AppWizard, es un asistente que nos crea todos los archivos y código necesario para comenzar a trabajar en una determinada aplicación. Desde el AppWizard, podemos indicar si queremos hacer una aplicación con soporte para ayuda, impresión, etc. Todo ello a través de una serie de pasos que desembocarán en la creación de todo el código anteriormente descrito. Es más, si una vez que hemos acabado con el AppWizard damos a "build" y ejecutamos, veremos que tenemos un programa ya hecho. De todas formas, a medida que uno va conociendo más el "intríngulis" que se esconde en todo el código que crea el AppWizard, podrá ir eliminado los archivos que no necesite y adaptando el código que se nos cree sin mayores complicaciones.
Todo el código que nos genera el AppWizard es, por así decirlo, perfecto. Todas las clases están bien definidas y preparadas para ser utilizadas, modificadas o aumentadas. Como ya se comentó más arriba, el principal problema que se encuentra un programador tradicional de Windows es el de la "dureza" que supone enfrentarse a todo esa gran cantidad de código que tiene delante de sí. No hay por ningún lado una función WinMain o WinProc sobre las que empezar a "entender" lo que estamos viendo. En definitiva, estamos totalmente perdidos.
Lo que realmente pasa, es que tanto la función WinMain como la WinProc, se encuentran en las bibliotecas de código objeto que se enlazan cuando echamos a andar la compilación de la aplicación. En otras palabras, pese a que nunca veamos una función WinMain o WinProc en nuestro código generado por el AppWizard, siempre existirán y se enlazarán.
Como veis, si ya para programar en Windows con el API hay que cambiar totalmente la mentalidad, para programar en MFC y Windows, hay que hacer un coste adicional. Vuelvo a repetir, que la programación en MFC bajo Windows no es fácil. Es mucho más sencillo (como siempre, todo lo sencillo que tú quieras) utilizar un paquete como Delphi y disfrutar antes de la programación en Windows. Siendoos sinceros, a no ser que tengáis un buen motivo para programar en MFC (utilizar toda la potencia de Windows y, claro está, saber utilizarla) y estéis curtidos en la programación del API bajo C o en el C++, pensarlo dos veces o bien... nunca os desaniméis pese a los primeros y numerosos "palos". El mejor consejo que se puede dar es como el que se da cuando uno comienza a aprender el API bajo Windows;" no tengáis un afán de conocimiento total". Aprender lo básico y luego, ir haciendo pequeños programas que os obliguen a consultar temas de forma puntual. Sólo de esta forma lograréis avanzar. Y ya sabéis, "a programar se aprende programando" y en Windows es IMPOSIBLE aprenderlo todo. Siempre vas a necesitar ayuda.
Entonces, ¿MFC ó API?.
Desde luego, si en el API lo único que hacías eran aplicaciones, has de pasar YA a la programación en MFC. De hecho, no creo que queden excesivos programadores de aplicaciones trabajando con el API directamente ya que es exageradamente tedioso. Si por el contrario, utilizas el API para crear juegos puedes seguir utilizándola perfectamente. ¡Es más!, las DirectX están construidas en C por lo que su uso es mucho más directo en la programación tradicional bajo Windows. Sin embargo, y tal como me comentó una vez Gonzalo Suárez (Pyro Studios), una cosa es C++ y otra las MFC. Puedes seguir utilizando el C++ y crearte tus propias clases que encapsulen al API y las funciones de DirectX sin necesidad de acudir a las MFC. En la actualidad para el desarrollo de juegos, eso es lo que se hace pero, así mismo os digo, que para la creación de tools o herramientas, se hace necesario utilizar herramientas más visuales. Ahí entrarían las MFC, el Delphi, el Visual Basic, etc.
Visual C++; una herramienta excelente
Si para la generación de código, el Visual C++ nos aporta una excelente herramienta que nos evita el tener que crear código global para todas las aplicaciones, (haciendo que entremos de lleno a trabajar en lo que a nosotros nos interesa) lo que es en sí el paquete de desarrollo, sólo se puede catalogar de estupendo. Sí, y pese a no querer hacer (Dios me libre) ningún tipo de publicidad a la casa del señor Gates, hay que decir que es una gozada trabajar con todas la potencia que te ofrece el Visual C++. Desde un potente gestor de clases como es el ClassWizard, a un Debugger impecable. Pasando, cómo no, por todas y cada una de las posibles opciones extra que nos brinda el entorno. Como os imaginaréis, el ver por primera vez todo lo que nos ofrece este sistema de desarrollo asusta bastante pero, una vez más, a base de la práctica y la dedicación, os moveréis "casi" como pez en el agua (siempre hay algo que se deja sin investigar los suficiente ;-).
Uno de los principales problemas de todo lo que entraña la programación bajo Windows utilizando el Visual C++ es, sin duda, su elevado coste para programadores "de a pie", que lo único que buscan es una forma de ir adquiriendo experiencia de cara al futuro. Adquirir un paquete de Visual C++ supone un gran desembolso de dinero. Sin embargo, tú no serás un pirata, ¿no? . Lo que voy a hacer, es recomendaros, si sois estudiantes, que os hagáis con una licencia de Microsoft para estudiantes. Es una buena forma de trabajar teniendo todo en orden sin que haga falta ser millonario. Como lo que no quiero es hacer publicidad de ninguna casa, simplemente os voy a comentar que os informéis en el teléfono de atención al cliente de Microsoft sobre el tema. O en cualquier tienda especializada que seguro, os venderán una licencia por no más de 15.000 pesetas. Algo, realmente interesante. Al menos, para personas que, como un servidor, no puede gastarse las cifras oficiales del producto ni en sueños pero que aborrece la piratería.
En definitiva
Como podéis observar, este artículo no aporta ningún tipo de conocimiento técnico. Está claramente orientado a la gente que ya trabaja en la programación en Windows (principalmente con el API) o que están preparando el salto a este sistema y no saben qué lenguaje escoger, para que se hagan una leve idea de cómo es el mundo "MFC". La programación bajo Windows, al menos en C y C++, no es fácil si nunca se ha trabajado en un sistema de desarrollo en dicho Sistema Operativo.
Si quieres comenzar a ver avances reales en tú aprendizaje bajo Windows, puedes utilizar herramientas como el Delphi o el Visual Basic. De la primera decir que es excelente y que para muchas tareas resulta infinitamente más cómoda que el Visual C++. De la segunda no puedo decir nada porque nunca la he utilizado. Por otro lado, si estás dispuesto a pasarte de seis meses a un año pringando manuales y literatura de Visual C++, pues adelante. Es duro al comienzo pero merece la pena porque luego tienes ante ti un mundo de potencia infinita.
Y bueno, esto ya se acaba. Quizás mi compañero David Isla "Cid", se anime y se ponga manos a la obra con un curso de Visual C++ con MFC. ¿A qué esperas David? ;).
ÚLTIMA REVISIÓN EN FEBRERO DE 1999