Está en la página 1de 10

Enseñando programación con C++: una propuesta didáctica

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.

Palabras clave: lenguajes de programación, orientación a objetos, enseñanza de la programación

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.

Key words: programming languages, object oriented, programming teaching.

1. Introducción partida, con vistas a acortar el trayecto entre


Siempre ha resultado un dilema la selección de cuál aprendizaje y empleo. De hecho, en (Tonella, 2002)
debe ser el lenguaje que de entrada usaremos para se expresa la conveniencia de adoptar ciertas reglas
enseñar a los estudiantes sus primeros conceptos de que permitan continuar usando el lenguaje C++ en
programación, máxime cuando el proceso evolutivo el desarrollo de sistemas, fundamentalmente donde
de la rama es extremadamente rico y rápido. la introducción del Java aún no parece adecuada.
Diferentes lenguajes se han usado en un primer
curso de programación, podemos citar Pascal, Ada, Es bien sabido que el lenguaje C++ presenta ciertos
Modula, C, C++, C#, Java. problemas que de entrada no lo hacen aparecer un
buen candidato para comenzar los estudios de la
Los criterios de selección no se desligan de las programación, tal y como se analiza en (Kolling,
necesidades de programación del sector industrial, 1999), aún así es elegido en una parte no
científico y empresarial, los cuales, en muchos despreciable de cursos universitarios del área
casos, gravitan en aplicaciones que usan el C/C++ informática.
como lenguaje de trabajo, lo cual tiene su influencia
a la hora de decidir cuál será el lenguaje básico de

__________________________________________________________________________________________________________________
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
____________________________________________________________________________________________________________________

• El concepto de tipo de dato abstracto se vuelve


Facilidad de transición a otros lenguajes: de difícil comprensión, en vez de inmediato y
Consideramos que el aprendizaje del lenguaje C++ concreto.
facilita la comprensión rápida de otros lenguajes de
amplio uso, como el Java. De otro lado, aprender el Aún cuando un lenguaje híbrido sea una selección
lenguaje C++ puede reportar beneficios en el caso de orden práctica, los estudiantes probablemente se
de realización de prácticas profesionales sentirán algo confundidos en el intervalo de tiempo
simultáneas por parte de los estudiantes en el sector en que aprenden los conceptos asociados a objetos.
industrial, que aún emplea con frecuencia esquemas
basados en C/C++. Tomando en cuenta lo arriba planteado y además el
hecho de que una asignatura de Programación tiene
Ayuda a la corrección: No hay en C++ soporte para otras subsiguientes que complementan lo aprendido
pre ni postcondiciones, existiendo una forma de en ella, como lo puede hacer una asignatura de
prueba con aserciones (a través del assert). Posee un Estructura de Datos, brindamos algunas
sistema de manipulación de excepciones. orientaciones metodológicas que pueden ser tenidas
en cuenta al momento de impartir la asignatura de
Ambiente de trabajo amigable: Para C++ se han Programación, a partir de nuestras propias
desarrollado muy buenos ambientes de trabajo, que experiencias (Díaz, 2002) y de recomendaciones,
incluyen herramientas para el desarrollo de como las encontradas en (Tonella, 2002) para
aplicaciones, tales como Visual C++ y Borland C++ definir un subconjunto de C++ que se acerque a las
Builder. características de Java. En estas orientaciones
sugerimos un orden en que puede ser impartida la
4. Estrategia pedagógica en el uso de asignatura.
C++ para la orientación a objetos en una
1. No abandonar a lo largo del curso un estilo de
primera asignatura de programación enseñanza de la programación basada en la
resolución de problemas, o sea, del problema a
En lenguajes híbridos para la orientación a objetos,
la búsqueda de los algoritmos que le brinden
como lo es el caso de C++, con la coexistencia para
solución y de ahí a la codificación del algoritmo
la programación estructurada, es común el uso de
en un lenguaje de alto nivel.
una estrategia pedagógica en la que el concepto de
objeto no se enseñe como el primer concepto de la
El estudiante debe quedar convencido, desde
programación, sino que algunos otros conceptos,
que comienza la asignatura, de que su eficacia
tales como expresiones e instrucciones del lenguaje
como programador no está precisamente en
hasta el concepto de tipo de dato abstracto sean
dominar la herramienta de programación, cosa
trabajados antes de introducir el concepto de clases
evidentemente necesaria, sino en saber resolver
como desarrollo de los tipos de datos abstractos
problemas con la computadora para lo cual se
(TDA).
requiere dominar una metodología de la
programación cuyo eje central es el algoritmo.
Este esquema tiene como ventaja que da
continuidad a una forma de aprendizaje que
2. Continuando la idea de la primera orientación,
normalmente traen los estudiantes de la enseñanza
dedicar las primeras semanas de clase al
media, basado en el desarrollo de algoritmos y la
desarrollo de algoritmos, usando para su
programación estructurada. Sin embargo, pueden
expresión alguna forma de seudocódigo
señalársele algunas desventajas:
próxima al lenguaje natural. Cuando se
introduzcan en las características de un
• Uso simultáneo de tipos de datos básicos y de lenguajes de programación y se enuncien sus
tipos de objetos y sus incompatibilidades. principales estructuras de control (secuencia,
alternativa y ciclos) y algunos de sus
• Uso de punteros en muchos de los lenguajes principales operadores (aritméticos, asignación,
candidatos para ser usados en la enseñanza, con etc), podemos entonces, adicionalmente,
necesidad de derreferenciación explícita y sin comenzar a introducirlos en la expresión del
uso de colectores de basura. algoritmo usando la forma de codificación
propia del C++.

