Introducción En este curso aprenderéis qué es la orientación a objetos, la importancia que tiene actualmente en la industria del software y la influencia que ha ejercido sobre muchas tecnologías informáticas. Fundamentaréis los conocimientos teóricos aprendiendo un lenguaje orientado a objetos, el Java, tanto en los ejemplos como en los ejercicios del curso. Seguramente, de entre todos los beneficios que ofrece la orientación a objetos, el más importante y el que ha tenido más influencia en el hecho de que toda la industria se volcase en esta nueva tecnología, es el que se conoce con el nombre de reutilización. La reutilización, como veremos, nos permite desarrollar un nuevo sistema aprovechando partes hechas anteriormente. Presentaremos las razones por las que la orientación a objetos permite un nivel tan alto de reutilización pero también veremos que la reutilización no viene sola, sino que se debe diseñar para reutilizar. Aunque normalmente parece que todo el mundo entiende lo mismo por orientación a objetos, veremos que no es así; se dan grandes diferencias entre los diferentes autores, especialmente cuando nos acercamos a los lenguajes de programación. Finalmente, aunque este curso está pensado para personas que ya saben programar y que, por lo tanto, ya saben poner a punto un programa, presentaremos algunas recomendaciones y criterios muy específicos de estos dos temas por lo que respecta a los programas orientados a objetos Objetivos Al final del programa debéis ser capaces de:
Contenidos
Los contenidos de este curso se incluyen en el material web que se adjunta con el curso. El curso está estructurado en dos grandes bloques conceptuales, uno teórico y otro más práctico. En el bloque teórico veréis los conocimientos necesarios para entender qué es la Orientación a Objetos (OO) y cómo se debe programar en este paradigma. Encontramos estos conocimientos estructurados en los módulos siguientes: T1. Génesis, evolución e influencia de la Orientación a Objetos Por otro lado, en el bloque práctico veremos cómo aplicar los conocimientos teóricos en un lenguaje orientado a objetos, que en vuestro caso será Java. Concretamente, estos conocimientos prácticos están repartidos en los módulos siguientes: P1. Introducción a JDK Módulo teórico 1 Objetivos Contenidos Módulo teórico 2 Objetivos Contenidos Módulo teórico 3 Objetivos Contenidos Módulo teórico 4 Objetivos Contenidos Módulo teórico 5 Objetivos Contenidos Módulo práctico 1 Objetivos Contenidos Módulo práctico 2 Objetivos Contenidos Módulo práctico 3 Objetivos Contenidos Módulo práctico 4 Objetivos Contenidos Planificación del aprendizaje
Introducción
Objetivos
Contenidos
Planificación del aprendizaje
Evaluaciσn
Bibliografνa
T2. Qué es la Orientación a Objetos y qué aporta
T3. Conceptos y terminología: objetos y clases
T4. Conceptos y terminología: herencia y relaciones entre clases
T5. Otros aspectos técnicos de la Orientación a Objetos
P2. Introducción al lenguaje Java (I)
P3. Introducción al lenguaje Java (II)
P4. Introducción al AWT
Génesis, evolución e influencia de la Orientación a Objetos
Qué es la Orientación a Objetos y qué aporta
Conceptos y terminología: objetos y clases
Conceptos y terminología: herencia y relaciones entre clases
Otros aspectos técnicos de la Orientación a Objetos
Introducción a JDK
Introducción al lenguaje Java (I)
Introducción al lenguaje Java (II)
Introducción al AWT
La planificación del aprendizaje sirve al participante como punto de referencia a partir del cual acceder al material didáctico del curso. Este material está dividido en dos "libros digitales" en formato UOC, uno para la parte teórica y otro para la parte práctica. Con la ayuda de esta planificación, deberéis realizar un estudio en paralelo de los dos libros.
Consideraciones
Los estudiantes deben estudiar los apuntes en formato web y realizar actividades individuales, que se anunciarán en el tablón del profesor durante el curso.
Por lo que respecta al estudio del material didáctico, conviene remarcar que se hace en paralelo el estudio de la parte teórica y de la parte práctica. Juntamente a este estudio, se considera fundamental la realización tanto de las actividades propuestas en los apuntes (ejercicios y autoevaluación) como las que propondrán los consultores en el tablón del profesor durante el curso. Se recomienda sobre todo no mirar la solución de ninguna actividad antes de haberla resuelto.
Las implicaciones que tiene la realización de las actividades de cara a la nota final se explicitan en el apartado "Evaluación final del curso".
Debe tenerse en cuenta que se trata de actividades individuales; si se da el caso de copia o similitud excesiva entre las prácticas de diferentes estudiantes, el consultor se reserva el derecho de adoptar las medidas oportunas (incluida la decisión de no evaluarlas: calificación E).
Módulo teórico 1. Génesis, evolución e influencia de la Orientación a Objetos
Objetivos |
Contenidos |
Materiales |
Actividades |
Tiempo |
Conocer cómo nació la orientación a objetos y qué problemas resolvió. |
Génesis |
Tema: "Génesis" |
Lectura de los contenidos: El nacimiento de un nuevo paradigma Dos pájaros de un tiro y la vuelta El primer lenguaje de OO: Simula67 |
30 min. |
Conocer también cómo, a partir de aquellas primeras ideas, evolucionó la orientación a objetos y cuáles fueron sus aportaciones posteriores más importantes.
|
Evolución de la orientación a objetos en los lenguajes de programación
|
Tema: "Evolución de la OO en los lenguajes de programación" |
Lectura de los contenidos: Smalltalk y herencia El lenguaje C y la orientación a objetos: genericidad, herencia La introducción de la OO en otros lenguajes de programación: aserciones y programación por contrato, interficies |
40 min. |
Conocer la influencia que ha tenido en otros ámbitos de la industria del software que afectan directamente a todo ingeniero informático. Concretamente, debe revisarse la influencia en las metodologías de análisis y diseño, en las bases de datos, en los sistemas operativos y los entornos gráficos. Obtener una idea de las diferentes
|
Influencia en los diferentes ámbitos de la informática y la industria
|
Tema: "Influencia en la informática y la industria"
|
Lectura de los contenidos: La OO en el análisis y el diseño Les bases de datos y la OO Autoevaluación |
50 min. |
Módulo teórico 2. Qué es la orientación a objetos y qué aporta
Objetivos |
Contenidos |
Materiales |
Actividades |
Tiempo |
Repasar las tecnologías que se integraron hasta llegar a la orientación a objetos. Entender que la orientación a objetos es un nuevo paradigma y, por lo tanto, una nueva manera de ver y modelar la realidad. |
La orientación a objetos, una manera de pensar
|
Tema: "La orientación a objetos, una manera de pensar"
|
Lectura de los contenidos: Introducción a la filosofía Terminología de la orientación a objetos Las tres etapas de Stroustrup |
1 h 20 min. |
Conocer los nuevos conceptos que aporta la OO. |
Los conceptos básicos de la OO |
Tema: "Bases de la OO" |
Lectura de los contenidos: Encapsulación Ocultación de la información Abstracción Clasificación Herencia Polimorfismo |
1 h 20 min. |
Ver cómo los beneficios que nos reporta la orientación a objetos vienen de la sinergia de las diferentes tecnologías que engloba. Conocer los beneficios que aporta la orientación a objetos y las razones por las que se producen, y también el coste o la inversión necesaria para llegar a obtener estos beneficios. También analizar los inconvenientes de una mala aplicación de la orientación a objetos.
|
Beneficios, costes y peligros existentes cuando se usa la OO
|
Tema: "Beneficios, costes y peligros" |
Lectura de los contenidos: Beneficios Costes Peligros Conclusión Autoevaluación |
1 h 20 min. |
Módulo teórico 3. Conceptos y terminología: objetos y clases
Objetivos |
Contenidos |
Materiales |
Actividades |
Tiempo |
Profundizar en los conceptos de clase.
|
Descripción de una clase
|
Tema: "Clase"
|
Lectura de los contenidos: Representación Datos Operaciones Una clase en Java Ejercicio 1.1. |
2 h |
Poder crear y utilizar objetos de una clase. Entender la diferencia entre lenguajes puros y lenguajes híbridos. |
Instanciación y uso de una clase |
Tema: "Instanciación y uso" |
Lectura de los contenidos: Lenguajes puros e híbridos Un primer ejemplo Instanciación Uso |
4 h |
Aprender los conceptos de atributo y servicio. Ver los diferentes grados de visibilidad que pueden tener. Aprender los conceptos de responsabilidad de instancia y responsabilidad de clase. |
Descripción de atributos y servicios |
Tema: "Atributos y servicios" |
Lectura de los contenidos: Terminología Visibilidad Responsabilidades Servicios de clase Atributos de clase Ejercicios 3.1 y 3.2 Autoevaluación |
6 h |
Módulo teórico 4. Conceptos y terminología: herencia y relaciones entre clases
Objetivos |
Contenidos |
Materiales |
Actividades |
Tiempo |
Poder definir subclases mediante la herencia simple y saber qué cambios se pueden introducir en el momento de heredar. Conocer otros tipos de herencia y las implicaciones de cada uno.
Introducir el concepto de interficie y su utilidad para simular de manera eficiente la herencia múltiple y potenciar el polimorfismo.
|
Descripción del mecanismo de herencia
|
Tema: "Herencia"
|
Lectura de los contenidos: ΏQué es la herencia? Herencia simple y múltiple Adaptaciones posibles Polimorfismo Identidad de los objetos Trampas de la herencia Ejercicios 1.1. y 1.2. |
6 h |
Presentar los diferentes tipos de clases desde el punto de vista conceptual y las ventajas e inconvenientes de cada uno de ellos. Saber cuáles están disponibles en Java y cuáles no. |
Descripción de los tipos de clases |
Tema: "Tipos de clases" |
Lectura de los contenidos: Clases abstractas Clases diferidas Clases genéricas Clases terminales |
5 h |
Presentar y utilizar los tres tipos de relaciones existentes en el análisis y diseño y saber cómo se transforman en la programación.
|
Descripción de las relaciones entre clases |
Tema: "Relaciones entre clases" |
Lectura de los contenidos: Utilidad de los diagramas Agregación Asociación Uso Delegación Interficies Propagación |
5 h |
Aprender la programación por contrato que permite usar los formalismos de las aserciones. |
Descripción del mecanismo de la aserción |
Tema: "Programación por contrato" |
Lectura de los contenidos: Precondiciones, postcondiciones e invariantes Aserción y herencia Excepciones Autoevaluación |
4 h |
Módulo teórico 5. Otros aspectos de la Orientación a Objetos
Objetivos |
Contenidos |
Materiales |
Actividades |
Tiempo |
Saber los costes en recursos de hardware del trabajo con lenguajes orientados a objetos y las dificultades que se pueden encontrar si no se adopta un lenguaje con gestión de memoria automática. Conocer un nuevo concepto, las metaclases, poco frecuente pero importante en la inteligencia artificial |
Introducción a otros aspectos de la orientación a objetos. |
Tema: "Conceptos" |
Lectura de los contenidos: Coste en recursos Garbagge collection Metaclases |
1 h |
Conocer los aspectos esenciales de la arquitectura MVC y las razones por las que nos ofrece un nivel tan alto de reutilización.
Aprender los conceptos básicos de los frameworks (marcos de aplicación) y patrones.
Conocer cómo afecta la reutilización a los informáticos por los nuevos roles y la manera de evaluar su productividad. |
Introducción al concepto de reutilización. |
Tema: "Reutilización" |
Lectura de los contenidos: Patrones Frameworks Frameworks: ventajas e inconvenientes Patrones frente a frameworks Roles Productividad Autoevaluación |
1 h |
Módulo práctico 1. Introducción a JDK
Objetivos |
Contenidos |
Materiales |
Actividades |
Tiempo |
Entender qué es Java y conocer sus características. |
Introducción a Java |
Tema: "ΏQué es Java?" |
Lectura de los contenidos: Características Java e Internet Conceptos erróneos comunes de Java ΏPor qué Java? La máquina virtual |
1 h |
Obtener los conceptos necesarios para entender el proceso de instalación y saber en todo momento qué hemos estado instalando. Mostrar el conjunto de utilidades que acompañan a JDK. |
Introducción a JDK, el entorno de desarrollo Java |
Tema: "El entorno de desarrollo Java" |
Lectura de los contenidos: Instalación del JDK Las diferentes versiones del JDK Otros API Java Órdenes disponibles · Órdenes básicas · Órdenes auxiliares Ayuda en JDK Ejercicios 2.1 a 2.3 |
2 h |
Módulo práctico 2. Introducción al lenguaje Java (I)
Objetivos |
Contenidos |
Materiales |
Actividades |
Tiempo |
Conocer la manera de declarar clases en Java e instanciarlas. |
Introducción a la definición e instanciación de las clases
|
Tema: "Objetos y clases" |
Lectura de los contenidos: Declaración de una clase Usar objetos Comparación Ejercicios 5.1. a 5.6. |
9 h |
Conocer los tipos básicos de Java.
|
Introducción a los tipos básicos de Java y a sus agrupaciones más fundamentales: las matrices (arrays). |
Tema: "Tipos de datos" |
Lectura de los contenidos: Tipos de datos simples Matrices |
1 h 30 min. |
Aprender la estructura de los ficheros fuente. |
Definición de las estructuras externas de Java (fichero de código fuente Java).
|
Tema: "Estructura de los ficheros fuente" |
Lectura de los contenidos: Declaración de clases Declaración de métodos de clase Ejemplo de fichero fuente |
1 h 30 min. |
Módulo práctico 3. Introducción al lenguaje Java (II)
Objetivos |
Contenidos |
Materiales |
Actividades |
Tiempo |
Conocer la sintaxis de Java. |
Introducción a la sintaxis de Java
|
Temas: "Elementos básicos", "Expresiones y control de flujo", "Primeros programas" |
Lectura de los contenidos: Comentarios |
4 h |
Conocer cómo se hace la herencia en Java.
|
Introducción al mecanismo de herencia |
Tema: "Herencia |
Lectura de los contenidos: Herencia simple Herencia múltiple Ejercicio 2.1.a 2.6. |
4 h |
Ver la forma de agrupar varias clases dentro de un paquete (package). |
Definición y uso de los packages
|
Tema: "Packages" |
Lectura de los contenidos: Uso de los packages Cómo coloca el compilador los packages |
1 h |
Aprender a tratar excepciones. |
Introducción al mecanismo de excepciones
|
Tema: "Excepciones" |
Lectura de los contenidos: Excepciones en Java Anunciar excepciones Ejercicios 3.1. y 3.2. |
1 h |
Conocer la manera como Java trata la entrada/salida. |
Introducción a la entrada salida estándar en Java
|
Tema: "Entrada/Salida estándar" |
Lectura de los contenidos: Los ficheros: la clase File |
2 h |
Módulo práctico 4. Introducción al AWT
Objetivos |
Contenidos |
Materiales |
Actividades |
Tiempo |
Conocer el AWT, la librería gráfica con un modelo de eventos que proporciona el JDK. Animar al estudiante a estudiar y probar la librería, ya que es una buena introducción a otras librerías de Java, como Swing y Java2D, que son el futuro de los entornos gráficos hechos con Java. Al menos, si se usa el JDK de Sun. Profundizar aún más en el uso de interficies de Java (ya que en AWT se usan muchas interficies, veremos aún más ejemplos de simulación de herencia múltiple en Java mediante interficies). |
Introducción a la librería gráfica AWT.
|
Tema: "Elementos de AWT" |
Lectura de los contenidos: Los componentes Ejercicios 1.1. a 1.9. |
14 h |
Conocer los mecanismos de eventos que ofrece Java. |
Introducción a los mecanismos de eventos.
|
Tema: "Modelo de eventos" |
Lectura de los contenidos: Modelo de eventos en Java 1.1. y 1.2. |
9 h |
Evaluaciσn
La evaluación final consistirá en la combinación de:
Bibliografνa
Bibliografia bàsica
Bertrand, M
. (1997). Object-Oriented Software Construction (2a. ed.). Prentice-Hall.Henderson-Sellers, B.; Edwards, J
. (1994). Booktwo of Object-Oriented Knowledge, The Working Object. Prentice-Hall.Cornell, G.; Horstmann, C.S. (1997). Core Java (2a. ed.). SunSoft Press. Prentice Hall.
Una descripción completa sobre todos los aspectos del lenguaje Java.
Flanagan, D. (1997). JAVA in a nutshell (2a. ed.). OReilly&Associates, Inc.
Un completo manual de referencia de los paquetes de la versión 1.1 de Java.
Geary, D.M. (1997). Graphic JAVA. Mastering the AWT (second edition). SunSoft Press. Prentice Hall.
Describe la manera de usar el paquete AWT.
Campione, M. y otros (1999). The Java Tutorial, Second Edition: Object Oriented Programming for the Internet. SunSoft Press. Prentice Hall.
Un buen libro para aprender a programar en Java desde cero.
Bibliografía complementaria
Fowler, M.; Scott, K. UML Distilled. Addison Wesley Longman Inc.
Eriksson, H.E.; Penker, M. UML Toolkit. John Wiley & Sons.