Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Jorge Díaz
Universidad de Oriente, Departamento de Computación, Santiago de Cuba 90500, Cuba
jdiaz@csd.uo.edu.cu
Resumen: Se hace un análisis crítico acerca de las características del lenguaje C++ con vistas a su utilización como
lenguaje en una primera asignatura de programación de alto nivel orientada a objetos y se expone una metodología
para impartir tal asignatura, la cual incluye una selección y secuencia de los contenidos que hacen más viable el uso
del lenguaje en la enseñanza de la programación y que ha arrojado resultados superiores en cuanto al aprendizaje de
los estudiantes.
Abstract: A critical analysis about the characteristics of the programming language C++, regarding its use in a first
course of high level programming, is made. It is exposed a methodology for teaching this course using of a fruitful
way this language.
__________________________________________________________________________________________________________________
Revista de Informática Educativa y Medios Audiovisuales Vol. 3(7), págs. 12-21. 2006
ISSN 1667-8338 © LIE-FI-UBA. liema@fi.uba.ar 12
Enseñando programación con C++: una propuesta didáctica
____________________________________________________________________________________________________________________
Los propósitos de un primer curso de programación algoritmos y un medio de expresar esos algoritmos.
deben concentrarse en ofrecer a los estudiantes: El lenguaje debe constituir una ayuda para el
• Conocimientos de los conceptos de programador incluso antes de la etapa misma de
programación y un vocabulario para discutirlos; codificación. Debe proveer un conjunto claro,
• Habilidades de análisis y de programación; sencillo y unificado de conceptos que se puedan
• Un marco de referencia para la teoría y usar como primitivas en el desarrollo de algoritmos.
disciplina de la programación.
2. Modelo puro de objetos: El lenguaje debe exhibir
Debemos asegurarnos que los estudiantes aprenden orientación a objetos “pura”, en el sentido de no
a programar, en vez de aprender un lenguaje de poseer estructuras alternativas para construir
programación. objetos, sino sólo la abstracción básica usada para la
programación, en contraposición con lenguajes
De otro lado, la mayoría de los textos de híbridos, o sea, lenguajes que soportan la
programación prestan en general poca atención a orientación a objetos junto con otros paradigmas no
principios didácticos, presentando los contenidos en orientados a objetos.
un orden conceptual y prestando poca atención a los
principios metodológicos de solución de problemas 3. Seguridad: Los errores deben ser fácilmente
o cuestiones de depuración de los errores, que son detectables lo más tempranamente posible por el
áreas probadamente problemáticas para los novicios compilador o el sistema de tiempo de ejecución y
en la programación. ser reflejados con mensajes que ilustren su causa.
Deben evitarse conceptos conducentes a la escritura
Es por ello que nos proponemos hacer una reflexión de programas erróneos. Debe tener un sistema de
crítica de cómo emplear en lenguaje de tipos con chequeo fuertemente estático, evitar
programación C++ dentro de un primer curso de punteros explícitos, hacer chequeos de límites de los
programación en ambientes donde por cuestiones de índices de los arreglos y uso de variables no
diversa índole se insista o aconseje su empleo y inicializadas.
consecuentemente dar una metodología de
enseñanza en que aún empleando el lenguaje C++ 4. Alto nivel: El lenguaje no debe contener
podamos alcanzar los objetivos formativos de información concerniente al bajo nivel de máquina,
programación para los estudiantes que reciben por como por ejemplo, administración explícita de
primera vez la asignatura de programación, basada almacenamiento dinámico y debe proveer una
en el enfoque orientado a objetos, de tal forma que colección de basura automática.
podamos usar de una manera didáctica y sistémica
los libros de textos del lenguaje existentes. 5. Modelo sencillo de ejecución y de representación
de los objetos de datos: Debe poseer un modelo de
2. Requerimientos para un primer ejecución bien definido y fácilmente comprensible.
Debe ser transparente al programador el modelo de
lenguaje de programación orientado a memoria adoptado para los objetos de datos que se
objetos manipulan, sean del stack o del heap.
Presentamos a continuación algunas características 6. Sintaxis legible: El lenguaje debe poseer una
que son deseables en un lenguaje usado en un sintaxis consistente y fácilmente legible. Un
primer curso de programación, siguiendo las ideas programa legible es más fácil de corregir. Las
de (Kolling, 1999), junto con un análisis crítico de palabras son más intuitivas, en muchos casos, que
la característica para el lenguaje C++: los símbolos para expresar las construcciones del
lenguaje.
1. Claridad conceptual: Los conceptos del lenguaje
deben ser claros, fáciles de comprender y bien 7. No ser redundante: El lenguaje debe constar de
definidos. Esos conceptos deben ser representados pocas construcciones, debe ser claro y evitar
de la misma manera en que queremos expresarlos redundancias. Para los principiantes la flexibilidad
cuando los enseñamos. La implementación del que puede aportar la redundancia se convierte a
lenguaje debe reflejar el nivel de abstracción que menudo en confusión, más que en eficiencia.
queremos usar en nuestros modelos conceptuales.
8. Pocas construcciones: El lenguaje debe ser tan
Un lenguaje de programación proporciona a la vez corto como sea posible, siempre que incluya todas
un marco conceptual para pensar acerca de los
___________________________________________________________________________________________________________________
Revista de Informática Educativa y Medios Audiovisuales Vol. 3(7), págs. 12-21. 2006
ISSN 1667-8338 © LIE-FI-UBA. liema@fi.uba.ar 13
Enseñando programación con C++: una propuesta didáctica
____________________________________________________________________________________________________________________
las características importantes que desean enseñarse una construcción del lenguaje, como, por ejemplo,
en un curso de programación para un primer año. cuando se manipula la aritmética de punteros.
9. Fácil transición a otros lenguajes: El aprendizaje Modelo puro de objetos: En el lenguaje coexisten
del lenguaje debe facilitar una fácil transición a construcciones que facilitan tanto la programación
otros lenguajes ampliamente usados, como C/C++. procedural como la orientada a objetos, pues en
realidad C++ representa un paradigma híbrido entre
10. Facilidades de corrección: El lenguaje debe ellos.
suministrar recursos para facilitar la corrección del
programa, como prueba de aserciones, pre y Tratar de introducir la orientación a objetos usando
postcondiciones, depuración de errores y lenguajes híbridos tiene el peligro de que los
manipulador de excepciones. estudiantes con experiencias anteriores en
programación en un lenguaje procedural no se
11. Ambiente de trabajo amigable: El lenguaje debe sienten comprometidos con el cambio a un nuevo
poseer un ambiente de desarrollo de fácil uso, que estilo.
permita al estudiante concentrarse en las tareas de
aprender los conceptos de programación en vez del Seguridad: Una de las críticas más fuertes que se
propio ambiente. La presencia de un ambiente de hacen al C++ es la falta de un sistema de tipos
programación adecuado puede facilitar el trabajo seguro. La asignación de memoria dinámica
con un lenguaje técnicamente débil en comparación explícita, junto con la falta de colección de basura,
con un lenguaje más fuerte con poco apoyo externo. incrementan los riesgos de errores, tales como
Estos ambientes deben contar, al menos con referencias nulas o basura.
poderosos medios de edición y desarrollo de
aplicaciones, de una implementación confiable, Alto nivel: C++ incluye algunos constructores de
eficiente y bien documentada del lenguaje, así como bajo nivel, entre ellos las operaciones de
recursos para una adecuada depuración de los manipulación de bits, la aritmética de punteros y la
errores en los programas. administración de almacenamiento dinámico
explícito. Tiene un elemento importante a su favor
Características como la eficiencia, que es para la programación de alto nivel, que es el soporte
extremadamente importante para un lenguaje de de genericidad, con un chequeo de los tipos
programación en un entorno de producción de parametrizados en tiempo de compilación.
software, tienen poca significación en la enseñanza.
Tampoco se considera la flexibilidad del lenguaje Modelo sencillo de representación y ejecución de
para el desarrollo de aplicaciones en tiempo real objetos de datos: El modelo de objetos de datos de
(por ejemplo, con operaciones de manipulación de C++ es uno de los más complejos entre los
bits). lenguajes de programación que soportan orientación
a objetos. Ello está motivado en el hecho de que en
3. Evaluación crítica del C++ C++ aparecen variables dinámicas (usando
punteros) y no dinámicas (automáticas), lo que
El lenguaje C++ viola casi todos los requerimientos también se refleja en la semántica de algunas
de la lista anterior. Es un lenguaje híbrido que no construcciones importantes del lenguaje.
presenta los conceptos de una manera clara, posee
un conjunto de construcciones altamente redundante Sintaxis legible: En C++ se favorece el uso de
y un sistema de tipos inseguro. Analizamos para el símbolos en vez de palabras, por ejemplo, empleo
lenguaje cada una de las características enunciadas de la llave { en vez de begin, el uso de la misma
en el epígrafe 2: palabra clave u operador para diferentes fines, como
la sintaxis de una función abstracta virtual void f() =
Claridad conceptual: Los propósitos principales en 0; que emplea el operador de asignación. Todo esto
la creación del C++ fueron mantener una redunda en una falta de legibilidad de los programas
compatibilidad completa con C y considera la escritos en el lenguaje.
eficiencia en tiempo y espacio como su meta
principal. De ahí que el lenguaje se vea influenciado No redundancia: El hecho de mantener C++ la
por consideraciones de bajo nivel, que separan el compatibilidad con C hace que arrastre ciertos
concepto abstracto de su representación concreta. aspectos redundantes e interacciones de conceptos
En ocasiones es necesario comprender ciertos que aquejan a este último, lo que incrementa la
detalles de implementación para usar correctamente complejidad del lenguaje.
___________________________________________________________________________________________________________________
Revista de Informática Educativa y Medios Audiovisuales Vol. 3(7), págs. 12-21. 2006
ISSN 1667-8338 © LIE-FI-UBA. liema@fi.uba.ar 14
Enseñando programación con C++: una propuesta didáctica
____________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________
Revista de Informática Educativa y Medios Audiovisuales Vol. 3(7), págs. 12-21. 2006
ISSN 1667-8338 © LIE-FI-UBA. liema@fi.uba.ar 15
Enseñando programación con C++: una propuesta didáctica
____________________________________________________________________________________________________________________
3. Después se puede pasar a estudiar la estructura Se sugiere usar solamente las operaciones
del programa en C++, donde se introducen las imprescindibles de estrada/salida, según el
declaraciones de constantes, definiciones de formato de C++, o sea, usando la clase
variables, características de algunos tipos <iostream>.
primitivos y se estudian con mayor grado de
formalización sintáctica y semántica los Ya en estos momentos deben dedicarse una
operadores y las estructuras de control básicas cantidad de clases prácticas en laboratorios de
del lenguaje. computadoras, de tal forma que los estudiantes
se familiaricen con el ambiente de trabajo del
Es importante además estudian los conceptos de lenguaje y puedan correr algunos de los
alcance de identificadores y tiempo de vida de problemas, cuya expresión algorítmica dio en
las variables, así como la definición de espacios clases anteriores.
de nombres.
4. El concepto de función se introduce como es
El empleo de los operadores en estas primeras usual, también desde un punto de vista
semanas debe ser lo más próximo al algorítmico, en que se definan los parámetros
conocimiento matemático previo del estudiante, de entrada, de salida, de entrada/salida y formas
por ejemplo, no sería conveniente usar la que eventualmente usará la función para
asignación múltiple v = a = b, sino a = b y retornar valores que calcula.
después v = a. Tampoco es recomendable usar El uso del operador & para el traspaso de
formas de composición de operadores que sean parámetro por referencia debe quedar en este
oscuras, tales como momento a un nivel de definición, para luego
ser explicado el concepto en el capítulo
x = (y=5) + (z=4), dedicado a los punteros y las referencias. Se
puede comenzar con el estudio de funciones
siendo mejor emplear recursivas, el cual se puede retomar más
adelante con un mejor aparato conceptual, por
y = 5; z = 4; x = y + z. ejemplo, una vez se hayan estudiado estructuras
de datos lineales.
Aquí ya hay un espacio para las operaciones de
incremento y decremento, los operadores de Como inmediatamente vamos a proponer el
asignación múltiple y compuestos. estudio del concepto de clases, entonces resulta
aconsejable enseñar parámetros con valores por
Sin embargo, no resulta recomendable enseñar defecto y sobrecarga de funciones.
en este momento las operaciones de
manipulación de bits que ofrece en lenguaje, ni En este momento es mejor evitar impartirles
los moldes (casting). funciones genéricas (template de funciones) y
funciones con cantidad de parámetros
Tampoco es recomendable usar valores indeterminada. Debe evitarse también la
numéricos como expresiones lógicas para las declaración global de constantes y variables.
condiciones que controlan las instrucciones de
alternativa (if…) o de ciclos. Es sabido que una 5. Llega el momento de introducir el concepto de
expresión aritmética puede ser considerada en clase. El punto de partida es la definición de
el lenguaje como un caso particular de una tipos de datos abstractos que nos ayuden en la
expresión lógica, que se interpreta como representación de un problema, por ejemplo, la
verdadera si es diferente de cero, o falsa si es definición de alguna clase para datos numéricos
cero, interpretación que debe evitarse en estos (números fraccionarios, números complejos)
primeros momentos que se aprenden las donde se implementen algunas operaciones, que
instrucciones arriba citadas. En vez de escribir para la clase de los números fraccionarios
puede ser sumar, multiplicar, simplificar, leer,
if (a) ….. mostrar, etc.
___________________________________________________________________________________________________________________
Revista de Informática Educativa y Medios Audiovisuales Vol. 3(7), págs. 12-21. 2006
ISSN 1667-8338 © LIE-FI-UBA. liema@fi.uba.ar 16
Enseñando programación con C++: una propuesta didáctica
____________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________
Revista de Informática Educativa y Medios Audiovisuales Vol. 3(7), págs. 12-21. 2006
ISSN 1667-8338 © LIE-FI-UBA. liema@fi.uba.ar 17
Enseñando programación con C++: una propuesta didáctica
____________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________
Revista de Informática Educativa y Medios Audiovisuales Vol. 3(7), págs. 12-21. 2006
ISSN 1667-8338 © LIE-FI-UBA. liema@fi.uba.ar 19
Enseñando programación con C++: una propuesta didáctica
____________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________
Revista de Informática Educativa y Medios Audiovisuales Vol. 3(7), págs. 12-21. 2006
ISSN 1667-8338 © LIE-FI-UBA. liema@fi.uba.ar 20
Enseñando programación con C++: una propuesta didáctica
____________________________________________________________________________________________________________________
___________________________________________________________________________________________________________________
Revista de Informática Educativa y Medios Audiovisuales Vol. 3(7), págs. 12-21. 2006
ISSN 1667-8338 © LIE-FI-UBA. liema@fi.uba.ar 21