___________________________________________________________________________________________________________________
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.

escribir A partir de ahí definimos sus rasgos distintivos


(en atributos y operaciones necesarias para el
if (a != 0)….. tipo) y presentamos al concepto de clase como
una herramienta eficaz para codificar en el

___________________________________________________________________________________________________________________
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
____________________________________________________________________________________________________________________

lenguaje de programación la definición de tal punteros y cadenas de caracteres, sin embargo


tipo y su empleo en el problema. en la quinta edición ya se introduce un primer
momento del estudio de las clases una vez
Deben ser estudiadas las formas de visibilidad dados elementos básicos del lenguaje y antes de
que implementa C++ para las componentes de las estructuras de control.
clase, las partes de la clase (interfase e
implementación), constructores simples y 6. A continuación se introducen tipos
destructor. enumerativos y fundamentalmente tipos de
arreglos. Una vez explicados los principales
Al tratar con this, debe ser a un nivel muy conceptos sobre arreglos, se introducen las
simple, que nos evite mezclarnos con los formas en que los arreglos se operan o
punteros y lograr que en este momento sea transforman (lecturas, escrituras, cálculos,
aceptado por definición que *this es el objeto búsquedas, etc) construyendo clases en que sus
actual que envía el mensaje en proceso. atributos sean la cantidad real de elementos que
tiene el arreglo y la definición de los elementos
Debe explicarse el concepto de estado de un del arreglo, usando el constructor por defecto
objeto y a partir de aquí las funciones de acceso de un arreglo, por ejemplo:
a un objeto (las que retornan el valor del estado
o parte del estado del objeto), su importancia y class Valor
porqué comúnmente se les declara como { private:
funciones const. Pueden ser empleados float elem[100];
ejemplos de objetos compuestos. int cant;
..............
Cuando se emplea un lenguaje híbrido en la };
orientación a objetos para enseñar, como lo es Deben estudiarse las cadenas de caracteres,
C++, hay criterios divididos en cuanto a: tanto al estilo de C como de C++ (objetos
string).
• introducir el concepto de clase en este
punto del programa de la asignatura, en que 7. Estudiamos una primera parte del concepto de
otras construcciones de datos propias del herencia. Aquí se introducen el concepto básico
paradigma procedural aún no se han de herencia, los conceptos de clases y
estudiado, superclases, las formas en que se heredan
atributos y métodos, la visibilidad protected,
• hacer un estudio del lenguaje primeramente todo a través de un ejemplo introductorio.
desde una óptica completamente
procedural y luego introducir los conceptos Se estudian las características de los
de clase y otros propios de la orientación a constructores y destructores de las clases
objetos. derivadas. Recordemos que hasta este punto del
curso las operaciones que estos métodos
De nuestra propia experiencia, consistente en realizan son triviales, dado que aún no hemos
emplear el primer enfoque los últimos cursos en trabajado con variables dinámicas.
tanto que el segundo enfoque en cursos Se demuestra, en una práctica de laboratorio a
anteriores, defendemos el primero, que ha partir del ejemplo de entrada, la importancia de
mostrado una mejor apropiación de los definir métodos virtuales aquellos que se
conceptos de la programación orientada a redefinen en diferentes niveles de la jerarquía
objetos. de clases, denotando además que esta definición
constituye una forma de polimorfismo.
Ese propio enfoque que escogemos se refleja en
la propia evolución de los textos dedicados a la 8. Llegamos al momento de introducir los
enseñanza del lenguaje C++. Si comparamos la punteros. Sería deseable no tener que enseñar a
cuarta y la quinta edición del texto de Deitel los estudiantes el concepto de puntero en un
“C++ How to Program” (Deitel, 2002), (Deitel, primer curso de programación. Esto sería
2005) notamos que hasta la cuarta edición el posible si el lenguaje manipulara sus objetos de
primer estudio del concepto de clases se dejaba datos de forma dinámica por defecto, lo cual no
hasta después del estudio de los conceptos de es el caso de C++. Siendo entonces
estructuras de control, funciones, arreglos y imprescindible el uso de los punteros para

