Programación Orientada a Objetos (21603)
Titulación/estudio: Grado en Ingenieria de Sistemas Audiovisuales
Curso: segundo
Trimestre: primero
Número de créditos ECTS: 4
Horas de dedicación del estudiante: 100 horas
Lenuga o lenguas de la docencia: Catalan y Español
Profesor: Daniel Soto, Anders Jonsson, Miguel Ramírez, Alex Albore, Ayman Moghnieh
1. Presentación de la asignatura
Programación Orientada a Objetos es una asignatura del área de Lenguajes de Programación, altamente relacionada con Fundamentos de la Programación y Estructuras de Datos y Algoritmos (esta última pertenece sólo al Grado de Ingeniería en Informática). El punto de partida es la programación estructurada y la algorítmica básica (conocimientos adquiridos en la asignatura de Fundamentos de Programación), y tiene como objetivo introducir al alumno en el diseño y desarrollo de programas de alto nivel mediante el concepto de objetos.
Esta asignatura precisa necesariamente un conocimiento básico de los conceptos de programación, ya que el paradigma de la programación orientada a objetos está principalmente enfocado a mejorar el diseño de los mismos programas. De esta manera, se introduce el alumno a la creación de programas desde un punto de vista más abstracto que la simple algorítmica básica, promoviendo un buen diseño enfocado a resolver los aspectos más relevantes del problema, al mismo tiempo que lo más específico queda oculto. Así pues, y contrariamente a los cursos orientados a la programación procedimental, donde la sintaxis y semántica del lenguaje son primordiales, este curso está orientado al diseño y estructura de los programas en su conjunto.
El objetivo principal de la asignatura es estudiar los principios necesarios para modelar un programa utilizando diferentes componentes, que se tienen que combinar para conseguir resolver un problema concreto. Además, esto comporta ser capaz de reutilizar componentes ya existentes para la construcción de nuevos programas. También se estudian diferentes técnicas para la definición y construcción de estos componentes.
La organización de la asignatura sigue la siguiente estructura: al principio del curso se estudian los conceptos y principios fundamentales de la programación orientada a objetos, como por ejemplo: la abstracción, la encapsulación y la reutilización. Se define el concepto de objeto como herramienta que modela y describe una entidad capaz de realizar una serie de tareas concretas. También se muestra cómo se aplica el concepto de la delegación de tareas para coordinar el funcionamiento de los diferentes objetos dentro de un programa. En una segunda parte del curso, utilizando los conocimientos básicos anteriores, se introducen conceptos más avanzados como: la herencia, el polimorfismo, la sobrecarga y las interfaces; estudiando especialmente cómo aplicarlos y utilizarlos en la construcción de programas orientados a objetos. En la última parte del curso, se aprende cómo aplicar todos los conceptos en su conjunto para resolver problemas complejos. Esto se desarrolla mediante el estudio del modelado de objetos y sus relaciones, así como la reutilización de código, y también el estudio de problemas concretos resueltos utilizando objetos.
Las diferentes actividades realizadas durante el curso se dividen en:
•· Sesiones de teoría: donde se introducen y se explican los diferentes conceptos y principios de la programación orientada a objetos.
•· Sesiones de prácticas: donde los alumnos, organizados en grupos, tienen que trabajar para implementar programas escritos en lenguaje Java que resuelvan diferentes problemas, aplicando las técnicas expuestas en las clases de teoría.
•· Sesiones de seminarios: donde los alumnos, de forma individual, tienen que diseñar y modelar, utilizando objetos, una solución a los problemas particulares presentados, que más tarde tendrán que implementar en las sesiones de prácticas.
Al final de la asignatura los alumnos estarán capacitados para:
•· Implementar programas utilizando un lenguaje de programación de alto nivel orientado a objetos (especialmente Java).
•· Entender la estructura de un programa existente organizado con objetos.
•· Modelar una solución basada en objetos que resuelva un problema particular.
•· Reutilizar objetos existentes y utilizar y/o implementar interfaces.
2. Competencias que se deben lograr
Esta asignatura presupone que los alumnos conocen los fundamentos de la algorítmica básica y la programación estructurada, y que por lo tanto son capaces de escribir programas y resolver problemas utilizando lenguajes imperativos de alto nivel (competencias adquiridas en la asignatura de Fundamentos de Programación).
Competencias generales
|
Competencias específicas |
Instrumentales 1. Capacidad de análisis del problema 2. Capacidad de abstracción Interpersonales 3. Comprensión de soluciones ya existentes o hechas por otros Sistémicas 4. Creación de soluciones altamente estructuradas 5. Utilización de documentación en el desarrollo 6. Reutilización de soluciones Otras 7. Trabajo colaborativo en el desarrollo de software |
1. Comprensión del rol del objeto en la organización de un programa 2. Capacidad de diseñar soluciones utilizando objetos 3. Dominio de las técnicas básicas de la programación orientada a objetos (herencia, abstracción, polimorfismo) 4. Reutilización de código utilizando clases existentes 5. Utilización del concepto de interfaz para relacionar objetos 6. Poder entender y escribir código en Java
|
El objetivo principal de la asignatura es la adquisición de las competencias necesarias para poder trabajar en el desarrollo de software (diseño y implementación) utilizando el paradigma de la programación orientada a objetos. Esto incluye otros objetivos parciales como por ejemplo adquirir la capacidad de abstracción necesaria para encapsular soluciones parciales dentro de un objeto, relacionar correctamente diferentes objetos dentro de un programa para dar una solución bien estructurada a un problema concreto, y reutilizar elementos existentes dentro de los mismos programas. De forma paralela, también se incluye el objetivo del dominio elemental de un lenguaje de programación de alto nivel orientado a objetos, como por ejemplo el lenguaje Java. Finalmente también se define el objetivo de entender y escribir diagramas que reflejan la estructura de un programa orientado a objetos.
De forma concreta, al final de la asignatura se espera que el alumno pueda:
•a) Entender un programa escrito en un lenguaje orientado a objetos.
•b) Implementar un programa escrito en un lenguaje orientado a objetos.
•c) Comprender la estructura de un programa existente organizado con objetos.
•d) Construir una solución de un determinado problema utilizando objetos.
•e) Reutilizar objetos existentes en los mismos programas.
•f) Definir e implementar interfaces para conectar diferentes objetos dentro de un programa.
•g) Escribir y leer código en lenguaje Java.
3. Contenidos
Bloque 1. Introducción: el concepto de objeto
Conceptos |
Procedimientos |
1. Definición intuitiva de un objeto 2. Resolución de problemas con objetos 3. Delegación de tareas 4. Cómo relacionar objetos entre si 5. El uso de objetos en la programación |
|
Bloque 2. El paradigma de la programación orientada a objetos
Conceptos |
Procedimientos |
1. Clase 2. Instancia 3. Jerarquía de clases 4. Abstracción 5. Encapsulación |
Definición de las clases, sus atributos y métodos
|
Bloque 3. Técnicas fundamentales: herencia y polimorfismo
Conceptos |
Procedimientos |
1. Herencia 2. Polimorfismo 3. Sobrecarga 4. Reescritura
|
Heredar miembros de una superclase Modificación del comportamiento y la estructura de una clase |
Bloque 4. Conceptos avanzados: interfaces y clases abstractas
Conceptos |
Procedimientos |
1. Métodos abstractos 2. Clases abstractas 3. Interfaces 4. Conexión de objetos mediante interfaces |
Diseño de clases con métodos abstractos y implementación en sus subclases Desarrollo de interfaces para la organización de los programas Implementación de interfaces |
Bloque 5. Modelado de objetos y relaciones entre objetos
Conceptos |
Procedimientos |
1. Diseño de clases 2. Técnicas de modelado de objetos 3. Relaciones entre objetos 4. Combinación de objetos para resolver problemas concretos
|
Diseño de soluciones a problemas utilizando distintas clases Implementación de programas utilizando una solución modelada con objetos |
Bloque 6. Reutilización y estudio de problemas resueltos con objetos
Conceptos |
Procedimientos |
1. Reutilización de clases existentes 2. Implementación de interfaces 3. Estudio de casos particulares de problemas |
Utilización de clases complejas existentes en los mismos programas Reutilización de clases para definir nuevas clases Utilización y implementación de interfaces definidas con un API concreto |
Bloque 7. Herramientas avanzadas y programación visual
Conceptos |
Procedimientos |
1. Herramientas de modelar 2. Programación visual 3. El futuro de la POO |
|
4. Evaluación
La evaluación de la asignatura se basa en evaluar el aprendizaje de los alumnos en cada uno de los contenidos presentados. Las herramientas utilizadas para la realización de esta evaluación son las siguientes:
•a) Seguimiento individualizado continuo en las clases prácticas y seminarios.
•b) Evaluación mediante un examen teórico individual.
•c) Evaluación conjunta de las prácticas.
•d) Evaluación conjunta de los ejercicios realizados en los seminarios.
Cada tarea será evaluada con una nota numérica con un valor entre 0 y 10. La siguiente tabla presenta una visión completa de la evaluación para realizar:
Tipo de avaluación |
Incidencia cualificación |
Agente responsable de la evaluación |
Agrupación |
% |
||||
Obligatoria |
Optativa |
Docente |
Autoevaluación |
Coevaluación |
individual |
grupos |
|
|
Continuada |
Ejercicios seminarios |
|
Profesor seminario |
|
|
X |
|
10% |
Formativa |
Prácticas |
|
Profesor prácticas |
|
|
|
X |
40% |
Final |
Examen final |
|
Profesor teoría |
|
|
X |
|
50% |
Para aprobar la asignatura será necesario superar con un 50% cada grupo de evaluación, siendo condición necesaria tener una nota igual o superior a 5,0 (sobre 10) tanto en el apartado de prácticas como en el del examen final.
En caso de no superar correctamente alguna de las evaluaciones, el alumno tendrá el derecho de mantener la misma nota en los apartados superados para la segunda convocatoria.
Para la segunda convocatoria de la asignatura sólo se evaluarán las prácticas y el examen extraordinario de setiembre. El contenido de las prácticas será similar, pero no idéntico, al que se haya dado durante el curso; y se tendrá que hacer en una única entrega según las indicaciones del profesor.
5. Bibliografía y recursos didácticos
5.1. Bibliografía básica
Teoría:
Meyer: Object Oriented Software Construction (disponible en español "Construcción de Software Orientado a Objetos")
Horstmann: Object Oriented Design and Patterns
Prácticas:
Eckel: Thinking in Java (disponible en español "Piensa en Java" y en versión online)
Arnold, Gosling, Holmes: Java Programming Language (disponible en español "El lenguaje de programación Java")
5.2. Bibliografía complementaria
Netbeans: http://java.sun.com/developer/onlineTraining/tools/netbeans_part1/
5.3. Recursos didácticos
En el aula digital Campus Global (Moodle) de la asignatura se publicará el siguiente material docente:
- Apuntes de las clases de teoría
- Enunciados y apuntes de las clases prácticas
- Enunciados de las sesiones de seminarios
- Enlaces a información complementaria
6. Metodología
En esta sección se presenta de forma resumida la metodología de aprendizaje que se utilizará en la asignatura. Esta guía es especialmente útil para los alumnos porque podrán conocer las actividades que están planificadas para el aprendizaje y organizar de esta manera los esfuerzos que tendrán que dedicar. Todas las actividades están englobadas dentro de los siguientes ámbitos:
•· Actividades presenciales (las realizadas dentro del aula)
•· Actividades dirigidas (les realizadas fuera del aula)
•· Actividades autónomas (las que realiza el alumnado de forma individual)
•· Actividades de aprendizaje en equipo (las que se llevan a cabo con otros alumnos y sin supervisión directa)
Sesiones de teoría
En las sesiones de teoría los alumnos participarán de forma presencial recibiendo los conocimientos teóricos explicados por parte del profesor. Estas clases se complementan con los apuntes de teoría que los alumnos podrán revisar en actividades autónomas.
En las sesiones de teoría estarán presentes todos los alumnos de un determinado grupo.
Sesiones de prácticas
Les sesiones de prácticas se organizan en dos tipos de actividades:
En la primera actividad, de tipo presencial, los alumnos reciben las explicaciones del profesor sobre los objetivos específicos que se tratarán en la sesión para realizar, así como también los conocimientos técnicos necesarios para poder llevar a cabo la tarea propuesta.
En la segunda actividad, de aprendizaje en equipo, los alumnos ponen en práctica todos los conocimientos adquiridos para realizar los objetivos propuestos. Esta actividad continuará fuera del aula hasta conseguir el objetivo necesario.
En las sesiones de prácticas los alumnos se organizan en grupos de dos personas para la realización de las diferentes actividades.
Sesiones de seminarios
En las sesiones de seminarios se plantean diferentes ejercicios planeados para dirigir al alumno de forma didáctica en la resolución correcta de diferentes ejercicios. Esta actividad será siempre de tipo presencial y autónoma, ya que el objetivo es ayudar al alumno a razonar con un cierto grado de abstracción para diseñar una determinada solución.
En cada seminario participará sólo un grupo reducido de alumnos (subgrupo) según el calendario establecido de la asignatura. Al final de cada sesión los alumnos tendrán que entregar los ejercicios realizados para evaluar su progreso y poder recibir comentarios del profesor en la siguiente sesión.
Actividades de aprendizaje autónomo
Para la realización de ciertas actividades, como por ejemplo la implementación de un determinado programa o la preparación de una sesión de seminarios, se espera que el alumno sea responsable en la adquisición de los conocimientos y habilidades complementarios necesarios para poder completar la actividad. Especialmente se incluyen en este conjunto las consultas de documentación técnica, bibliografía y otras guías para la codificación de los programas. Igualmente se incluye la revisión previa de material complementario recomendado por el profesor para la realización de determinados seminarios.
Actividades de aprendizaje en grupo
Las actividades de aprendizaje en grupo son principalmente las relacionadas con las sesiones de prácticas. No obstante, las actividades en grupo serán sólo presenciales durante estas sesiones prácticas, y no dirigidas durante el resto del tiempo necesario para completar su realización.