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: 2002/03
Titulación: Ingeniero en Informática
Curso: Tercero
Duración: Semestral
Carácter: Troncal
Créditos: 7 (4T+3P)
Profesores: Jesús García Molina y Begoña Moros Valle
Páginas Web: http://dis.um.es/~jmolina/ y http://dis.um.es/~bmoros/
Departamento: Informática y Sistemas
Tutorías (J. García Molina): Martes y Miércoles de 10-12, Viernes 16-18
OBJETIVOS
Se introduce al alumno en el paradigma de programación orientada 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 algunas 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.
El lenguaje elegido para la realización de las prácticas 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. Existen varios lenguajes candidatos, con los cuales se
desarrolla la mayor parte de aplicaciones OO: C++, Java, Smalltalk, Eiffel y Delphi (ahora también
debemos considerar C#).
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, hace dos cursos 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. DISEÑO POR CONTRATO: ASERTOS Y EXCEPCIONES
3.1. Clases y Corrección del software: Asertos.
3.2. Asertos en rutinas: Precondiciones y Postcondiciones. Notación especial
3.3. Contrato software.
3.4. Invariante de clase.
3.5. Utilidad de las aserciones.
3.6. Excepciones en Eiffel
3.7. Asertos en Java
3.8. Excepciones en Java
Referencias: [Meyer98; Parte C: cap. 11 y 12] y [Arnold01, cap. 8]
TEMA 4. HERENCIA
4.1. Introducción
4.2. Doble aspecto de la herencia.
4.3. Polimorfismo.
- Tipo estático vs. Tipo Dinámico
- Regla de aplicación de propiedades.
- Compatibilidad de asignación
- Estructuras de datos polimórficas
4.4. Ligadura Dinámica.
4.5. Clases Diferidas
- Clases Parcialmente Diferidas
- Código Genérico
- Herencia, Reutilización y Extensibilidad del software.
4.6. Herencia múltiple.
- Problemas: Colisión de nombres y herencia repetida
- Ejemplos de utilidad
- Resolución de la herencia repetida
4.7. Genericidad Restringida
4.8. Intento de Asignación
4.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++
4.10. Implementación de la herencia
- Herencia Simple en Smalltalk
- Herencia Simple en C++
- Herencia Múltiple en C++
4.11. Herencia y Ocultación de la Información
Referencias: [Meyer98; Parte C: cap. 14, 15, 16 y 24]
TEMA 5. HEURISTICAS PARA EL DISEÑO ORIENTADO A OBJETOS
5.1. ¿Cómo encontrar las clases?
5.2. Uso de la herencia
5.3. Herencia versus Clientela
5.4. Categorías de herencia: una taxonomía
5.5. Análisis de la herencia de especialización y de la herencia de implementación
5.6. Heurísticas sobre el reparto de responsabilidades
Referencias: [Meyer98; 21, 22, 23 y 24] y [Riel96]
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.
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.
Clases anidadas.
Modelo de delegación de eventos.
Desarrollo de aplicaciones con interfaces gráficas.
METODOLOGÍA Y TEMPORALIZACIÓN DE LAS PRACTICAS
El programa de prácticas de la asignatura se desarrollará en varias sesiones de laboratorio que se
impartirán en el Laboratorio 1/5 de la Facultad de Informática. En cada sesión se explicarán los conceptos
teóricos y se profundizará en ellos mediante sencillos ejercicios de programación. Para ello se propondrán
ejercicios que el alumno deberá realizar de forma individual y entregará en el plazo establecido. Una vez
acaben las sesiones de laboratorio se propondrá un proyecto de programación que será realizado en
grupos de dos alumnos.
Las sesiones prácticas comenzarán la tercera semana de clase y constarán de unas nueve sesiones de dos
horas. A principios de enero se propondrá el proyecto final. El plazo para entregar este proyecto acabará
el día del examen de teoría en las tres convocatorias.
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 entorno de programación se utilizará JBuilder 7 Personal, integrado con el JDK.
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.
Budd, T., "Introducción a la Programación Orientada a Objetos", Addison-Wesley, 1994.
Budd, T.,“An Introduction to Object-Oriented Programming”, 3ª ed., Addison-Wesley, 2002.
3.
4.
5.
6.
7.
B. Liskov y J. Guttag, “Program Development in Java: Abstraction, Specification, and ObjectOriented Design”, Addison-Wesley, 2001
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. “Piensa en Java”, 2ª Edición, Prentice-Hall, 2002.
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.
No podrán presentar el proyecto de programación los alumnos que no hayan aprobado los ejercicios. Se
mantendrá el aprobado en los ejercicios hasta la convocatoria de diciembre. 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. Si un alumno supera las prácticas se mantiene el
aprobado en las siguientes convocatorias del curso académico.
Para aprobar la asignatura el alumno debe haber superado las prácticas y la teoría. La nota final de la
asignatura se calculará como la media ponderada entre la nota de teoría (60%) y la nota de prácticas
(40%).