___________________________________________________________________________________________________________________
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
____________________________________________________________________________________________________________________

definir variables dinámicas y todos los y parámetros actuales y formales en una


conceptos subsecuentes relacionados, se jerarquía de clases.
recomiendan las siguientes acciones en un
primer momento: Considerando el sistema de conocimientos y
habilidades acumulados hasta este punto por el
• Enseñar el concepto de puntero, estudiante en el tema de herencia, es
fundamentalmente como vía de definir aconsejable desarrollar ejercicios en que puedan
variables dinámicas, con new y dispose. construir nuevas clases ampliando clases que
han sido desarrolladas en los tópicos anteriores,
• No enseñar aritmética de punteros. bien buscando una nueva especialización o
simplemente para ampliar la funcionalidad de la
• Definir la relación entre punteros y clase. Se sugiere evitar en estos momentos el
arreglos, pero insistiendo en el uso del uso de la herencia selectiva.
indizado [] como base del acceso a las
componentes del arreglo. Por último se estudian las clases abstractas y las
funciones virtuales puras, a través de un
• Disciplinar a los estudiantes en el chequeo ejemplo de una jerarquía con una clase base
del rango de los índices de sus arreglos. raíz abstracta, por ejemplo, las figuras en el
plano, como en el ejemplo:
• Dar herramientas didácticas de
programación para evitar la aparición de class TFigura
referencias nulas o basura. { protected:
float x, y;
• Hacer un estudio más detallado de los tipos public:
de cadenas de caracteres definidas a través TFigura(float cx=0, float cy=0)
de punteros y de la biblioteca <string> de { x = cx;
C++. y = cy;
}
virtual void Mostrar() = 0;
• Crear objetos dinámicos.
virtual float Area() = 0;
// otras funciones...................
• Explicar qué es el puntero this.
};
// Clases derivadas
• Usando la definición de una clase para
class TCirculo: public TFigura
manipular arreglos dinámicos, que
{ .........
incluyan entre otras operaciones la
public:
asignación de un arreglo para otro,
// Funciones concretas Area y Mostrar para
profundizar en la implementación de
// TCirculo
constructores y destructores para objetos
........
con campos dinámicos. Se debe enseñar
};
además el constructor de copia y su
.......
necesidad.
class TCuadrado: public TFigura
{ .........
• Enseñar los conceptos de listas lineales public:
(incluyendo colas y pilas) y mostrar // Funciones concretas Area y Mostrar para
implementaciones usando arreglos // TCuadrado
definidos dinámicamente o estructuras ........
enlazadas, en las que emplearán punteros };
para en enlace entre cada elemento y su .......
contiguo.
Mostrar como usar la clase con un programa
Retomamos el concepto de herencia, en este ejemplo, tal como:
caso para enseñar conceptos relativos a la
definición de tipos-subtipos en una jerarquía y void main()
como esto permite definir objetos polimórficos. { TFigura *p[2];
Además se enseña cómo se establece la // da espacio e inicializa un círculo
compatibilidad entre objetos, punteros a objetos
___________________________________________________________________________________________________________________
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 18
Enseñando programación con C++: una propuesta didáctica
____________________________________________________________________________________________________________________

p[0] = new TCirculo(0,0,5); typedef double tfun(double);


// da espacio e inicializa un cuadrado double SumaCuadrado(tfun &f,int m,int n)
p[1] = new TCuadrado(1,1,4); { double sum=0;
for (int i=0; i<2; i++) int k;
{ // Se muestran los datos de la figura adecuada for (k=m; k<=n; k++)
p[i]->Mostrar(); sum += f(k) * f(k);
// Ahora se imprime el área de la figura return sum;
cout << "Su área es: " << p[i]->Area() }
<<endl;
} double g(double x)
system("PAUSE"); { return 1.0 / x;
} }
void main()
donde se muestra un arreglo de objetos polimórficos { double a, b;
con diferentes figuras de la jerarquía. a = SumaCuadrado(g, 1, 5);
b = SumaCuadrado(sin, 0, 4);
Por último se les muestra un ejemplo en que puedan cout <<"a= " <<a <<" b= " <<b <<endl;
aprender cómo usar la herencia privada para una }
clase derivada pueda obviar métodos de su clase
base. c) Formas de polimorfismo operacional

