Se introduce al alumno en el paradigma de programación orientada a objetos, OO. Los objetivos de la asignatura son:
i) Describir los conceptos que caracterizan al modelo OO
ii) Valorar en que medida las técnicas OO favorecen la calidad del software, analizando sobre todo cómo facilitan la reutilización y extensibilidad,
iii) Contrastar cómo diferentes lenguajes de programación OO (Eiffel, C++, Java y Smalltalk) reflejan los conceptos del paradigma.
iv) Enseñar un lenguaje OO, junto a un entorno de programación.
v) Introducir técnicas de diseño y programación OO
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 tres 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.
TEMA 1. ORIENTACION A OBJETOS, UNA TECNICA PARA MEJORAR LA CALIDAD DEL SOFTWARE.
1.1. Definición de paradigma de programación. ClasificaciónTEMA 2. CLASES Y OBJETOS
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 objetosReferencias: [Meyer98; Parte A y B]
2.1. ClasesTEMA 3. DISEÑO POR CONTRATO: ASERTOS Y EXCEPCIONES
- 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]
3.1. Clases y Corrección del software: Asertos.TEMA 4. HERENCIA
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 JavaReferencias: [Meyer98; Parte C: cap. 11 y 12] y [Arnold01, cap. 8]
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 Diferida
- 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]
Lección 1. El lenguaje Java.
Lección 2. Entorno de programación.
Lección 3. Clases y objetos
Lección 4. Paquetes.
Lección 5. Documentación del código.
Lección 6. Cadenas.
Lección 7. Entrada/Salida.
Lección 8. Clases envolventes.
Lección 9. Herencia.
Lección 10. Genericidad.
Lección 11. Identidad e igualdad.
Lección 12. Asignación y copia.
Lección 13. Excepciones.
Lección 14. Clases abstractas.
Lección 15. Interfaces.
Lección 16. Colecciones.
Lección 17. Serialización.
Lección 18. Hilos.
Lección 19. Clases anidadas.
Lección 20. Modelo de delegación de eventos.
Lección 21. Desarrollo de aplicaciones con interfaces gráficas
Básica
1. Arnold, K. y Gosling, J., “El
lenguaje de programación Java”, Addison-Wesley, 3ª
Ed., 2001.
2. Meyer, B., "Construcción
de Software Orientado a Objetos", 2ª edición, Prentice-Hall,
1998.
3. Stroustrup, B., "El Lenguaje
de Programación C++", 3ª Edición, Addison-Wesley/Diaz
de Santos, 2000.
Bibliografía Complementaria
1. Budd, T., "Introducción
a la Programación Orientada a Objetos", Addison-Wesley, 1994.
2. Budd, T.,“An Introduction to
Object-Oriented Programming”, 3ª ed., Addison-Wesley, 2002.
3. B. Liskov y J. Guttag, “Program
Development in Java: Abstraction, Specification, and Object-Oriented Design”,
Addison-Wesley, 2001
4. Goldberg, A. y Robson, D., "Smalltalk-80.
The Language". Addison- Wesley, 1989.
5. Joyner, I., Objects Unencapsulated.
Java, Eiffel y C++??, Prentice-Hall, 1999
6. Meyer, B., "Eiffel: The Language",
Prentice-Hall, 1992.
7. Riel, A., Object-Oriented
Design Heuristics, Addison-Wesley, 1996.
Bibliogafía Prácticas
Básica
1. Arnow, D. y Weiss, G. “Introducción
a la programación con Java”, Addison-Wesley, 2000.
2. Arnold, K., Gosling, J. y Jomes,
D. “El lenguaje de Programación Java”, 3ª Edición, Addison-Wesley,
2001.
3. Eckel, B. “Piensa en Java”, 2ª
Edición, Prentice-Hall, 2002.
Bibliografía Complementaria
1. Jaworski, J. “Java 1.2 al descubierto”,
Prentice-Hall,1998.
2. Deitel, H. M. y Deitel, P.J.,
“Cómo programar en Java”, Prentice-Hall , 1998.
3. Froufe, A., “Java 2 : manual
de usuario y tutorial”, RA-MA, 1999.
4. Flanagan, David, “Java en pocas
palabras: referencia al instante”, 2ª Edición, O'Reilly, 1999.
1. Java en Sun: http://java.sun.com.
2. Versión electrónica
del libro “Thinking in Java”: http://www.mindview.net/Books/TIJ/
3. Documentación del JDK.
Tema 1Orientación a Objetos una técnica para mejorar la calidad del software 2003-2004
Tema 2 Clases y Objetos Curso 2003-2004
Tema 3 Programación por contrato Curso2003-2004
Tema 4 Herencia Curso 2003-2004
Ejercicio adicional (Iterador con Filtro)
Especificación
Práctica Final 2002-2003