Download Una propuesta para organizar la enseñanza de la Orientación a

Document related concepts
no text concepts found
Transcript
Una propuesta para organizar la enseñanza de la
Orientación a Objetos
Jesús García Molina, Marcos Menárguez Tortosa y Begoña Moros Valle
Depto. de Informática y Sistemas
Universidad de Murcia
Campus de Espinardo-30071 Murcia
e-mail: (jmolina|marcos|bmoros)@um.es
Resumen
En este trabajo se presenta una propuesta sobre
cómo organizar en los planes de estudio de las
titulaciones de informática los temas relacionados
con la orientación a objetos. Se describen dos
asignaturas cuatrimestrales obligatorias de seis
créditos: una primera de Introducción a la
Programación Orientada a Objetos y una segunda
sobre Análisis y Diseño Orientado a Objetos.
Proponemos que la primera sea obligatoria en las
tres titulaciones y que la segunda sea obligatoria
en Ingeniero en Informática y optativa en las dos
titulaciones técnicas. Ambas conforman un curso
que proporcionará al alumno una formación
básica en el desarrollo de software orientado a
objetos. Esta propuesta está en la línea expuesta
en el Computing Curricula 2001 de ACM/IEEE.
1. Introducción
En la década pasada la programación orientada a
objetos (OO) se ha consolidado como el
paradigma de programación más apropiado para
construir software de calidad, sobre todo porque
favorece la escritura de código reutilizable y
extensible, además de reducir el salto semántico
entre los modelos del análisis del problema y el
código de la aplicación: los objetos del dominio
del problema son objetos de la solución software.
La propuesta curricular Computing Curricula
2001 de ACM/IEEE [2] reconoce la importancia
adquirida por la programación OO desde la
publicación de las recomendaciones curriculares
de 1991 y añade este área al núcleo de
conocimientos básicos de la disciplina,
estableciendo que cualquier estudiante de
informática debería tener una formación en
Programación OO (unidad PL6 de Lenguajes de
Programación), Análisis y Diseño OO y Patrones
de Diseño (unidad SE1 de Ingeniería del
Software).
Las directrices generales propias de las
titulaciones de informática (B.O.E. de 20 de
Noviembre de 1990) no incluyen descriptores
relacionados con la OO en ninguna de las materias
troncales, de modo que la forma de incorporar a
los planes de estudio la enseñanza obligatoria de
la OO, es a través de asignaturas obligatorias, tal y
como se está haciendo en la mayoría de los planes
de estudio aprobados recientemente, como es el
caso de los planes de la Universidad Politécnica
de Valencia y de la Universidad de Alicante, entre
otros. También se puede aprovechar las
asignaturas que corresponden a la materia troncal
Ingeniería del Software para incluir contenidos
sobre construcción de software OO.
En nuestra facultad se imparte una asignatura
sobre programación OO desde el curso 1991-92,
en el que se implantaron los estudios de segundo
ciclo. Se trataba de una asignatura de cuarto curso,
cuyos descriptores correspondían a la materia
troncal Ingeniería del Software. En la actualidad,
nuestros planes de estudio incluyen la asignatura
Programación Orientada a Objetos como optativa
en las dos titulaciones técnicas (planes de 1994) y
como obligatoria en el primer ciclo de Ingeniero
en Informática (plan de 1996, con otro nombre).
Esta titulación también incluye una asignatura
troncal en cuarto curso sobre análisis y diseño
OO.
En este trabajo analizamos cómo organizar la
enseñanza del paradigma OO en los planes de
estudio de informática. Presentamos una
propuesta para la titulación Ingeniero en
Informática, indicando como trasladarla a las
titulaciones técnicas. Esta propuesta es fruto de
nuestra experiencia al impartir las asignaturas
relacionadas con la OO en nuestra facultad.
El trabajo se organiza del siguiente modo. En
la siguiente sección presentamos nuestra
propuesta para Ingeniero en Informática. Luego
describimos las dos asignaturas que conforman la
enseñanza obligatoria sobre OO que proponemos
y que actualmente impartimos en nuestra facultad.
A continuación comentamos cuál es la situación
en el caso de las titulaciones técnicas y en los
futuros planes. Finalmente presentamos las
conclusiones.
2. La propuesta
Creemos que un ingeniero en informática debe
recibir una formación básica en orientación a
objetos a través de dos cursos: uno de
introducción a la programación OO (nos
referiremos a él como IPOO) y otro de análisis y
diseño OO (nos referiremos a él como ADOO).
En IPOO se introducen los conceptos básicos que
caracterizan al paradigma de programación OO y
en ADOO el alumno conoce y aprende a aplicar
un proceso software OO y los patrones de diseño
básicos. IPOO se desarrollaría como una
asignatura de tercero de seis créditos, una vez que
el alumno conoce la programación procedural y
modular, mientras que ADOO se cursaría como
una asignatura de cuarto curso también de seis
créditos. Es recomendable que ambos cursos no se
impartan en el mismo año ya que es bueno que el
alumno tenga tiempo para madurar esa nueva
visión de la programación que le muestra IPOO.
Desde hace cinco años, nuestro departamento
sigue este enfoque en los estudios de Ingeniero en
Informática, a través de la asignatura obligatoria
Diseño de Programas en tercero (corresponde a
IPOO) y de la troncal Arquitectura del Software
de cuarto (corresponde a ADOO). En este trabajo
utilizaremos los nombres IPOO y ADOO, en vez
de los nombres de estas asignaturas, para insistir
en el carácter general de nuestra propuesta.
La organización de IPOO presupone un
enfoque procedural-primero para la introducción
a la programación del primer año, por los motivos
que se exponen en [5]. En la mencionada
propuesta curricular de ACM/IEEE [2] se señala
que es posible idear planes en los que la
introducción a la programación puede ser
abordada tanto a través del paradigma imperativo
como del paradigma OO o incluso del funcional,
siendo una cuestión a debatir en cada facultad. En
[5] se defiende comenzar con el paradigma
imperativo, aunque con un enfoque en el que los
conceptos de secuencia e inducción juegan un
papel central, así como el de tipo abstracto de
datos.
Proponemos pues seguir un enfoque que
podemos llamar evolutivo, en el sentido que
pasamos de la programación procedural a la
modular y luego aterrizamos en la programación
orientada a objetos. En primer año una
introducción a la programación tal y como la
descrita en [5]; en segundo curso el alumno
aplicaría la programación modular dentro una
asignatura anual de algoritmos y estructuras de
datos, antes de cursar las dos asignaturas
mencionadas arriba IPOO y ADOO que en su
conjunto constituyen un curso completo sobre
construcción de software OO que incluirían todos
los contenidos sobre OO considerados como
básicos en la recomendación curricular de
ACM/IEEE [2].
B. Meyer critica este enfoque evolutivo al
considerarlo fruto de una visión equivocada del
profesor que cree necesario enseñar la
programación siguiendo el orden en que él ha
conocido los paradigmas, y se pregunta por qué no
empezar con los objetos desde el primer año, dado
que todos estamos de acuerdo en que la OO es el
medio adecuado para construir software. Aunque
reconocemos el papel de B. Meyer en el desarrollo
de la OO y sus grandes aportaciones, después de
reflexionar sobre esta cuestión y tras una
experiencia de más de diez años creemos que
nuestro enfoque procedural-modular-OO es el
camino adecuado para abordar la enseñanza de la
programación, ya que el alumno puede valorar
mucho mejor las ventajas de la OO y además es
más natural el paso procedural-OO que al revés.
De hecho, en la primera parte del libro [7], B.
Meyer justifica las ventajas de la OO partiendo de
la experiencia del lector en programación
procedural, en el manejo de rutinas y módulos, y
en el conocimiento del diseño descendente.
Lógicamente, el curso IDOO es un
prerrequisito para el curso ADOO. En estos dos
cursos, el alumno recibe una formación que le
capacita para estudiar otras temas relacionados
con la tecnología del software OO como es la
construcción de aplicaciones basadas en objetos
distribuidos (RMI y CORBA) y el desarrollo
basado en componentes. Nuestro departamento
oferta en quinto curso dos asignaturas
relacionadas con estas dos tecnologías.
Conviene señalar que en las titulaciones
técnicas se sigue el enfoque evolutivo comentado,
pero no en la titulación superior ya que dos de las
cuatro asignaturas de programación que hay entre
primero y segundo no están adscritas a nuestro
departamento y en ellas se utiliza Java para la
enseñanza de los tipos abstractos de datos y
estructuras de datos. En el siguiente apartado
comentaremos este hecho. A continuación
describiremos los cursos IDOO y ADOO que
proponemos.
3. Introducción a la Programación
Orientada a Objetos
El objetivo de esta asignatura es introducir al
alumno en el paradigma de programación OO,
siendo sus objetivos: i) describir los conceptos que
lo caracterizan: clase, objeto, herencia,
polimorfismo y ligadura dinámica, ii) contrastar
cómo esos conceptos se reflejan en los cuatro
lenguajes OO más extendidos: C++, Java,
Smalltalk y Eiffel, iii) enseñar un lenguaje OO y
un entorno de programación, iv) introducir
algunas técnicas y heurísticas básicas de
programación OO y v) valorar en qué medida las
técnicas OO mejoran la calidad del software.
La asignatura se plantea como dos cursos que
se imparten en paralelo desde la primera semana:
una parte teórica de treinta horas y una parte
práctica con quince sesiones de hora y media en el
laboratorio. En las clases prácticas el alumno
recibe un curso de programación OO en Java.
Este curso se imparte de forma simultánea a las
clases de teoría, ya que no es viable llevar las
clases prácticas al ritmo de las clases teóricas.
Esto no crea confusión en el alumno, ya que las
clases teóricas sirven para proporcionar una visión
más general de los conceptos que previamente ha
visto en las clases prácticas en el contexto de Java.
Al final del curso, las dos partes han debido servir
para conseguir los objetivos y que el alumno tenga
unos buenos conocimientos sobre programación
OO, dos partes separadas que forman una unidad
coherente.
En las clases teóricas describimos con detalle
todos los conceptos que caracterizan al paradigma
OO. Primero se estudian todos los conceptos
relacionados con clases y objetos: ocultación de
información, mensajes, semántica referencia,
creación y copia de objetos, igualdad e identidad,
y genericidad. Después se estudia un capítulo
sobre el diseño por contrato que sirve para
contrastar los mecanismos de asertos y
excepciones de Java y Eiffel. A continuación se
estudian todos los aspectos que tienen que ver con
la herencia: principio de sustitución, polimorfismo
y ligadura dinámica, intento de asignación,
genericidad en Java, clases abstractas, código
genérico, herencia y ocultación de información,
herencia múltiple, herencia repetida, diferentes
tipos de herencia, e implementación de la ligadura
dinámica. En el estudio de la herencia también se
incluye la descripción de algunos patrones básicos
como son: Template Method (para ver el papel de
las clases parcialmente diferidas para escribir
código genérico), Iterador (distinguiendo entre
iteradores externos e internos, analizando cómo
resolver con herencia la imposibilidad de pasar
funciones como argumentos de un método),
Observer (para ver el papel que pueden jugar las
interfaces Java) y Composite (como ejemplo de
herencia múltiple). Finalmente se valora cómo la
OO ayuda a mejorar la calidad del software y se
introducen heurísticas básicas para la creación de
software OO: algunas de las heurísticas de Riel
[8] y los patrones Controlador y Experto [6].
En un curso de estas características es
importante que el alumno no adquiera la visión de
la OO ofrecida por un lenguaje particular, sino
que comprenda los conceptos que subyacen a la
OO de una forma independiente del lenguaje. Para
conseguir este objetivo, en la parte teórica primero
se explican los conceptos sin recurrir a un
lenguaje y luego se muestra el contraste en la
forma en que son reflejados en los cuatro
lenguajes OO que consideramos. Con este
enfoque no se encorseta la visión del alumno a la
ofrecida por un lenguaje concreto, sino que
adquiere una compresión de los conceptos de más
alto nivel. No cabe duda que el contraste
enriquece la visión del alumno, ya que se favorece
su actitud crítica y se le prepara para poder
programar, sin grandes dificultades, en cada uno
de los cuatro lenguajes, ya que conoce los
aspectos clave relacionados con la OO en cada
uno de ellos. Además, está capacitado para valorar
cómo se introducen los conceptos OO en otros
lenguajes existentes o que puedan definirse en un
futuro (por ejemplo, podría dominar sin dificultad
C# ).
Para ilustrar la idea sirva el ejemplo de la
ocultación de información. Al alumno se le
muestra su significado y se le justifican sus
beneficios, entonces se revisan y se contraponen
las variaciones que encontramos en los diferentes
lenguajes: atributos públicos en C++ y Java,
clases amigas en C++, visibilidad friendly en Java,
clases anidadas en Java y C++, exportación
selectiva en Eiffel, todos los métodos son públicos
en Smalltalk ocultación a descendientes en Java y
C++, …
En la parte práctica nos hemos tenido que
enfrentar al problema de la elección de un
lenguaje OO. El lenguaje ideal para la docencia
sería aquel que tuviese buenas propiedades,
existiesen buenos entornos y abundante
documentación, y que además su uso estuviese
muy extendido entre las empresas de desarrollo.
Desde nuestro punto de vista, que un lenguaje
tenga buenas propiedades supone que debería: i)
ser OO puro para obligar al alumno a programar
dentro del paradigma, ii) reflejar con claridad los
conceptos OO, por ejemplo, no parece
conveniente poder declarar que un atributo se
exporta en modo escritura o tener que declarar los
métodos en los que se aplicará ligadura dinámica
o no poder declarar métodos privados, iii) ser
legible, iv) ser pequeño y con gran potencia
expresiva, v) ser tipado estáticamente, para
favorecer la legibilidad y fiabilidad. Además, sería
conveniente que permitiese escribir asertos para
posibilitar la programación por contrato [7] y que
incluyese un mecanismo de genericidad. En
cuanto a la exigencia de un buen entorno
entendemos la existencia de entornos robustos,
gratuitos, fáciles de usar y que no necesitasen
muchos recursos.
Como es lógico, no existe un lenguaje que
cumpla todos los requisitos anteriores. Creemos
que Eiffel o Eiffel# podría ser la mejor elección
considerando sus buenas propiedades (OO puro,
tipado, legible, incluye genericidad, mecanismo
de asertos y un entorno robusto), sin embargo está
muy poco extendido y no hay buenos entornos
gratuitos. Por ello hemos elegido Java que
podemos considerar casi OO puro ya que el
alumno no puede salirse del paradigma OO al
programar (aunque no es OO puro ya que hay una
distinción entre tipos básicos y clases, un método
main en las clases y otras cuestiones), es tipado
estáticamente, refleja con sencillez los conceptos
OO si lo comparamos con C++, existe abundante
documentación y sobre todo está muy extendido
en la industria, habiendo surgido alrededor de él
una importante tecnología para el desarrollo de
aplicaciones OO: Servlet, RMI, Beans, EJB,
JINI,.. Con Java tenemos un lenguaje que no tiene
tan buenas propiedades como Eiffel (por ejemplo,
no tiene genericidad, ni herencia múltiple) pero a
cambio se trata de un lenguaje muy extendido que
es el lenguaje más utilizado en el desarrollo de
aplicaciones web. Además, el alumno seguirá
trabajando con Java en asignaturas posteriores que
traten de tecnología del software, por ejemplo las
relacionadas con componentes y objetos
distribuidos.
Hasta hace dos años, Smalltalk fue el lenguaje
elegido por tratarse de un lenguaje OO puro, muy
simple pero de gran potencia expresiva y con
buenos entornos de libre distribución que
consumen pocos recursos. Nunca nos planteamos
C++ por tratarse de un lenguaje híbrido, muy
complicado y poco legible. Al aparecer Java, y a
pesar de su rápido éxito, no apostamos por él ya
que no era un lenguaje estable, no se disponían de
buenos entornos y por la resistencia al cambio.
Entendíamos que Smalltalk permitía cumplir los
objetivos y teníamos mucha experiencia y
documentación. Sin embargo, ahora no dudamos
que Java es la mejor elección.
Como trabajo práctico, el alumno debe
realizar un boletín de ejercicios, de complejidad
creciente, en los que debe demostrar su
conocimiento de aspectos propios de la
programación
en
Java,
(entrada/salida,
excepciones, concurrencia, serialización e
interfaces gráficos), así como de los conceptos de
la OO y el manejo de las clases básicas de la
jerarquía como son las colecciones. Estos
ejercicios obligan al alumno a diseñar e
implementar sus primeras clases para resolver
problemas concretos, a ver los programas como
una colección estructurada de clases. Finalmente
debe desarrollar un pequeño proyecto de
programación que abarque de una forma global
todos los conceptos estudiados en los ejercicios,
en el que se puedan aplicar algunos patrones y
heurísticas como la separación modelo-vista, el
patrón Observer y los patrones de reparto de
responsabilidades Controlador y Experto [6]. En
los dos últimos cursos hemos encontrado
adecuado como proyecto de programación la
implementación de un juego en el que varios
personajes interactuan en un escenario que
impone unas reglas. La implementación exige
diseñar las clases que representan el escenario y
una jerarquía interesante para representar los
personajes del juego (con clases abstractas, código
genérico, interfaces,...), y utilizar unos patrones
sencillos de colaboración entre objetos.
Conviene señalar que en este curso se cubren
todos los temas incluidos en PL6 (ObjectOriented Programming) dentro del Computing
Curricula 2001, así como los objetivos de
aprendizaje que allí se plantean.
Las encuestas y comentarios de los alumnos
muestran su rechazo a la utilización de Java en
dos asignaturas de primer y segundo curso,
dedicadas fundamentalmente a trabajar con
estructuras de datos y el concepto de tipo
abstracto de datos. Los alumnos se quejan de que
deben utilizar los conceptos OO sin conocerlos,
actuando a base de recetas, “aquí hay que poner
Object”, “aquí debes hacer una conversión de
tipos”, “las interfaces son un tipo de clases”.
Reconocen que el conocimiento que tienen de
Java no les ha sido de mucha ayuda a la hora de
cursar IPOO, ya que tenían pocos conceptos
claros. Estas opiniones refuerzan nuestra idea de
empezar con el paradigma procedural en el primer
curso.
4. Análisis y Diseño OO
Este curso es una continuación del anterior y se
dedica a proporcionar al alumno una formación
que le permita abordar de una forma sistemática el
desarrollo de aplicaciones OO, aplicando un
proceso software. Se supone una parte teórica y
otra práctica de tres créditos cada una. En las
clases teóricas, primero se describe el Lenguaje
Unificado de Modelado, UML como notación
estándar para el modelado OO, luego se describe
un proceso basado en UML y finalmente se
presentan y discuten los patrones de diseño de
Gamma et al. [3].
No cabe duda que actualmente el modelado
OO está centrado en UML que se ha convertido en
un estándar “de facto”. En este curso se realiza
una descripción detallada del lenguaje UML,
analizando con detalle el modelado de casos de
uso, modelado estructural, modelado del
comportamiento y modelado dinámico.
Tras la presentación de UML, se describe un
proceso para UML orientado al desarrollo de
aplicaciones de gestión (business applications). El
proceso presentado es simple y está destinado a
aplicaciones cuyo desarrollo no involucra equipos
de programadores ni tiempos de desarrollo muy
grandes. Se trata de un proceso iterativo,
incremental y guiado por los casos de uso, que es
resultado de añadir una etapa de modelado de
negocio al proceso descrito por Craig Larman [6].
El modelado de casos de usos y el modelado
conceptual se realiza a partir de los diagramas de
actividad del modelado del negocio siguiendo las
técnicas descritas en [4] para identificar casos de
uso, vocabulario del sistema y reglas de negocio.
Dentro de una formación básica en orientación
a objetos es obligado incluir los patrones de
diseño o soluciones a problemas recurrentes en el
desarrollo de software OO. Los patrones han
adquirido bastante importancia en la comunidad
software, siendo fundamentales para obtener una
arquitectura software de calidad. En la actualidad,
existe un consenso al considerar que los patrones
de diseño descritos en el libro Design Patterns [3]
son parte del núcleo básico de conocimientos de
informática que un estudiante debe conocer, como
se señala en el Computing Curricula 2001. Casi
la mitad de la parte teórica de la asignatura se
dedicará al estudio detallado de estos patrones,
planteándose ejemplos que implican identificar
qué patrones conviene utilizar.
Dentro de esta parte teórica también se
introduce el problema de la persistencia en
aplicaciones OO, analizándose con detalle el
almacenamiento de objetos en bases de datos
relacionales y presentándose el diseño de un nivel
de persistencia [1,6]. Este diseño también sirve
para ilustrar el uso de patrones.
Las clases prácticas se dedican al principio a
resolver problemas de modelado de casos de uso,
modelado estructural y el diseño de
colaboraciones entre objetos (un total de 5
sesiones de una hora). Es bien sabido que la parte
más difícil del modelado OO es diseñar cómo
deben colaborar un grupo de objetos para realizar
una determinada actividad [3, 6], por lo que se le
presta especial atención. Más adelante se describe
como aplicar el proceso software estudiado en
clase sobre un ejemplo concreto; por ejemplo, se
parte de la especificación de la práctica del curso
anterior (tres sesiones de una hora). Luego se
describe la herramienta que el alumno utilizará
para el modelado, Rational Rose en nuestro caso
(esto conlleva tres sesiones de hora y media).
Finalmente se le plantea al alumno una
especificación de un problema que debe modelar
hasta llegar a una implementación en Java.
El trabajo práctico ideal para esta asignatura
sería un proyecto de desarrollo de una aplicación
para una empresa, desde el modelado del negocio
hasta la implementación. El profesor entregaría al
alumno una especificación de un sistema y el
alumno debería primero hacer el modelado del
negocio y luego aplicar el proceso descrito en [6].
Sin embargo, esto no tiene cabida en una
asignatura cuya carga práctica son tres créditos
por lo que la implementación se limita a unos
pocos casos de uso y no se presta importancia a la
interfaz gráfica y a la persistencia en bases de
datos relacionales.
Los alumnos forman grupos de dos y el
profesor mantiene dos reuniones con los alumnos
para seguir el proyecto, una al acabar el modelado
de casos de uso y modelado conceptual, y otra al
modelar una serie de colaboraciones que son
elegidas por el profesor. El objetivo de la primera
reunión es asegurarnos que el alumno ha
comprendido bien los requisitos, ha identificado
una colección de casos de uso apropiada y los ha
descrito bien, haciendo uso de la plantilla utilizada
en [6]. El objetivo de la segunda entrevista es
comprobar que los alumnos han comprendido bien
cómo diseñar colaboraciones entre objetos. Esta
actividad es la que les resulta más complicada y a
la que dedican mayores esfuerzos.
El modelado del negocio es opcional para los
alumnos, ya que involucra un tiempo considerable
y preferimos llegar a la implementación de alguna
parte del sistema, aunque son bastantes los grupos
que lo desarrollan ya que lo encuentran útil para
identificar los casos de uso. El alumno entrega una
documentación que refleja cada etapa de
aplicación del proceso y cada grupo mantiene una
entrevista final con el profesor en la que se evalúa
el trabajo práctico en su conjunto.
Conviene señalar que este curso cubre los
temas y objetivos de aprendizaje incluidos en SE1
(Software Design) del Computing Curricula 2001
que tienen que ver con el análisis y diseño OO y
patrones de diseño: “seleccionar y aplicar patrones
de diseño apropiados en la construcción de una
aplicación”, “crear y especificar el diseño
software para un producto software de tamaño
medio, usando un método de desarrollo de
software y notación apropiada.
En nuestro caso, este curso también permite
que los alumnos puedan contrastar la aplicación
de un proceso software OO con el análisis y
diseño estructurado que ya conocen de la
asignatura Fundamentos de Ingeniería del
Software de tercer curso. Un aspecto que los
alumnos valoran en gran medida es la trazabilidad
que ofrecen los casos de uso dentro de los
procesos OO: se diseñan colaboraciones que
satisfacen un objetivo que corresponde a un caso
de uso y se implementan clases teniendo en cuenta
las colaboraciones, de modo que es fácil llegar del
código al requisito que implementa. Los alumnos
también valoran positivamente la continuidad
entre las diferentes etapas del proceso, además
notan como todo el trabajo es de utilidad y está
encaminado a escribir código que es lo que hay
que acabar haciendo.
5. La propuesta en las titulaciones técnicas
y los futuros planes
En las titulaciones técnicas creemos necesaria una
asignatura obligatoria que corresponda a IPOO en
el primer cuatrimestre del tercer curso. Se podría
incluir una optativa en el segundo cuatrimestre de
este tercer año con los contenidos de ADOO,
aunque nos parece que el proyecto de la parte
práctica y el estudio de los patrones no puede ser
tan exigente como el caso de la asignatura de
cuarto curso, ya que el alumno tiene menos
tiempo para madurar los conceptos.
Actualmente, en las titulaciones de Sistemas y
Gestión de nuestra facultad, nuestro departamento
oferta una asignatura optativa denominada
Programación Orientada a Objetos (6 créditos)
que coincide con IPOO, aunque con algunas
diferencias en el planteamiento de las prácticas.
Se exige un menor número de ejercicios
individuales y se propone como proyecto de
programación una aplicación de gestión,
guiándoles en la implementación, aunque sin
aplicar un proceso. Este enfoque es motivado por
el hecho que la asignatura no tiene continuidad en
otra de la naturaleza de ADOO. Siempre se elige
una especificación que al menos exija la
definición de una jerarquía de clases y la
existencia de clases parcialmente diferidas con
código genérico (patrón Template Method). Se
introducen los diagramas de clase de UML y se
insiste en la aplicación de heurísticas básicas de
diseño OO como no incluir código de las clases
del modelo en las interfaces y el reparto de
responsabilidades entre clases.
En los futuros planes, que se implantarán el
próximo curso, en Ingeniero en Informática se
mantiene la organización propuesta en este
trabajo, con dos asignaturas que corresponden a
IPOO y ADOO en tercer y cuarto curso,
respectivamente; además se mantienen las
optativas de quinto curso sobre objetos
distribuidos y componentes. En cuanto a las
titulaciones técnicas, la asignatura Programación
Orientada a Objetos será obligatoria en tercer
curso de Sistemas y Gestión. Además, se ha
incluido en la oferta de optativas una asignatura
que corresponde a la descripción de ADOO. La
organización refleja la propuesta presentada por
los autores al departamento sobre la enseñanza de
las materias relacionadas con la OO.
6. Conclusión
Hemos presentado una propuesta de organización
de la enseñanza de las materias relacionadas con
la OO: una asignatura obligatoria de seis créditos
en tercer curso (titulaciones técnicas e Ingeniero
en Informática), destinada a ofrecer una
introducción a los conceptos que configuran el
paradigma OO y una asignatura, también de seis
créditos en cuarto curso (como optativa de tercero
en las técnicas) para describir un proceso basado
en UML y los patrones de diseño básicos. Ambas
asignaturas conforman un curso de doce créditos
sobre OO, con el que los alumnos conseguirán una
buena formación en el desarrollo de software OO
y que coincide con la propuesta curricular de
Computing Curricula 2001. Además, estos dos
cursos preparan al alumno para estudiar otros
aspectos de la tecnología del software como son
las aplicaciones basadas en objetos distribuidos y
el desarrollo basado en componentes.
Este enfoque de la enseñanza de la OO, es
fruto de la colaboración, en los últimos cuatro
años, de los autores de este trabajo al encargarse
de la enseñanza de las asignaturas relacionadas
con IPOO y ADOO, partiendo de la experiencia
del primer autor que hace once años comenzó a
impartir la docencia relacionada con la OO en
nuestra facultad.
Referencias
[1] S. Ambler, Mapping Objects to Relational
Databases,http://www.ambysoft.com/mappin
gObjects.html
[2] Computing Curricula 2001, Final Report,
December 2001, ACM e IEEE, http://www.
computer.org/education/cc2001/final
/index.htm
[3] E. Gamma et al., Design Patterns, Elements of
Reusable Object-Oriented Software, AddisonWesley, 1995.
[4] J. García Molina et al. Towards Use Case and
Conceptual Models Through Business
Modeling, ER2000: 19th International
Conference on Conceptual Modeling, Utah,
USA, 2000. Versión en castellano Un proceso
basado en UML para aplicaciones de gestión
en http://dis.um.es/~jmolina/as.html
[5] J. García Molina, ¿Es conveniente la
orientación a objetos en un primer curso de
programación?, VII Jornadas de Enseñanza
Universitaria de la Informática (JENUI'2001),
Palma de Mallorca, 16-18 de Julio, 2001.
Puede descargarse en http://dis.um.es/
~jmolina/publi.html
[6] C. Larman, Applying UML and patterns,
2ª edición, Prentice-Hall, 2002
[7] B. Meyer, Construcción de Software
Orientado a Objetos, 2ª edición, PrenticeHall, 1998.
[8] A. Riel, Object-Oriented Design Heuristics,
Addison-Wesley, 1996.