Hasta aquí se han relacionado conceptos básicos de • Coerción (casting).


programación que se pueden encarar en la primera
asignatura destinada a la enseñanza de la Se enseña la forma propia que posee C++ y
programación. En dependencia del tiempo la heredada de C. En este momento se
disponible para su impartición y de la profundidad formaliza el estudio de punteros void y su
conceptual a la que se quiera llegar en la asignatura, uso en la compatibilización entre tipos
proponemos seleccionar algunas de las siguientes punteros mediante la coerción.
temáticas en el orden que se especifica:
• Sobrecarga de operadores.
a) Estructuras y uniones, que ahora constituyen
características redundantes en el lenguaje, pero Como sabemos, la sobrecarga de
si los estudiantes tienen a la programación operadores es un recurso muy cómodo, que
como objeto de estudio deben conocer estos hace permite a los programadores construir
tipos. tipos de datos de una forma similar a los
tipos simples predefinidos (int, long, etc.),
b) Tópicos adicionales sobre punteros: dando una interpretación para el tipo de los
operadores predefinidos del lenguaje. Esto
• aritmética de punteros, conlleva el estudio de las funciones
operadoras (operator) y el concepto de
• punteros de tipo const y punteros a objetos función amiga de una clase (friend), uso y
dinámicos constantes. peligros.

• Punteros y referencias para las funciones: Se debe desarrollar alguna clase


aquí lo deseado es poder construir listas de previamente estudiada, como la clase de
funciones y también facilitar el traspaso de manipulación de números fraccionarios o
funciones como parámetros formales de de números complejos u otra afín, usando
funciones. En este último caso sugerimos las funciones operadoras, mostrando el uso
usar el traspaso por referencia al estilo de o necesidad de usar funciones amigas
C++, como en el ejemplo siguiente para dentro de clases que implementan
obtener la suma de los cuadrados de una funciones operadoras.
función f evaluada para valores enteros
entre m y n dados. Por otra parte debe reconocerse las
diferencias entre implementar funciones
#include <iostream.h> miembros de una clase y funciones no
#include <math.h> miembros amigas de la clase, desarrollando

___________________________________________________________________________________________________________________
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
____________________________________________________________________________________________________________________

algunos ejercicios en que se pida excelentes ambientes de trabajo y demandas del


