Download facultad de informatica/ universidad de murcia

Document related concepts
no text concepts found
Transcript
FACULTAD DE INFORMATICA/ UNIVERSIDAD DE MURCIA
ASIGNATURA: DISEÑO DE PROGRAMAS
Curso: 2001/02
Titulación: Ingeniero en Informática
Ciclo: Primero
Curso: 3
Cuatrimestre: Primero
Carácter: Troncal
Créditos: 7 (4T+3P)
Profesor: Jesús García Molina y Marcos Menarguez Tortosa
Departamento: Informática y Sistemas
OBJETIVOS
Se introduce al alumno en el paradigma de programación orientado a objetos, OO. Los objetivos de la
asignatura son:
i)
ii)
iii)
iv)
v)
Describir los conceptos que caracterizan al modelo OO
Valorar en que medida las técnicas OO favorecen la calidad del software, analizando sobre
todo cómo facilitan la reutilización y extensibilidad,
Contrastar cómo diferentes lenguajes de programación OO (Eiffel, C++, Java y Smalltalk)
reflejan los conceptos del paradigma.
Enseñar un lenguaje OO, junto a un entorno de programación.
Introducir técnicas de diseño y programación OO
JUSTIFICACION DEL PROGRAMA
La asignatura introduce los conceptos básicos de la programación orientada a objetos: clases, objetos y
herencia, mostrando el contraste en la forma en que los cuatro lenguajes de programación OO más
extendidos reflejan estos conceptos. Es importante que el alumno no adquiera la visión de la orientación a
objetos ofrecida por un determinado lenguaje, sino que comprenda los conceptos de una forma
independiente del lenguaje. También se introduce al alumno en el terreno de la construcción de software
OO, presentando técnicas de diseño y programación OO que se completarán en cuarto curso en la
asignatura de Arquitectura del Software.
En las clases prácticas se presentará un lenguaje de programación OO concreto y se discutirán ejercicios
para aplicar los conocimientos adquiridos en teoría. El lenguaje de programación elegido es Java por los
motivos que se exponen abajo. Además de estudiar cómo incorpora Java los conceptos que caracterizan la
OO, se abordarán los aspectos básicos del lenguaje como: entrada/salida, manejo de cadenas, etc. y otras
características avanzadas como son la programación con hilos y el diseño de interfaces gráficas.
Como trabajo práctico el alumno deberá resolver un conjunto de ejercicios de programación y un
proyecto de desarrollo de una pequeña aplicación, con el objetivo de llevar al terreno práctico los
conceptos explicados y adquirir algunas destrezas relacionadas con la programación OO, así como
manejar un entorno de desarrollo.
A la hora de elegir el lenguaje para la realización de las prácticas, existen cinco lenguajes candidatos, con
los cuales se desarrolla la mayor parte de aplicaciones OO: C++, Java, Smalltalk, Eiffel y Delphi. El
lenguaje elegido debería tener las siguientes buenas propiedades: orientado a objetos puro, reflejar con
claridad los conceptos OO, legibilidad, expresividad, pequeño, tipado estáticamente, soporte para la
corrección. Además, sería ideal que estuviese muy extendido su uso en las empresas, debería existir un
entorno de programación adecuado para la docencia (fácil de aprender y manejar, robusto, requisitos
software y hardware mínimos), debería disponerse de abundante y buena documentación y ser de libre
distribución.
En años anteriores hemos usado Smalltalk por acercarse más a ese lenguaje ideal, no optando por Eiffel
(muy buenas propiedades, pero entornos que necesitan muchos recursos, no hay versiones de libre
distribución y poco extendido), ni C++ (híbrido, muy complicado, poco legible). Al aparecer Java, y a
pesar de su rápido éxito, no apostamos por él ya que todavía no era un lenguaje estable, no se disponían
de buenos entornos y por la inercia al cambio, ya que entendíamos que Smalltalk permitía cumplir los
objetivos y disponíamos de mucha experiencia y documentación. Sin embargo, el curso pasado nos
decidimos por el cambio ya que Java reúne la mayoría de las propiedades del lenguaje ideal, siendo
importante la demanda de las empresas de programadores con conocimientos en Java. Además Java es sin
duda el lenguaje más utilizado para el desarrollo de aplicaciones web.
La asignatura proporcionará al alumno conocimientos suficientes para abordar el estudio de cualquier
lenguaje OO, método de análisis y diseño OO, de los sistemas gestores de bases de datos OO, y en
general de cualquier materia basada en el paradigma orientado a objetos.
Creemos que se trata de una asignatura básica en la formación del alumno ya que desde hace años existe
un consenso al reconocer que el paradigma OO es el más adecuado para producir software de calidad, de
modo que las empresas de desarrollo de software han adoptado la tecnología OO.
PROGRAMA DE TEORIA
TEMA 1.
ORIENTACION A OBJETOS, UNA TECNICA PARA MEJORAR LA
CALIDAD DEL SOFTWARE.
1.1. Definición de paradigma de programación. Clasificación
1.2. Algunos comentarios sobre la crisis del software.
1.3. Factores Internos y Externos en la Calidad del Software
1.4. Modularidad.
1.5. Evolución del concepto de módulo en los lenguajes de programación.
1.6. Reutilización del Software: Requisitos para obtener módulos reutilizables.
1.7. Rutinas, Módulos, Sobrecarga y Genericidad como mecanismos de reutilización.
1.8. Problemas con el diseño descendente.
1.9. Diseño orientado a objetos:
- Definición
- Clases y Tipos Abstractos de Datos
Referencias: [Meyer98; Parte A y B]
TEMA 2. CLASES Y OBJETOS
2.1. Clases
- Estructura
- Dualidad módulo-tipo
- Ocultación de la información.
- Relaciones entre clases: Cliente-Servidor y Herencia
- Visibilidad
2.2. Objetos
2.3. Mensajes
- Sintaxis. Notación Punto
- Semántica
2.4. Semántica referencia versus Semántica almacenamiento
2.5. Creación de Objetos
2.6. Modelo de Ejecución Orientado a Objetos
2.7. Semántica de la Asignación e Igualdad entre objetos
2.8. Genericidad
2.9. Clases y Objetos en Eiffel, C++ y Smalltalk
2.10. Ejemplo: Definición de una clase "Lista Lineal"
Referencias: [Meyer98; Parte C: cap. 7, 8 y 10]
TEMA 3. HERENCIA
3.1. Introducción
3.2. Doble aspecto de la herencia.
3.3. Polimorfismo.
- Tipo estático vs. Tipo Dinámico
- Regla de aplicación de propiedades.
- Compatibilidad de asignación
- Estructuras de datos polimórficas
3.4. Ligadura Dinámica.
3.5. Clases Diferidas
- Clases Parcialmente Diferidas
- Código Genérico
- Herencia, Reutilización y Extensibilidad del software.
3.6. Herencia múltiple.
- Problemas: Colisión de nombres y herencia repetida
- Ejemplos de utilidad
- Resolución de la herencia repetida
3.7. Genericidad Restringida
3.8. Intento de Asignación
3.9. Herencia en Eiffel, C++ y Smalltalk: Estudio Comparativo
- Mecanismos para la adaptación de propiedades
- Herencia múltiple en Eiffel y C++
- Herencia repetida en Eiffel y C++
3.10. Implementación de la herencia
- Herencia Simple en Smalltalk
- Herencia Simple en C++
- Herencia Múltiple en C++
3.11. Herencia y Ocultación de la Información
Referencias: [Meyer98; Parte C: cap. 14, 15, 16 y 24]
TEMA 4. HEURISTICAS PARA EL DISEÑO OO
4.1. ¿Cómo encontrar las clases?
4.2. Uso de la herencia
4.3. Herencia versus Clientela
4.4. Categorías de herencia: una taxonomía
4.5. Análisis de la herencia de especialización y de la herencia de implementación
4.6. Heurísticas de A. Riel
4.7. Ejemplos de diseño OO:
Referencias: [Meyer98; 21, 22, 23 y 24] y [Riel96]
TEMA 5. CORRECCION DE CLASES: PROGRAMACION POR CONTRATO.
5.1. Clases y Corrección del software: Asertos.
5.2. Asertos en rutinas: Precondiciones y Postcondiciones. Notación especial
5.3. Contrato software.
5.4. Invariante de clase.
5.7. Utilidad de las aserciones.
5.8. Excepciones
- Manejo de casos excepcionales: Esquema "a priori", Esquema "a posteriori”y
Excepciones.
- Definición de fallo, excepción y error.
- Manejo disciplinado de excepciones en Eiffel.
- Ejemplos de uso de excepciones.
5.9 Excepciones en Java
Referencias: [Meyer98; Parte C: cap. 11 y 12] y [Arnold01, cap. 8]
PROGRAMA DE PRACTICAS
Lección 1.
Lección 2.
Lección 3.
Lección 4.
Lección 5.
Lección 6.
Lección 7.
Lección 8.
Lección 9.
Lección 10.
Lección 11.
Lección 12.
Lección 13.
Lección 14.
Lección 15.
Lección 16.
Lección 17.
Lección 18.
Lección 19.
Lección 20.
Lección 21.
Lección 22.
El lenguaje Java.
Entorno de programación.
Clases y objetos
Paquetes.
Documentación del código.
Cadenas.
Entrada/Salida.
Clases envolventes.
Herencia.
Genericidad.
Identidad e igualdad.
Asignación y copia.
Excepciones.
Clases abstractas.
Interfaces.
Colecciones.
Serialización.
Hilos.
Clases anidadas.
Modelo de delegación de eventos.
Programación de interfaces gráficas.
Patrones de diseño.
METODOLOGÍA Y TEMPORALIZACIÓN DE LAS PRACTICAS
El programa de prácticas de la asignatura se desarrollará en el laboratorio. En cada sesión se explicarán
los conceptos teóricos y se profundizará en ellos programando sencillos ejercicios. Además de estos
ejercicios de laboratorio, se irán proponiendo otros ejercicios individuales para que el alumno los
realice fuera de las sesiones de prácticas. Una vez completado el programa de prácticas se propondrá un
proyecto de programación que será realizado en grupos de 2 alumnos.
Las sesiones prácticas comenzarán la segunda semana de clase y finalizarán la última semana antes de las
vacaciones de Navidad. La asistencia no es obligatoria. A la vuelta de vacaciones será propuesto el
proyecto final.
La entrega de los ejercicios individuales para la convocatoria de junio finaliza dos semanas después del
regreso de las vacaciones de Navidad. El plazo para entregar el proyecto de programación acabará el día
del examen de teoría en las tres convocatorias. Los ejercicios serán distintos en cada convocatoria, siendo
opcional la entrega de los ejercicios del laboratorio.
HERRAMIENTAS SOFTWARE Y LENGUAJES DE PROGRAMACIÓN
El lenguaje de programación de las prácticas será Java, utilizando la versión más actual del JDK (Java
Development Kit) de Sun.
Como principal entorno de programación se dispondrá de Kawa, integrado con el JDK. Para el desarrollo
de interfaces gráficas trabajaremos con los entornos JBuilder y VisualCafé.
BIBLIOGRAFIA TEORIA
Básica.
1.
2.
3.
Arnold, K. y Gosling, J., “El lenguaje de programación Java”, Addison-Wesley, 3ª Ed., 2001.
Meyer, B., "Construcción de Software Orientado a Objetos", 2ª edición, Prentice-Hall, 1998.
Stroustrup, B., "El Lenguaje de Programación C++", 3ª Edición, Addison-Wesley/Diaz de
Santos, 2000.
Complementaria
1.
2.
3.
4.
5.
Budd, T., "Introducción a la Programación Orientada a Objetos", Addison-Wesley, 1994.
Goldberg, A. y Robson, D., "Smalltalk-80. The Language". Addison- Wesley, 1989.
Joyner, I., Objects Unencapsulated. Java, Eiffel y C++??, Prentice-Hall, 1999
Meyer, B., "Eiffel: The Language", Prentice-Hall, 1992.
Riel, A., Object-Oriented Design Heuristics, Addison-Wesley, 1996.
BIBLIOGRAFIA PRACTICAS
Básica
1.
2.
3.
Arnow, D. y Weiss, G. “Introducción a la programación con Java”, Addison-Wesley, 2000.
Arnold, K., Gosling, J. y Jomes, D. “El lenguaje de Programación Java”, 3ª Edición, AddisonWesley, 2001.
Eckel, B. “Thinking in Java”, 2ª Edición, Prentice-Hall, 2000.
Complementaria
1.
2.
3.
4.
Jaworski, J. “Java 1.2 al descubierto”, Prentice-Hall,1998.
Deitel, H. M. y Deitel, P.J., “Cómo programar en Java”, Prentice-Hall , 1998.
Froufe, A., “Java 2 : manual de usuario y tutorial”, RA-MA, 1999.
Flanagan, David, “Java en pocas palabras: referencia al instante”, 2ª Edición, O'Reilly, 1999.
Documentación electrónica
1.
2.
3.
Java en Sun: http://java.sun.com.
Versión electrónica del libro “Thinking in Java”: http://www.mindview.net/Books/TIJ/
Documentación del JDK.
EVALUACION
Se realizará un examen teórico de cuestiones teórico-prácticas del mismo tipo que en años anteriores. El
alumno dispondrá de una colección de preguntas de otros años. Si un alumno supera el examen teórico
(Nota 5) se mantiene el aprobado en las siguientes convocatorias del curso académico.
La nota de prácticas de la asignatura se calculará como la media ponderada entre los ejercicios (40%) y el
proyecto de programación (60%). Para la evaluación del proyecto se realizará una entrevista individual
con el alumno. Durante esa entrevista también serán evaluados los conceptos del programa de prácticas,
suponiendo un suspenso, tanto en los ejercicios como en el proyecto, si la evaluación no es positiva. La
presentación de los ejercicios de laboratorio supondrá, como máximo, un +10% sobre la nota de prácticas
de la asignatura. Se hará la media de ambas partes sólo si han sido aprobadas por superado (nota >= 5).
No podrán presentar el proyecto de programación los alumnos que no hayan aprobado o presentado los
ejercicios. Se mantendrá el aprobado en los ejercicios hasta la convocatoria de diciembre. Por último, los
alumnos que suspendan el proyecto de programación en alguna convocatoria, realizarán un proyecto
distinto para la siguiente.
Para aprobar la asignatura el alumno debe haber superado las prácticas y la teoría.
Nota final = 0.6Nota-Teoría + 0.4Nota-Prácticas