implementar la misma operación usando sector industrial se brindan un conjunto de
los dos esquemas. sugerencias que parten de las experiencias
didácticas acumuladas de siete generaciones de
Algunas sobrecargas interesantes que estudiantes que han recibido la asignatura de
deben mostrarse, además de los operadores Programación en el primer año de la carrera, usando
aritméticos, lógicos clásicos, deben ser la como lenguaje de programación al C++, además de
sobrecarga del operador de asignación =, experiencias del uso del lenguaje Java en otros
en una clase como la de arreglos dinámicos cursos subsiguientes de programación. Estas
previamente estudiada. Así mismo se sugerencias ofrecen una propuesta de cómo
recomienda enseñar, usando esta propia establecer secuencia de contenidos de la asignatura
clase, la sobrecarga del operador de y de posibles ejercicios a desarrollar en algunas de
indización []. Finalmente pueden ser las temáticas.
mostradas otras sobrecargas de operadores.
Todo lo anterior nos reafirma una idea que es de
• Funciones y clases genéricas. todos conocida, pero no tan unánimemente aplicada:
el profesor debe enseñar a los estudiantes los
Se define el concepto de genericidad y su principios de la programación (en este caso
importancia práctica y se enseña cómo orientada a objetos), lo cual podríamos hacerlo en el
definir templates de funciones y de clases lenguaje que consideremos apropiado. Resulta
(puede usarse como ejemplo el bien primaria una metodología de programación y
conocido de la pila genérica). Un estudio subsidiaria de ésta la codificación en un lenguaje de
más profundo debe ser dejado a una programación.
asignatura subsiguiente de Estructuras de
Datos, donde pueden explotar además Otra idea extremadamente importante es que las
bibliotecas del tipo STL (Standard asignaturas de corte matemático que son enseñadas
Template Library). en el propio año académico que la programación,
como lógica matemática, álgebra y análisis
d) El sistema de manipulación de excepciones del matemático, pueden influir muy positivamente en el
lenguaje. Si se decide estudiar este tema, aprendizaje por parte del estudiante de una buena
debería ser introducido después de transcurrido metodología de programación, cuestión que algunas
el 75% del fondo de tiempo de la asignatura y veces también es obviada.
no precisamente en sus finales.
De otro lado los estudiantes no deben abandonar la
4. Conclusiones universidad sin ser capaces de usar un lenguaje de
amplio uso en el mundo real actual, como en la
Programar es un desafío. La programación requiere actualidad lo continúa siendo C++. En este sentido,
el uso de habilidades de pensamiento abstracto y el lenguaje usado en la primera asignatura de
muchos estudiantes no han recibido asignaturas que programación debe ser relevante para el dominio de
requieran o les hayan ayudado a desarrollar estas los lenguajes de más amplio uso científico e
habilidades en niveles precedentes de enseñanza, industrial del momento.
considerando que la asignatura de Programación
debe ser una de las primeras que enfrente un Bibliografía
estudiante de carreras de perfil afín a la
computación. Muchos estudiantes entran a la clase Arnold, K., Gosting, J. (1996) The Java
de programación con escasas habilidades Programming Language, Addison-Wesley.
conceptuales para programar. Ben-Ari, M. (1998). Constructivism in Computer
Science Education, SIGSCE 98 Atlanta, GA., p.257-
En el presente trabajo se ha hecho un análisis 261, 1998.
detallado de algunas deficiencias que presenta el Deitel, H., Deitel, P. (2002). C++, How to Program,
lenguaje C++ al ser considerado como el primer 4th edition.
lenguaje en que los estudiantes que comienzan a Deitel, H., Deitel, P. (2005). C++, How to Program,
familiarizarse con la programación orientada a 5th edition.
objetos. A partir de tales deficiencias, pero también Díaz, J. (2002): Introducción a la programación
considerando algunas de sus bondades, como la usando C++. Universidad de Oriente, Cuba.
riqueza de elementos conceptuales, presencia de

___________________________________________________________________________________________________________________
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
____________________________________________________________________________________________________________________

Eckel, B. (2003): Thinking in Java, Third Edition.


Prentice Hall.
Kölling, M. (1999). The problem of teaching object-
oriented programming. Part I: Environments.
Journal of Object-Oriented Programming, 11(8):
p.8-15.
Stroustrup, B. (1997): The C++ programming
language, Third Edition. Addison-Wesley.
Tonella, P., Potrich, A. (2002). Cjj: a subset of C++
compliant with Java. Science of Computer
Programming, 42, p.229-271.

___________________________________________________________________________________________________________________
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

También podría gustarte